zapo-js 0.1.1 → 0.1.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 (363) hide show
  1. package/README.md +8 -0
  2. package/dist/appstate/WaAppStateCrypto.js +18 -25
  3. package/dist/appstate/WaAppStateSyncClient.js +181 -114
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/utils.js +10 -30
  7. package/dist/auth/WaAuthClient.js +48 -55
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
  9. package/dist/auth/index.js +1 -3
  10. package/dist/auth/pairing/WaPairingFlow.js +21 -23
  11. package/dist/auth/pairing/WaQrFlow.js +37 -24
  12. package/dist/client/WaClient.js +103 -276
  13. package/dist/client/WaClientFactory.js +227 -110
  14. package/dist/client/connection/WaConnectionManager.js +292 -0
  15. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  16. package/dist/client/connection/WaReceiptQueue.js +51 -0
  17. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +27 -17
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
  21. package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
  22. package/dist/client/dirty.js +35 -29
  23. package/dist/client/events/chat.js +4 -3
  24. package/dist/client/events/group.js +59 -36
  25. package/dist/client/history-sync.js +53 -63
  26. package/dist/client/incoming.js +23 -20
  27. package/dist/client/mailbox.js +8 -8
  28. package/dist/client/messages.js +4 -4
  29. package/dist/client/messaging/fanout.js +189 -0
  30. package/dist/client/messaging/key-protocol.js +130 -0
  31. package/dist/client/messaging/participants.js +191 -0
  32. package/dist/crypto/core/hkdf.js +3 -8
  33. package/dist/crypto/core/index.js +1 -4
  34. package/dist/crypto/core/keys.js +2 -3
  35. package/dist/crypto/core/primitives.js +12 -15
  36. package/dist/crypto/core/random.js +7 -26
  37. package/dist/crypto/curves/Ed25519.js +7 -8
  38. package/dist/crypto/curves/X25519.js +13 -16
  39. package/dist/crypto/index.js +0 -5
  40. package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
  41. package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
  42. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  43. package/dist/esm/appstate/constants.js +3 -2
  44. package/dist/esm/appstate/utils.js +8 -27
  45. package/dist/esm/auth/WaAuthClient.js +48 -55
  46. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
  47. package/dist/esm/auth/index.js +0 -1
  48. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
  49. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  50. package/dist/esm/client/WaClient.js +103 -276
  51. package/dist/esm/client/WaClientFactory.js +227 -110
  52. package/dist/esm/client/connection/WaConnectionManager.js +288 -0
  53. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  54. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  55. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  56. package/dist/esm/client/coordinators/WaGroupCoordinator.js +20 -10
  57. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  58. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
  59. package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
  60. package/dist/esm/client/dirty.js +30 -24
  61. package/dist/esm/client/events/chat.js +4 -3
  62. package/dist/esm/client/events/group.js +50 -28
  63. package/dist/esm/client/history-sync.js +50 -60
  64. package/dist/esm/client/incoming.js +23 -20
  65. package/dist/esm/client/mailbox.js +8 -8
  66. package/dist/esm/client/messages.js +1 -1
  67. package/dist/esm/client/messaging/fanout.js +186 -0
  68. package/dist/esm/client/messaging/key-protocol.js +127 -0
  69. package/dist/esm/client/messaging/participants.js +188 -0
  70. package/dist/esm/crypto/core/hkdf.js +3 -8
  71. package/dist/esm/crypto/core/index.js +0 -1
  72. package/dist/esm/crypto/core/keys.js +2 -3
  73. package/dist/esm/crypto/core/primitives.js +12 -15
  74. package/dist/esm/crypto/core/random.js +6 -25
  75. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  76. package/dist/esm/crypto/curves/X25519.js +10 -13
  77. package/dist/esm/crypto/index.js +0 -2
  78. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  79. package/dist/esm/infra/log/PinoLogger.js +15 -9
  80. package/dist/esm/infra/log/types.js +11 -1
  81. package/dist/esm/infra/perf/BoundedTaskQueue.js +13 -17
  82. package/dist/esm/media/WaMediaCrypto.js +2 -4
  83. package/dist/esm/media/WaMediaTransferClient.js +226 -58
  84. package/dist/esm/media/conn.js +10 -6
  85. package/dist/esm/media/constants.js +4 -1
  86. package/dist/esm/message/WaMessageClient.js +4 -13
  87. package/dist/esm/message/ack.js +6 -6
  88. package/dist/esm/message/addon-crypto.js +59 -0
  89. package/dist/esm/message/incoming.js +106 -111
  90. package/dist/esm/message/index.js +2 -0
  91. package/dist/esm/message/reporting-token.js +438 -0
  92. package/dist/esm/message/use-case-secret.js +49 -0
  93. package/dist/esm/protocol/appstate.js +58 -0
  94. package/dist/esm/protocol/constants.js +2 -1
  95. package/dist/esm/protocol/index.js +2 -10
  96. package/dist/esm/protocol/jid.js +63 -51
  97. package/dist/esm/protocol/media.js +3 -3
  98. package/dist/esm/protocol/nodes.js +2 -0
  99. package/dist/esm/protocol/usync.js +11 -0
  100. package/dist/esm/retry/index.js +1 -0
  101. package/dist/esm/retry/outbound.js +4 -5
  102. package/dist/esm/retry/parse.js +58 -76
  103. package/dist/esm/retry/replay.js +48 -49
  104. package/dist/esm/retry/tracker.js +56 -0
  105. package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
  106. package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
  107. package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
  108. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
  109. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
  110. package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
  111. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  112. package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
  113. package/dist/esm/signal/group/SenderKeyManager.js +26 -16
  114. package/dist/esm/signal/index.js +1 -0
  115. package/dist/esm/signal/session/SignalProtocol.js +49 -14
  116. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  117. package/dist/esm/signal/session/SignalSession.js +14 -9
  118. package/dist/esm/signal/session/resolver.js +186 -0
  119. package/dist/esm/signal/store/sqlite.js +16 -37
  120. package/dist/esm/store/createStore.js +16 -18
  121. package/dist/esm/store/noop.store.js +3 -6
  122. package/dist/esm/store/providers/memory/appstate.store.js +30 -6
  123. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  124. package/dist/esm/store/providers/memory/device-list.store.js +3 -30
  125. package/dist/esm/store/providers/memory/message.store.js +11 -5
  126. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  127. package/dist/esm/store/providers/memory/sender-key.store.js +5 -7
  128. package/dist/esm/store/providers/memory/signal.store.js +13 -1
  129. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  130. package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
  131. package/dist/esm/store/providers/sqlite/connection.js +18 -13
  132. package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
  133. package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
  134. package/dist/esm/store/providers/sqlite/message.store.js +45 -32
  135. package/dist/esm/store/providers/sqlite/migrations.js +1 -1
  136. package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
  137. package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
  138. package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
  139. package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
  140. package/dist/esm/store/providers/sqlite/table-names.js +107 -0
  141. package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
  142. package/dist/esm/transport/WaComms.js +25 -23
  143. package/dist/esm/transport/WaWebSocket.js +115 -12
  144. package/dist/esm/transport/binary/decoder.js +4 -4
  145. package/dist/esm/transport/binary/encoder.js +12 -4
  146. package/dist/esm/transport/index.js +1 -0
  147. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  148. package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
  149. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  150. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  151. package/dist/esm/transport/node/builders/index.js +2 -1
  152. package/dist/esm/transport/node/builders/message.js +9 -0
  153. package/dist/esm/transport/node/builders/pairing.js +4 -5
  154. package/dist/esm/transport/node/builders/usync.js +41 -0
  155. package/dist/esm/transport/node/helpers.js +107 -5
  156. package/dist/esm/transport/node/usync.js +35 -0
  157. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  158. package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
  159. package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
  160. package/dist/esm/transport/proxy.js +27 -0
  161. package/dist/esm/transport/stream/parse.js +13 -48
  162. package/dist/esm/util/bytes.js +50 -32
  163. package/dist/esm/util/coercion.js +6 -14
  164. package/dist/esm/util/primitives.js +39 -14
  165. package/dist/infra/log/ConsoleLogger.js +18 -17
  166. package/dist/infra/log/PinoLogger.js +15 -9
  167. package/dist/infra/log/types.js +12 -0
  168. package/dist/infra/perf/BoundedTaskQueue.js +13 -17
  169. package/dist/media/WaMediaCrypto.js +1 -3
  170. package/dist/media/WaMediaTransferClient.js +259 -58
  171. package/dist/media/conn.js +10 -6
  172. package/dist/media/constants.js +4 -1
  173. package/dist/message/WaMessageClient.js +5 -14
  174. package/dist/message/ack.js +6 -6
  175. package/dist/message/addon-crypto.js +65 -0
  176. package/dist/message/incoming.js +104 -109
  177. package/dist/message/index.js +2 -0
  178. package/dist/message/reporting-token.js +443 -0
  179. package/dist/message/use-case-secret.js +55 -0
  180. package/dist/protocol/appstate.js +59 -1
  181. package/dist/protocol/constants.js +7 -1
  182. package/dist/protocol/index.js +20 -42
  183. package/dist/protocol/jid.js +64 -51
  184. package/dist/protocol/media.js +3 -3
  185. package/dist/protocol/nodes.js +2 -0
  186. package/dist/protocol/usync.js +14 -0
  187. package/dist/retry/index.js +3 -1
  188. package/dist/retry/outbound.js +6 -7
  189. package/dist/retry/parse.js +57 -75
  190. package/dist/retry/replay.js +46 -47
  191. package/dist/retry/tracker.js +59 -0
  192. package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
  193. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  194. package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
  195. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
  196. package/dist/signal/api/SignalSessionSyncApi.js +23 -30
  197. package/dist/signal/crypto/WaAdvSignature.js +2 -4
  198. package/dist/signal/group/SenderKeyChain.js +27 -22
  199. package/dist/signal/group/SenderKeyCodec.js +1 -3
  200. package/dist/signal/group/SenderKeyManager.js +26 -16
  201. package/dist/signal/index.js +3 -1
  202. package/dist/signal/session/SignalProtocol.js +49 -14
  203. package/dist/signal/session/SignalRatchet.js +24 -15
  204. package/dist/signal/session/SignalSession.js +14 -9
  205. package/dist/signal/session/resolver.js +189 -0
  206. package/dist/signal/store/sqlite.js +16 -37
  207. package/dist/store/createStore.js +16 -18
  208. package/dist/store/noop.store.js +3 -6
  209. package/dist/store/providers/memory/appstate.store.js +28 -4
  210. package/dist/store/providers/memory/contact.store.js +5 -0
  211. package/dist/store/providers/memory/device-list.store.js +3 -30
  212. package/dist/store/providers/memory/message.store.js +11 -5
  213. package/dist/store/providers/memory/participants.store.js +1 -8
  214. package/dist/store/providers/memory/sender-key.store.js +8 -10
  215. package/dist/store/providers/memory/signal.store.js +21 -9
  216. package/dist/store/providers/memory/thread.store.js +5 -0
  217. package/dist/store/providers/sqlite/appstate.store.js +81 -0
  218. package/dist/store/providers/sqlite/connection.js +18 -13
  219. package/dist/store/providers/sqlite/contact.store.js +31 -18
  220. package/dist/store/providers/sqlite/device-list.store.js +7 -35
  221. package/dist/store/providers/sqlite/message.store.js +45 -32
  222. package/dist/store/providers/sqlite/migrations.js +1 -1
  223. package/dist/store/providers/sqlite/participants.store.js +1 -9
  224. package/dist/store/providers/sqlite/retry.store.js +8 -11
  225. package/dist/store/providers/sqlite/sender-key.store.js +24 -29
  226. package/dist/store/providers/sqlite/signal.store.js +105 -23
  227. package/dist/store/providers/sqlite/table-names.js +113 -0
  228. package/dist/store/providers/sqlite/thread.store.js +35 -22
  229. package/dist/transport/WaComms.js +27 -25
  230. package/dist/transport/WaWebSocket.js +148 -12
  231. package/dist/transport/binary/decoder.js +4 -4
  232. package/dist/transport/binary/encoder.js +12 -4
  233. package/dist/transport/index.js +7 -1
  234. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  235. package/dist/transport/node/WaNodeOrchestrator.js +2 -4
  236. package/dist/transport/node/WaNodeTransport.js +0 -3
  237. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  238. package/dist/transport/node/builders/index.js +12 -9
  239. package/dist/transport/node/builders/message.js +9 -0
  240. package/dist/transport/node/builders/pairing.js +4 -5
  241. package/dist/transport/node/builders/usync.js +45 -0
  242. package/dist/transport/node/helpers.js +112 -4
  243. package/dist/transport/node/usync.js +38 -0
  244. package/dist/transport/noise/WaFrameCodec.js +47 -32
  245. package/dist/transport/noise/WaNoiseCert.js +5 -8
  246. package/dist/transport/noise/WaNoiseSession.js +17 -10
  247. package/dist/transport/proxy.js +34 -0
  248. package/dist/transport/stream/parse.js +17 -53
  249. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  250. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  251. package/dist/types/appstate/constants.d.ts +1 -0
  252. package/dist/types/appstate/store/sqlite.d.ts +4 -18
  253. package/dist/types/appstate/utils.d.ts +0 -1
  254. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  255. package/dist/types/auth/index.d.ts +0 -2
  256. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  257. package/dist/types/auth/types.d.ts +6 -9
  258. package/dist/types/client/WaClient.d.ts +27 -25
  259. package/dist/types/client/WaClientFactory.d.ts +22 -23
  260. package/dist/types/client/connection/WaConnectionManager.d.ts +64 -0
  261. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  262. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  263. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  264. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +0 -1
  265. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
  266. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
  267. package/dist/types/client/dirty.d.ts +1 -0
  268. package/dist/types/client/events/group.d.ts +2 -1
  269. package/dist/types/client/index.d.ts +1 -1
  270. package/dist/types/client/messaging/fanout.d.ts +14 -0
  271. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  272. package/dist/types/client/messaging/participants.d.ts +13 -0
  273. package/dist/types/client/types.d.ts +24 -1
  274. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  275. package/dist/types/crypto/core/index.d.ts +0 -1
  276. package/dist/types/crypto/core/random.d.ts +1 -7
  277. package/dist/types/crypto/index.d.ts +0 -2
  278. package/dist/types/index.d.ts +1 -1
  279. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  280. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  281. package/dist/types/infra/log/types.d.ts +1 -0
  282. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  283. package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
  284. package/dist/types/media/types.d.ts +5 -0
  285. package/dist/types/message/addon-crypto.d.ts +25 -0
  286. package/dist/types/message/index.d.ts +2 -0
  287. package/dist/types/message/reporting-token.d.ts +19 -0
  288. package/dist/types/message/use-case-secret.d.ts +20 -0
  289. package/dist/types/protocol/appstate.d.ts +58 -0
  290. package/dist/types/protocol/constants.d.ts +2 -1
  291. package/dist/types/protocol/index.d.ts +2 -10
  292. package/dist/types/protocol/jid.d.ts +3 -3
  293. package/dist/types/protocol/nodes.d.ts +2 -0
  294. package/dist/types/protocol/usync.d.ts +11 -0
  295. package/dist/types/retry/index.d.ts +1 -0
  296. package/dist/types/retry/replay.d.ts +0 -4
  297. package/dist/types/retry/tracker.d.ts +19 -0
  298. package/dist/types/retry/types.d.ts +4 -3
  299. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
  300. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  301. package/dist/types/signal/index.d.ts +1 -0
  302. package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
  303. package/dist/types/signal/session/resolver.d.ts +17 -0
  304. package/dist/types/store/contracts/appstate.store.d.ts +3 -0
  305. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  306. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  307. package/dist/types/store/contracts/message.store.d.ts +1 -0
  308. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  309. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  310. package/dist/types/store/contracts/signal.store.d.ts +6 -0
  311. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  312. package/dist/types/store/index.d.ts +1 -1
  313. package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
  314. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  315. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  316. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  317. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  318. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  319. package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
  320. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  321. package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
  322. package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
  323. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
  324. package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
  325. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
  326. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
  327. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
  328. package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
  329. package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
  330. package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
  331. package/dist/types/store/types.d.ts +3 -0
  332. package/dist/types/transport/WaWebSocket.d.ts +3 -0
  333. package/dist/types/transport/index.d.ts +2 -1
  334. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  335. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  336. package/dist/types/transport/node/builders/group.d.ts +4 -6
  337. package/dist/types/transport/node/builders/index.d.ts +2 -1
  338. package/dist/types/transport/node/builders/message.d.ts +14 -25
  339. package/dist/types/transport/node/builders/retry.d.ts +2 -4
  340. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  341. package/dist/types/transport/node/helpers.d.ts +8 -0
  342. package/dist/types/transport/node/usync.d.ts +2 -0
  343. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  344. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
  345. package/dist/types/transport/proxy.d.ts +6 -0
  346. package/dist/types/transport/stream/parse.d.ts +0 -1
  347. package/dist/types/transport/types.d.ts +18 -1
  348. package/dist/types/util/bytes.d.ts +5 -0
  349. package/dist/types/util/primitives.d.ts +3 -0
  350. package/dist/util/bytes.js +55 -33
  351. package/dist/util/coercion.js +6 -14
  352. package/dist/util/primitives.js +42 -14
  353. package/package.json +26 -5
  354. package/dist/crypto/core/encoding.js +0 -29
  355. package/dist/esm/crypto/core/encoding.js +0 -25
  356. package/dist/esm/util/base64.js +0 -18
  357. package/dist/esm/util/signal-address.js +0 -5
  358. package/dist/types/crypto/core/encoding.d.ts +0 -11
  359. package/dist/types/util/base64.d.ts +0 -4
  360. package/dist/types/util/signal-address.d.ts +0 -2
  361. package/dist/util/base64.js +0 -24
  362. package/dist/util/signal-address.js +0 -8
  363. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -1,10 +1,82 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.WaWebSocket = void 0;
4
37
  const ConsoleLogger_1 = require("../infra/log/ConsoleLogger");
5
38
  const constants_1 = require("../protocol/constants");
6
39
  const bytes_1 = require("../util/bytes");
7
40
  const primitives_1 = require("../util/primitives");
41
+ const WS_OPTIONAL_MODULE = 'ws';
42
+ function asOptionalNodeWsConstructor(loaded) {
43
+ if (loaded && typeof loaded === 'object') {
44
+ const direct = loaded.WebSocket;
45
+ if (typeof direct === 'function') {
46
+ return direct;
47
+ }
48
+ const fallback = loaded.default;
49
+ if (typeof fallback === 'function') {
50
+ return fallback;
51
+ }
52
+ }
53
+ if (typeof loaded === 'function') {
54
+ return loaded;
55
+ }
56
+ return null;
57
+ }
58
+ async function loadOptionalNodeWsConstructor() {
59
+ try {
60
+ const loaded = await Promise.resolve(`${WS_OPTIONAL_MODULE}`).then(s => __importStar(require(s)));
61
+ const constructor = asOptionalNodeWsConstructor(loaded);
62
+ if (constructor) {
63
+ return constructor;
64
+ }
65
+ throw new Error('invalid ws module export');
66
+ }
67
+ catch (error) {
68
+ const normalized = (0, primitives_1.toError)(error);
69
+ const code = normalized.code;
70
+ const message = normalized.message ?? '';
71
+ const isModuleNotFound = (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND') &&
72
+ (message.includes(`'${WS_OPTIONAL_MODULE}'`) ||
73
+ message.includes(`"${WS_OPTIONAL_MODULE}"`));
74
+ if (isModuleNotFound) {
75
+ throw new Error('optional dependency "ws" is not installed. Install with: npm i ws');
76
+ }
77
+ throw normalized;
78
+ }
79
+ }
8
80
  function resolveWebSocketConstructor() {
9
81
  const ctor = globalThis
10
82
  .WebSocket;
@@ -16,12 +88,13 @@ function resolveWebSocketConstructor() {
16
88
  function resolveSocketUrls(config) {
17
89
  const preferredUrls = config.urls;
18
90
  if (preferredUrls && preferredUrls.length > 0) {
19
- return Object.freeze(Array.from(new Set(preferredUrls)));
91
+ const unique = [];
92
+ for (const url of preferredUrls)
93
+ if (unique.indexOf(url) === -1)
94
+ unique.push(url);
95
+ return Object.freeze(unique);
20
96
  }
21
- if (config.url) {
22
- return Object.freeze([config.url]);
23
- }
24
- return constants_1.WA_DEFAULTS.CHAT_SOCKET_URLS;
97
+ return config.url ? Object.freeze([config.url]) : constants_1.WA_DEFAULTS.CHAT_SOCKET_URLS;
25
98
  }
26
99
  function resolveSocketRuntime() {
27
100
  const maybeNodeProcess = globalThis.process;
@@ -44,6 +117,7 @@ class WaWebSocket {
44
117
  this.handlers = {};
45
118
  this.socket = null;
46
119
  this.closeWaiter = null;
120
+ this.nodeWsCtorPromise = null;
47
121
  }
48
122
  setHandlers(handlers) {
49
123
  this.handlers = handlers;
@@ -147,7 +221,7 @@ class WaWebSocket {
147
221
  socket.send(data);
148
222
  }
149
223
  async openSingle(url) {
150
- const pending = this.createPendingSocket(url);
224
+ const pending = await this.createPendingSocket(url);
151
225
  return new Promise((resolve, reject) => {
152
226
  this.bindPendingSocket(pending, {
153
227
  onOpen: () => {
@@ -169,7 +243,20 @@ class WaWebSocket {
169
243
  });
170
244
  }
171
245
  async openConcurrently(urls) {
172
- const pendingSockets = urls.map((url) => this.createPendingSocket(url));
246
+ const setupResults = await Promise.allSettled(urls.map((url) => this.createPendingSocket(url)));
247
+ const pendingSockets = [];
248
+ let setupError = null;
249
+ for (const result of setupResults) {
250
+ if (result.status === 'fulfilled') {
251
+ pendingSockets.push(result.value);
252
+ continue;
253
+ }
254
+ setupError = setupError ?? (0, primitives_1.toError)(result.reason);
255
+ }
256
+ if (setupError) {
257
+ this.releasePendingSocketsAfterSetupFailure(pendingSockets);
258
+ throw setupError;
259
+ }
173
260
  return new Promise((resolve, reject) => {
174
261
  let done = false;
175
262
  let failedCount = 0;
@@ -213,6 +300,14 @@ class WaWebSocket {
213
300
  }
214
301
  });
215
302
  }
303
+ releasePendingSocketsAfterSetupFailure(entries) {
304
+ for (const entry of entries) {
305
+ if (!this.settlePendingSocket(entry)) {
306
+ continue;
307
+ }
308
+ this.closeSocketSafe(entry.socket, 1000, 'connect_setup_failed');
309
+ }
310
+ }
216
311
  bindRuntimeHandlers(socket) {
217
312
  socket.onmessage = (event) => {
218
313
  void this.handleMessage(event.data);
@@ -260,8 +355,8 @@ class WaWebSocket {
260
355
  }
261
356
  return null;
262
357
  }
263
- createPendingSocket(url) {
264
- const socket = this.createRawSocket(url);
358
+ async createPendingSocket(url) {
359
+ const socket = await this.createRawSocket(url);
265
360
  socket.binaryType = 'arraybuffer';
266
361
  this.connectingSockets.add(socket);
267
362
  return {
@@ -354,12 +449,53 @@ class WaWebSocket {
354
449
  // no-op
355
450
  }
356
451
  }
357
- createRawSocket(url) {
452
+ async createRawSocket(url) {
358
453
  const headers = this.config.headers;
359
- if (this.socketRuntime === 'node' && headers && Object.keys(headers).length > 0) {
360
- return new this.webSocketCtor(url, this.config.protocols, { headers });
454
+ const dispatcher = this.config.dispatcher;
455
+ const agent = this.config.agent;
456
+ let hasHeaders = false;
457
+ if (headers) {
458
+ for (const key in headers) {
459
+ if (Object.prototype.hasOwnProperty.call(headers, key)) {
460
+ hasHeaders = true;
461
+ break;
462
+ }
463
+ }
464
+ }
465
+ if (this.socketRuntime === 'node' && agent) {
466
+ const nodeWsCtor = await this.resolveNodeWsConstructor();
467
+ return new nodeWsCtor(url, this.config.protocols, {
468
+ headers,
469
+ agent
470
+ });
471
+ }
472
+ if (this.socketRuntime === 'node' && (hasHeaders || dispatcher || agent)) {
473
+ const globalWebSocketCtor = globalThis.WebSocket;
474
+ if (globalWebSocketCtor && this.webSocketCtor === globalWebSocketCtor) {
475
+ const init = {
476
+ protocols: this.config.protocols,
477
+ headers,
478
+ dispatcher,
479
+ agent
480
+ };
481
+ return new this.webSocketCtor(url, init);
482
+ }
483
+ return new this.webSocketCtor(url, this.config.protocols, {
484
+ headers,
485
+ dispatcher,
486
+ agent
487
+ });
361
488
  }
362
489
  return new this.webSocketCtor(url, this.config.protocols);
363
490
  }
491
+ async resolveNodeWsConstructor() {
492
+ if (!this.nodeWsCtorPromise) {
493
+ this.nodeWsCtorPromise = loadOptionalNodeWsConstructor().catch((error) => {
494
+ this.nodeWsCtorPromise = null;
495
+ throw error;
496
+ });
497
+ }
498
+ return this.nodeWsCtorPromise;
499
+ }
364
500
  }
365
501
  exports.WaWebSocket = WaWebSocket;
@@ -242,10 +242,10 @@ function decodeNodeInternal(reader) {
242
242
  }
243
243
  }
244
244
  }
245
- if (content === null || content === undefined) {
246
- return { tag: tagValue, attrs };
247
- }
248
- return { tag: tagValue, attrs, content };
245
+ const node = content === null || content === undefined
246
+ ? { tag: tagValue, attrs }
247
+ : { tag: tagValue, attrs, content };
248
+ return node;
249
249
  }
250
250
  function decodeBinaryNode(data) {
251
251
  const reader = new ByteReader(data);
@@ -171,14 +171,22 @@ function writeListSize(size, writer) {
171
171
  writer.writeUint16(size);
172
172
  }
173
173
  function writeNodeInternal(node, writer) {
174
- const attrs = Object.entries(node.attrs);
174
+ let attrsLen = 0;
175
+ for (const key in node.attrs) {
176
+ if (Object.prototype.hasOwnProperty.call(node.attrs, key)) {
177
+ attrsLen += 1;
178
+ }
179
+ }
175
180
  const hasContent = node.content !== null && node.content !== undefined;
176
- const listSize = 1 + attrs.length * 2 + (hasContent ? 1 : 0);
181
+ const listSize = 1 + attrsLen * 2 + (hasContent ? 1 : 0);
177
182
  writeListSize(listSize, writer);
178
183
  writeString(node.tag, writer);
179
- for (const [key, value] of attrs) {
184
+ for (const key in node.attrs) {
185
+ if (!Object.prototype.hasOwnProperty.call(node.attrs, key)) {
186
+ continue;
187
+ }
180
188
  writeString(key, writer);
181
- writeString(value, writer);
189
+ writeString(node.attrs[key], writer);
182
190
  }
183
191
  if (!hasContent) {
184
192
  return;
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.queryWithContext = exports.parseIqError = exports.buildIqNode = exports.assertIqResult = exports.WaNodeTransport = exports.WaNodeOrchestrator = exports.WaKeepAlive = exports.WaWebSocket = exports.WaComms = void 0;
3
+ exports.queryWithContext = exports.parseIqError = exports.buildIqNode = exports.assertIqResult = exports.WaNodeTransport = exports.WaNodeOrchestrator = exports.WaKeepAlive = exports.WaWebSocket = exports.WaComms = exports.toProxyDispatcher = exports.toProxyAgent = exports.isProxyTransport = exports.isProxyDispatcher = exports.isProxyAgent = void 0;
4
+ var proxy_1 = require("./proxy");
5
+ Object.defineProperty(exports, "isProxyAgent", { enumerable: true, get: function () { return proxy_1.isProxyAgent; } });
6
+ Object.defineProperty(exports, "isProxyDispatcher", { enumerable: true, get: function () { return proxy_1.isProxyDispatcher; } });
7
+ Object.defineProperty(exports, "isProxyTransport", { enumerable: true, get: function () { return proxy_1.isProxyTransport; } });
8
+ Object.defineProperty(exports, "toProxyAgent", { enumerable: true, get: function () { return proxy_1.toProxyAgent; } });
9
+ Object.defineProperty(exports, "toProxyDispatcher", { enumerable: true, get: function () { return proxy_1.toProxyDispatcher; } });
4
10
  var WaComms_1 = require("./WaComms");
5
11
  Object.defineProperty(exports, "WaComms", { enumerable: true, get: function () { return WaComms_1.WaComms; } });
6
12
  var WaWebSocket_1 = require("./WaWebSocket");
@@ -15,7 +15,7 @@ class WaKeepAlive {
15
15
  this.timeoutMs = options.timeoutMs ?? constants_1.WA_DEFAULTS.DEAD_SOCKET_TIMEOUT_MS;
16
16
  this.hostDomain = options.hostDomain ?? constants_1.WA_DEFAULTS.HOST_DOMAIN;
17
17
  this.jitterRatio = this.normalizeJitterRatio(options.jitterRatio);
18
- this.minJitterMs = this.normalizeMinJitterMs(options.minJitterMs);
18
+ this.minJitterMs = (0, primitives_1.normalizeNonNegativeInteger)(options.minJitterMs, KEEPALIVE_DEFAULT_MIN_JITTER_MS);
19
19
  this.timer = null;
20
20
  this.generation = 0;
21
21
  this.inFlight = false;
@@ -113,12 +113,6 @@ class WaKeepAlive {
113
113
  const normalized = value;
114
114
  return Math.min(Math.max(normalized, 0), KEEPALIVE_MAX_JITTER_RATIO);
115
115
  }
116
- normalizeMinJitterMs(value) {
117
- if (!Number.isFinite(value)) {
118
- return KEEPALIVE_DEFAULT_MIN_JITTER_MS;
119
- }
120
- return Math.max(0, Math.trunc(value));
121
- }
122
116
  computeNextDelayMs() {
123
117
  if (this.intervalMs <= 0) {
124
118
  return 0;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaNodeOrchestrator = void 0;
4
4
  const constants_1 = require("../../protocol/constants");
5
5
  const primitives_1 = require("../../util/primitives");
6
+ const helpers_1 = require("./helpers");
6
7
  class WaNodeOrchestrator {
7
8
  constructor(options) {
8
9
  this.logger = options.logger;
@@ -136,10 +137,7 @@ class WaNodeOrchestrator {
136
137
  return this.stanzaPrefix;
137
138
  }
138
139
  generateStanzaPrefix() {
139
- const seed = crypto.getRandomValues(new Uint8Array(4));
140
- const left = seed[0] * 256 + seed[1];
141
- const right = seed[2] * 256 + seed[3];
142
- const prefix = `${left}.${right}-`;
140
+ const prefix = (0, helpers_1.formatNodeIdPrefixFromSeed)(crypto.getRandomValues(new Uint8Array(4)));
143
141
  this.logger.debug('generated stanza prefix', { prefix });
144
142
  return prefix;
145
143
  }
@@ -12,9 +12,6 @@ class WaNodeTransport extends node_events_1.EventEmitter {
12
12
  this.logger = logger;
13
13
  this.comms = null;
14
14
  }
15
- on(event, listener) {
16
- return super.on(event, listener);
17
- }
18
15
  bindComms(comms) {
19
16
  this.comms = comms;
20
17
  this.logger.debug('node transport bindComms', { connected: comms !== null });
@@ -8,44 +8,24 @@ exports.buildGroupsDirtySyncIq = buildGroupsDirtySyncIq;
8
8
  exports.buildNewsletterMetadataSyncIq = buildNewsletterMetadataSyncIq;
9
9
  exports.buildClearDirtyBitsIq = buildClearDirtyBitsIq;
10
10
  const constants_1 = require("../../../protocol/constants");
11
+ const usync_1 = require("../../node/builders/usync");
11
12
  const query_1 = require("../../node/query");
12
13
  function buildAccountDevicesSyncIq(userJids, sid) {
13
- return (0, query_1.buildIqNode)('get', constants_1.WA_DEFAULTS.HOST_DOMAIN, constants_1.WA_XMLNS.USYNC, [
14
- {
15
- tag: constants_1.WA_NODE_TAGS.USYNC,
16
- attrs: {
17
- sid,
18
- index: '0',
19
- last: 'true',
20
- mode: constants_1.WA_NODE_TAGS.QUERY,
21
- context: constants_1.WA_NODE_TAGS.NOTIFICATION
22
- },
23
- content: [
24
- {
25
- tag: constants_1.WA_NODE_TAGS.QUERY,
26
- attrs: {},
27
- content: [
28
- {
29
- tag: constants_1.WA_NODE_TAGS.DEVICES,
30
- attrs: {
31
- version: '2'
32
- }
33
- }
34
- ]
35
- },
36
- {
37
- tag: constants_1.WA_NODE_TAGS.LIST,
38
- attrs: {},
39
- content: userJids.map((jid) => ({
40
- tag: constants_1.WA_NODE_TAGS.USER,
41
- attrs: {
42
- jid
43
- }
44
- }))
14
+ return (0, usync_1.buildUsyncIq)({
15
+ sid,
16
+ context: constants_1.WA_USYNC_CONTEXTS.NOTIFICATION,
17
+ queryProtocolNodes: [
18
+ {
19
+ tag: constants_1.WA_NODE_TAGS.DEVICES,
20
+ attrs: {
21
+ version: '2'
45
22
  }
46
- ]
47
- }
48
- ]);
23
+ }
24
+ ],
25
+ users: userJids.map((jid) => ({
26
+ jid
27
+ }))
28
+ });
49
29
  }
50
30
  function buildAccountPictureSyncIq(meJid) {
51
31
  return (0, query_1.buildIqNode)('get', constants_1.WA_DEFAULTS.HOST_DOMAIN, constants_1.WA_XMLNS.PROFILE_PICTURE, [
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildLeaveGroupIq = exports.buildGroupParticipantChangeIq = exports.buildCreateGroupIq = exports.buildSignedPreKeyRotateIq = exports.buildPreKeyUploadIq = exports.buildMissingPreKeysFetchIq = exports.buildRetryReceiptNode = exports.buildInboundRetryReceiptAckNode = exports.buildInboundRetryReceiptNode = exports.buildInboundReceiptAckNode = exports.buildInboundMessageAckNode = exports.buildInboundDeliveryReceiptNode = exports.buildGroupSenderKeyMessageNode = exports.buildGroupRetryMessageNode = exports.buildGroupDirectMessageNode = exports.buildDirectMessageFanoutNode = exports.buildMediaConnIq = exports.buildNotificationAckNode = exports.buildIqResultNode = exports.buildGetCountryCodeRequestNode = exports.buildCompanionHelloRequestNode = exports.buildCompanionFinishRequestNode = exports.buildNewsletterMetadataSyncIq = exports.buildGroupsDirtySyncIq = exports.buildClearDirtyBitsIq = exports.buildAccountPrivacySyncIq = exports.buildAccountPictureSyncIq = exports.buildAccountDevicesSyncIq = exports.buildAccountBlocklistSyncIq = void 0;
4
- var accountSync_1 = require("../../node/builders/accountSync");
5
- Object.defineProperty(exports, "buildAccountBlocklistSyncIq", { enumerable: true, get: function () { return accountSync_1.buildAccountBlocklistSyncIq; } });
6
- Object.defineProperty(exports, "buildAccountDevicesSyncIq", { enumerable: true, get: function () { return accountSync_1.buildAccountDevicesSyncIq; } });
7
- Object.defineProperty(exports, "buildAccountPictureSyncIq", { enumerable: true, get: function () { return accountSync_1.buildAccountPictureSyncIq; } });
8
- Object.defineProperty(exports, "buildAccountPrivacySyncIq", { enumerable: true, get: function () { return accountSync_1.buildAccountPrivacySyncIq; } });
9
- Object.defineProperty(exports, "buildClearDirtyBitsIq", { enumerable: true, get: function () { return accountSync_1.buildClearDirtyBitsIq; } });
10
- Object.defineProperty(exports, "buildGroupsDirtySyncIq", { enumerable: true, get: function () { return accountSync_1.buildGroupsDirtySyncIq; } });
11
- Object.defineProperty(exports, "buildNewsletterMetadataSyncIq", { enumerable: true, get: function () { return accountSync_1.buildNewsletterMetadataSyncIq; } });
3
+ exports.buildUsyncUserNode = exports.buildUsyncIq = exports.buildLeaveGroupIq = exports.buildGroupParticipantChangeIq = exports.buildCreateGroupIq = exports.buildSignedPreKeyRotateIq = exports.buildPreKeyUploadIq = exports.buildMissingPreKeysFetchIq = exports.buildRetryReceiptNode = exports.buildInboundRetryReceiptAckNode = exports.buildInboundRetryReceiptNode = exports.buildInboundReceiptAckNode = exports.buildInboundMessageAckNode = exports.buildInboundDeliveryReceiptNode = exports.buildGroupSenderKeyMessageNode = exports.buildGroupRetryMessageNode = exports.buildGroupDirectMessageNode = exports.buildDirectMessageFanoutNode = exports.buildMediaConnIq = exports.buildNotificationAckNode = exports.buildIqResultNode = exports.buildGetCountryCodeRequestNode = exports.buildCompanionHelloRequestNode = exports.buildCompanionFinishRequestNode = exports.buildNewsletterMetadataSyncIq = exports.buildGroupsDirtySyncIq = exports.buildClearDirtyBitsIq = exports.buildAccountPrivacySyncIq = exports.buildAccountPictureSyncIq = exports.buildAccountDevicesSyncIq = exports.buildAccountBlocklistSyncIq = void 0;
4
+ var account_sync_1 = require("../../node/builders/account-sync");
5
+ Object.defineProperty(exports, "buildAccountBlocklistSyncIq", { enumerable: true, get: function () { return account_sync_1.buildAccountBlocklistSyncIq; } });
6
+ Object.defineProperty(exports, "buildAccountDevicesSyncIq", { enumerable: true, get: function () { return account_sync_1.buildAccountDevicesSyncIq; } });
7
+ Object.defineProperty(exports, "buildAccountPictureSyncIq", { enumerable: true, get: function () { return account_sync_1.buildAccountPictureSyncIq; } });
8
+ Object.defineProperty(exports, "buildAccountPrivacySyncIq", { enumerable: true, get: function () { return account_sync_1.buildAccountPrivacySyncIq; } });
9
+ Object.defineProperty(exports, "buildClearDirtyBitsIq", { enumerable: true, get: function () { return account_sync_1.buildClearDirtyBitsIq; } });
10
+ Object.defineProperty(exports, "buildGroupsDirtySyncIq", { enumerable: true, get: function () { return account_sync_1.buildGroupsDirtySyncIq; } });
11
+ Object.defineProperty(exports, "buildNewsletterMetadataSyncIq", { enumerable: true, get: function () { return account_sync_1.buildNewsletterMetadataSyncIq; } });
12
12
  var pairing_1 = require("../../node/builders/pairing");
13
13
  Object.defineProperty(exports, "buildCompanionFinishRequestNode", { enumerable: true, get: function () { return pairing_1.buildCompanionFinishRequestNode; } });
14
14
  Object.defineProperty(exports, "buildCompanionHelloRequestNode", { enumerable: true, get: function () { return pairing_1.buildCompanionHelloRequestNode; } });
@@ -37,3 +37,6 @@ var group_1 = require("../../node/builders/group");
37
37
  Object.defineProperty(exports, "buildCreateGroupIq", { enumerable: true, get: function () { return group_1.buildCreateGroupIq; } });
38
38
  Object.defineProperty(exports, "buildGroupParticipantChangeIq", { enumerable: true, get: function () { return group_1.buildGroupParticipantChangeIq; } });
39
39
  Object.defineProperty(exports, "buildLeaveGroupIq", { enumerable: true, get: function () { return group_1.buildLeaveGroupIq; } });
40
+ var usync_1 = require("../../node/builders/usync");
41
+ Object.defineProperty(exports, "buildUsyncIq", { enumerable: true, get: function () { return usync_1.buildUsyncIq; } });
42
+ Object.defineProperty(exports, "buildUsyncUserNode", { enumerable: true, get: function () { return usync_1.buildUsyncUserNode; } });
@@ -50,6 +50,9 @@ function buildDirectMessageFanoutNode(input) {
50
50
  content: input.deviceIdentity
51
51
  });
52
52
  }
53
+ if (input.reportingNode) {
54
+ content.push(input.reportingNode);
55
+ }
53
56
  return {
54
57
  tag: constants_1.WA_MESSAGE_TAGS.MESSAGE,
55
58
  attrs,
@@ -108,6 +111,9 @@ function buildGroupSenderKeyMessageNode(input) {
108
111
  content: input.deviceIdentity
109
112
  });
110
113
  }
114
+ if (input.reportingNode) {
115
+ content.push(input.reportingNode);
116
+ }
111
117
  return {
112
118
  tag: constants_1.WA_MESSAGE_TAGS.MESSAGE,
113
119
  attrs,
@@ -160,6 +166,9 @@ function buildGroupDirectMessageNode(input) {
160
166
  content: input.deviceIdentity
161
167
  });
162
168
  }
169
+ if (input.reportingNode) {
170
+ content.push(input.reportingNode);
171
+ }
163
172
  return {
164
173
  tag: constants_1.WA_MESSAGE_TAGS.MESSAGE,
165
174
  attrs,
@@ -6,8 +6,7 @@ exports.buildCompanionFinishRequestNode = buildCompanionFinishRequestNode;
6
6
  exports.buildNotificationAckNode = buildNotificationAckNode;
7
7
  exports.buildIqResultNode = buildIqResultNode;
8
8
  const constants_1 = require("../../../protocol/constants");
9
- const ZERO_BYTE = new Uint8Array([0]);
10
- const NOTIFICATION_CLASS = constants_1.WA_NODE_TAGS.NOTIFICATION;
9
+ const bytes_1 = require("../../../util/bytes");
11
10
  function buildCompanionHelloRequestNode(args) {
12
11
  return {
13
12
  tag: constants_1.WA_NODE_TAGS.IQ,
@@ -50,7 +49,7 @@ function buildCompanionHelloRequestNode(args) {
50
49
  {
51
50
  tag: 'link_code_pairing_nonce',
52
51
  attrs: {},
53
- content: ZERO_BYTE
52
+ content: bytes_1.ZERO_BYTES
54
53
  }
55
54
  ]
56
55
  }
@@ -114,8 +113,8 @@ function buildCompanionFinishRequestNode(args) {
114
113
  function buildNotificationAckNode(node, typeOverride) {
115
114
  const attrs = {
116
115
  to: node.attrs.from ?? constants_1.WA_DEFAULTS.HOST_DOMAIN,
117
- class: NOTIFICATION_CLASS,
118
- type: typeOverride ?? node.attrs.type ?? NOTIFICATION_CLASS
116
+ class: constants_1.WA_NODE_TAGS.NOTIFICATION,
117
+ type: typeOverride ?? node.attrs.type ?? constants_1.WA_NODE_TAGS.NOTIFICATION
119
118
  };
120
119
  if (node.attrs.id) {
121
120
  attrs.id = node.attrs.id;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildUsyncUserNode = buildUsyncUserNode;
4
+ exports.buildUsyncIq = buildUsyncIq;
5
+ const constants_1 = require("../../../protocol/constants");
6
+ const query_1 = require("../../node/query");
7
+ function buildUsyncUserNode(input) {
8
+ return {
9
+ tag: constants_1.WA_NODE_TAGS.USER,
10
+ attrs: {
11
+ ...input.attrs,
12
+ jid: input.jid
13
+ },
14
+ ...(input.content !== undefined ? { content: input.content } : {})
15
+ };
16
+ }
17
+ function buildUsyncIq(input) {
18
+ if (input.queryProtocolNodes.length === 0) {
19
+ throw new Error('usync query must include at least one protocol node');
20
+ }
21
+ return (0, query_1.buildIqNode)('get', input.hostDomain ?? constants_1.WA_DEFAULTS.HOST_DOMAIN, constants_1.WA_XMLNS.USYNC, [
22
+ {
23
+ tag: constants_1.WA_NODE_TAGS.USYNC,
24
+ attrs: {
25
+ sid: input.sid,
26
+ index: input.index ?? constants_1.WA_USYNC_DEFAULTS.INDEX,
27
+ last: input.last ?? constants_1.WA_USYNC_DEFAULTS.LAST,
28
+ mode: input.mode ?? constants_1.WA_USYNC_MODES.QUERY,
29
+ context: input.context ?? constants_1.WA_USYNC_CONTEXTS.INTERACTIVE
30
+ },
31
+ content: [
32
+ {
33
+ tag: constants_1.WA_NODE_TAGS.QUERY,
34
+ attrs: {},
35
+ content: [...input.queryProtocolNodes]
36
+ },
37
+ {
38
+ tag: constants_1.WA_NODE_TAGS.LIST,
39
+ attrs: {},
40
+ content: input.users.map((user) => buildUsyncUserNode(user))
41
+ }
42
+ ]
43
+ }
44
+ ]);
45
+ }