zapo-js 0.1.1 → 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 (589) hide show
  1. package/README.md +20 -4
  2. package/dist/appstate/WaAppStateCrypto.js +19 -26
  3. package/dist/appstate/WaAppStateSyncClient.js +293 -181
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  7. package/dist/appstate/index.js +8 -6
  8. package/dist/appstate/utils.js +9 -34
  9. package/dist/auth/WaAuthClient.js +43 -61
  10. package/dist/auth/flow/WaAuthCredentialsFlow.js +22 -15
  11. package/dist/auth/index.js +1 -8
  12. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  13. package/dist/auth/pairing/WaPairingFlow.js +34 -26
  14. package/dist/auth/pairing/WaQrFlow.js +37 -24
  15. package/dist/client/WaClient.js +275 -324
  16. package/dist/client/WaClientFactory.js +500 -133
  17. package/dist/client/connection/WaConnectionManager.js +301 -0
  18. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  19. package/dist/client/connection/WaReceiptQueue.js +51 -0
  20. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  22. package/dist/client/coordinators/WaGroupCoordinator.js +30 -16
  23. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
  24. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +439 -701
  25. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  26. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  27. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  28. package/dist/client/coordinators/WaRetryCoordinator.js +242 -57
  29. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  30. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  31. package/dist/client/dirty.js +74 -48
  32. package/dist/client/events/chat.js +4 -3
  33. package/dist/client/events/devices.js +72 -0
  34. package/dist/client/events/group.js +62 -47
  35. package/dist/client/events/identity.js +22 -0
  36. package/dist/client/events/privacy-token.js +39 -0
  37. package/dist/client/history-sync.js +94 -63
  38. package/dist/client/incoming.js +60 -27
  39. package/dist/client/mailbox.js +24 -23
  40. package/dist/client/messages.js +107 -31
  41. package/dist/client/messaging/fanout.js +199 -0
  42. package/dist/client/messaging/key-protocol.js +130 -0
  43. package/dist/client/messaging/participants.js +193 -0
  44. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  45. package/dist/client/tokens/cs-token.js +50 -0
  46. package/dist/client/tokens/tc-token.js +25 -0
  47. package/dist/crypto/core/hkdf.js +3 -8
  48. package/dist/crypto/core/index.js +2 -5
  49. package/dist/crypto/core/keys.js +6 -7
  50. package/dist/crypto/core/nonce.js +2 -0
  51. package/dist/crypto/core/primitives.js +12 -23
  52. package/dist/crypto/core/random.js +26 -23
  53. package/dist/crypto/curves/Ed25519.js +7 -8
  54. package/dist/crypto/curves/X25519.js +38 -22
  55. package/dist/crypto/index.js +1 -3
  56. package/dist/crypto/math/constants.js +13 -36
  57. package/dist/crypto/math/edwards.js +171 -44
  58. package/dist/crypto/math/fe.js +706 -0
  59. package/dist/crypto/math/mod.js +10 -3
  60. package/dist/esm/appstate/WaAppStateCrypto.js +7 -14
  61. package/dist/esm/appstate/WaAppStateSyncClient.js +284 -172
  62. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  63. package/dist/esm/appstate/constants.js +3 -2
  64. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  65. package/dist/esm/appstate/index.js +2 -2
  66. package/dist/esm/appstate/utils.js +8 -30
  67. package/dist/esm/auth/WaAuthClient.js +43 -61
  68. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +22 -15
  69. package/dist/esm/auth/index.js +0 -3
  70. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  71. package/dist/esm/auth/pairing/WaPairingFlow.js +28 -20
  72. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  73. package/dist/esm/client/WaClient.js +275 -324
  74. package/dist/esm/client/WaClientFactory.js +501 -134
  75. package/dist/esm/client/connection/WaConnectionManager.js +297 -0
  76. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  77. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  78. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  79. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  80. package/dist/esm/client/coordinators/WaGroupCoordinator.js +23 -9
  81. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
  82. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +443 -705
  83. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  84. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  85. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  86. package/dist/esm/client/coordinators/WaRetryCoordinator.js +244 -59
  87. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  88. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  89. package/dist/esm/client/dirty.js +69 -43
  90. package/dist/esm/client/events/chat.js +4 -3
  91. package/dist/esm/client/events/devices.js +68 -0
  92. package/dist/esm/client/events/group.js +53 -39
  93. package/dist/esm/client/events/identity.js +19 -0
  94. package/dist/esm/client/events/privacy-token.js +36 -0
  95. package/dist/esm/client/history-sync.js +91 -60
  96. package/dist/esm/client/incoming.js +61 -28
  97. package/dist/esm/client/mailbox.js +24 -23
  98. package/dist/esm/client/messages.js +108 -32
  99. package/dist/esm/client/messaging/fanout.js +196 -0
  100. package/dist/esm/client/messaging/key-protocol.js +127 -0
  101. package/dist/esm/client/messaging/participants.js +190 -0
  102. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  103. package/dist/esm/client/tokens/cs-token.js +46 -0
  104. package/dist/esm/client/tokens/tc-token.js +18 -0
  105. package/dist/esm/crypto/core/hkdf.js +3 -8
  106. package/dist/esm/crypto/core/index.js +2 -3
  107. package/dist/esm/crypto/core/keys.js +3 -4
  108. package/dist/esm/crypto/core/nonce.js +2 -0
  109. package/dist/esm/crypto/core/primitives.js +12 -22
  110. package/dist/esm/crypto/core/random.js +25 -23
  111. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  112. package/dist/esm/crypto/curves/X25519.js +35 -19
  113. package/dist/esm/crypto/index.js +0 -1
  114. package/dist/esm/crypto/math/constants.js +12 -35
  115. package/dist/esm/crypto/math/edwards.js +174 -47
  116. package/dist/esm/crypto/math/fe.js +691 -0
  117. package/dist/esm/crypto/math/mod.js +10 -1
  118. package/dist/esm/index.js +1 -1
  119. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  120. package/dist/esm/infra/log/PinoLogger.js +15 -9
  121. package/dist/esm/infra/log/types.js +11 -1
  122. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  123. package/dist/esm/infra/perf/BoundedTaskQueue.js +16 -18
  124. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  125. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  126. package/dist/esm/infra/perf/StoreLock.js +77 -0
  127. package/dist/esm/media/WaMediaCrypto.js +96 -16
  128. package/dist/esm/media/WaMediaTransferClient.js +251 -91
  129. package/dist/esm/media/conn.js +10 -6
  130. package/dist/esm/media/constants.js +6 -2
  131. package/dist/esm/message/WaMessageClient.js +30 -32
  132. package/dist/esm/message/ack.js +6 -6
  133. package/dist/esm/message/addon-crypto.js +59 -0
  134. package/dist/esm/message/content.js +195 -9
  135. package/dist/esm/message/icdc.js +76 -0
  136. package/dist/esm/message/incoming.js +129 -122
  137. package/dist/esm/message/index.js +2 -0
  138. package/dist/esm/message/phash.js +3 -1
  139. package/dist/esm/message/reporting-token.js +425 -0
  140. package/dist/esm/message/use-case-secret.js +49 -0
  141. package/dist/esm/protocol/appstate.js +27 -0
  142. package/dist/esm/protocol/browser.js +10 -18
  143. package/dist/esm/protocol/constants.js +6 -3
  144. package/dist/esm/protocol/defaults.js +6 -0
  145. package/dist/esm/protocol/index.js +2 -11
  146. package/dist/esm/protocol/jid.js +133 -52
  147. package/dist/esm/protocol/media.js +3 -3
  148. package/dist/esm/protocol/message.js +61 -1
  149. package/dist/esm/protocol/nodes.js +4 -0
  150. package/dist/esm/protocol/notification.js +3 -1
  151. package/dist/esm/protocol/privacy-token.js +17 -0
  152. package/dist/esm/protocol/privacy.js +55 -0
  153. package/dist/esm/protocol/stream.js +26 -1
  154. package/dist/esm/protocol/usync.js +11 -0
  155. package/dist/esm/retry/codec.js +216 -0
  156. package/dist/esm/retry/constants.js +1 -1
  157. package/dist/esm/retry/index.js +3 -2
  158. package/dist/esm/retry/parse.js +88 -86
  159. package/dist/esm/retry/replay.js +54 -51
  160. package/dist/esm/retry/tracker.js +94 -0
  161. package/dist/esm/signal/api/SignalDeviceSyncApi.js +276 -92
  162. package/dist/esm/signal/api/SignalDigestSyncApi.js +17 -8
  163. package/dist/esm/signal/api/SignalIdentitySyncApi.js +67 -37
  164. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +86 -67
  165. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  166. package/dist/esm/signal/api/SignalSessionSyncApi.js +36 -34
  167. package/dist/esm/signal/api/result-map.js +10 -0
  168. package/dist/esm/signal/constants.js +0 -4
  169. package/dist/esm/signal/crypto/WaAdvSignature.js +13 -9
  170. package/dist/esm/signal/{store/sqlite.js → encoding.js} +93 -60
  171. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  172. package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
  173. package/dist/esm/signal/group/SenderKeyManager.js +144 -115
  174. package/dist/esm/signal/index.js +2 -0
  175. package/dist/esm/signal/registration/keygen.js +6 -2
  176. package/dist/esm/signal/registration/utils.js +1 -0
  177. package/dist/esm/signal/session/SignalProtocol.js +164 -53
  178. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  179. package/dist/esm/signal/session/SignalSession.js +14 -9
  180. package/dist/esm/signal/session/resolver.js +221 -0
  181. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  182. package/dist/esm/store/createStore.js +100 -188
  183. package/dist/esm/store/index.js +1 -10
  184. package/dist/esm/store/locks/appstate.lock.js +26 -0
  185. package/dist/esm/store/locks/auth.lock.js +15 -0
  186. package/dist/esm/store/locks/contact.lock.js +20 -0
  187. package/dist/esm/store/locks/device-list.lock.js +20 -0
  188. package/dist/esm/store/locks/message.lock.js +21 -0
  189. package/dist/esm/store/locks/participants.lock.js +20 -0
  190. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  191. package/dist/esm/store/locks/retry.lock.js +29 -0
  192. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  193. package/dist/esm/store/locks/signal.lock.js +63 -0
  194. package/dist/esm/store/locks/thread.lock.js +21 -0
  195. package/dist/esm/store/noop.store.js +4 -7
  196. package/dist/esm/store/providers/memory/appstate.store.js +38 -16
  197. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  198. package/dist/esm/store/providers/memory/device-list.store.js +12 -34
  199. package/dist/esm/store/providers/memory/message.store.js +11 -5
  200. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  201. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  202. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  203. package/dist/esm/store/providers/memory/sender-key.store.js +11 -8
  204. package/dist/esm/store/providers/memory/signal.store.js +47 -18
  205. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  206. package/dist/esm/transport/WaComms.js +28 -24
  207. package/dist/esm/transport/WaWebSocket.js +115 -18
  208. package/dist/esm/transport/binary/constants.js +0 -30
  209. package/dist/esm/transport/binary/decoder.js +8 -8
  210. package/dist/esm/transport/binary/encoder.js +10 -9
  211. package/dist/esm/transport/binary/index.js +0 -1
  212. package/dist/esm/transport/index.js +1 -0
  213. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  214. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -21
  215. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  216. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  217. package/dist/esm/transport/node/builders/business.js +129 -0
  218. package/dist/esm/transport/node/builders/global.js +370 -0
  219. package/dist/esm/transport/node/builders/index.js +7 -3
  220. package/dist/esm/transport/node/builders/message.js +63 -230
  221. package/dist/esm/transport/node/builders/pairing.js +2 -27
  222. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  223. package/dist/esm/transport/node/builders/privacy.js +48 -0
  224. package/dist/esm/transport/node/builders/profile.js +70 -0
  225. package/dist/esm/transport/node/builders/retry.js +10 -22
  226. package/dist/esm/transport/node/builders/usync.js +45 -0
  227. package/dist/esm/transport/node/helpers.js +125 -5
  228. package/dist/esm/transport/node/usync.js +5 -0
  229. package/dist/esm/transport/node/xml.js +35 -14
  230. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  231. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  232. package/dist/esm/transport/noise/WaNoiseCert.js +4 -7
  233. package/dist/esm/transport/noise/WaNoiseSession.js +77 -29
  234. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  235. package/dist/esm/transport/proxy.js +27 -0
  236. package/dist/esm/transport/stream/parse.js +17 -48
  237. package/dist/esm/util/bytes.js +67 -45
  238. package/dist/esm/util/coercion.js +6 -14
  239. package/dist/esm/util/index.js +5 -0
  240. package/dist/esm/util/primitives.js +40 -14
  241. package/dist/index.js +7 -1
  242. package/dist/infra/log/ConsoleLogger.js +18 -17
  243. package/dist/infra/log/PinoLogger.js +15 -9
  244. package/dist/infra/log/types.js +12 -0
  245. package/dist/infra/perf/BackgroundQueue.js +482 -0
  246. package/dist/infra/perf/BoundedTaskQueue.js +16 -18
  247. package/dist/infra/perf/PromiseDedup.js +24 -0
  248. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  249. package/dist/infra/perf/StoreLock.js +81 -0
  250. package/dist/media/WaMediaCrypto.js +95 -15
  251. package/dist/media/WaMediaTransferClient.js +284 -91
  252. package/dist/media/conn.js +10 -6
  253. package/dist/media/constants.js +6 -2
  254. package/dist/message/WaMessageClient.js +31 -33
  255. package/dist/message/ack.js +6 -6
  256. package/dist/message/addon-crypto.js +65 -0
  257. package/dist/message/content.js +198 -9
  258. package/dist/message/icdc.js +81 -0
  259. package/dist/message/incoming.js +127 -120
  260. package/dist/message/index.js +2 -0
  261. package/dist/message/phash.js +3 -1
  262. package/dist/message/reporting-token.js +429 -0
  263. package/dist/message/use-case-secret.js +55 -0
  264. package/dist/protocol/appstate.js +28 -1
  265. package/dist/protocol/browser.js +10 -18
  266. package/dist/protocol/constants.js +26 -1
  267. package/dist/protocol/defaults.js +6 -0
  268. package/dist/protocol/index.js +23 -42
  269. package/dist/protocol/jid.js +140 -52
  270. package/dist/protocol/media.js +3 -3
  271. package/dist/protocol/message.js +62 -2
  272. package/dist/protocol/nodes.js +4 -0
  273. package/dist/protocol/notification.js +3 -1
  274. package/dist/protocol/privacy-token.js +20 -0
  275. package/dist/protocol/privacy.js +58 -0
  276. package/dist/protocol/stream.js +27 -2
  277. package/dist/protocol/usync.js +14 -0
  278. package/dist/retry/codec.js +220 -0
  279. package/dist/retry/constants.js +1 -1
  280. package/dist/retry/index.js +7 -5
  281. package/dist/retry/parse.js +88 -85
  282. package/dist/retry/replay.js +52 -49
  283. package/dist/retry/tracker.js +97 -0
  284. package/dist/signal/api/SignalDeviceSyncApi.js +273 -89
  285. package/dist/signal/api/SignalDigestSyncApi.js +17 -8
  286. package/dist/signal/api/SignalIdentitySyncApi.js +66 -36
  287. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +82 -63
  288. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  289. package/dist/signal/api/SignalSessionSyncApi.js +36 -34
  290. package/dist/signal/api/result-map.js +13 -0
  291. package/dist/signal/constants.js +1 -5
  292. package/dist/signal/crypto/WaAdvSignature.js +11 -7
  293. package/dist/signal/{store/sqlite.js → encoding.js} +94 -61
  294. package/dist/signal/group/SenderKeyChain.js +27 -22
  295. package/dist/signal/group/SenderKeyCodec.js +5 -6
  296. package/dist/signal/group/SenderKeyManager.js +144 -115
  297. package/dist/signal/index.js +15 -1
  298. package/dist/signal/registration/keygen.js +6 -2
  299. package/dist/signal/registration/utils.js +1 -0
  300. package/dist/signal/session/SignalProtocol.js +164 -53
  301. package/dist/signal/session/SignalRatchet.js +24 -15
  302. package/dist/signal/session/SignalSession.js +14 -9
  303. package/dist/signal/session/resolver.js +224 -0
  304. package/dist/store/contracts/privacy-token.store.js +2 -0
  305. package/dist/store/createStore.js +100 -188
  306. package/dist/store/index.js +15 -33
  307. package/dist/store/locks/appstate.lock.js +29 -0
  308. package/dist/store/locks/auth.lock.js +18 -0
  309. package/dist/store/locks/contact.lock.js +23 -0
  310. package/dist/store/locks/device-list.lock.js +23 -0
  311. package/dist/store/locks/message.lock.js +24 -0
  312. package/dist/store/locks/participants.lock.js +23 -0
  313. package/dist/store/locks/privacy-token.lock.js +21 -0
  314. package/dist/store/locks/retry.lock.js +32 -0
  315. package/dist/store/locks/sender-key.lock.js +55 -0
  316. package/dist/store/locks/signal.lock.js +66 -0
  317. package/dist/store/locks/thread.lock.js +24 -0
  318. package/dist/store/noop.store.js +4 -7
  319. package/dist/store/providers/memory/appstate.store.js +36 -14
  320. package/dist/store/providers/memory/contact.store.js +5 -0
  321. package/dist/store/providers/memory/device-list.store.js +12 -34
  322. package/dist/store/providers/memory/message.store.js +11 -5
  323. package/dist/store/providers/memory/participants.store.js +1 -8
  324. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  325. package/dist/store/providers/memory/retry.store.js +77 -2
  326. package/dist/store/providers/memory/sender-key.store.js +14 -11
  327. package/dist/store/providers/memory/signal.store.js +54 -25
  328. package/dist/store/providers/memory/thread.store.js +5 -0
  329. package/dist/transport/WaComms.js +30 -26
  330. package/dist/transport/WaWebSocket.js +148 -18
  331. package/dist/transport/binary/constants.js +1 -31
  332. package/dist/transport/binary/decoder.js +8 -8
  333. package/dist/transport/binary/encoder.js +10 -9
  334. package/dist/transport/binary/index.js +0 -4
  335. package/dist/transport/index.js +7 -1
  336. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  337. package/dist/transport/node/WaNodeOrchestrator.js +25 -21
  338. package/dist/transport/node/WaNodeTransport.js +0 -3
  339. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  340. package/dist/transport/node/builders/business.js +137 -0
  341. package/dist/transport/node/builders/global.js +375 -0
  342. package/dist/transport/node/builders/index.js +29 -17
  343. package/dist/transport/node/builders/message.js +64 -236
  344. package/dist/transport/node/builders/pairing.js +2 -29
  345. package/dist/transport/node/builders/privacy-token.js +46 -0
  346. package/dist/transport/node/builders/privacy.js +55 -0
  347. package/dist/transport/node/builders/profile.js +78 -0
  348. package/dist/transport/node/builders/retry.js +9 -21
  349. package/dist/transport/node/builders/usync.js +49 -0
  350. package/dist/transport/node/helpers.js +131 -4
  351. package/dist/transport/node/usync.js +8 -0
  352. package/dist/transport/node/xml.js +35 -14
  353. package/dist/transport/noise/WaClientPayload.js +13 -13
  354. package/dist/transport/noise/WaFrameCodec.js +47 -32
  355. package/dist/transport/noise/WaNoiseCert.js +5 -8
  356. package/dist/transport/noise/WaNoiseSession.js +77 -29
  357. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  358. package/dist/transport/proxy.js +34 -0
  359. package/dist/transport/stream/parse.js +20 -52
  360. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  361. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  362. package/dist/types/appstate/constants.d.ts +1 -0
  363. package/dist/types/appstate/encoding.d.ts +7 -0
  364. package/dist/types/appstate/index.d.ts +3 -3
  365. package/dist/types/appstate/utils.d.ts +0 -3
  366. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  367. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  368. package/dist/types/auth/index.d.ts +0 -4
  369. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  370. package/dist/types/auth/types.d.ts +7 -9
  371. package/dist/types/client/WaClient.d.ts +42 -25
  372. package/dist/types/client/WaClientFactory.d.ts +33 -26
  373. package/dist/types/client/connection/WaConnectionManager.d.ts +66 -0
  374. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  375. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  376. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  377. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  378. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -2
  379. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -38
  380. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  381. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  382. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  383. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +8 -0
  384. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  385. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  386. package/dist/types/client/dirty.d.ts +1 -0
  387. package/dist/types/client/events/devices.d.ts +20 -0
  388. package/dist/types/client/events/group.d.ts +2 -1
  389. package/dist/types/client/events/identity.d.ts +9 -0
  390. package/dist/types/client/events/privacy-token.d.ts +7 -0
  391. package/dist/types/client/history-sync.d.ts +9 -6
  392. package/dist/types/client/incoming.d.ts +3 -1
  393. package/dist/types/client/index.d.ts +1 -1
  394. package/dist/types/client/mailbox.d.ts +3 -5
  395. package/dist/types/client/messages.d.ts +1 -2
  396. package/dist/types/client/messaging/fanout.d.ts +14 -0
  397. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  398. package/dist/types/client/messaging/participants.d.ts +13 -0
  399. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  400. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  401. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  402. package/dist/types/client/types.d.ts +75 -4
  403. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  404. package/dist/types/crypto/core/index.d.ts +2 -3
  405. package/dist/types/crypto/core/nonce.d.ts +2 -0
  406. package/dist/types/crypto/core/primitives.d.ts +0 -1
  407. package/dist/types/crypto/core/random.d.ts +2 -7
  408. package/dist/types/crypto/index.d.ts +0 -1
  409. package/dist/types/crypto/math/constants.d.ts +4 -2
  410. package/dist/types/crypto/math/fe.d.ts +30 -0
  411. package/dist/types/crypto/math/mod.d.ts +0 -2
  412. package/dist/types/crypto/math/types.d.ts +11 -4
  413. package/dist/types/index.d.ts +5 -3
  414. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  415. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  416. package/dist/types/infra/log/types.d.ts +1 -0
  417. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  418. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  419. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  420. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  421. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  422. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  423. package/dist/types/media/WaMediaTransferClient.d.ts +16 -15
  424. package/dist/types/media/constants.d.ts +1 -1
  425. package/dist/types/media/index.d.ts +1 -1
  426. package/dist/types/media/types.d.ts +15 -2
  427. package/dist/types/message/addon-crypto.d.ts +25 -0
  428. package/dist/types/message/content.d.ts +8 -0
  429. package/dist/types/message/icdc.d.ts +13 -0
  430. package/dist/types/message/index.d.ts +2 -0
  431. package/dist/types/message/reporting-token.d.ts +18 -0
  432. package/dist/types/message/types.d.ts +45 -6
  433. package/dist/types/message/use-case-secret.d.ts +20 -0
  434. package/dist/types/protocol/appstate.d.ts +47 -0
  435. package/dist/types/protocol/constants.d.ts +8 -3
  436. package/dist/types/protocol/defaults.d.ts +6 -0
  437. package/dist/types/protocol/index.d.ts +2 -11
  438. package/dist/types/protocol/jid.d.ts +22 -5
  439. package/dist/types/protocol/message.d.ts +60 -0
  440. package/dist/types/protocol/nodes.d.ts +4 -0
  441. package/dist/types/protocol/notification.d.ts +2 -0
  442. package/dist/types/protocol/privacy-token.d.ts +17 -0
  443. package/dist/types/protocol/privacy.d.ts +75 -0
  444. package/dist/types/protocol/stream.d.ts +30 -0
  445. package/dist/types/protocol/usync.d.ts +11 -0
  446. package/dist/types/retry/codec.d.ts +3 -0
  447. package/dist/types/retry/index.d.ts +4 -3
  448. package/dist/types/retry/parse.d.ts +5 -2
  449. package/dist/types/retry/replay.d.ts +0 -4
  450. package/dist/types/retry/tracker.d.ts +20 -0
  451. package/dist/types/retry/types.d.ts +10 -4
  452. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +15 -2
  453. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  454. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  455. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  456. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  457. package/dist/types/signal/api/result-map.d.ts +1 -0
  458. package/dist/types/signal/constants.d.ts +0 -3
  459. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  460. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  461. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  462. package/dist/types/signal/index.d.ts +3 -0
  463. package/dist/types/signal/session/SignalProtocol.d.ts +19 -4
  464. package/dist/types/signal/session/resolver.d.ts +22 -0
  465. package/dist/types/store/contracts/appstate.store.d.ts +4 -1
  466. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  467. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  468. package/dist/types/store/contracts/message.store.d.ts +1 -0
  469. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  470. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  471. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  472. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  473. package/dist/types/store/contracts/signal.store.d.ts +13 -0
  474. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  475. package/dist/types/store/createStore.d.ts +1 -1
  476. package/dist/types/store/index.d.ts +5 -13
  477. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  478. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  479. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  480. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  481. package/dist/types/store/locks/message.lock.d.ts +3 -0
  482. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  483. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  484. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  485. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  486. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  487. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  488. package/dist/types/store/providers/memory/appstate.store.d.ts +3 -1
  489. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  490. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  491. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  492. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  493. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  494. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  495. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  496. package/dist/types/store/providers/memory/signal.store.d.ts +8 -1
  497. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  498. package/dist/types/store/types.d.ts +49 -58
  499. package/dist/types/transport/WaWebSocket.d.ts +3 -1
  500. package/dist/types/transport/binary/constants.d.ts +0 -30
  501. package/dist/types/transport/binary/index.d.ts +0 -1
  502. package/dist/types/transport/index.d.ts +2 -1
  503. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  504. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  505. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  506. package/dist/types/transport/node/builders/business.d.ts +29 -0
  507. package/dist/types/transport/node/builders/global.d.ts +102 -0
  508. package/dist/types/transport/node/builders/group.d.ts +4 -6
  509. package/dist/types/transport/node/builders/index.d.ts +7 -3
  510. package/dist/types/transport/node/builders/message.d.ts +20 -30
  511. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  512. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  513. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  514. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  515. package/dist/types/transport/node/builders/retry.d.ts +2 -5
  516. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  517. package/dist/types/transport/node/helpers.d.ts +13 -0
  518. package/dist/types/transport/node/usync.d.ts +2 -0
  519. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  520. package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
  521. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  522. package/dist/types/transport/proxy.d.ts +6 -0
  523. package/dist/types/transport/stream/parse.d.ts +0 -1
  524. package/dist/types/transport/types.d.ts +18 -1
  525. package/dist/types/util/bytes.d.ts +5 -0
  526. package/dist/types/util/index.d.ts +5 -0
  527. package/dist/types/util/primitives.d.ts +2 -0
  528. package/dist/util/bytes.js +72 -46
  529. package/dist/util/coercion.js +6 -14
  530. package/dist/util/index.js +23 -0
  531. package/dist/util/primitives.js +42 -14
  532. package/package.json +52 -9
  533. package/proto/index.js +1 -1
  534. package/dist/crypto/core/constants.js +0 -4
  535. package/dist/crypto/core/encoding.js +0 -29
  536. package/dist/esm/crypto/core/constants.js +0 -1
  537. package/dist/esm/crypto/core/encoding.js +0 -25
  538. package/dist/esm/retry/outbound.js +0 -83
  539. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  540. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -169
  541. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  542. package/dist/esm/store/providers/sqlite/connection.js +0 -240
  543. package/dist/esm/store/providers/sqlite/contact.store.js +0 -61
  544. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -155
  545. package/dist/esm/store/providers/sqlite/message.store.js +0 -119
  546. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  547. package/dist/esm/store/providers/sqlite/participants.store.js +0 -85
  548. package/dist/esm/store/providers/sqlite/retry.store.js +0 -144
  549. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -203
  550. package/dist/esm/store/providers/sqlite/signal.store.js +0 -353
  551. package/dist/esm/store/providers/sqlite/thread.store.js +0 -72
  552. package/dist/esm/util/base64.js +0 -18
  553. package/dist/esm/util/signal-address.js +0 -5
  554. package/dist/retry/outbound.js +0 -88
  555. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  556. package/dist/store/providers/sqlite/appstate.store.js +0 -173
  557. package/dist/store/providers/sqlite/auth.store.js +0 -180
  558. package/dist/store/providers/sqlite/connection.js +0 -276
  559. package/dist/store/providers/sqlite/contact.store.js +0 -65
  560. package/dist/store/providers/sqlite/device-list.store.js +0 -159
  561. package/dist/store/providers/sqlite/message.store.js +0 -123
  562. package/dist/store/providers/sqlite/migrations.js +0 -350
  563. package/dist/store/providers/sqlite/participants.store.js +0 -89
  564. package/dist/store/providers/sqlite/retry.store.js +0 -148
  565. package/dist/store/providers/sqlite/sender-key.store.js +0 -207
  566. package/dist/store/providers/sqlite/signal.store.js +0 -357
  567. package/dist/store/providers/sqlite/thread.store.js +0 -76
  568. package/dist/types/appstate/store/sqlite.d.ts +0 -21
  569. package/dist/types/crypto/core/constants.d.ts +0 -1
  570. package/dist/types/crypto/core/encoding.d.ts +0 -11
  571. package/dist/types/retry/outbound.d.ts +0 -4
  572. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  573. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -15
  574. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  575. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  576. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -10
  577. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -18
  578. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -11
  579. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  580. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -13
  581. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -16
  582. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -25
  583. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -46
  584. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -11
  585. package/dist/types/util/base64.d.ts +0 -4
  586. package/dist/types/util/signal-address.d.ts +0 -2
  587. package/dist/util/base64.js +0 -24
  588. package/dist/util/signal-address.js +0 -8
  589. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -20,16 +20,21 @@ export function findMatchingSession(session, sessionBaseKey) {
20
20
  if (session.aliceBaseKey && uint8Equal(session.aliceBaseKey, serializedBaseKey)) {
21
21
  return session;
22
22
  }
23
- const previousSessionIndex = session.prevSessions.findIndex((prev) => !!prev.aliceBaseKey && uint8Equal(prev.aliceBaseKey, serializedBaseKey));
24
- if (previousSessionIndex !== -1) {
25
- const promoted = snapshotToRecord(session.prevSessions[previousSessionIndex]);
23
+ for (let index = 0; index < session.prevSessions.length; index += 1) {
24
+ const previousSession = session.prevSessions[index];
25
+ if (!previousSession.aliceBaseKey ||
26
+ !uint8Equal(previousSession.aliceBaseKey, serializedBaseKey)) {
27
+ continue;
28
+ }
29
+ const prevSessions = [detachSession(session)];
30
+ for (let i = 0; i < session.prevSessions.length; i += 1) {
31
+ if (i !== index) {
32
+ prevSessions.push(session.prevSessions[i]);
33
+ }
34
+ }
26
35
  return {
27
- ...promoted,
28
- prevSessions: [
29
- detachSession(session),
30
- ...session.prevSessions.slice(0, previousSessionIndex),
31
- ...session.prevSessions.slice(previousSessionIndex + 1)
32
- ]
36
+ ...previousSession,
37
+ prevSessions
33
38
  };
34
39
  }
35
40
  return null;
@@ -0,0 +1,221 @@
1
+ import { toSerializedPubKey } from '../../crypto/core/keys.js';
2
+ import { PromiseDedup } from '../../infra/perf/PromiseDedup.js';
3
+ import { normalizeDeviceJid, parseSignalAddressFromJid, signalAddressKey } from '../../protocol/jid.js';
4
+ import { bytesToHex, uint8Equal } from '../../util/bytes.js';
5
+ import { toError } from '../../util/primitives.js';
6
+ export function createSignalSessionResolver(options) {
7
+ const { signalProtocol, signalStore, signalIdentitySync, signalSessionSync, logger } = options;
8
+ const dedup = new PromiseDedup();
9
+ const ensureSessionInternal = async (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle) => {
10
+ const expectedSerializedIdentity = expectedIdentity
11
+ ? toSerializedPubKey(expectedIdentity)
12
+ : null;
13
+ if (reasonIdentity) {
14
+ await signalIdentitySync.syncIdentityKeys([jid]);
15
+ }
16
+ if (await signalStore.hasSession(address)) {
17
+ if (expectedSerializedIdentity) {
18
+ const storedIdentity = await signalStore.getRemoteIdentity(address);
19
+ if (!storedIdentity || !uint8Equal(storedIdentity, expectedSerializedIdentity)) {
20
+ throw new Error('identity mismatch');
21
+ }
22
+ }
23
+ return null;
24
+ }
25
+ let fetched;
26
+ if (prefetchedBundle) {
27
+ fetched = {
28
+ jid,
29
+ bundle: prefetchedBundle
30
+ };
31
+ }
32
+ else {
33
+ logger.info('signal session missing, fetching remote key bundle', { jid });
34
+ fetched = await signalSessionSync.fetchKeyBundle({
35
+ jid,
36
+ reasonIdentity
37
+ });
38
+ }
39
+ const remoteIdentity = toSerializedPubKey(fetched.bundle.identity);
40
+ if (reasonIdentity) {
41
+ const storedIdentity = await signalStore.getRemoteIdentity(address);
42
+ if (storedIdentity && !uint8Equal(remoteIdentity, storedIdentity)) {
43
+ throw new Error('identity mismatch');
44
+ }
45
+ }
46
+ if (expectedSerializedIdentity && !uint8Equal(remoteIdentity, expectedSerializedIdentity)) {
47
+ throw new Error('identity mismatch');
48
+ }
49
+ const session = await signalProtocol.establishOutgoingSession(address, fetched.bundle, {
50
+ reuseExisting: true
51
+ });
52
+ logger.info('signal session synchronized', {
53
+ jid,
54
+ regId: fetched.bundle.regId,
55
+ hasOneTimeKey: fetched.bundle.oneTimeKey !== undefined
56
+ });
57
+ return session;
58
+ };
59
+ const ensureSessionWithDedup = (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle) => {
60
+ const expectedIdentityKey = expectedIdentity ? bytesToHex(expectedIdentity) : 'none';
61
+ const dedupKey = `signalSession:${signalAddressKey(address)}:${reasonIdentity ? '1' : '0'}:${expectedIdentityKey}`;
62
+ return dedup.run(dedupKey, () => ensureSessionInternal(address, jid, expectedIdentity, reasonIdentity, prefetchedBundle));
63
+ };
64
+ const ensureSession = (address, jid, expectedIdentity, reasonIdentity = false) => ensureSessionWithDedup(address, jid, expectedIdentity, reasonIdentity).then(() => { });
65
+ const ensureSessionsBatch = async (targetJids, expectedIdentityByJid) => {
66
+ const seenTargetJids = new Set();
67
+ const normalizedTargetJids = new Array(targetJids.length);
68
+ const normalizedTargetAddresses = new Array(targetJids.length);
69
+ let normalizedTargetCount = 0;
70
+ for (let index = 0; index < targetJids.length; index += 1) {
71
+ const jid = normalizeDeviceJid(targetJids[index]);
72
+ if (seenTargetJids.has(jid)) {
73
+ continue;
74
+ }
75
+ seenTargetJids.add(jid);
76
+ normalizedTargetJids[normalizedTargetCount] = jid;
77
+ normalizedTargetAddresses[normalizedTargetCount] = parseSignalAddressFromJid(jid);
78
+ normalizedTargetCount += 1;
79
+ }
80
+ if (normalizedTargetCount === 0) {
81
+ return [];
82
+ }
83
+ normalizedTargetJids.length = normalizedTargetCount;
84
+ normalizedTargetAddresses.length = normalizedTargetCount;
85
+ const normalizedExpectedIdentityByJid = expectedIdentityByJid && expectedIdentityByJid.size > 0
86
+ ? new Map()
87
+ : undefined;
88
+ if (normalizedExpectedIdentityByJid && expectedIdentityByJid) {
89
+ for (const [jid, identity] of expectedIdentityByJid.entries()) {
90
+ try {
91
+ toSerializedPubKey(identity);
92
+ normalizedExpectedIdentityByJid.set(normalizeDeviceJid(jid), identity);
93
+ }
94
+ catch (error) {
95
+ logger.trace('ignoring malformed expected identity jid during batch normalization', { jid, message: toError(error).message });
96
+ }
97
+ }
98
+ }
99
+ const resolvedByIndex = (await signalStore.getSessionsBatch(normalizedTargetAddresses));
100
+ const collectResolvedTargets = () => {
101
+ const resolvedTargets = new Array(normalizedTargetJids.length);
102
+ let resolvedTargetCount = 0;
103
+ for (let index = 0; index < normalizedTargetJids.length; index += 1) {
104
+ const session = resolvedByIndex[index];
105
+ if (!session) {
106
+ continue;
107
+ }
108
+ resolvedTargets[resolvedTargetCount] = {
109
+ jid: normalizedTargetJids[index],
110
+ address: normalizedTargetAddresses[index],
111
+ session
112
+ };
113
+ resolvedTargetCount += 1;
114
+ }
115
+ resolvedTargets.length = resolvedTargetCount;
116
+ return resolvedTargets;
117
+ };
118
+ const missingIndices = [];
119
+ for (let index = 0; index < normalizedTargetJids.length; index += 1) {
120
+ const session = resolvedByIndex[index];
121
+ const expectedIdentity = normalizedExpectedIdentityByJid?.get(normalizedTargetJids[index]);
122
+ if (session && expectedIdentity) {
123
+ if (!uint8Equal(session.remote.pubKey, toSerializedPubKey(expectedIdentity))) {
124
+ throw new Error('identity mismatch');
125
+ }
126
+ }
127
+ if (!session) {
128
+ missingIndices.push(index);
129
+ }
130
+ }
131
+ if (missingIndices.length === 0) {
132
+ return collectResolvedTargets();
133
+ }
134
+ const batchRequest = new Array(missingIndices.length);
135
+ for (let index = 0; index < missingIndices.length; index += 1) {
136
+ batchRequest[index] = { jid: normalizedTargetJids[missingIndices[index]] };
137
+ }
138
+ let batchResults;
139
+ try {
140
+ batchResults = await signalSessionSync.fetchKeyBundles(batchRequest);
141
+ }
142
+ catch (error) {
143
+ logger.warn('signal batch key fetch failed', {
144
+ requested: missingIndices.length,
145
+ message: toError(error).message
146
+ });
147
+ return collectResolvedTargets();
148
+ }
149
+ const ensuredTargetIndices = new Array(missingIndices.length);
150
+ const ensurePromises = new Array(missingIndices.length);
151
+ let ensureCount = 0;
152
+ for (let index = 0; index < missingIndices.length; index += 1) {
153
+ const targetIndex = missingIndices[index];
154
+ const targetJid = normalizedTargetJids[targetIndex];
155
+ const batchResult = batchResults[index];
156
+ if (!batchResult?.bundle) {
157
+ logger.warn('signal batch key fetch returned target without bundle', {
158
+ jid: targetJid,
159
+ message: batchResult?.errorText ?? 'missing key bundle user in response'
160
+ });
161
+ continue;
162
+ }
163
+ const expectedIdentity = normalizedExpectedIdentityByJid?.get(targetJid);
164
+ ensuredTargetIndices[ensureCount] = targetIndex;
165
+ ensurePromises[ensureCount] = ensureSessionWithDedup(normalizedTargetAddresses[targetIndex], targetJid, expectedIdentity, false, batchResult.bundle);
166
+ ensureCount += 1;
167
+ }
168
+ if (ensureCount === 0) {
169
+ return collectResolvedTargets();
170
+ }
171
+ ensuredTargetIndices.length = ensureCount;
172
+ ensurePromises.length = ensureCount;
173
+ const ensureResults = await Promise.allSettled(ensurePromises);
174
+ const fallbackIndices = [];
175
+ for (let index = 0; index < ensuredTargetIndices.length; index += 1) {
176
+ const targetIndex = ensuredTargetIndices[index];
177
+ const ensureResult = ensureResults[index];
178
+ if (ensureResult.status === 'rejected') {
179
+ const normalized = toError(ensureResult.reason);
180
+ if (normalized.message === 'identity mismatch') {
181
+ throw normalized;
182
+ }
183
+ logger.warn('signal session ensure failed during batch resolution', {
184
+ jid: normalizedTargetJids[targetIndex],
185
+ message: normalized.message
186
+ });
187
+ continue;
188
+ }
189
+ const session = ensureResult.value;
190
+ if (session) {
191
+ resolvedByIndex[targetIndex] = session;
192
+ }
193
+ else {
194
+ fallbackIndices.push(targetIndex);
195
+ }
196
+ }
197
+ if (fallbackIndices.length > 0) {
198
+ const fallbackAddresses = new Array(fallbackIndices.length);
199
+ for (let i = 0; i < fallbackIndices.length; i++) {
200
+ fallbackAddresses[i] = normalizedTargetAddresses[fallbackIndices[i]];
201
+ }
202
+ const fallbackSessions = await signalStore.getSessionsBatch(fallbackAddresses);
203
+ for (let i = 0; i < fallbackIndices.length; i++) {
204
+ const session = fallbackSessions[i];
205
+ if (session) {
206
+ resolvedByIndex[fallbackIndices[i]] = session;
207
+ }
208
+ else {
209
+ logger.warn('signal session ensure completed without persisted session', {
210
+ jid: normalizedTargetJids[fallbackIndices[i]]
211
+ });
212
+ }
213
+ }
214
+ }
215
+ return collectResolvedTargets();
216
+ };
217
+ return {
218
+ ensureSession,
219
+ ensureSessionsBatch
220
+ };
221
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,59 +1,31 @@
1
+ import { withAppStateLock } from './locks/appstate.lock.js';
2
+ import { withAuthLock } from './locks/auth.lock.js';
3
+ import { withContactLock } from './locks/contact.lock.js';
4
+ import { withDeviceListLock } from './locks/device-list.lock.js';
5
+ import { withMessageLock } from './locks/message.lock.js';
6
+ import { withParticipantsLock } from './locks/participants.lock.js';
7
+ import { withPrivacyTokenLock } from './locks/privacy-token.lock.js';
8
+ import { withRetryLock } from './locks/retry.lock.js';
9
+ import { withSenderKeyLock } from './locks/sender-key.lock.js';
10
+ import { withSignalLock } from './locks/signal.lock.js';
11
+ import { withThreadLock } from './locks/thread.lock.js';
1
12
  import { NOOP_CONTACT_STORE, NOOP_DEVICE_LIST_STORE, NOOP_MESSAGE_STORE, NOOP_PARTICIPANTS_STORE, NOOP_THREAD_STORE } from './noop.store.js';
2
13
  import { WaAppStateMemoryStore } from './providers/memory/appstate.store.js';
3
14
  import { WaContactMemoryStore } from './providers/memory/contact.store.js';
4
15
  import { WaDeviceListMemoryStore } from './providers/memory/device-list.store.js';
5
16
  import { WaMessageMemoryStore } from './providers/memory/message.store.js';
6
17
  import { WaParticipantsMemoryStore } from './providers/memory/participants.store.js';
18
+ import { WaPrivacyTokenMemoryStore } from './providers/memory/privacy-token.store.js';
7
19
  import { WaRetryMemoryStore } from './providers/memory/retry.store.js';
8
20
  import { SenderKeyMemoryStore } from './providers/memory/sender-key.store.js';
9
21
  import { WaSignalMemoryStore } from './providers/memory/signal.store.js';
10
22
  import { WaThreadMemoryStore } from './providers/memory/thread.store.js';
11
- import { WaAppStateSqliteStore } from './providers/sqlite/appstate.store.js';
12
- import { WaAuthSqliteStore } from './providers/sqlite/auth.store.js';
13
- import { WaContactSqliteStore } from './providers/sqlite/contact.store.js';
14
- import { WaDeviceListSqliteStore } from './providers/sqlite/device-list.store.js';
15
- import { WaMessageSqliteStore } from './providers/sqlite/message.store.js';
16
- import { WaParticipantsSqliteStore } from './providers/sqlite/participants.store.js';
17
- import { WaRetrySqliteStore } from './providers/sqlite/retry.store.js';
18
- import { SenderKeySqliteStore } from './providers/sqlite/sender-key.store.js';
19
- import { WaSignalSqliteStore } from './providers/sqlite/signal.store.js';
20
- import { WaThreadSqliteStore } from './providers/sqlite/thread.store.js';
21
23
  import { resolvePositive } from '../util/coercion.js';
22
- const DEFAULT_PROVIDERS = {
23
- auth: 'sqlite',
24
- signal: 'sqlite',
25
- senderKey: 'sqlite',
26
- appState: 'sqlite',
27
- messages: 'none',
28
- threads: 'none',
29
- contacts: 'none'
30
- };
31
- const DEFAULT_CACHE_PROVIDERS = {
32
- retry: 'memory',
33
- participants: 'memory',
34
- deviceList: 'memory'
35
- };
36
- const DEFAULT_CACHE_TTLS_MS = {
37
- retryMs: 7 * 24 * 60 * 60 * 1000,
24
+ const DEFAULT_CACHE_TTLS_MS = Object.freeze({
25
+ retryMs: 60 * 1000,
38
26
  participantsMs: 5 * 60 * 1000,
39
27
  deviceListMs: 5 * 60 * 1000
40
- };
41
- const DEFAULT_SQLITE_BATCH_SIZES = {
42
- deviceList: 500,
43
- senderKeyDistribution: 250,
44
- signalPreKey: 500,
45
- signalHasSession: 250
46
- };
47
- function resolveStoreValue(sessionId, value, domainPath) {
48
- if (!value) {
49
- return null;
50
- }
51
- const resolved = typeof value === 'function' ? value(sessionId) : value;
52
- if (!resolved) {
53
- throw new Error(`${domainPath} must resolve to a store instance`);
54
- }
55
- return resolved;
56
- }
28
+ });
57
29
  function hasDestroy(value) {
58
30
  return (!!value &&
59
31
  typeof value === 'object' &&
@@ -61,30 +33,32 @@ function hasDestroy(value) {
61
33
  typeof value.destroy === 'function');
62
34
  }
63
35
  async function destroyIfSupported(value) {
64
- if (!hasDestroy(value)) {
36
+ if (!hasDestroy(value))
65
37
  return;
66
- }
67
38
  await value.destroy();
68
39
  }
40
+ function resolveStore(sessionId, backends, provider, domain, kind, fallback) {
41
+ if (!provider || provider === 'memory' || provider === 'none') {
42
+ return fallback();
43
+ }
44
+ const backend = backends[provider];
45
+ if (!backend) {
46
+ throw new Error(`unknown backend '${provider}' for ${domain}`);
47
+ }
48
+ const factory = backend[kind][domain];
49
+ if (!factory) {
50
+ throw new Error(`backend '${provider}' does not provide ${kind}.${domain}`);
51
+ }
52
+ return factory(sessionId);
53
+ }
69
54
  export function createStore(options) {
70
- const providers = {
71
- ...DEFAULT_PROVIDERS,
72
- ...(options.providers ?? {})
73
- };
74
- const cacheProviders = {
75
- ...DEFAULT_CACHE_PROVIDERS,
76
- ...(options.cacheProviders ?? {})
77
- };
55
+ const backends = (options.backends ?? {});
56
+ const providers = options.providers ?? {};
57
+ const cacheProviders = options.cacheProviders ?? {};
78
58
  const cacheTtlsMs = Object.freeze({
79
- retry: resolvePositive(options.cacheTtlMs?.retryMs, DEFAULT_CACHE_TTLS_MS.retryMs, 'cacheTtlMs.retryMs'),
80
- participants: resolvePositive(options.cacheTtlMs?.participantsMs, DEFAULT_CACHE_TTLS_MS.participantsMs, 'cacheTtlMs.participantsMs'),
81
- deviceList: resolvePositive(options.cacheTtlMs?.deviceListMs, DEFAULT_CACHE_TTLS_MS.deviceListMs, 'cacheTtlMs.deviceListMs')
82
- });
83
- const sqliteBatchSizes = Object.freeze({
84
- deviceList: resolvePositive(options.sqlite?.batchSizes?.deviceList, DEFAULT_SQLITE_BATCH_SIZES.deviceList, 'sqlite.batchSizes.deviceList'),
85
- senderKeyDistribution: resolvePositive(options.sqlite?.batchSizes?.senderKeyDistribution, DEFAULT_SQLITE_BATCH_SIZES.senderKeyDistribution, 'sqlite.batchSizes.senderKeyDistribution'),
86
- signalPreKey: resolvePositive(options.sqlite?.batchSizes?.signalPreKey, DEFAULT_SQLITE_BATCH_SIZES.signalPreKey, 'sqlite.batchSizes.signalPreKey'),
87
- signalHasSession: resolvePositive(options.sqlite?.batchSizes?.signalHasSession, DEFAULT_SQLITE_BATCH_SIZES.signalHasSession, 'sqlite.batchSizes.signalHasSession')
59
+ retry: resolvePositive(options.memory?.cacheTtlMs?.retryMs, DEFAULT_CACHE_TTLS_MS.retryMs, 'memory.cacheTtlMs.retryMs'),
60
+ participants: resolvePositive(options.memory?.cacheTtlMs?.participantsMs, DEFAULT_CACHE_TTLS_MS.participantsMs, 'memory.cacheTtlMs.participantsMs'),
61
+ deviceList: resolvePositive(options.memory?.cacheTtlMs?.deviceListMs, DEFAULT_CACHE_TTLS_MS.deviceListMs, 'memory.cacheTtlMs.deviceListMs')
88
62
  });
89
63
  const sessions = new Map();
90
64
  let storeDestroyed = false;
@@ -93,125 +67,67 @@ export function createStore(options) {
93
67
  if (storeDestroyed) {
94
68
  throw new Error('store has been destroyed');
95
69
  }
96
- const normalizedSessionId = sessionId.trim();
97
- if (normalizedSessionId.length === 0) {
70
+ const id = sessionId.trim();
71
+ if (id.length === 0) {
98
72
  throw new Error('sessionId must be a non-empty string');
99
73
  }
100
- const cached = sessions.get(normalizedSessionId);
101
- if (cached) {
74
+ const cached = sessions.get(id);
75
+ if (cached)
102
76
  return cached;
103
- }
104
- const custom = options.custom;
105
- const customCache = options.customCache;
106
- const customAuth = resolveStoreValue(normalizedSessionId, custom?.auth, 'custom.auth');
107
- const customSignal = resolveStoreValue(normalizedSessionId, custom?.signal, 'custom.signal');
108
- const customSenderKey = resolveStoreValue(normalizedSessionId, custom?.senderKey, 'custom.senderKey');
109
- const customAppState = resolveStoreValue(normalizedSessionId, custom?.appState, 'custom.appState');
110
- const customRetry = resolveStoreValue(normalizedSessionId, customCache?.retry, 'customCache.retry');
111
- const customParticipants = resolveStoreValue(normalizedSessionId, customCache?.participants, 'customCache.participants');
112
- const customDeviceList = resolveStoreValue(normalizedSessionId, customCache?.deviceList, 'customCache.deviceList');
113
- const customMessages = resolveStoreValue(normalizedSessionId, custom?.messages, 'custom.messages');
114
- const customThreads = resolveStoreValue(normalizedSessionId, custom?.threads, 'custom.threads');
115
- const customContacts = resolveStoreValue(normalizedSessionId, custom?.contacts, 'custom.contacts');
116
- const memoryLimits = options.memory?.limits ?? {};
117
- const requiresSqlite = !customAuth ||
118
- (!customSignal && providers.signal === 'sqlite') ||
119
- (!customSenderKey && providers.senderKey === 'sqlite') ||
120
- (!customAppState && providers.appState === 'sqlite') ||
121
- (!customRetry && cacheProviders.retry === 'sqlite') ||
122
- (!customParticipants && cacheProviders.participants === 'sqlite') ||
123
- (!customDeviceList && cacheProviders.deviceList === 'sqlite') ||
124
- (!customMessages && providers.messages === 'sqlite') ||
125
- (!customThreads && providers.threads === 'sqlite') ||
126
- (!customContacts && providers.contacts === 'sqlite');
127
- const sqlite = options.sqlite;
128
- if (requiresSqlite && (!sqlite?.path || sqlite.path.trim().length === 0)) {
129
- throw new Error('sqlite.path must be configured for unresolved sqlite domains.');
130
- }
131
- const sqliteOptions = sqlite && sqlite.path.trim().length > 0
132
- ? {
133
- path: sqlite.path,
134
- sessionId: normalizedSessionId,
135
- driver: sqlite.driver ?? 'auto',
136
- pragmas: sqlite.pragmas
137
- }
138
- : null;
139
- const authStore = customAuth ?? new WaAuthSqliteStore(sqliteOptions);
140
- const signalStore = customSignal ??
141
- (providers.signal === 'memory'
142
- ? new WaSignalMemoryStore({
143
- maxPreKeys: memoryLimits.signalPreKeys,
144
- maxSessions: memoryLimits.signalSessions,
145
- maxRemoteIdentities: memoryLimits.signalRemoteIdentities
146
- })
147
- : new WaSignalSqliteStore(sqliteOptions, {
148
- preKeyBatchSize: sqliteBatchSizes.signalPreKey,
149
- hasSessionBatchSize: sqliteBatchSizes.signalHasSession
150
- }));
151
- const senderKeyStore = customSenderKey ??
152
- (providers.senderKey === 'memory'
153
- ? new SenderKeyMemoryStore({
154
- maxSenderKeys: memoryLimits.senderKeys,
155
- maxSenderDistributions: memoryLimits.senderDistributions
156
- })
157
- : new SenderKeySqliteStore(sqliteOptions, sqliteBatchSizes.senderKeyDistribution));
158
- const appStateStore = customAppState ??
159
- (providers.appState === 'memory'
160
- ? new WaAppStateMemoryStore(undefined, {
161
- maxSyncKeys: memoryLimits.appStateSyncKeys,
162
- maxCollectionEntries: memoryLimits.appStateCollectionEntries
163
- })
164
- : new WaAppStateSqliteStore(sqliteOptions));
165
- const retryStore = customRetry ??
166
- (cacheProviders.retry === 'memory'
167
- ? new WaRetryMemoryStore(cacheTtlsMs.retry)
168
- : new WaRetrySqliteStore(sqliteOptions, cacheTtlsMs.retry));
169
- const participantsStore = customParticipants ??
170
- (cacheProviders.participants === 'sqlite'
171
- ? new WaParticipantsSqliteStore(sqliteOptions, cacheTtlsMs.participants)
172
- : cacheProviders.participants === 'memory'
173
- ? new WaParticipantsMemoryStore(cacheTtlsMs.participants, {
174
- maxGroups: memoryLimits.participantsGroups
175
- })
176
- : NOOP_PARTICIPANTS_STORE);
177
- const deviceListStore = customDeviceList ??
178
- (cacheProviders.deviceList === 'sqlite'
179
- ? new WaDeviceListSqliteStore(sqliteOptions, cacheTtlsMs.deviceList, sqliteBatchSizes.deviceList)
180
- : cacheProviders.deviceList === 'memory'
181
- ? new WaDeviceListMemoryStore(cacheTtlsMs.deviceList, {
182
- maxUsers: memoryLimits.deviceListUsers
183
- })
184
- : NOOP_DEVICE_LIST_STORE);
185
- const messageStore = customMessages ??
186
- (providers.messages === 'sqlite'
187
- ? new WaMessageSqliteStore(sqliteOptions)
188
- : providers.messages === 'memory'
189
- ? new WaMessageMemoryStore({
190
- maxMessages: memoryLimits.messages
191
- })
192
- : NOOP_MESSAGE_STORE);
193
- const threadStore = customThreads ??
194
- (providers.threads === 'sqlite'
195
- ? new WaThreadSqliteStore(sqliteOptions)
196
- : providers.threads === 'memory'
197
- ? new WaThreadMemoryStore({
198
- maxThreads: memoryLimits.threads
199
- })
200
- : NOOP_THREAD_STORE);
201
- const contactStore = customContacts ??
202
- (providers.contacts === 'sqlite'
203
- ? new WaContactSqliteStore(sqliteOptions)
204
- : providers.contacts === 'memory'
205
- ? new WaContactMemoryStore({
206
- maxContacts: memoryLimits.contacts
207
- })
208
- : NOOP_CONTACT_STORE);
77
+ const ml = options.memory?.limits ?? {};
78
+ const rawAuth = resolveStore(id, backends, providers.auth, 'auth', 'stores', () => {
79
+ throw new Error('providers.auth is required — register a backend or set providers.auth');
80
+ });
81
+ const rawSignal = resolveStore(id, backends, providers.signal ?? 'memory', 'signal', 'stores', () => new WaSignalMemoryStore({
82
+ maxPreKeys: ml.signalPreKeys,
83
+ maxSessions: ml.signalSessions,
84
+ maxRemoteIdentities: ml.signalRemoteIdentities
85
+ }));
86
+ const rawSenderKey = resolveStore(id, backends, providers.senderKey ?? 'memory', 'senderKey', 'stores', () => new SenderKeyMemoryStore({
87
+ maxSenderKeys: ml.senderKeys,
88
+ maxSenderDistributions: ml.senderDistributions
89
+ }));
90
+ const rawAppState = resolveStore(id, backends, providers.appState ?? 'memory', 'appState', 'stores', () => new WaAppStateMemoryStore(undefined, {
91
+ maxSyncKeys: ml.appStateSyncKeys,
92
+ maxCollectionEntries: ml.appStateCollectionEntries
93
+ }));
94
+ const rawMessages = resolveStore(id, backends, providers.messages ?? 'none', 'messages', 'stores', () => providers.messages === 'memory'
95
+ ? new WaMessageMemoryStore({ maxMessages: ml.messages })
96
+ : NOOP_MESSAGE_STORE);
97
+ const rawThreads = resolveStore(id, backends, providers.threads ?? 'none', 'threads', 'stores', () => providers.threads === 'memory'
98
+ ? new WaThreadMemoryStore({ maxThreads: ml.threads })
99
+ : NOOP_THREAD_STORE);
100
+ const rawContacts = resolveStore(id, backends, providers.contacts ?? 'none', 'contacts', 'stores', () => providers.contacts === 'memory'
101
+ ? new WaContactMemoryStore({ maxContacts: ml.contacts })
102
+ : NOOP_CONTACT_STORE);
103
+ const rawPrivacyToken = resolveStore(id, backends, providers.privacyToken ?? 'memory', 'privacyToken', 'stores', () => new WaPrivacyTokenMemoryStore(ml.privacyTokens));
104
+ const rawRetry = resolveStore(id, backends, cacheProviders.retry ?? 'memory', 'retry', 'caches', () => new WaRetryMemoryStore(cacheTtlsMs.retry));
105
+ const rawParticipants = resolveStore(id, backends, cacheProviders.participants ?? 'memory', 'participants', 'caches', () => cacheProviders.participants === 'memory'
106
+ ? new WaParticipantsMemoryStore(cacheTtlsMs.participants, {
107
+ maxGroups: ml.participantsGroups
108
+ })
109
+ : NOOP_PARTICIPANTS_STORE);
110
+ const rawDeviceList = resolveStore(id, backends, cacheProviders.deviceList ?? 'memory', 'deviceList', 'caches', () => cacheProviders.deviceList === 'memory'
111
+ ? new WaDeviceListMemoryStore(cacheTtlsMs.deviceList, {
112
+ maxUsers: ml.deviceListUsers
113
+ })
114
+ : NOOP_DEVICE_LIST_STORE);
115
+ const authStore = withAuthLock(rawAuth);
116
+ const signalStore = withSignalLock(rawSignal);
117
+ const senderKeyStore = withSenderKeyLock(rawSenderKey);
118
+ const appStateStore = withAppStateLock(rawAppState);
119
+ const retryStore = withRetryLock(rawRetry);
120
+ const participantsStore = withParticipantsLock(rawParticipants);
121
+ const deviceListStore = withDeviceListLock(rawDeviceList);
122
+ const messageStore = withMessageLock(rawMessages);
123
+ const threadStore = withThreadLock(rawThreads);
124
+ const contactStore = withContactLock(rawContacts);
125
+ const privacyTokenStore = withPrivacyTokenLock(rawPrivacyToken);
209
126
  let cachesDestroyed = false;
210
127
  let sessionDestroyed = false;
211
128
  const destroyCaches = async () => {
212
- if (cachesDestroyed) {
129
+ if (cachesDestroyed)
213
130
  return;
214
- }
215
131
  cachesDestroyed = true;
216
132
  await Promise.all([
217
133
  retryStore.clear(),
@@ -225,9 +141,8 @@ export function createStore(options) {
225
141
  ]);
226
142
  };
227
143
  const destroy = async () => {
228
- if (sessionDestroyed) {
144
+ if (sessionDestroyed)
229
145
  return;
230
- }
231
146
  sessionDestroyed = true;
232
147
  await destroyCaches();
233
148
  await Promise.all([
@@ -237,7 +152,8 @@ export function createStore(options) {
237
152
  destroyIfSupported(appStateStore),
238
153
  destroyIfSupported(messageStore),
239
154
  destroyIfSupported(threadStore),
240
- destroyIfSupported(contactStore)
155
+ destroyIfSupported(contactStore),
156
+ destroyIfSupported(privacyTokenStore)
241
157
  ]);
242
158
  };
243
159
  const session = {
@@ -251,28 +167,24 @@ export function createStore(options) {
251
167
  messages: messageStore,
252
168
  threads: threadStore,
253
169
  contacts: contactStore,
170
+ privacyToken: privacyTokenStore,
254
171
  destroyCaches,
255
172
  destroy
256
173
  };
257
- sessions.set(normalizedSessionId, session);
174
+ sessions.set(id, session);
258
175
  return session;
259
176
  },
260
177
  async destroyCaches() {
261
- const activeSessions = [...sessions.values()];
262
- for (const session of activeSessions) {
263
- await session.destroyCaches();
264
- }
178
+ const list = Array.from(sessions.values());
179
+ await Promise.all(list.map((s) => s.destroyCaches()));
265
180
  },
266
181
  async destroy() {
267
- if (storeDestroyed) {
182
+ if (storeDestroyed)
268
183
  return;
269
- }
270
184
  storeDestroyed = true;
271
- const activeSessions = [...sessions.values()];
185
+ const list = Array.from(sessions.values());
272
186
  sessions.clear();
273
- for (const session of activeSessions) {
274
- await session.destroy();
275
- }
187
+ await Promise.all(list.map((s) => s.destroy()));
276
188
  }
277
189
  };
278
190
  }
@@ -1,11 +1,4 @@
1
- export { WaAuthSqliteStore } from './providers/sqlite/auth.store.js';
2
- export { WaAppStateSqliteStore } from './providers/sqlite/appstate.store.js';
3
1
  export { createStore } from './createStore.js';
4
- export { WaSignalSqliteStore } from './providers/sqlite/signal.store.js';
5
- export { SenderKeySqliteStore } from './providers/sqlite/sender-key.store.js';
6
- export { WaRetrySqliteStore } from './providers/sqlite/retry.store.js';
7
- export { WaParticipantsSqliteStore } from './providers/sqlite/participants.store.js';
8
- export { WaDeviceListSqliteStore } from './providers/sqlite/device-list.store.js';
9
2
  export { WaAppStateMemoryStore } from './providers/memory/appstate.store.js';
10
3
  export { WaSignalMemoryStore } from './providers/memory/signal.store.js';
11
4
  export { SenderKeyMemoryStore } from './providers/memory/sender-key.store.js';
@@ -15,6 +8,4 @@ export { WaDeviceListMemoryStore } from './providers/memory/device-list.store.js
15
8
  export { WaContactMemoryStore } from './providers/memory/contact.store.js';
16
9
  export { WaMessageMemoryStore } from './providers/memory/message.store.js';
17
10
  export { WaThreadMemoryStore } from './providers/memory/thread.store.js';
18
- export { WaContactSqliteStore } from './providers/sqlite/contact.store.js';
19
- export { WaMessageSqliteStore } from './providers/sqlite/message.store.js';
20
- export { WaThreadSqliteStore } from './providers/sqlite/thread.store.js';
11
+ export { WaPrivacyTokenMemoryStore } from './providers/memory/privacy-token.store.js';