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,240 +0,0 @@
1
- import { toSafeNumber } from '../../../util/primitives.js';
2
- import { isBunRuntime } from '../../../util/runtime.js';
3
- const BETTER_SQLITE3_MODULE = 'better-sqlite3';
4
- const BUN_SQLITE_MODULE = 'bun:sqlite';
5
- const SQLITE_PRAGMA_TOKEN_PATTERN = /^[A-Za-z0-9_+-]+$/;
6
- const DEFAULT_SQLITE_PRAGMAS = Object.freeze({
7
- journal_mode: 'WAL',
8
- synchronous: 'normal',
9
- busy_timeout: 5000
10
- });
11
- const ALLOWED_SQLITE_PRAGMAS = {
12
- auto_vacuum: 'token_or_int',
13
- busy_timeout: 'int',
14
- cache_size: 'int',
15
- foreign_keys: 'token_or_int',
16
- journal_mode: 'token',
17
- journal_size_limit: 'int',
18
- legacy_alter_table: 'token_or_int',
19
- locking_mode: 'token',
20
- mmap_size: 'int',
21
- page_size: 'int',
22
- recursive_triggers: 'token_or_int',
23
- secure_delete: 'token_or_int',
24
- synchronous: 'token_or_int',
25
- temp_store: 'token_or_int',
26
- wal_autocheckpoint: 'int'
27
- };
28
- function asConstructor(loaded) {
29
- if (typeof loaded === 'function') {
30
- return loaded;
31
- }
32
- if (loaded && typeof loaded === 'object') {
33
- const candidate = loaded.default;
34
- if (typeof candidate === 'function') {
35
- return candidate;
36
- }
37
- }
38
- throw new Error('invalid sqlite driver export');
39
- }
40
- function statementFor(db, sql) {
41
- const prepare = db.prepare ?? db.query;
42
- if (!prepare) {
43
- throw new Error('sqlite driver does not expose prepare/query method');
44
- }
45
- const statement = prepare.call(db, sql);
46
- if (!statement ||
47
- typeof statement.run !== 'function' ||
48
- typeof statement.get !== 'function' ||
49
- typeof statement.all !== 'function') {
50
- throw new Error('invalid sqlite statement API');
51
- }
52
- return statement;
53
- }
54
- function wrapConnection(db, driver, onClose) {
55
- const statementCache = new Map();
56
- const cachedStatementFor = (sql) => {
57
- const cached = statementCache.get(sql);
58
- if (cached) {
59
- return cached;
60
- }
61
- const statement = statementFor(db, sql);
62
- statementCache.set(sql, statement);
63
- return statement;
64
- };
65
- return {
66
- driver,
67
- exec(sql) {
68
- db.exec(sql);
69
- },
70
- run(sql, params) {
71
- const statement = cachedStatementFor(sql);
72
- if (!params || params.length === 0) {
73
- statement.run();
74
- return;
75
- }
76
- statement.run(...params);
77
- },
78
- get(sql, params) {
79
- const statement = cachedStatementFor(sql);
80
- const row = !params || params.length === 0 ? statement.get() : statement.get(...params);
81
- return row ?? null;
82
- },
83
- all(sql, params) {
84
- const statement = cachedStatementFor(sql);
85
- const rows = !params || params.length === 0 ? statement.all() : statement.all(...params);
86
- return Array.isArray(rows) ? rows : [];
87
- },
88
- close() {
89
- statementCache.clear();
90
- try {
91
- db.close();
92
- }
93
- finally {
94
- onClose?.();
95
- }
96
- }
97
- };
98
- }
99
- function pragmaEntries(options) {
100
- return Object.entries(mergePragmas(options.pragmas));
101
- }
102
- function mergePragmas(pragmas) {
103
- return {
104
- ...DEFAULT_SQLITE_PRAGMAS,
105
- ...(pragmas ?? {})
106
- };
107
- }
108
- const ALLOWED_SQLITE_PRAGMA_LIST = Object.keys(ALLOWED_SQLITE_PRAGMAS).sort().join(', ');
109
- function normalizePragmaKey(rawKey) {
110
- const key = rawKey.trim().toLowerCase();
111
- if (!Object.prototype.hasOwnProperty.call(ALLOWED_SQLITE_PRAGMAS, key)) {
112
- throw new Error(`unsupported sqlite pragma "${rawKey}". Allowed pragmas: ${ALLOWED_SQLITE_PRAGMA_LIST}`);
113
- }
114
- return key;
115
- }
116
- function normalizePragmaToken(key, rawValue) {
117
- const value = rawValue.trim();
118
- if (value.length === 0 || !SQLITE_PRAGMA_TOKEN_PATTERN.test(value)) {
119
- throw new Error(`invalid sqlite pragma "${key}" value "${rawValue}". Allowed token pattern: ${SQLITE_PRAGMA_TOKEN_PATTERN}`);
120
- }
121
- return value;
122
- }
123
- function normalizePragmaValue(key, rawValue) {
124
- const kind = ALLOWED_SQLITE_PRAGMAS[key];
125
- if (kind === 'int') {
126
- if (typeof rawValue !== 'number') {
127
- throw new Error(`sqlite pragma "${key}" must be a number`);
128
- }
129
- return String(toSafeNumber(rawValue, `sqlite pragma "${key}"`));
130
- }
131
- if (kind === 'token') {
132
- if (typeof rawValue !== 'string') {
133
- throw new Error(`sqlite pragma "${key}" must be a string token`);
134
- }
135
- return normalizePragmaToken(key, rawValue);
136
- }
137
- if (typeof rawValue === 'number') {
138
- return String(toSafeNumber(rawValue, `sqlite pragma "${key}"`));
139
- }
140
- return normalizePragmaToken(key, rawValue);
141
- }
142
- function applyPragmas(db, options) {
143
- for (const [rawKey, rawValue] of pragmaEntries(options)) {
144
- const key = normalizePragmaKey(rawKey);
145
- const value = normalizePragmaValue(key, rawValue);
146
- const statement = `${key}=${value}`;
147
- if (db.pragma) {
148
- db.pragma(statement);
149
- continue;
150
- }
151
- db.exec(`PRAGMA ${statement}`);
152
- }
153
- }
154
- function closeDatabaseSafely(db) {
155
- try {
156
- db.close();
157
- }
158
- catch {
159
- return;
160
- }
161
- }
162
- async function openBetterSqlite(options, onClose) {
163
- let loaded;
164
- try {
165
- loaded = await import(BETTER_SQLITE3_MODULE);
166
- }
167
- catch {
168
- throw new Error('optional dependency "better-sqlite3" is not installed. Install with: npm i better-sqlite3');
169
- }
170
- const Database = asConstructor(loaded);
171
- const db = new Database(options.path);
172
- try {
173
- applyPragmas(db, options);
174
- }
175
- catch (error) {
176
- closeDatabaseSafely(db);
177
- throw error;
178
- }
179
- return wrapConnection(db, 'better-sqlite3', onClose);
180
- }
181
- async function openBunSqlite(options, onClose) {
182
- let loaded;
183
- try {
184
- loaded = await import(BUN_SQLITE_MODULE);
185
- }
186
- catch {
187
- throw new Error('bun runtime sqlite module "bun:sqlite" is unavailable. Run this in Bun or set storage.sqlite.driver to "better-sqlite3".');
188
- }
189
- if (!loaded || typeof loaded !== 'object') {
190
- throw new Error('invalid bun sqlite module export');
191
- }
192
- const ctor = loaded.Database;
193
- if (typeof ctor !== 'function') {
194
- throw new Error('invalid bun sqlite module export');
195
- }
196
- const db = new ctor(options.path);
197
- try {
198
- applyPragmas(db, options);
199
- }
200
- catch (error) {
201
- closeDatabaseSafely(db);
202
- throw error;
203
- }
204
- return wrapConnection(db, 'bun', onClose);
205
- }
206
- function resolveDriver(requested) {
207
- if (requested && requested !== 'auto') {
208
- return requested;
209
- }
210
- return isBunRuntime() ? 'bun' : 'better-sqlite3';
211
- }
212
- export async function openSqliteConnection(options) {
213
- const driver = resolveDriver(options.driver);
214
- const normalizedOptions = {
215
- ...options,
216
- driver,
217
- pragmas: mergePragmas(options.pragmas)
218
- };
219
- const cacheKey = `${driver}|${options.path}|${Object.entries(normalizedOptions.pragmas ?? {})
220
- .sort(([left], [right]) => left.localeCompare(right))
221
- .map(([key, value]) => `${key}=${String(value)}`)
222
- .join(';')}`;
223
- const cached = SQLITE_CONNECTION_CACHE.get(cacheKey);
224
- if (cached) {
225
- return cached;
226
- }
227
- const onClose = () => {
228
- SQLITE_CONNECTION_CACHE.delete(cacheKey);
229
- };
230
- const created = driver === 'bun'
231
- ? openBunSqlite(normalizedOptions, onClose)
232
- : openBetterSqlite(normalizedOptions, onClose);
233
- const guarded = created.catch((error) => {
234
- SQLITE_CONNECTION_CACHE.delete(cacheKey);
235
- throw error;
236
- });
237
- SQLITE_CONNECTION_CACHE.set(cacheKey, guarded);
238
- return guarded;
239
- }
240
- const SQLITE_CONNECTION_CACHE = new Map();
@@ -1,61 +0,0 @@
1
- import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
2
- import { asNumber, asOptionalString, asString } from '../../../util/coercion.js';
3
- function decodeContactRow(row) {
4
- return {
5
- jid: asString(row.jid, 'mailbox_contacts.jid'),
6
- displayName: asOptionalString(row.display_name, 'mailbox_contacts.display_name'),
7
- pushName: asOptionalString(row.push_name, 'mailbox_contacts.push_name'),
8
- lid: asOptionalString(row.lid, 'mailbox_contacts.lid'),
9
- phoneNumber: asOptionalString(row.phone_number, 'mailbox_contacts.phone_number'),
10
- lastUpdatedMs: asNumber(row.last_updated_ms, 'mailbox_contacts.last_updated_ms')
11
- };
12
- }
13
- export class WaContactSqliteStore extends BaseSqliteStore {
14
- constructor(options) {
15
- super(options, ['mailbox']);
16
- }
17
- async upsert(record) {
18
- const db = await this.getConnection();
19
- db.run(`INSERT INTO mailbox_contacts (
20
- session_id,
21
- jid,
22
- display_name,
23
- push_name,
24
- lid,
25
- phone_number,
26
- last_updated_ms
27
- ) VALUES (?, ?, ?, ?, ?, ?, ?)
28
- ON CONFLICT(session_id, jid) DO UPDATE SET
29
- display_name=COALESCE(excluded.display_name, mailbox_contacts.display_name),
30
- push_name=COALESCE(excluded.push_name, mailbox_contacts.push_name),
31
- lid=COALESCE(excluded.lid, mailbox_contacts.lid),
32
- phone_number=COALESCE(excluded.phone_number, mailbox_contacts.phone_number),
33
- last_updated_ms=excluded.last_updated_ms`, [
34
- this.options.sessionId,
35
- record.jid,
36
- record.displayName ?? null,
37
- record.pushName ?? null,
38
- record.lid ?? null,
39
- record.phoneNumber ?? null,
40
- record.lastUpdatedMs
41
- ]);
42
- }
43
- async getByJid(jid) {
44
- const db = await this.getConnection();
45
- const row = db.get(`SELECT jid, display_name, push_name, lid, phone_number, last_updated_ms
46
- FROM mailbox_contacts
47
- WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
48
- return row ? decodeContactRow(row) : null;
49
- }
50
- async deleteByJid(jid) {
51
- const db = await this.getConnection();
52
- db.run(`DELETE FROM mailbox_contacts
53
- WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
54
- const row = db.get('SELECT changes() AS total', []);
55
- return row ? Number(row.total) : 0;
56
- }
57
- async clear() {
58
- const db = await this.getConnection();
59
- db.run('DELETE FROM mailbox_contacts WHERE session_id = ?', [this.options.sessionId]);
60
- }
61
- }
@@ -1,155 +0,0 @@
1
- import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
2
- import { asNumber, asString, resolvePositive } from '../../../util/coercion.js';
3
- const DEFAULTS = Object.freeze({
4
- ttlMs: 5 * 60 * 1000,
5
- batchSize: 500
6
- });
7
- export class WaDeviceListSqliteStore extends BaseSqliteStore {
8
- constructor(options, ttlMs = DEFAULTS.ttlMs, batchSize) {
9
- super(options, ['deviceList']);
10
- this.ttlMs = ttlMs;
11
- this.batchSize = resolvePositive(batchSize, DEFAULTS.batchSize, 'deviceList.sqlite.batchSize');
12
- }
13
- getTtlMs() {
14
- return this.ttlMs;
15
- }
16
- async upsertUserDevices(snapshot) {
17
- const db = await this.getConnection();
18
- this.upsertUserDevicesRow(db, snapshot);
19
- }
20
- async upsertUserDevicesBatch(snapshots) {
21
- if (snapshots.length === 0) {
22
- return;
23
- }
24
- await this.withTransaction((db) => {
25
- for (const snapshot of snapshots) {
26
- this.upsertUserDevicesRow(db, snapshot);
27
- }
28
- });
29
- }
30
- async getUserDevices(userJid, nowMs = Date.now()) {
31
- const db = await this.getConnection();
32
- const row = db.get(`SELECT user_jid, device_jids_json, updated_at_ms, expires_at_ms
33
- FROM device_list_cache
34
- WHERE session_id = ? AND user_jid = ?`, [this.options.sessionId, userJid]);
35
- if (!row) {
36
- return null;
37
- }
38
- const expiresAtMs = asNumber(row.expires_at_ms, 'device_list_cache.expires_at_ms');
39
- if (expiresAtMs <= nowMs) {
40
- db.run(`DELETE FROM device_list_cache
41
- WHERE session_id = ? AND user_jid = ?`, [this.options.sessionId, userJid]);
42
- return null;
43
- }
44
- return {
45
- userJid: asString(row.user_jid, 'device_list_cache.user_jid'),
46
- deviceJids: decodeDeviceJids(row.device_jids_json),
47
- updatedAtMs: asNumber(row.updated_at_ms, 'device_list_cache.updated_at_ms')
48
- };
49
- }
50
- async getUserDevicesBatch(userJids, nowMs = Date.now()) {
51
- if (userJids.length === 0) {
52
- return [];
53
- }
54
- const uniqueUserJids = [...new Set(userJids)];
55
- return this.withTransaction((db) => {
56
- const activeByUserJid = new Map();
57
- const expiredUserJids = [];
58
- for (let start = 0; start < uniqueUserJids.length; start += this.batchSize) {
59
- const end = Math.min(start + this.batchSize, uniqueUserJids.length);
60
- const batchLength = end - start;
61
- const placeholders = new Array(batchLength).fill('?').join(', ');
62
- const params = [this.options.sessionId];
63
- for (let index = start; index < end; index += 1) {
64
- params.push(uniqueUserJids[index]);
65
- }
66
- const rows = db.all(`SELECT user_jid, device_jids_json, updated_at_ms, expires_at_ms
67
- FROM device_list_cache
68
- WHERE session_id = ? AND user_jid IN (${placeholders})`, params);
69
- for (const row of rows) {
70
- const userJid = asString(row.user_jid, 'device_list_cache.user_jid');
71
- const expiresAtMs = asNumber(row.expires_at_ms, 'device_list_cache.expires_at_ms');
72
- if (expiresAtMs <= nowMs) {
73
- expiredUserJids.push(userJid);
74
- continue;
75
- }
76
- activeByUserJid.set(userJid, {
77
- userJid,
78
- deviceJids: decodeDeviceJids(row.device_jids_json),
79
- updatedAtMs: asNumber(row.updated_at_ms, 'device_list_cache.updated_at_ms')
80
- });
81
- }
82
- }
83
- if (expiredUserJids.length > 0) {
84
- this.deleteUserDevicesByJids(db, expiredUserJids);
85
- }
86
- return userJids.map((userJid) => activeByUserJid.get(userJid) ?? null);
87
- });
88
- }
89
- async deleteUserDevices(userJid) {
90
- const db = await this.getConnection();
91
- db.run(`DELETE FROM device_list_cache
92
- WHERE session_id = ? AND user_jid = ?`, [this.options.sessionId, userJid]);
93
- const row = db.get('SELECT changes() AS total', []);
94
- return row ? Number(row.total) : 0;
95
- }
96
- async cleanupExpired(nowMs) {
97
- const db = await this.getConnection();
98
- db.run(`DELETE FROM device_list_cache
99
- WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
100
- const row = db.get('SELECT changes() AS total', []);
101
- return row ? Number(row.total) : 0;
102
- }
103
- async clear() {
104
- const db = await this.getConnection();
105
- db.run('DELETE FROM device_list_cache WHERE session_id = ?', [this.options.sessionId]);
106
- }
107
- upsertUserDevicesRow(db, snapshot) {
108
- db.run(`INSERT INTO device_list_cache (
109
- session_id,
110
- user_jid,
111
- device_jids_json,
112
- updated_at_ms,
113
- expires_at_ms
114
- ) VALUES (?, ?, ?, ?, ?)
115
- ON CONFLICT(session_id, user_jid) DO UPDATE SET
116
- device_jids_json=excluded.device_jids_json,
117
- updated_at_ms=excluded.updated_at_ms,
118
- expires_at_ms=excluded.expires_at_ms`, [
119
- this.options.sessionId,
120
- snapshot.userJid,
121
- JSON.stringify(snapshot.deviceJids),
122
- snapshot.updatedAtMs,
123
- snapshot.updatedAtMs + this.ttlMs
124
- ]);
125
- }
126
- deleteUserDevicesByJids(db, userJids) {
127
- if (userJids.length === 0) {
128
- return;
129
- }
130
- for (let start = 0; start < userJids.length; start += this.batchSize) {
131
- const end = Math.min(start + this.batchSize, userJids.length);
132
- const batchLength = end - start;
133
- const placeholders = new Array(batchLength).fill('?').join(', ');
134
- const params = [this.options.sessionId];
135
- for (let index = start; index < end; index += 1) {
136
- params.push(userJids[index]);
137
- }
138
- db.run(`DELETE FROM device_list_cache
139
- WHERE session_id = ? AND user_jid IN (${placeholders})`, params);
140
- }
141
- }
142
- }
143
- function decodeDeviceJids(raw) {
144
- const json = asString(raw, 'device_list_cache.device_jids_json');
145
- const parsed = JSON.parse(json);
146
- if (!Array.isArray(parsed)) {
147
- throw new Error('device_list_cache.device_jids_json must be an array');
148
- }
149
- return parsed.filter((entry) => {
150
- if (typeof entry !== 'string') {
151
- throw new Error('device_list_cache.device_jids_json entry must be string');
152
- }
153
- return true;
154
- });
155
- }
@@ -1,119 +0,0 @@
1
- import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
2
- import { asOptionalBytes, asOptionalNumber, asOptionalString, asString } from '../../../util/coercion.js';
3
- import { normalizeQueryLimit } from '../../../util/collections.js';
4
- function decodeMessageRow(row) {
5
- return {
6
- id: asString(row.message_id, 'mailbox_messages.message_id'),
7
- threadJid: asString(row.thread_jid, 'mailbox_messages.thread_jid'),
8
- senderJid: asOptionalString(row.sender_jid, 'mailbox_messages.sender_jid'),
9
- participantJid: asOptionalString(row.participant_jid, 'mailbox_messages.participant_jid'),
10
- fromMe: Number(row.from_me) === 1,
11
- timestampMs: asOptionalNumber(row.timestamp_ms, 'mailbox_messages.timestamp_ms'),
12
- encType: asOptionalString(row.enc_type, 'mailbox_messages.enc_type'),
13
- plaintext: asOptionalBytes(row.plaintext, 'mailbox_messages.plaintext'),
14
- messageBytes: asOptionalBytes(row.message_bytes, 'mailbox_messages.message_bytes')
15
- };
16
- }
17
- export class WaMessageSqliteStore extends BaseSqliteStore {
18
- constructor(options) {
19
- super(options, ['mailbox']);
20
- }
21
- async upsert(record) {
22
- const db = await this.getConnection();
23
- db.run(`INSERT INTO mailbox_messages (
24
- session_id,
25
- message_id,
26
- thread_jid,
27
- sender_jid,
28
- participant_jid,
29
- from_me,
30
- timestamp_ms,
31
- enc_type,
32
- plaintext,
33
- message_bytes
34
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
35
- ON CONFLICT(session_id, message_id) DO UPDATE SET
36
- thread_jid=excluded.thread_jid,
37
- sender_jid=excluded.sender_jid,
38
- participant_jid=excluded.participant_jid,
39
- from_me=excluded.from_me,
40
- timestamp_ms=excluded.timestamp_ms,
41
- enc_type=excluded.enc_type,
42
- plaintext=excluded.plaintext,
43
- message_bytes=excluded.message_bytes`, [
44
- this.options.sessionId,
45
- record.id,
46
- record.threadJid,
47
- record.senderJid ?? null,
48
- record.participantJid ?? null,
49
- record.fromMe ? 1 : 0,
50
- record.timestampMs ?? null,
51
- record.encType ?? null,
52
- record.plaintext ?? null,
53
- record.messageBytes ?? null
54
- ]);
55
- }
56
- async getById(id) {
57
- const db = await this.getConnection();
58
- const row = db.get(`SELECT
59
- message_id,
60
- thread_jid,
61
- sender_jid,
62
- participant_jid,
63
- from_me,
64
- timestamp_ms,
65
- enc_type,
66
- plaintext,
67
- message_bytes
68
- FROM mailbox_messages
69
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
70
- return row ? decodeMessageRow(row) : null;
71
- }
72
- async listByThread(threadJid, limit, beforeTimestampMs) {
73
- const db = await this.getConnection();
74
- const normalizedLimit = normalizeQueryLimit(limit, 50);
75
- const rows = beforeTimestampMs === undefined
76
- ? db.all(`SELECT
77
- message_id,
78
- thread_jid,
79
- sender_jid,
80
- participant_jid,
81
- from_me,
82
- timestamp_ms,
83
- enc_type,
84
- plaintext,
85
- message_bytes
86
- FROM mailbox_messages
87
- WHERE session_id = ? AND thread_jid = ?
88
- ORDER BY timestamp_ms DESC, message_id DESC
89
- LIMIT ?`, [this.options.sessionId, threadJid, normalizedLimit])
90
- : db.all(`SELECT
91
- message_id,
92
- thread_jid,
93
- sender_jid,
94
- participant_jid,
95
- from_me,
96
- timestamp_ms,
97
- enc_type,
98
- plaintext,
99
- message_bytes
100
- FROM mailbox_messages
101
- WHERE session_id = ?
102
- AND thread_jid = ?
103
- AND timestamp_ms < ?
104
- ORDER BY timestamp_ms DESC, message_id DESC
105
- LIMIT ?`, [this.options.sessionId, threadJid, beforeTimestampMs, normalizedLimit]);
106
- return rows.map(decodeMessageRow);
107
- }
108
- async deleteById(id) {
109
- const db = await this.getConnection();
110
- db.run(`DELETE FROM mailbox_messages
111
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
112
- const row = db.get('SELECT changes() AS total', []);
113
- return row ? Number(row.total) : 0;
114
- }
115
- async clear() {
116
- const db = await this.getConnection();
117
- db.run('DELETE FROM mailbox_messages WHERE session_id = ?', [this.options.sessionId]);
118
- }
119
- }