zapo-js 0.1.2 → 0.2.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 (468) hide show
  1. package/README.md +12 -4
  2. package/dist/appstate/WaAppStateCrypto.js +1 -1
  3. package/dist/appstate/WaAppStateSyncClient.js +138 -93
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +8 -6
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +36 -47
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +7 -7
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  11. package/dist/auth/pairing/WaPairingFlow.js +13 -3
  12. package/dist/client/WaClient.js +225 -101
  13. package/dist/client/WaClientFactory.js +294 -44
  14. package/dist/client/connection/WaConnectionManager.js +19 -10
  15. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  16. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  17. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  18. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +292 -99
  19. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  20. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  21. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  22. package/dist/client/coordinators/WaRetryCoordinator.js +179 -27
  23. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  24. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  25. package/dist/client/dirty.js +40 -20
  26. package/dist/client/events/devices.js +72 -0
  27. package/dist/client/events/group.js +3 -11
  28. package/dist/client/events/identity.js +22 -0
  29. package/dist/client/events/privacy-token.js +39 -0
  30. package/dist/client/history-sync.js +50 -9
  31. package/dist/client/incoming.js +37 -7
  32. package/dist/client/mailbox.js +24 -23
  33. package/dist/client/messages.js +107 -31
  34. package/dist/client/messaging/fanout.js +21 -11
  35. package/dist/client/messaging/participants.js +6 -4
  36. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  37. package/dist/client/tokens/cs-token.js +50 -0
  38. package/dist/client/tokens/tc-token.js +25 -0
  39. package/dist/crypto/core/index.js +2 -2
  40. package/dist/crypto/core/keys.js +4 -4
  41. package/dist/crypto/core/nonce.js +2 -0
  42. package/dist/crypto/core/primitives.js +0 -8
  43. package/dist/crypto/core/random.js +22 -0
  44. package/dist/crypto/curves/X25519.js +25 -6
  45. package/dist/crypto/index.js +3 -0
  46. package/dist/crypto/math/constants.js +13 -36
  47. package/dist/crypto/math/edwards.js +171 -44
  48. package/dist/crypto/math/fe.js +706 -0
  49. package/dist/crypto/math/mod.js +10 -3
  50. package/dist/esm/appstate/WaAppStateCrypto.js +1 -1
  51. package/dist/esm/appstate/WaAppStateSyncClient.js +138 -93
  52. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  53. package/dist/esm/appstate/index.js +2 -2
  54. package/dist/esm/appstate/utils.js +2 -5
  55. package/dist/esm/auth/WaAuthClient.js +36 -47
  56. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +7 -7
  57. package/dist/esm/auth/index.js +0 -2
  58. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  59. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -4
  60. package/dist/esm/client/WaClient.js +225 -101
  61. package/dist/esm/client/WaClientFactory.js +295 -45
  62. package/dist/esm/client/connection/WaConnectionManager.js +19 -10
  63. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  64. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  65. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  66. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +295 -102
  67. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  68. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  69. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  70. package/dist/esm/client/coordinators/WaRetryCoordinator.js +181 -29
  71. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  72. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  73. package/dist/esm/client/dirty.js +40 -20
  74. package/dist/esm/client/events/devices.js +68 -0
  75. package/dist/esm/client/events/group.js +3 -11
  76. package/dist/esm/client/events/identity.js +19 -0
  77. package/dist/esm/client/events/privacy-token.js +36 -0
  78. package/dist/esm/client/history-sync.js +50 -9
  79. package/dist/esm/client/incoming.js +38 -8
  80. package/dist/esm/client/mailbox.js +24 -23
  81. package/dist/esm/client/messages.js +108 -32
  82. package/dist/esm/client/messaging/fanout.js +22 -12
  83. package/dist/esm/client/messaging/participants.js +6 -4
  84. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  85. package/dist/esm/client/tokens/cs-token.js +46 -0
  86. package/dist/esm/client/tokens/tc-token.js +18 -0
  87. package/dist/esm/crypto/core/index.js +2 -2
  88. package/dist/esm/crypto/core/keys.js +1 -1
  89. package/dist/esm/crypto/core/nonce.js +2 -0
  90. package/dist/esm/crypto/core/primitives.js +0 -7
  91. package/dist/esm/crypto/core/random.js +22 -1
  92. package/dist/esm/crypto/curves/X25519.js +25 -6
  93. package/dist/esm/crypto/index.js +1 -0
  94. package/dist/esm/crypto/math/constants.js +12 -35
  95. package/dist/esm/crypto/math/edwards.js +174 -47
  96. package/dist/esm/crypto/math/fe.js +691 -0
  97. package/dist/esm/crypto/math/mod.js +10 -1
  98. package/dist/esm/index.js +1 -1
  99. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  100. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  101. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  102. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  103. package/dist/esm/infra/perf/StoreLock.js +77 -0
  104. package/dist/esm/media/WaMediaCrypto.js +95 -13
  105. package/dist/esm/media/WaMediaTransferClient.js +39 -47
  106. package/dist/esm/media/constants.js +2 -1
  107. package/dist/esm/message/WaMessageClient.js +26 -19
  108. package/dist/esm/message/content.js +195 -9
  109. package/dist/esm/message/icdc.js +76 -0
  110. package/dist/esm/message/incoming.js +24 -12
  111. package/dist/esm/message/phash.js +3 -1
  112. package/dist/esm/message/reporting-token.js +14 -27
  113. package/dist/esm/protocol/appstate.js +9 -40
  114. package/dist/esm/protocol/browser.js +10 -18
  115. package/dist/esm/protocol/constants.js +5 -3
  116. package/dist/esm/protocol/defaults.js +6 -0
  117. package/dist/esm/protocol/index.js +1 -2
  118. package/dist/esm/protocol/jid.js +105 -36
  119. package/dist/esm/protocol/message.js +61 -1
  120. package/dist/esm/protocol/nodes.js +2 -0
  121. package/dist/esm/protocol/notification.js +3 -1
  122. package/dist/esm/protocol/privacy-token.js +17 -0
  123. package/dist/esm/protocol/privacy.js +55 -0
  124. package/dist/esm/protocol/stream.js +26 -1
  125. package/dist/esm/retry/codec.js +216 -0
  126. package/dist/esm/retry/constants.js +1 -1
  127. package/dist/esm/retry/index.js +2 -2
  128. package/dist/esm/retry/parse.js +50 -30
  129. package/dist/esm/retry/replay.js +11 -7
  130. package/dist/esm/retry/tracker.js +50 -12
  131. package/dist/esm/signal/api/SignalDeviceSyncApi.js +49 -32
  132. package/dist/esm/signal/api/SignalDigestSyncApi.js +13 -9
  133. package/dist/esm/signal/api/SignalIdentitySyncApi.js +26 -11
  134. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +18 -7
  135. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  136. package/dist/esm/signal/api/SignalSessionSyncApi.js +16 -7
  137. package/dist/esm/signal/api/result-map.js +10 -0
  138. package/dist/esm/signal/constants.js +0 -4
  139. package/dist/esm/signal/crypto/WaAdvSignature.js +12 -6
  140. package/dist/esm/signal/{store/sqlite.js → encoding.js} +78 -24
  141. package/dist/esm/signal/group/SenderKeyCodec.js +3 -2
  142. package/dist/esm/signal/group/SenderKeyManager.js +125 -106
  143. package/dist/esm/signal/index.js +1 -0
  144. package/dist/esm/signal/registration/keygen.js +6 -2
  145. package/dist/esm/signal/registration/utils.js +1 -0
  146. package/dist/esm/signal/session/SignalProtocol.js +150 -74
  147. package/dist/esm/signal/session/resolver.js +137 -102
  148. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  149. package/dist/esm/store/createStore.js +101 -187
  150. package/dist/esm/store/index.js +1 -10
  151. package/dist/esm/store/locks/appstate.lock.js +26 -0
  152. package/dist/esm/store/locks/auth.lock.js +15 -0
  153. package/dist/esm/store/locks/contact.lock.js +20 -0
  154. package/dist/esm/store/locks/device-list.lock.js +20 -0
  155. package/dist/esm/store/locks/message.lock.js +21 -0
  156. package/dist/esm/store/locks/participants.lock.js +20 -0
  157. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  158. package/dist/esm/store/locks/retry.lock.js +29 -0
  159. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  160. package/dist/esm/store/locks/signal.lock.js +63 -0
  161. package/dist/esm/store/locks/thread.lock.js +21 -0
  162. package/dist/esm/store/noop.store.js +1 -1
  163. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  164. package/dist/esm/store/providers/memory/device-list.store.js +10 -5
  165. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  166. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  167. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  168. package/dist/esm/store/providers/memory/signal.store.js +36 -19
  169. package/dist/esm/transport/WaComms.js +3 -1
  170. package/dist/esm/transport/WaWebSocket.js +0 -6
  171. package/dist/esm/transport/binary/constants.js +0 -30
  172. package/dist/esm/transport/binary/decoder.js +4 -4
  173. package/dist/esm/transport/binary/encoder.js +8 -15
  174. package/dist/esm/transport/binary/index.js +0 -1
  175. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -19
  176. package/dist/esm/transport/node/builders/business.js +129 -0
  177. package/dist/esm/transport/node/builders/global.js +370 -0
  178. package/dist/esm/transport/node/builders/index.js +5 -2
  179. package/dist/esm/transport/node/builders/message.js +63 -239
  180. package/dist/esm/transport/node/builders/pairing.js +0 -24
  181. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  182. package/dist/esm/transport/node/builders/privacy.js +48 -0
  183. package/dist/esm/transport/node/builders/profile.js +70 -0
  184. package/dist/esm/transport/node/builders/retry.js +10 -22
  185. package/dist/esm/transport/node/builders/usync.js +6 -2
  186. package/dist/esm/transport/node/helpers.js +19 -1
  187. package/dist/esm/transport/node/usync.js +3 -33
  188. package/dist/esm/transport/node/xml.js +35 -14
  189. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  190. package/dist/esm/transport/noise/WaNoiseCert.js +3 -3
  191. package/dist/esm/transport/noise/WaNoiseSession.js +64 -23
  192. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  193. package/dist/esm/transport/stream/parse.js +8 -4
  194. package/dist/esm/util/bytes.js +22 -18
  195. package/dist/esm/util/index.js +5 -0
  196. package/dist/esm/util/primitives.js +3 -2
  197. package/dist/index.js +7 -1
  198. package/dist/infra/perf/BackgroundQueue.js +482 -0
  199. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  200. package/dist/infra/perf/PromiseDedup.js +24 -0
  201. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  202. package/dist/infra/perf/StoreLock.js +81 -0
  203. package/dist/media/WaMediaCrypto.js +94 -12
  204. package/dist/media/WaMediaTransferClient.js +39 -47
  205. package/dist/media/constants.js +2 -1
  206. package/dist/message/WaMessageClient.js +26 -19
  207. package/dist/message/content.js +198 -9
  208. package/dist/message/icdc.js +81 -0
  209. package/dist/message/incoming.js +24 -12
  210. package/dist/message/phash.js +3 -1
  211. package/dist/message/reporting-token.js +14 -28
  212. package/dist/protocol/appstate.js +10 -41
  213. package/dist/protocol/browser.js +10 -18
  214. package/dist/protocol/constants.js +21 -2
  215. package/dist/protocol/defaults.js +6 -0
  216. package/dist/protocol/index.js +8 -5
  217. package/dist/protocol/jid.js +111 -36
  218. package/dist/protocol/message.js +62 -2
  219. package/dist/protocol/nodes.js +2 -0
  220. package/dist/protocol/notification.js +3 -1
  221. package/dist/protocol/privacy-token.js +20 -0
  222. package/dist/protocol/privacy.js +58 -0
  223. package/dist/protocol/stream.js +27 -2
  224. package/dist/retry/codec.js +220 -0
  225. package/dist/retry/constants.js +1 -1
  226. package/dist/retry/index.js +5 -5
  227. package/dist/retry/parse.js +51 -30
  228. package/dist/retry/replay.js +10 -6
  229. package/dist/retry/tracker.js +50 -12
  230. package/dist/signal/api/SignalDeviceSyncApi.js +48 -31
  231. package/dist/signal/api/SignalDigestSyncApi.js +13 -9
  232. package/dist/signal/api/SignalIdentitySyncApi.js +25 -10
  233. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  234. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  235. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  236. package/dist/signal/api/result-map.js +13 -0
  237. package/dist/signal/constants.js +1 -5
  238. package/dist/signal/crypto/WaAdvSignature.js +11 -5
  239. package/dist/signal/{store/sqlite.js → encoding.js} +79 -25
  240. package/dist/signal/group/SenderKeyCodec.js +4 -3
  241. package/dist/signal/group/SenderKeyManager.js +125 -106
  242. package/dist/signal/index.js +13 -1
  243. package/dist/signal/registration/keygen.js +6 -2
  244. package/dist/signal/registration/utils.js +1 -0
  245. package/dist/signal/session/SignalProtocol.js +150 -74
  246. package/dist/signal/session/resolver.js +135 -100
  247. package/dist/store/contracts/privacy-token.store.js +2 -0
  248. package/dist/store/createStore.js +101 -187
  249. package/dist/store/index.js +15 -33
  250. package/dist/store/locks/appstate.lock.js +29 -0
  251. package/dist/store/locks/auth.lock.js +18 -0
  252. package/dist/store/locks/contact.lock.js +23 -0
  253. package/dist/store/locks/device-list.lock.js +23 -0
  254. package/dist/store/locks/message.lock.js +24 -0
  255. package/dist/store/locks/participants.lock.js +23 -0
  256. package/dist/store/locks/privacy-token.lock.js +21 -0
  257. package/dist/store/locks/retry.lock.js +32 -0
  258. package/dist/store/locks/sender-key.lock.js +55 -0
  259. package/dist/store/locks/signal.lock.js +66 -0
  260. package/dist/store/locks/thread.lock.js +24 -0
  261. package/dist/store/noop.store.js +1 -1
  262. package/dist/store/providers/memory/appstate.store.js +22 -24
  263. package/dist/store/providers/memory/device-list.store.js +10 -5
  264. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  265. package/dist/store/providers/memory/retry.store.js +77 -2
  266. package/dist/store/providers/memory/sender-key.store.js +6 -1
  267. package/dist/store/providers/memory/signal.store.js +36 -19
  268. package/dist/transport/WaComms.js +3 -1
  269. package/dist/transport/WaWebSocket.js +0 -6
  270. package/dist/transport/binary/constants.js +1 -31
  271. package/dist/transport/binary/decoder.js +4 -4
  272. package/dist/transport/binary/encoder.js +8 -15
  273. package/dist/transport/binary/index.js +0 -4
  274. package/dist/transport/node/WaNodeOrchestrator.js +24 -18
  275. package/dist/transport/node/builders/business.js +137 -0
  276. package/dist/transport/node/builders/global.js +375 -0
  277. package/dist/transport/node/builders/index.js +18 -9
  278. package/dist/transport/node/builders/message.js +64 -245
  279. package/dist/transport/node/builders/pairing.js +0 -26
  280. package/dist/transport/node/builders/privacy-token.js +46 -0
  281. package/dist/transport/node/builders/privacy.js +55 -0
  282. package/dist/transport/node/builders/profile.js +78 -0
  283. package/dist/transport/node/builders/retry.js +9 -21
  284. package/dist/transport/node/builders/usync.js +6 -2
  285. package/dist/transport/node/helpers.js +20 -1
  286. package/dist/transport/node/usync.js +2 -32
  287. package/dist/transport/node/xml.js +35 -14
  288. package/dist/transport/noise/WaClientPayload.js +13 -13
  289. package/dist/transport/noise/WaNoiseCert.js +2 -2
  290. package/dist/transport/noise/WaNoiseSession.js +64 -23
  291. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  292. package/dist/transport/stream/parse.js +7 -3
  293. package/dist/types/appstate/encoding.d.ts +7 -0
  294. package/dist/types/appstate/index.d.ts +3 -3
  295. package/dist/types/appstate/utils.d.ts +0 -2
  296. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  297. package/dist/types/auth/index.d.ts +0 -2
  298. package/dist/types/auth/types.d.ts +1 -0
  299. package/dist/types/client/WaClient.d.ts +27 -12
  300. package/dist/types/client/WaClientFactory.d.ts +12 -4
  301. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  302. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  303. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -1
  304. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +14 -0
  305. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  306. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  307. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  308. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
  309. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  310. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  311. package/dist/types/client/events/devices.d.ts +20 -0
  312. package/dist/types/client/events/identity.d.ts +9 -0
  313. package/dist/types/client/events/privacy-token.d.ts +7 -0
  314. package/dist/types/client/history-sync.d.ts +9 -6
  315. package/dist/types/client/incoming.d.ts +3 -1
  316. package/dist/types/client/index.d.ts +1 -1
  317. package/dist/types/client/mailbox.d.ts +3 -5
  318. package/dist/types/client/messages.d.ts +1 -2
  319. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  320. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  321. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  322. package/dist/types/client/types.d.ts +51 -3
  323. package/dist/types/crypto/core/index.d.ts +2 -2
  324. package/dist/types/crypto/core/nonce.d.ts +2 -0
  325. package/dist/types/crypto/core/primitives.d.ts +0 -1
  326. package/dist/types/crypto/core/random.d.ts +1 -0
  327. package/dist/types/crypto/index.d.ts +1 -0
  328. package/dist/types/crypto/math/constants.d.ts +4 -2
  329. package/dist/types/crypto/math/fe.d.ts +30 -0
  330. package/dist/types/crypto/math/mod.d.ts +0 -2
  331. package/dist/types/crypto/math/types.d.ts +11 -4
  332. package/dist/types/index.d.ts +5 -3
  333. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  334. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  335. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  336. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  337. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  338. package/dist/types/media/WaMediaTransferClient.d.ts +3 -12
  339. package/dist/types/media/constants.d.ts +1 -1
  340. package/dist/types/media/index.d.ts +1 -1
  341. package/dist/types/media/types.d.ts +10 -2
  342. package/dist/types/message/content.d.ts +8 -0
  343. package/dist/types/message/icdc.d.ts +13 -0
  344. package/dist/types/message/reporting-token.d.ts +0 -1
  345. package/dist/types/message/types.d.ts +45 -6
  346. package/dist/types/protocol/appstate.d.ts +0 -11
  347. package/dist/types/protocol/constants.d.ts +7 -3
  348. package/dist/types/protocol/defaults.d.ts +6 -0
  349. package/dist/types/protocol/index.d.ts +1 -2
  350. package/dist/types/protocol/jid.d.ts +19 -2
  351. package/dist/types/protocol/message.d.ts +60 -0
  352. package/dist/types/protocol/nodes.d.ts +2 -0
  353. package/dist/types/protocol/notification.d.ts +2 -0
  354. package/dist/types/protocol/privacy-token.d.ts +17 -0
  355. package/dist/types/protocol/privacy.d.ts +75 -0
  356. package/dist/types/protocol/stream.d.ts +30 -0
  357. package/dist/types/retry/codec.d.ts +3 -0
  358. package/dist/types/retry/index.d.ts +3 -3
  359. package/dist/types/retry/parse.d.ts +5 -2
  360. package/dist/types/retry/tracker.d.ts +1 -0
  361. package/dist/types/retry/types.d.ts +6 -1
  362. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  363. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  364. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  365. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  366. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  367. package/dist/types/signal/api/result-map.d.ts +1 -0
  368. package/dist/types/signal/constants.d.ts +0 -3
  369. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  370. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  371. package/dist/types/signal/index.d.ts +2 -0
  372. package/dist/types/signal/session/SignalProtocol.d.ts +10 -4
  373. package/dist/types/signal/session/resolver.d.ts +7 -2
  374. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  375. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  376. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  377. package/dist/types/store/contracts/signal.store.d.ts +7 -0
  378. package/dist/types/store/createStore.d.ts +1 -1
  379. package/dist/types/store/index.d.ts +5 -13
  380. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  381. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  382. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  383. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  384. package/dist/types/store/locks/message.lock.d.ts +3 -0
  385. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  386. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  387. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  388. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  389. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  390. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  391. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  392. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  393. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  394. package/dist/types/store/providers/memory/signal.store.d.ts +2 -1
  395. package/dist/types/store/types.d.ts +49 -61
  396. package/dist/types/transport/WaWebSocket.d.ts +0 -1
  397. package/dist/types/transport/binary/constants.d.ts +0 -30
  398. package/dist/types/transport/binary/index.d.ts +0 -1
  399. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  400. package/dist/types/transport/node/builders/business.d.ts +29 -0
  401. package/dist/types/transport/node/builders/global.d.ts +102 -0
  402. package/dist/types/transport/node/builders/index.d.ts +5 -2
  403. package/dist/types/transport/node/builders/message.d.ts +8 -7
  404. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  405. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  406. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  407. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  408. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  409. package/dist/types/transport/node/helpers.d.ts +5 -0
  410. package/dist/types/transport/noise/WaNoiseSession.d.ts +3 -2
  411. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  412. package/dist/types/util/bytes.d.ts +1 -1
  413. package/dist/types/util/index.d.ts +5 -0
  414. package/dist/types/util/primitives.d.ts +0 -1
  415. package/dist/util/bytes.js +22 -18
  416. package/dist/util/index.js +23 -0
  417. package/dist/util/primitives.js +2 -2
  418. package/package.json +29 -7
  419. package/proto/index.js +1 -1
  420. package/dist/crypto/core/constants.js +0 -4
  421. package/dist/esm/crypto/core/constants.js +0 -1
  422. package/dist/esm/retry/outbound.js +0 -82
  423. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  424. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  425. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  426. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  427. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  428. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  429. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  430. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  431. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  432. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  433. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  434. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  435. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  436. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  437. package/dist/retry/outbound.js +0 -87
  438. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  439. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  440. package/dist/store/providers/sqlite/auth.store.js +0 -180
  441. package/dist/store/providers/sqlite/connection.js +0 -281
  442. package/dist/store/providers/sqlite/contact.store.js +0 -78
  443. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  444. package/dist/store/providers/sqlite/message.store.js +0 -136
  445. package/dist/store/providers/sqlite/migrations.js +0 -350
  446. package/dist/store/providers/sqlite/participants.store.js +0 -81
  447. package/dist/store/providers/sqlite/retry.store.js +0 -145
  448. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  449. package/dist/store/providers/sqlite/signal.store.js +0 -439
  450. package/dist/store/providers/sqlite/table-names.js +0 -113
  451. package/dist/store/providers/sqlite/thread.store.js +0 -89
  452. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  453. package/dist/types/crypto/core/constants.d.ts +0 -1
  454. package/dist/types/retry/outbound.d.ts +0 -4
  455. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  456. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  457. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  458. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  459. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  460. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  461. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  462. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  463. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  464. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  465. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  466. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  467. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  468. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
@@ -2,9 +2,14 @@ import { EventEmitter } from 'node:events';
2
2
  import type { WaAppStateStoreData, WaAppStateSyncResult } from '../appstate/types';
3
3
  import type { WaAppStateSyncOptions } from '../appstate/types';
4
4
  import type { WaAppStateSyncClient } from '../appstate/WaAppStateSyncClient';
5
+ import type { WaAppStateMutationCoordinator } from './coordinators/WaAppStateMutationCoordinator';
6
+ import type { WaBusinessCoordinator } from './coordinators/WaBusinessCoordinator';
5
7
  import type { WaGroupCoordinator } from './coordinators/WaGroupCoordinator';
6
8
  import type { WaMessageDispatchCoordinator } from './coordinators/WaMessageDispatchCoordinator';
7
- import type { WaAppStateMessageKey, WaClearChatOptions, WaClientOptions, WaDeleteChatOptions, WaDeleteMessageForMeOptions, WaSendMessageOptions, WaClientEventMap, WaIncomingNodeHandlerRegistration } from './types';
9
+ import type { WaPrivacyCoordinator } from './coordinators/WaPrivacyCoordinator';
10
+ import type { WaProfileCoordinator } from './coordinators/WaProfileCoordinator';
11
+ import type { WriteBehindDrainResult } from './persistence/WriteBehindPersistence';
12
+ import type { WaClientOptions, WaSendMessageOptions, WaClientEventMap, WaIncomingNodeHandlerRegistration } from './types';
8
13
  import type { Logger } from '../infra/log/types';
9
14
  import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
10
15
  import type { WaMessagePublishResult, WaSendMessageContent, WaSendReceiptInput } from '../message/types';
@@ -18,6 +23,7 @@ export declare class WaClient extends EventEmitter {
18
23
  private readonly contactStore;
19
24
  private readonly messageStore;
20
25
  private readonly participantsStore;
26
+ private readonly privacyTokenStore;
21
27
  private readonly deviceListStore;
22
28
  private readonly retryStore;
23
29
  private readonly signalStore;
@@ -28,18 +34,26 @@ export declare class WaClient extends EventEmitter {
28
34
  private readonly nodeTransport;
29
35
  private readonly signalDeviceSync;
30
36
  readonly appStateSync: WaAppStateSyncClient;
31
- private readonly appStateMutations;
37
+ readonly chatCoordinator: WaAppStateMutationCoordinator;
32
38
  private readonly incomingNode;
33
39
  readonly mediaTransfer: WaMediaTransferClient;
34
40
  readonly messageDispatch: WaMessageDispatchCoordinator;
35
41
  readonly messageClient: WaMessageClient;
36
42
  readonly groupCoordinator: WaGroupCoordinator;
43
+ readonly privacyCoordinator: WaPrivacyCoordinator;
44
+ readonly profileCoordinator: WaProfileCoordinator;
45
+ readonly businessCoordinator: WaBusinessCoordinator;
37
46
  private readonly passiveTasks;
38
47
  private readonly keepAlive;
39
48
  private readonly receiptQueue;
40
49
  private readonly keyShareCoordinator;
41
50
  private readonly connectionManager;
51
+ private readonly trustedContactToken;
52
+ private readonly writeBehind;
42
53
  private connectPromise;
54
+ private acceptingIncomingEvents;
55
+ private activeIncomingHandlers;
56
+ private readonly incomingHandlersDrainedWaiters;
43
57
  constructor(options: WaClientOptions, logger?: Logger);
44
58
  on<K extends keyof WaClientEventMap>(event: K, listener: WaClientEventMap[K]): this;
45
59
  on(event: string | symbol, listener: (...args: unknown[]) => void): this;
@@ -62,7 +76,6 @@ export declare class WaClient extends EventEmitter {
62
76
  registerIncomingHandler(registration: WaIncomingNodeHandlerRegistration): () => void;
63
77
  unregisterIncomingHandler(registration: WaIncomingNodeHandlerRegistration): boolean;
64
78
  private bindNodeTransportEvents;
65
- private getMailboxPersistenceDeps;
66
79
  private handleIncomingMessageEvent;
67
80
  private handleIncomingAppStateSyncKeyShare;
68
81
  private handleIncomingAppStateSyncKeyRequest;
@@ -78,22 +91,24 @@ export declare class WaClient extends EventEmitter {
78
91
  getLidsByPhoneNumbers(phoneNumbers: readonly string[]): Promise<readonly SignalLidSyncResult[]>;
79
92
  sendMessage(to: string, content: WaSendMessageContent, options?: WaSendMessageOptions): Promise<WaMessagePublishResult>;
80
93
  syncSignalSession(jid: string, reasonIdentity?: boolean): Promise<void>;
94
+ get chat(): WaAppStateMutationCoordinator;
95
+ get group(): WaGroupCoordinator;
96
+ get privacy(): WaPrivacyCoordinator;
97
+ get profile(): WaProfileCoordinator;
98
+ get business(): WaBusinessCoordinator;
81
99
  sendReceipt(input: WaSendReceiptInput): Promise<void>;
82
- setChatMute(chatJid: string, muted: boolean, muteEndTimestampMs?: number): Promise<void>;
83
- setChatRead(chatJid: string, read: boolean): Promise<void>;
84
- setChatPin(chatJid: string, pinned: boolean): Promise<void>;
85
- setChatArchive(chatJid: string, archived: boolean): Promise<void>;
86
- clearChat(chatJid: string, options?: WaClearChatOptions): Promise<void>;
87
- deleteChat(chatJid: string, options?: WaDeleteChatOptions): Promise<void>;
88
- setChatLock(chatJid: string, locked: boolean): Promise<void>;
89
- setMessageStar(message: WaAppStateMessageKey, starred: boolean): Promise<void>;
90
- deleteMessageForMe(message: WaAppStateMessageKey, options?: WaDeleteMessageForMeOptions): Promise<void>;
91
100
  flushAppStateMutations(): Promise<void>;
101
+ flushWriteBehind(timeoutMs?: number): Promise<WriteBehindDrainResult>;
92
102
  exportAppState(): Promise<WaAppStateStoreData>;
93
103
  syncAppState(options?: WaAppStateSyncOptions): Promise<WaAppStateSyncResult>;
94
104
  private executeAppStateSync;
95
105
  private getBlockedAppStateCollections;
96
106
  private emitChatEventsFromAppStateSyncResult;
107
+ private handleNctSaltMutation;
97
108
  private clearStoredState;
109
+ private tryEnterIncomingHandler;
110
+ private leaveIncomingHandler;
111
+ private pauseIncomingEventsAndWaitDrain;
112
+ private notifyIncomingHandlersDrained;
98
113
  private handleError;
99
114
  }
@@ -5,13 +5,17 @@ import { WaConnectionManager } from './connection/WaConnectionManager';
5
5
  import { WaKeyShareCoordinator } from './connection/WaKeyShareCoordinator';
6
6
  import { WaReceiptQueue } from './connection/WaReceiptQueue';
7
7
  import { WaAppStateMutationCoordinator } from './coordinators/WaAppStateMutationCoordinator';
8
+ import { type WaBusinessCoordinator } from './coordinators/WaBusinessCoordinator';
8
9
  import { type WaGroupCoordinator } from './coordinators/WaGroupCoordinator';
9
10
  import { WaIncomingNodeCoordinator } from './coordinators/WaIncomingNodeCoordinator';
10
11
  import { WaMessageDispatchCoordinator } from './coordinators/WaMessageDispatchCoordinator';
11
12
  import { WaPassiveTasksCoordinator } from './coordinators/WaPassiveTasksCoordinator';
13
+ import { type WaPrivacyCoordinator } from './coordinators/WaPrivacyCoordinator';
14
+ import { type WaProfileCoordinator } from './coordinators/WaProfileCoordinator';
12
15
  import { WaRetryCoordinator } from './coordinators/WaRetryCoordinator';
13
16
  import { type WaStreamControlHandler } from './coordinators/WaStreamControlCoordinator';
14
- import { buildMediaMessageContent } from './messages';
17
+ import { WaTrustedContactTokenCoordinator } from './coordinators/WaTrustedContactTokenCoordinator';
18
+ import { type WaMediaMessageOptions } from './messages';
15
19
  import type { WaClientEventMap, WaClientOptions, WaIncomingMessageEvent } from './types';
16
20
  import type { Logger } from '../infra/log/types';
17
21
  import { WaMediaTransferClient } from '../media/WaMediaTransferClient';
@@ -28,7 +32,6 @@ import { WaKeepAlive } from '../transport/keepalive/WaKeepAlive';
28
32
  import { WaNodeOrchestrator } from '../transport/node/WaNodeOrchestrator';
29
33
  import { WaNodeTransport } from '../transport/node/WaNodeTransport';
30
34
  import type { BinaryNode } from '../transport/types';
31
- type WaMediaMessageBuildOptions = Parameters<typeof buildMediaMessageContent>[0];
32
35
  interface WaClientBase {
33
36
  readonly options: Readonly<WaClientOptions>;
34
37
  readonly logger: Logger;
@@ -45,13 +48,14 @@ interface WaClientBuildRuntime {
45
48
  readonly handleError: (error: Error) => void;
46
49
  readonly handleIncomingFrame: (frame: Uint8Array) => Promise<void>;
47
50
  readonly clearStoredState: () => Promise<void>;
51
+ readonly resumeIncomingEvents: () => void;
48
52
  }
49
53
  interface WaClientDependencies {
50
54
  readonly nodeTransport: WaNodeTransport;
51
55
  readonly nodeOrchestrator: WaNodeOrchestrator;
52
56
  readonly keepAlive: WaKeepAlive;
53
57
  readonly mediaTransfer: WaMediaTransferClient;
54
- readonly mediaMessageBuildOptions: WaMediaMessageBuildOptions;
58
+ readonly mediaMessageBuildOptions: WaMediaMessageOptions;
55
59
  readonly messageClient: WaMessageClient;
56
60
  readonly senderKeyManager: SenderKeyManager;
57
61
  readonly signalProtocol: SignalProtocol;
@@ -65,14 +69,18 @@ interface WaClientDependencies {
65
69
  readonly messageDispatch: WaMessageDispatchCoordinator;
66
70
  readonly retryCoordinator: WaRetryCoordinator;
67
71
  readonly appStateSync: WaAppStateSyncClient;
68
- readonly appStateMutations: WaAppStateMutationCoordinator;
72
+ readonly chatCoordinator: WaAppStateMutationCoordinator;
69
73
  readonly streamControl: WaStreamControlHandler;
70
74
  readonly incomingNode: WaIncomingNodeCoordinator;
71
75
  readonly passiveTasks: WaPassiveTasksCoordinator;
72
76
  readonly groupCoordinator: WaGroupCoordinator;
77
+ readonly privacyCoordinator: WaPrivacyCoordinator;
78
+ readonly profileCoordinator: WaProfileCoordinator;
79
+ readonly businessCoordinator: WaBusinessCoordinator;
73
80
  readonly receiptQueue: WaReceiptQueue;
74
81
  readonly keyShareCoordinator: WaKeyShareCoordinator;
75
82
  readonly connectionManager: WaConnectionManager;
83
+ readonly trustedContactToken: WaTrustedContactTokenCoordinator;
76
84
  }
77
85
  export declare function resolveWaClientBase(options: WaClientOptions, logger: Logger): WaClientBase;
78
86
  export declare function buildWaClientDependencies(input: {
@@ -35,12 +35,14 @@ export declare class WaConnectionManager {
35
35
  private pendingComms;
36
36
  private lifecycleGeneration;
37
37
  private lifecycleQueue;
38
+ private lastConnectWasNewLogin;
38
39
  constructor(options: WaConnectionManagerOptions);
39
40
  connect(frameHandler: (frame: Uint8Array) => Promise<void>): Promise<void>;
40
41
  scheduleReconnectAfterPairing(): void;
41
42
  disconnect(): Promise<void>;
42
43
  clearStoredCredentials(): Promise<void>;
43
44
  isConnected(): boolean;
45
+ wasNewLogin(): boolean;
44
46
  getComms(): WaComms | null;
45
47
  getClockSkewMs(): number | null;
46
48
  getMediaConnCache(): WaMediaConn | null;
@@ -0,0 +1,57 @@
1
+ import type { WaEditBusinessProfileInput } from '../../transport/node/builders/business';
2
+ import type { BinaryNode } from '../../transport/types';
3
+ export interface WaBusinessCategory {
4
+ readonly id: string;
5
+ readonly name: string;
6
+ }
7
+ export interface WaBusinessHoursEntry {
8
+ readonly dayOfWeek: string;
9
+ readonly mode: string;
10
+ readonly openTime?: number;
11
+ readonly closeTime?: number;
12
+ }
13
+ export interface WaBusinessHours {
14
+ readonly timezone?: string;
15
+ readonly config: readonly WaBusinessHoursEntry[];
16
+ }
17
+ export interface WaBusinessWebsite {
18
+ readonly url: string;
19
+ }
20
+ export interface WaBusinessProfileResult {
21
+ readonly jid: string;
22
+ readonly tag?: string;
23
+ readonly description?: string;
24
+ readonly address?: string;
25
+ readonly email?: string;
26
+ readonly websites?: readonly WaBusinessWebsite[];
27
+ readonly categories?: readonly WaBusinessCategory[];
28
+ readonly businessHours?: WaBusinessHours;
29
+ readonly latitude?: number;
30
+ readonly longitude?: number;
31
+ readonly profileOptions?: Readonly<Record<string, string>>;
32
+ }
33
+ export interface WaVerifiedNamePrivacyMode {
34
+ readonly actualActors: number;
35
+ readonly hostStorage: number;
36
+ readonly privacyModeTs: number;
37
+ }
38
+ export interface WaVerifiedNameResult {
39
+ readonly name?: string;
40
+ readonly level?: string;
41
+ readonly serial?: string;
42
+ readonly isApi: boolean;
43
+ readonly isSmb: boolean;
44
+ readonly privacyMode?: WaVerifiedNamePrivacyMode;
45
+ }
46
+ export interface WaBusinessCoordinator {
47
+ readonly getBusinessProfile: (jids: readonly string[]) => Promise<readonly WaBusinessProfileResult[]>;
48
+ readonly editBusinessProfile: (input: WaEditBusinessProfileInput) => Promise<void>;
49
+ readonly getVerifiedName: (jid: string) => Promise<WaVerifiedNameResult | null>;
50
+ readonly updateCoverPhoto: (id: string, timestamp: string, token: string) => Promise<void>;
51
+ readonly deleteCoverPhoto: (id: string) => Promise<void>;
52
+ }
53
+ interface WaBusinessCoordinatorOptions {
54
+ readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
55
+ }
56
+ export declare function createBusinessCoordinator(options: WaBusinessCoordinatorOptions): WaBusinessCoordinator;
57
+ export {};
@@ -2,6 +2,7 @@ import type { WaSuccessPersistAttributes } from '../../auth/types';
2
2
  import type { WaDirtyBit } from '../dirty';
3
3
  import type { WaIncomingBaseEvent, WaIncomingCallEvent, WaIncomingChatstateEvent, WaIncomingFailureEvent, WaGroupEvent, WaIncomingNodeHandlerRegistration, WaIncomingNotificationEvent, WaIncomingPresenceEvent, WaIncomingReceiptEvent, WaIncomingUnhandledStanzaEvent } from '../types';
4
4
  import type { Logger } from '../../infra/log/types';
5
+ import type { WaConnectionCode, WaDisconnectReason } from '../../protocol/stream';
5
6
  import { type WaStreamControlNodeResult } from '../../transport/stream/parse';
6
7
  import type { BinaryNode } from '../../transport/types';
7
8
  interface WaIncomingNodeRuntime {
@@ -31,7 +32,8 @@ interface WaIncomingNodeRuntime {
31
32
  readonly emitGroupEvent: (event: WaGroupEvent) => void;
32
33
  readonly emitUnhandledIncomingNode: (event: WaIncomingUnhandledStanzaEvent) => void;
33
34
  readonly syncAppState: () => Promise<void>;
34
- readonly disconnect: () => Promise<void>;
35
+ readonly stopComms: () => void;
36
+ readonly disconnect: (reason: WaDisconnectReason, isLogout: boolean, code: WaConnectionCode | null) => Promise<void>;
35
37
  readonly clearStoredCredentials: () => Promise<void>;
36
38
  readonly parseDirtyBits: (nodes: readonly BinaryNode[]) => readonly WaDirtyBit[];
37
39
  readonly handleDirtyBits: (dirtyBits: readonly WaDirtyBit[]) => Promise<void>;
@@ -11,6 +11,8 @@ import type { OutboundRetryTracker } from '../../retry/tracker';
11
11
  import type { SenderKeyManager } from '../../signal/group/SenderKeyManager';
12
12
  import type { SignalSessionResolver } from '../../signal/session/resolver';
13
13
  import type { SignalProtocol } from '../../signal/session/SignalProtocol';
14
+ import type { WaDeviceListStore } from '../../store/contracts/device-list.store';
15
+ import type { WaSignalStore } from '../../store/contracts/signal.store';
14
16
  import type { BinaryNode } from '../../transport/types';
15
17
  interface WaMessageDispatchCoordinatorOptions {
16
18
  readonly logger: Logger;
@@ -23,9 +25,13 @@ interface WaMessageDispatchCoordinatorOptions {
23
25
  readonly buildMessageContent: (content: WaSendMessageContent) => Promise<Proto.IMessage>;
24
26
  readonly senderKeyManager: SenderKeyManager;
25
27
  readonly signalProtocol: SignalProtocol;
28
+ readonly signalStore: WaSignalStore;
29
+ readonly deviceListStore: WaDeviceListStore;
26
30
  readonly getCurrentMeJid: () => string | null | undefined;
27
31
  readonly getCurrentMeLid: () => string | null | undefined;
28
32
  readonly getCurrentSignedIdentity: () => Proto.IADVSignedDeviceIdentity | null | undefined;
33
+ readonly resolvePrivacyTokenNode: (recipientJid: string) => Promise<BinaryNode | null>;
34
+ readonly onDirectMessageSent: (recipientJid: string) => void;
29
35
  }
30
36
  export declare class WaMessageDispatchCoordinator {
31
37
  private readonly logger;
@@ -38,9 +44,16 @@ export declare class WaMessageDispatchCoordinator {
38
44
  private readonly buildMessageContent;
39
45
  private readonly senderKeyManager;
40
46
  private readonly signalProtocol;
47
+ private readonly signalStore;
48
+ private readonly deviceListStore;
41
49
  private readonly getCurrentMeJid;
42
50
  private readonly getCurrentMeLid;
43
51
  private readonly getCurrentSignedIdentity;
52
+ private readonly resolvePrivacyTokenNode;
53
+ private readonly onDirectMessageSent;
54
+ private readonly icdcDedup;
55
+ private readonly privacyTokenDedup;
56
+ private readonly distributionDedup;
44
57
  constructor(options: WaMessageDispatchCoordinatorOptions);
45
58
  publishMessageNode(node: BinaryNode, options?: WaMessagePublishOptions): Promise<WaMessagePublishResult>;
46
59
  publishEncryptedMessage(input: WaEncryptedMessageInput, options?: WaMessagePublishOptions): Promise<WaMessagePublishResult>;
@@ -62,6 +75,7 @@ export declare class WaMessageDispatchCoordinator {
62
75
  private generateOutgoingMessageId;
63
76
  private tryBuildReportingTokenArtifacts;
64
77
  private getEncodedSignedDeviceIdentity;
78
+ private resolveUserIcdc;
65
79
  private requireCurrentMeJid;
66
80
  }
67
81
  export {};
@@ -32,11 +32,15 @@ export declare class WaPassiveTasksCoordinator {
32
32
  readonly runtime: WaPassiveTasksRuntime;
33
33
  });
34
34
  startPassiveTasksAfterConnect(): void;
35
+ handlePreKeyLowNotification(): Promise<void>;
36
+ handleDigestNotification(): Promise<void>;
35
37
  resetInFlightState(): void;
36
38
  private runPassiveTasksAfterConnect;
37
39
  private validateDigestAndRecoverPreKeys;
38
40
  private uploadPreKeysIfMissing;
39
41
  private rotateSignedPreKeyIfDue;
42
+ private resolveLocalKeyBundle;
43
+ private resolveLocalKeyBundleFromStore;
40
44
  private resolveRotationTimestamp;
41
45
  private flushDanglingReceipts;
42
46
  }
@@ -0,0 +1,26 @@
1
+ import type { WaPrivacyDisallowedListSettingName, WaPrivacySettingName, WaPrivacySettingValueMap } from '../../protocol/privacy';
2
+ import type { BinaryNode } from '../../transport/types';
3
+ export type WaPrivacySettings = {
4
+ readonly [K in WaPrivacySettingName]?: WaPrivacySettingValueMap[K];
5
+ };
6
+ export interface WaPrivacyDisallowedListResult {
7
+ readonly jids: readonly string[];
8
+ readonly dhash?: string;
9
+ }
10
+ export interface WaBlocklistResult {
11
+ readonly jids: readonly string[];
12
+ readonly dhash?: string;
13
+ }
14
+ export interface WaPrivacyCoordinator {
15
+ readonly getPrivacySettings: () => Promise<WaPrivacySettings>;
16
+ readonly setPrivacySetting: <S extends WaPrivacySettingName>(setting: S, value: WaPrivacySettingValueMap[S]) => Promise<void>;
17
+ readonly getDisallowedList: (category: WaPrivacyDisallowedListSettingName) => Promise<WaPrivacyDisallowedListResult>;
18
+ readonly getBlocklist: () => Promise<WaBlocklistResult>;
19
+ readonly blockUser: (jid: string) => Promise<void>;
20
+ readonly unblockUser: (jid: string) => Promise<void>;
21
+ }
22
+ interface WaPrivacyCoordinatorOptions {
23
+ readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
24
+ }
25
+ export declare function createPrivacyCoordinator(options: WaPrivacyCoordinatorOptions): WaPrivacyCoordinator;
26
+ export {};
@@ -0,0 +1,36 @@
1
+ import type { WaProfilePictureType } from '../../transport/node/builders/profile';
2
+ import type { BinaryNode } from '../../transport/types';
3
+ export interface WaProfilePictureResult {
4
+ readonly url?: string;
5
+ readonly directPath?: string;
6
+ readonly id?: string;
7
+ readonly type?: string;
8
+ }
9
+ export interface WaProfileStatusResult {
10
+ readonly status: string | null;
11
+ }
12
+ export interface WaProfileInfo {
13
+ readonly jid: string;
14
+ readonly pictureId?: number;
15
+ readonly status?: string | null;
16
+ }
17
+ export interface WaDisappearingModeResult {
18
+ readonly duration: number;
19
+ readonly timestamp: number;
20
+ readonly ephemeralityDisabled?: boolean;
21
+ }
22
+ export interface WaProfileCoordinator {
23
+ readonly getProfilePicture: (jid: string, type?: WaProfilePictureType, existingId?: string) => Promise<WaProfilePictureResult>;
24
+ readonly setProfilePicture: (imageBytes: Uint8Array, targetJid?: string) => Promise<string | null>;
25
+ readonly deleteProfilePicture: (targetJid?: string) => Promise<void>;
26
+ readonly getStatus: (jid: string) => Promise<WaProfileStatusResult>;
27
+ readonly setStatus: (text: string) => Promise<void>;
28
+ readonly getProfiles: (jids: readonly string[]) => Promise<readonly WaProfileInfo[]>;
29
+ readonly getDisappearingMode: (jids: readonly string[]) => Promise<readonly WaDisappearingModeResult[]>;
30
+ }
31
+ interface WaProfileCoordinatorOptions {
32
+ readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
33
+ readonly generateSid: () => Promise<string>;
34
+ }
35
+ export declare function createProfileCoordinator(options: WaProfileCoordinatorOptions): WaProfileCoordinator;
36
+ export {};
@@ -38,6 +38,7 @@ export declare class WaRetryCoordinator {
38
38
  private readonly getCurrentMeLid;
39
39
  private readonly getCurrentSignedIdentity;
40
40
  private readonly retryProcessingByMessageId;
41
+ private readonly retrySessionBaseKeys;
41
42
  private nextRetryCleanupAtMs;
42
43
  constructor(options: WaRetryCoordinatorOptions);
43
44
  onDecryptFailure(context: WaRetryDecryptFailureContext, error: unknown): Promise<boolean>;
@@ -52,6 +53,7 @@ export declare class WaRetryCoordinator {
52
53
  private runRetryTaskSerialized;
53
54
  private buildRetryKeysSection;
54
55
  private updateLocalSessionFromRetryRequest;
56
+ private applySessionBaseKeyPolicy;
55
57
  private markRetryRequesterSenderKeyAsStale;
56
58
  private fetchMissingPreKeysSession;
57
59
  private authorizeRetryRequest;
@@ -59,5 +61,9 @@ export declare class WaRetryCoordinator {
59
61
  private mapOutboundStateFromReceiptType;
60
62
  private sendRetryAckSafe;
61
63
  private maybeCleanupRetryStore;
64
+ private retrySessionBaseKeyMapKey;
65
+ private setRetrySessionBaseKey;
66
+ private getRetrySessionBaseKey;
67
+ private cleanupRetrySessionBaseKeys;
62
68
  }
63
69
  export {};
@@ -1,4 +1,5 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
+ import type { WaConnectionCode, WaConnectionOpenReason, WaDisconnectReason } from '../../protocol/stream';
2
3
  import type { WaStreamControlNodeResult } from '../../transport/stream/parse';
3
4
  import type { WaComms } from '../../transport/WaComms';
4
5
  interface WaStreamControlCoordinatorOptions {
@@ -6,9 +7,9 @@ interface WaStreamControlCoordinatorOptions {
6
7
  readonly getComms: () => WaComms | null;
7
8
  readonly clearPendingQueries: (error: Error) => void;
8
9
  readonly clearMediaConnCache: () => void;
9
- readonly disconnect: () => Promise<void>;
10
+ readonly disconnect: (reason: WaDisconnectReason, isLogout: boolean, code: WaConnectionCode | null) => Promise<void>;
10
11
  readonly clearStoredCredentials: () => Promise<void>;
11
- readonly connect: () => Promise<void>;
12
+ readonly connect: (reason: WaConnectionOpenReason) => Promise<void>;
12
13
  }
13
14
  export interface WaStreamControlHandler {
14
15
  readonly handleStreamControlResult: (result: WaStreamControlNodeResult) => Promise<void>;
@@ -0,0 +1,45 @@
1
+ import type { ParsedPrivacyToken } from '../events/privacy-token';
2
+ import type { WaClientEventMap } from '../types';
3
+ import type { Logger } from '../../infra/log/types';
4
+ import type { WaPrivacyTokenStore } from '../../store/contracts/privacy-token.store';
5
+ import type { BinaryNode } from '../../transport/types';
6
+ type WaTrustedContactTokenRuntime = {
7
+ readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
8
+ readonly emitEvent: <K extends keyof WaClientEventMap>(event: K, ...args: Parameters<WaClientEventMap[K]>) => void;
9
+ readonly getCurrentMeLid: () => string | null;
10
+ };
11
+ export declare class WaTrustedContactTokenCoordinator {
12
+ private readonly logger;
13
+ private readonly store;
14
+ private readonly runtime;
15
+ private readonly config;
16
+ private readonly csTokenGenerator;
17
+ private readonly senderTokenDedup;
18
+ private cachedNctSalt;
19
+ private nctSaltHydrated;
20
+ constructor(options: {
21
+ readonly logger: Logger;
22
+ readonly store: WaPrivacyTokenStore;
23
+ readonly runtime: WaTrustedContactTokenRuntime;
24
+ readonly durationS?: number;
25
+ readonly numBuckets?: number;
26
+ readonly senderDurationS?: number;
27
+ readonly senderNumBuckets?: number;
28
+ readonly maxDurationS?: number;
29
+ });
30
+ resolveTokenForMessage(recipientJid: string): Promise<BinaryNode | null>;
31
+ handleIncomingToken(fromJid: string, tokens: readonly ParsedPrivacyToken[]): Promise<void>;
32
+ maybeIssueSenderToken(recipientJid: string): Promise<void>;
33
+ reissueOnIdentityChange(jid: string): Promise<void>;
34
+ hydrateFromHistorySync(conversations: readonly {
35
+ readonly jid: string;
36
+ readonly tcToken?: Uint8Array | null;
37
+ readonly tcTokenTimestamp?: number | null;
38
+ readonly tcTokenSenderTimestamp?: number | null;
39
+ }[]): Promise<void>;
40
+ handleNctSaltSync(salt: Uint8Array | null): Promise<void>;
41
+ hydrateNctSaltFromHistorySync(salt: Uint8Array): Promise<void>;
42
+ private getNctSalt;
43
+ private issuePrivacyToken;
44
+ }
45
+ export {};
@@ -0,0 +1,20 @@
1
+ import type { BinaryNode } from '../../transport/types';
2
+ export declare const DEVICE_NOTIFICATION_ACTIONS: Readonly<{
3
+ readonly ADD: "add";
4
+ readonly REMOVE: "remove";
5
+ readonly UPDATE: "update";
6
+ }>;
7
+ export type DeviceNotificationAction = (typeof DEVICE_NOTIFICATION_ACTIONS)[keyof typeof DEVICE_NOTIFICATION_ACTIONS];
8
+ export interface DeviceNotificationDevice {
9
+ readonly deviceId: number;
10
+ readonly keyIndex: number | null;
11
+ }
12
+ export interface DeviceNotification {
13
+ readonly action: DeviceNotificationAction;
14
+ readonly stanzaId: string;
15
+ readonly fromJid: string;
16
+ readonly lid: string | undefined;
17
+ readonly hash: string | undefined;
18
+ readonly devices: readonly DeviceNotificationDevice[];
19
+ }
20
+ export declare function parseDeviceNotification(node: BinaryNode): DeviceNotification | null;
@@ -0,0 +1,9 @@
1
+ import type { BinaryNode } from '../../transport/types';
2
+ export interface IdentityChangeNotification {
3
+ readonly fromJid: string;
4
+ readonly stanzaId: string;
5
+ readonly displayName: string | undefined;
6
+ readonly lid: string | undefined;
7
+ readonly offline: string | undefined;
8
+ }
9
+ export declare function parseIdentityChangeNotification(node: BinaryNode): IdentityChangeNotification | null;
@@ -0,0 +1,7 @@
1
+ import type { BinaryNode } from '../../transport/types';
2
+ export interface ParsedPrivacyToken {
3
+ readonly type: string;
4
+ readonly tokenBytes: Uint8Array;
5
+ readonly timestampS: number;
6
+ }
7
+ export declare function parsePrivacyTokenNotification(node: BinaryNode): readonly ParsedPrivacyToken[];
@@ -1,17 +1,20 @@
1
+ import type { WriteBehindPersistence } from './persistence/WriteBehindPersistence';
1
2
  import type { WaClientEventMap } from './types';
2
3
  import type { Logger } from '../infra/log/types';
3
4
  import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
4
5
  import { type Proto } from '..';
5
- import type { WaContactStore } from '../store/contracts/contact.store';
6
- import type { WaMessageStore } from '../store/contracts/message.store';
7
- import type { WaThreadStore } from '../store/contracts/thread.store';
8
6
  interface WaHistorySyncDeps {
9
7
  readonly logger: Logger;
10
8
  readonly mediaTransfer: WaMediaTransferClient;
11
- readonly contactStore: WaContactStore;
12
- readonly messageStore: WaMessageStore;
13
- readonly threadStore: WaThreadStore;
9
+ readonly writeBehind: WriteBehindPersistence;
14
10
  readonly emitEvent: <K extends keyof WaClientEventMap>(event: K, ...args: Parameters<WaClientEventMap[K]>) => void;
11
+ readonly onPrivacyTokens?: (conversations: readonly {
12
+ readonly jid: string;
13
+ readonly tcToken?: Uint8Array | null;
14
+ readonly tcTokenTimestamp?: number | null;
15
+ readonly tcTokenSenderTimestamp?: number | null;
16
+ }[]) => Promise<void>;
17
+ readonly onNctSalt?: (salt: Uint8Array) => Promise<void>;
15
18
  }
16
19
  export declare function processHistorySyncNotification(deps: WaHistorySyncDeps, notification: Proto.Message.IHistorySyncNotification): Promise<void>;
17
20
  export {};
@@ -1,5 +1,6 @@
1
1
  import type { WaIncomingBaseEvent, WaIncomingFailureEvent, WaIncomingNotificationEvent, WaIncomingReceiptEvent, WaIncomingUnhandledStanzaEvent, WaGroupEvent } from './types';
2
2
  import type { Logger } from '../infra/log/types';
3
+ import type { WaConnectionCode, WaDisconnectReason } from '../protocol/stream';
3
4
  import type { BinaryNode } from '../transport/types';
4
5
  interface IncomingAckRuntime {
5
6
  readonly logger: Logger;
@@ -13,7 +14,8 @@ type IncomingReceiptHandlerOptions = IncomingAckRuntime & {
13
14
  type IncomingFailureHandlerOptions = {
14
15
  readonly logger: Logger;
15
16
  readonly emitIncomingFailure: (event: WaIncomingFailureEvent) => void;
16
- readonly disconnect: () => Promise<void>;
17
+ readonly stopComms: () => void;
18
+ readonly disconnect: (reason: WaDisconnectReason, isLogout: boolean, code: WaConnectionCode | null) => Promise<void>;
17
19
  readonly clearStoredCredentials: () => Promise<void>;
18
20
  };
19
21
  type IncomingNotificationHandlerOptions = IncomingAckRuntime & {
@@ -1,2 +1,2 @@
1
1
  export { WaClient } from './WaClient';
2
- export type { WaAppStateMessageKey, WaClientProxyOptions, WaClearChatOptions, WaChatEvent, WaChatEventAction, WaChatEventSource, WaClientEventMap, WaClientOptions, WaDeleteChatOptions, WaDeleteMessageForMeOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions } from './types';
2
+ export type { WaAppStateMessageKey, WaClientProxyOptions, WaClearChatOptions, WaChatEvent, WaChatEventAction, WaChatEventSource, WaClientEventMap, WaClientOptions, WaConnectionEvent, WaDeleteChatOptions, WaDeleteMessageForMeOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions, WaLogoutStoreClearOptions, WaWriteBehindOptions } from './types';
@@ -1,12 +1,10 @@
1
+ import type { WriteBehindPersistence } from './persistence/WriteBehindPersistence';
1
2
  import type { WaIncomingMessageEvent } from './types';
2
3
  import type { Logger } from '../infra/log/types';
3
- import type { WaContactStore } from '../store/contracts/contact.store';
4
- import type { WaMessageStore } from '../store/contracts/message.store';
5
4
  interface WaPersistIncomingMailboxOptions {
6
5
  readonly logger: Logger;
7
- readonly contactStore: WaContactStore;
8
- readonly messageStore: WaMessageStore;
6
+ readonly writeBehind: WriteBehindPersistence;
9
7
  readonly event: WaIncomingMessageEvent;
10
8
  }
11
- export declare function persistIncomingMailboxEntities(options: WaPersistIncomingMailboxOptions): Promise<void>;
9
+ export declare function persistIncomingMailboxEntities(options: WaPersistIncomingMailboxOptions): void;
12
10
  export {};
@@ -4,7 +4,7 @@ import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
4
4
  import type { WaSendMessageContent } from '../message/types';
5
5
  import type { Proto } from '..';
6
6
  import type { BinaryNode } from '../transport/types';
7
- interface WaMediaMessageOptions {
7
+ export interface WaMediaMessageOptions {
8
8
  readonly logger: Logger;
9
9
  readonly mediaTransfer: WaMediaTransferClient;
10
10
  readonly iqTimeoutMs?: number;
@@ -14,4 +14,3 @@ interface WaMediaMessageOptions {
14
14
  }
15
15
  export declare function buildMediaMessageContent(options: WaMediaMessageOptions, content: WaSendMessageContent): Promise<Proto.IMessage>;
16
16
  export declare function getMediaConn(options: WaMediaMessageOptions, forceRefresh?: boolean): Promise<WaMediaConn>;
17
- export {};
@@ -0,0 +1,34 @@
1
+ import type { WaWriteBehindOptions } from '../types';
2
+ import type { Logger } from '../../infra/log/types';
3
+ import type { BackgroundQueueFlushResult } from '../../infra/perf/BackgroundQueue';
4
+ import type { WaContactStore, WaStoredContactRecord } from '../../store/contracts/contact.store';
5
+ import type { WaMessageStore, WaStoredMessageRecord } from '../../store/contracts/message.store';
6
+ import type { WaStoredThreadRecord, WaThreadStore } from '../../store/contracts/thread.store';
7
+ interface WriteBehindStores {
8
+ readonly messageStore: WaMessageStore;
9
+ readonly threadStore: WaThreadStore;
10
+ readonly contactStore: WaContactStore;
11
+ }
12
+ export interface WriteBehindDrainResult {
13
+ readonly messages: BackgroundQueueFlushResult;
14
+ readonly threads: BackgroundQueueFlushResult;
15
+ readonly contacts: BackgroundQueueFlushResult;
16
+ readonly flushed: number;
17
+ readonly remaining: number;
18
+ }
19
+ export declare class WriteBehindPersistence {
20
+ private readonly logger;
21
+ private readonly queues;
22
+ private readonly flushTimeoutMs;
23
+ constructor(stores: WriteBehindStores, logger: Logger, options?: WaWriteBehindOptions);
24
+ persistMessage(record: WaStoredMessageRecord): void;
25
+ persistMessageAsync(record: WaStoredMessageRecord): Promise<void>;
26
+ persistThread(record: WaStoredThreadRecord): void;
27
+ persistThreadAsync(record: WaStoredThreadRecord): Promise<void>;
28
+ persistContact(record: WaStoredContactRecord): void;
29
+ persistContactAsync(record: WaStoredContactRecord): Promise<void>;
30
+ flush(timeoutMs?: number): Promise<WriteBehindDrainResult>;
31
+ destroy(timeoutMs?: number): Promise<WriteBehindDrainResult>;
32
+ private toDrainResult;
33
+ }
34
+ export {};
@@ -0,0 +1,10 @@
1
+ export declare class CsTokenGenerator {
2
+ private cachedKey;
3
+ private cachedSalt;
4
+ private readonly cache;
5
+ constructor();
6
+ generate(nctSalt: Uint8Array, accountLid: string): Promise<Uint8Array>;
7
+ invalidate(): void;
8
+ private isSameSalt;
9
+ private resolveKey;
10
+ }