zapo-js 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. package/README.md +16 -4
  2. package/dist/appstate/WaAppStateCrypto.js +50 -42
  3. package/dist/appstate/WaAppStateSyncClient.js +215 -133
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +9 -7
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +55 -57
  8. package/dist/auth/credentials-flow.js +195 -0
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingFlow.js +39 -32
  11. package/dist/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +35 -17
  12. package/dist/client/WaClient.js +338 -174
  13. package/dist/client/WaClientFactory.js +399 -66
  14. package/dist/client/connection/WaConnectionManager.js +23 -11
  15. package/dist/client/coordinators/WaAbPropsCoordinator.js +141 -0
  16. package/dist/client/coordinators/WaBusinessCoordinator.js +232 -0
  17. package/dist/client/coordinators/WaEmailCoordinator.js +63 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +34 -8
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +341 -118
  21. package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
  22. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
  23. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  24. package/dist/client/coordinators/WaProfileCoordinator.js +214 -0
  25. package/dist/client/coordinators/WaRetryCoordinator.js +184 -30
  26. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  27. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +184 -0
  28. package/dist/client/dirty.js +41 -21
  29. package/dist/client/events/abprops.js +43 -0
  30. package/dist/client/events/devices.js +72 -0
  31. package/dist/client/events/group.js +3 -11
  32. package/dist/client/events/identity.js +22 -0
  33. package/dist/client/events/privacy-token.js +38 -0
  34. package/dist/client/events/registration.js +42 -0
  35. package/dist/client/history-sync.js +50 -9
  36. package/dist/client/incoming.js +74 -7
  37. package/dist/client/mailbox.js +40 -23
  38. package/dist/client/media.js +243 -0
  39. package/dist/client/messages.js +245 -92
  40. package/dist/client/messaging/fanout.js +21 -11
  41. package/dist/client/messaging/participants.js +6 -4
  42. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  43. package/dist/client/tokens/cs-token.js +50 -0
  44. package/dist/client/tokens/tc-token.js +25 -0
  45. package/dist/crypto/core/index.js +5 -2
  46. package/dist/crypto/core/keys.js +4 -4
  47. package/dist/crypto/core/nonce.js +2 -0
  48. package/dist/crypto/core/primitives.js +0 -8
  49. package/dist/crypto/core/random.js +24 -8
  50. package/dist/crypto/core/xeddsa.js +57 -0
  51. package/dist/crypto/curves/X25519.js +43 -6
  52. package/dist/crypto/curves/constants.js +2 -1
  53. package/dist/crypto/index.js +3 -0
  54. package/dist/crypto/math/constants.js +13 -36
  55. package/dist/crypto/math/edwards.js +171 -44
  56. package/dist/crypto/math/fe.js +706 -0
  57. package/dist/crypto/math/mod.js +10 -3
  58. package/dist/esm/appstate/WaAppStateCrypto.js +40 -32
  59. package/dist/esm/appstate/WaAppStateSyncClient.js +206 -124
  60. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  61. package/dist/esm/appstate/index.js +2 -2
  62. package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +1 -1
  63. package/dist/esm/appstate/utils.js +2 -5
  64. package/dist/esm/auth/WaAuthClient.js +52 -54
  65. package/dist/esm/auth/credentials-flow.js +190 -0
  66. package/dist/esm/auth/index.js +0 -2
  67. package/dist/esm/auth/pairing/WaPairingFlow.js +39 -32
  68. package/dist/esm/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +26 -10
  69. package/dist/esm/client/WaClient.js +339 -175
  70. package/dist/esm/client/WaClientFactory.js +401 -68
  71. package/dist/esm/client/connection/WaConnectionManager.js +23 -11
  72. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +137 -0
  73. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +229 -0
  74. package/dist/esm/client/coordinators/WaEmailCoordinator.js +60 -0
  75. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  76. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +36 -10
  77. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +337 -114
  78. package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
  79. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
  80. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  81. package/dist/esm/client/coordinators/WaProfileCoordinator.js +211 -0
  82. package/dist/esm/client/coordinators/WaRetryCoordinator.js +186 -32
  83. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  84. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +180 -0
  85. package/dist/esm/client/dirty.js +41 -21
  86. package/dist/esm/client/events/abprops.js +40 -0
  87. package/dist/esm/client/events/devices.js +68 -0
  88. package/dist/esm/client/events/group.js +3 -11
  89. package/dist/esm/client/events/identity.js +19 -0
  90. package/dist/esm/client/events/privacy-token.js +35 -0
  91. package/dist/esm/client/events/registration.js +39 -0
  92. package/dist/esm/client/history-sync.js +50 -9
  93. package/dist/esm/client/incoming.js +74 -8
  94. package/dist/esm/client/mailbox.js +40 -23
  95. package/dist/esm/client/media.js +234 -0
  96. package/dist/esm/client/messages.js +244 -91
  97. package/dist/esm/client/messaging/fanout.js +22 -12
  98. package/dist/esm/client/messaging/participants.js +6 -4
  99. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  100. package/dist/esm/client/tokens/cs-token.js +46 -0
  101. package/dist/esm/client/tokens/tc-token.js +18 -0
  102. package/dist/esm/crypto/core/index.js +3 -2
  103. package/dist/esm/crypto/core/keys.js +1 -1
  104. package/dist/esm/crypto/core/nonce.js +2 -0
  105. package/dist/esm/crypto/core/primitives.js +0 -7
  106. package/dist/esm/crypto/core/random.js +23 -7
  107. package/dist/esm/crypto/core/xeddsa.js +53 -0
  108. package/dist/esm/crypto/curves/X25519.js +45 -8
  109. package/dist/esm/crypto/curves/constants.js +1 -0
  110. package/dist/esm/crypto/index.js +1 -0
  111. package/dist/esm/crypto/math/constants.js +12 -35
  112. package/dist/esm/crypto/math/edwards.js +174 -47
  113. package/dist/esm/crypto/math/fe.js +691 -0
  114. package/dist/esm/crypto/math/mod.js +10 -1
  115. package/dist/esm/index.js +1 -1
  116. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  117. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  118. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  119. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  120. package/dist/esm/infra/perf/StoreLock.js +80 -0
  121. package/dist/esm/media/WaMediaCrypto.js +332 -55
  122. package/dist/esm/media/WaMediaTransferClient.js +69 -220
  123. package/dist/esm/media/constants.js +4 -1
  124. package/dist/esm/media/processor.js +1 -0
  125. package/dist/esm/message/WaMessageClient.js +26 -19
  126. package/dist/esm/message/addon-crypto.js +130 -3
  127. package/dist/esm/message/content.js +206 -14
  128. package/dist/esm/message/icdc.js +76 -0
  129. package/dist/esm/message/incoming.js +38 -24
  130. package/dist/esm/message/phash.js +35 -13
  131. package/dist/esm/message/reporting-token.js +17 -30
  132. package/dist/esm/message/use-case-secret.js +1 -1
  133. package/dist/esm/protocol/abprops.js +159 -0
  134. package/dist/esm/protocol/appstate.js +9 -40
  135. package/dist/esm/protocol/browser.js +24 -18
  136. package/dist/esm/protocol/constants.js +8 -4
  137. package/dist/esm/protocol/defaults.js +6 -0
  138. package/dist/esm/protocol/email.js +30 -0
  139. package/dist/esm/protocol/index.js +1 -2
  140. package/dist/esm/protocol/jid.js +142 -39
  141. package/dist/esm/protocol/message.js +61 -1
  142. package/dist/esm/protocol/nodes.js +8 -2
  143. package/dist/esm/protocol/notification.js +9 -1
  144. package/dist/esm/protocol/privacy-token.js +17 -0
  145. package/dist/esm/protocol/privacy.js +55 -0
  146. package/dist/esm/protocol/stream.js +26 -1
  147. package/dist/esm/retry/codec.js +216 -0
  148. package/dist/esm/retry/constants.js +1 -1
  149. package/dist/esm/retry/index.js +2 -2
  150. package/dist/esm/retry/parse.js +50 -30
  151. package/dist/esm/retry/reason.js +1 -1
  152. package/dist/esm/retry/replay.js +11 -7
  153. package/dist/esm/retry/tracker.js +50 -12
  154. package/dist/esm/signal/api/SignalDeviceSyncApi.js +52 -32
  155. package/dist/esm/signal/api/SignalDigestSyncApi.js +21 -15
  156. package/dist/esm/signal/api/SignalIdentitySyncApi.js +30 -15
  157. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +19 -8
  158. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  159. package/dist/esm/signal/api/SignalSessionSyncApi.js +17 -8
  160. package/dist/esm/signal/api/result-map.js +10 -0
  161. package/dist/esm/signal/constants.js +0 -4
  162. package/dist/esm/signal/crypto/WaAdvSignature.js +5 -45
  163. package/dist/esm/signal/crypto/constants.js +0 -4
  164. package/dist/esm/signal/{store/sqlite.js → encoding.js} +40 -29
  165. package/dist/esm/signal/group/SenderKeyChain.js +3 -3
  166. package/dist/esm/signal/group/SenderKeyCodec.js +8 -8
  167. package/dist/esm/signal/group/SenderKeyManager.js +131 -109
  168. package/dist/esm/signal/index.js +1 -0
  169. package/dist/esm/signal/registration/keygen.js +8 -5
  170. package/dist/esm/signal/registration/utils.js +3 -2
  171. package/dist/esm/signal/session/SignalProtocol.js +158 -81
  172. package/dist/esm/signal/session/SignalRatchet.js +21 -10
  173. package/dist/esm/signal/session/SignalSerializer.js +5 -6
  174. package/dist/esm/signal/session/SignalSession.js +11 -9
  175. package/dist/esm/signal/session/resolver.js +140 -105
  176. package/dist/esm/store/contracts/identity.store.js +1 -0
  177. package/dist/esm/store/contracts/message-secret.store.js +1 -0
  178. package/dist/esm/store/contracts/pre-key.store.js +1 -0
  179. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  180. package/dist/esm/store/contracts/session.store.js +1 -0
  181. package/dist/esm/store/createStore.js +143 -193
  182. package/dist/esm/store/index.js +5 -10
  183. package/dist/esm/store/locks/appstate.lock.js +26 -0
  184. package/dist/esm/store/locks/auth.lock.js +15 -0
  185. package/dist/esm/store/locks/contact.lock.js +20 -0
  186. package/dist/esm/store/locks/device-list.lock.js +20 -0
  187. package/dist/esm/store/locks/identity.lock.js +16 -0
  188. package/dist/esm/store/locks/message-secret.lock.js +17 -0
  189. package/dist/esm/store/locks/message.lock.js +21 -0
  190. package/dist/esm/store/locks/participants.lock.js +20 -0
  191. package/dist/esm/store/locks/pre-key.lock.js +27 -0
  192. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  193. package/dist/esm/store/locks/retry.lock.js +29 -0
  194. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  195. package/dist/esm/store/locks/session.lock.js +19 -0
  196. package/dist/esm/store/locks/signal.lock.js +39 -0
  197. package/dist/esm/store/locks/thread.lock.js +21 -0
  198. package/dist/esm/store/noop.store.js +21 -1
  199. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  200. package/dist/esm/store/providers/memory/device-list.store.js +13 -5
  201. package/dist/esm/store/providers/memory/identity.store.js +31 -0
  202. package/dist/esm/store/providers/memory/message-secret.store.js +81 -0
  203. package/dist/esm/store/providers/memory/participants.store.js +3 -0
  204. package/dist/esm/store/providers/memory/pre-key.store.js +97 -0
  205. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  206. package/dist/esm/store/providers/memory/retry.store.js +99 -10
  207. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  208. package/dist/esm/store/providers/memory/session.store.js +45 -0
  209. package/dist/esm/store/providers/memory/signal.store.js +1 -147
  210. package/dist/esm/transport/WaComms.js +7 -4
  211. package/dist/esm/transport/WaWebSocket.js +9 -7
  212. package/dist/esm/transport/binary/constants.js +0 -30
  213. package/dist/esm/transport/binary/decoder.js +4 -4
  214. package/dist/esm/transport/binary/encoder.js +8 -15
  215. package/dist/esm/transport/binary/index.js +0 -1
  216. package/dist/esm/transport/index.js +6 -0
  217. package/dist/esm/transport/keepalive/WaKeepAlive.js +17 -8
  218. package/dist/esm/transport/node/WaMobileTcpSocket.js +114 -0
  219. package/dist/esm/transport/node/WaNodeOrchestrator.js +37 -22
  220. package/dist/esm/transport/node/builders/abprops.js +20 -0
  221. package/dist/esm/transport/node/builders/business.js +129 -0
  222. package/dist/esm/transport/node/builders/device.js +11 -0
  223. package/dist/esm/transport/node/builders/email.js +65 -0
  224. package/dist/esm/transport/node/builders/global.js +370 -0
  225. package/dist/esm/transport/node/builders/message.js +63 -239
  226. package/dist/esm/transport/node/builders/offline.js +14 -0
  227. package/dist/esm/transport/node/builders/pairing.js +0 -24
  228. package/dist/esm/transport/node/builders/prekeys.js +37 -40
  229. package/dist/esm/transport/node/builders/presence.js +13 -0
  230. package/dist/esm/transport/node/builders/privacy-token.js +37 -0
  231. package/dist/esm/transport/node/builders/privacy.js +48 -0
  232. package/dist/esm/transport/node/builders/profile.js +70 -0
  233. package/dist/esm/transport/node/builders/retry.js +11 -23
  234. package/dist/esm/transport/node/builders/usync.js +6 -2
  235. package/dist/esm/transport/node/helpers.js +43 -1
  236. package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
  237. package/dist/esm/transport/node/mex/client.js +83 -0
  238. package/dist/esm/transport/node/mex/persist-ids.js +10 -0
  239. package/dist/esm/transport/node/usync.js +3 -33
  240. package/dist/esm/transport/node/xml.js +35 -14
  241. package/dist/esm/transport/noise/WaClientPayload.js +24 -19
  242. package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
  243. package/dist/esm/transport/noise/WaMobileClientPayload.js +53 -0
  244. package/dist/esm/transport/noise/WaNoiseCert.js +9 -27
  245. package/dist/esm/transport/noise/WaNoiseSession.js +76 -34
  246. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  247. package/dist/esm/transport/stream/parse.js +8 -4
  248. package/dist/esm/util/bytes.js +22 -18
  249. package/dist/esm/util/index.js +5 -0
  250. package/dist/esm/util/primitives.js +3 -2
  251. package/dist/index.js +7 -1
  252. package/dist/infra/perf/BackgroundQueue.js +482 -0
  253. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  254. package/dist/infra/perf/PromiseDedup.js +24 -0
  255. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  256. package/dist/infra/perf/StoreLock.js +84 -0
  257. package/dist/media/WaMediaCrypto.js +328 -51
  258. package/dist/media/WaMediaTransferClient.js +72 -253
  259. package/dist/media/constants.js +5 -2
  260. package/dist/media/processor.js +2 -0
  261. package/dist/message/WaMessageClient.js +26 -19
  262. package/dist/message/addon-crypto.js +131 -0
  263. package/dist/message/content.js +211 -14
  264. package/dist/message/icdc.js +81 -0
  265. package/dist/message/incoming.js +38 -24
  266. package/dist/message/phash.js +35 -13
  267. package/dist/message/reporting-token.js +16 -30
  268. package/dist/message/use-case-secret.js +1 -1
  269. package/dist/protocol/abprops.js +163 -0
  270. package/dist/protocol/appstate.js +10 -41
  271. package/dist/protocol/browser.js +25 -18
  272. package/dist/protocol/constants.js +33 -2
  273. package/dist/protocol/defaults.js +6 -0
  274. package/dist/protocol/email.js +33 -0
  275. package/dist/protocol/index.js +8 -5
  276. package/dist/protocol/jid.js +149 -39
  277. package/dist/protocol/message.js +62 -2
  278. package/dist/protocol/nodes.js +8 -2
  279. package/dist/protocol/notification.js +10 -2
  280. package/dist/protocol/privacy-token.js +20 -0
  281. package/dist/protocol/privacy.js +58 -0
  282. package/dist/protocol/stream.js +27 -2
  283. package/dist/retry/codec.js +220 -0
  284. package/dist/retry/constants.js +1 -1
  285. package/dist/retry/index.js +5 -5
  286. package/dist/retry/parse.js +51 -30
  287. package/dist/retry/reason.js +1 -1
  288. package/dist/retry/replay.js +10 -6
  289. package/dist/retry/tracker.js +50 -12
  290. package/dist/signal/api/SignalDeviceSyncApi.js +51 -31
  291. package/dist/signal/api/SignalDigestSyncApi.js +21 -15
  292. package/dist/signal/api/SignalIdentitySyncApi.js +29 -14
  293. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  294. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  295. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  296. package/dist/signal/api/result-map.js +13 -0
  297. package/dist/signal/constants.js +1 -5
  298. package/dist/signal/crypto/WaAdvSignature.js +2 -44
  299. package/dist/signal/crypto/constants.js +1 -5
  300. package/dist/signal/{store/sqlite.js → encoding.js} +41 -25
  301. package/dist/signal/group/SenderKeyChain.js +2 -2
  302. package/dist/signal/group/SenderKeyCodec.js +8 -8
  303. package/dist/signal/group/SenderKeyManager.js +130 -108
  304. package/dist/signal/index.js +13 -1
  305. package/dist/signal/registration/keygen.js +7 -4
  306. package/dist/signal/registration/utils.js +3 -2
  307. package/dist/signal/session/SignalProtocol.js +158 -81
  308. package/dist/signal/session/SignalRatchet.js +19 -8
  309. package/dist/signal/session/SignalSerializer.js +5 -6
  310. package/dist/signal/session/SignalSession.js +11 -9
  311. package/dist/signal/session/resolver.js +138 -103
  312. package/dist/store/contracts/identity.store.js +2 -0
  313. package/dist/store/contracts/message-secret.store.js +2 -0
  314. package/dist/store/contracts/pre-key.store.js +2 -0
  315. package/dist/store/contracts/privacy-token.store.js +2 -0
  316. package/dist/store/contracts/session.store.js +2 -0
  317. package/dist/store/createStore.js +142 -192
  318. package/dist/store/index.js +23 -33
  319. package/dist/store/locks/appstate.lock.js +29 -0
  320. package/dist/store/locks/auth.lock.js +18 -0
  321. package/dist/store/locks/contact.lock.js +23 -0
  322. package/dist/store/locks/device-list.lock.js +23 -0
  323. package/dist/store/locks/identity.lock.js +19 -0
  324. package/dist/store/locks/message-secret.lock.js +20 -0
  325. package/dist/store/locks/message.lock.js +24 -0
  326. package/dist/store/locks/participants.lock.js +23 -0
  327. package/dist/store/locks/pre-key.lock.js +30 -0
  328. package/dist/store/locks/privacy-token.lock.js +21 -0
  329. package/dist/store/locks/retry.lock.js +32 -0
  330. package/dist/store/locks/sender-key.lock.js +55 -0
  331. package/dist/store/locks/session.lock.js +22 -0
  332. package/dist/store/locks/signal.lock.js +42 -0
  333. package/dist/store/locks/thread.lock.js +24 -0
  334. package/dist/store/noop.store.js +22 -2
  335. package/dist/store/providers/memory/appstate.store.js +22 -24
  336. package/dist/store/providers/memory/device-list.store.js +13 -5
  337. package/dist/store/providers/memory/identity.store.js +35 -0
  338. package/dist/store/providers/memory/message-secret.store.js +85 -0
  339. package/dist/store/providers/memory/participants.store.js +3 -0
  340. package/dist/store/providers/memory/pre-key.store.js +101 -0
  341. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  342. package/dist/store/providers/memory/retry.store.js +98 -9
  343. package/dist/store/providers/memory/sender-key.store.js +6 -1
  344. package/dist/store/providers/memory/session.store.js +49 -0
  345. package/dist/store/providers/memory/signal.store.js +1 -147
  346. package/dist/transport/WaComms.js +7 -4
  347. package/dist/transport/WaWebSocket.js +9 -7
  348. package/dist/transport/binary/constants.js +1 -31
  349. package/dist/transport/binary/decoder.js +4 -4
  350. package/dist/transport/binary/encoder.js +8 -15
  351. package/dist/transport/binary/index.js +0 -4
  352. package/dist/transport/index.js +17 -1
  353. package/dist/transport/keepalive/WaKeepAlive.js +17 -8
  354. package/dist/transport/node/WaMobileTcpSocket.js +118 -0
  355. package/dist/transport/node/WaNodeOrchestrator.js +36 -21
  356. package/dist/transport/node/builders/abprops.js +23 -0
  357. package/dist/transport/node/builders/business.js +137 -0
  358. package/dist/transport/node/builders/device.js +14 -0
  359. package/dist/transport/node/builders/email.js +72 -0
  360. package/dist/transport/node/builders/global.js +375 -0
  361. package/dist/transport/node/builders/message.js +64 -245
  362. package/dist/transport/node/builders/offline.js +17 -0
  363. package/dist/transport/node/builders/pairing.js +0 -26
  364. package/dist/transport/node/builders/prekeys.js +36 -39
  365. package/dist/transport/node/builders/presence.js +16 -0
  366. package/dist/transport/node/builders/privacy-token.js +42 -0
  367. package/dist/transport/node/builders/privacy.js +55 -0
  368. package/dist/transport/node/builders/profile.js +78 -0
  369. package/dist/transport/node/builders/retry.js +10 -22
  370. package/dist/transport/node/builders/usync.js +6 -2
  371. package/dist/transport/node/helpers.js +46 -1
  372. package/dist/transport/node/mex/argo-decoder.js +189 -0
  373. package/dist/transport/node/mex/client.js +86 -0
  374. package/dist/transport/node/mex/persist-ids.js +13 -0
  375. package/dist/transport/node/usync.js +2 -32
  376. package/dist/transport/node/xml.js +35 -14
  377. package/dist/transport/noise/WaClientPayload.js +26 -21
  378. package/dist/transport/noise/WaFrameCodec.js +1 -1
  379. package/dist/transport/noise/WaMobileClientPayload.js +56 -0
  380. package/dist/transport/noise/WaNoiseCert.js +8 -26
  381. package/dist/transport/noise/WaNoiseSession.js +75 -33
  382. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  383. package/dist/transport/stream/parse.js +7 -3
  384. package/dist/types/appstate/WaAppStateCrypto.d.ts +11 -8
  385. package/dist/types/appstate/WaAppStateSyncClient.d.ts +6 -2
  386. package/dist/types/appstate/encoding.d.ts +7 -0
  387. package/dist/types/appstate/index.d.ts +3 -3
  388. package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → response-parser.d.ts} +1 -1
  389. package/dist/types/appstate/types.d.ts +1 -1
  390. package/dist/types/appstate/utils.d.ts +0 -2
  391. package/dist/types/auth/WaAuthClient.d.ts +9 -3
  392. package/dist/types/auth/credentials-flow.d.ts +20 -0
  393. package/dist/types/auth/index.d.ts +0 -2
  394. package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
  395. package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +6 -1
  396. package/dist/types/auth/types.d.ts +41 -0
  397. package/dist/types/client/WaClient.d.ts +44 -18
  398. package/dist/types/client/WaClientFactory.d.ts +22 -8
  399. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  400. package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
  401. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  402. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +24 -0
  403. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +9 -2
  404. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -2
  405. package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
  406. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +16 -1
  407. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  408. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +38 -0
  409. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +12 -0
  410. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  411. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +55 -0
  412. package/dist/types/client/dirty.d.ts +3 -1
  413. package/dist/types/client/events/abprops.d.ts +14 -0
  414. package/dist/types/client/events/devices.d.ts +20 -0
  415. package/dist/types/client/events/identity.d.ts +9 -0
  416. package/dist/types/client/events/privacy-token.d.ts +7 -0
  417. package/dist/types/client/events/registration.d.ts +17 -0
  418. package/dist/types/client/history-sync.d.ts +9 -6
  419. package/dist/types/client/incoming.d.ts +9 -2
  420. package/dist/types/client/index.d.ts +1 -1
  421. package/dist/types/client/mailbox.d.ts +5 -5
  422. package/dist/types/client/media.d.ts +31 -0
  423. package/dist/types/client/messages.d.ts +3 -2
  424. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  425. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  426. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  427. package/dist/types/client/types.d.ts +151 -4
  428. package/dist/types/crypto/core/index.d.ts +3 -2
  429. package/dist/types/crypto/core/nonce.d.ts +2 -0
  430. package/dist/types/crypto/core/primitives.d.ts +1 -2
  431. package/dist/types/crypto/core/random.d.ts +2 -1
  432. package/dist/types/crypto/core/xeddsa.d.ts +2 -0
  433. package/dist/types/crypto/curves/constants.d.ts +1 -0
  434. package/dist/types/crypto/index.d.ts +2 -0
  435. package/dist/types/crypto/math/constants.d.ts +4 -2
  436. package/dist/types/crypto/math/fe.d.ts +30 -0
  437. package/dist/types/crypto/math/mod.d.ts +0 -2
  438. package/dist/types/crypto/math/types.d.ts +11 -4
  439. package/dist/types/index.d.ts +6 -3
  440. package/dist/types/infra/log/ConsoleLogger.d.ts +1 -1
  441. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  442. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  443. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  444. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  445. package/dist/types/infra/perf/StoreLock.d.ts +11 -0
  446. package/dist/types/media/WaMediaCrypto.d.ts +16 -6
  447. package/dist/types/media/WaMediaTransferClient.d.ts +6 -23
  448. package/dist/types/media/constants.d.ts +3 -1
  449. package/dist/types/media/index.d.ts +2 -1
  450. package/dist/types/media/processor.d.ts +28 -0
  451. package/dist/types/media/types.d.ts +19 -5
  452. package/dist/types/message/addon-crypto.d.ts +34 -3
  453. package/dist/types/message/content.d.ts +11 -1
  454. package/dist/types/message/icdc.d.ts +13 -0
  455. package/dist/types/message/reporting-token.d.ts +0 -1
  456. package/dist/types/message/types.d.ts +42 -11
  457. package/dist/types/protocol/abprops.d.ts +142 -0
  458. package/dist/types/protocol/appstate.d.ts +0 -11
  459. package/dist/types/protocol/browser.d.ts +1 -0
  460. package/dist/types/protocol/constants.d.ts +12 -4
  461. package/dist/types/protocol/defaults.d.ts +6 -0
  462. package/dist/types/protocol/email.d.ts +32 -0
  463. package/dist/types/protocol/index.d.ts +1 -2
  464. package/dist/types/protocol/jid.d.ts +20 -2
  465. package/dist/types/protocol/message.d.ts +60 -0
  466. package/dist/types/protocol/nodes.d.ts +6 -0
  467. package/dist/types/protocol/notification.d.ts +8 -0
  468. package/dist/types/protocol/privacy-token.d.ts +17 -0
  469. package/dist/types/protocol/privacy.d.ts +75 -0
  470. package/dist/types/protocol/stream.d.ts +31 -0
  471. package/dist/types/retry/codec.d.ts +3 -0
  472. package/dist/types/retry/index.d.ts +3 -3
  473. package/dist/types/retry/parse.d.ts +5 -2
  474. package/dist/types/retry/reason.d.ts +1 -1
  475. package/dist/types/retry/tracker.d.ts +1 -0
  476. package/dist/types/retry/types.d.ts +6 -1
  477. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  478. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +9 -0
  479. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +5 -3
  480. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  481. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  482. package/dist/types/signal/api/result-map.d.ts +1 -0
  483. package/dist/types/signal/constants.d.ts +0 -3
  484. package/dist/types/signal/crypto/WaAdvSignature.d.ts +0 -2
  485. package/dist/types/signal/crypto/constants.d.ts +0 -1
  486. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +9 -3
  487. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  488. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -7
  489. package/dist/types/signal/index.d.ts +2 -0
  490. package/dist/types/signal/registration/utils.d.ts +2 -1
  491. package/dist/types/signal/session/SignalProtocol.d.ts +21 -6
  492. package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
  493. package/dist/types/signal/session/resolver.d.ts +11 -4
  494. package/dist/types/signal/types.d.ts +16 -4
  495. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  496. package/dist/types/store/contracts/identity.store.d.ts +11 -0
  497. package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
  498. package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
  499. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  500. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  501. package/dist/types/store/contracts/session.store.d.ts +14 -0
  502. package/dist/types/store/contracts/signal.store.d.ts +1 -27
  503. package/dist/types/store/createStore.d.ts +1 -1
  504. package/dist/types/store/index.d.ts +12 -12
  505. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  506. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  507. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  508. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  509. package/dist/types/store/locks/identity.lock.d.ts +3 -0
  510. package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
  511. package/dist/types/store/locks/message.lock.d.ts +3 -0
  512. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  513. package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
  514. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  515. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  516. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  517. package/dist/types/store/locks/session.lock.d.ts +3 -0
  518. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  519. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  520. package/dist/types/store/noop.store.d.ts +4 -0
  521. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  522. package/dist/types/store/providers/memory/identity.store.d.ts +18 -0
  523. package/dist/types/store/providers/memory/message-secret.store.d.ts +21 -0
  524. package/dist/types/store/providers/memory/pre-key.store.d.ts +23 -0
  525. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  526. package/dist/types/store/providers/memory/retry.store.d.ts +15 -1
  527. package/dist/types/store/providers/memory/session.store.d.ts +21 -0
  528. package/dist/types/store/providers/memory/signal.store.d.ts +2 -43
  529. package/dist/types/store/providers/memory/thread.store.d.ts +1 -1
  530. package/dist/types/store/types.d.ts +69 -61
  531. package/dist/types/transport/WaWebSocket.d.ts +1 -1
  532. package/dist/types/transport/binary/constants.d.ts +0 -30
  533. package/dist/types/transport/binary/index.d.ts +0 -1
  534. package/dist/types/transport/index.d.ts +8 -1
  535. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +4 -1
  536. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +18 -0
  537. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +9 -6
  538. package/dist/types/transport/node/builders/abprops.d.ts +5 -0
  539. package/dist/types/transport/node/builders/business.d.ts +29 -0
  540. package/dist/types/transport/node/builders/device.d.ts +2 -0
  541. package/dist/types/transport/node/builders/email.d.ts +11 -0
  542. package/dist/types/transport/node/builders/global.d.ts +102 -0
  543. package/dist/types/transport/node/builders/message.d.ts +8 -7
  544. package/dist/types/transport/node/builders/offline.d.ts +2 -0
  545. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  546. package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
  547. package/dist/types/transport/node/builders/presence.d.ts +6 -0
  548. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  549. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  550. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  551. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  552. package/dist/types/transport/node/helpers.d.ts +8 -0
  553. package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
  554. package/dist/types/transport/node/mex/client.d.ts +18 -0
  555. package/dist/types/transport/node/mex/persist-ids.d.ts +14 -0
  556. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +29 -0
  557. package/dist/types/transport/noise/WaNoiseCert.d.ts +7 -1
  558. package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
  559. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  560. package/dist/types/transport/types.d.ts +8 -0
  561. package/dist/types/util/bytes.d.ts +1 -1
  562. package/dist/types/util/index.d.ts +5 -0
  563. package/dist/types/util/primitives.d.ts +0 -1
  564. package/dist/util/bytes.js +22 -18
  565. package/dist/util/index.js +23 -0
  566. package/dist/util/primitives.js +2 -2
  567. package/package.json +34 -10
  568. package/proto/index.js +1 -1
  569. package/dist/auth/flow/WaAuthCredentialsFlow.js +0 -130
  570. package/dist/auth/pairing/constants.js +0 -5
  571. package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
  572. package/dist/crypto/core/constants.js +0 -4
  573. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
  574. package/dist/esm/auth/pairing/constants.js +0 -2
  575. package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
  576. package/dist/esm/crypto/core/constants.js +0 -1
  577. package/dist/esm/retry/outbound.js +0 -82
  578. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  579. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  580. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  581. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  582. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  583. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  584. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  585. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  586. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  587. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  588. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  589. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  590. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  591. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  592. package/dist/esm/transport/node/builders/index.js +0 -8
  593. package/dist/retry/outbound.js +0 -87
  594. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  595. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  596. package/dist/store/providers/sqlite/auth.store.js +0 -180
  597. package/dist/store/providers/sqlite/connection.js +0 -281
  598. package/dist/store/providers/sqlite/contact.store.js +0 -78
  599. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  600. package/dist/store/providers/sqlite/message.store.js +0 -136
  601. package/dist/store/providers/sqlite/migrations.js +0 -350
  602. package/dist/store/providers/sqlite/participants.store.js +0 -81
  603. package/dist/store/providers/sqlite/retry.store.js +0 -145
  604. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  605. package/dist/store/providers/sqlite/signal.store.js +0 -439
  606. package/dist/store/providers/sqlite/table-names.js +0 -113
  607. package/dist/store/providers/sqlite/thread.store.js +0 -89
  608. package/dist/transport/node/builders/index.js +0 -42
  609. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  610. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
  611. package/dist/types/auth/pairing/constants.d.ts +0 -2
  612. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
  613. package/dist/types/crypto/core/constants.d.ts +0 -1
  614. package/dist/types/retry/outbound.d.ts +0 -4
  615. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  616. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  617. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  618. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  619. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  620. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  621. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  622. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  623. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  624. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  625. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  626. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  627. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  628. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
  629. package/dist/types/transport/node/builders/index.d.ts +0 -8
  630. /package/dist/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +0 -0
@@ -1,281 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.openSqliteConnection = openSqliteConnection;
37
- const table_names_1 = require("../../providers/sqlite/table-names");
38
- const primitives_1 = require("../../../util/primitives");
39
- const runtime_1 = require("../../../util/runtime");
40
- const BETTER_SQLITE3_MODULE = 'better-sqlite3';
41
- const BUN_SQLITE_MODULE = 'bun:sqlite';
42
- const SQLITE_PRAGMA_TOKEN_PATTERN = /^[A-Za-z0-9_+-]+$/;
43
- const DEFAULT_SQLITE_PRAGMAS = Object.freeze({
44
- journal_mode: 'WAL',
45
- synchronous: 'normal',
46
- busy_timeout: 5000
47
- });
48
- const ALLOWED_SQLITE_PRAGMAS = {
49
- auto_vacuum: 'token_or_int',
50
- busy_timeout: 'int',
51
- cache_size: 'int',
52
- foreign_keys: 'token_or_int',
53
- journal_mode: 'token',
54
- journal_size_limit: 'int',
55
- legacy_alter_table: 'token_or_int',
56
- locking_mode: 'token',
57
- mmap_size: 'int',
58
- page_size: 'int',
59
- recursive_triggers: 'token_or_int',
60
- secure_delete: 'token_or_int',
61
- synchronous: 'token_or_int',
62
- temp_store: 'token_or_int',
63
- wal_autocheckpoint: 'int'
64
- };
65
- function asConstructor(loaded) {
66
- if (typeof loaded === 'function') {
67
- return loaded;
68
- }
69
- if (loaded && typeof loaded === 'object') {
70
- const candidate = loaded.default;
71
- if (typeof candidate === 'function') {
72
- return candidate;
73
- }
74
- }
75
- throw new Error('invalid sqlite driver export');
76
- }
77
- function statementFor(db, sql) {
78
- const prepare = db.prepare ?? db.query;
79
- if (!prepare) {
80
- throw new Error('sqlite driver does not expose prepare/query method');
81
- }
82
- const statement = prepare.call(db, sql);
83
- if (!statement ||
84
- typeof statement.run !== 'function' ||
85
- typeof statement.get !== 'function' ||
86
- typeof statement.all !== 'function') {
87
- throw new Error('invalid sqlite statement API');
88
- }
89
- return statement;
90
- }
91
- function wrapConnection(db, driver, resolveSql, onClose) {
92
- const statementCache = new Map();
93
- const cachedStatementFor = (sql) => {
94
- const resolvedSql = resolveSql(sql);
95
- const cached = statementCache.get(resolvedSql);
96
- if (cached) {
97
- return cached;
98
- }
99
- const statement = statementFor(db, resolvedSql);
100
- statementCache.set(resolvedSql, statement);
101
- return statement;
102
- };
103
- return {
104
- driver,
105
- exec(sql) {
106
- db.exec(resolveSql(sql));
107
- },
108
- run(sql, params) {
109
- const statement = cachedStatementFor(sql);
110
- if (!params || params.length === 0) {
111
- statement.run();
112
- return;
113
- }
114
- statement.run(...params);
115
- },
116
- get(sql, params) {
117
- const statement = cachedStatementFor(sql);
118
- const row = !params || params.length === 0 ? statement.get() : statement.get(...params);
119
- return row ?? null;
120
- },
121
- all(sql, params) {
122
- const statement = cachedStatementFor(sql);
123
- const rows = !params || params.length === 0 ? statement.all() : statement.all(...params);
124
- return Array.isArray(rows) ? rows : [];
125
- },
126
- close() {
127
- statementCache.clear();
128
- try {
129
- db.close();
130
- }
131
- finally {
132
- onClose?.();
133
- }
134
- }
135
- };
136
- }
137
- function pragmaEntries(options) {
138
- return Object.entries(mergePragmas(options.pragmas));
139
- }
140
- function mergePragmas(pragmas) {
141
- return {
142
- ...DEFAULT_SQLITE_PRAGMAS,
143
- ...(pragmas ?? {})
144
- };
145
- }
146
- const ALLOWED_SQLITE_PRAGMA_LIST = Object.keys(ALLOWED_SQLITE_PRAGMAS).sort().join(', ');
147
- function normalizePragmaKey(rawKey) {
148
- const key = rawKey.trim().toLowerCase();
149
- if (!Object.prototype.hasOwnProperty.call(ALLOWED_SQLITE_PRAGMAS, key)) {
150
- throw new Error(`unsupported sqlite pragma "${rawKey}". Allowed pragmas: ${ALLOWED_SQLITE_PRAGMA_LIST}`);
151
- }
152
- return key;
153
- }
154
- function normalizePragmaToken(key, rawValue) {
155
- const value = rawValue.trim();
156
- if (value.length === 0 || !SQLITE_PRAGMA_TOKEN_PATTERN.test(value)) {
157
- throw new Error(`invalid sqlite pragma "${key}" value "${rawValue}". Allowed token pattern: ${SQLITE_PRAGMA_TOKEN_PATTERN}`);
158
- }
159
- return value;
160
- }
161
- function normalizePragmaValue(key, rawValue) {
162
- const kind = ALLOWED_SQLITE_PRAGMAS[key];
163
- if (kind === 'int') {
164
- if (typeof rawValue !== 'number') {
165
- throw new Error(`sqlite pragma "${key}" must be a number`);
166
- }
167
- return String((0, primitives_1.toSafeNumber)(rawValue, `sqlite pragma "${key}"`));
168
- }
169
- if (kind === 'token') {
170
- if (typeof rawValue !== 'string') {
171
- throw new Error(`sqlite pragma "${key}" must be a string token`);
172
- }
173
- return normalizePragmaToken(key, rawValue);
174
- }
175
- if (typeof rawValue === 'number') {
176
- return String((0, primitives_1.toSafeNumber)(rawValue, `sqlite pragma "${key}"`));
177
- }
178
- return normalizePragmaToken(key, rawValue);
179
- }
180
- function applyPragmas(db, options) {
181
- for (const [rawKey, rawValue] of pragmaEntries(options)) {
182
- const key = normalizePragmaKey(rawKey);
183
- const value = normalizePragmaValue(key, rawValue);
184
- const statement = `${key}=${value}`;
185
- if (db.pragma) {
186
- db.pragma(statement);
187
- continue;
188
- }
189
- db.exec(`PRAGMA ${statement}`);
190
- }
191
- }
192
- function closeDatabaseSafely(db) {
193
- try {
194
- db.close();
195
- }
196
- catch {
197
- return;
198
- }
199
- }
200
- async function openBetterSqlite(options, resolveSql, onClose) {
201
- let loaded;
202
- try {
203
- loaded = await Promise.resolve(`${BETTER_SQLITE3_MODULE}`).then(s => __importStar(require(s)));
204
- }
205
- catch {
206
- throw new Error('optional dependency "better-sqlite3" is not installed. Install with: npm i better-sqlite3');
207
- }
208
- const Database = asConstructor(loaded);
209
- const db = new Database(options.path);
210
- try {
211
- applyPragmas(db, options);
212
- }
213
- catch (error) {
214
- closeDatabaseSafely(db);
215
- throw error;
216
- }
217
- return wrapConnection(db, 'better-sqlite3', resolveSql, onClose);
218
- }
219
- async function openBunSqlite(options, resolveSql, onClose) {
220
- let loaded;
221
- try {
222
- loaded = await Promise.resolve(`${BUN_SQLITE_MODULE}`).then(s => __importStar(require(s)));
223
- }
224
- catch {
225
- throw new Error('bun runtime sqlite module "bun:sqlite" is unavailable. Run this in Bun or set storage.sqlite.driver to "better-sqlite3".');
226
- }
227
- if (!loaded || typeof loaded !== 'object') {
228
- throw new Error('invalid bun sqlite module export');
229
- }
230
- const ctor = loaded.Database;
231
- if (typeof ctor !== 'function') {
232
- throw new Error('invalid bun sqlite module export');
233
- }
234
- const db = new ctor(options.path);
235
- try {
236
- applyPragmas(db, options);
237
- }
238
- catch (error) {
239
- closeDatabaseSafely(db);
240
- throw error;
241
- }
242
- return wrapConnection(db, 'bun', resolveSql, onClose);
243
- }
244
- function resolveDriver(requested) {
245
- if (requested && requested !== 'auto') {
246
- return requested;
247
- }
248
- return (0, runtime_1.isBunRuntime)() ? 'bun' : 'better-sqlite3';
249
- }
250
- async function openSqliteConnection(options) {
251
- const driver = resolveDriver(options.driver);
252
- const resolvedTableNames = (0, table_names_1.resolveSqliteTableNames)(options.tableNames);
253
- const resolveSql = (0, table_names_1.createSqliteTableNameSqlResolver)(resolvedTableNames);
254
- const normalizedOptions = {
255
- ...options,
256
- driver,
257
- pragmas: mergePragmas(options.pragmas),
258
- tableNames: resolvedTableNames
259
- };
260
- const cacheKey = `${driver}|${options.path}|${Object.entries(normalizedOptions.pragmas ?? {})
261
- .sort(([left], [right]) => left.localeCompare(right))
262
- .map(([key, value]) => `${key}=${String(value)}`)
263
- .join(';')}|${(0, table_names_1.serializeSqliteTableNames)(resolvedTableNames)}`;
264
- const cached = SQLITE_CONNECTION_CACHE.get(cacheKey);
265
- if (cached) {
266
- return cached;
267
- }
268
- const onClose = () => {
269
- SQLITE_CONNECTION_CACHE.delete(cacheKey);
270
- };
271
- const created = driver === 'bun'
272
- ? openBunSqlite(normalizedOptions, resolveSql, onClose)
273
- : openBetterSqlite(normalizedOptions, resolveSql, onClose);
274
- const guarded = created.catch((error) => {
275
- SQLITE_CONNECTION_CACHE.delete(cacheKey);
276
- throw error;
277
- });
278
- SQLITE_CONNECTION_CACHE.set(cacheKey, guarded);
279
- return guarded;
280
- }
281
- const SQLITE_CONNECTION_CACHE = new Map();
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaContactSqliteStore = void 0;
4
- const BaseSqliteStore_1 = require("../../providers/sqlite/BaseSqliteStore");
5
- const coercion_1 = require("../../../util/coercion");
6
- function decodeContactRow(row) {
7
- return {
8
- jid: (0, coercion_1.asString)(row.jid, 'mailbox_contacts.jid'),
9
- displayName: (0, coercion_1.asOptionalString)(row.display_name, 'mailbox_contacts.display_name'),
10
- pushName: (0, coercion_1.asOptionalString)(row.push_name, 'mailbox_contacts.push_name'),
11
- lid: (0, coercion_1.asOptionalString)(row.lid, 'mailbox_contacts.lid'),
12
- phoneNumber: (0, coercion_1.asOptionalString)(row.phone_number, 'mailbox_contacts.phone_number'),
13
- lastUpdatedMs: (0, coercion_1.asNumber)(row.last_updated_ms, 'mailbox_contacts.last_updated_ms')
14
- };
15
- }
16
- class WaContactSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
17
- constructor(options) {
18
- super(options, ['mailbox']);
19
- }
20
- async upsert(record) {
21
- const db = await this.getConnection();
22
- this.upsertContactRow(db, record);
23
- }
24
- async upsertBatch(records) {
25
- if (records.length === 0) {
26
- return;
27
- }
28
- await this.withTransaction((db) => {
29
- for (const record of records) {
30
- this.upsertContactRow(db, record);
31
- }
32
- });
33
- }
34
- async getByJid(jid) {
35
- const db = await this.getConnection();
36
- const row = db.get(`SELECT jid, display_name, push_name, lid, phone_number, last_updated_ms
37
- FROM mailbox_contacts
38
- WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
39
- return row ? decodeContactRow(row) : null;
40
- }
41
- async deleteByJid(jid) {
42
- const db = await this.getConnection();
43
- db.run(`DELETE FROM mailbox_contacts
44
- WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
45
- const row = db.get('SELECT changes() AS total', []);
46
- return row ? Number(row.total) : 0;
47
- }
48
- async clear() {
49
- const db = await this.getConnection();
50
- db.run('DELETE FROM mailbox_contacts WHERE session_id = ?', [this.options.sessionId]);
51
- }
52
- upsertContactRow(db, record) {
53
- db.run(`INSERT INTO mailbox_contacts (
54
- session_id,
55
- jid,
56
- display_name,
57
- push_name,
58
- lid,
59
- phone_number,
60
- last_updated_ms
61
- ) VALUES (?, ?, ?, ?, ?, ?, ?)
62
- ON CONFLICT(session_id, jid) DO UPDATE SET
63
- display_name=COALESCE(excluded.display_name, mailbox_contacts.display_name),
64
- push_name=COALESCE(excluded.push_name, mailbox_contacts.push_name),
65
- lid=COALESCE(excluded.lid, mailbox_contacts.lid),
66
- phone_number=COALESCE(excluded.phone_number, mailbox_contacts.phone_number),
67
- last_updated_ms=excluded.last_updated_ms`, [
68
- this.options.sessionId,
69
- record.jid,
70
- record.displayName ?? null,
71
- record.pushName ?? null,
72
- record.lid ?? null,
73
- record.phoneNumber ?? null,
74
- record.lastUpdatedMs
75
- ]);
76
- }
77
- }
78
- exports.WaContactSqliteStore = WaContactSqliteStore;
@@ -1,131 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaDeviceListSqliteStore = void 0;
4
- const BaseSqliteStore_1 = require("../../providers/sqlite/BaseSqliteStore");
5
- const coercion_1 = require("../../../util/coercion");
6
- const DEFAULTS = Object.freeze({
7
- ttlMs: 5 * 60 * 1000,
8
- batchSize: 500
9
- });
10
- class WaDeviceListSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
11
- constructor(options, ttlMs = DEFAULTS.ttlMs, batchSize) {
12
- super(options, ['deviceList']);
13
- this.ttlMs = ttlMs;
14
- this.batchSize = (0, coercion_1.resolvePositive)(batchSize, DEFAULTS.batchSize, 'deviceList.sqlite.batchSize');
15
- }
16
- async upsertUserDevicesBatch(snapshots) {
17
- if (snapshots.length === 0) {
18
- return;
19
- }
20
- await this.withTransaction((db) => {
21
- for (const snapshot of snapshots) {
22
- this.upsertUserDevicesRow(db, snapshot);
23
- }
24
- });
25
- }
26
- async getUserDevicesBatch(userJids, nowMs = Date.now()) {
27
- if (userJids.length === 0) {
28
- return [];
29
- }
30
- const uniqueUserJids = [...new Set(userJids)];
31
- return this.withTransaction((db) => {
32
- const activeByUserJid = new Map();
33
- const expiredUserJids = [];
34
- for (let start = 0; start < uniqueUserJids.length; start += this.batchSize) {
35
- const end = Math.min(start + this.batchSize, uniqueUserJids.length);
36
- const batchLength = end - start;
37
- const placeholders = '?, '.repeat(batchLength).slice(0, -2);
38
- const params = [this.options.sessionId];
39
- for (let index = start; index < end; index += 1) {
40
- params.push(uniqueUserJids[index]);
41
- }
42
- const rows = db.all(`SELECT user_jid, device_jids_json, updated_at_ms, expires_at_ms
43
- FROM device_list_cache
44
- WHERE session_id = ? AND user_jid IN (${placeholders})`, params);
45
- for (const row of rows) {
46
- const userJid = (0, coercion_1.asString)(row.user_jid, 'device_list_cache.user_jid');
47
- const expiresAtMs = (0, coercion_1.asNumber)(row.expires_at_ms, 'device_list_cache.expires_at_ms');
48
- if (expiresAtMs <= nowMs) {
49
- expiredUserJids.push(userJid);
50
- continue;
51
- }
52
- activeByUserJid.set(userJid, {
53
- userJid,
54
- deviceJids: decodeDeviceJids(row.device_jids_json),
55
- updatedAtMs: (0, coercion_1.asNumber)(row.updated_at_ms, 'device_list_cache.updated_at_ms')
56
- });
57
- }
58
- }
59
- if (expiredUserJids.length > 0) {
60
- this.deleteUserDevicesByJids(db, expiredUserJids);
61
- }
62
- return userJids.map((userJid) => activeByUserJid.get(userJid) ?? null);
63
- });
64
- }
65
- async deleteUserDevices(userJid) {
66
- const db = await this.getConnection();
67
- db.run(`DELETE FROM device_list_cache
68
- WHERE session_id = ? AND user_jid = ?`, [this.options.sessionId, userJid]);
69
- const row = db.get('SELECT changes() AS total', []);
70
- return row ? Number(row.total) : 0;
71
- }
72
- async cleanupExpired(nowMs) {
73
- const db = await this.getConnection();
74
- db.run(`DELETE FROM device_list_cache
75
- WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
76
- const row = db.get('SELECT changes() AS total', []);
77
- return row ? Number(row.total) : 0;
78
- }
79
- async clear() {
80
- const db = await this.getConnection();
81
- db.run('DELETE FROM device_list_cache WHERE session_id = ?', [this.options.sessionId]);
82
- }
83
- upsertUserDevicesRow(db, snapshot) {
84
- db.run(`INSERT INTO device_list_cache (
85
- session_id,
86
- user_jid,
87
- device_jids_json,
88
- updated_at_ms,
89
- expires_at_ms
90
- ) VALUES (?, ?, ?, ?, ?)
91
- ON CONFLICT(session_id, user_jid) DO UPDATE SET
92
- device_jids_json=excluded.device_jids_json,
93
- updated_at_ms=excluded.updated_at_ms,
94
- expires_at_ms=excluded.expires_at_ms`, [
95
- this.options.sessionId,
96
- snapshot.userJid,
97
- JSON.stringify(snapshot.deviceJids),
98
- snapshot.updatedAtMs,
99
- snapshot.updatedAtMs + this.ttlMs
100
- ]);
101
- }
102
- deleteUserDevicesByJids(db, userJids) {
103
- if (userJids.length === 0) {
104
- return;
105
- }
106
- for (let start = 0; start < userJids.length; start += this.batchSize) {
107
- const end = Math.min(start + this.batchSize, userJids.length);
108
- const batchLength = end - start;
109
- const placeholders = '?, '.repeat(batchLength).slice(0, -2);
110
- const params = [this.options.sessionId];
111
- for (let index = start; index < end; index += 1) {
112
- params.push(userJids[index]);
113
- }
114
- db.run(`DELETE FROM device_list_cache
115
- WHERE session_id = ? AND user_jid IN (${placeholders})`, params);
116
- }
117
- }
118
- }
119
- exports.WaDeviceListSqliteStore = WaDeviceListSqliteStore;
120
- function decodeDeviceJids(raw) {
121
- const json = (0, coercion_1.asString)(raw, 'device_list_cache.device_jids_json');
122
- const parsed = JSON.parse(json);
123
- if (!Array.isArray(parsed)) {
124
- throw new Error('device_list_cache.device_jids_json must be an array');
125
- }
126
- const deviceJids = new Array(parsed.length);
127
- for (let index = 0; index < parsed.length; index += 1) {
128
- deviceJids[index] = (0, coercion_1.asString)(parsed[index], 'device_list_cache.device_jids_json entry');
129
- }
130
- return deviceJids;
131
- }
@@ -1,136 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaMessageSqliteStore = void 0;
4
- const BaseSqliteStore_1 = require("../../providers/sqlite/BaseSqliteStore");
5
- const coercion_1 = require("../../../util/coercion");
6
- const collections_1 = require("../../../util/collections");
7
- function decodeMessageRow(row) {
8
- return {
9
- id: (0, coercion_1.asString)(row.message_id, 'mailbox_messages.message_id'),
10
- threadJid: (0, coercion_1.asString)(row.thread_jid, 'mailbox_messages.thread_jid'),
11
- senderJid: (0, coercion_1.asOptionalString)(row.sender_jid, 'mailbox_messages.sender_jid'),
12
- participantJid: (0, coercion_1.asOptionalString)(row.participant_jid, 'mailbox_messages.participant_jid'),
13
- fromMe: Number(row.from_me) === 1,
14
- timestampMs: (0, coercion_1.asOptionalNumber)(row.timestamp_ms, 'mailbox_messages.timestamp_ms'),
15
- encType: (0, coercion_1.asOptionalString)(row.enc_type, 'mailbox_messages.enc_type'),
16
- plaintext: (0, coercion_1.asOptionalBytes)(row.plaintext, 'mailbox_messages.plaintext'),
17
- messageBytes: (0, coercion_1.asOptionalBytes)(row.message_bytes, 'mailbox_messages.message_bytes')
18
- };
19
- }
20
- class WaMessageSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
21
- constructor(options) {
22
- super(options, ['mailbox']);
23
- }
24
- async upsert(record) {
25
- const db = await this.getConnection();
26
- this.upsertMessageRow(db, record);
27
- }
28
- async upsertBatch(records) {
29
- if (records.length === 0) {
30
- return;
31
- }
32
- await this.withTransaction((db) => {
33
- for (const record of records) {
34
- this.upsertMessageRow(db, record);
35
- }
36
- });
37
- }
38
- async getById(id) {
39
- const db = await this.getConnection();
40
- const row = db.get(`SELECT
41
- message_id,
42
- thread_jid,
43
- sender_jid,
44
- participant_jid,
45
- from_me,
46
- timestamp_ms,
47
- enc_type,
48
- plaintext,
49
- message_bytes
50
- FROM mailbox_messages
51
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
52
- return row ? decodeMessageRow(row) : null;
53
- }
54
- async listByThread(threadJid, limit, beforeTimestampMs) {
55
- const db = await this.getConnection();
56
- const normalizedLimit = (0, collections_1.normalizeQueryLimit)(limit, 50);
57
- const rows = beforeTimestampMs === undefined
58
- ? db.all(`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 thread_jid = ?
70
- ORDER BY timestamp_ms DESC, message_id DESC
71
- LIMIT ?`, [this.options.sessionId, threadJid, normalizedLimit])
72
- : db.all(`SELECT
73
- message_id,
74
- thread_jid,
75
- sender_jid,
76
- participant_jid,
77
- from_me,
78
- timestamp_ms,
79
- enc_type,
80
- plaintext,
81
- message_bytes
82
- FROM mailbox_messages
83
- WHERE session_id = ?
84
- AND thread_jid = ?
85
- AND timestamp_ms < ?
86
- ORDER BY timestamp_ms DESC, message_id DESC
87
- LIMIT ?`, [this.options.sessionId, threadJid, beforeTimestampMs, normalizedLimit]);
88
- return rows.map(decodeMessageRow);
89
- }
90
- async deleteById(id) {
91
- const db = await this.getConnection();
92
- db.run(`DELETE FROM mailbox_messages
93
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
94
- const row = db.get('SELECT changes() AS total', []);
95
- return row ? Number(row.total) : 0;
96
- }
97
- async clear() {
98
- const db = await this.getConnection();
99
- db.run('DELETE FROM mailbox_messages WHERE session_id = ?', [this.options.sessionId]);
100
- }
101
- upsertMessageRow(db, record) {
102
- db.run(`INSERT INTO mailbox_messages (
103
- session_id,
104
- message_id,
105
- thread_jid,
106
- sender_jid,
107
- participant_jid,
108
- from_me,
109
- timestamp_ms,
110
- enc_type,
111
- plaintext,
112
- message_bytes
113
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
114
- ON CONFLICT(session_id, message_id) DO UPDATE SET
115
- thread_jid=excluded.thread_jid,
116
- sender_jid=excluded.sender_jid,
117
- participant_jid=excluded.participant_jid,
118
- from_me=excluded.from_me,
119
- timestamp_ms=excluded.timestamp_ms,
120
- enc_type=excluded.enc_type,
121
- plaintext=excluded.plaintext,
122
- message_bytes=excluded.message_bytes`, [
123
- this.options.sessionId,
124
- record.id,
125
- record.threadJid,
126
- record.senderJid ?? null,
127
- record.participantJid ?? null,
128
- record.fromMe ? 1 : 0,
129
- record.timestampMs ?? null,
130
- record.encType ?? null,
131
- record.plaintext ?? null,
132
- record.messageBytes ?? null
133
- ]);
134
- }
135
- }
136
- exports.WaMessageSqliteStore = WaMessageSqliteStore;