zapo-js 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. package/README.md +16 -4
  2. package/dist/appstate/WaAppStateCrypto.js +50 -42
  3. package/dist/appstate/WaAppStateSyncClient.js +215 -133
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +9 -7
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +55 -57
  8. package/dist/auth/credentials-flow.js +195 -0
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingFlow.js +39 -32
  11. package/dist/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +35 -17
  12. package/dist/client/WaClient.js +338 -174
  13. package/dist/client/WaClientFactory.js +399 -66
  14. package/dist/client/connection/WaConnectionManager.js +23 -11
  15. package/dist/client/coordinators/WaAbPropsCoordinator.js +141 -0
  16. package/dist/client/coordinators/WaBusinessCoordinator.js +232 -0
  17. package/dist/client/coordinators/WaEmailCoordinator.js +63 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +34 -8
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +341 -118
  21. package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
  22. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
  23. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  24. package/dist/client/coordinators/WaProfileCoordinator.js +214 -0
  25. package/dist/client/coordinators/WaRetryCoordinator.js +184 -30
  26. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  27. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +184 -0
  28. package/dist/client/dirty.js +41 -21
  29. package/dist/client/events/abprops.js +43 -0
  30. package/dist/client/events/devices.js +72 -0
  31. package/dist/client/events/group.js +3 -11
  32. package/dist/client/events/identity.js +22 -0
  33. package/dist/client/events/privacy-token.js +38 -0
  34. package/dist/client/events/registration.js +42 -0
  35. package/dist/client/history-sync.js +50 -9
  36. package/dist/client/incoming.js +74 -7
  37. package/dist/client/mailbox.js +40 -23
  38. package/dist/client/media.js +243 -0
  39. package/dist/client/messages.js +245 -92
  40. package/dist/client/messaging/fanout.js +21 -11
  41. package/dist/client/messaging/participants.js +6 -4
  42. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  43. package/dist/client/tokens/cs-token.js +50 -0
  44. package/dist/client/tokens/tc-token.js +25 -0
  45. package/dist/crypto/core/index.js +5 -2
  46. package/dist/crypto/core/keys.js +4 -4
  47. package/dist/crypto/core/nonce.js +2 -0
  48. package/dist/crypto/core/primitives.js +0 -8
  49. package/dist/crypto/core/random.js +24 -8
  50. package/dist/crypto/core/xeddsa.js +57 -0
  51. package/dist/crypto/curves/X25519.js +43 -6
  52. package/dist/crypto/curves/constants.js +2 -1
  53. package/dist/crypto/index.js +3 -0
  54. package/dist/crypto/math/constants.js +13 -36
  55. package/dist/crypto/math/edwards.js +171 -44
  56. package/dist/crypto/math/fe.js +706 -0
  57. package/dist/crypto/math/mod.js +10 -3
  58. package/dist/esm/appstate/WaAppStateCrypto.js +40 -32
  59. package/dist/esm/appstate/WaAppStateSyncClient.js +206 -124
  60. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  61. package/dist/esm/appstate/index.js +2 -2
  62. package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +1 -1
  63. package/dist/esm/appstate/utils.js +2 -5
  64. package/dist/esm/auth/WaAuthClient.js +52 -54
  65. package/dist/esm/auth/credentials-flow.js +190 -0
  66. package/dist/esm/auth/index.js +0 -2
  67. package/dist/esm/auth/pairing/WaPairingFlow.js +39 -32
  68. package/dist/esm/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +26 -10
  69. package/dist/esm/client/WaClient.js +339 -175
  70. package/dist/esm/client/WaClientFactory.js +401 -68
  71. package/dist/esm/client/connection/WaConnectionManager.js +23 -11
  72. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +137 -0
  73. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +229 -0
  74. package/dist/esm/client/coordinators/WaEmailCoordinator.js +60 -0
  75. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  76. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +36 -10
  77. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +337 -114
  78. package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
  79. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
  80. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  81. package/dist/esm/client/coordinators/WaProfileCoordinator.js +211 -0
  82. package/dist/esm/client/coordinators/WaRetryCoordinator.js +186 -32
  83. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  84. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +180 -0
  85. package/dist/esm/client/dirty.js +41 -21
  86. package/dist/esm/client/events/abprops.js +40 -0
  87. package/dist/esm/client/events/devices.js +68 -0
  88. package/dist/esm/client/events/group.js +3 -11
  89. package/dist/esm/client/events/identity.js +19 -0
  90. package/dist/esm/client/events/privacy-token.js +35 -0
  91. package/dist/esm/client/events/registration.js +39 -0
  92. package/dist/esm/client/history-sync.js +50 -9
  93. package/dist/esm/client/incoming.js +74 -8
  94. package/dist/esm/client/mailbox.js +40 -23
  95. package/dist/esm/client/media.js +234 -0
  96. package/dist/esm/client/messages.js +244 -91
  97. package/dist/esm/client/messaging/fanout.js +22 -12
  98. package/dist/esm/client/messaging/participants.js +6 -4
  99. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  100. package/dist/esm/client/tokens/cs-token.js +46 -0
  101. package/dist/esm/client/tokens/tc-token.js +18 -0
  102. package/dist/esm/crypto/core/index.js +3 -2
  103. package/dist/esm/crypto/core/keys.js +1 -1
  104. package/dist/esm/crypto/core/nonce.js +2 -0
  105. package/dist/esm/crypto/core/primitives.js +0 -7
  106. package/dist/esm/crypto/core/random.js +23 -7
  107. package/dist/esm/crypto/core/xeddsa.js +53 -0
  108. package/dist/esm/crypto/curves/X25519.js +45 -8
  109. package/dist/esm/crypto/curves/constants.js +1 -0
  110. package/dist/esm/crypto/index.js +1 -0
  111. package/dist/esm/crypto/math/constants.js +12 -35
  112. package/dist/esm/crypto/math/edwards.js +174 -47
  113. package/dist/esm/crypto/math/fe.js +691 -0
  114. package/dist/esm/crypto/math/mod.js +10 -1
  115. package/dist/esm/index.js +1 -1
  116. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  117. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  118. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  119. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  120. package/dist/esm/infra/perf/StoreLock.js +80 -0
  121. package/dist/esm/media/WaMediaCrypto.js +332 -55
  122. package/dist/esm/media/WaMediaTransferClient.js +69 -220
  123. package/dist/esm/media/constants.js +4 -1
  124. package/dist/esm/media/processor.js +1 -0
  125. package/dist/esm/message/WaMessageClient.js +26 -19
  126. package/dist/esm/message/addon-crypto.js +130 -3
  127. package/dist/esm/message/content.js +206 -14
  128. package/dist/esm/message/icdc.js +76 -0
  129. package/dist/esm/message/incoming.js +38 -24
  130. package/dist/esm/message/phash.js +35 -13
  131. package/dist/esm/message/reporting-token.js +17 -30
  132. package/dist/esm/message/use-case-secret.js +1 -1
  133. package/dist/esm/protocol/abprops.js +159 -0
  134. package/dist/esm/protocol/appstate.js +9 -40
  135. package/dist/esm/protocol/browser.js +24 -18
  136. package/dist/esm/protocol/constants.js +8 -4
  137. package/dist/esm/protocol/defaults.js +6 -0
  138. package/dist/esm/protocol/email.js +30 -0
  139. package/dist/esm/protocol/index.js +1 -2
  140. package/dist/esm/protocol/jid.js +142 -39
  141. package/dist/esm/protocol/message.js +61 -1
  142. package/dist/esm/protocol/nodes.js +8 -2
  143. package/dist/esm/protocol/notification.js +9 -1
  144. package/dist/esm/protocol/privacy-token.js +17 -0
  145. package/dist/esm/protocol/privacy.js +55 -0
  146. package/dist/esm/protocol/stream.js +26 -1
  147. package/dist/esm/retry/codec.js +216 -0
  148. package/dist/esm/retry/constants.js +1 -1
  149. package/dist/esm/retry/index.js +2 -2
  150. package/dist/esm/retry/parse.js +50 -30
  151. package/dist/esm/retry/reason.js +1 -1
  152. package/dist/esm/retry/replay.js +11 -7
  153. package/dist/esm/retry/tracker.js +50 -12
  154. package/dist/esm/signal/api/SignalDeviceSyncApi.js +52 -32
  155. package/dist/esm/signal/api/SignalDigestSyncApi.js +21 -15
  156. package/dist/esm/signal/api/SignalIdentitySyncApi.js +30 -15
  157. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +19 -8
  158. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  159. package/dist/esm/signal/api/SignalSessionSyncApi.js +17 -8
  160. package/dist/esm/signal/api/result-map.js +10 -0
  161. package/dist/esm/signal/constants.js +0 -4
  162. package/dist/esm/signal/crypto/WaAdvSignature.js +5 -45
  163. package/dist/esm/signal/crypto/constants.js +0 -4
  164. package/dist/esm/signal/{store/sqlite.js → encoding.js} +40 -29
  165. package/dist/esm/signal/group/SenderKeyChain.js +3 -3
  166. package/dist/esm/signal/group/SenderKeyCodec.js +8 -8
  167. package/dist/esm/signal/group/SenderKeyManager.js +131 -109
  168. package/dist/esm/signal/index.js +1 -0
  169. package/dist/esm/signal/registration/keygen.js +8 -5
  170. package/dist/esm/signal/registration/utils.js +3 -2
  171. package/dist/esm/signal/session/SignalProtocol.js +158 -81
  172. package/dist/esm/signal/session/SignalRatchet.js +21 -10
  173. package/dist/esm/signal/session/SignalSerializer.js +5 -6
  174. package/dist/esm/signal/session/SignalSession.js +11 -9
  175. package/dist/esm/signal/session/resolver.js +140 -105
  176. package/dist/esm/store/contracts/identity.store.js +1 -0
  177. package/dist/esm/store/contracts/message-secret.store.js +1 -0
  178. package/dist/esm/store/contracts/pre-key.store.js +1 -0
  179. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  180. package/dist/esm/store/contracts/session.store.js +1 -0
  181. package/dist/esm/store/createStore.js +143 -193
  182. package/dist/esm/store/index.js +5 -10
  183. package/dist/esm/store/locks/appstate.lock.js +26 -0
  184. package/dist/esm/store/locks/auth.lock.js +15 -0
  185. package/dist/esm/store/locks/contact.lock.js +20 -0
  186. package/dist/esm/store/locks/device-list.lock.js +20 -0
  187. package/dist/esm/store/locks/identity.lock.js +16 -0
  188. package/dist/esm/store/locks/message-secret.lock.js +17 -0
  189. package/dist/esm/store/locks/message.lock.js +21 -0
  190. package/dist/esm/store/locks/participants.lock.js +20 -0
  191. package/dist/esm/store/locks/pre-key.lock.js +27 -0
  192. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  193. package/dist/esm/store/locks/retry.lock.js +29 -0
  194. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  195. package/dist/esm/store/locks/session.lock.js +19 -0
  196. package/dist/esm/store/locks/signal.lock.js +39 -0
  197. package/dist/esm/store/locks/thread.lock.js +21 -0
  198. package/dist/esm/store/noop.store.js +21 -1
  199. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  200. package/dist/esm/store/providers/memory/device-list.store.js +13 -5
  201. package/dist/esm/store/providers/memory/identity.store.js +31 -0
  202. package/dist/esm/store/providers/memory/message-secret.store.js +81 -0
  203. package/dist/esm/store/providers/memory/participants.store.js +3 -0
  204. package/dist/esm/store/providers/memory/pre-key.store.js +97 -0
  205. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  206. package/dist/esm/store/providers/memory/retry.store.js +99 -10
  207. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  208. package/dist/esm/store/providers/memory/session.store.js +45 -0
  209. package/dist/esm/store/providers/memory/signal.store.js +1 -147
  210. package/dist/esm/transport/WaComms.js +7 -4
  211. package/dist/esm/transport/WaWebSocket.js +9 -7
  212. package/dist/esm/transport/binary/constants.js +0 -30
  213. package/dist/esm/transport/binary/decoder.js +4 -4
  214. package/dist/esm/transport/binary/encoder.js +8 -15
  215. package/dist/esm/transport/binary/index.js +0 -1
  216. package/dist/esm/transport/index.js +6 -0
  217. package/dist/esm/transport/keepalive/WaKeepAlive.js +17 -8
  218. package/dist/esm/transport/node/WaMobileTcpSocket.js +114 -0
  219. package/dist/esm/transport/node/WaNodeOrchestrator.js +37 -22
  220. package/dist/esm/transport/node/builders/abprops.js +20 -0
  221. package/dist/esm/transport/node/builders/business.js +129 -0
  222. package/dist/esm/transport/node/builders/device.js +11 -0
  223. package/dist/esm/transport/node/builders/email.js +65 -0
  224. package/dist/esm/transport/node/builders/global.js +370 -0
  225. package/dist/esm/transport/node/builders/message.js +63 -239
  226. package/dist/esm/transport/node/builders/offline.js +14 -0
  227. package/dist/esm/transport/node/builders/pairing.js +0 -24
  228. package/dist/esm/transport/node/builders/prekeys.js +37 -40
  229. package/dist/esm/transport/node/builders/presence.js +13 -0
  230. package/dist/esm/transport/node/builders/privacy-token.js +37 -0
  231. package/dist/esm/transport/node/builders/privacy.js +48 -0
  232. package/dist/esm/transport/node/builders/profile.js +70 -0
  233. package/dist/esm/transport/node/builders/retry.js +11 -23
  234. package/dist/esm/transport/node/builders/usync.js +6 -2
  235. package/dist/esm/transport/node/helpers.js +43 -1
  236. package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
  237. package/dist/esm/transport/node/mex/client.js +83 -0
  238. package/dist/esm/transport/node/mex/persist-ids.js +10 -0
  239. package/dist/esm/transport/node/usync.js +3 -33
  240. package/dist/esm/transport/node/xml.js +35 -14
  241. package/dist/esm/transport/noise/WaClientPayload.js +24 -19
  242. package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
  243. package/dist/esm/transport/noise/WaMobileClientPayload.js +53 -0
  244. package/dist/esm/transport/noise/WaNoiseCert.js +9 -27
  245. package/dist/esm/transport/noise/WaNoiseSession.js +76 -34
  246. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  247. package/dist/esm/transport/stream/parse.js +8 -4
  248. package/dist/esm/util/bytes.js +22 -18
  249. package/dist/esm/util/index.js +5 -0
  250. package/dist/esm/util/primitives.js +3 -2
  251. package/dist/index.js +7 -1
  252. package/dist/infra/perf/BackgroundQueue.js +482 -0
  253. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  254. package/dist/infra/perf/PromiseDedup.js +24 -0
  255. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  256. package/dist/infra/perf/StoreLock.js +84 -0
  257. package/dist/media/WaMediaCrypto.js +328 -51
  258. package/dist/media/WaMediaTransferClient.js +72 -253
  259. package/dist/media/constants.js +5 -2
  260. package/dist/media/processor.js +2 -0
  261. package/dist/message/WaMessageClient.js +26 -19
  262. package/dist/message/addon-crypto.js +131 -0
  263. package/dist/message/content.js +211 -14
  264. package/dist/message/icdc.js +81 -0
  265. package/dist/message/incoming.js +38 -24
  266. package/dist/message/phash.js +35 -13
  267. package/dist/message/reporting-token.js +16 -30
  268. package/dist/message/use-case-secret.js +1 -1
  269. package/dist/protocol/abprops.js +163 -0
  270. package/dist/protocol/appstate.js +10 -41
  271. package/dist/protocol/browser.js +25 -18
  272. package/dist/protocol/constants.js +33 -2
  273. package/dist/protocol/defaults.js +6 -0
  274. package/dist/protocol/email.js +33 -0
  275. package/dist/protocol/index.js +8 -5
  276. package/dist/protocol/jid.js +149 -39
  277. package/dist/protocol/message.js +62 -2
  278. package/dist/protocol/nodes.js +8 -2
  279. package/dist/protocol/notification.js +10 -2
  280. package/dist/protocol/privacy-token.js +20 -0
  281. package/dist/protocol/privacy.js +58 -0
  282. package/dist/protocol/stream.js +27 -2
  283. package/dist/retry/codec.js +220 -0
  284. package/dist/retry/constants.js +1 -1
  285. package/dist/retry/index.js +5 -5
  286. package/dist/retry/parse.js +51 -30
  287. package/dist/retry/reason.js +1 -1
  288. package/dist/retry/replay.js +10 -6
  289. package/dist/retry/tracker.js +50 -12
  290. package/dist/signal/api/SignalDeviceSyncApi.js +51 -31
  291. package/dist/signal/api/SignalDigestSyncApi.js +21 -15
  292. package/dist/signal/api/SignalIdentitySyncApi.js +29 -14
  293. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  294. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  295. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  296. package/dist/signal/api/result-map.js +13 -0
  297. package/dist/signal/constants.js +1 -5
  298. package/dist/signal/crypto/WaAdvSignature.js +2 -44
  299. package/dist/signal/crypto/constants.js +1 -5
  300. package/dist/signal/{store/sqlite.js → encoding.js} +41 -25
  301. package/dist/signal/group/SenderKeyChain.js +2 -2
  302. package/dist/signal/group/SenderKeyCodec.js +8 -8
  303. package/dist/signal/group/SenderKeyManager.js +130 -108
  304. package/dist/signal/index.js +13 -1
  305. package/dist/signal/registration/keygen.js +7 -4
  306. package/dist/signal/registration/utils.js +3 -2
  307. package/dist/signal/session/SignalProtocol.js +158 -81
  308. package/dist/signal/session/SignalRatchet.js +19 -8
  309. package/dist/signal/session/SignalSerializer.js +5 -6
  310. package/dist/signal/session/SignalSession.js +11 -9
  311. package/dist/signal/session/resolver.js +138 -103
  312. package/dist/store/contracts/identity.store.js +2 -0
  313. package/dist/store/contracts/message-secret.store.js +2 -0
  314. package/dist/store/contracts/pre-key.store.js +2 -0
  315. package/dist/store/contracts/privacy-token.store.js +2 -0
  316. package/dist/store/contracts/session.store.js +2 -0
  317. package/dist/store/createStore.js +142 -192
  318. package/dist/store/index.js +23 -33
  319. package/dist/store/locks/appstate.lock.js +29 -0
  320. package/dist/store/locks/auth.lock.js +18 -0
  321. package/dist/store/locks/contact.lock.js +23 -0
  322. package/dist/store/locks/device-list.lock.js +23 -0
  323. package/dist/store/locks/identity.lock.js +19 -0
  324. package/dist/store/locks/message-secret.lock.js +20 -0
  325. package/dist/store/locks/message.lock.js +24 -0
  326. package/dist/store/locks/participants.lock.js +23 -0
  327. package/dist/store/locks/pre-key.lock.js +30 -0
  328. package/dist/store/locks/privacy-token.lock.js +21 -0
  329. package/dist/store/locks/retry.lock.js +32 -0
  330. package/dist/store/locks/sender-key.lock.js +55 -0
  331. package/dist/store/locks/session.lock.js +22 -0
  332. package/dist/store/locks/signal.lock.js +42 -0
  333. package/dist/store/locks/thread.lock.js +24 -0
  334. package/dist/store/noop.store.js +22 -2
  335. package/dist/store/providers/memory/appstate.store.js +22 -24
  336. package/dist/store/providers/memory/device-list.store.js +13 -5
  337. package/dist/store/providers/memory/identity.store.js +35 -0
  338. package/dist/store/providers/memory/message-secret.store.js +85 -0
  339. package/dist/store/providers/memory/participants.store.js +3 -0
  340. package/dist/store/providers/memory/pre-key.store.js +101 -0
  341. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  342. package/dist/store/providers/memory/retry.store.js +98 -9
  343. package/dist/store/providers/memory/sender-key.store.js +6 -1
  344. package/dist/store/providers/memory/session.store.js +49 -0
  345. package/dist/store/providers/memory/signal.store.js +1 -147
  346. package/dist/transport/WaComms.js +7 -4
  347. package/dist/transport/WaWebSocket.js +9 -7
  348. package/dist/transport/binary/constants.js +1 -31
  349. package/dist/transport/binary/decoder.js +4 -4
  350. package/dist/transport/binary/encoder.js +8 -15
  351. package/dist/transport/binary/index.js +0 -4
  352. package/dist/transport/index.js +17 -1
  353. package/dist/transport/keepalive/WaKeepAlive.js +17 -8
  354. package/dist/transport/node/WaMobileTcpSocket.js +118 -0
  355. package/dist/transport/node/WaNodeOrchestrator.js +36 -21
  356. package/dist/transport/node/builders/abprops.js +23 -0
  357. package/dist/transport/node/builders/business.js +137 -0
  358. package/dist/transport/node/builders/device.js +14 -0
  359. package/dist/transport/node/builders/email.js +72 -0
  360. package/dist/transport/node/builders/global.js +375 -0
  361. package/dist/transport/node/builders/message.js +64 -245
  362. package/dist/transport/node/builders/offline.js +17 -0
  363. package/dist/transport/node/builders/pairing.js +0 -26
  364. package/dist/transport/node/builders/prekeys.js +36 -39
  365. package/dist/transport/node/builders/presence.js +16 -0
  366. package/dist/transport/node/builders/privacy-token.js +42 -0
  367. package/dist/transport/node/builders/privacy.js +55 -0
  368. package/dist/transport/node/builders/profile.js +78 -0
  369. package/dist/transport/node/builders/retry.js +10 -22
  370. package/dist/transport/node/builders/usync.js +6 -2
  371. package/dist/transport/node/helpers.js +46 -1
  372. package/dist/transport/node/mex/argo-decoder.js +189 -0
  373. package/dist/transport/node/mex/client.js +86 -0
  374. package/dist/transport/node/mex/persist-ids.js +13 -0
  375. package/dist/transport/node/usync.js +2 -32
  376. package/dist/transport/node/xml.js +35 -14
  377. package/dist/transport/noise/WaClientPayload.js +26 -21
  378. package/dist/transport/noise/WaFrameCodec.js +1 -1
  379. package/dist/transport/noise/WaMobileClientPayload.js +56 -0
  380. package/dist/transport/noise/WaNoiseCert.js +8 -26
  381. package/dist/transport/noise/WaNoiseSession.js +75 -33
  382. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  383. package/dist/transport/stream/parse.js +7 -3
  384. package/dist/types/appstate/WaAppStateCrypto.d.ts +11 -8
  385. package/dist/types/appstate/WaAppStateSyncClient.d.ts +6 -2
  386. package/dist/types/appstate/encoding.d.ts +7 -0
  387. package/dist/types/appstate/index.d.ts +3 -3
  388. package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → response-parser.d.ts} +1 -1
  389. package/dist/types/appstate/types.d.ts +1 -1
  390. package/dist/types/appstate/utils.d.ts +0 -2
  391. package/dist/types/auth/WaAuthClient.d.ts +9 -3
  392. package/dist/types/auth/credentials-flow.d.ts +20 -0
  393. package/dist/types/auth/index.d.ts +0 -2
  394. package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
  395. package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +6 -1
  396. package/dist/types/auth/types.d.ts +41 -0
  397. package/dist/types/client/WaClient.d.ts +44 -18
  398. package/dist/types/client/WaClientFactory.d.ts +22 -8
  399. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  400. package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
  401. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  402. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +24 -0
  403. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +9 -2
  404. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -2
  405. package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
  406. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +16 -1
  407. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  408. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +38 -0
  409. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +12 -0
  410. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  411. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +55 -0
  412. package/dist/types/client/dirty.d.ts +3 -1
  413. package/dist/types/client/events/abprops.d.ts +14 -0
  414. package/dist/types/client/events/devices.d.ts +20 -0
  415. package/dist/types/client/events/identity.d.ts +9 -0
  416. package/dist/types/client/events/privacy-token.d.ts +7 -0
  417. package/dist/types/client/events/registration.d.ts +17 -0
  418. package/dist/types/client/history-sync.d.ts +9 -6
  419. package/dist/types/client/incoming.d.ts +9 -2
  420. package/dist/types/client/index.d.ts +1 -1
  421. package/dist/types/client/mailbox.d.ts +5 -5
  422. package/dist/types/client/media.d.ts +31 -0
  423. package/dist/types/client/messages.d.ts +3 -2
  424. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  425. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  426. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  427. package/dist/types/client/types.d.ts +151 -4
  428. package/dist/types/crypto/core/index.d.ts +3 -2
  429. package/dist/types/crypto/core/nonce.d.ts +2 -0
  430. package/dist/types/crypto/core/primitives.d.ts +1 -2
  431. package/dist/types/crypto/core/random.d.ts +2 -1
  432. package/dist/types/crypto/core/xeddsa.d.ts +2 -0
  433. package/dist/types/crypto/curves/constants.d.ts +1 -0
  434. package/dist/types/crypto/index.d.ts +2 -0
  435. package/dist/types/crypto/math/constants.d.ts +4 -2
  436. package/dist/types/crypto/math/fe.d.ts +30 -0
  437. package/dist/types/crypto/math/mod.d.ts +0 -2
  438. package/dist/types/crypto/math/types.d.ts +11 -4
  439. package/dist/types/index.d.ts +6 -3
  440. package/dist/types/infra/log/ConsoleLogger.d.ts +1 -1
  441. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  442. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  443. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  444. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  445. package/dist/types/infra/perf/StoreLock.d.ts +11 -0
  446. package/dist/types/media/WaMediaCrypto.d.ts +16 -6
  447. package/dist/types/media/WaMediaTransferClient.d.ts +6 -23
  448. package/dist/types/media/constants.d.ts +3 -1
  449. package/dist/types/media/index.d.ts +2 -1
  450. package/dist/types/media/processor.d.ts +28 -0
  451. package/dist/types/media/types.d.ts +19 -5
  452. package/dist/types/message/addon-crypto.d.ts +34 -3
  453. package/dist/types/message/content.d.ts +11 -1
  454. package/dist/types/message/icdc.d.ts +13 -0
  455. package/dist/types/message/reporting-token.d.ts +0 -1
  456. package/dist/types/message/types.d.ts +42 -11
  457. package/dist/types/protocol/abprops.d.ts +142 -0
  458. package/dist/types/protocol/appstate.d.ts +0 -11
  459. package/dist/types/protocol/browser.d.ts +1 -0
  460. package/dist/types/protocol/constants.d.ts +12 -4
  461. package/dist/types/protocol/defaults.d.ts +6 -0
  462. package/dist/types/protocol/email.d.ts +32 -0
  463. package/dist/types/protocol/index.d.ts +1 -2
  464. package/dist/types/protocol/jid.d.ts +20 -2
  465. package/dist/types/protocol/message.d.ts +60 -0
  466. package/dist/types/protocol/nodes.d.ts +6 -0
  467. package/dist/types/protocol/notification.d.ts +8 -0
  468. package/dist/types/protocol/privacy-token.d.ts +17 -0
  469. package/dist/types/protocol/privacy.d.ts +75 -0
  470. package/dist/types/protocol/stream.d.ts +31 -0
  471. package/dist/types/retry/codec.d.ts +3 -0
  472. package/dist/types/retry/index.d.ts +3 -3
  473. package/dist/types/retry/parse.d.ts +5 -2
  474. package/dist/types/retry/reason.d.ts +1 -1
  475. package/dist/types/retry/tracker.d.ts +1 -0
  476. package/dist/types/retry/types.d.ts +6 -1
  477. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  478. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +9 -0
  479. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +5 -3
  480. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  481. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  482. package/dist/types/signal/api/result-map.d.ts +1 -0
  483. package/dist/types/signal/constants.d.ts +0 -3
  484. package/dist/types/signal/crypto/WaAdvSignature.d.ts +0 -2
  485. package/dist/types/signal/crypto/constants.d.ts +0 -1
  486. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +9 -3
  487. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  488. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -7
  489. package/dist/types/signal/index.d.ts +2 -0
  490. package/dist/types/signal/registration/utils.d.ts +2 -1
  491. package/dist/types/signal/session/SignalProtocol.d.ts +21 -6
  492. package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
  493. package/dist/types/signal/session/resolver.d.ts +11 -4
  494. package/dist/types/signal/types.d.ts +16 -4
  495. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  496. package/dist/types/store/contracts/identity.store.d.ts +11 -0
  497. package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
  498. package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
  499. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  500. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  501. package/dist/types/store/contracts/session.store.d.ts +14 -0
  502. package/dist/types/store/contracts/signal.store.d.ts +1 -27
  503. package/dist/types/store/createStore.d.ts +1 -1
  504. package/dist/types/store/index.d.ts +12 -12
  505. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  506. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  507. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  508. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  509. package/dist/types/store/locks/identity.lock.d.ts +3 -0
  510. package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
  511. package/dist/types/store/locks/message.lock.d.ts +3 -0
  512. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  513. package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
  514. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  515. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  516. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  517. package/dist/types/store/locks/session.lock.d.ts +3 -0
  518. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  519. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  520. package/dist/types/store/noop.store.d.ts +4 -0
  521. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  522. package/dist/types/store/providers/memory/identity.store.d.ts +18 -0
  523. package/dist/types/store/providers/memory/message-secret.store.d.ts +21 -0
  524. package/dist/types/store/providers/memory/pre-key.store.d.ts +23 -0
  525. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  526. package/dist/types/store/providers/memory/retry.store.d.ts +15 -1
  527. package/dist/types/store/providers/memory/session.store.d.ts +21 -0
  528. package/dist/types/store/providers/memory/signal.store.d.ts +2 -43
  529. package/dist/types/store/providers/memory/thread.store.d.ts +1 -1
  530. package/dist/types/store/types.d.ts +69 -61
  531. package/dist/types/transport/WaWebSocket.d.ts +1 -1
  532. package/dist/types/transport/binary/constants.d.ts +0 -30
  533. package/dist/types/transport/binary/index.d.ts +0 -1
  534. package/dist/types/transport/index.d.ts +8 -1
  535. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +4 -1
  536. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +18 -0
  537. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +9 -6
  538. package/dist/types/transport/node/builders/abprops.d.ts +5 -0
  539. package/dist/types/transport/node/builders/business.d.ts +29 -0
  540. package/dist/types/transport/node/builders/device.d.ts +2 -0
  541. package/dist/types/transport/node/builders/email.d.ts +11 -0
  542. package/dist/types/transport/node/builders/global.d.ts +102 -0
  543. package/dist/types/transport/node/builders/message.d.ts +8 -7
  544. package/dist/types/transport/node/builders/offline.d.ts +2 -0
  545. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  546. package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
  547. package/dist/types/transport/node/builders/presence.d.ts +6 -0
  548. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  549. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  550. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  551. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  552. package/dist/types/transport/node/helpers.d.ts +8 -0
  553. package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
  554. package/dist/types/transport/node/mex/client.d.ts +18 -0
  555. package/dist/types/transport/node/mex/persist-ids.d.ts +14 -0
  556. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +29 -0
  557. package/dist/types/transport/noise/WaNoiseCert.d.ts +7 -1
  558. package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
  559. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  560. package/dist/types/transport/types.d.ts +8 -0
  561. package/dist/types/util/bytes.d.ts +1 -1
  562. package/dist/types/util/index.d.ts +5 -0
  563. package/dist/types/util/primitives.d.ts +0 -1
  564. package/dist/util/bytes.js +22 -18
  565. package/dist/util/index.js +23 -0
  566. package/dist/util/primitives.js +2 -2
  567. package/package.json +34 -10
  568. package/proto/index.js +1 -1
  569. package/dist/auth/flow/WaAuthCredentialsFlow.js +0 -130
  570. package/dist/auth/pairing/constants.js +0 -5
  571. package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
  572. package/dist/crypto/core/constants.js +0 -4
  573. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
  574. package/dist/esm/auth/pairing/constants.js +0 -2
  575. package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
  576. package/dist/esm/crypto/core/constants.js +0 -1
  577. package/dist/esm/retry/outbound.js +0 -82
  578. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  579. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  580. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  581. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  582. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  583. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  584. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  585. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  586. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  587. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  588. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  589. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  590. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  591. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  592. package/dist/esm/transport/node/builders/index.js +0 -8
  593. package/dist/retry/outbound.js +0 -87
  594. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  595. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  596. package/dist/store/providers/sqlite/auth.store.js +0 -180
  597. package/dist/store/providers/sqlite/connection.js +0 -281
  598. package/dist/store/providers/sqlite/contact.store.js +0 -78
  599. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  600. package/dist/store/providers/sqlite/message.store.js +0 -136
  601. package/dist/store/providers/sqlite/migrations.js +0 -350
  602. package/dist/store/providers/sqlite/participants.store.js +0 -81
  603. package/dist/store/providers/sqlite/retry.store.js +0 -145
  604. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  605. package/dist/store/providers/sqlite/signal.store.js +0 -439
  606. package/dist/store/providers/sqlite/table-names.js +0 -113
  607. package/dist/store/providers/sqlite/thread.store.js +0 -89
  608. package/dist/transport/node/builders/index.js +0 -42
  609. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  610. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
  611. package/dist/types/auth/pairing/constants.d.ts +0 -2
  612. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
  613. package/dist/types/crypto/core/constants.d.ts +0 -1
  614. package/dist/types/retry/outbound.d.ts +0 -4
  615. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  616. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  617. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  618. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  619. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  620. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  621. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  622. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  623. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  624. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  625. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  626. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  627. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  628. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
  629. package/dist/types/transport/node/builders/index.d.ts +0 -8
  630. /package/dist/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +0 -0
@@ -5,16 +5,25 @@ exports.buildWaClientDependencies = buildWaClientDependencies;
5
5
  const WaAppStateSyncClient_1 = require("../appstate/WaAppStateSyncClient");
6
6
  const WaAuthClient_1 = require("../auth/WaAuthClient");
7
7
  const WaConnectionManager_1 = require("./connection/WaConnectionManager");
8
- const WaKeyShareCoordinator_1 = require("./connection/WaKeyShareCoordinator");
9
8
  const WaReceiptQueue_1 = require("./connection/WaReceiptQueue");
9
+ const WaAbPropsCoordinator_1 = require("./coordinators/WaAbPropsCoordinator");
10
10
  const WaAppStateMutationCoordinator_1 = require("./coordinators/WaAppStateMutationCoordinator");
11
+ const WaBusinessCoordinator_1 = require("./coordinators/WaBusinessCoordinator");
12
+ const WaEmailCoordinator_1 = require("./coordinators/WaEmailCoordinator");
11
13
  const WaGroupCoordinator_1 = require("./coordinators/WaGroupCoordinator");
12
14
  const WaIncomingNodeCoordinator_1 = require("./coordinators/WaIncomingNodeCoordinator");
13
15
  const WaMessageDispatchCoordinator_1 = require("./coordinators/WaMessageDispatchCoordinator");
16
+ const WaOfflineResumeCoordinator_1 = require("./coordinators/WaOfflineResumeCoordinator");
14
17
  const WaPassiveTasksCoordinator_1 = require("./coordinators/WaPassiveTasksCoordinator");
18
+ const WaPrivacyCoordinator_1 = require("./coordinators/WaPrivacyCoordinator");
19
+ const WaProfileCoordinator_1 = require("./coordinators/WaProfileCoordinator");
15
20
  const WaRetryCoordinator_1 = require("./coordinators/WaRetryCoordinator");
16
21
  const WaStreamControlCoordinator_1 = require("./coordinators/WaStreamControlCoordinator");
22
+ const WaTrustedContactTokenCoordinator_1 = require("./coordinators/WaTrustedContactTokenCoordinator");
17
23
  const dirty_1 = require("./dirty");
24
+ const devices_1 = require("./events/devices");
25
+ const identity_1 = require("./events/identity");
26
+ const privacy_token_1 = require("./events/privacy-token");
18
27
  const messages_1 = require("./messages");
19
28
  const fanout_1 = require("./messaging/fanout");
20
29
  const key_protocol_1 = require("./messaging/key-protocol");
@@ -23,6 +32,7 @@ const WaMediaTransferClient_1 = require("../media/WaMediaTransferClient");
23
32
  const incoming_1 = require("../message/incoming");
24
33
  const WaMessageClient_1 = require("../message/WaMessageClient");
25
34
  const constants_1 = require("../protocol/constants");
35
+ const jid_1 = require("../protocol/jid");
26
36
  const tracker_1 = require("../retry/tracker");
27
37
  const SignalDeviceSyncApi_1 = require("../signal/api/SignalDeviceSyncApi");
28
38
  const SignalDigestSyncApi_1 = require("../signal/api/SignalDigestSyncApi");
@@ -34,6 +44,9 @@ const SenderKeyManager_1 = require("../signal/group/SenderKeyManager");
34
44
  const resolver_1 = require("../signal/session/resolver");
35
45
  const SignalProtocol_1 = require("../signal/session/SignalProtocol");
36
46
  const WaKeepAlive_1 = require("../transport/keepalive/WaKeepAlive");
47
+ const global_1 = require("../transport/node/builders/global");
48
+ const presence_1 = require("../transport/node/builders/presence");
49
+ const helpers_1 = require("../transport/node/helpers");
37
50
  const usync_1 = require("../transport/node/usync");
38
51
  const WaNodeOrchestrator_1 = require("../transport/node/WaNodeOrchestrator");
39
52
  const WaNodeTransport_1 = require("../transport/node/WaNodeTransport");
@@ -94,31 +107,6 @@ function resolveWaClientBase(options, logger) {
94
107
  sessionStore
95
108
  };
96
109
  }
97
- function createIncomingMessageAckOptions(input) {
98
- const { logger, sendNode, emitEvent, handleIncomingMessageEvent, handleError, getCurrentMeJid, signalProtocol, senderKeyManager, retryCoordinator } = input;
99
- return {
100
- logger,
101
- sendNode,
102
- getMeJid: getCurrentMeJid,
103
- signalProtocol,
104
- senderKeyManager,
105
- onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
106
- emitIncomingMessage: (event) => {
107
- void handleIncomingMessageEvent(event).catch((err) => handleError((0, primitives_1.toError)(err)));
108
- },
109
- emitUnhandledStanza: (event) => emitEvent('stanza_unhandled', event)
110
- };
111
- }
112
- function createHandleClientDirtyBits(input) {
113
- const { logger, queryWithContext, syncAppState, getCurrentCredentials, generateUsyncSid } = input;
114
- return (dirtyBits) => (0, dirty_1.handleDirtyBits)({
115
- logger,
116
- queryWithContext,
117
- getCurrentCredentials,
118
- syncAppState,
119
- generateUsyncSid
120
- }, dirtyBits);
121
- }
122
110
  function createIncomingNodeRuntime(input) {
123
111
  const { logger, emitEvent, authClient, connectionManager, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, sendNode, syncAppState, disconnect, clearStoredCredentials, getCurrentMeJid, handleClientDirtyBits, incomingMessageAckOptions } = input;
124
112
  return {
@@ -147,6 +135,8 @@ function createIncomingNodeRuntime(input) {
147
135
  emitIncomingFailure: (event) => emitEvent('failure', event),
148
136
  emitIncomingErrorStanza: (event) => emitEvent('stanza_error', event),
149
137
  emitIncomingNotification: (event) => emitEvent('notification', event),
138
+ emitRegistrationCode: (event) => emitEvent('registration_code_received', event),
139
+ emitAccountTakeoverNotice: (event) => emitEvent('account_takeover_notice', event),
150
140
  emitGroupEvent: (event) => {
151
141
  emitEvent('group_event', event);
152
142
  void messageDispatch.mutateParticipantsCacheFromGroupEvent(event).catch((error) => {
@@ -160,6 +150,9 @@ function createIncomingNodeRuntime(input) {
160
150
  },
161
151
  emitUnhandledIncomingNode: (event) => emitEvent('stanza_unhandled', event),
162
152
  syncAppState,
153
+ stopComms: () => {
154
+ void connectionManager.getComms()?.stopComms();
155
+ },
163
156
  disconnect,
164
157
  clearStoredCredentials,
165
158
  parseDirtyBits: (nodes) => (0, dirty_1.parseDirtyBits)(nodes, logger),
@@ -167,7 +160,7 @@ function createIncomingNodeRuntime(input) {
167
160
  };
168
161
  }
169
162
  function createPassiveTasksRuntime(input) {
170
- const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials } = input;
163
+ const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials, abPropsCoordinator } = input;
171
164
  return {
172
165
  queryWithContext,
173
166
  getCurrentCredentials,
@@ -175,14 +168,18 @@ function createPassiveTasksRuntime(input) {
175
168
  sendNodeDirect: (node) => nodeOrchestrator.sendNode(node),
176
169
  takeDanglingReceipts: () => receiptQueue.take(),
177
170
  requeueDanglingReceipt: (node) => receiptQueue.enqueue(node),
178
- shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error)
171
+ shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error),
172
+ syncAbProps: () => abPropsCoordinator.sync(),
173
+ sendPresenceAvailable: async () => {
174
+ const credentials = getCurrentCredentials();
175
+ await nodeOrchestrator.sendNode((0, presence_1.buildPresenceNode)({ name: credentials?.meDisplayName ?? undefined }), false);
176
+ }
179
177
  };
180
178
  }
181
179
  function buildWaClientDependencies(input) {
182
180
  const { base, runtime } = input;
183
181
  const { options, logger, sessionStore } = base;
184
182
  const receiptQueue = new WaReceiptQueue_1.WaReceiptQueue();
185
- const keyShareCoordinator = new WaKeyShareCoordinator_1.WaKeyShareCoordinator();
186
183
  let connectionManager = null;
187
184
  let passiveTasks = null;
188
185
  let mediaConnCacheFallback = null;
@@ -192,23 +189,24 @@ function buildWaClientDependencies(input) {
192
189
  sendNode: async (node) => nodeTransport.sendNode(node),
193
190
  logger,
194
191
  defaultTimeoutMs: options.nodeQueryTimeoutMs,
195
- hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN
192
+ hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN,
193
+ mobileIqIdFormat: options.mobileTransport !== undefined
196
194
  });
197
195
  const keepAlive = new WaKeepAlive_1.WaKeepAlive({
198
196
  logger,
199
197
  nodeOrchestrator,
200
198
  getComms: () => connectionManager?.getComms() ?? null,
201
199
  intervalMs: options.keepAliveIntervalMs,
200
+ getIntervalMs: () => abPropsCoordinator.getConfigValue('heartbeat_interval_s') * 1000,
202
201
  timeoutMs: options.deadSocketTimeoutMs,
203
202
  hostDomain: constants_1.WA_DEFAULTS.HOST_DOMAIN
204
203
  });
205
204
  const mediaTransfer = new WaMediaTransferClient_1.WaMediaTransferClient({
206
205
  logger,
207
206
  defaultTimeoutMs: options.mediaTimeoutMs,
208
- defaultUploadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaUpload),
209
- defaultDownloadDispatcher: (0, proxy_1.toProxyDispatcher)(options.proxy?.mediaDownload),
210
207
  defaultUploadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaUpload),
211
- defaultDownloadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaDownload)
208
+ defaultDownloadAgent: (0, proxy_1.toProxyAgent)(options.proxy?.mediaDownload),
209
+ skipMacVerification: options.dangerous?.disableMediaMacVerification
212
210
  });
213
211
  const mediaMessageBuildOptions = {
214
212
  logger,
@@ -224,7 +222,8 @@ function buildWaClientDependencies(input) {
224
222
  setMediaConnCache: (mediaConn) => {
225
223
  mediaConnCacheFallback = mediaConn;
226
224
  connectionManager?.setMediaConnCache(mediaConn);
227
- }
225
+ },
226
+ media: options.media
228
227
  };
229
228
  const messageClient = new WaMessageClient_1.WaMessageClient({
230
229
  logger,
@@ -234,12 +233,22 @@ function buildWaClientDependencies(input) {
234
233
  defaultMaxAttempts: options.messageMaxAttempts,
235
234
  defaultRetryDelayMs: options.messageRetryDelayMs
236
235
  });
237
- const senderKeyManager = new SenderKeyManager_1.SenderKeyManager(sessionStore.senderKey);
238
- const signalProtocol = new SignalProtocol_1.SignalProtocol(sessionStore.signal, logger);
236
+ const senderKeyManager = new SenderKeyManager_1.SenderKeyManager(sessionStore.senderKey, {
237
+ getFutureMessagesMax: () => abPropsCoordinator.getConfigValue('web_signal_future_messages_max'),
238
+ skipSignatureVerification: options.dangerous?.disableSenderKeySignatureVerification
239
+ });
240
+ const signalProtocol = new SignalProtocol_1.SignalProtocol({
241
+ signal: sessionStore.signal,
242
+ preKey: sessionStore.preKey,
243
+ session: sessionStore.session,
244
+ identity: sessionStore.identity
245
+ }, logger);
246
+ const signalSystemQuery = (node, timeoutMs) => runtime.query(node, timeoutMs, { useSystemId: true });
239
247
  const signalDigestSync = new SignalDigestSyncApi_1.SignalDigestSyncApi({
240
248
  logger,
241
- query: runtime.query,
249
+ query: signalSystemQuery,
242
250
  signalStore: sessionStore.signal,
251
+ preKeyStore: sessionStore.preKey,
243
252
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
244
253
  });
245
254
  const generateUsyncSid = (0, usync_1.createUsyncSidGenerator)();
@@ -252,35 +261,39 @@ function buildWaClientDependencies(input) {
252
261
  });
253
262
  const signalIdentitySync = new SignalIdentitySyncApi_1.SignalIdentitySyncApi({
254
263
  logger,
255
- query: runtime.query,
256
- signalStore: sessionStore.signal,
264
+ query: signalSystemQuery,
265
+ identityStore: sessionStore.identity,
257
266
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
258
267
  });
259
268
  const signalMissingPreKeysSync = new SignalMissingPreKeysSyncApi_1.SignalMissingPreKeysSyncApi({
260
269
  logger,
261
- query: runtime.query,
270
+ query: signalSystemQuery,
262
271
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
263
272
  });
264
273
  const signalRotateKey = new SignalRotateKeyApi_1.SignalRotateKeyApi({
265
274
  logger,
266
- query: runtime.query,
275
+ query: signalSystemQuery,
267
276
  signalStore: sessionStore.signal,
268
277
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
269
278
  });
270
279
  const signalSessionSync = new SignalSessionSyncApi_1.SignalSessionSyncApi({
271
280
  logger,
272
- query: runtime.query,
281
+ query: signalSystemQuery,
273
282
  defaultTimeoutMs: options.signalFetchKeyBundlesTimeoutMs
274
283
  });
275
284
  const authClient = new WaAuthClient_1.WaAuthClient({
276
285
  deviceBrowser: options.deviceBrowser,
277
286
  deviceOsDisplayName: options.deviceOsDisplayName,
278
287
  devicePlatform: options.devicePlatform,
279
- requireFullSync: options.requireFullSync
288
+ requireFullSync: options.requireFullSync,
289
+ version: options.version,
290
+ dangerous: options.dangerous,
291
+ mobileTransport: options.mobileTransport
280
292
  }, {
281
293
  logger,
282
294
  authStore: sessionStore.auth,
283
295
  signalStore: sessionStore.signal,
296
+ preKeyStore: sessionStore.preKey,
284
297
  socket: {
285
298
  sendNode: runtime.sendNode,
286
299
  query: runtime.query
@@ -303,13 +316,27 @@ function buildWaClientDependencies(input) {
303
316
  const groupCoordinator = (0, WaGroupCoordinator_1.createGroupCoordinator)({
304
317
  queryWithContext: runtime.queryWithContext
305
318
  });
319
+ const privacyCoordinator = (0, WaPrivacyCoordinator_1.createPrivacyCoordinator)({
320
+ queryWithContext: runtime.queryWithContext
321
+ });
322
+ const profileCoordinator = (0, WaProfileCoordinator_1.createProfileCoordinator)({
323
+ queryWithContext: runtime.queryWithContext,
324
+ generateSid: generateUsyncSid
325
+ });
326
+ const businessCoordinator = (0, WaBusinessCoordinator_1.createBusinessCoordinator)({
327
+ queryWithContext: runtime.queryWithContext
328
+ });
329
+ const emailCoordinator = (0, WaEmailCoordinator_1.createEmailCoordinator)({
330
+ queryWithContext: runtime.queryWithContext
331
+ });
306
332
  const retryTracker = (0, tracker_1.createOutboundRetryTracker)({
307
333
  retryStore: sessionStore.retry,
308
334
  logger
309
335
  });
310
336
  const sessionResolver = (0, resolver_1.createSignalSessionResolver)({
311
337
  signalProtocol,
312
- signalStore: sessionStore.signal,
338
+ sessionStore: sessionStore.session,
339
+ identityStore: sessionStore.identity,
313
340
  signalIdentitySync,
314
341
  signalSessionSync,
315
342
  logger
@@ -322,9 +349,42 @@ function buildWaClientDependencies(input) {
322
349
  });
323
350
  const participantsCache = (0, participants_1.createGroupParticipantsCache)({
324
351
  participantsStore: sessionStore.participants,
325
- queryGroupParticipantJids: async (groupJid) => (await groupCoordinator.queryGroupMetadata(groupJid)).participants.map((participant) => participant.jid),
352
+ queryGroupParticipantJids: async (groupJid) => {
353
+ const metadata = await groupCoordinator.queryGroupMetadata(groupJid);
354
+ const participantJids = new Array(metadata.participants.length);
355
+ for (let index = 0; index < metadata.participants.length; index += 1) {
356
+ participantJids[index] = metadata.participants[index].jid;
357
+ }
358
+ return participantJids;
359
+ },
326
360
  logger
327
361
  });
362
+ const trustedContactToken = new WaTrustedContactTokenCoordinator_1.WaTrustedContactTokenCoordinator({
363
+ logger,
364
+ store: sessionStore.privacyToken,
365
+ runtime: {
366
+ queryWithContext: runtime.queryWithContext,
367
+ emitEvent: runtime.emitEvent,
368
+ getCurrentMeLid: () => getCurrentMeLid() ?? null
369
+ },
370
+ durationS: options.privacyToken?.tcTokenDurationS,
371
+ numBuckets: options.privacyToken?.tcTokenNumBuckets,
372
+ senderDurationS: options.privacyToken?.tcTokenSenderDurationS,
373
+ senderNumBuckets: options.privacyToken?.tcTokenSenderNumBuckets,
374
+ maxDurationS: options.privacyToken?.tcTokenMaxDurationS,
375
+ getConfigOverrides: () => ({
376
+ durationS: abPropsCoordinator.getConfigValue('tctoken_duration'),
377
+ numBuckets: abPropsCoordinator.getConfigValue('tctoken_num_buckets'),
378
+ senderDurationS: abPropsCoordinator.getConfigValue('tctoken_duration_sender'),
379
+ senderNumBuckets: abPropsCoordinator.getConfigValue('tctoken_num_buckets_sender')
380
+ })
381
+ });
382
+ const abPropsCoordinator = new WaAbPropsCoordinator_1.WaAbPropsCoordinator({
383
+ logger,
384
+ runtime: {
385
+ queryWithContext: runtime.queryWithContext
386
+ }
387
+ });
328
388
  let messageDispatch;
329
389
  const appStateSyncKeyProtocol = (0, key_protocol_1.createAppStateSyncKeyProtocol)({
330
390
  publishSignalMessage: (signalInput, publishOptions) => messageDispatch.publishSignalMessage(signalInput, publishOptions),
@@ -344,14 +404,30 @@ function buildWaClientDependencies(input) {
344
404
  buildMessageContent: async (content) => (0, messages_1.buildMediaMessageContent)(mediaMessageBuildOptions, content),
345
405
  senderKeyManager,
346
406
  signalProtocol,
407
+ signalStore: sessionStore.signal,
408
+ sessionStore: sessionStore.session,
409
+ identityStore: sessionStore.identity,
410
+ deviceListStore: sessionStore.deviceList,
411
+ messageSecretStore: sessionStore.messageSecret,
347
412
  getCurrentMeJid,
348
413
  getCurrentMeLid,
349
- getCurrentSignedIdentity
414
+ getCurrentSignedIdentity,
415
+ resolvePrivacyTokenNode: (recipientJid) => trustedContactToken.resolveTokenForMessage(recipientJid),
416
+ onDirectMessageSent: (recipientJid) => {
417
+ trustedContactToken.maybeIssueSenderToken(recipientJid).catch((err) => logger.warn('sender token issue failed', {
418
+ to: recipientJid,
419
+ message: (0, primitives_1.toError)(err).message
420
+ }));
421
+ },
422
+ getIcdcHashLength: () => abPropsCoordinator.getConfigValue('md_icdc_hash_length'),
423
+ mobileMessageIdFormat: options.mobileTransport !== undefined
350
424
  });
351
425
  const retryCoordinator = new WaRetryCoordinator_1.WaRetryCoordinator({
352
426
  logger,
353
427
  retryStore: sessionStore.retry,
354
428
  signalStore: sessionStore.signal,
429
+ preKeyStore: sessionStore.preKey,
430
+ sessionStore: sessionStore.session,
355
431
  senderKeyStore: sessionStore.senderKey,
356
432
  signalProtocol,
357
433
  signalDeviceSync,
@@ -370,7 +446,9 @@ function buildWaClientDependencies(input) {
370
446
  store: sessionStore.appState,
371
447
  onMissingKeys: async ({ keyIds }) => {
372
448
  await messageDispatch.requestAppStateSyncKeys(keyIds);
373
- }
449
+ },
450
+ skipMacVerification: options.dangerous?.disableAppStateMacVerification,
451
+ mobilePrimary: options.mobileTransport !== undefined
374
452
  });
375
453
  const appStateMutations = new WaAppStateMutationCoordinator_1.WaAppStateMutationCoordinator({
376
454
  logger,
@@ -391,14 +469,28 @@ function buildWaClientDependencies(input) {
391
469
  connectionManager.setMediaConnCache(mediaConnCacheFallback);
392
470
  }
393
471
  scheduleReconnectAfterPairing = () => connectionManager?.scheduleReconnectAfterPairing();
394
- const disconnectWithClientSideEffects = async () => {
395
- keyShareCoordinator.notifyDisconnected();
472
+ const disconnectWithClientSideEffects = async (reason, isLogout, code) => {
473
+ abPropsCoordinator.reset();
474
+ offlineResume.reset();
396
475
  await connectionManager?.disconnect();
397
- runtime.emitEvent('connection_close', {});
476
+ runtime.emitEvent('connection', {
477
+ status: 'close',
478
+ reason,
479
+ code,
480
+ isLogout,
481
+ isNewLogin: false
482
+ });
398
483
  };
399
- const connectWithClientSideEffects = async () => {
484
+ const connectWithClientSideEffects = async (reason) => {
485
+ runtime.resumeIncomingEvents();
400
486
  await connectionManager?.connect(runtime.handleIncomingFrame);
401
- runtime.emitEvent('connection_open', {});
487
+ runtime.emitEvent('connection', {
488
+ status: 'open',
489
+ reason,
490
+ code: null,
491
+ isLogout: false,
492
+ isNewLogin: connectionManager?.wasNewLogin() ?? false
493
+ });
402
494
  };
403
495
  const clearStoredCredentialsWithClientSideEffects = async () => {
404
496
  await connectionManager?.clearStoredCredentials();
@@ -415,26 +507,37 @@ function buildWaClientDependencies(input) {
415
507
  clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
416
508
  connect: connectWithClientSideEffects
417
509
  });
418
- const incomingMessageAckOptions = createIncomingMessageAckOptions({
510
+ const incomingMessageAckOptions = {
419
511
  logger,
420
512
  sendNode: runtime.sendNode,
421
- emitEvent: runtime.emitEvent,
422
- handleIncomingMessageEvent: runtime.handleIncomingMessageEvent,
423
- handleError: runtime.handleError,
424
- getCurrentMeJid,
513
+ getMeJid: getCurrentMeJid,
425
514
  signalProtocol,
426
515
  senderKeyManager,
427
- retryCoordinator
428
- });
429
- const handleClientDirtyBits = createHandleClientDirtyBits({
516
+ onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
517
+ emitIncomingMessage: (event) => {
518
+ void runtime
519
+ .handleIncomingMessageEvent(event)
520
+ .catch((err) => runtime.handleError((0, primitives_1.toError)(err)));
521
+ },
522
+ emitUnhandledStanza: (event) => runtime.emitEvent('stanza_unhandled', event)
523
+ };
524
+ const handleClientDirtyBits = (dirtyBits) => (0, dirty_1.handleDirtyBits)({
430
525
  logger,
431
526
  queryWithContext: runtime.queryWithContext,
432
- syncAppState: runtime.syncAppState,
433
527
  getCurrentCredentials,
528
+ syncAppState: runtime.syncAppState,
434
529
  generateUsyncSid
530
+ }, dirtyBits);
531
+ const offlineResume = new WaOfflineResumeCoordinator_1.WaOfflineResumeCoordinator({
532
+ logger,
533
+ runtime: {
534
+ sendNode: (node) => nodeOrchestrator.sendNode(node, false),
535
+ emitOfflineResume: (event) => runtime.emitEvent('offline_resume', event)
536
+ }
435
537
  });
436
538
  const incomingNode = new WaIncomingNodeCoordinator_1.WaIncomingNodeCoordinator({
437
539
  logger,
540
+ offlineResume,
438
541
  runtime: createIncomingNodeRuntime({
439
542
  logger,
440
543
  emitEvent: runtime.emitEvent,
@@ -454,9 +557,231 @@ function buildWaClientDependencies(input) {
454
557
  incomingMessageAckOptions
455
558
  })
456
559
  });
560
+ incomingNode.registerIncomingHandler({
561
+ tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
562
+ subtype: constants_1.WA_NOTIFICATION_TYPES.ENCRYPT,
563
+ prepend: true,
564
+ handler: async (node) => {
565
+ const firstChild = (0, helpers_1.getFirstNodeChild)(node);
566
+ if (!firstChild) {
567
+ return false;
568
+ }
569
+ const childTag = firstChild.tag;
570
+ // <count value="N"/> — server prekeys running low
571
+ if (childTag === 'count') {
572
+ const ackNode = (0, global_1.buildAckNode)({
573
+ kind: 'notification',
574
+ node,
575
+ includeType: false
576
+ });
577
+ await runtime.sendNode(ackNode);
578
+ const tasks = passiveTasks;
579
+ if (!tasks) {
580
+ logger.warn('encrypt-count: passive tasks not available');
581
+ return true;
582
+ }
583
+ await tasks.handlePreKeyLowNotification().catch((error) => {
584
+ logger.warn('encrypt-count: prekey upload failed', {
585
+ message: (0, primitives_1.toError)(error).message
586
+ });
587
+ });
588
+ return true;
589
+ }
590
+ // <digest/> — digest key sync
591
+ if (childTag === 'digest') {
592
+ const ackNode = (0, global_1.buildAckNode)({
593
+ kind: 'notification',
594
+ node,
595
+ includeType: false
596
+ });
597
+ await runtime.sendNode(ackNode);
598
+ const tasks = passiveTasks;
599
+ if (!tasks) {
600
+ logger.warn('encrypt-digest: passive tasks not available');
601
+ return true;
602
+ }
603
+ await tasks.handleDigestNotification().catch((error) => {
604
+ logger.warn('encrypt-digest: digest sync failed', {
605
+ message: (0, primitives_1.toError)(error).message
606
+ });
607
+ });
608
+ return true;
609
+ }
610
+ // <identity/> — contact identity key changed
611
+ if (childTag === 'identity') {
612
+ const parsed = (0, identity_1.parseIdentityChangeNotification)(node);
613
+ if (!parsed) {
614
+ return false;
615
+ }
616
+ const ackNode = (0, global_1.buildAckNode)({
617
+ kind: 'notification',
618
+ node,
619
+ includeType: false
620
+ });
621
+ await runtime.sendNode(ackNode);
622
+ const address = (0, jid_1.parseSignalAddressFromJid)(parsed.fromJid);
623
+ // ignore companion devices (non-primary)
624
+ if (address.device !== 0) {
625
+ logger.debug('identity-change: ignoring companion device', {
626
+ jid: parsed.fromJid
627
+ });
628
+ return true;
629
+ }
630
+ // self-primary identity change → must disconnect
631
+ const meJid = getCurrentMeJid();
632
+ if (meJid) {
633
+ const meUser = (0, jid_1.toUserJid)(meJid);
634
+ const fromUser = (0, jid_1.toUserJid)(parsed.fromJid);
635
+ if (meUser === fromUser) {
636
+ logger.error('self primary identity changed, disconnecting');
637
+ void connectionManager?.getComms()?.stopComms();
638
+ await disconnectWithClientSideEffects(constants_1.WA_DISCONNECT_REASONS.PRIMARY_IDENTITY_KEY_CHANGE, true, null);
639
+ await clearStoredCredentialsWithClientSideEffects();
640
+ return true;
641
+ }
642
+ }
643
+ const oldIdentity = await sessionStore.identity.getRemoteIdentity(address);
644
+ if (oldIdentity) {
645
+ logger.info('identity-change: clearing session', {
646
+ jid: parsed.fromJid
647
+ });
648
+ await sessionStore.session.deleteSession(address);
649
+ const userJid = (0, jid_1.toUserJid)(parsed.fromJid);
650
+ await trustedContactToken.reissueOnIdentityChange(userJid).catch((error) => {
651
+ logger.warn('identity-change: reissue tc token failed', {
652
+ message: (0, primitives_1.toError)(error).message
653
+ });
654
+ });
655
+ }
656
+ runtime.emitEvent('notification', {
657
+ rawNode: node,
658
+ stanzaId: parsed.stanzaId,
659
+ chatJid: parsed.fromJid,
660
+ stanzaType: 'encrypt',
661
+ notificationType: 'encrypt',
662
+ classification: 'core',
663
+ details: {
664
+ kind: 'identity_change',
665
+ displayName: parsed.displayName,
666
+ lid: parsed.lid,
667
+ hadPreviousIdentity: !!oldIdentity
668
+ }
669
+ });
670
+ return true;
671
+ }
672
+ return false;
673
+ }
674
+ });
675
+ incomingNode.registerIncomingHandler({
676
+ tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
677
+ subtype: constants_1.WA_NOTIFICATION_TYPES.DEVICES,
678
+ prepend: true,
679
+ handler: async (node) => {
680
+ const parsed = (0, devices_1.parseDeviceNotification)(node);
681
+ if (!parsed) {
682
+ return false;
683
+ }
684
+ const ackNode = (0, global_1.buildAckNode)({
685
+ kind: 'notification',
686
+ node,
687
+ includeType: false
688
+ });
689
+ await runtime.sendNode(ackNode);
690
+ const userJid = (0, jid_1.toUserJid)(parsed.fromJid);
691
+ if (parsed.action === devices_1.DEVICE_NOTIFICATION_ACTIONS.REMOVE) {
692
+ const baseAddress = (0, jid_1.parseSignalAddressFromJid)(parsed.fromJid);
693
+ for (const device of parsed.devices) {
694
+ const address = {
695
+ user: baseAddress.user,
696
+ server: baseAddress.server,
697
+ device: device.deviceId
698
+ };
699
+ await sessionStore.session.deleteSession(address).catch((error) => {
700
+ logger.warn('devices-notification: delete session failed', {
701
+ message: (0, primitives_1.toError)(error).message
702
+ });
703
+ });
704
+ }
705
+ }
706
+ // invalidate device list cache so next fanout fetches fresh list
707
+ if (sessionStore.deviceList) {
708
+ await sessionStore.deviceList.deleteUserDevices(userJid).catch((error) => {
709
+ logger.warn('devices-notification: invalidate cache failed', {
710
+ message: (0, primitives_1.toError)(error).message
711
+ });
712
+ });
713
+ }
714
+ // for update notifications, re-sync immediately
715
+ if (parsed.action === devices_1.DEVICE_NOTIFICATION_ACTIONS.UPDATE) {
716
+ signalDeviceSync.syncDeviceList([userJid]).catch((error) => {
717
+ logger.warn('devices-notification: sync device list failed', {
718
+ message: (0, primitives_1.toError)(error).message
719
+ });
720
+ });
721
+ }
722
+ runtime.emitEvent('notification', {
723
+ rawNode: node,
724
+ stanzaId: parsed.stanzaId,
725
+ chatJid: parsed.fromJid,
726
+ stanzaType: 'devices',
727
+ notificationType: 'devices',
728
+ classification: 'core',
729
+ details: {
730
+ kind: 'device_list_change',
731
+ action: parsed.action,
732
+ devices: parsed.devices
733
+ }
734
+ });
735
+ return true;
736
+ }
737
+ });
738
+ incomingNode.registerIncomingHandler({
739
+ tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
740
+ subtype: constants_1.WA_PRIVACY_TOKEN_NOTIFICATION_TYPE,
741
+ prepend: true,
742
+ handler: async (node) => {
743
+ const fromJid = node.attrs.from ?? node.attrs.sender_lid;
744
+ if (!fromJid) {
745
+ return false;
746
+ }
747
+ const tokens = (0, privacy_token_1.parsePrivacyTokenNotification)(node);
748
+ if (tokens.length === 0) {
749
+ return false;
750
+ }
751
+ await trustedContactToken.handleIncomingToken(fromJid, tokens);
752
+ const ackNode = (0, global_1.buildAckNode)({
753
+ kind: 'notification',
754
+ node,
755
+ typeOverride: constants_1.WA_PRIVACY_TOKEN_NOTIFICATION_TYPE
756
+ });
757
+ await runtime.sendNode(ackNode);
758
+ return true;
759
+ }
760
+ });
761
+ // AB Props: sync after successful login and on server notification
762
+ incomingNode.registerIncomingHandler({
763
+ tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
764
+ subtype: constants_1.WA_NOTIFICATION_TYPES.SERVER,
765
+ prepend: true,
766
+ handler: async (node) => {
767
+ const firstChild = (0, helpers_1.getFirstNodeChild)(node);
768
+ if (!firstChild || firstChild.tag !== constants_1.WA_NODE_TAGS.ABPROPS) {
769
+ return false;
770
+ }
771
+ const ackNode = (0, global_1.buildAckNode)({
772
+ kind: 'notification',
773
+ node,
774
+ includeType: false
775
+ });
776
+ await runtime.sendNode(ackNode);
777
+ abPropsCoordinator.sync();
778
+ return true;
779
+ }
780
+ });
457
781
  passiveTasks = new WaPassiveTasksCoordinator_1.WaPassiveTasksCoordinator({
458
782
  logger,
459
783
  signalStore: sessionStore.signal,
784
+ preKeyStore: sessionStore.preKey,
460
785
  signalDigestSync,
461
786
  signalRotateKey,
462
787
  runtime: createPassiveTasksRuntime({
@@ -464,8 +789,11 @@ function buildWaClientDependencies(input) {
464
789
  authClient,
465
790
  nodeOrchestrator,
466
791
  receiptQueue,
467
- getCurrentCredentials
468
- })
792
+ getCurrentCredentials,
793
+ abPropsCoordinator
794
+ }),
795
+ mobilePrimary: options.mobileTransport !== undefined,
796
+ appStateSync
469
797
  });
470
798
  return {
471
799
  nodeTransport,
@@ -486,13 +814,18 @@ function buildWaClientDependencies(input) {
486
814
  messageDispatch,
487
815
  retryCoordinator,
488
816
  appStateSync,
489
- appStateMutations,
817
+ chatCoordinator: appStateMutations,
490
818
  streamControl,
491
819
  incomingNode,
492
820
  passiveTasks,
493
821
  groupCoordinator,
822
+ privacyCoordinator,
823
+ profileCoordinator,
824
+ businessCoordinator,
825
+ emailCoordinator,
494
826
  receiptQueue,
495
- keyShareCoordinator,
496
- connectionManager
827
+ connectionManager,
828
+ trustedContactToken,
829
+ abPropsCoordinator
497
830
  };
498
831
  }