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
@@ -1,62 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createStore = createStore;
4
+ const appstate_lock_1 = require("./locks/appstate.lock");
5
+ const auth_lock_1 = require("./locks/auth.lock");
6
+ const contact_lock_1 = require("./locks/contact.lock");
7
+ const device_list_lock_1 = require("./locks/device-list.lock");
8
+ const identity_lock_1 = require("./locks/identity.lock");
9
+ const message_secret_lock_1 = require("./locks/message-secret.lock");
10
+ const message_lock_1 = require("./locks/message.lock");
11
+ const participants_lock_1 = require("./locks/participants.lock");
12
+ const pre_key_lock_1 = require("./locks/pre-key.lock");
13
+ const privacy_token_lock_1 = require("./locks/privacy-token.lock");
14
+ const retry_lock_1 = require("./locks/retry.lock");
15
+ const sender_key_lock_1 = require("./locks/sender-key.lock");
16
+ const session_lock_1 = require("./locks/session.lock");
17
+ const signal_lock_1 = require("./locks/signal.lock");
18
+ const thread_lock_1 = require("./locks/thread.lock");
4
19
  const noop_store_1 = require("./noop.store");
5
20
  const appstate_store_1 = require("./providers/memory/appstate.store");
6
21
  const contact_store_1 = require("./providers/memory/contact.store");
7
22
  const device_list_store_1 = require("./providers/memory/device-list.store");
23
+ const identity_store_1 = require("./providers/memory/identity.store");
24
+ const message_secret_store_1 = require("./providers/memory/message-secret.store");
8
25
  const message_store_1 = require("./providers/memory/message.store");
9
26
  const participants_store_1 = require("./providers/memory/participants.store");
27
+ const pre_key_store_1 = require("./providers/memory/pre-key.store");
28
+ const privacy_token_store_1 = require("./providers/memory/privacy-token.store");
10
29
  const retry_store_1 = require("./providers/memory/retry.store");
11
30
  const sender_key_store_1 = require("./providers/memory/sender-key.store");
31
+ const session_store_1 = require("./providers/memory/session.store");
12
32
  const signal_store_1 = require("./providers/memory/signal.store");
13
33
  const thread_store_1 = require("./providers/memory/thread.store");
14
- const appstate_store_2 = require("./providers/sqlite/appstate.store");
15
- const auth_store_1 = require("./providers/sqlite/auth.store");
16
- const contact_store_2 = require("./providers/sqlite/contact.store");
17
- const device_list_store_2 = require("./providers/sqlite/device-list.store");
18
- const message_store_2 = require("./providers/sqlite/message.store");
19
- const participants_store_2 = require("./providers/sqlite/participants.store");
20
- const retry_store_2 = require("./providers/sqlite/retry.store");
21
- const sender_key_store_2 = require("./providers/sqlite/sender-key.store");
22
- const signal_store_2 = require("./providers/sqlite/signal.store");
23
- const thread_store_2 = require("./providers/sqlite/thread.store");
24
34
  const coercion_1 = require("../util/coercion");
25
- const DEFAULT_PROVIDERS = {
26
- auth: 'sqlite',
27
- signal: 'sqlite',
28
- senderKey: 'sqlite',
29
- appState: 'sqlite',
30
- messages: 'none',
31
- threads: 'none',
32
- contacts: 'none'
33
- };
34
- const DEFAULT_CACHE_PROVIDERS = {
35
- retry: 'memory',
36
- participants: 'memory',
37
- deviceList: 'memory'
38
- };
39
- const DEFAULT_CACHE_TTLS_MS = {
40
- retryMs: 7 * 24 * 60 * 60 * 1000,
35
+ const DEFAULT_CACHE_TTLS_MS = Object.freeze({
36
+ retryMs: 60 * 1000,
41
37
  participantsMs: 5 * 60 * 1000,
42
- deviceListMs: 5 * 60 * 1000
43
- };
44
- const DEFAULT_SQLITE_BATCH_SIZES = {
45
- deviceList: 500,
46
- senderKeyDistribution: 250,
47
- signalPreKey: 500,
48
- signalHasSession: 250
49
- };
50
- function resolveStoreValue(sessionId, value, domainPath) {
51
- if (!value) {
52
- return null;
53
- }
54
- const resolved = typeof value === 'function' ? value(sessionId) : value;
55
- if (!resolved) {
56
- throw new Error(`${domainPath} must resolve to a store instance`);
57
- }
58
- return resolved;
59
- }
38
+ deviceListMs: 5 * 60 * 1000,
39
+ messageSecretMs: 30 * 60 * 1000
40
+ });
60
41
  function hasDestroy(value) {
61
42
  return (!!value &&
62
43
  typeof value === 'object' &&
@@ -64,30 +45,33 @@ function hasDestroy(value) {
64
45
  typeof value.destroy === 'function');
65
46
  }
66
47
  async function destroyIfSupported(value) {
67
- if (!hasDestroy(value)) {
48
+ if (!hasDestroy(value))
68
49
  return;
69
- }
70
50
  await value.destroy();
71
51
  }
52
+ function resolveStore(sessionId, backends, provider, domain, kind, fallback) {
53
+ if (!provider || provider === 'memory' || provider === 'none') {
54
+ return fallback();
55
+ }
56
+ const backend = backends[provider];
57
+ if (!backend) {
58
+ throw new Error(`unknown backend '${provider}' for ${domain}`);
59
+ }
60
+ const factory = backend[kind][domain];
61
+ if (!factory) {
62
+ throw new Error(`backend '${provider}' does not provide ${kind}.${domain}`);
63
+ }
64
+ return factory(sessionId);
65
+ }
72
66
  function createStore(options) {
73
- const providers = {
74
- ...DEFAULT_PROVIDERS,
75
- ...(options.providers ?? {})
76
- };
77
- const cacheProviders = {
78
- ...DEFAULT_CACHE_PROVIDERS,
79
- ...(options.cacheProviders ?? {})
80
- };
67
+ const backends = (options.backends ?? {});
68
+ const providers = options.providers ?? {};
69
+ const cacheProviders = options.cacheProviders ?? {};
81
70
  const cacheTtlsMs = Object.freeze({
82
- retry: (0, coercion_1.resolvePositive)(options.cacheTtlMs?.retryMs, DEFAULT_CACHE_TTLS_MS.retryMs, 'cacheTtlMs.retryMs'),
83
- participants: (0, coercion_1.resolvePositive)(options.cacheTtlMs?.participantsMs, DEFAULT_CACHE_TTLS_MS.participantsMs, 'cacheTtlMs.participantsMs'),
84
- deviceList: (0, coercion_1.resolvePositive)(options.cacheTtlMs?.deviceListMs, DEFAULT_CACHE_TTLS_MS.deviceListMs, 'cacheTtlMs.deviceListMs')
85
- });
86
- const sqliteBatchSizes = Object.freeze({
87
- deviceList: (0, coercion_1.resolvePositive)(options.sqlite?.batchSizes?.deviceList, DEFAULT_SQLITE_BATCH_SIZES.deviceList, 'sqlite.batchSizes.deviceList'),
88
- senderKeyDistribution: (0, coercion_1.resolvePositive)(options.sqlite?.batchSizes?.senderKeyDistribution, DEFAULT_SQLITE_BATCH_SIZES.senderKeyDistribution, 'sqlite.batchSizes.senderKeyDistribution'),
89
- signalPreKey: (0, coercion_1.resolvePositive)(options.sqlite?.batchSizes?.signalPreKey, DEFAULT_SQLITE_BATCH_SIZES.signalPreKey, 'sqlite.batchSizes.signalPreKey'),
90
- signalHasSession: (0, coercion_1.resolvePositive)(options.sqlite?.batchSizes?.signalHasSession, DEFAULT_SQLITE_BATCH_SIZES.signalHasSession, 'sqlite.batchSizes.signalHasSession')
71
+ retry: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.retryMs, DEFAULT_CACHE_TTLS_MS.retryMs, 'memory.cacheTtlMs.retryMs'),
72
+ participants: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.participantsMs, DEFAULT_CACHE_TTLS_MS.participantsMs, 'memory.cacheTtlMs.participantsMs'),
73
+ deviceList: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.deviceListMs, DEFAULT_CACHE_TTLS_MS.deviceListMs, 'memory.cacheTtlMs.deviceListMs'),
74
+ messageSecret: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.messageSecretMs, DEFAULT_CACHE_TTLS_MS.messageSecretMs, 'memory.cacheTtlMs.messageSecretMs')
91
75
  });
92
76
  const sessions = new Map();
93
77
  let storeDestroyed = false;
@@ -96,184 +80,150 @@ function createStore(options) {
96
80
  if (storeDestroyed) {
97
81
  throw new Error('store has been destroyed');
98
82
  }
99
- const normalizedSessionId = sessionId.trim();
100
- if (normalizedSessionId.length === 0) {
83
+ const id = sessionId.trim();
84
+ if (id.length === 0) {
101
85
  throw new Error('sessionId must be a non-empty string');
102
86
  }
103
- const cached = sessions.get(normalizedSessionId);
104
- if (cached) {
87
+ const cached = sessions.get(id);
88
+ if (cached)
105
89
  return cached;
106
- }
107
- const resolveCustom = (value, domainPath) => resolveStoreValue(normalizedSessionId, value, domainPath);
108
- const customAuth = resolveCustom(options.custom?.auth, 'custom.auth');
109
- const customSignal = resolveCustom(options.custom?.signal, 'custom.signal');
110
- const customSenderKey = resolveCustom(options.custom?.senderKey, 'custom.senderKey');
111
- const customAppState = resolveCustom(options.custom?.appState, 'custom.appState');
112
- const customRetry = resolveCustom(options.customCache?.retry, 'customCache.retry');
113
- const customParticipants = resolveCustom(options.customCache?.participants, 'customCache.participants');
114
- const customDeviceList = resolveCustom(options.customCache?.deviceList, 'customCache.deviceList');
115
- const customMessages = resolveCustom(options.custom?.messages, 'custom.messages');
116
- const customThreads = resolveCustom(options.custom?.threads, 'custom.threads');
117
- const customContacts = resolveCustom(options.custom?.contacts, 'custom.contacts');
118
- const memoryLimits = options.memory?.limits ?? {};
119
- const requiresSqlite = !customAuth ||
120
- (!customSignal && providers.signal === 'sqlite') ||
121
- (!customSenderKey && providers.senderKey === 'sqlite') ||
122
- (!customAppState && providers.appState === 'sqlite') ||
123
- (!customRetry && cacheProviders.retry === 'sqlite') ||
124
- (!customParticipants && cacheProviders.participants === 'sqlite') ||
125
- (!customDeviceList && cacheProviders.deviceList === 'sqlite') ||
126
- (!customMessages && providers.messages === 'sqlite') ||
127
- (!customThreads && providers.threads === 'sqlite') ||
128
- (!customContacts && providers.contacts === 'sqlite');
129
- const sqlite = options.sqlite;
130
- if (requiresSqlite && (!sqlite?.path || sqlite.path.trim().length === 0)) {
131
- throw new Error('sqlite.path must be configured for unresolved sqlite domains.');
132
- }
133
- const sqliteOptions = sqlite && sqlite.path.trim().length > 0
134
- ? {
135
- path: sqlite.path,
136
- sessionId: normalizedSessionId,
137
- driver: sqlite.driver ?? 'auto',
138
- pragmas: sqlite.pragmas,
139
- tableNames: sqlite.tableNames
140
- }
141
- : null;
142
- const authStore = customAuth ?? new auth_store_1.WaAuthSqliteStore(sqliteOptions);
143
- const signalStore = customSignal ??
144
- (providers.signal === 'memory'
145
- ? new signal_store_1.WaSignalMemoryStore({
146
- maxPreKeys: memoryLimits.signalPreKeys,
147
- maxSessions: memoryLimits.signalSessions,
148
- maxRemoteIdentities: memoryLimits.signalRemoteIdentities
149
- })
150
- : new signal_store_2.WaSignalSqliteStore(sqliteOptions, {
151
- preKeyBatchSize: sqliteBatchSizes.signalPreKey,
152
- hasSessionBatchSize: sqliteBatchSizes.signalHasSession
153
- }));
154
- const senderKeyStore = customSenderKey ??
155
- (providers.senderKey === 'memory'
156
- ? new sender_key_store_1.SenderKeyMemoryStore({
157
- maxSenderKeys: memoryLimits.senderKeys,
158
- maxSenderDistributions: memoryLimits.senderDistributions
159
- })
160
- : new sender_key_store_2.SenderKeySqliteStore(sqliteOptions, sqliteBatchSizes.senderKeyDistribution));
161
- const appStateStore = customAppState ??
162
- (providers.appState === 'memory'
163
- ? new appstate_store_1.WaAppStateMemoryStore(undefined, {
164
- maxSyncKeys: memoryLimits.appStateSyncKeys,
165
- maxCollectionEntries: memoryLimits.appStateCollectionEntries
166
- })
167
- : new appstate_store_2.WaAppStateSqliteStore(sqliteOptions));
168
- const retryStore = customRetry ??
169
- (cacheProviders.retry === 'memory'
170
- ? new retry_store_1.WaRetryMemoryStore(cacheTtlsMs.retry)
171
- : new retry_store_2.WaRetrySqliteStore(sqliteOptions, cacheTtlsMs.retry));
172
- const participantsStore = customParticipants ??
173
- (cacheProviders.participants === 'sqlite'
174
- ? new participants_store_2.WaParticipantsSqliteStore(sqliteOptions, cacheTtlsMs.participants)
175
- : cacheProviders.participants === 'memory'
176
- ? new participants_store_1.WaParticipantsMemoryStore(cacheTtlsMs.participants, {
177
- maxGroups: memoryLimits.participantsGroups
178
- })
179
- : noop_store_1.NOOP_PARTICIPANTS_STORE);
180
- const deviceListStore = customDeviceList ??
181
- (cacheProviders.deviceList === 'sqlite'
182
- ? new device_list_store_2.WaDeviceListSqliteStore(sqliteOptions, cacheTtlsMs.deviceList, sqliteBatchSizes.deviceList)
183
- : cacheProviders.deviceList === 'memory'
184
- ? new device_list_store_1.WaDeviceListMemoryStore(cacheTtlsMs.deviceList, {
185
- maxUsers: memoryLimits.deviceListUsers
186
- })
187
- : noop_store_1.NOOP_DEVICE_LIST_STORE);
188
- const messageStore = customMessages ??
189
- (providers.messages === 'sqlite'
190
- ? new message_store_2.WaMessageSqliteStore(sqliteOptions)
191
- : providers.messages === 'memory'
192
- ? new message_store_1.WaMessageMemoryStore({
193
- maxMessages: memoryLimits.messages
194
- })
195
- : noop_store_1.NOOP_MESSAGE_STORE);
196
- const threadStore = customThreads ??
197
- (providers.threads === 'sqlite'
198
- ? new thread_store_2.WaThreadSqliteStore(sqliteOptions)
199
- : providers.threads === 'memory'
200
- ? new thread_store_1.WaThreadMemoryStore({
201
- maxThreads: memoryLimits.threads
202
- })
203
- : noop_store_1.NOOP_THREAD_STORE);
204
- const contactStore = customContacts ??
205
- (providers.contacts === 'sqlite'
206
- ? new contact_store_2.WaContactSqliteStore(sqliteOptions)
207
- : providers.contacts === 'memory'
208
- ? new contact_store_1.WaContactMemoryStore({
209
- maxContacts: memoryLimits.contacts
210
- })
211
- : noop_store_1.NOOP_CONTACT_STORE);
90
+ const ml = options.memory?.limits ?? {};
91
+ const rawAuth = resolveStore(id, backends, providers.auth, 'auth', 'stores', () => {
92
+ throw new Error('providers.auth is required — register a backend or set providers.auth');
93
+ });
94
+ const rawSignal = resolveStore(id, backends, providers.signal ?? 'memory', 'signal', 'stores', () => new signal_store_1.WaSignalMemoryStore());
95
+ const rawPreKey = resolveStore(id, backends, providers.preKey ?? 'memory', 'preKey', 'stores', () => new pre_key_store_1.WaPreKeyMemoryStore({ maxPreKeys: ml.signalPreKeys }));
96
+ const rawSession = resolveStore(id, backends, providers.session ?? 'memory', 'session', 'stores', () => new session_store_1.WaSessionMemoryStore({ maxSessions: ml.signalSessions }));
97
+ const rawIdentity = resolveStore(id, backends, providers.identity ?? 'memory', 'identity', 'stores', () => new identity_store_1.WaIdentityMemoryStore({
98
+ maxRemoteIdentities: ml.signalRemoteIdentities
99
+ }));
100
+ const rawSenderKey = resolveStore(id, backends, providers.senderKey ?? 'memory', 'senderKey', 'stores', () => new sender_key_store_1.SenderKeyMemoryStore({
101
+ maxSenderKeys: ml.senderKeys,
102
+ maxSenderDistributions: ml.senderDistributions
103
+ }));
104
+ const rawAppState = resolveStore(id, backends, providers.appState ?? 'memory', 'appState', 'stores', () => new appstate_store_1.WaAppStateMemoryStore(undefined, {
105
+ maxSyncKeys: ml.appStateSyncKeys,
106
+ maxCollectionEntries: ml.appStateCollectionEntries
107
+ }));
108
+ const rawMessages = resolveStore(id, backends, providers.messages ?? 'none', 'messages', 'stores', () => providers.messages === 'memory'
109
+ ? new message_store_1.WaMessageMemoryStore({ maxMessages: ml.messages })
110
+ : noop_store_1.NOOP_MESSAGE_STORE);
111
+ const rawThreads = resolveStore(id, backends, providers.threads ?? 'none', 'threads', 'stores', () => providers.threads === 'memory'
112
+ ? new thread_store_1.WaThreadMemoryStore({ maxThreads: ml.threads })
113
+ : noop_store_1.NOOP_THREAD_STORE);
114
+ const rawContacts = resolveStore(id, backends, providers.contacts ?? 'none', 'contacts', 'stores', () => providers.contacts === 'memory'
115
+ ? new contact_store_1.WaContactMemoryStore({ maxContacts: ml.contacts })
116
+ : noop_store_1.NOOP_CONTACT_STORE);
117
+ const rawPrivacyToken = resolveStore(id, backends, providers.privacyToken ?? 'memory', 'privacyToken', 'stores', () => new privacy_token_store_1.WaPrivacyTokenMemoryStore(ml.privacyTokens));
118
+ const rawRetry = resolveStore(id, backends, cacheProviders.retry ?? 'memory', 'retry', 'caches', () => cacheProviders.retry === 'memory' || !cacheProviders.retry
119
+ ? new retry_store_1.WaRetryMemoryStore(cacheTtlsMs.retry, {
120
+ maxOutboundMessages: ml.retryOutboundMessages,
121
+ maxInboundCounters: ml.retryInboundCounters
122
+ })
123
+ : noop_store_1.NOOP_RETRY_STORE);
124
+ const rawParticipants = resolveStore(id, backends, cacheProviders.participants ?? 'memory', 'participants', 'caches', () => cacheProviders.participants === 'memory'
125
+ ? new participants_store_1.WaParticipantsMemoryStore(cacheTtlsMs.participants, {
126
+ maxGroups: ml.participantsGroups
127
+ })
128
+ : noop_store_1.NOOP_PARTICIPANTS_STORE);
129
+ const rawDeviceList = resolveStore(id, backends, cacheProviders.deviceList ?? 'memory', 'deviceList', 'caches', () => cacheProviders.deviceList === 'memory'
130
+ ? new device_list_store_1.WaDeviceListMemoryStore(cacheTtlsMs.deviceList, {
131
+ maxUsers: ml.deviceListUsers
132
+ })
133
+ : noop_store_1.NOOP_DEVICE_LIST_STORE);
134
+ const rawMessageSecret = resolveStore(id, backends, cacheProviders.messageSecret ?? 'none', 'messageSecret', 'caches', () => cacheProviders.messageSecret === 'memory'
135
+ ? new message_secret_store_1.WaMessageSecretMemoryStore(cacheTtlsMs.messageSecret, {
136
+ maxSecrets: ml.messageSecrets
137
+ })
138
+ : noop_store_1.NOOP_MESSAGE_SECRET_STORE);
139
+ const authStore = (0, auth_lock_1.withAuthLock)(rawAuth);
140
+ const signalStore = (0, signal_lock_1.withSignalLock)(rawSignal);
141
+ const preKeyStore = (0, pre_key_lock_1.withPreKeyLock)(rawPreKey);
142
+ const sessionStore = (0, session_lock_1.withSessionLock)(rawSession);
143
+ const identityStore = (0, identity_lock_1.withIdentityLock)(rawIdentity);
144
+ const senderKeyStore = (0, sender_key_lock_1.withSenderKeyLock)(rawSenderKey);
145
+ const appStateStore = (0, appstate_lock_1.withAppStateLock)(rawAppState);
146
+ const retryStore = (0, retry_lock_1.withRetryLock)(rawRetry);
147
+ const participantsStore = (0, participants_lock_1.withParticipantsLock)(rawParticipants);
148
+ const deviceListStore = (0, device_list_lock_1.withDeviceListLock)(rawDeviceList);
149
+ const messageStore = (0, message_lock_1.withMessageLock)(rawMessages);
150
+ const messageSecretStore = (0, message_secret_lock_1.withMessageSecretLock)(rawMessageSecret);
151
+ const threadStore = (0, thread_lock_1.withThreadLock)(rawThreads);
152
+ const contactStore = (0, contact_lock_1.withContactLock)(rawContacts);
153
+ const privacyTokenStore = (0, privacy_token_lock_1.withPrivacyTokenLock)(rawPrivacyToken);
212
154
  let cachesDestroyed = false;
213
155
  let sessionDestroyed = false;
214
156
  const destroyCaches = async () => {
215
- if (cachesDestroyed) {
157
+ if (cachesDestroyed)
216
158
  return;
217
- }
218
159
  cachesDestroyed = true;
219
160
  await Promise.all([
220
161
  retryStore.clear(),
221
162
  participantsStore.clear(),
222
- deviceListStore.clear()
163
+ deviceListStore.clear(),
164
+ messageSecretStore.clear()
223
165
  ]);
224
166
  await Promise.all([
225
167
  destroyIfSupported(retryStore),
226
168
  destroyIfSupported(participantsStore),
227
- destroyIfSupported(deviceListStore)
169
+ destroyIfSupported(deviceListStore),
170
+ destroyIfSupported(messageSecretStore)
228
171
  ]);
229
172
  };
230
173
  const destroy = async () => {
231
- if (sessionDestroyed) {
174
+ if (sessionDestroyed)
232
175
  return;
233
- }
234
176
  sessionDestroyed = true;
235
177
  await destroyCaches();
236
178
  await Promise.all([
237
179
  destroyIfSupported(authStore),
238
180
  destroyIfSupported(signalStore),
181
+ destroyIfSupported(preKeyStore),
182
+ destroyIfSupported(sessionStore),
183
+ destroyIfSupported(identityStore),
239
184
  destroyIfSupported(senderKeyStore),
240
185
  destroyIfSupported(appStateStore),
241
186
  destroyIfSupported(messageStore),
242
187
  destroyIfSupported(threadStore),
243
- destroyIfSupported(contactStore)
188
+ destroyIfSupported(contactStore),
189
+ destroyIfSupported(privacyTokenStore)
244
190
  ]);
245
191
  };
246
- const session = {
192
+ const storeSession = {
247
193
  auth: authStore,
248
194
  signal: signalStore,
195
+ preKey: preKeyStore,
196
+ session: sessionStore,
197
+ identity: identityStore,
249
198
  senderKey: senderKeyStore,
250
199
  appState: appStateStore,
251
200
  retry: retryStore,
252
201
  participants: participantsStore,
253
202
  deviceList: deviceListStore,
254
203
  messages: messageStore,
204
+ messageSecret: messageSecretStore,
255
205
  threads: threadStore,
256
206
  contacts: contactStore,
207
+ privacyToken: privacyTokenStore,
257
208
  destroyCaches,
258
209
  destroy
259
210
  };
260
- sessions.set(normalizedSessionId, session);
261
- return session;
211
+ sessions.set(id, storeSession);
212
+ return storeSession;
262
213
  },
263
214
  async destroyCaches() {
264
- for (const session of sessions.values()) {
265
- await session.destroyCaches();
266
- }
215
+ const list = Array.from(sessions.values());
216
+ await Promise.all(list.map((s) => s.destroyCaches()));
267
217
  },
268
218
  async destroy() {
269
- if (storeDestroyed) {
219
+ if (storeDestroyed)
270
220
  return;
271
- }
272
221
  storeDestroyed = true;
273
- for (const [sessionId, session] of sessions) {
274
- sessions.delete(sessionId);
275
- await session.destroy();
276
- }
222
+ const list = Array.from(sessions.values());
223
+ sessions.clear();
224
+ await Promise.all(list.map((s) => s.destroy()));
225
+ const uniqueBackends = new Set(Object.values(backends));
226
+ await Promise.all(Array.from(uniqueBackends, (backend) => destroyIfSupported(backend)));
277
227
  }
278
228
  };
279
229
  }
@@ -1,43 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaThreadSqliteStore = exports.WaMessageSqliteStore = exports.WaContactSqliteStore = exports.WaThreadMemoryStore = exports.WaMessageMemoryStore = exports.WaContactMemoryStore = exports.WaDeviceListMemoryStore = exports.WaParticipantsMemoryStore = exports.WaRetryMemoryStore = exports.SenderKeyMemoryStore = exports.WaSignalMemoryStore = exports.WaAppStateMemoryStore = exports.WaDeviceListSqliteStore = exports.WaParticipantsSqliteStore = exports.WaRetrySqliteStore = exports.SenderKeySqliteStore = exports.WaSignalSqliteStore = exports.createStore = exports.WaAppStateSqliteStore = exports.WaAuthSqliteStore = void 0;
4
- var auth_store_1 = require("./providers/sqlite/auth.store");
5
- Object.defineProperty(exports, "WaAuthSqliteStore", { enumerable: true, get: function () { return auth_store_1.WaAuthSqliteStore; } });
6
- var appstate_store_1 = require("./providers/sqlite/appstate.store");
7
- Object.defineProperty(exports, "WaAppStateSqliteStore", { enumerable: true, get: function () { return appstate_store_1.WaAppStateSqliteStore; } });
3
+ exports.WaPrivacyTokenMemoryStore = exports.WaThreadMemoryStore = exports.WaMessageMemoryStore = exports.WaMessageSecretMemoryStore = exports.WaContactMemoryStore = exports.WaDeviceListMemoryStore = exports.WaParticipantsMemoryStore = exports.WaRetryMemoryStore = exports.SenderKeyMemoryStore = exports.WaIdentityMemoryStore = exports.WaSessionMemoryStore = exports.WaPreKeyMemoryStore = exports.WaSignalMemoryStore = exports.WaAppStateMemoryStore = exports.createStore = void 0;
8
4
  var createStore_1 = require("./createStore");
9
5
  Object.defineProperty(exports, "createStore", { enumerable: true, get: function () { return createStore_1.createStore; } });
10
- var signal_store_1 = require("./providers/sqlite/signal.store");
11
- Object.defineProperty(exports, "WaSignalSqliteStore", { enumerable: true, get: function () { return signal_store_1.WaSignalSqliteStore; } });
12
- var sender_key_store_1 = require("./providers/sqlite/sender-key.store");
13
- Object.defineProperty(exports, "SenderKeySqliteStore", { enumerable: true, get: function () { return sender_key_store_1.SenderKeySqliteStore; } });
14
- var retry_store_1 = require("./providers/sqlite/retry.store");
15
- Object.defineProperty(exports, "WaRetrySqliteStore", { enumerable: true, get: function () { return retry_store_1.WaRetrySqliteStore; } });
16
- var participants_store_1 = require("./providers/sqlite/participants.store");
17
- Object.defineProperty(exports, "WaParticipantsSqliteStore", { enumerable: true, get: function () { return participants_store_1.WaParticipantsSqliteStore; } });
18
- var device_list_store_1 = require("./providers/sqlite/device-list.store");
19
- Object.defineProperty(exports, "WaDeviceListSqliteStore", { enumerable: true, get: function () { return device_list_store_1.WaDeviceListSqliteStore; } });
20
- var appstate_store_2 = require("./providers/memory/appstate.store");
21
- Object.defineProperty(exports, "WaAppStateMemoryStore", { enumerable: true, get: function () { return appstate_store_2.WaAppStateMemoryStore; } });
22
- var signal_store_2 = require("./providers/memory/signal.store");
23
- Object.defineProperty(exports, "WaSignalMemoryStore", { enumerable: true, get: function () { return signal_store_2.WaSignalMemoryStore; } });
24
- var sender_key_store_2 = require("./providers/memory/sender-key.store");
25
- Object.defineProperty(exports, "SenderKeyMemoryStore", { enumerable: true, get: function () { return sender_key_store_2.SenderKeyMemoryStore; } });
26
- var retry_store_2 = require("./providers/memory/retry.store");
27
- Object.defineProperty(exports, "WaRetryMemoryStore", { enumerable: true, get: function () { return retry_store_2.WaRetryMemoryStore; } });
28
- var participants_store_2 = require("./providers/memory/participants.store");
29
- Object.defineProperty(exports, "WaParticipantsMemoryStore", { enumerable: true, get: function () { return participants_store_2.WaParticipantsMemoryStore; } });
30
- var device_list_store_2 = require("./providers/memory/device-list.store");
31
- Object.defineProperty(exports, "WaDeviceListMemoryStore", { enumerable: true, get: function () { return device_list_store_2.WaDeviceListMemoryStore; } });
6
+ var appstate_store_1 = require("./providers/memory/appstate.store");
7
+ Object.defineProperty(exports, "WaAppStateMemoryStore", { enumerable: true, get: function () { return appstate_store_1.WaAppStateMemoryStore; } });
8
+ var signal_store_1 = require("./providers/memory/signal.store");
9
+ Object.defineProperty(exports, "WaSignalMemoryStore", { enumerable: true, get: function () { return signal_store_1.WaSignalMemoryStore; } });
10
+ var pre_key_store_1 = require("./providers/memory/pre-key.store");
11
+ Object.defineProperty(exports, "WaPreKeyMemoryStore", { enumerable: true, get: function () { return pre_key_store_1.WaPreKeyMemoryStore; } });
12
+ var session_store_1 = require("./providers/memory/session.store");
13
+ Object.defineProperty(exports, "WaSessionMemoryStore", { enumerable: true, get: function () { return session_store_1.WaSessionMemoryStore; } });
14
+ var identity_store_1 = require("./providers/memory/identity.store");
15
+ Object.defineProperty(exports, "WaIdentityMemoryStore", { enumerable: true, get: function () { return identity_store_1.WaIdentityMemoryStore; } });
16
+ var sender_key_store_1 = require("./providers/memory/sender-key.store");
17
+ Object.defineProperty(exports, "SenderKeyMemoryStore", { enumerable: true, get: function () { return sender_key_store_1.SenderKeyMemoryStore; } });
18
+ var retry_store_1 = require("./providers/memory/retry.store");
19
+ Object.defineProperty(exports, "WaRetryMemoryStore", { enumerable: true, get: function () { return retry_store_1.WaRetryMemoryStore; } });
20
+ var participants_store_1 = require("./providers/memory/participants.store");
21
+ Object.defineProperty(exports, "WaParticipantsMemoryStore", { enumerable: true, get: function () { return participants_store_1.WaParticipantsMemoryStore; } });
22
+ var device_list_store_1 = require("./providers/memory/device-list.store");
23
+ Object.defineProperty(exports, "WaDeviceListMemoryStore", { enumerable: true, get: function () { return device_list_store_1.WaDeviceListMemoryStore; } });
32
24
  var contact_store_1 = require("./providers/memory/contact.store");
33
25
  Object.defineProperty(exports, "WaContactMemoryStore", { enumerable: true, get: function () { return contact_store_1.WaContactMemoryStore; } });
26
+ var message_secret_store_1 = require("./providers/memory/message-secret.store");
27
+ Object.defineProperty(exports, "WaMessageSecretMemoryStore", { enumerable: true, get: function () { return message_secret_store_1.WaMessageSecretMemoryStore; } });
34
28
  var message_store_1 = require("./providers/memory/message.store");
35
29
  Object.defineProperty(exports, "WaMessageMemoryStore", { enumerable: true, get: function () { return message_store_1.WaMessageMemoryStore; } });
36
30
  var thread_store_1 = require("./providers/memory/thread.store");
37
31
  Object.defineProperty(exports, "WaThreadMemoryStore", { enumerable: true, get: function () { return thread_store_1.WaThreadMemoryStore; } });
38
- var contact_store_2 = require("./providers/sqlite/contact.store");
39
- Object.defineProperty(exports, "WaContactSqliteStore", { enumerable: true, get: function () { return contact_store_2.WaContactSqliteStore; } });
40
- var message_store_2 = require("./providers/sqlite/message.store");
41
- Object.defineProperty(exports, "WaMessageSqliteStore", { enumerable: true, get: function () { return message_store_2.WaMessageSqliteStore; } });
42
- var thread_store_2 = require("./providers/sqlite/thread.store");
43
- Object.defineProperty(exports, "WaThreadSqliteStore", { enumerable: true, get: function () { return thread_store_2.WaThreadSqliteStore; } });
32
+ var privacy_token_store_1 = require("./providers/memory/privacy-token.store");
33
+ Object.defineProperty(exports, "WaPrivacyTokenMemoryStore", { enumerable: true, get: function () { return privacy_token_store_1.WaPrivacyTokenMemoryStore; } });
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withAppStateLock = withAppStateLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ const bytes_1 = require("../../util/bytes");
7
+ const WA_APPSTATE_CLEAR_KEY = 'appstate:clear';
8
+ function withAppStateLock(store) {
9
+ const lock = new StoreLock_1.StoreLock();
10
+ const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
11
+ const destroyStore = store;
12
+ return {
13
+ exportData: () => gate.runShared(() => store.exportData()),
14
+ upsertSyncKeys: (keys) => gate.runShared(() => lock.runMany(keys.map((key) => `appstate:syncKey:${(0, bytes_1.bytesToHex)(key.keyId)}`), () => store.upsertSyncKeys(keys))),
15
+ getSyncKeysBatch: (keyIds) => gate.runShared(() => store.getSyncKeysBatch(keyIds)),
16
+ getSyncKeyData: (keyId) => gate.runShared(() => store.getSyncKeyData(keyId)),
17
+ getSyncKeyDataBatch: (keyIds) => gate.runShared(() => store.getSyncKeyDataBatch(keyIds)),
18
+ getActiveSyncKey: () => gate.runShared(() => store.getActiveSyncKey()),
19
+ getCollectionState: (collection) => gate.runShared(() => store.getCollectionState(collection)),
20
+ getCollectionStates: (collections) => gate.runShared(() => store.getCollectionStates(collections)),
21
+ setCollectionStates: (updates) => gate.runShared(() => lock.runMany(updates.map((update) => `appstate:collection:${update.collection}`), () => store.setCollectionStates(updates))),
22
+ clear: () => gate.runExclusive(() => lock.run(WA_APPSTATE_CLEAR_KEY, () => store.clear())),
23
+ destroy: async () => {
24
+ await gate.close();
25
+ await lock.shutdown();
26
+ await destroyStore.destroy?.();
27
+ }
28
+ };
29
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withAuthLock = withAuthLock;
4
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
5
+ const WA_AUTH_KEY = 'credentials';
6
+ function withAuthLock(store) {
7
+ const lock = new StoreLock_1.StoreLock();
8
+ const destroyStore = store;
9
+ return {
10
+ load: () => lock.run(WA_AUTH_KEY, () => store.load()),
11
+ save: (credentials) => lock.run(WA_AUTH_KEY, () => store.save(credentials)),
12
+ clear: () => lock.run(WA_AUTH_KEY, () => store.clear()),
13
+ destroy: async () => {
14
+ await lock.shutdown();
15
+ await destroyStore.destroy?.();
16
+ }
17
+ };
18
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withContactLock = withContactLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ const WA_CONTACT_CLEAR_KEY = 'contact:clear';
7
+ function withContactLock(store) {
8
+ const lock = new StoreLock_1.StoreLock();
9
+ const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
10
+ const destroyStore = store;
11
+ return {
12
+ upsert: (record) => gate.runShared(() => lock.run(`contact:${record.jid}`, () => store.upsert(record))),
13
+ upsertBatch: (records) => gate.runShared(() => lock.runMany(records.map((record) => `contact:${record.jid}`), () => store.upsertBatch(records))),
14
+ getByJid: (jid) => gate.runShared(() => store.getByJid(jid)),
15
+ deleteByJid: (jid) => gate.runShared(() => lock.run(`contact:${jid}`, () => store.deleteByJid(jid))),
16
+ clear: () => gate.runExclusive(() => lock.run(WA_CONTACT_CLEAR_KEY, () => store.clear())),
17
+ destroy: async () => {
18
+ await gate.close();
19
+ await lock.shutdown();
20
+ await destroyStore.destroy?.();
21
+ }
22
+ };
23
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withDeviceListLock = withDeviceListLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ const WA_DEVICE_LIST_CLEAR_KEY = 'deviceList:clear';
7
+ const WA_DEVICE_LIST_CLEANUP_KEY = 'deviceList:cleanup';
8
+ function withDeviceListLock(store) {
9
+ const lock = new StoreLock_1.StoreLock();
10
+ const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
11
+ return {
12
+ destroy: async () => {
13
+ await gate.close();
14
+ await lock.shutdown();
15
+ await store.destroy?.();
16
+ },
17
+ upsertUserDevicesBatch: (snapshots) => gate.runShared(() => lock.runMany(snapshots.map((snapshot) => `deviceList:user:${snapshot.userJid}`), () => store.upsertUserDevicesBatch(snapshots))),
18
+ getUserDevicesBatch: (userJids, nowMs) => gate.runShared(() => store.getUserDevicesBatch(userJids, nowMs)),
19
+ deleteUserDevices: (userJid) => gate.runShared(() => lock.run(`deviceList:user:${userJid}`, () => store.deleteUserDevices(userJid))),
20
+ cleanupExpired: (nowMs) => gate.runExclusive(() => lock.run(WA_DEVICE_LIST_CLEANUP_KEY, () => store.cleanupExpired(nowMs))),
21
+ clear: () => gate.runExclusive(() => lock.run(WA_DEVICE_LIST_CLEAR_KEY, () => store.clear()))
22
+ };
23
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withIdentityLock = withIdentityLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ function withIdentityLock(store) {
6
+ const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
7
+ const destroyStore = store;
8
+ return {
9
+ getRemoteIdentity: (address) => gate.runShared(() => store.getRemoteIdentity(address)),
10
+ getRemoteIdentities: (addresses) => gate.runShared(() => store.getRemoteIdentities(addresses)),
11
+ setRemoteIdentity: (address, identityKey) => gate.runShared(() => store.setRemoteIdentity(address, identityKey)),
12
+ setRemoteIdentities: (entries) => gate.runShared(() => store.setRemoteIdentities(entries)),
13
+ clear: () => gate.runExclusive(() => store.clear()),
14
+ destroy: async () => {
15
+ await gate.close();
16
+ await destroyStore.destroy?.();
17
+ }
18
+ };
19
+ }