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
@@ -4,6 +4,10 @@ exports.resolveWaClientBase = resolveWaClientBase;
4
4
  exports.buildWaClientDependencies = buildWaClientDependencies;
5
5
  const WaAppStateSyncClient_1 = require("../appstate/WaAppStateSyncClient");
6
6
  const WaAuthClient_1 = require("../auth/WaAuthClient");
7
+ const WaConnectionManager_1 = require("./connection/WaConnectionManager");
8
+ const WaKeyShareCoordinator_1 = require("./connection/WaKeyShareCoordinator");
9
+ const WaReceiptQueue_1 = require("./connection/WaReceiptQueue");
10
+ const WaAppStateMutationCoordinator_1 = require("./coordinators/WaAppStateMutationCoordinator");
7
11
  const WaGroupCoordinator_1 = require("./coordinators/WaGroupCoordinator");
8
12
  const WaIncomingNodeCoordinator_1 = require("./coordinators/WaIncomingNodeCoordinator");
9
13
  const WaMessageDispatchCoordinator_1 = require("./coordinators/WaMessageDispatchCoordinator");
@@ -12,10 +16,14 @@ const WaRetryCoordinator_1 = require("./coordinators/WaRetryCoordinator");
12
16
  const WaStreamControlCoordinator_1 = require("./coordinators/WaStreamControlCoordinator");
13
17
  const dirty_1 = require("./dirty");
14
18
  const messages_1 = require("./messages");
19
+ const fanout_1 = require("./messaging/fanout");
20
+ const key_protocol_1 = require("./messaging/key-protocol");
21
+ const participants_1 = require("./messaging/participants");
15
22
  const WaMediaTransferClient_1 = require("../media/WaMediaTransferClient");
16
23
  const incoming_1 = require("../message/incoming");
17
24
  const WaMessageClient_1 = require("../message/WaMessageClient");
18
25
  const constants_1 = require("../protocol/constants");
26
+ const tracker_1 = require("../retry/tracker");
19
27
  const SignalDeviceSyncApi_1 = require("../signal/api/SignalDeviceSyncApi");
20
28
  const SignalDigestSyncApi_1 = require("../signal/api/SignalDigestSyncApi");
21
29
  const SignalIdentitySyncApi_1 = require("../signal/api/SignalIdentitySyncApi");
@@ -23,13 +31,38 @@ const SignalMissingPreKeysSyncApi_1 = require("../signal/api/SignalMissingPreKey
23
31
  const SignalRotateKeyApi_1 = require("../signal/api/SignalRotateKeyApi");
24
32
  const SignalSessionSyncApi_1 = require("../signal/api/SignalSessionSyncApi");
25
33
  const SenderKeyManager_1 = require("../signal/group/SenderKeyManager");
34
+ const resolver_1 = require("../signal/session/resolver");
26
35
  const SignalProtocol_1 = require("../signal/session/SignalProtocol");
27
36
  const WaKeepAlive_1 = require("../transport/keepalive/WaKeepAlive");
37
+ const usync_1 = require("../transport/node/usync");
28
38
  const WaNodeOrchestrator_1 = require("../transport/node/WaNodeOrchestrator");
29
39
  const WaNodeTransport_1 = require("../transport/node/WaNodeTransport");
40
+ const proxy_1 = require("../transport/proxy");
30
41
  const primitives_1 = require("../util/primitives");
31
42
  const runtime_1 = require("../util/runtime");
43
+ function assertProxyTransport(value, path) {
44
+ if (value === undefined) {
45
+ return;
46
+ }
47
+ if (!(0, proxy_1.isProxyTransport)(value)) {
48
+ throw new Error(`${path} must be a proxy transport instance (dispatcher with dispatch(...) or agent with addRequest(...))`);
49
+ }
50
+ }
51
+ function validateProxyOptions(options) {
52
+ const rawProxy = options.proxy;
53
+ if (rawProxy === undefined) {
54
+ return;
55
+ }
56
+ if (typeof rawProxy !== 'object' || rawProxy === null || Array.isArray(rawProxy)) {
57
+ throw new Error('proxy must be an object with optional ws/mediaUpload/mediaDownload');
58
+ }
59
+ const proxy = rawProxy;
60
+ assertProxyTransport(proxy?.ws, 'proxy.ws');
61
+ assertProxyTransport(proxy?.mediaUpload, 'proxy.mediaUpload');
62
+ assertProxyTransport(proxy?.mediaDownload, 'proxy.mediaDownload');
63
+ }
32
64
  function resolveWaClientBase(options, logger) {
65
+ validateProxyOptions(options);
33
66
  const deviceBrowser = options.deviceBrowser ?? constants_1.WA_DEFAULTS.DEVICE_BROWSER;
34
67
  const sessionId = options.sessionId.trim();
35
68
  if (sessionId.length === 0) {
@@ -61,79 +94,39 @@ function resolveWaClientBase(options, logger) {
61
94
  sessionStore
62
95
  };
63
96
  }
64
- function createAuthClient(input) {
65
- const { options, logger, sessionStore, host } = input;
66
- return new WaAuthClient_1.WaAuthClient({
67
- deviceBrowser: options.deviceBrowser,
68
- deviceOsDisplayName: options.deviceOsDisplayName,
69
- devicePlatform: options.devicePlatform,
70
- requireFullSync: options.requireFullSync
71
- }, {
72
- logger,
73
- authStore: sessionStore.auth,
74
- signalStore: sessionStore.signal,
75
- socket: {
76
- sendNode: host.sendNode,
77
- query: host.query
78
- },
79
- callbacks: {
80
- onQr: (qr, ttlMs) => host.emitEvent('auth_qr', { qr, ttlMs }),
81
- onPairingCode: (code) => host.emitEvent('auth_pairing_code', { code }),
82
- onPairingRefresh: (forceManual) => host.emitEvent('auth_pairing_refresh', { forceManual }),
83
- onPaired: (credentials) => {
84
- host.emitEvent('auth_paired', { credentials });
85
- host.scheduleReconnectAfterPairing();
86
- },
87
- onError: (error) => host.handleError(error)
88
- }
89
- });
90
- }
91
- function createCurrentAuthGetters(authClient) {
92
- const getCurrentCredentials = () => authClient.getCurrentCredentials();
93
- return {
94
- getCurrentCredentials,
95
- getCurrentMeJid: () => getCurrentCredentials()?.meJid,
96
- getCurrentMeLid: () => getCurrentCredentials()?.meLid,
97
- getCurrentSignedIdentity: () => getCurrentCredentials()?.signedIdentity
98
- };
99
- }
100
97
  function createIncomingMessageAckOptions(input) {
101
- const { logger, host, getCurrentMeJid, signalProtocol, senderKeyManager, retryCoordinator } = input;
98
+ const { logger, sendNode, emitEvent, handleIncomingMessageEvent, handleError, getCurrentMeJid, signalProtocol, senderKeyManager, retryCoordinator } = input;
102
99
  return {
103
100
  logger,
104
- sendNode: host.sendNode,
101
+ sendNode,
105
102
  getMeJid: getCurrentMeJid,
106
103
  signalProtocol,
107
104
  senderKeyManager,
108
105
  onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
109
106
  emitIncomingMessage: (event) => {
110
- void host
111
- .handleIncomingMessageEvent(event)
112
- .catch((err) => host.handleError((0, primitives_1.toError)(err)));
107
+ void handleIncomingMessageEvent(event).catch((err) => handleError((0, primitives_1.toError)(err)));
113
108
  },
114
- emitUnhandledStanza: (event) => host.emitEvent('stanza_unhandled', event)
109
+ emitUnhandledStanza: (event) => emitEvent('stanza_unhandled', event)
115
110
  };
116
111
  }
117
112
  function createHandleClientDirtyBits(input) {
118
- const { logger, host, getCurrentCredentials } = input;
113
+ const { logger, queryWithContext, syncAppState, getCurrentCredentials, generateUsyncSid } = input;
119
114
  return (dirtyBits) => (0, dirty_1.handleDirtyBits)({
120
115
  logger,
121
- queryWithContext: host.queryWithContext,
116
+ queryWithContext,
122
117
  getCurrentCredentials,
123
- syncAppState: host.syncAppState
118
+ syncAppState,
119
+ generateUsyncSid
124
120
  }, dirtyBits);
125
121
  }
126
122
  function createIncomingNodeRuntime(input) {
127
- const { logger, host, authClient, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, getCurrentMeJid, handleClientDirtyBits, incomingMessageAckOptions } = input;
123
+ const { logger, emitEvent, authClient, connectionManager, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, sendNode, syncAppState, disconnect, clearStoredCredentials, getCurrentMeJid, handleClientDirtyBits, incomingMessageAckOptions } = input;
128
124
  return {
129
125
  handleStreamControlResult: streamControl.handleStreamControlResult,
130
126
  persistSuccessAttributes: (attributes) => authClient.persistSuccessAttributes(attributes),
131
- emitSuccessNode: (node) => host.emitEvent('connection_success', { node }),
132
- updateClockSkewFromSuccess: host.updateClockSkewFromSuccess,
133
- shouldWarmupMediaConn: () => {
134
- const comms = host.getComms();
135
- return !!(getCurrentMeJid() && comms && comms.getCommsState().connected);
136
- },
127
+ emitSuccessNode: (node) => emitEvent('connection_success', { node }),
128
+ updateClockSkewFromSuccess: (serverUnixSeconds) => connectionManager.updateClockSkewFromSuccess(serverUnixSeconds),
129
+ shouldWarmupMediaConn: () => !!(getCurrentMeJid() && connectionManager.isConnected()),
137
130
  warmupMediaConn: async () => {
138
131
  await (0, messages_1.getMediaConn)(mediaMessageBuildOptions, true);
139
132
  },
@@ -144,18 +137,18 @@ function createIncomingNodeRuntime(input) {
144
137
  handleLinkCodeNotificationNode: (node) => authClient.handleLinkCodeNotification(node),
145
138
  handleCompanionRegRefreshNotificationNode: (node) => authClient.handleCompanionRegRefreshNotification(node),
146
139
  handleIncomingMessageNode: (node) => (0, incoming_1.handleIncomingMessageAck)(node, incomingMessageAckOptions),
147
- sendNode: host.sendNode,
140
+ sendNode,
148
141
  handleIncomingRetryReceipt: (node) => retryCoordinator.handleIncomingRetryReceipt(node),
149
142
  trackOutboundReceipt: (node) => retryCoordinator.trackOutboundReceipt(node),
150
- emitIncomingReceipt: (event) => host.emitEvent('message_receipt', event),
151
- emitIncomingPresence: (event) => host.emitEvent('presence', event),
152
- emitIncomingChatstate: (event) => host.emitEvent('chatstate', event),
153
- emitIncomingCall: (event) => host.emitEvent('call', event),
154
- emitIncomingFailure: (event) => host.emitEvent('failure', event),
155
- emitIncomingErrorStanza: (event) => host.emitEvent('stanza_error', event),
156
- emitIncomingNotification: (event) => host.emitEvent('notification', event),
143
+ emitIncomingReceipt: (event) => emitEvent('message_receipt', event),
144
+ emitIncomingPresence: (event) => emitEvent('presence', event),
145
+ emitIncomingChatstate: (event) => emitEvent('chatstate', event),
146
+ emitIncomingCall: (event) => emitEvent('call', event),
147
+ emitIncomingFailure: (event) => emitEvent('failure', event),
148
+ emitIncomingErrorStanza: (event) => emitEvent('stanza_error', event),
149
+ emitIncomingNotification: (event) => emitEvent('notification', event),
157
150
  emitGroupEvent: (event) => {
158
- host.emitEvent('group_event', event);
151
+ emitEvent('group_event', event);
159
152
  void messageDispatch.mutateParticipantsCacheFromGroupEvent(event).catch((error) => {
160
153
  logger.warn('failed to mutate participants cache from group event', {
161
154
  action: event.action,
@@ -165,29 +158,35 @@ function createIncomingNodeRuntime(input) {
165
158
  });
166
159
  });
167
160
  },
168
- emitUnhandledIncomingNode: (event) => host.emitEvent('stanza_unhandled', event),
169
- syncAppState: host.syncAppState,
170
- disconnect: host.disconnect,
171
- clearStoredCredentials: host.clearStoredState,
161
+ emitUnhandledIncomingNode: (event) => emitEvent('stanza_unhandled', event),
162
+ syncAppState,
163
+ disconnect,
164
+ clearStoredCredentials,
172
165
  parseDirtyBits: (nodes) => (0, dirty_1.parseDirtyBits)(nodes, logger),
173
166
  handleDirtyBits: (dirtyBits) => handleClientDirtyBits(dirtyBits)
174
167
  };
175
168
  }
176
169
  function createPassiveTasksRuntime(input) {
177
- const { host, authClient, nodeOrchestrator, getCurrentCredentials } = input;
170
+ const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials } = input;
178
171
  return {
179
- queryWithContext: host.queryWithContext,
172
+ queryWithContext,
180
173
  getCurrentCredentials,
181
174
  persistServerHasPreKeys: (serverHasPreKeys) => authClient.persistServerHasPreKeys(serverHasPreKeys),
182
175
  sendNodeDirect: (node) => nodeOrchestrator.sendNode(node),
183
- takeDanglingReceipts: host.takeDanglingReceipts,
184
- requeueDanglingReceipt: host.enqueueDanglingReceipt,
185
- shouldQueueDanglingReceipt: host.shouldQueueDanglingReceipt
176
+ takeDanglingReceipts: () => receiptQueue.take(),
177
+ requeueDanglingReceipt: (node) => receiptQueue.enqueue(node),
178
+ shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error)
186
179
  };
187
180
  }
188
181
  function buildWaClientDependencies(input) {
189
- const { base, host } = input;
182
+ const { base, runtime } = input;
190
183
  const { options, logger, sessionStore } = base;
184
+ const receiptQueue = new WaReceiptQueue_1.WaReceiptQueue();
185
+ const keyShareCoordinator = new WaKeyShareCoordinator_1.WaKeyShareCoordinator();
186
+ let connectionManager = null;
187
+ let passiveTasks = null;
188
+ let mediaConnCacheFallback = null;
189
+ let scheduleReconnectAfterPairing = () => undefined;
191
190
  const nodeTransport = new WaNodeTransport_1.WaNodeTransport(logger);
192
191
  const nodeOrchestrator = new WaNodeOrchestrator_1.WaNodeOrchestrator({
193
192
  sendNode: async (node) => nodeTransport.sendNode(node),
@@ -198,27 +197,39 @@ function buildWaClientDependencies(input) {
198
197
  const keepAlive = new WaKeepAlive_1.WaKeepAlive({
199
198
  logger,
200
199
  nodeOrchestrator,
201
- getComms: host.getComms,
200
+ getComms: () => connectionManager?.getComms() ?? null,
202
201
  intervalMs: options.keepAliveIntervalMs,
203
202
  timeoutMs: options.deadSocketTimeoutMs,
204
203
  hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN
205
204
  });
206
205
  const mediaTransfer = new WaMediaTransferClient_1.WaMediaTransferClient({
207
206
  logger,
208
- defaultTimeoutMs: options.mediaTimeoutMs
207
+ defaultTimeoutMs: options.mediaTimeoutMs,
208
+ defaultUploadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaUpload),
209
+ defaultDownloadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaDownload),
210
+ defaultUploadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaUpload),
211
+ defaultDownloadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaDownload)
209
212
  });
210
213
  const mediaMessageBuildOptions = {
211
214
  logger,
212
215
  mediaTransfer,
213
216
  iqTimeoutMs: options.iqTimeoutMs,
214
- queryWithContext: host.queryWithContext,
215
- getMediaConnCache: host.getMediaConnCache,
216
- setMediaConnCache: host.setMediaConnCache
217
+ queryWithContext: runtime.queryWithContext,
218
+ getMediaConnCache: () => {
219
+ if (connectionManager) {
220
+ return connectionManager.getMediaConnCache();
221
+ }
222
+ return mediaConnCacheFallback;
223
+ },
224
+ setMediaConnCache: (mediaConn) => {
225
+ mediaConnCacheFallback = mediaConn;
226
+ connectionManager?.setMediaConnCache(mediaConn);
227
+ }
217
228
  };
218
229
  const messageClient = new WaMessageClient_1.WaMessageClient({
219
230
  logger,
220
- sendNode: host.sendNode,
221
- query: host.query,
231
+ sendNode: runtime.sendNode,
232
+ query: runtime.query,
222
233
  defaultAckTimeoutMs: options.messageAckTimeoutMs,
223
234
  defaultMaxAttempts: options.messageMaxAttempts,
224
235
  defaultRetryDelayMs: options.messageRetryDelayMs
@@ -227,56 +238,112 @@ function buildWaClientDependencies(input) {
227
238
  const signalProtocol = new SignalProtocol_1.SignalProtocol(sessionStore.signal, logger);
228
239
  const signalDigestSync = new SignalDigestSyncApi_1.SignalDigestSyncApi({
229
240
  logger,
230
- query: host.query,
241
+ query: runtime.query,
231
242
  signalStore: sessionStore.signal,
232
243
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
233
244
  });
245
+ const generateUsyncSid = (0, usync_1.createUsyncSidGenerator)();
234
246
  const signalDeviceSync = new SignalDeviceSyncApi_1.SignalDeviceSyncApi({
235
247
  logger,
236
- query: host.query,
248
+ query: runtime.query,
237
249
  deviceListStore: sessionStore.deviceList,
238
- defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
250
+ defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs,
251
+ generateSid: generateUsyncSid
239
252
  });
240
253
  const signalIdentitySync = new SignalIdentitySyncApi_1.SignalIdentitySyncApi({
241
254
  logger,
242
- query: host.query,
255
+ query: runtime.query,
243
256
  signalStore: sessionStore.signal,
244
257
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
245
258
  });
246
259
  const signalMissingPreKeysSync = new SignalMissingPreKeysSyncApi_1.SignalMissingPreKeysSyncApi({
247
260
  logger,
248
- query: host.query,
261
+ query: runtime.query,
249
262
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
250
263
  });
251
264
  const signalRotateKey = new SignalRotateKeyApi_1.SignalRotateKeyApi({
252
265
  logger,
253
- query: host.query,
266
+ query: runtime.query,
254
267
  signalStore: sessionStore.signal,
255
268
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
256
269
  });
257
270
  const signalSessionSync = new SignalSessionSyncApi_1.SignalSessionSyncApi({
258
271
  logger,
259
- query: host.query,
272
+ query: runtime.query,
260
273
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
261
274
  });
262
- const authClient = createAuthClient({ options, logger, sessionStore, host });
263
- const { getCurrentCredentials, getCurrentMeJid, getCurrentMeLid, getCurrentSignedIdentity } = createCurrentAuthGetters(authClient);
275
+ const authClient = new WaAuthClient_1.WaAuthClient({
276
+ deviceBrowser: options.deviceBrowser,
277
+ deviceOsDisplayName: options.deviceOsDisplayName,
278
+ devicePlatform: options.devicePlatform,
279
+ requireFullSync: options.requireFullSync
280
+ }, {
281
+ logger,
282
+ authStore: sessionStore.auth,
283
+ signalStore: sessionStore.signal,
284
+ socket: {
285
+ sendNode: runtime.sendNode,
286
+ query: runtime.query
287
+ },
288
+ callbacks: {
289
+ onQr: (qr, ttlMs) => runtime.emitEvent('auth_qr', { qr, ttlMs }),
290
+ onPairingCode: (code) => runtime.emitEvent('auth_pairing_code', { code }),
291
+ onPairingRefresh: (forceManual) => runtime.emitEvent('auth_pairing_refresh', { forceManual }),
292
+ onPaired: (credentials) => {
293
+ runtime.emitEvent('auth_paired', { credentials });
294
+ scheduleReconnectAfterPairing();
295
+ },
296
+ onError: (error) => runtime.handleError(error)
297
+ }
298
+ });
299
+ const getCurrentCredentials = authClient.getCurrentCredentials.bind(authClient);
300
+ const getCurrentMeJid = () => getCurrentCredentials()?.meJid;
301
+ const getCurrentMeLid = () => getCurrentCredentials()?.meLid;
302
+ const getCurrentSignedIdentity = () => getCurrentCredentials()?.signedIdentity;
264
303
  const groupCoordinator = (0, WaGroupCoordinator_1.createGroupCoordinator)({
265
- queryWithContext: host.queryWithContext
304
+ queryWithContext: runtime.queryWithContext
266
305
  });
267
- const messageDispatch = new WaMessageDispatchCoordinator_1.WaMessageDispatchCoordinator({
268
- logger,
269
- messageClient,
306
+ const retryTracker = (0, tracker_1.createOutboundRetryTracker)({
270
307
  retryStore: sessionStore.retry,
271
- participantsStore: sessionStore.participants,
272
- buildMessageContent: async (content) => (0, messages_1.buildMediaMessageContent)(mediaMessageBuildOptions, content),
273
- queryGroupParticipantJids: async (groupJid) => (await groupCoordinator.queryGroupMetadata(groupJid)).participants.map((participant) => participant.jid),
274
- senderKeyManager,
308
+ logger
309
+ });
310
+ const sessionResolver = (0, resolver_1.createSignalSessionResolver)({
275
311
  signalProtocol,
276
312
  signalStore: sessionStore.signal,
277
- signalDeviceSync,
278
313
  signalIdentitySync,
279
314
  signalSessionSync,
315
+ logger
316
+ });
317
+ const fanoutResolver = (0, fanout_1.createDeviceFanoutResolver)({
318
+ signalDeviceSync,
319
+ getCurrentMeJid,
320
+ getCurrentMeLid,
321
+ logger
322
+ });
323
+ const participantsCache = (0, participants_1.createGroupParticipantsCache)({
324
+ participantsStore: sessionStore.participants,
325
+ queryGroupParticipantJids: async (groupJid) => (await groupCoordinator.queryGroupMetadata(groupJid)).participants.map((participant) => participant.jid),
326
+ logger
327
+ });
328
+ let messageDispatch;
329
+ const appStateSyncKeyProtocol = (0, key_protocol_1.createAppStateSyncKeyProtocol)({
330
+ publishSignalMessage: (signalInput, publishOptions) => messageDispatch.publishSignalMessage(signalInput, publishOptions),
331
+ fanoutResolver,
332
+ getCurrentMeJid,
333
+ getCurrentMeLid,
334
+ logger
335
+ });
336
+ messageDispatch = new WaMessageDispatchCoordinator_1.WaMessageDispatchCoordinator({
337
+ logger,
338
+ messageClient,
339
+ retryTracker,
340
+ sessionResolver,
341
+ fanoutResolver,
342
+ participantsCache,
343
+ appStateSyncKeyProtocol,
344
+ buildMessageContent: async (content) => (0, messages_1.buildMediaMessageContent)(mediaMessageBuildOptions, content),
345
+ senderKeyManager,
346
+ signalProtocol,
280
347
  getCurrentMeJid,
281
348
  getCurrentMeLid,
282
349
  getCurrentSignedIdentity
@@ -290,32 +357,70 @@ function buildWaClientDependencies(input) {
290
357
  signalDeviceSync,
291
358
  signalMissingPreKeysSync,
292
359
  messageClient,
293
- sendNode: host.sendNode,
360
+ sendNode: runtime.sendNode,
294
361
  getCurrentMeJid,
295
362
  getCurrentMeLid,
296
363
  getCurrentSignedIdentity
297
364
  });
298
365
  const appStateSync = new WaAppStateSyncClient_1.WaAppStateSyncClient({
299
366
  logger,
300
- query: host.query,
367
+ query: runtime.query,
368
+ getCurrentMeJid,
301
369
  defaultTimeoutMs: options.appStateSyncTimeoutMs,
302
370
  store: sessionStore.appState,
303
371
  onMissingKeys: async ({ keyIds }) => {
304
372
  await messageDispatch.requestAppStateSyncKeys(keyIds);
305
373
  }
306
374
  });
375
+ const appStateMutations = new WaAppStateMutationCoordinator_1.WaAppStateMutationCoordinator({
376
+ logger,
377
+ messageStore: sessionStore.messages,
378
+ syncAppState: runtime.syncAppStateWithOptions
379
+ });
380
+ connectionManager = new WaConnectionManager_1.WaConnectionManager({
381
+ logger,
382
+ options,
383
+ authClient,
384
+ keepAlive,
385
+ nodeOrchestrator,
386
+ nodeTransport,
387
+ getPassiveTasks: () => passiveTasks,
388
+ clearStoredCredentials: runtime.clearStoredState
389
+ });
390
+ if (mediaConnCacheFallback !== null) {
391
+ connectionManager.setMediaConnCache(mediaConnCacheFallback);
392
+ }
393
+ scheduleReconnectAfterPairing = () => connectionManager?.scheduleReconnectAfterPairing();
394
+ const disconnectWithClientSideEffects = async () => {
395
+ keyShareCoordinator.notifyDisconnected();
396
+ await connectionManager?.disconnect();
397
+ runtime.emitEvent('connection_close', {});
398
+ };
399
+ const connectWithClientSideEffects = async () => {
400
+ await connectionManager?.connect(runtime.handleIncomingFrame);
401
+ runtime.emitEvent('connection_open', {});
402
+ };
403
+ const clearStoredCredentialsWithClientSideEffects = async () => {
404
+ await connectionManager?.clearStoredCredentials();
405
+ };
307
406
  const streamControl = (0, WaStreamControlCoordinator_1.createStreamControlHandler)({
308
407
  logger,
309
- getComms: host.getComms,
408
+ getComms: () => connectionManager?.getComms() ?? null,
310
409
  clearPendingQueries: (error) => nodeOrchestrator.clearPending(error),
311
- clearMediaConnCache: () => host.setMediaConnCache(null),
312
- disconnect: host.disconnect,
313
- clearStoredCredentials: host.clearStoredState,
314
- connect: host.connect
410
+ clearMediaConnCache: () => {
411
+ mediaConnCacheFallback = null;
412
+ connectionManager?.setMediaConnCache(null);
413
+ },
414
+ disconnect: disconnectWithClientSideEffects,
415
+ clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
416
+ connect: connectWithClientSideEffects
315
417
  });
316
418
  const incomingMessageAckOptions = createIncomingMessageAckOptions({
317
419
  logger,
318
- host,
420
+ sendNode: runtime.sendNode,
421
+ emitEvent: runtime.emitEvent,
422
+ handleIncomingMessageEvent: runtime.handleIncomingMessageEvent,
423
+ handleError: runtime.handleError,
319
424
  getCurrentMeJid,
320
425
  signalProtocol,
321
426
  senderKeyManager,
@@ -323,34 +428,42 @@ function buildWaClientDependencies(input) {
323
428
  });
324
429
  const handleClientDirtyBits = createHandleClientDirtyBits({
325
430
  logger,
326
- host,
327
- getCurrentCredentials
431
+ queryWithContext: runtime.queryWithContext,
432
+ syncAppState: runtime.syncAppState,
433
+ getCurrentCredentials,
434
+ generateUsyncSid
328
435
  });
329
436
  const incomingNode = new WaIncomingNodeCoordinator_1.WaIncomingNodeCoordinator({
330
437
  logger,
331
438
  runtime: createIncomingNodeRuntime({
332
439
  logger,
333
- host,
440
+ emitEvent: runtime.emitEvent,
334
441
  authClient,
442
+ connectionManager,
335
443
  nodeOrchestrator,
336
444
  streamControl,
337
445
  mediaMessageBuildOptions,
338
446
  retryCoordinator,
339
447
  messageDispatch,
448
+ sendNode: runtime.sendNode,
449
+ syncAppState: runtime.syncAppState,
450
+ disconnect: disconnectWithClientSideEffects,
451
+ clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
340
452
  getCurrentMeJid,
341
453
  handleClientDirtyBits,
342
454
  incomingMessageAckOptions
343
455
  })
344
456
  });
345
- const passiveTasks = new WaPassiveTasksCoordinator_1.WaPassiveTasksCoordinator({
457
+ passiveTasks = new WaPassiveTasksCoordinator_1.WaPassiveTasksCoordinator({
346
458
  logger,
347
459
  signalStore: sessionStore.signal,
348
460
  signalDigestSync,
349
461
  signalRotateKey,
350
462
  runtime: createPassiveTasksRuntime({
351
- host,
463
+ queryWithContext: runtime.queryWithContext,
352
464
  authClient,
353
465
  nodeOrchestrator,
466
+ receiptQueue,
354
467
  getCurrentCredentials
355
468
  })
356
469
  });
@@ -373,9 +486,13 @@ function buildWaClientDependencies(input) {
373
486
  messageDispatch,
374
487
  retryCoordinator,
375
488
  appStateSync,
489
+ appStateMutations,
376
490
  streamControl,
377
491
  incomingNode,
378
492
  passiveTasks,
379
- groupCoordinator
493
+ groupCoordinator,
494
+ receiptQueue,
495
+ keyShareCoordinator,
496
+ connectionManager
380
497
  };
381
498
  }