@violetix/baileys 0.0.0-stage → 0.4.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 (458) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3017 -2
  3. package/WAProto/index.d.ts +15932 -0
  4. package/WAProto/index.js +115856 -0
  5. package/engine-requirements.js +13 -0
  6. package/lib/Defaults/index.d.ts +145 -0
  7. package/lib/Defaults/index.d.ts.map +1 -0
  8. package/lib/Defaults/index.js +157 -0
  9. package/lib/Defaults/index.js.map +1 -0
  10. package/lib/Signal/Group/ciphertext-message.d.ts +10 -0
  11. package/lib/Signal/Group/ciphertext-message.d.ts.map +1 -0
  12. package/lib/Signal/Group/ciphertext-message.js +12 -0
  13. package/lib/Signal/Group/ciphertext-message.js.map +1 -0
  14. package/lib/Signal/Group/group-session-builder.d.ts +8 -0
  15. package/lib/Signal/Group/group-session-builder.d.ts.map +1 -0
  16. package/lib/Signal/Group/group-session-builder.js +30 -0
  17. package/lib/Signal/Group/group-session-builder.js.map +1 -0
  18. package/lib/Signal/Group/group_cipher.d.ts +11 -0
  19. package/lib/Signal/Group/group_cipher.d.ts.map +1 -0
  20. package/lib/Signal/Group/group_cipher.js +82 -0
  21. package/lib/Signal/Group/group_cipher.js.map +1 -0
  22. package/lib/Signal/Group/index.d.ts +12 -0
  23. package/lib/Signal/Group/index.d.ts.map +1 -0
  24. package/lib/Signal/Group/index.js +12 -0
  25. package/lib/Signal/Group/index.js.map +1 -0
  26. package/lib/Signal/Group/keyhelper.d.ts +7 -0
  27. package/lib/Signal/Group/keyhelper.d.ts.map +1 -0
  28. package/lib/Signal/Group/keyhelper.js +18 -0
  29. package/lib/Signal/Group/keyhelper.js.map +1 -0
  30. package/lib/Signal/Group/sender-chain-key.d.ts +14 -0
  31. package/lib/Signal/Group/sender-chain-key.d.ts.map +1 -0
  32. package/lib/Signal/Group/sender-chain-key.js +26 -0
  33. package/lib/Signal/Group/sender-chain-key.js.map +1 -0
  34. package/lib/Signal/Group/sender-key-distribution-message.d.ts +17 -0
  35. package/lib/Signal/Group/sender-key-distribution-message.d.ts.map +1 -0
  36. package/lib/Signal/Group/sender-key-distribution-message.js +63 -0
  37. package/lib/Signal/Group/sender-key-distribution-message.js.map +1 -0
  38. package/lib/Signal/Group/sender-key-message.d.ts +19 -0
  39. package/lib/Signal/Group/sender-key-message.d.ts.map +1 -0
  40. package/lib/Signal/Group/sender-key-message.js +66 -0
  41. package/lib/Signal/Group/sender-key-message.js.map +1 -0
  42. package/lib/Signal/Group/sender-key-name.d.ts +12 -0
  43. package/lib/Signal/Group/sender-key-name.d.ts.map +1 -0
  44. package/lib/Signal/Group/sender-key-name.js +48 -0
  45. package/lib/Signal/Group/sender-key-name.js.map +1 -0
  46. package/lib/Signal/Group/sender-key-record.d.ts +13 -0
  47. package/lib/Signal/Group/sender-key-record.d.ts.map +1 -0
  48. package/lib/Signal/Group/sender-key-record.js +41 -0
  49. package/lib/Signal/Group/sender-key-record.js.map +1 -0
  50. package/lib/Signal/Group/sender-key-state.d.ts +17 -0
  51. package/lib/Signal/Group/sender-key-state.d.ts.map +1 -0
  52. package/lib/Signal/Group/sender-key-state.js +84 -0
  53. package/lib/Signal/Group/sender-key-state.js.map +1 -0
  54. package/lib/Signal/Group/sender-message-key.d.ts +12 -0
  55. package/lib/Signal/Group/sender-message-key.d.ts.map +1 -0
  56. package/lib/Signal/Group/sender-message-key.js +26 -0
  57. package/lib/Signal/Group/sender-message-key.js.map +1 -0
  58. package/lib/Signal/libsignal.d.ts +55 -0
  59. package/lib/Signal/libsignal.d.ts.map +1 -0
  60. package/lib/Signal/libsignal.js +403 -0
  61. package/lib/Signal/libsignal.js.map +1 -0
  62. package/lib/Signal/lid-mapping.d.ts +21 -0
  63. package/lib/Signal/lid-mapping.d.ts.map +1 -0
  64. package/lib/Signal/lid-mapping.js +277 -0
  65. package/lib/Signal/lid-mapping.js.map +1 -0
  66. package/lib/Socket/Client/index.d.ts +3 -0
  67. package/lib/Socket/Client/index.d.ts.map +1 -0
  68. package/lib/Socket/Client/index.js +3 -0
  69. package/lib/Socket/Client/index.js.map +1 -0
  70. package/lib/Socket/Client/types.d.ts +6 -0
  71. package/lib/Socket/Client/types.d.ts.map +1 -0
  72. package/lib/Socket/Client/types.js +93 -0
  73. package/lib/Socket/Client/types.js.map +1 -0
  74. package/lib/Socket/Client/websocket.d.ts +13 -0
  75. package/lib/Socket/Client/websocket.d.ts.map +1 -0
  76. package/lib/Socket/Client/websocket.js +57 -0
  77. package/lib/Socket/Client/websocket.js.map +1 -0
  78. package/lib/Socket/business.d.ts +428 -0
  79. package/lib/Socket/business.d.ts.map +1 -0
  80. package/lib/Socket/business.js +380 -0
  81. package/lib/Socket/business.js.map +1 -0
  82. package/lib/Socket/chats.d.ts +176 -0
  83. package/lib/Socket/chats.d.ts.map +1 -0
  84. package/lib/Socket/chats.js +1238 -0
  85. package/lib/Socket/chats.js.map +1 -0
  86. package/lib/Socket/communities.d.ts +595 -0
  87. package/lib/Socket/communities.d.ts.map +1 -0
  88. package/lib/Socket/communities.js +432 -0
  89. package/lib/Socket/communities.js.map +1 -0
  90. package/lib/Socket/graphql.js +908 -0
  91. package/lib/Socket/groups.d.ts +318 -0
  92. package/lib/Socket/groups.d.ts.map +1 -0
  93. package/lib/Socket/groups.js +364 -0
  94. package/lib/Socket/groups.js.map +1 -0
  95. package/lib/Socket/index.d.ts +947 -0
  96. package/lib/Socket/index.d.ts.map +1 -0
  97. package/lib/Socket/index.js +19 -0
  98. package/lib/Socket/index.js.map +1 -0
  99. package/lib/Socket/interop.js +562 -0
  100. package/lib/Socket/managed-account.js +210 -0
  101. package/lib/Socket/messages-recv.d.ts +367 -0
  102. package/lib/Socket/messages-recv.d.ts.map +1 -0
  103. package/lib/Socket/messages-recv.js +2199 -0
  104. package/lib/Socket/messages-recv.js.map +1 -0
  105. package/lib/Socket/messages-send.d.ts +364 -0
  106. package/lib/Socket/messages-send.d.ts.map +1 -0
  107. package/lib/Socket/messages-send.js +1631 -0
  108. package/lib/Socket/messages-send.js.map +1 -0
  109. package/lib/Socket/mex.d.ts +2 -0
  110. package/lib/Socket/mex.d.ts.map +1 -0
  111. package/lib/Socket/mex.js +42 -0
  112. package/lib/Socket/mex.js.map +1 -0
  113. package/lib/Socket/newsletter.d.ts +315 -0
  114. package/lib/Socket/newsletter.d.ts.map +1 -0
  115. package/lib/Socket/newsletter.js +235 -0
  116. package/lib/Socket/newsletter.js.map +1 -0
  117. package/lib/Socket/privacy.js +448 -0
  118. package/lib/Socket/registration.js +430 -0
  119. package/lib/Socket/socket.d.ts +99 -0
  120. package/lib/Socket/socket.d.ts.map +1 -0
  121. package/lib/Socket/socket.js +1290 -0
  122. package/lib/Socket/socket.js.map +1 -0
  123. package/lib/Store/index.d.ts +4 -0
  124. package/lib/Store/index.d.ts.map +1 -0
  125. package/lib/Store/index.js +4 -0
  126. package/lib/Store/index.js.map +1 -0
  127. package/lib/Store/make-in-memory-store.d.ts +63 -0
  128. package/lib/Store/make-in-memory-store.d.ts.map +1 -0
  129. package/lib/Store/make-in-memory-store.js +462 -0
  130. package/lib/Store/make-in-memory-store.js.map +1 -0
  131. package/lib/Store/make-ordered-dictionary.d.ts +13 -0
  132. package/lib/Store/make-ordered-dictionary.d.ts.map +1 -0
  133. package/lib/Store/make-ordered-dictionary.js +79 -0
  134. package/lib/Store/make-ordered-dictionary.js.map +1 -0
  135. package/lib/Store/object-repository.d.ts +11 -0
  136. package/lib/Store/object-repository.d.ts.map +1 -0
  137. package/lib/Store/object-repository.js +24 -0
  138. package/lib/Store/object-repository.js.map +1 -0
  139. package/lib/Types/Auth.d.ts +60 -0
  140. package/lib/Types/Auth.d.ts.map +1 -0
  141. package/lib/Types/Auth.js +2 -0
  142. package/lib/Types/Auth.js.map +1 -0
  143. package/lib/Types/Bussines.d.ts +9 -0
  144. package/lib/Types/Bussines.d.ts.map +1 -0
  145. package/lib/Types/Bussines.js +2 -0
  146. package/lib/Types/Bussines.js.map +1 -0
  147. package/lib/Types/Call.d.ts +22 -0
  148. package/lib/Types/Call.d.ts.map +1 -0
  149. package/lib/Types/Call.js +2 -0
  150. package/lib/Types/Call.js.map +1 -0
  151. package/lib/Types/Chat.d.ts +3 -0
  152. package/lib/Types/Chat.d.ts.map +1 -0
  153. package/lib/Types/Chat.js +8 -0
  154. package/lib/Types/Chat.js.map +1 -0
  155. package/lib/Types/Contact.d.ts +11 -0
  156. package/lib/Types/Contact.d.ts.map +1 -0
  157. package/lib/Types/Contact.js +2 -0
  158. package/lib/Types/Contact.js.map +1 -0
  159. package/lib/Types/Events.d.ts +41 -0
  160. package/lib/Types/Events.d.ts.map +1 -0
  161. package/lib/Types/Events.js +2 -0
  162. package/lib/Types/Events.js.map +1 -0
  163. package/lib/Types/GroupMetadata.d.ts +36 -0
  164. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  165. package/lib/Types/GroupMetadata.js +2 -0
  166. package/lib/Types/GroupMetadata.js.map +1 -0
  167. package/lib/Types/Label.d.ts +3 -0
  168. package/lib/Types/Label.d.ts.map +1 -0
  169. package/lib/Types/Label.js +25 -0
  170. package/lib/Types/Label.js.map +1 -0
  171. package/lib/Types/LabelAssociation.d.ts +3 -0
  172. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  173. package/lib/Types/LabelAssociation.js +7 -0
  174. package/lib/Types/LabelAssociation.js.map +1 -0
  175. package/lib/Types/Message.d.ts +22 -0
  176. package/lib/Types/Message.d.ts.map +1 -0
  177. package/lib/Types/Message.js +18 -0
  178. package/lib/Types/Message.js.map +1 -0
  179. package/lib/Types/Mex.d.ts +3 -0
  180. package/lib/Types/Mex.d.ts.map +1 -0
  181. package/lib/Types/Mex.js +49 -0
  182. package/lib/Types/Mex.js.map +1 -0
  183. package/lib/Types/Product.d.ts +5 -0
  184. package/lib/Types/Product.d.ts.map +1 -0
  185. package/lib/Types/Product.js +2 -0
  186. package/lib/Types/Product.js.map +1 -0
  187. package/lib/Types/RichType.d.ts +3 -0
  188. package/lib/Types/RichType.d.ts.map +1 -0
  189. package/lib/Types/RichType.js +23 -0
  190. package/lib/Types/RichType.js.map +1 -0
  191. package/lib/Types/Signal.d.ts +10 -0
  192. package/lib/Types/Signal.d.ts.map +1 -0
  193. package/lib/Types/Signal.js +2 -0
  194. package/lib/Types/Signal.js.map +1 -0
  195. package/lib/Types/Socket.d.ts +33 -0
  196. package/lib/Types/Socket.d.ts.map +1 -0
  197. package/lib/Types/Socket.js +2 -0
  198. package/lib/Types/Socket.js.map +1 -0
  199. package/lib/Types/State.d.ts +6 -0
  200. package/lib/Types/State.d.ts.map +1 -0
  201. package/lib/Types/State.js +56 -0
  202. package/lib/Types/State.js.map +1 -0
  203. package/lib/Types/USync.d.ts +9 -0
  204. package/lib/Types/USync.d.ts.map +1 -0
  205. package/lib/Types/USync.js +2 -0
  206. package/lib/Types/USync.js.map +1 -0
  207. package/lib/Types/index.d.ts +16 -0
  208. package/lib/Types/index.d.ts.map +1 -0
  209. package/lib/Types/index.js +26 -0
  210. package/lib/Types/index.js.map +1 -0
  211. package/lib/Utils/a2ui.d.ts +50 -0
  212. package/lib/Utils/a2ui.js +168 -0
  213. package/lib/Utils/anchor-guard.d.ts +71 -0
  214. package/lib/Utils/anchor-guard.js +404 -0
  215. package/lib/Utils/async-utils.js +7 -0
  216. package/lib/Utils/auth-utils.d.ts +59 -0
  217. package/lib/Utils/auth-utils.d.ts.map +1 -0
  218. package/lib/Utils/auth-utils.js +306 -0
  219. package/lib/Utils/auth-utils.js.map +1 -0
  220. package/lib/Utils/browser-utils.d.ts +10 -0
  221. package/lib/Utils/browser-utils.d.ts.map +1 -0
  222. package/lib/Utils/browser-utils.js +29 -0
  223. package/lib/Utils/browser-utils.js.map +1 -0
  224. package/lib/Utils/business.d.ts +50 -0
  225. package/lib/Utils/business.d.ts.map +1 -0
  226. package/lib/Utils/business.js +245 -0
  227. package/lib/Utils/business.js.map +1 -0
  228. package/lib/Utils/chat-utils.d.ts +409 -0
  229. package/lib/Utils/chat-utils.d.ts.map +1 -0
  230. package/lib/Utils/chat-utils.js +872 -0
  231. package/lib/Utils/chat-utils.js.map +1 -0
  232. package/lib/Utils/companion-reg-client-utils.d.ts +10 -0
  233. package/lib/Utils/companion-reg-client-utils.d.ts.map +1 -0
  234. package/lib/Utils/companion-reg-client-utils.js +69 -0
  235. package/lib/Utils/companion-reg-client-utils.js.map +1 -0
  236. package/lib/Utils/crypto-worker.js +20 -0
  237. package/lib/Utils/crypto.d.ts +40 -0
  238. package/lib/Utils/crypto.d.ts.map +1 -0
  239. package/lib/Utils/crypto.js +118 -0
  240. package/lib/Utils/crypto.js.map +1 -0
  241. package/lib/Utils/decode-wa-message.d.ts +85 -0
  242. package/lib/Utils/decode-wa-message.d.ts.map +1 -0
  243. package/lib/Utils/decode-wa-message.js +467 -0
  244. package/lib/Utils/decode-wa-message.js.map +1 -0
  245. package/lib/Utils/event-buffer.d.ts +13 -0
  246. package/lib/Utils/event-buffer.d.ts.map +1 -0
  247. package/lib/Utils/event-buffer.js +651 -0
  248. package/lib/Utils/event-buffer.js.map +1 -0
  249. package/lib/Utils/generics.d.ts +64 -0
  250. package/lib/Utils/generics.d.ts.map +1 -0
  251. package/lib/Utils/generics.js +442 -0
  252. package/lib/Utils/generics.js.map +1 -0
  253. package/lib/Utils/history.d.ts +77 -0
  254. package/lib/Utils/history.d.ts.map +1 -0
  255. package/lib/Utils/history.js +188 -0
  256. package/lib/Utils/history.js.map +1 -0
  257. package/lib/Utils/identity-change-handler.d.ts +14 -0
  258. package/lib/Utils/identity-change-handler.d.ts.map +1 -0
  259. package/lib/Utils/identity-change-handler.js +50 -0
  260. package/lib/Utils/identity-change-handler.js.map +1 -0
  261. package/lib/Utils/ignore-key.d.ts +51 -0
  262. package/lib/Utils/ignore-key.js +174 -0
  263. package/lib/Utils/index.d.ts +29 -0
  264. package/lib/Utils/index.d.ts.map +1 -0
  265. package/lib/Utils/index.js +29 -0
  266. package/lib/Utils/index.js.map +1 -0
  267. package/lib/Utils/link-preview.d.ts +13 -0
  268. package/lib/Utils/link-preview.d.ts.map +1 -0
  269. package/lib/Utils/link-preview.js +85 -0
  270. package/lib/Utils/link-preview.js.map +1 -0
  271. package/lib/Utils/listener-guard.js +48 -0
  272. package/lib/Utils/logger.d.ts +3 -0
  273. package/lib/Utils/logger.d.ts.map +1 -0
  274. package/lib/Utils/logger.js +3 -0
  275. package/lib/Utils/logger.js.map +1 -0
  276. package/lib/Utils/lt-hash.d.ts +7 -0
  277. package/lib/Utils/lt-hash.d.ts.map +1 -0
  278. package/lib/Utils/lt-hash.js +8 -0
  279. package/lib/Utils/lt-hash.js.map +1 -0
  280. package/lib/Utils/make-mutex.d.ts +7 -0
  281. package/lib/Utils/make-mutex.d.ts.map +1 -0
  282. package/lib/Utils/make-mutex.js +33 -0
  283. package/lib/Utils/make-mutex.js.map +1 -0
  284. package/lib/Utils/message-retry-manager.d.ts +80 -0
  285. package/lib/Utils/message-retry-manager.d.ts.map +1 -0
  286. package/lib/Utils/message-retry-manager.js +285 -0
  287. package/lib/Utils/message-retry-manager.js.map +1 -0
  288. package/lib/Utils/messages-media.d.ts +166 -0
  289. package/lib/Utils/messages-media.d.ts.map +1 -0
  290. package/lib/Utils/messages-media.js +979 -0
  291. package/lib/Utils/messages-media.js.map +1 -0
  292. package/lib/Utils/messages.d.ts +47 -0
  293. package/lib/Utils/messages.d.ts.map +1 -0
  294. package/lib/Utils/messages.js +1959 -0
  295. package/lib/Utils/messages.js.map +1 -0
  296. package/lib/Utils/meta-ai-msmsg.d.ts +12 -0
  297. package/lib/Utils/meta-ai-msmsg.js +124 -0
  298. package/lib/Utils/noise-handler.d.ts +21 -0
  299. package/lib/Utils/noise-handler.d.ts.map +1 -0
  300. package/lib/Utils/noise-handler.js +206 -0
  301. package/lib/Utils/noise-handler.js.map +1 -0
  302. package/lib/Utils/offline-node-processor.d.ts +10 -0
  303. package/lib/Utils/offline-node-processor.d.ts.map +1 -0
  304. package/lib/Utils/offline-node-processor.js +40 -0
  305. package/lib/Utils/offline-node-processor.js.map +1 -0
  306. package/lib/Utils/pre-key-manager.d.ts +26 -0
  307. package/lib/Utils/pre-key-manager.d.ts.map +1 -0
  308. package/lib/Utils/pre-key-manager.js +106 -0
  309. package/lib/Utils/pre-key-manager.js.map +1 -0
  310. package/lib/Utils/process-message.d.ts +102 -0
  311. package/lib/Utils/process-message.d.ts.map +1 -0
  312. package/lib/Utils/process-message.js +798 -0
  313. package/lib/Utils/process-message.js.map +1 -0
  314. package/lib/Utils/reporting-utils.d.ts +13 -0
  315. package/lib/Utils/reporting-utils.d.ts.map +1 -0
  316. package/lib/Utils/reporting-utils.js +258 -0
  317. package/lib/Utils/reporting-utils.js.map +1 -0
  318. package/lib/Utils/rich-message-utils.d.ts +49 -0
  319. package/lib/Utils/rich-message-utils.d.ts.map +1 -0
  320. package/lib/Utils/rich-message-utils.js +369 -0
  321. package/lib/Utils/rich-message-utils.js.map +1 -0
  322. package/lib/Utils/session-queue.js +33 -0
  323. package/lib/Utils/signal.d.ts +83 -0
  324. package/lib/Utils/signal.d.ts.map +1 -0
  325. package/lib/Utils/signal.js +201 -0
  326. package/lib/Utils/signal.js.map +1 -0
  327. package/lib/Utils/stanza-ack.d.ts +22 -0
  328. package/lib/Utils/stanza-ack.d.ts.map +1 -0
  329. package/lib/Utils/stanza-ack.js +72 -0
  330. package/lib/Utils/stanza-ack.js.map +1 -0
  331. package/lib/Utils/sync-action-utils.d.ts +3 -0
  332. package/lib/Utils/sync-action-utils.d.ts.map +1 -0
  333. package/lib/Utils/sync-action-utils.js +49 -0
  334. package/lib/Utils/sync-action-utils.js.map +1 -0
  335. package/lib/Utils/tc-token-utils.d.ts +30 -0
  336. package/lib/Utils/tc-token-utils.d.ts.map +1 -0
  337. package/lib/Utils/tc-token-utils.js +164 -0
  338. package/lib/Utils/tc-token-utils.js.map +1 -0
  339. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  340. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  341. package/lib/Utils/use-multi-file-auth-state.js +196 -0
  342. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  343. package/lib/Utils/use-single-file-auth-state.d.ts +11 -0
  344. package/lib/Utils/use-single-file-auth-state.d.ts.map +1 -0
  345. package/lib/Utils/use-single-file-auth-state.js +118 -0
  346. package/lib/Utils/use-single-file-auth-state.js.map +1 -0
  347. package/lib/Utils/use-sqlite-auth-state.d.ts +11 -0
  348. package/lib/Utils/use-sqlite-auth-state.d.ts.map +1 -0
  349. package/lib/Utils/use-sqlite-auth-state.js +109 -0
  350. package/lib/Utils/use-sqlite-auth-state.js.map +1 -0
  351. package/lib/Utils/validate-connection.d.ts +44 -0
  352. package/lib/Utils/validate-connection.d.ts.map +1 -0
  353. package/lib/Utils/validate-connection.js +210 -0
  354. package/lib/Utils/validate-connection.js.map +1 -0
  355. package/lib/Utils/worker-pool.js +73 -0
  356. package/lib/WABinary/constants.d.ts +62 -0
  357. package/lib/WABinary/constants.d.ts.map +1 -0
  358. package/lib/WABinary/constants.js +1467 -0
  359. package/lib/WABinary/constants.js.map +1 -0
  360. package/lib/WABinary/decode.d.ts +10 -0
  361. package/lib/WABinary/decode.d.ts.map +1 -0
  362. package/lib/WABinary/decode.js +262 -0
  363. package/lib/WABinary/decode.js.map +1 -0
  364. package/lib/WABinary/encode.d.ts +3 -0
  365. package/lib/WABinary/encode.d.ts.map +1 -0
  366. package/lib/WABinary/encode.js +220 -0
  367. package/lib/WABinary/encode.js.map +1 -0
  368. package/lib/WABinary/generic-utils.d.ts +77 -0
  369. package/lib/WABinary/generic-utils.d.ts.map +1 -0
  370. package/lib/WABinary/generic-utils.js +226 -0
  371. package/lib/WABinary/generic-utils.js.map +1 -0
  372. package/lib/WABinary/index.d.ts +6 -0
  373. package/lib/WABinary/index.d.ts.map +1 -0
  374. package/lib/WABinary/index.js +6 -0
  375. package/lib/WABinary/index.js.map +1 -0
  376. package/lib/WABinary/jid-utils.d.ts +29 -0
  377. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  378. package/lib/WABinary/jid-utils.js +96 -0
  379. package/lib/WABinary/jid-utils.js.map +1 -0
  380. package/lib/WABinary/types.d.ts +6 -0
  381. package/lib/WABinary/types.d.ts.map +1 -0
  382. package/lib/WABinary/types.js +2 -0
  383. package/lib/WABinary/types.js.map +1 -0
  384. package/lib/WAM/BinaryInfo.d.ts +8 -0
  385. package/lib/WAM/BinaryInfo.d.ts.map +1 -0
  386. package/lib/WAM/BinaryInfo.js +10 -0
  387. package/lib/WAM/BinaryInfo.js.map +1 -0
  388. package/lib/WAM/constants.d.ts +34927 -0
  389. package/lib/WAM/constants.d.ts.map +1 -0
  390. package/lib/WAM/constants.js +22853 -0
  391. package/lib/WAM/constants.js.map +1 -0
  392. package/lib/WAM/encode.d.ts +2 -0
  393. package/lib/WAM/encode.d.ts.map +1 -0
  394. package/lib/WAM/encode.js +150 -0
  395. package/lib/WAM/encode.js.map +1 -0
  396. package/lib/WAM/index.d.ts +4 -0
  397. package/lib/WAM/index.d.ts.map +1 -0
  398. package/lib/WAM/index.js +4 -0
  399. package/lib/WAM/index.js.map +1 -0
  400. package/lib/WAUSync/Protocols/USyncBusinessProtocol.d.ts +8 -0
  401. package/lib/WAUSync/Protocols/USyncBusinessProtocol.js +99 -0
  402. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +37 -0
  403. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts.map +1 -0
  404. package/lib/WAUSync/Protocols/USyncContactProtocol.js +53 -0
  405. package/lib/WAUSync/Protocols/USyncContactProtocol.js.map +1 -0
  406. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +23 -0
  407. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts.map +1 -0
  408. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +54 -0
  409. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js.map +1 -0
  410. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +13 -0
  411. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts.map +1 -0
  412. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +27 -0
  413. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js.map +1 -0
  414. package/lib/WAUSync/Protocols/USyncFeatureProtocol.d.ts +9 -0
  415. package/lib/WAUSync/Protocols/USyncFeatureProtocol.js +70 -0
  416. package/lib/WAUSync/Protocols/USyncPictureProtocol.d.ts +12 -0
  417. package/lib/WAUSync/Protocols/USyncPictureProtocol.js +28 -0
  418. package/lib/WAUSync/Protocols/USyncSidelistProtocol.d.ts +10 -0
  419. package/lib/WAUSync/Protocols/USyncSidelistProtocol.js +25 -0
  420. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +13 -0
  421. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts.map +1 -0
  422. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +38 -0
  423. package/lib/WAUSync/Protocols/USyncStatusProtocol.js.map +1 -0
  424. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.d.ts +11 -0
  425. package/lib/WAUSync/Protocols/USyncTextStatusProtocol.js +34 -0
  426. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts +10 -0
  427. package/lib/WAUSync/Protocols/USyncUsernameProtocol.d.ts.map +1 -0
  428. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +31 -0
  429. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js.map +1 -0
  430. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +39 -0
  431. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts.map +1 -0
  432. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +51 -0
  433. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js.map +1 -0
  434. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +15 -0
  435. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts.map +1 -0
  436. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +29 -0
  437. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js.map +1 -0
  438. package/lib/WAUSync/Protocols/index.d.ts +11 -0
  439. package/lib/WAUSync/Protocols/index.d.ts.map +1 -0
  440. package/lib/WAUSync/Protocols/index.js +11 -0
  441. package/lib/WAUSync/Protocols/index.js.map +1 -0
  442. package/lib/WAUSync/USyncQuery.d.ts +32 -0
  443. package/lib/WAUSync/USyncQuery.d.ts.map +1 -0
  444. package/lib/WAUSync/USyncQuery.js +185 -0
  445. package/lib/WAUSync/USyncQuery.js.map +1 -0
  446. package/lib/WAUSync/USyncUser.d.ts +25 -0
  447. package/lib/WAUSync/USyncUser.d.ts.map +1 -0
  448. package/lib/WAUSync/USyncUser.js +48 -0
  449. package/lib/WAUSync/USyncUser.js.map +1 -0
  450. package/lib/WAUSync/index.d.ts +4 -0
  451. package/lib/WAUSync/index.d.ts.map +1 -0
  452. package/lib/WAUSync/index.js +4 -0
  453. package/lib/WAUSync/index.js.map +1 -0
  454. package/lib/index.d.ts +12 -0
  455. package/lib/index.d.ts.map +1 -0
  456. package/lib/index.js +12 -0
  457. package/lib/index.js.map +1 -0
  458. package/package.json +122 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Socket/index.js"],"names":[],"mappings":";AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAO26J,cAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EADj7J"}
@@ -0,0 +1,19 @@
1
+ import { DEFAULT_CONNECTION_CONFIG } from '../Defaults/index.js';
2
+ import { makeCommunitiesSocket } from './communities.js';
3
+ import { makeInteropSocket } from './interop.js';
4
+ import { makePrivacySocket } from './privacy.js';
5
+ import { makeRegistrationSocket } from './registration.js';
6
+ import { makeManagedAccountSocket } from './managed-account.js';
7
+ import { makeGraphQLSocket } from './graphql.js';
8
+ // export the last socket layer
9
+ const makeWASocket = (config) => {
10
+ const newConfig = {
11
+ ...DEFAULT_CONNECTION_CONFIG,
12
+ ...config
13
+ };
14
+ // the layers below only add methods on top of the socket — they take the
15
+ // built socket rather than the config, so ordering between them is free
16
+ return makeGraphQLSocket(makeManagedAccountSocket(makeRegistrationSocket(makePrivacySocket(makeInteropSocket(makeCommunitiesSocket(newConfig))))));
17
+ };
18
+ export default makeWASocket;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Socket/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,+BAA+B;AAC/B,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE;IAC5B,MAAM,SAAS,GAAG;QACd,GAAG,yBAAyB;QAC5B,GAAG,MAAM;KACZ,CAAC;IACF,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC,CAAC;AACF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,562 @@
1
+
2
+ import { getBinaryNodeChild, getBinaryNodeChildren, S_WHATSAPP_NET } from '../WABinary/index.js';
3
+ import { executeWMexQuery } from './mex.js';
4
+
5
+ /**
6
+ * w:mex query IDs for interop group and privacy operations.
7
+ *
8
+ * Source: whatsapp-android-mex_client_persist_ids.json (WA 2.26.26.4 APK assets)
9
+ */
10
+ const INTEROP_MEX_QUERY_IDS = {
11
+ CREATE_GROUP: '25726817620301611', // GroupsCreateInteropGroup
12
+ LEAVE_GROUP: '25346167795013271', // LeaveInteropGroup
13
+ ADD_PARTICIPANTS: '25732168276369451', // AddParticipantsToInteropGroup
14
+ QUERY_GROUP_INFO: '32734144032867938', // QueryInteropGroupInfo
15
+ PRIVACY_SETTINGS_QUERY: '24849123668112654', // InteropPrivacySettingsQuery
16
+ PRIVACY_SETTINGS_UPDATE: '25421856497452763', // InteropPrivacySettingsUpdate
17
+ PRIVACY_SETTINGS_WITH_CONTACT_LIST: '24913399124998598' // InteropPrivacySettingWithContactListUpdate
18
+ }
19
+
20
+ /**
21
+ * Known integrator IDs (assigned by WhatsApp).
22
+ * BirdyChat → identifier_type="email"
23
+ * Haiket → identifier_type="pn"
24
+ */
25
+ const INTEGRATOR_BIRDYCHAT = 12
26
+ const INTEGRATOR_HAIKET = 13
27
+
28
+ /**
29
+ * TOS trackable results sent by WA on first interop opt-in.
30
+ * 105 = TOS shown, 160 = TOS accepted.
31
+ */
32
+ const TOS_TRACKABLE_ID = '20240306'
33
+ const TOS_RESULT_SHOWN = '105'
34
+ const TOS_RESULT_ACCEPTED = '160'
35
+
36
+ /** Maximum users per batch lookup (enforced server-side too). */
37
+ const INTEROP_BATCH_MAX = 256
38
+
39
+ export const makeInteropSocket = sock => {
40
+ const { query, generateMessageTag, logger, signalRepository } = sock
41
+
42
+ const mexQuery = (variables, queryId, dataPath) =>
43
+ executeWMexQuery(variables, queryId, dataPath, query, generateMessageTag)
44
+
45
+ /**
46
+ * Fetch all available interop integrators from the server.
47
+ * Each integrator carries: id, name, status, icon, identifierType,
48
+ * optedIn, features.groupMessaging.
49
+ * status can be "active" | "onboarding" | "removed".
50
+ */
51
+ const fetchIntegrators = async () => {
52
+ const result = await query({
53
+ tag: 'iq',
54
+ attrs: {
55
+ type: 'get',
56
+ xmlns: 'w:interop',
57
+ to: S_WHATSAPP_NET
58
+ },
59
+ content: [{ tag: 'integrator', attrs: { fetch: 'all' } }]
60
+ })
61
+ const listNode = getBinaryNodeChild(result, 'integrator_list')
62
+ if (!listNode) return []
63
+ const globalOptedIn = listNode.attrs?.opted_in === 'true'
64
+ return getBinaryNodeChildren(listNode, 'integrator').map(node => {
65
+ const featuresNode = getBinaryNodeChild(node, 'features')
66
+ return {
67
+ id: parseInt(node.attrs.id, 10),
68
+ name: node.attrs.name,
69
+ // "active" | "onboarding" | "removed"
70
+ status: node.attrs.status,
71
+ icon: node.attrs.icon,
72
+ // "email" | "pn" | "username"
73
+ identifierType: node.attrs.identifier_type,
74
+ // Whether we are already opted-in to this integrator
75
+ optedIn: node.attrs.opted_in === 'true' || globalOptedIn,
76
+ features: {
77
+ groupMessaging: featuresNode?.attrs?.group_messaging === 'true'
78
+ }
79
+ }
80
+ })
81
+ }
82
+
83
+ /** Send a single TOS trackable item (shown or accepted). */
84
+ const sendTOSTrackable = async (id, result) => {
85
+ await query({
86
+ tag: 'iq',
87
+ attrs: { to: S_WHATSAPP_NET, type: 'set', xmlns: 'tos' },
88
+ content: [{ tag: 'trackable', attrs: { id, result } }]
89
+ })
90
+ }
91
+
92
+ /**
93
+ * Accept TOS for interop.
94
+ * Sends two trackable items: shown (105) then accepted (160).
95
+ * Must be called before opting in.
96
+ */
97
+ const acceptInteropTOS = async () => {
98
+ await sendTOSTrackable(TOS_TRACKABLE_ID, TOS_RESULT_SHOWN)
99
+ await sendTOSTrackable(TOS_TRACKABLE_ID, TOS_RESULT_ACCEPTED)
100
+ }
101
+
102
+ /**
103
+ * Opt in to a list of integrators (by numeric ID).
104
+ * Defaults to both known integrators (BirdyChat + Haiket).
105
+ */
106
+ const optInIntegrators = async (integratorIds = [INTEGRATOR_BIRDYCHAT, INTEGRATOR_HAIKET]) => {
107
+ await query({
108
+ tag: 'iq',
109
+ attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
110
+ content: [
111
+ {
112
+ tag: 'opt_in_integrators',
113
+ attrs: {},
114
+ content: [
115
+ {
116
+ tag: 'integrator_list',
117
+ attrs: {},
118
+ content: integratorIds.map(id => ({
119
+ tag: 'integrator',
120
+ attrs: { id: id.toString() }
121
+ }))
122
+ }
123
+ ]
124
+ }
125
+ ]
126
+ })
127
+ }
128
+
129
+ /**
130
+ * Opt out of a list of integrators (by numeric ID).
131
+ * Mirror of optInIntegrators — uses <opt_out_integrators>.
132
+ */
133
+ const optOutIntegrators = async (integratorIds = [INTEGRATOR_BIRDYCHAT, INTEGRATOR_HAIKET]) => {
134
+ await query({
135
+ tag: 'iq',
136
+ attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
137
+ content: [
138
+ {
139
+ tag: 'opt_out_integrators',
140
+ attrs: {},
141
+ content: [
142
+ {
143
+ tag: 'integrator_list',
144
+ attrs: {},
145
+ content: integratorIds.map(id => ({
146
+ tag: 'integrator',
147
+ attrs: { id: id.toString() }
148
+ }))
149
+ }
150
+ ]
151
+ }
152
+ ]
153
+ })
154
+ }
155
+
156
+ /**
157
+ * Resolve one or more interop users by external ID in a single IQ.
158
+ * Each entry: { externalId, integratorId }
159
+ * - BirdyChat (12): externalId = email address
160
+ * - Haiket (13): externalId = phone number string (e.g. "19146088152")
161
+ *
162
+ * Max 256 entries per call (server limit).
163
+ *
164
+ * Returns an array of results:
165
+ * { jid, externalId, normalizedExternalId, integratorId } on success
166
+ * { externalId, integratorId, error: { code, text } } on failure
167
+ */
168
+ const resolveInteropUsers = async users => {
169
+ if (!users || users.length === 0) return []
170
+ if (users.length > INTEROP_BATCH_MAX) {
171
+ throw new Error(`resolveInteropUsers: max ${INTEROP_BATCH_MAX} users per request`)
172
+ }
173
+ const result = await query({
174
+ tag: 'iq',
175
+ attrs: { type: 'get', xmlns: 'w:interop', to: S_WHATSAPP_NET },
176
+ content: [
177
+ {
178
+ tag: 'users',
179
+ attrs: {},
180
+ content: users.map(({ externalId, integratorId }) => ({
181
+ tag: 'user',
182
+ attrs: {
183
+ external_id: externalId,
184
+ integrator_id: integratorId.toString()
185
+ }
186
+ }))
187
+ }
188
+ ]
189
+ })
190
+ const usersNode = getBinaryNodeChild(result, 'users')
191
+ if (!usersNode) return []
192
+ return getBinaryNodeChildren(usersNode, 'user').map(userNode => {
193
+ const errorNode = getBinaryNodeChild(userNode, 'error')
194
+ if (errorNode) {
195
+ return {
196
+ externalId: userNode.attrs.external_id,
197
+ integratorId: parseInt(userNode.attrs.integrator_id, 10),
198
+ error: {
199
+ code: parseInt(errorNode.attrs.code, 10),
200
+ text: errorNode.attrs.text
201
+ }
202
+ }
203
+ }
204
+ return {
205
+ jid: userNode.attrs.jid,
206
+ externalId: userNode.attrs.external_id,
207
+ normalizedExternalId: userNode.attrs.normalized_external_id,
208
+ integratorId: parseInt(userNode.attrs.integrator_id, 10)
209
+ }
210
+ })
211
+ }
212
+
213
+ /**
214
+ * Convenience wrapper: resolve a single interop user.
215
+ * Returns the result object or null.
216
+ */
217
+ const resolveInteropUser = async (externalId, integratorId) => {
218
+ const results = await resolveInteropUsers([{ externalId, integratorId }])
219
+ return results[0] ?? null
220
+ }
221
+
222
+ /**
223
+ * Get reachability settings for interop contacts.
224
+ * Returns the raw <reachability_settings> node content.
225
+ * WA uses this as the interop presence/subscription mechanism.
226
+ */
227
+ const getReachabilitySettings = async () => {
228
+ const result = await query({
229
+ tag: 'iq',
230
+ attrs: { type: 'get', xmlns: 'w:interop', to: S_WHATSAPP_NET },
231
+ content: [{ tag: 'reachability_settings', attrs: {} }]
232
+ })
233
+ const settingsNode = getBinaryNodeChild(result, 'reachability_settings')
234
+ if (!settingsNode) return null
235
+ return {
236
+ enabled: settingsNode.attrs?.enabled,
237
+ users: getBinaryNodeChildren(settingsNode, 'user').map(n => ({
238
+ externalId: n.attrs.external_id,
239
+ integratorId: parseInt(n.attrs.integrator_id, 10),
240
+ jid: n.attrs.jid
241
+ }))
242
+ }
243
+ }
244
+
245
+ /**
246
+ * Set reachability settings (subscribe to presence) for interop contacts.
247
+ * users: array of { externalId, integratorId }
248
+ * enabled: "true" | "false"
249
+ */
250
+ const setReachabilitySettings = async (users, enabled = 'true') => {
251
+ await query({
252
+ tag: 'iq',
253
+ attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
254
+ content: [
255
+ {
256
+ tag: 'reachability_settings',
257
+ attrs: { enabled },
258
+ content: users.map(({ externalId, integratorId }) => ({
259
+ tag: 'user',
260
+ attrs: {
261
+ external_id: externalId,
262
+ integrator_id: integratorId.toString()
263
+ }
264
+ }))
265
+ }
266
+ ]
267
+ })
268
+ }
269
+
270
+ /**
271
+ * Block or unblock an interop user via the w:interop blocklist.
272
+ * Different from regular WA block (xmlns=blocklist).
273
+ */
274
+ const updateInteropBlockStatus = async (jid, action) => {
275
+ await query({
276
+ tag: 'iq',
277
+ attrs: { type: 'set', xmlns: 'w:interop', to: S_WHATSAPP_NET },
278
+ content: [
279
+ {
280
+ tag: 'blocklist',
281
+ attrs: {},
282
+ content: [{ tag: 'item', attrs: { action, jid } }]
283
+ }
284
+ ]
285
+ })
286
+ }
287
+
288
+ const blockInteropUser = jid => updateInteropBlockStatus(jid, 'block')
289
+ const unblockInteropUser = jid => updateInteropBlockStatus(jid, 'unblock')
290
+
291
+ /**
292
+ * Report an interop contact as spam.
293
+ * spam_flow="account_info_block" = block + report (WA Web default).
294
+ */
295
+ const reportInteropSpam = async (jid, spamFlow = 'account_info_block') => {
296
+ await query({
297
+ tag: 'iq',
298
+ attrs: { type: 'set', xmlns: 'spam', to: S_WHATSAPP_NET },
299
+ content: [{ tag: 'spam_list', attrs: { jid, spam_flow: spamFlow } }]
300
+ })
301
+ }
302
+
303
+ /**
304
+ * Mark an interop JID as trusted_contact in privacy tokens.
305
+ * WA calls this automatically after the first outgoing message.
306
+ */
307
+ const trustInteropContact = async jid => {
308
+ const t = Math.floor(Date.now() / 1000).toString()
309
+ await query({
310
+ tag: 'iq',
311
+ attrs: { to: S_WHATSAPP_NET, xmlns: 'privacy', type: 'set' },
312
+ content: [
313
+ {
314
+ tag: 'tokens',
315
+ attrs: {},
316
+ content: [{ tag: 'token', attrs: { jid, type: 'trusted_contact', t } }]
317
+ }
318
+ ]
319
+ })
320
+ }
321
+
322
+ /**
323
+ * Full interop initialization sequence matching WA Web:
324
+ * 1. Fetch available integrators
325
+ * 2. Accept TOS (shown 105 + accepted 160)
326
+ * 3. Opt-in to all active/onboarding integrators
327
+ *
328
+ * Silently tolerates TOS/opt-in errors.
329
+ * Returns the full integrator list.
330
+ */
331
+ const initInterop = async () => {
332
+ let integrators
333
+ try {
334
+ integrators = await fetchIntegrators()
335
+ } catch (err) {
336
+ logger.warn({ err }, 'interop: failed to fetch integrators')
337
+ return []
338
+ }
339
+ const toOptIn = integrators.filter(i => i.status === 'active' || i.status === 'onboarding')
340
+ if (toOptIn.length === 0) return integrators
341
+ try {
342
+ await acceptInteropTOS()
343
+ } catch (err) {
344
+ logger.warn({ err }, 'interop: failed to accept TOS')
345
+ }
346
+ try {
347
+ await optInIntegrators(toOptIn.map(i => i.id))
348
+ } catch (err) {
349
+ logger.warn({ err }, 'interop: failed to opt-in integrators')
350
+ }
351
+ logger.info({ integrators: toOptIn.map(i => i.name) }, 'interop: opted in')
352
+ logger.warn(
353
+ { integrators: toOptIn.map(i => i.name) },
354
+ 'interop: receiving messages from interop contacts (BirdyChat/Haiket) is NOT YET SUPPORTED. ' +
355
+ 'The interop bridge only delivers to device 0 (primary phone) via a single Signal session — ' +
356
+ 'no fan-out to companion devices. Opt-in and sending may work, but inbound messages will not arrive.'
357
+ )
358
+ return integrators
359
+ }
360
+
361
+ /**
362
+ * Reset the Signal session with an interop contact and force a fresh pkmsg handshake.
363
+ * Call this when incoming messages from an interop contact are not arriving or
364
+ * failing to decrypt — it clears the stale session so the next sendMessage
365
+ * generates a new pre-key message and re-establishes both directions.
366
+ */
367
+ const resetInteropSession = async jid => {
368
+ await signalRepository.deleteSession([jid])
369
+ logger.info({ jid }, '[interop] session reset — next send will use pkmsg')
370
+ }
371
+
372
+ /**
373
+ * Create an interop group via MEX.
374
+ * Confirmed from C80913Xf.java opcode 15:
375
+ * input: { participants: [{ jid }] }
376
+ * dataPath: xwa2_interop_group_create
377
+ *
378
+ * @param {string[]} participants - Interop JIDs to add
379
+ * @returns {{ gid, creationTime, creator, participants }}
380
+ */
381
+ const createInteropGroup = async participants => {
382
+ const result = await mexQuery(
383
+ { input: { participants: participants.map(jid => ({ jid })) } },
384
+ INTEROP_MEX_QUERY_IDS.CREATE_GROUP,
385
+ 'xwa2_interop_group_create'
386
+ )
387
+ logger.info({ participants }, '[interop] group created via MEX')
388
+ return result
389
+ }
390
+
391
+ /**
392
+ * Leave one or more interop groups via MEX.
393
+ * Confirmed from C80913Xf.java opcode 28:
394
+ * input: { groups_to_leave: [{ gid }] }
395
+ * dataPath: xwa2_interop_group_leave
396
+ *
397
+ * gid is the raw interop group ID (without @g.us suffix).
398
+ * @param {string|string[]} jids - Interop group JID(s)
399
+ */
400
+ const leaveInteropGroup = async jids => {
401
+ const ids = Array.isArray(jids) ? jids : [jids]
402
+ const result = await mexQuery(
403
+ { input: { groups_to_leave: ids.map(jid => ({ gid: jid.split('@')[0] })) } },
404
+ INTEROP_MEX_QUERY_IDS.LEAVE_GROUP,
405
+ 'xwa2_interop_group_leave'
406
+ )
407
+ logger.info({ jids: ids }, '[interop] left group(s) via MEX')
408
+ return result
409
+ }
410
+
411
+ /**
412
+ * Add participants to an existing interop group via MEX.
413
+ * Confirmed from C3Wt.java opcode 9:
414
+ * input: { gid, participants: [{ jid }] }
415
+ * dataPath: xwa2_interop_add_participants_to_group
416
+ *
417
+ * @param {string} groupJid - Interop group JID
418
+ * @param {string[]} participants - Interop JIDs to add
419
+ */
420
+ const addParticipantsToInteropGroup = async (groupJid, participants) => {
421
+ const gid = groupJid.split('@')[0]
422
+ return mexQuery(
423
+ { input: { gid, participants: participants.map(jid => ({ jid })) } },
424
+ INTEROP_MEX_QUERY_IDS.ADD_PARTICIPANTS,
425
+ 'xwa2_interop_add_participants_to_group'
426
+ )
427
+ }
428
+
429
+ /**
430
+ * Query info about an interop group via MEX.
431
+ * Confirmed from C3Wt.java opcode 10:
432
+ * group_input: { gid }
433
+ * dataPath: xwa2_interop_group_query_by_id
434
+ *
435
+ * @param {string} groupJid - Interop group JID
436
+ */
437
+ const queryInteropGroupInfo = async groupJid => {
438
+ const gid = groupJid.split('@')[0]
439
+ return mexQuery({ group_input: { gid } }, INTEROP_MEX_QUERY_IDS.QUERY_GROUP_INFO, 'xwa2_interop_group_query_by_id')
440
+ }
441
+
442
+ /**
443
+ * Update an interop privacy setting via MEX.
444
+ * Confirmed from C24385Ak0.java (InteropPrivacySettingsUpdate):
445
+ * feature, setting
446
+ * dataPath: xwa2_interop_privacy_setting_update
447
+ *
448
+ * Known features: "GROUPADD"
449
+ * Known settings: "ALL" | "CONTACTS" | "NONE"
450
+ *
451
+ * @param {string} feature - Privacy feature name
452
+ * @param {string} setting - New value
453
+ */
454
+ const updateInteropPrivacySetting = async (feature, setting) => {
455
+ return mexQuery(
456
+ { feature, setting },
457
+ INTEROP_MEX_QUERY_IDS.PRIVACY_SETTINGS_UPDATE,
458
+ 'xwa2_interop_privacy_setting_update'
459
+ )
460
+ }
461
+
462
+ /**
463
+ * Update an interop privacy setting with an explicit contact list via MEX.
464
+ * Confirmed from C24388Ak8.java (InteropPrivacySettingWithContactListUpdate):
465
+ * feature, setting, contacts[], contact_list_type, dhash
466
+ * dataPath: xwa2_interop_privacy_setting_with_contact_list_update
467
+ *
468
+ * Used when setting is "CONTACTS" and you want to specify exact allowed contacts.
469
+ *
470
+ * @param {string} feature - Privacy feature (e.g. "GROUPADD")
471
+ * @param {string} setting - "CONTACTS"
472
+ * @param {string[]} contacts - List of JIDs to allow
473
+ * @param {string} contactListType - Contact list type string
474
+ * @param {string} [dhash] - Hash of the current contact list (or null/"none")
475
+ */
476
+ const updateInteropPrivacySettingWithContactList = async (
477
+ feature,
478
+ setting,
479
+ contacts,
480
+ contactListType,
481
+ dhash = 'none'
482
+ ) => {
483
+ return mexQuery(
484
+ { feature, setting, contacts, contact_list_type: contactListType, dhash },
485
+ INTEROP_MEX_QUERY_IDS.PRIVACY_SETTINGS_WITH_CONTACT_LIST,
486
+ 'xwa2_interop_privacy_setting_with_contact_list_update'
487
+ )
488
+ }
489
+
490
+ /**
491
+ * Query all interop privacy settings via MEX.
492
+ * Uses InteropPrivacySettingsQuery (doc_id: 24849123668112654).
493
+ * Returns the current value for each privacy feature (e.g. GROUPADD).
494
+ * dataPath: xwa2_interop_privacy_settings
495
+ */
496
+ const queryInteropPrivacySettings = () =>
497
+ mexQuery({}, INTEROP_MEX_QUERY_IDS.PRIVACY_SETTINGS_QUERY, 'xwa2_interop_privacy_settings')
498
+
499
+ /**
500
+ * Check whether an interop user allows being added to groups (GROUPADD privacy).
501
+ * Returns true if the user can be added, false if blocked by their privacy settings.
502
+ *
503
+ * Mirrors InteropPrivacySettingsManager.A01() in the APK which queries
504
+ * the "GROUPADD" feature for the given account.
505
+ */
506
+ const getInteropGroupAddPrivacy = async (jid, integratorId) => {
507
+ const result = await query({
508
+ tag: 'iq',
509
+ attrs: { type: 'get', xmlns: 'w:interop', to: S_WHATSAPP_NET },
510
+ content: [
511
+ {
512
+ tag: 'privacy',
513
+ attrs: { feature: 'GROUPADD' },
514
+ content: [
515
+ {
516
+ tag: 'user',
517
+ attrs: {
518
+ jid,
519
+ integrator_id: integratorId.toString()
520
+ }
521
+ }
522
+ ]
523
+ }
524
+ ]
525
+ })
526
+ const privacyNode = getBinaryNodeChild(result, 'privacy')
527
+ const userNode = getBinaryNodeChild(privacyNode, 'user')
528
+ // "allowed" means the server confirmed the user can be added; any other value or
529
+ // absence of the attribute means the privacy setting blocks the add.
530
+ return userNode?.attrs?.result === 'allowed'
531
+ }
532
+
533
+ return {
534
+ ...sock,
535
+ fetchIntegrators,
536
+ acceptInteropTOS,
537
+ optInIntegrators,
538
+ optOutIntegrators,
539
+ resolveInteropUser,
540
+ resolveInteropUsers,
541
+ getReachabilitySettings,
542
+ setReachabilitySettings,
543
+ blockInteropUser,
544
+ unblockInteropUser,
545
+ reportInteropSpam,
546
+ trustInteropContact,
547
+ initInterop,
548
+ resetInteropSession,
549
+ createInteropGroup,
550
+ leaveInteropGroup,
551
+ addParticipantsToInteropGroup,
552
+ queryInteropGroupInfo,
553
+ queryInteropPrivacySettings,
554
+ updateInteropPrivacySetting,
555
+ updateInteropPrivacySettingWithContactList,
556
+ getInteropGroupAddPrivacy,
557
+ INTEGRATOR_BIRDYCHAT,
558
+ INTEGRATOR_HAIKET,
559
+ INTEROP_MEX_QUERY_IDS
560
+ }
561
+ }
562
+