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
@@ -0,0 +1,75 @@
1
+ export declare const WA_PRIVACY_CATEGORIES: Readonly<{
2
+ readonly READ_RECEIPTS: "readreceipts";
3
+ readonly LAST_SEEN: "last";
4
+ readonly ONLINE: "online";
5
+ readonly PROFILE_PICTURE: "profile";
6
+ readonly ABOUT: "status";
7
+ readonly GROUP_ADD: "groupadd";
8
+ readonly CALL_ADD: "calladd";
9
+ readonly MESSAGES: "messages";
10
+ readonly DEFENSE_MODE: "defense";
11
+ }>;
12
+ export type WaPrivacyCategory = (typeof WA_PRIVACY_CATEGORIES)[keyof typeof WA_PRIVACY_CATEGORIES];
13
+ export declare const WA_PRIVACY_VALUES: Readonly<{
14
+ readonly ALL: "all";
15
+ readonly CONTACTS: "contacts";
16
+ readonly CONTACT_BLACKLIST: "contact_blacklist";
17
+ readonly NONE: "none";
18
+ readonly MATCH_LAST_SEEN: "match_last_seen";
19
+ readonly KNOWN: "known";
20
+ readonly OFF: "off";
21
+ readonly ON_STANDARD: "on_standard";
22
+ readonly ERROR: "error";
23
+ }>;
24
+ export type WaPrivacyValue = (typeof WA_PRIVACY_VALUES)[keyof typeof WA_PRIVACY_VALUES];
25
+ export declare const WA_PRIVACY_CATEGORY_TO_SETTING: Readonly<{
26
+ readonly readreceipts: "readReceipts";
27
+ readonly last: "lastSeen";
28
+ readonly online: "online";
29
+ readonly profile: "profilePicture";
30
+ readonly status: "about";
31
+ readonly groupadd: "groupAdd";
32
+ readonly calladd: "callAdd";
33
+ readonly messages: "messages";
34
+ readonly defense: "defenseMode";
35
+ }>;
36
+ export declare const WA_PRIVACY_SETTING_TO_CATEGORY: Readonly<{
37
+ readonly readReceipts: "readreceipts";
38
+ readonly lastSeen: "last";
39
+ readonly online: "online";
40
+ readonly profilePicture: "profile";
41
+ readonly about: "status";
42
+ readonly groupAdd: "groupadd";
43
+ readonly callAdd: "calladd";
44
+ readonly messages: "messages";
45
+ readonly defenseMode: "defense";
46
+ }>;
47
+ export type WaPrivacySettingName = keyof typeof WA_PRIVACY_SETTING_TO_CATEGORY;
48
+ export type WaPrivacyVisibility = 'all' | 'contacts' | 'contact_blacklist' | 'none';
49
+ export interface WaPrivacySettingValueMap {
50
+ readonly readReceipts: 'all' | 'none';
51
+ readonly lastSeen: WaPrivacyVisibility;
52
+ readonly online: 'all' | 'none' | 'match_last_seen';
53
+ readonly profilePicture: WaPrivacyVisibility;
54
+ readonly about: WaPrivacyVisibility;
55
+ readonly groupAdd: 'all' | 'contacts' | 'contact_blacklist';
56
+ readonly callAdd: 'all' | 'known' | 'contacts';
57
+ readonly messages: 'all' | 'contacts';
58
+ readonly defenseMode: 'off' | 'on_standard';
59
+ }
60
+ export declare const WA_PRIVACY_DISALLOWED_LIST_CATEGORIES: Readonly<{
61
+ readonly ABOUT: "status";
62
+ readonly GROUP_ADD: "groupadd";
63
+ readonly LAST_SEEN: "last";
64
+ readonly PROFILE_PICTURE: "profile";
65
+ }>;
66
+ type DisallowedCategoryToSetting = {
67
+ readonly [K in keyof typeof WA_PRIVACY_DISALLOWED_LIST_CATEGORIES]: (typeof WA_PRIVACY_CATEGORY_TO_SETTING)[(typeof WA_PRIVACY_DISALLOWED_LIST_CATEGORIES)[K]];
68
+ };
69
+ export type WaPrivacyDisallowedListSettingName = DisallowedCategoryToSetting[keyof DisallowedCategoryToSetting];
70
+ export declare const WA_PRIVACY_TAGS: Readonly<{
71
+ readonly CATEGORY: "category";
72
+ readonly LIST: "list";
73
+ readonly USER: "user";
74
+ }>;
75
+ export {};
@@ -39,6 +39,7 @@ export declare const WA_LOGOUT_REASONS: Readonly<{
39
39
  readonly WEB_FAIL_ENC_SALT: "web_fail_enc_salt";
40
40
  readonly CACHE_STORAGE_OPEN_FAILED: "cache_storage_open_failed";
41
41
  }>;
42
+ export type WaLogoutReason = (typeof WA_LOGOUT_REASONS)[keyof typeof WA_LOGOUT_REASONS];
42
43
  export declare const WA_STREAM_SIGNALING: Readonly<{
43
44
  readonly STREAM_ERROR_TAG: "stream:error";
44
45
  readonly XML_STREAM_END_TAG: "xmlstreamend";
@@ -49,6 +50,18 @@ export declare const WA_STREAM_SIGNALING: Readonly<{
49
50
  readonly FORCE_LOGIN_CODE: 515;
50
51
  readonly FORCE_LOGOUT_CODE: 516;
51
52
  }>;
53
+ export declare const WA_FAILURE_REASONS: Readonly<{
54
+ readonly GENERIC_FAILURE: 400;
55
+ readonly NOT_AUTHORIZED: 401;
56
+ readonly TEMP_BANNED: 402;
57
+ readonly LOCKED: 403;
58
+ readonly CLIENT_TOO_OLD: 405;
59
+ readonly BANNED: 406;
60
+ readonly BAD_USER_AGENT: 409;
61
+ readonly INTERNAL_SERVER_ERROR: 500;
62
+ readonly EXPERIMENTAL: 501;
63
+ readonly SERVICE_UNAVAILABLE: 503;
64
+ }>;
52
65
  export declare const WA_DISCONNECT_REASONS: Readonly<{
53
66
  readonly CLIENT_DISCONNECTED: "client_disconnected";
54
67
  readonly COMMS_STOPPED: "comms_stopped";
@@ -57,4 +70,22 @@ export declare const WA_DISCONNECT_REASONS: Readonly<{
57
70
  readonly STREAM_ERROR_ACK: "stream_error_ack";
58
71
  readonly STREAM_ERROR_XML_NOT_WELL_FORMED: "stream_error_xml_not_well_formed";
59
72
  readonly STREAM_ERROR_OTHER: "stream_error_other";
73
+ readonly STREAM_ERROR_FORCE_LOGIN: "stream_error_force_login";
74
+ readonly STREAM_ERROR_FORCE_LOGOUT: "stream_error_force_logout";
75
+ readonly FAILURE_LOCKED: "failure_locked";
76
+ readonly FAILURE_NOT_AUTHORIZED: "failure_not_authorized";
77
+ readonly FAILURE_BANNED: "failure_banned";
78
+ readonly FAILURE_CLIENT_TOO_OLD: "failure_client_too_old";
79
+ readonly FAILURE_BAD_USER_AGENT: "failure_bad_user_agent";
80
+ readonly FAILURE_SERVICE_UNAVAILABLE: "failure_service_unavailable";
81
+ readonly PRIMARY_IDENTITY_KEY_CHANGE: "primary_identity_key_change";
82
+ }>;
83
+ export declare const WA_CONNECTION_REASONS: Readonly<{
84
+ readonly CONNECTED: "connected";
85
+ readonly RECONNECTED: "reconnected";
60
86
  }>;
87
+ export type WaFailureReasonCode = (typeof WA_FAILURE_REASONS)[keyof typeof WA_FAILURE_REASONS];
88
+ export type WaStreamErrorCode = typeof WA_STREAM_SIGNALING.FORCE_LOGIN_CODE | typeof WA_STREAM_SIGNALING.FORCE_LOGOUT_CODE;
89
+ export type WaConnectionCode = WaFailureReasonCode | WaStreamErrorCode;
90
+ export type WaDisconnectReason = (typeof WA_DISCONNECT_REASONS)[keyof typeof WA_DISCONNECT_REASONS];
91
+ export type WaConnectionOpenReason = (typeof WA_CONNECTION_REASONS)[keyof typeof WA_CONNECTION_REASONS];
@@ -0,0 +1,3 @@
1
+ import type { WaRetryReplayPayload } from './types';
2
+ export declare function encodeRetryReplayPayload(payload: WaRetryReplayPayload): Uint8Array;
3
+ export declare function decodeRetryReplayPayload(raw: Uint8Array): WaRetryReplayPayload;
@@ -1,8 +1,8 @@
1
1
  export { MAX_RETRY_ATTEMPTS, RETRY_KEYS_MIN_COUNT, RETRY_OUTBOUND_TTL_MS, RETRY_REASON, RETRY_RECEIPT_VERSION } from './constants';
2
2
  export type { WaRetryReasonCode } from './constants';
3
3
  export { mapRetryReasonFromError } from './reason';
4
- export { parseRetryReceiptRequest } from './parse';
5
- export type { WaParsedRetryRequest, WaRetryDecryptFailureContext, WaRetryEncryptedReplayPayload, WaRetryKey, WaRetryKeyBundle, WaRetryOpaqueNodeReplayPayload, WaRetryOutboundMessageRecord, WaRetryOutboundMode, WaRetryOutboundState, WaRetryPlaintextReplayPayload, WaRetryReceiptType, WaRetryReplayPayload, WaRetrySignedKey } from './types';
6
- export { decodeRetryReplayPayload, encodeRetryReplayPayload, pickRetryStateMax } from './outbound';
4
+ export { parseRetryReceiptRequest, pickRetryStateMax } from './parse';
5
+ export type { WaParsedRetryRequest, WaRetryDecryptFailureContext, WaRetryEncryptedReplayPayload, WaRetryKey, WaRetryKeyBundle, WaRetryOpaqueNodeReplayPayload, WaRetryOutboundMessageRecord, WaRetryOutboundMode, WaRetryOutboundState, WaRetryPlaintextReplayPayload, WaRetryReceiptType, WaRetryReplayPayload, WaRetryStoredReplayPayload, WaRetrySignedKey } from './types';
6
+ export { decodeRetryReplayPayload, encodeRetryReplayPayload } from './codec';
7
7
  export { WaRetryReplayService, type WaRetryReplayServiceOptions, type WaRetryResendResult } from './replay';
8
8
  export { createOutboundRetryTracker, type OutboundRetryTrackHint, type OutboundRetryTracker } from './tracker';
@@ -1,3 +1,6 @@
1
- import type { WaParsedRetryRequest } from './types';
1
+ import type { WaParsedRetryRequest, WaRetryOutboundState } from './types';
2
2
  import type { BinaryNode } from '../transport/types';
3
- export declare function parseRetryReceiptRequest(node: BinaryNode): WaParsedRetryRequest | null;
3
+ export declare function parseRetryReceiptRequest(node: BinaryNode, options?: {
4
+ readonly expectedToJids?: readonly string[];
5
+ }): WaParsedRetryRequest | null;
6
+ export declare function pickRetryStateMax(left: WaRetryOutboundState, right: WaRetryOutboundState): WaRetryOutboundState;
@@ -1,2 +1,2 @@
1
1
  import { type WaRetryReasonCode } from './constants';
2
- export declare function mapRetryReasonFromError(error: unknown): WaRetryReasonCode;
2
+ export declare function mapRetryReasonFromError(error: unknown): WaRetryReasonCode | undefined;
@@ -9,6 +9,7 @@ export type OutboundRetryTrackHint = {
9
9
  readonly replayPayload: WaRetryReplayPayload;
10
10
  readonly participantJid?: string;
11
11
  readonly recipientJid?: string;
12
+ readonly eligibleRequesterDeviceJids?: readonly string[];
12
13
  };
13
14
  export type OutboundRetryTracker = {
14
15
  track(hint: OutboundRetryTrackHint, publish: () => Promise<WaMessagePublishResult>): Promise<WaMessagePublishResult>;
@@ -22,6 +22,8 @@ export interface WaParsedRetryRequest {
22
22
  readonly from: string;
23
23
  readonly participant?: string;
24
24
  readonly recipient?: string;
25
+ readonly offline: boolean;
26
+ readonly isLid: boolean;
25
27
  readonly originalMsgId: string;
26
28
  readonly retryCount: number;
27
29
  readonly retryReason?: number;
@@ -56,14 +58,17 @@ export interface WaRetryOpaqueNodeReplayPayload {
56
58
  readonly node: Uint8Array;
57
59
  }
58
60
  export type WaRetryReplayPayload = WaRetryPlaintextReplayPayload | WaRetryEncryptedReplayPayload | WaRetryOpaqueNodeReplayPayload;
61
+ export type WaRetryStoredReplayPayload = Uint8Array | WaRetryReplayPayload;
59
62
  export interface WaRetryOutboundMessageRecord {
60
63
  readonly messageId: string;
61
64
  readonly toJid: string;
62
65
  readonly participantJid?: string;
63
66
  readonly recipientJid?: string;
67
+ readonly eligibleRequesterDeviceJids?: readonly string[];
68
+ readonly deliveredRequesterDeviceJids?: readonly string[];
64
69
  readonly messageType: string;
65
70
  readonly replayMode: WaRetryOutboundMode;
66
- readonly replayPayload: Uint8Array;
71
+ readonly replayPayload: WaRetryStoredReplayPayload;
67
72
  readonly state: WaRetryOutboundState;
68
73
  readonly createdAtMs: number;
69
74
  readonly updatedAtMs: number;
@@ -22,11 +22,13 @@ export declare class SignalDeviceSyncApi {
22
22
  private readonly defaultTimeoutMs;
23
23
  private readonly hostDomain;
24
24
  private readonly generateSid;
25
+ private readonly syncDedup;
25
26
  constructor(options: SignalDeviceSyncApiOptions);
26
27
  syncDeviceList(userJids: readonly string[], timeoutMs?: number): Promise<readonly {
27
28
  readonly jid: string;
28
29
  readonly deviceJids: readonly string[];
29
30
  }[]>;
31
+ private syncDeviceListInternal;
30
32
  queryLidsByPhoneJids(phoneJids: readonly string[], timeoutMs?: number): Promise<readonly SignalLidSyncResult[]>;
31
33
  private collectUsersToQuery;
32
34
  private makeDeviceSyncRequest;
@@ -38,6 +40,5 @@ export declare class SignalDeviceSyncApi {
38
40
  private parseUserDeviceJids;
39
41
  private normalizeUsers;
40
42
  private normalizeUserJid;
41
- private toDeviceJid;
42
43
  }
43
44
  export {};
@@ -1,10 +1,13 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
+ import type { RegistrationInfo, SignedPreKeyRecord } from '../types';
3
+ import type { WaPreKeyStore } from '../../store/contracts/pre-key.store';
2
4
  import type { WaSignalStore } from '../../store/contracts/signal.store';
3
5
  import type { BinaryNode } from '../../transport/types';
4
6
  interface SignalDigestSyncApiOptions {
5
7
  readonly logger: Logger;
6
8
  readonly query: (node: BinaryNode, timeoutMs?: number) => Promise<BinaryNode>;
7
9
  readonly signalStore: WaSignalStore;
10
+ readonly preKeyStore: WaPreKeyStore;
8
11
  readonly defaultTimeoutMs?: number;
9
12
  readonly hostDomain?: string;
10
13
  }
@@ -14,14 +17,20 @@ export interface SignalDigestValidationResult {
14
17
  readonly reason: 'ok' | 'missing_remote_digest' | 'unsupported_key_bundle_type' | 'missing_local_state' | 'registration_mismatch' | 'identity_mismatch' | 'signed_prekey_mismatch' | 'missing_local_prekey' | 'hash_mismatch';
15
18
  readonly preKeyCount: number;
16
19
  }
20
+ export interface SignalDigestPrefetchedLocalKeyBundle {
21
+ readonly registrationInfo: RegistrationInfo;
22
+ readonly signedPreKey: SignedPreKeyRecord;
23
+ }
17
24
  export declare class SignalDigestSyncApi {
18
25
  private readonly logger;
19
26
  private readonly query;
20
27
  private readonly signalStore;
28
+ private readonly preKeyStore;
21
29
  private readonly defaultTimeoutMs;
22
30
  private readonly hostDomain;
23
31
  constructor(options: SignalDigestSyncApiOptions);
24
32
  validateLocalKeyBundle(timeoutMs?: number): Promise<SignalDigestValidationResult>;
33
+ validateLocalKeyBundle(prefetched?: SignalDigestPrefetchedLocalKeyBundle, timeoutMs?: number): Promise<SignalDigestValidationResult>;
25
34
  private parseDigestPayload;
26
35
  }
27
36
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
- import type { WaSignalStore } from '../../store/contracts/signal.store';
2
+ import type { WaIdentityStore } from '../../store/contracts/identity.store';
3
3
  import type { BinaryNode } from '../../transport/types';
4
4
  export interface SignalIdentitySyncEntry {
5
5
  readonly jid: string;
@@ -9,18 +9,20 @@ export interface SignalIdentitySyncEntry {
9
9
  interface SignalIdentitySyncApiOptions {
10
10
  readonly logger: Logger;
11
11
  readonly query: (node: BinaryNode, timeoutMs?: number) => Promise<BinaryNode>;
12
- readonly signalStore?: WaSignalStore;
12
+ readonly identityStore?: WaIdentityStore;
13
13
  readonly defaultTimeoutMs?: number;
14
14
  readonly hostDomain?: string;
15
15
  }
16
16
  export declare class SignalIdentitySyncApi {
17
17
  private readonly logger;
18
18
  private readonly query;
19
- private readonly signalStore?;
19
+ private readonly identityStore?;
20
20
  private readonly defaultTimeoutMs;
21
21
  private readonly hostDomain;
22
+ private readonly syncDedup;
22
23
  constructor(options: SignalIdentitySyncApiOptions);
23
24
  syncIdentityKeys(targetJids: readonly string[], timeoutMs?: number): Promise<readonly SignalIdentitySyncEntry[]>;
25
+ private syncIdentityKeysInternal;
24
26
  private parseIdentitySyncResponse;
25
27
  }
26
28
  export {};
@@ -7,16 +7,15 @@ interface SignalRotateKeyApiOptions {
7
7
  readonly signalStore: WaSignalStore;
8
8
  readonly defaultTimeoutMs?: number;
9
9
  }
10
- export interface SignalRotateKeyResult {
11
- readonly shouldDigestKey: boolean;
12
- readonly errorCode?: number;
13
- }
14
10
  export declare class SignalRotateKeyApi {
15
11
  private readonly logger;
16
12
  private readonly query;
17
13
  private readonly signalStore;
18
14
  private readonly defaultTimeoutMs;
19
15
  constructor(options: SignalRotateKeyApiOptions);
20
- rotateSignedPreKey(timeoutMs?: number): Promise<SignalRotateKeyResult>;
16
+ rotateSignedPreKey(timeoutMs?: number): Promise<{
17
+ shouldDigestKey: boolean;
18
+ errorCode?: number;
19
+ }>;
21
20
  }
22
21
  export {};
@@ -7,10 +7,6 @@ interface SignalSessionSyncApiOptions {
7
7
  readonly defaultTimeoutMs?: number;
8
8
  readonly hostDomain?: string;
9
9
  }
10
- interface SignalSessionSyncTarget {
11
- readonly jid: string;
12
- readonly reasonIdentity?: boolean;
13
- }
14
10
  export type SignalSessionKeyBundleResult = {
15
11
  readonly jid: string;
16
12
  readonly bundle: SignalPreKeyBundle;
@@ -26,12 +22,18 @@ export declare class SignalSessionSyncApi {
26
22
  private readonly defaultTimeoutMs;
27
23
  private readonly hostDomain;
28
24
  constructor(options: SignalSessionSyncApiOptions);
29
- fetchKeyBundle(target: SignalSessionSyncTarget, timeoutMs?: number): Promise<{
25
+ fetchKeyBundle(target: {
26
+ readonly jid: string;
27
+ readonly reasonIdentity?: boolean;
28
+ }, timeoutMs?: number): Promise<{
30
29
  readonly jid: string;
31
30
  readonly bundle: SignalPreKeyBundle;
32
31
  readonly deviceIdentity?: Uint8Array;
33
32
  }>;
34
- fetchKeyBundles(targets: readonly SignalSessionSyncTarget[], timeoutMs?: number): Promise<readonly SignalSessionKeyBundleResult[]>;
33
+ fetchKeyBundles(targets: readonly {
34
+ readonly jid: string;
35
+ readonly reasonIdentity?: boolean;
36
+ }[], timeoutMs?: number): Promise<readonly SignalSessionKeyBundleResult[]>;
35
37
  private parseFetchKeyBundleResponse;
36
38
  private parseUserKeyBundle;
37
39
  }
@@ -0,0 +1 @@
1
+ export declare function registerParsedResultByRawAndCanonicalKey<T>(parsedByRawKey: Map<string, T>, parsedByCanonicalKey: Map<string, T>, rawKey: string, canonicalKey: string, result: T, isPreferred: (value: T) => boolean): void;
@@ -1,9 +1,6 @@
1
1
  export declare const SIGNAL_VERSION = 3;
2
2
  export declare const SIGNAL_GROUP_VERSION = 3;
3
- export declare const SERIALIZED_PUB_KEY_PREFIX = 5;
4
- export declare const KEY_TYPE_CURVE25519 = 5;
5
3
  export declare const SIGNAL_MAC_SIZE = 8;
6
- export declare const SIGNATURE_SIZE = 64;
7
4
  export declare const MAX_PREV_SESSIONS = 40;
8
5
  export declare const MAX_UNUSED_KEYS = 2000;
9
6
  export declare const FUTURE_MESSAGES_MAX = 2000;
@@ -1,7 +1,5 @@
1
1
  import type { SignalKeyPair } from '../../crypto/curves/types';
2
2
  export { ADV_PREFIX_ACCOUNT_SIGNATURE, ADV_PREFIX_DEVICE_SIGNATURE, ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE, ADV_PREFIX_HOSTED_DEVICE_SIGNATURE } from '../crypto/constants';
3
- export declare function verifySignalSignature(publicKey: Uint8Array, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
4
- export declare function signSignalMessage(privateKey: Uint8Array, message: Uint8Array): Promise<Uint8Array>;
5
3
  export declare function verifyDeviceIdentityAccountSignature(details: Uint8Array, accountSignature: Uint8Array, identityPublicKey: Uint8Array, accountSignatureKey: Uint8Array, isHosted?: boolean): Promise<boolean>;
6
4
  export declare function generateDeviceSignature(details: Uint8Array, identityKeyPair: SignalKeyPair, accountSignatureKey: Uint8Array, isHosted?: boolean): Promise<Uint8Array>;
7
5
  export declare function computeAdvIdentityHmac(secretKey: Uint8Array, details: Uint8Array): Promise<Uint8Array>;
@@ -1,4 +1,3 @@
1
- export declare const SIGNAL_PREFIX_SIGNATURE_RANDOM: Uint8Array<ArrayBuffer>;
2
1
  export declare const ADV_PREFIX_ACCOUNT_SIGNATURE: Uint8Array<ArrayBuffer>;
3
2
  export declare const ADV_PREFIX_DEVICE_SIGNATURE: Uint8Array<ArrayBuffer>;
4
3
  export declare const ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE: Uint8Array<ArrayBuffer>;
@@ -1,4 +1,5 @@
1
- import type { PreKeyRecord, RegistrationInfo, SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress, SignalSessionRecord, SignedPreKeyRecord } from '../types';
1
+ import { type Proto } from '..';
2
+ import type { PreKeyRecord, RegistrationInfo, SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress, SignalMessageKey, SignalRecvChain, SignalSessionRecord, SignalSessionSnapshot, SignedPreKeyRecord } from './types';
2
3
  export interface SignalAddressParts {
3
4
  readonly user: string;
4
5
  readonly server: string;
@@ -51,7 +52,7 @@ export interface SenderKeyDistributionRow extends Record<string, unknown> {
51
52
  readonly key_id: unknown;
52
53
  readonly timestamp_ms: unknown;
53
54
  }
54
- export interface SqliteCountRow extends Record<string, unknown> {
55
+ export interface StoreCountRow extends Record<string, unknown> {
55
56
  readonly count: unknown;
56
57
  }
57
58
  export declare function toSignalAddressParts(address: SignalAddress): SignalAddressParts;
@@ -63,10 +64,15 @@ export declare function decodeSignalAddressFromRow(row: Pick<SenderKeyRow | Send
63
64
  export declare function decodeSignalRegistrationRow(row: SignalRegistrationRow): RegistrationInfo;
64
65
  export declare function decodeSignalPreKeyRow(row: SignalPreKeyRow): PreKeyRecord;
65
66
  export declare function decodeSignalSignedPreKeyRow(row: SignalSignedPreKeyRow): SignedPreKeyRecord;
67
+ export declare function encodeSignalSessionSnapshot(session: SignalSessionSnapshot): Proto.ISessionStructure;
68
+ export declare function encodeSignalRecvChain(chain: SignalRecvChain): Proto.SessionStructure.IChain;
69
+ export declare function decodeSignalMessageKey(messageKey: Proto.SessionStructure.Chain.IMessageKey, field: string): SignalMessageKey;
70
+ export declare function decodeSignalRecvChain(chain: Proto.SessionStructure.IChain, field: string): SignalRecvChain;
71
+ export declare function decodeSignalSessionSnapshot(session: Proto.ISessionStructure, field: string): SignalSessionSnapshot;
66
72
  export declare function encodeSignalSessionRecord(record: SignalSessionRecord): Uint8Array;
67
73
  export declare function decodeSignalSessionRecord(raw: unknown): SignalSessionRecord;
68
74
  export declare function encodeSenderKeyRecord(record: SenderKeyRecord): Uint8Array;
69
75
  export declare function decodeSenderKeyRecord(raw: unknown, groupId: string, sender: SignalAddress): SenderKeyRecord;
70
76
  export declare function decodeSenderKeyDistributionRow(row: SenderKeyDistributionRow): SenderKeyDistributionRecord;
71
- export declare function decodeSqliteCount(row: SqliteCountRow | null, field: string): number;
77
+ export declare function decodeStoreCount(row: StoreCountRow | null, field: string): number;
72
78
  export declare function decodeSignalRemoteIdentity(raw: unknown): Uint8Array;
@@ -7,5 +7,5 @@ export interface SenderKeyMessageKeySelection {
7
7
  readonly messageKey: SenderMessageKey;
8
8
  readonly updatedRecord: SenderKeyRecord;
9
9
  }
10
- export declare function selectMessageKey(senderKey: SenderKeyRecord, targetIteration: number): Promise<SenderKeyMessageKeySelection>;
10
+ export declare function selectMessageKey(senderKey: SenderKeyRecord, targetIteration: number, futureMessagesMax?: number): Promise<SenderKeyMessageKeySelection>;
11
11
  export declare function deriveSenderKeyMsgKey(iteration: number, chainKey: Uint8Array): Promise<SenderKeyMessageKeyDerivation>;
@@ -1,4 +1,4 @@
1
- import type { Proto } from '../..';
1
+ import { type Proto } from '../..';
2
2
  import type { SenderKeyRecord, SignalAddress } from '../types';
3
3
  import type { WaSenderKeyStore } from '../../store/contracts/sender-key.store';
4
4
  interface GroupSenderKeyCiphertext {
@@ -10,13 +10,23 @@ interface GroupSenderKeyCiphertext {
10
10
  }
11
11
  export declare class SenderKeyManager {
12
12
  private readonly store;
13
- constructor(store: WaSenderKeyStore);
14
- createSenderKeyDistributionMessage(groupId: string, sender: SignalAddress): Promise<Proto.Message.ISenderKeyDistributionMessage>;
15
- filterParticipantsNeedingDistribution(groupId: string, sender: SignalAddress, participants: readonly SignalAddress[]): Promise<readonly SignalAddress[]>;
16
- markSenderKeyDistributed(groupId: string, sender: SignalAddress, participants: readonly SignalAddress[]): Promise<void>;
13
+ private readonly senderLock;
14
+ private readonly getFutureMessagesMax;
15
+ private readonly skipSignatureVerification;
16
+ constructor(store: WaSenderKeyStore, options?: {
17
+ readonly getFutureMessagesMax?: () => number;
18
+ readonly skipSignatureVerification?: boolean;
19
+ });
20
+ prepareGroupEncryption(groupId: string, sender: SignalAddress, plaintext: Uint8Array): Promise<{
21
+ readonly distributionMessage: Proto.Message.ISenderKeyDistributionMessage;
22
+ readonly ciphertext: GroupSenderKeyCiphertext;
23
+ readonly keyId: number;
24
+ }>;
25
+ filterParticipantsNeedingDistribution(groupId: string, senderKeyId: number, participants: readonly SignalAddress[]): Promise<readonly SignalAddress[]>;
26
+ markSenderKeyDistributed(groupId: string, senderKeyId: number, participants: readonly SignalAddress[]): Promise<void>;
17
27
  processSenderKeyDistributionPayload(groupId: string, sender: SignalAddress, payload: Uint8Array): Promise<SenderKeyRecord>;
18
- encryptGroupMessage(groupId: string, sender: SignalAddress, plaintext: Uint8Array): Promise<GroupSenderKeyCiphertext>;
19
28
  decryptGroupMessage(payload: GroupSenderKeyCiphertext): Promise<Uint8Array>;
20
- private ensureSenderKey;
29
+ private ensureSenderKeyInternal;
30
+ private runWithSenderLock;
21
31
  }
22
32
  export {};
@@ -1,4 +1,6 @@
1
1
  export { PreKeyRecord, RegistrationInfo, SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress, SignalPreKeyBundle, SignedPreKeyRecord } from './types';
2
+ export type { SignalSessionRecord } from './types';
3
+ export { decodeSignalPreKeyRow, decodeSignalRegistrationRow, decodeSignalRemoteIdentity, decodeSignalSessionRecord, decodeSignalSignedPreKeyRow, decodeSenderKeyDistributionRow, decodeSenderKeyRecord, decodeStoreCount, encodeSenderKeyRecord, encodeSignalSessionRecord, toSignalAddressParts, type SenderKeyDistributionRow, type SenderKeyRow, type SignalAddressParts, type SignalIdentityRow, type SignalMetaRow, type SignalPreKeyRow, type SignalRegistrationRow, type SignalSessionRow, type SignalSignedPreKeyRow, type StoreCountRow } from './encoding';
2
4
  export { generatePreKeyPair, generateRegistrationId, generateRegistrationInfo, generateSignedPreKey } from './registration/keygen';
3
5
  export { buildPreKeyUploadIq, parsePreKeyUploadFailure } from './api/prekeys';
4
6
  export { SignalDigestSyncApi } from './api/SignalDigestSyncApi';
@@ -1,9 +1,10 @@
1
1
  import type { PreKeyRecord, RegistrationInfo, SignedPreKeyRecord } from '../types';
2
+ import type { WaPreKeyStore } from '../../store/contracts/pre-key.store';
2
3
  import type { WaSignalStore } from '../../store/contracts/signal.store';
3
4
  interface RegistrationBundle {
4
5
  readonly registrationInfo: RegistrationInfo;
5
6
  readonly signedPreKey: SignedPreKeyRecord;
6
7
  readonly firstPreKey: PreKeyRecord;
7
8
  }
8
- export declare function createAndStoreInitialKeys(store: WaSignalStore): Promise<RegistrationBundle>;
9
+ export declare function createAndStoreInitialKeys(store: WaSignalStore, preKeyStore: WaPreKeyStore): Promise<RegistrationBundle>;
9
10
  export {};
@@ -1,13 +1,24 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
2
  import type { SignalAddress, SignalPreKeyBundle, SignalSessionRecord } from '../types';
3
+ import type { WaIdentityStore } from '../../store/contracts/identity.store';
4
+ import type { WaPreKeyStore } from '../../store/contracts/pre-key.store';
5
+ import type { WaSessionStore } from '../../store/contracts/session.store';
3
6
  import type { WaSignalStore } from '../../store/contracts/signal.store';
7
+ interface EstablishOutgoingSessionOptions {
8
+ readonly reuseExisting?: boolean;
9
+ }
10
+ export interface SignalProtocolStores {
11
+ readonly signal: WaSignalStore;
12
+ readonly preKey: WaPreKeyStore;
13
+ readonly session: WaSessionStore;
14
+ readonly identity: WaIdentityStore;
15
+ }
4
16
  export declare class SignalProtocol {
5
- private readonly store;
17
+ private readonly stores;
6
18
  private readonly logger;
7
- constructor(store: WaSignalStore, logger?: Logger);
8
- hasSession(address: SignalAddress): Promise<boolean>;
9
- hasSessions(addresses: readonly SignalAddress[]): Promise<readonly boolean[]>;
10
- establishOutgoingSession(address: SignalAddress, remoteBundle: SignalPreKeyBundle): Promise<SignalSessionRecord>;
19
+ private readonly sessionMutationLock;
20
+ constructor(stores: SignalProtocolStores, logger?: Logger);
21
+ establishOutgoingSession(address: SignalAddress, remoteBundle: SignalPreKeyBundle, options?: EstablishOutgoingSessionOptions): Promise<SignalSessionRecord>;
11
22
  encryptMessage(address: SignalAddress, plaintext: Uint8Array, expectedIdentity?: Uint8Array): Promise<{
12
23
  readonly type: 'msg' | 'pkmsg';
13
24
  readonly ciphertext: Uint8Array;
@@ -17,6 +28,9 @@ export declare class SignalProtocol {
17
28
  readonly address: SignalAddress;
18
29
  readonly plaintext: Uint8Array;
19
30
  readonly expectedIdentity?: Uint8Array;
31
+ }[], prefetchedSessions?: readonly {
32
+ readonly address: SignalAddress;
33
+ readonly session: SignalSessionRecord;
20
34
  }[]): Promise<readonly {
21
35
  readonly type: 'msg' | 'pkmsg';
22
36
  readonly ciphertext: Uint8Array;
@@ -26,6 +40,7 @@ export declare class SignalProtocol {
26
40
  readonly type: 'msg' | 'pkmsg';
27
41
  readonly ciphertext: Uint8Array;
28
42
  }): Promise<Uint8Array>;
29
- private decryptMsgInternal;
43
+ private runWithAddressLock;
30
44
  private decryptPkMsg;
31
45
  }
46
+ export {};
@@ -1,6 +1,7 @@
1
1
  import type { ParsedPreKeySignalMessage, ParsedSignalMessage, PreKeyRecord, SignedPreKeyRecord } from '../types';
2
+ import type { WaPreKeyStore } from '../../store/contracts/pre-key.store';
2
3
  import type { WaSignalStore } from '../../store/contracts/signal.store';
3
4
  export declare function deserializeMsg(versionContentMac: Uint8Array): ParsedSignalMessage;
4
5
  export declare function deserializePkMsg(versionContent: Uint8Array): ParsedPreKeySignalMessage;
5
6
  export declare function requireSignedPreKey(store: WaSignalStore, id: number): Promise<SignedPreKeyRecord>;
6
- export declare function requirePreKey(store: WaSignalStore, id: number): Promise<PreKeyRecord>;
7
+ export declare function requirePreKey(store: WaPreKeyStore, id: number): Promise<PreKeyRecord>;
@@ -2,15 +2,22 @@ import type { Logger } from '../../infra/log/types';
2
2
  import type { SignalIdentitySyncApi } from '../api/SignalIdentitySyncApi';
3
3
  import type { SignalSessionSyncApi } from '../api/SignalSessionSyncApi';
4
4
  import type { SignalProtocol } from '../session/SignalProtocol';
5
- import type { SignalAddress } from '../types';
6
- import type { WaSignalStore } from '../../store/contracts/signal.store';
5
+ import type { SignalAddress, SignalSessionRecord } from '../types';
6
+ import type { WaIdentityStore } from '../../store/contracts/identity.store';
7
+ import type { WaSessionStore } from '../../store/contracts/session.store';
8
+ export interface SignalResolvedSessionTarget {
9
+ readonly jid: string;
10
+ readonly address: SignalAddress;
11
+ readonly session: SignalSessionRecord;
12
+ }
7
13
  export type SignalSessionResolver = {
8
14
  ensureSession(address: SignalAddress, jid: string, expectedIdentity?: Uint8Array, reasonIdentity?: boolean): Promise<void>;
9
- ensureSessionsBatch(targetJids: readonly string[], expectedIdentityByJid?: ReadonlyMap<string, Uint8Array>): Promise<void>;
15
+ ensureSessionsBatch(targetJids: readonly string[], expectedIdentityByJid?: ReadonlyMap<string, Uint8Array>): Promise<readonly SignalResolvedSessionTarget[]>;
10
16
  };
11
17
  export declare function createSignalSessionResolver(options: {
12
18
  readonly signalProtocol: SignalProtocol;
13
- readonly signalStore: WaSignalStore;
19
+ readonly sessionStore: WaSessionStore;
20
+ readonly identityStore: WaIdentityStore;
14
21
  readonly signalIdentitySync: SignalIdentitySyncApi;
15
22
  readonly signalSessionSync: SignalSessionSyncApi;
16
23
  readonly logger: Logger;
@@ -1,4 +1,5 @@
1
1
  import type { SignalKeyPair } from '../crypto/curves/types';
2
+ import type { Proto } from '..';
2
3
  export interface RegistrationInfo {
3
4
  readonly registrationId: number;
4
5
  readonly identityKeyPair: SignalKeyPair;
@@ -37,8 +38,14 @@ export interface SignalRecvChain {
37
38
  readonly ratchetPubKey: Uint8Array;
38
39
  readonly nextMsgIndex: number;
39
40
  readonly chainKey: Uint8Array;
40
- readonly unusedMsgKeys: readonly SignalMessageKey[];
41
- }
41
+ readonly unusedMsgKeys: readonly Proto.SessionStructure.Chain.IMessageKey[];
42
+ }
43
+ /**
44
+ * Raw protobuf recv chain kept as-is to avoid eager decode.
45
+ * Use {@link decodeSignalRecvChain} only for the chain that
46
+ * actually needs to be read/modified.
47
+ */
48
+ export type RawSignalRecvChain = Proto.SessionStructure.IChain;
42
49
  export interface SignalSendChain {
43
50
  readonly ratchetKey: SignalSerializedKeyPair;
44
51
  readonly nextMsgIndex: number;
@@ -54,14 +61,19 @@ export interface SignalSessionSnapshot {
54
61
  readonly remote: SignalPeer;
55
62
  readonly rootKey: Uint8Array;
56
63
  readonly sendChain: SignalSendChain;
57
- readonly recvChains: readonly SignalRecvChain[];
64
+ readonly recvChains: readonly RawSignalRecvChain[];
58
65
  readonly initialExchangeInfo: SignalInitialExchangeInfo | null;
59
66
  readonly prevSendChainHighestIndex: number;
60
67
  readonly aliceBaseKey: Uint8Array | null;
61
68
  }
62
69
  export interface SignalSessionRecord extends SignalSessionSnapshot {
63
- readonly prevSessions: readonly SignalSessionSnapshot[];
70
+ readonly prevSessions: readonly RawSignalSessionSnapshot[];
64
71
  }
72
+ /**
73
+ * Raw protobuf session snapshot kept as-is to avoid eager decode.
74
+ * Only decoded on demand in rare fallback paths (session mismatch).
75
+ */
76
+ export type RawSignalSessionSnapshot = Proto.ISessionStructure;
65
77
  export interface SignalPreKeyBundle {
66
78
  readonly regId: number;
67
79
  readonly identity: Uint8Array;
@@ -14,7 +14,7 @@ export interface WaAppStateCollectionStateUpdate {
14
14
  export interface WaAppStateStore {
15
15
  exportData(): Promise<WaAppStateStoreData>;
16
16
  upsertSyncKeys(keys: readonly WaAppStateSyncKey[]): Promise<number>;
17
- getSyncKey(keyId: Uint8Array): Promise<WaAppStateSyncKey | null>;
17
+ getSyncKeysBatch(keyIds: readonly Uint8Array[]): Promise<readonly (WaAppStateSyncKey | null)[]>;
18
18
  getSyncKeyData(keyId: Uint8Array): Promise<Uint8Array | null>;
19
19
  getSyncKeyDataBatch(keyIds: readonly Uint8Array[]): Promise<readonly (Uint8Array | null)[]>;
20
20
  getActiveSyncKey(): Promise<WaAppStateSyncKey | null>;
@@ -0,0 +1,11 @@
1
+ import type { SignalAddress } from '../../signal/types';
2
+ export interface WaIdentityStore {
3
+ getRemoteIdentity(address: SignalAddress): Promise<Uint8Array | null>;
4
+ getRemoteIdentities(addresses: readonly SignalAddress[]): Promise<readonly (Uint8Array | null)[]>;
5
+ setRemoteIdentity(address: SignalAddress, identityKey: Uint8Array): Promise<void>;
6
+ setRemoteIdentities(entries: readonly {
7
+ readonly address: SignalAddress;
8
+ readonly identityKey: Uint8Array;
9
+ }[]): Promise<void>;
10
+ clear(): Promise<void>;
11
+ }