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
@@ -1,62 +1,34 @@
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 message_lock_1 = require("./locks/message.lock");
9
+ const participants_lock_1 = require("./locks/participants.lock");
10
+ const privacy_token_lock_1 = require("./locks/privacy-token.lock");
11
+ const retry_lock_1 = require("./locks/retry.lock");
12
+ const sender_key_lock_1 = require("./locks/sender-key.lock");
13
+ const signal_lock_1 = require("./locks/signal.lock");
14
+ const thread_lock_1 = require("./locks/thread.lock");
4
15
  const noop_store_1 = require("./noop.store");
5
16
  const appstate_store_1 = require("./providers/memory/appstate.store");
6
17
  const contact_store_1 = require("./providers/memory/contact.store");
7
18
  const device_list_store_1 = require("./providers/memory/device-list.store");
8
19
  const message_store_1 = require("./providers/memory/message.store");
9
20
  const participants_store_1 = require("./providers/memory/participants.store");
21
+ const privacy_token_store_1 = require("./providers/memory/privacy-token.store");
10
22
  const retry_store_1 = require("./providers/memory/retry.store");
11
23
  const sender_key_store_1 = require("./providers/memory/sender-key.store");
12
24
  const signal_store_1 = require("./providers/memory/signal.store");
13
25
  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
26
  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,
27
+ const DEFAULT_CACHE_TTLS_MS = Object.freeze({
28
+ retryMs: 60 * 1000,
41
29
  participantsMs: 5 * 60 * 1000,
42
30
  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
- }
31
+ });
60
32
  function hasDestroy(value) {
61
33
  return (!!value &&
62
34
  typeof value === 'object' &&
@@ -64,30 +36,32 @@ function hasDestroy(value) {
64
36
  typeof value.destroy === 'function');
65
37
  }
66
38
  async function destroyIfSupported(value) {
67
- if (!hasDestroy(value)) {
39
+ if (!hasDestroy(value))
68
40
  return;
69
- }
70
41
  await value.destroy();
71
42
  }
43
+ function resolveStore(sessionId, backends, provider, domain, kind, fallback) {
44
+ if (!provider || provider === 'memory' || provider === 'none') {
45
+ return fallback();
46
+ }
47
+ const backend = backends[provider];
48
+ if (!backend) {
49
+ throw new Error(`unknown backend '${provider}' for ${domain}`);
50
+ }
51
+ const factory = backend[kind][domain];
52
+ if (!factory) {
53
+ throw new Error(`backend '${provider}' does not provide ${kind}.${domain}`);
54
+ }
55
+ return factory(sessionId);
56
+ }
72
57
  function createStore(options) {
73
- const providers = {
74
- ...DEFAULT_PROVIDERS,
75
- ...(options.providers ?? {})
76
- };
77
- const cacheProviders = {
78
- ...DEFAULT_CACHE_PROVIDERS,
79
- ...(options.cacheProviders ?? {})
80
- };
58
+ const backends = (options.backends ?? {});
59
+ const providers = options.providers ?? {};
60
+ const cacheProviders = options.cacheProviders ?? {};
81
61
  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')
62
+ retry: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.retryMs, DEFAULT_CACHE_TTLS_MS.retryMs, 'memory.cacheTtlMs.retryMs'),
63
+ participants: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.participantsMs, DEFAULT_CACHE_TTLS_MS.participantsMs, 'memory.cacheTtlMs.participantsMs'),
64
+ deviceList: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.deviceListMs, DEFAULT_CACHE_TTLS_MS.deviceListMs, 'memory.cacheTtlMs.deviceListMs')
91
65
  });
92
66
  const sessions = new Map();
93
67
  let storeDestroyed = false;
@@ -96,125 +70,67 @@ function createStore(options) {
96
70
  if (storeDestroyed) {
97
71
  throw new Error('store has been destroyed');
98
72
  }
99
- const normalizedSessionId = sessionId.trim();
100
- if (normalizedSessionId.length === 0) {
73
+ const id = sessionId.trim();
74
+ if (id.length === 0) {
101
75
  throw new Error('sessionId must be a non-empty string');
102
76
  }
103
- const cached = sessions.get(normalizedSessionId);
104
- if (cached) {
77
+ const cached = sessions.get(id);
78
+ if (cached)
105
79
  return cached;
106
- }
107
- const custom = options.custom;
108
- const customCache = options.customCache;
109
- const customAuth = resolveStoreValue(normalizedSessionId, custom?.auth, 'custom.auth');
110
- const customSignal = resolveStoreValue(normalizedSessionId, custom?.signal, 'custom.signal');
111
- const customSenderKey = resolveStoreValue(normalizedSessionId, custom?.senderKey, 'custom.senderKey');
112
- const customAppState = resolveStoreValue(normalizedSessionId, custom?.appState, 'custom.appState');
113
- const customRetry = resolveStoreValue(normalizedSessionId, customCache?.retry, 'customCache.retry');
114
- const customParticipants = resolveStoreValue(normalizedSessionId, customCache?.participants, 'customCache.participants');
115
- const customDeviceList = resolveStoreValue(normalizedSessionId, customCache?.deviceList, 'customCache.deviceList');
116
- const customMessages = resolveStoreValue(normalizedSessionId, custom?.messages, 'custom.messages');
117
- const customThreads = resolveStoreValue(normalizedSessionId, custom?.threads, 'custom.threads');
118
- const customContacts = resolveStoreValue(normalizedSessionId, custom?.contacts, 'custom.contacts');
119
- const memoryLimits = options.memory?.limits ?? {};
120
- const requiresSqlite = !customAuth ||
121
- (!customSignal && providers.signal === 'sqlite') ||
122
- (!customSenderKey && providers.senderKey === 'sqlite') ||
123
- (!customAppState && providers.appState === 'sqlite') ||
124
- (!customRetry && cacheProviders.retry === 'sqlite') ||
125
- (!customParticipants && cacheProviders.participants === 'sqlite') ||
126
- (!customDeviceList && cacheProviders.deviceList === 'sqlite') ||
127
- (!customMessages && providers.messages === 'sqlite') ||
128
- (!customThreads && providers.threads === 'sqlite') ||
129
- (!customContacts && providers.contacts === 'sqlite');
130
- const sqlite = options.sqlite;
131
- if (requiresSqlite && (!sqlite?.path || sqlite.path.trim().length === 0)) {
132
- throw new Error('sqlite.path must be configured for unresolved sqlite domains.');
133
- }
134
- const sqliteOptions = sqlite && sqlite.path.trim().length > 0
135
- ? {
136
- path: sqlite.path,
137
- sessionId: normalizedSessionId,
138
- driver: sqlite.driver ?? 'auto',
139
- pragmas: sqlite.pragmas
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);
80
+ const ml = options.memory?.limits ?? {};
81
+ const rawAuth = resolveStore(id, backends, providers.auth, 'auth', 'stores', () => {
82
+ throw new Error('providers.auth is required — register a backend or set providers.auth');
83
+ });
84
+ const rawSignal = resolveStore(id, backends, providers.signal ?? 'memory', 'signal', 'stores', () => new signal_store_1.WaSignalMemoryStore({
85
+ maxPreKeys: ml.signalPreKeys,
86
+ maxSessions: ml.signalSessions,
87
+ maxRemoteIdentities: ml.signalRemoteIdentities
88
+ }));
89
+ const rawSenderKey = resolveStore(id, backends, providers.senderKey ?? 'memory', 'senderKey', 'stores', () => new sender_key_store_1.SenderKeyMemoryStore({
90
+ maxSenderKeys: ml.senderKeys,
91
+ maxSenderDistributions: ml.senderDistributions
92
+ }));
93
+ const rawAppState = resolveStore(id, backends, providers.appState ?? 'memory', 'appState', 'stores', () => new appstate_store_1.WaAppStateMemoryStore(undefined, {
94
+ maxSyncKeys: ml.appStateSyncKeys,
95
+ maxCollectionEntries: ml.appStateCollectionEntries
96
+ }));
97
+ const rawMessages = resolveStore(id, backends, providers.messages ?? 'none', 'messages', 'stores', () => providers.messages === 'memory'
98
+ ? new message_store_1.WaMessageMemoryStore({ maxMessages: ml.messages })
99
+ : noop_store_1.NOOP_MESSAGE_STORE);
100
+ const rawThreads = resolveStore(id, backends, providers.threads ?? 'none', 'threads', 'stores', () => providers.threads === 'memory'
101
+ ? new thread_store_1.WaThreadMemoryStore({ maxThreads: ml.threads })
102
+ : noop_store_1.NOOP_THREAD_STORE);
103
+ const rawContacts = resolveStore(id, backends, providers.contacts ?? 'none', 'contacts', 'stores', () => providers.contacts === 'memory'
104
+ ? new contact_store_1.WaContactMemoryStore({ maxContacts: ml.contacts })
105
+ : noop_store_1.NOOP_CONTACT_STORE);
106
+ const rawPrivacyToken = resolveStore(id, backends, providers.privacyToken ?? 'memory', 'privacyToken', 'stores', () => new privacy_token_store_1.WaPrivacyTokenMemoryStore(ml.privacyTokens));
107
+ const rawRetry = resolveStore(id, backends, cacheProviders.retry ?? 'memory', 'retry', 'caches', () => new retry_store_1.WaRetryMemoryStore(cacheTtlsMs.retry));
108
+ const rawParticipants = resolveStore(id, backends, cacheProviders.participants ?? 'memory', 'participants', 'caches', () => cacheProviders.participants === 'memory'
109
+ ? new participants_store_1.WaParticipantsMemoryStore(cacheTtlsMs.participants, {
110
+ maxGroups: ml.participantsGroups
111
+ })
112
+ : noop_store_1.NOOP_PARTICIPANTS_STORE);
113
+ const rawDeviceList = resolveStore(id, backends, cacheProviders.deviceList ?? 'memory', 'deviceList', 'caches', () => cacheProviders.deviceList === 'memory'
114
+ ? new device_list_store_1.WaDeviceListMemoryStore(cacheTtlsMs.deviceList, {
115
+ maxUsers: ml.deviceListUsers
116
+ })
117
+ : noop_store_1.NOOP_DEVICE_LIST_STORE);
118
+ const authStore = (0, auth_lock_1.withAuthLock)(rawAuth);
119
+ const signalStore = (0, signal_lock_1.withSignalLock)(rawSignal);
120
+ const senderKeyStore = (0, sender_key_lock_1.withSenderKeyLock)(rawSenderKey);
121
+ const appStateStore = (0, appstate_lock_1.withAppStateLock)(rawAppState);
122
+ const retryStore = (0, retry_lock_1.withRetryLock)(rawRetry);
123
+ const participantsStore = (0, participants_lock_1.withParticipantsLock)(rawParticipants);
124
+ const deviceListStore = (0, device_list_lock_1.withDeviceListLock)(rawDeviceList);
125
+ const messageStore = (0, message_lock_1.withMessageLock)(rawMessages);
126
+ const threadStore = (0, thread_lock_1.withThreadLock)(rawThreads);
127
+ const contactStore = (0, contact_lock_1.withContactLock)(rawContacts);
128
+ const privacyTokenStore = (0, privacy_token_lock_1.withPrivacyTokenLock)(rawPrivacyToken);
212
129
  let cachesDestroyed = false;
213
130
  let sessionDestroyed = false;
214
131
  const destroyCaches = async () => {
215
- if (cachesDestroyed) {
132
+ if (cachesDestroyed)
216
133
  return;
217
- }
218
134
  cachesDestroyed = true;
219
135
  await Promise.all([
220
136
  retryStore.clear(),
@@ -228,9 +144,8 @@ function createStore(options) {
228
144
  ]);
229
145
  };
230
146
  const destroy = async () => {
231
- if (sessionDestroyed) {
147
+ if (sessionDestroyed)
232
148
  return;
233
- }
234
149
  sessionDestroyed = true;
235
150
  await destroyCaches();
236
151
  await Promise.all([
@@ -240,7 +155,8 @@ function createStore(options) {
240
155
  destroyIfSupported(appStateStore),
241
156
  destroyIfSupported(messageStore),
242
157
  destroyIfSupported(threadStore),
243
- destroyIfSupported(contactStore)
158
+ destroyIfSupported(contactStore),
159
+ destroyIfSupported(privacyTokenStore)
244
160
  ]);
245
161
  };
246
162
  const session = {
@@ -254,28 +170,24 @@ function createStore(options) {
254
170
  messages: messageStore,
255
171
  threads: threadStore,
256
172
  contacts: contactStore,
173
+ privacyToken: privacyTokenStore,
257
174
  destroyCaches,
258
175
  destroy
259
176
  };
260
- sessions.set(normalizedSessionId, session);
177
+ sessions.set(id, session);
261
178
  return session;
262
179
  },
263
180
  async destroyCaches() {
264
- const activeSessions = [...sessions.values()];
265
- for (const session of activeSessions) {
266
- await session.destroyCaches();
267
- }
181
+ const list = Array.from(sessions.values());
182
+ await Promise.all(list.map((s) => s.destroyCaches()));
268
183
  },
269
184
  async destroy() {
270
- if (storeDestroyed) {
185
+ if (storeDestroyed)
271
186
  return;
272
- }
273
187
  storeDestroyed = true;
274
- const activeSessions = [...sessions.values()];
188
+ const list = Array.from(sessions.values());
275
189
  sessions.clear();
276
- for (const session of activeSessions) {
277
- await session.destroy();
278
- }
190
+ await Promise.all(list.map((s) => s.destroy()));
279
191
  }
280
192
  };
281
193
  }
@@ -1,43 +1,25 @@
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.WaContactMemoryStore = exports.WaDeviceListMemoryStore = exports.WaParticipantsMemoryStore = exports.WaRetryMemoryStore = exports.SenderKeyMemoryStore = 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 sender_key_store_1 = require("./providers/memory/sender-key.store");
11
+ Object.defineProperty(exports, "SenderKeyMemoryStore", { enumerable: true, get: function () { return sender_key_store_1.SenderKeyMemoryStore; } });
12
+ var retry_store_1 = require("./providers/memory/retry.store");
13
+ Object.defineProperty(exports, "WaRetryMemoryStore", { enumerable: true, get: function () { return retry_store_1.WaRetryMemoryStore; } });
14
+ var participants_store_1 = require("./providers/memory/participants.store");
15
+ Object.defineProperty(exports, "WaParticipantsMemoryStore", { enumerable: true, get: function () { return participants_store_1.WaParticipantsMemoryStore; } });
16
+ var device_list_store_1 = require("./providers/memory/device-list.store");
17
+ Object.defineProperty(exports, "WaDeviceListMemoryStore", { enumerable: true, get: function () { return device_list_store_1.WaDeviceListMemoryStore; } });
32
18
  var contact_store_1 = require("./providers/memory/contact.store");
33
19
  Object.defineProperty(exports, "WaContactMemoryStore", { enumerable: true, get: function () { return contact_store_1.WaContactMemoryStore; } });
34
20
  var message_store_1 = require("./providers/memory/message.store");
35
21
  Object.defineProperty(exports, "WaMessageMemoryStore", { enumerable: true, get: function () { return message_store_1.WaMessageMemoryStore; } });
36
22
  var thread_store_1 = require("./providers/memory/thread.store");
37
23
  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; } });
24
+ var privacy_token_store_1 = require("./providers/memory/privacy-token.store");
25
+ 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,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withMessageLock = withMessageLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ const WA_MESSAGE_CLEAR_KEY = 'message:clear';
7
+ function withMessageLock(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(`message:${record.id}`, () => store.upsert(record))),
13
+ upsertBatch: (records) => gate.runShared(() => lock.runMany(records.map((record) => `message:${record.id}`), () => store.upsertBatch(records))),
14
+ getById: (id) => gate.runShared(() => store.getById(id)),
15
+ listByThread: (threadJid, limit, beforeTimestampMs) => gate.runShared(() => store.listByThread(threadJid, limit, beforeTimestampMs)),
16
+ deleteById: (id) => gate.runShared(() => lock.run(`message:${id}`, () => store.deleteById(id))),
17
+ clear: () => gate.runExclusive(() => lock.run(WA_MESSAGE_CLEAR_KEY, () => store.clear())),
18
+ destroy: async () => {
19
+ await gate.close();
20
+ await lock.shutdown();
21
+ await destroyStore.destroy?.();
22
+ }
23
+ };
24
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withParticipantsLock = withParticipantsLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ const WA_PARTICIPANTS_CLEAR_KEY = 'participants:clear';
7
+ const WA_PARTICIPANTS_CLEANUP_KEY = 'participants:cleanup';
8
+ function withParticipantsLock(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
+ upsertGroupParticipants: (snapshot) => gate.runShared(() => lock.run(`participants:group:${snapshot.groupJid}`, () => store.upsertGroupParticipants(snapshot))),
18
+ getGroupParticipants: (groupJid, nowMs) => gate.runShared(() => store.getGroupParticipants(groupJid, nowMs)),
19
+ deleteGroupParticipants: (groupJid) => gate.runShared(() => lock.run(`participants:group:${groupJid}`, () => store.deleteGroupParticipants(groupJid))),
20
+ cleanupExpired: (nowMs) => gate.runExclusive(() => lock.run(WA_PARTICIPANTS_CLEANUP_KEY, () => store.cleanupExpired(nowMs))),
21
+ clear: () => gate.runExclusive(() => lock.run(WA_PARTICIPANTS_CLEAR_KEY, () => store.clear()))
22
+ };
23
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withPrivacyTokenLock = withPrivacyTokenLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ function withPrivacyTokenLock(store) {
7
+ const lock = new StoreLock_1.StoreLock();
8
+ const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
9
+ return {
10
+ destroy: async () => {
11
+ await gate.close();
12
+ await lock.shutdown();
13
+ await store.destroy?.();
14
+ },
15
+ upsert: (record) => gate.runShared(() => lock.run(`pt:${record.jid}`, () => store.upsert(record))),
16
+ upsertBatch: (records) => gate.runExclusive(() => store.upsertBatch(records)),
17
+ getByJid: (jid) => gate.runShared(() => store.getByJid(jid)),
18
+ deleteByJid: (jid) => gate.runShared(() => lock.run(`pt:${jid}`, () => store.deleteByJid(jid))),
19
+ clear: () => gate.runExclusive(() => store.clear())
20
+ };
21
+ }