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,74 +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
- this.upsertContactRow(db, record);
20
- }
21
- async upsertBatch(records) {
22
- if (records.length === 0) {
23
- return;
24
- }
25
- await this.withTransaction((db) => {
26
- for (const record of records) {
27
- this.upsertContactRow(db, record);
28
- }
29
- });
30
- }
31
- async getByJid(jid) {
32
- const db = await this.getConnection();
33
- const row = db.get(`SELECT jid, display_name, push_name, lid, phone_number, last_updated_ms
34
- FROM mailbox_contacts
35
- WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
36
- return row ? decodeContactRow(row) : null;
37
- }
38
- async deleteByJid(jid) {
39
- const db = await this.getConnection();
40
- db.run(`DELETE FROM mailbox_contacts
41
- WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
42
- const row = db.get('SELECT changes() AS total', []);
43
- return row ? Number(row.total) : 0;
44
- }
45
- async clear() {
46
- const db = await this.getConnection();
47
- db.run('DELETE FROM mailbox_contacts WHERE session_id = ?', [this.options.sessionId]);
48
- }
49
- upsertContactRow(db, record) {
50
- db.run(`INSERT INTO mailbox_contacts (
51
- session_id,
52
- jid,
53
- display_name,
54
- push_name,
55
- lid,
56
- phone_number,
57
- last_updated_ms
58
- ) VALUES (?, ?, ?, ?, ?, ?, ?)
59
- ON CONFLICT(session_id, jid) DO UPDATE SET
60
- display_name=COALESCE(excluded.display_name, mailbox_contacts.display_name),
61
- push_name=COALESCE(excluded.push_name, mailbox_contacts.push_name),
62
- lid=COALESCE(excluded.lid, mailbox_contacts.lid),
63
- phone_number=COALESCE(excluded.phone_number, mailbox_contacts.phone_number),
64
- last_updated_ms=excluded.last_updated_ms`, [
65
- this.options.sessionId,
66
- record.jid,
67
- record.displayName ?? null,
68
- record.pushName ?? null,
69
- record.lid ?? null,
70
- record.phoneNumber ?? null,
71
- record.lastUpdatedMs
72
- ]);
73
- }
74
- }
@@ -1,127 +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
- async upsertUserDevicesBatch(snapshots) {
14
- if (snapshots.length === 0) {
15
- return;
16
- }
17
- await this.withTransaction((db) => {
18
- for (const snapshot of snapshots) {
19
- this.upsertUserDevicesRow(db, snapshot);
20
- }
21
- });
22
- }
23
- async getUserDevicesBatch(userJids, nowMs = Date.now()) {
24
- if (userJids.length === 0) {
25
- return [];
26
- }
27
- const uniqueUserJids = [...new Set(userJids)];
28
- return this.withTransaction((db) => {
29
- const activeByUserJid = new Map();
30
- const expiredUserJids = [];
31
- for (let start = 0; start < uniqueUserJids.length; start += this.batchSize) {
32
- const end = Math.min(start + this.batchSize, uniqueUserJids.length);
33
- const batchLength = end - start;
34
- const placeholders = '?, '.repeat(batchLength).slice(0, -2);
35
- const params = [this.options.sessionId];
36
- for (let index = start; index < end; index += 1) {
37
- params.push(uniqueUserJids[index]);
38
- }
39
- const rows = db.all(`SELECT user_jid, device_jids_json, updated_at_ms, expires_at_ms
40
- FROM device_list_cache
41
- WHERE session_id = ? AND user_jid IN (${placeholders})`, params);
42
- for (const row of rows) {
43
- const userJid = asString(row.user_jid, 'device_list_cache.user_jid');
44
- const expiresAtMs = asNumber(row.expires_at_ms, 'device_list_cache.expires_at_ms');
45
- if (expiresAtMs <= nowMs) {
46
- expiredUserJids.push(userJid);
47
- continue;
48
- }
49
- activeByUserJid.set(userJid, {
50
- userJid,
51
- deviceJids: decodeDeviceJids(row.device_jids_json),
52
- updatedAtMs: asNumber(row.updated_at_ms, 'device_list_cache.updated_at_ms')
53
- });
54
- }
55
- }
56
- if (expiredUserJids.length > 0) {
57
- this.deleteUserDevicesByJids(db, expiredUserJids);
58
- }
59
- return userJids.map((userJid) => activeByUserJid.get(userJid) ?? null);
60
- });
61
- }
62
- async deleteUserDevices(userJid) {
63
- const db = await this.getConnection();
64
- db.run(`DELETE FROM device_list_cache
65
- WHERE session_id = ? AND user_jid = ?`, [this.options.sessionId, userJid]);
66
- const row = db.get('SELECT changes() AS total', []);
67
- return row ? Number(row.total) : 0;
68
- }
69
- async cleanupExpired(nowMs) {
70
- const db = await this.getConnection();
71
- db.run(`DELETE FROM device_list_cache
72
- WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
73
- const row = db.get('SELECT changes() AS total', []);
74
- return row ? Number(row.total) : 0;
75
- }
76
- async clear() {
77
- const db = await this.getConnection();
78
- db.run('DELETE FROM device_list_cache WHERE session_id = ?', [this.options.sessionId]);
79
- }
80
- upsertUserDevicesRow(db, snapshot) {
81
- db.run(`INSERT INTO device_list_cache (
82
- session_id,
83
- user_jid,
84
- device_jids_json,
85
- updated_at_ms,
86
- expires_at_ms
87
- ) VALUES (?, ?, ?, ?, ?)
88
- ON CONFLICT(session_id, user_jid) DO UPDATE SET
89
- device_jids_json=excluded.device_jids_json,
90
- updated_at_ms=excluded.updated_at_ms,
91
- expires_at_ms=excluded.expires_at_ms`, [
92
- this.options.sessionId,
93
- snapshot.userJid,
94
- JSON.stringify(snapshot.deviceJids),
95
- snapshot.updatedAtMs,
96
- snapshot.updatedAtMs + this.ttlMs
97
- ]);
98
- }
99
- deleteUserDevicesByJids(db, userJids) {
100
- if (userJids.length === 0) {
101
- return;
102
- }
103
- for (let start = 0; start < userJids.length; start += this.batchSize) {
104
- const end = Math.min(start + this.batchSize, userJids.length);
105
- const batchLength = end - start;
106
- const placeholders = '?, '.repeat(batchLength).slice(0, -2);
107
- const params = [this.options.sessionId];
108
- for (let index = start; index < end; index += 1) {
109
- params.push(userJids[index]);
110
- }
111
- db.run(`DELETE FROM device_list_cache
112
- WHERE session_id = ? AND user_jid IN (${placeholders})`, params);
113
- }
114
- }
115
- }
116
- function decodeDeviceJids(raw) {
117
- const json = asString(raw, 'device_list_cache.device_jids_json');
118
- const parsed = JSON.parse(json);
119
- if (!Array.isArray(parsed)) {
120
- throw new Error('device_list_cache.device_jids_json must be an array');
121
- }
122
- const deviceJids = new Array(parsed.length);
123
- for (let index = 0; index < parsed.length; index += 1) {
124
- deviceJids[index] = asString(parsed[index], 'device_list_cache.device_jids_json entry');
125
- }
126
- return deviceJids;
127
- }
@@ -1,132 +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
- this.upsertMessageRow(db, record);
24
- }
25
- async upsertBatch(records) {
26
- if (records.length === 0) {
27
- return;
28
- }
29
- await this.withTransaction((db) => {
30
- for (const record of records) {
31
- this.upsertMessageRow(db, record);
32
- }
33
- });
34
- }
35
- async getById(id) {
36
- const db = await this.getConnection();
37
- const row = db.get(`SELECT
38
- message_id,
39
- thread_jid,
40
- sender_jid,
41
- participant_jid,
42
- from_me,
43
- timestamp_ms,
44
- enc_type,
45
- plaintext,
46
- message_bytes
47
- FROM mailbox_messages
48
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
49
- return row ? decodeMessageRow(row) : null;
50
- }
51
- async listByThread(threadJid, limit, beforeTimestampMs) {
52
- const db = await this.getConnection();
53
- const normalizedLimit = normalizeQueryLimit(limit, 50);
54
- const rows = beforeTimestampMs === undefined
55
- ? db.all(`SELECT
56
- message_id,
57
- thread_jid,
58
- sender_jid,
59
- participant_jid,
60
- from_me,
61
- timestamp_ms,
62
- enc_type,
63
- plaintext,
64
- message_bytes
65
- FROM mailbox_messages
66
- WHERE session_id = ? AND thread_jid = ?
67
- ORDER BY timestamp_ms DESC, message_id DESC
68
- LIMIT ?`, [this.options.sessionId, threadJid, normalizedLimit])
69
- : db.all(`SELECT
70
- message_id,
71
- thread_jid,
72
- sender_jid,
73
- participant_jid,
74
- from_me,
75
- timestamp_ms,
76
- enc_type,
77
- plaintext,
78
- message_bytes
79
- FROM mailbox_messages
80
- WHERE session_id = ?
81
- AND thread_jid = ?
82
- AND timestamp_ms < ?
83
- ORDER BY timestamp_ms DESC, message_id DESC
84
- LIMIT ?`, [this.options.sessionId, threadJid, beforeTimestampMs, normalizedLimit]);
85
- return rows.map(decodeMessageRow);
86
- }
87
- async deleteById(id) {
88
- const db = await this.getConnection();
89
- db.run(`DELETE FROM mailbox_messages
90
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
91
- const row = db.get('SELECT changes() AS total', []);
92
- return row ? Number(row.total) : 0;
93
- }
94
- async clear() {
95
- const db = await this.getConnection();
96
- db.run('DELETE FROM mailbox_messages WHERE session_id = ?', [this.options.sessionId]);
97
- }
98
- upsertMessageRow(db, record) {
99
- db.run(`INSERT INTO mailbox_messages (
100
- session_id,
101
- message_id,
102
- thread_jid,
103
- sender_jid,
104
- participant_jid,
105
- from_me,
106
- timestamp_ms,
107
- enc_type,
108
- plaintext,
109
- message_bytes
110
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
111
- ON CONFLICT(session_id, message_id) DO UPDATE SET
112
- thread_jid=excluded.thread_jid,
113
- sender_jid=excluded.sender_jid,
114
- participant_jid=excluded.participant_jid,
115
- from_me=excluded.from_me,
116
- timestamp_ms=excluded.timestamp_ms,
117
- enc_type=excluded.enc_type,
118
- plaintext=excluded.plaintext,
119
- message_bytes=excluded.message_bytes`, [
120
- this.options.sessionId,
121
- record.id,
122
- record.threadJid,
123
- record.senderJid ?? null,
124
- record.participantJid ?? null,
125
- record.fromMe ? 1 : 0,
126
- record.timestampMs ?? null,
127
- record.encType ?? null,
128
- record.plaintext ?? null,
129
- record.messageBytes ?? null
130
- ]);
131
- }
132
- }
@@ -1,347 +0,0 @@
1
- const SQLITE_MIGRATIONS = [
2
- {
3
- id: '0001_auth_credentials_schema',
4
- domain: 'auth',
5
- up: (db) => {
6
- db.exec(`
7
- CREATE TABLE IF NOT EXISTS auth_credentials (
8
- session_id TEXT PRIMARY KEY,
9
- noise_pub_key BLOB NOT NULL,
10
- noise_priv_key BLOB NOT NULL,
11
- registration_id INTEGER NOT NULL,
12
- identity_pub_key BLOB NOT NULL,
13
- identity_priv_key BLOB NOT NULL,
14
- signed_prekey_id INTEGER NOT NULL,
15
- signed_prekey_pub_key BLOB NOT NULL,
16
- signed_prekey_priv_key BLOB NOT NULL,
17
- signed_prekey_signature BLOB NOT NULL,
18
- adv_secret_key BLOB NOT NULL,
19
- signed_identity BLOB,
20
- me_jid TEXT,
21
- me_lid TEXT,
22
- me_display_name TEXT,
23
- companion_enc_static BLOB,
24
- platform TEXT,
25
- server_static_key BLOB,
26
- server_has_prekeys INTEGER,
27
- routing_info BLOB,
28
- last_success_ts INTEGER,
29
- props_version INTEGER,
30
- ab_props_version INTEGER,
31
- connection_location TEXT,
32
- account_creation_ts INTEGER
33
- );
34
- `);
35
- }
36
- },
37
- {
38
- id: '0001_signal_schema',
39
- domain: 'signal',
40
- up: (db) => {
41
- db.exec(`
42
- CREATE TABLE IF NOT EXISTS signal_meta (
43
- session_id TEXT PRIMARY KEY,
44
- server_has_prekeys INTEGER NOT NULL DEFAULT 0,
45
- next_prekey_id INTEGER NOT NULL DEFAULT 1
46
- );
47
-
48
- CREATE TABLE IF NOT EXISTS signal_registration (
49
- session_id TEXT PRIMARY KEY,
50
- registration_id INTEGER NOT NULL,
51
- identity_pub_key BLOB NOT NULL,
52
- identity_priv_key BLOB NOT NULL
53
- );
54
-
55
- CREATE TABLE IF NOT EXISTS signal_signed_prekey (
56
- session_id TEXT PRIMARY KEY,
57
- key_id INTEGER NOT NULL,
58
- pub_key BLOB NOT NULL,
59
- priv_key BLOB NOT NULL,
60
- signature BLOB NOT NULL,
61
- uploaded INTEGER NOT NULL DEFAULT 0
62
- );
63
-
64
- CREATE TABLE IF NOT EXISTS signal_prekey (
65
- session_id TEXT NOT NULL,
66
- key_id INTEGER NOT NULL,
67
- pub_key BLOB NOT NULL,
68
- priv_key BLOB NOT NULL,
69
- uploaded INTEGER NOT NULL DEFAULT 0,
70
- PRIMARY KEY (session_id, key_id)
71
- );
72
-
73
- CREATE TABLE IF NOT EXISTS signal_session (
74
- session_id TEXT NOT NULL,
75
- user TEXT NOT NULL,
76
- server TEXT NOT NULL,
77
- device INTEGER NOT NULL,
78
- record BLOB NOT NULL,
79
- PRIMARY KEY (session_id, user, server, device)
80
- );
81
-
82
- CREATE TABLE IF NOT EXISTS signal_identity (
83
- session_id TEXT NOT NULL,
84
- user TEXT NOT NULL,
85
- server TEXT NOT NULL,
86
- device INTEGER NOT NULL,
87
- identity_key BLOB NOT NULL,
88
- PRIMARY KEY (session_id, user, server, device)
89
- );
90
- `);
91
- }
92
- },
93
- {
94
- id: '0001_sender_key_schema',
95
- domain: 'senderKey',
96
- up: (db) => {
97
- db.exec(`
98
- CREATE TABLE IF NOT EXISTS sender_keys (
99
- session_id TEXT NOT NULL,
100
- group_id TEXT NOT NULL,
101
- sender_user TEXT NOT NULL,
102
- sender_server TEXT NOT NULL,
103
- sender_device INTEGER NOT NULL,
104
- record BLOB NOT NULL,
105
- PRIMARY KEY (session_id, group_id, sender_user, sender_server, sender_device)
106
- );
107
-
108
- CREATE TABLE IF NOT EXISTS sender_key_distribution (
109
- session_id TEXT NOT NULL,
110
- group_id TEXT NOT NULL,
111
- sender_user TEXT NOT NULL,
112
- sender_server TEXT NOT NULL,
113
- sender_device INTEGER NOT NULL,
114
- key_id INTEGER NOT NULL,
115
- timestamp_ms INTEGER NOT NULL,
116
- PRIMARY KEY (session_id, group_id, sender_user, sender_server, sender_device)
117
- );
118
- `);
119
- }
120
- },
121
- {
122
- id: '0001_appstate_schema',
123
- domain: 'appState',
124
- up: (db) => {
125
- db.exec(`
126
- CREATE TABLE IF NOT EXISTS appstate_sync_keys (
127
- session_id TEXT NOT NULL,
128
- key_id BLOB NOT NULL,
129
- key_data BLOB NOT NULL,
130
- timestamp INTEGER NOT NULL,
131
- fingerprint BLOB,
132
- key_epoch INTEGER,
133
- PRIMARY KEY (session_id, key_id)
134
- );
135
-
136
- CREATE TABLE IF NOT EXISTS appstate_collection_versions (
137
- session_id TEXT NOT NULL,
138
- collection TEXT NOT NULL,
139
- version INTEGER NOT NULL,
140
- hash BLOB NOT NULL,
141
- PRIMARY KEY (session_id, collection)
142
- );
143
-
144
- CREATE TABLE IF NOT EXISTS appstate_collection_index_values (
145
- session_id TEXT NOT NULL,
146
- collection TEXT NOT NULL,
147
- index_mac_hex TEXT NOT NULL,
148
- value_mac BLOB NOT NULL,
149
- PRIMARY KEY (session_id, collection, index_mac_hex)
150
- );
151
- `);
152
- }
153
- },
154
- {
155
- id: '0003_retry_message_schema',
156
- domain: 'retry',
157
- up: (db) => {
158
- db.exec(`
159
- CREATE TABLE IF NOT EXISTS retry_outbound_messages (
160
- session_id TEXT NOT NULL,
161
- message_id TEXT NOT NULL,
162
- to_jid TEXT NOT NULL,
163
- participant_jid TEXT,
164
- recipient_jid TEXT,
165
- message_type TEXT NOT NULL,
166
- replay_mode TEXT NOT NULL,
167
- replay_payload BLOB NOT NULL,
168
- state TEXT NOT NULL,
169
- created_at_ms INTEGER NOT NULL,
170
- updated_at_ms INTEGER NOT NULL,
171
- expires_at_ms INTEGER NOT NULL,
172
- PRIMARY KEY (session_id, message_id)
173
- );
174
-
175
- CREATE INDEX IF NOT EXISTS retry_outbound_messages_by_expiry
176
- ON retry_outbound_messages (session_id, expires_at_ms);
177
- CREATE INDEX IF NOT EXISTS retry_outbound_messages_by_state
178
- ON retry_outbound_messages (session_id, state);
179
-
180
- CREATE TABLE IF NOT EXISTS retry_inbound_counters (
181
- session_id TEXT NOT NULL,
182
- message_id TEXT NOT NULL,
183
- requester_jid TEXT NOT NULL,
184
- retry_count INTEGER NOT NULL,
185
- updated_at_ms INTEGER NOT NULL,
186
- expires_at_ms INTEGER NOT NULL,
187
- PRIMARY KEY (session_id, message_id, requester_jid)
188
- );
189
-
190
- CREATE INDEX IF NOT EXISTS retry_inbound_counters_by_expiry
191
- ON retry_inbound_counters (session_id, expires_at_ms);
192
- `);
193
- }
194
- },
195
- {
196
- id: '0004_mailbox_schema',
197
- domain: 'mailbox',
198
- up: (db) => {
199
- db.exec(`
200
- CREATE TABLE IF NOT EXISTS mailbox_messages (
201
- session_id TEXT NOT NULL,
202
- message_id TEXT NOT NULL,
203
- thread_jid TEXT NOT NULL,
204
- sender_jid TEXT,
205
- participant_jid TEXT,
206
- from_me INTEGER NOT NULL,
207
- timestamp_ms INTEGER,
208
- enc_type TEXT,
209
- plaintext BLOB,
210
- message_bytes BLOB,
211
- PRIMARY KEY (session_id, message_id)
212
- );
213
-
214
- CREATE INDEX IF NOT EXISTS mailbox_messages_by_thread_timestamp
215
- ON mailbox_messages (session_id, thread_jid, timestamp_ms DESC);
216
-
217
- CREATE TABLE IF NOT EXISTS mailbox_threads (
218
- session_id TEXT NOT NULL,
219
- jid TEXT NOT NULL,
220
- name TEXT,
221
- unread_count INTEGER,
222
- archived INTEGER,
223
- pinned INTEGER,
224
- mute_end_ms INTEGER,
225
- marked_as_unread INTEGER,
226
- ephemeral_expiration INTEGER,
227
- PRIMARY KEY (session_id, jid)
228
- );
229
-
230
- CREATE TABLE IF NOT EXISTS mailbox_contacts (
231
- session_id TEXT NOT NULL,
232
- jid TEXT NOT NULL,
233
- display_name TEXT,
234
- push_name TEXT,
235
- lid TEXT,
236
- phone_number TEXT,
237
- last_updated_ms INTEGER NOT NULL,
238
- PRIMARY KEY (session_id, jid)
239
- );
240
- `);
241
- }
242
- },
243
- {
244
- id: '0005_participants_cache_schema',
245
- domain: 'participants',
246
- up: (db) => {
247
- db.exec(`
248
- CREATE TABLE IF NOT EXISTS group_participants_cache (
249
- session_id TEXT NOT NULL,
250
- group_jid TEXT NOT NULL,
251
- participants_json TEXT NOT NULL,
252
- updated_at_ms INTEGER NOT NULL,
253
- expires_at_ms INTEGER NOT NULL,
254
- PRIMARY KEY (session_id, group_jid)
255
- );
256
-
257
- CREATE INDEX IF NOT EXISTS group_participants_cache_by_expiry
258
- ON group_participants_cache (session_id, expires_at_ms);
259
- `);
260
- }
261
- },
262
- {
263
- id: '0006_device_list_cache_schema',
264
- domain: 'deviceList',
265
- up: (db) => {
266
- db.exec(`
267
- CREATE TABLE IF NOT EXISTS device_list_cache (
268
- session_id TEXT NOT NULL,
269
- user_jid TEXT NOT NULL,
270
- device_jids_json TEXT NOT NULL,
271
- updated_at_ms INTEGER NOT NULL,
272
- expires_at_ms INTEGER NOT NULL,
273
- PRIMARY KEY (session_id, user_jid)
274
- );
275
-
276
- CREATE INDEX IF NOT EXISTS device_list_cache_by_expiry
277
- ON device_list_cache (session_id, expires_at_ms);
278
- `);
279
- }
280
- },
281
- {
282
- id: '0007_signal_signed_prekey_rotation_ts',
283
- domain: 'signal',
284
- up: (db) => {
285
- db.exec(`
286
- ALTER TABLE signal_meta
287
- ADD COLUMN signed_prekey_rotation_ts INTEGER;
288
- `);
289
- }
290
- }
291
- ];
292
- function isMigrationAlreadyAppliedRace(error) {
293
- if (!(error instanceof Error)) {
294
- return false;
295
- }
296
- return /UNIQUE constraint failed: [A-Za-z_][A-Za-z0-9_]*\.id/.test(error.message);
297
- }
298
- function ensureMigrationTable(db) {
299
- db.exec(`
300
- CREATE TABLE IF NOT EXISTS wa_migrations (
301
- id TEXT PRIMARY KEY,
302
- applied_at INTEGER NOT NULL
303
- );
304
- `);
305
- }
306
- function hasMigration(db, id) {
307
- const row = db.get(`SELECT id
308
- FROM wa_migrations
309
- WHERE id = ?`, [id]);
310
- return !!row;
311
- }
312
- function hasDomain(domainSet, migration) {
313
- return domainSet.has(migration.domain);
314
- }
315
- export async function ensureSqliteMigrations(db, domains) {
316
- ensureMigrationTable(db);
317
- const domainSet = new Set(domains);
318
- if (domainSet.size === 0) {
319
- return;
320
- }
321
- for (const migration of SQLITE_MIGRATIONS) {
322
- if (!hasDomain(domainSet, migration)) {
323
- continue;
324
- }
325
- if (hasMigration(db, migration.id)) {
326
- continue;
327
- }
328
- db.exec('BEGIN');
329
- try {
330
- if (hasMigration(db, migration.id)) {
331
- db.exec('COMMIT');
332
- continue;
333
- }
334
- db.run(`INSERT INTO wa_migrations (id, applied_at)
335
- VALUES (?, ?)`, [migration.id, Date.now()]);
336
- migration.up(db);
337
- db.exec('COMMIT');
338
- }
339
- catch (error) {
340
- db.exec('ROLLBACK');
341
- if (isMigrationAlreadyAppliedRace(error)) {
342
- continue;
343
- }
344
- throw error;
345
- }
346
- }
347
- }