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,250 +0,0 @@
1
- import { APP_STATE_EMPTY_LT_HASH } from '../../../appstate/constants.js';
2
- import { decodeAppStateCollections, decodeAppStateFingerprint, decodeAppStateSyncKeys, encodeAppStateFingerprint } from '../../../appstate/store/sqlite.js';
3
- import { keyEpoch, pickActiveSyncKey } from '../../../appstate/utils.js';
4
- import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
5
- import { bytesToHex, uint8Equal } from '../../../util/bytes.js';
6
- import { asBytes, asNumber, asString } from '../../../util/coercion.js';
7
- function repeatSqlToken(token, count, separator) {
8
- if (count <= 1) {
9
- return token;
10
- }
11
- let out = token;
12
- for (let index = 1; index < count; index += 1) {
13
- out += separator + token;
14
- }
15
- return out;
16
- }
17
- export class WaAppStateSqliteStore extends BaseSqliteStore {
18
- constructor(options) {
19
- super(options, ['appState']);
20
- }
21
- async exportData() {
22
- const db = await this.getConnection();
23
- const keyRows = db.all(`SELECT key_id, key_data, timestamp, fingerprint
24
- FROM appstate_sync_keys
25
- WHERE session_id = ?`, [this.options.sessionId]);
26
- const versionRows = db.all(`SELECT collection, version, hash
27
- FROM appstate_collection_versions
28
- WHERE session_id = ?`, [this.options.sessionId]);
29
- const valueRows = db.all(`SELECT collection, index_mac_hex, value_mac
30
- FROM appstate_collection_index_values
31
- WHERE session_id = ?`, [this.options.sessionId]);
32
- return {
33
- keys: decodeAppStateSyncKeys(keyRows),
34
- collections: decodeAppStateCollections(versionRows, valueRows)
35
- };
36
- }
37
- async upsertSyncKeys(keys) {
38
- let inserted = 0;
39
- await this.withTransaction((db) => {
40
- for (const key of keys) {
41
- const existing = db.get(`SELECT key_data
42
- FROM appstate_sync_keys
43
- WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, key.keyId]);
44
- if (existing &&
45
- uint8Equal(asBytes(existing.key_data, 'appstate_sync_keys.key_data'), key.keyData)) {
46
- continue;
47
- }
48
- db.run(`INSERT INTO appstate_sync_keys (
49
- session_id,
50
- key_id,
51
- key_data,
52
- timestamp,
53
- fingerprint,
54
- key_epoch
55
- ) VALUES (?, ?, ?, ?, ?, ?)
56
- ON CONFLICT(session_id, key_id) DO UPDATE SET
57
- key_data=excluded.key_data,
58
- timestamp=excluded.timestamp,
59
- fingerprint=excluded.fingerprint,
60
- key_epoch=excluded.key_epoch`, [
61
- this.options.sessionId,
62
- key.keyId,
63
- key.keyData,
64
- key.timestamp,
65
- encodeAppStateFingerprint(key.fingerprint),
66
- keyEpoch(key.keyId)
67
- ]);
68
- inserted += 1;
69
- }
70
- });
71
- return inserted;
72
- }
73
- async getSyncKey(keyId) {
74
- const db = await this.getConnection();
75
- const row = db.get(`SELECT key_id, key_data, timestamp, fingerprint
76
- FROM appstate_sync_keys
77
- WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, keyId]);
78
- if (!row) {
79
- return null;
80
- }
81
- return {
82
- keyId: asBytes(row.key_id, 'appstate_sync_keys.key_id'),
83
- keyData: asBytes(row.key_data, 'appstate_sync_keys.key_data'),
84
- timestamp: asNumber(row.timestamp, 'appstate_sync_keys.timestamp'),
85
- fingerprint: decodeAppStateFingerprint(row.fingerprint)
86
- };
87
- }
88
- async getSyncKeyData(keyId) {
89
- const db = await this.getConnection();
90
- const row = db.get(`SELECT key_data
91
- FROM appstate_sync_keys
92
- WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, keyId]);
93
- if (!row) {
94
- return null;
95
- }
96
- return asBytes(row.key_data, 'appstate_sync_keys.key_data');
97
- }
98
- async getSyncKeyDataBatch(keyIds) {
99
- if (keyIds.length === 0) {
100
- return [];
101
- }
102
- const db = await this.getConnection();
103
- const uniqueKeyIds = [
104
- ...new Map(keyIds.map((keyId) => [bytesToHex(keyId), keyId])).values()
105
- ];
106
- const placeholders = repeatSqlToken('?', uniqueKeyIds.length, ', ');
107
- const params = [this.options.sessionId, ...uniqueKeyIds];
108
- const rows = db.all(`SELECT key_id, key_data
109
- FROM appstate_sync_keys
110
- WHERE session_id = ? AND key_id IN (${placeholders})`, params);
111
- const byKeyHex = new Map();
112
- for (const row of rows) {
113
- byKeyHex.set(bytesToHex(asBytes(row.key_id, 'appstate_sync_keys.key_id')), asBytes(row.key_data, 'appstate_sync_keys.key_data'));
114
- }
115
- return keyIds.map((keyId) => byKeyHex.get(bytesToHex(keyId)) ?? null);
116
- }
117
- async getActiveSyncKey() {
118
- const db = await this.getConnection();
119
- const rows = db.all(`SELECT key_id, key_data, timestamp, fingerprint
120
- FROM appstate_sync_keys
121
- WHERE session_id = ?`, [this.options.sessionId]);
122
- const keys = [];
123
- for (const row of rows) {
124
- const key = {
125
- keyId: asBytes(row.key_id, 'appstate_sync_keys.key_id'),
126
- keyData: asBytes(row.key_data, 'appstate_sync_keys.key_data'),
127
- timestamp: asNumber(row.timestamp, 'appstate_sync_keys.timestamp'),
128
- fingerprint: decodeAppStateFingerprint(row.fingerprint)
129
- };
130
- keys.push(key);
131
- }
132
- return pickActiveSyncKey(keys);
133
- }
134
- async getCollectionState(collection) {
135
- const db = await this.getConnection();
136
- const versionRow = db.get(`SELECT version, hash
137
- FROM appstate_collection_versions
138
- WHERE session_id = ? AND collection = ?`, [this.options.sessionId, collection]);
139
- if (!versionRow) {
140
- return {
141
- initialized: false,
142
- version: 0,
143
- hash: APP_STATE_EMPTY_LT_HASH,
144
- indexValueMap: new Map()
145
- };
146
- }
147
- const valueRows = db.all(`SELECT index_mac_hex, value_mac
148
- FROM appstate_collection_index_values
149
- WHERE session_id = ? AND collection = ?`, [this.options.sessionId, collection]);
150
- const indexValueMap = new Map();
151
- for (const row of valueRows) {
152
- indexValueMap.set(asString(row.index_mac_hex, 'appstate_collection_index_values.index_mac_hex'), asBytes(row.value_mac, 'appstate_collection_index_values.value_mac'));
153
- }
154
- return {
155
- initialized: true,
156
- version: asNumber(versionRow.version, 'appstate_collection_versions.version'),
157
- hash: asBytes(versionRow.hash, 'appstate_collection_versions.hash'),
158
- indexValueMap
159
- };
160
- }
161
- async getCollectionStates(collections) {
162
- if (collections.length === 0) {
163
- return [];
164
- }
165
- const db = await this.getConnection();
166
- const uniqueCollections = [...new Set(collections)];
167
- const placeholders = repeatSqlToken('?', uniqueCollections.length, ', ');
168
- const params = [this.options.sessionId, ...uniqueCollections];
169
- const versionRows = db.all(`SELECT collection, version, hash
170
- FROM appstate_collection_versions
171
- WHERE session_id = ? AND collection IN (${placeholders})`, params);
172
- const valueRows = db.all(`SELECT collection, index_mac_hex, value_mac
173
- FROM appstate_collection_index_values
174
- WHERE session_id = ? AND collection IN (${placeholders})`, params);
175
- const versionsByCollection = new Map();
176
- for (const row of versionRows) {
177
- const collection = asString(row.collection, 'appstate_collection_versions.collection');
178
- versionsByCollection.set(collection, {
179
- version: asNumber(row.version, 'appstate_collection_versions.version'),
180
- hash: asBytes(row.hash, 'appstate_collection_versions.hash')
181
- });
182
- }
183
- const indexValueMaps = new Map();
184
- for (const row of valueRows) {
185
- const collection = asString(row.collection, 'appstate_collection_index_values.collection');
186
- const map = indexValueMaps.get(collection);
187
- const targetMap = map ?? new Map();
188
- targetMap.set(asString(row.index_mac_hex, 'appstate_collection_index_values.index_mac_hex'), asBytes(row.value_mac, 'appstate_collection_index_values.value_mac'));
189
- if (!map) {
190
- indexValueMaps.set(collection, targetMap);
191
- }
192
- }
193
- return collections.map((collection) => {
194
- const version = versionsByCollection.get(collection);
195
- if (!version) {
196
- return {
197
- initialized: false,
198
- version: 0,
199
- hash: APP_STATE_EMPTY_LT_HASH,
200
- indexValueMap: new Map()
201
- };
202
- }
203
- return {
204
- initialized: true,
205
- version: version.version,
206
- hash: version.hash,
207
- indexValueMap: indexValueMaps.get(collection) ?? new Map()
208
- };
209
- });
210
- }
211
- async setCollectionStates(updates) {
212
- if (updates.length === 0) {
213
- return;
214
- }
215
- await this.withTransaction((db) => {
216
- for (const update of updates) {
217
- db.run(`INSERT INTO appstate_collection_versions (
218
- session_id,
219
- collection,
220
- version,
221
- hash
222
- ) VALUES (?, ?, ?, ?)
223
- ON CONFLICT(session_id, collection) DO UPDATE SET
224
- version=excluded.version,
225
- hash=excluded.hash`, [this.options.sessionId, update.collection, update.version, update.hash]);
226
- db.run(`DELETE FROM appstate_collection_index_values
227
- WHERE session_id = ? AND collection = ?`, [this.options.sessionId, update.collection]);
228
- for (const [indexMacHex, valueMac] of update.indexValueMap.entries()) {
229
- db.run(`INSERT INTO appstate_collection_index_values (
230
- session_id,
231
- collection,
232
- index_mac_hex,
233
- value_mac
234
- ) VALUES (?, ?, ?, ?)`, [this.options.sessionId, update.collection, indexMacHex, valueMac]);
235
- }
236
- }
237
- });
238
- }
239
- async clear() {
240
- await this.withTransaction((db) => {
241
- db.run('DELETE FROM appstate_sync_keys WHERE session_id = ?', [this.options.sessionId]);
242
- db.run('DELETE FROM appstate_collection_versions WHERE session_id = ?', [
243
- this.options.sessionId
244
- ]);
245
- db.run('DELETE FROM appstate_collection_index_values WHERE session_id = ?', [
246
- this.options.sessionId
247
- ]);
248
- });
249
- }
250
- }
@@ -1,176 +0,0 @@
1
- import { proto } from '../../../proto.js';
2
- import { BaseSqliteStore } from '../../providers/sqlite/BaseSqliteStore.js';
3
- import { asBytes, asNumber, asOptionalBytes, asOptionalNumber, asOptionalString, toBoolOrUndef } from '../../../util/coercion.js';
4
- export class WaAuthSqliteStore extends BaseSqliteStore {
5
- constructor(options) {
6
- super(options, ['auth']);
7
- }
8
- async load() {
9
- const db = await this.getConnection();
10
- const row = db.get(`SELECT
11
- noise_pub_key,
12
- noise_priv_key,
13
- registration_id,
14
- identity_pub_key,
15
- identity_priv_key,
16
- signed_prekey_id,
17
- signed_prekey_pub_key,
18
- signed_prekey_priv_key,
19
- signed_prekey_signature,
20
- adv_secret_key,
21
- signed_identity,
22
- me_jid,
23
- me_lid,
24
- me_display_name,
25
- companion_enc_static,
26
- platform,
27
- server_static_key,
28
- server_has_prekeys,
29
- routing_info,
30
- last_success_ts,
31
- props_version,
32
- ab_props_version,
33
- connection_location,
34
- account_creation_ts
35
- FROM auth_credentials
36
- WHERE session_id = ?`, [this.options.sessionId]);
37
- if (!row) {
38
- return null;
39
- }
40
- const signedIdentityBytes = asOptionalBytes(row.signed_identity);
41
- return {
42
- noiseKeyPair: {
43
- pubKey: asBytes(row.noise_pub_key, 'noise_pub_key'),
44
- privKey: asBytes(row.noise_priv_key, 'noise_priv_key')
45
- },
46
- registrationInfo: {
47
- registrationId: asNumber(row.registration_id, 'registration_id'),
48
- identityKeyPair: {
49
- pubKey: asBytes(row.identity_pub_key, 'identity_pub_key'),
50
- privKey: asBytes(row.identity_priv_key, 'identity_priv_key')
51
- }
52
- },
53
- signedPreKey: {
54
- keyId: asNumber(row.signed_prekey_id, 'signed_prekey_id'),
55
- keyPair: {
56
- pubKey: asBytes(row.signed_prekey_pub_key, 'signed_prekey_pub_key'),
57
- privKey: asBytes(row.signed_prekey_priv_key, 'signed_prekey_priv_key')
58
- },
59
- signature: asBytes(row.signed_prekey_signature, 'signed_prekey_signature'),
60
- uploaded: false
61
- },
62
- advSecretKey: asBytes(row.adv_secret_key, 'adv_secret_key'),
63
- signedIdentity: signedIdentityBytes
64
- ? proto.ADVSignedDeviceIdentity.decode(signedIdentityBytes)
65
- : undefined,
66
- meJid: asOptionalString(row.me_jid),
67
- meLid: asOptionalString(row.me_lid),
68
- meDisplayName: asOptionalString(row.me_display_name),
69
- companionEncStatic: asOptionalBytes(row.companion_enc_static),
70
- platform: asOptionalString(row.platform),
71
- serverStaticKey: asOptionalBytes(row.server_static_key),
72
- serverHasPreKeys: toBoolOrUndef(row.server_has_prekeys),
73
- routingInfo: asOptionalBytes(row.routing_info),
74
- lastSuccessTs: asOptionalNumber(row.last_success_ts),
75
- propsVersion: asOptionalNumber(row.props_version),
76
- abPropsVersion: asOptionalNumber(row.ab_props_version),
77
- connectionLocation: asOptionalString(row.connection_location),
78
- accountCreationTs: asOptionalNumber(row.account_creation_ts)
79
- };
80
- }
81
- async save(credentials) {
82
- await this.withTransaction(async (db) => {
83
- db.run(`INSERT INTO auth_credentials (
84
- session_id,
85
- noise_pub_key,
86
- noise_priv_key,
87
- registration_id,
88
- identity_pub_key,
89
- identity_priv_key,
90
- signed_prekey_id,
91
- signed_prekey_pub_key,
92
- signed_prekey_priv_key,
93
- signed_prekey_signature,
94
- adv_secret_key,
95
- signed_identity,
96
- me_jid,
97
- me_lid,
98
- me_display_name,
99
- companion_enc_static,
100
- platform,
101
- server_static_key,
102
- server_has_prekeys,
103
- routing_info,
104
- last_success_ts,
105
- props_version,
106
- ab_props_version,
107
- connection_location,
108
- account_creation_ts
109
- ) VALUES (
110
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
111
- )
112
- ON CONFLICT(session_id) DO UPDATE SET
113
- noise_pub_key=excluded.noise_pub_key,
114
- noise_priv_key=excluded.noise_priv_key,
115
- registration_id=excluded.registration_id,
116
- identity_pub_key=excluded.identity_pub_key,
117
- identity_priv_key=excluded.identity_priv_key,
118
- signed_prekey_id=excluded.signed_prekey_id,
119
- signed_prekey_pub_key=excluded.signed_prekey_pub_key,
120
- signed_prekey_priv_key=excluded.signed_prekey_priv_key,
121
- signed_prekey_signature=excluded.signed_prekey_signature,
122
- adv_secret_key=excluded.adv_secret_key,
123
- signed_identity=excluded.signed_identity,
124
- me_jid=excluded.me_jid,
125
- me_lid=excluded.me_lid,
126
- me_display_name=excluded.me_display_name,
127
- companion_enc_static=excluded.companion_enc_static,
128
- platform=excluded.platform,
129
- server_static_key=excluded.server_static_key,
130
- server_has_prekeys=excluded.server_has_prekeys,
131
- routing_info=excluded.routing_info,
132
- last_success_ts=excluded.last_success_ts,
133
- props_version=excluded.props_version,
134
- ab_props_version=excluded.ab_props_version,
135
- connection_location=excluded.connection_location,
136
- account_creation_ts=excluded.account_creation_ts`, [
137
- this.options.sessionId,
138
- credentials.noiseKeyPair.pubKey,
139
- credentials.noiseKeyPair.privKey,
140
- credentials.registrationInfo.registrationId,
141
- credentials.registrationInfo.identityKeyPair.pubKey,
142
- credentials.registrationInfo.identityKeyPair.privKey,
143
- credentials.signedPreKey.keyId,
144
- credentials.signedPreKey.keyPair.pubKey,
145
- credentials.signedPreKey.keyPair.privKey,
146
- credentials.signedPreKey.signature,
147
- credentials.advSecretKey,
148
- credentials.signedIdentity
149
- ? proto.ADVSignedDeviceIdentity.encode(credentials.signedIdentity).finish()
150
- : null,
151
- credentials.meJid ?? null,
152
- credentials.meLid ?? null,
153
- credentials.meDisplayName ?? null,
154
- credentials.companionEncStatic ?? null,
155
- credentials.platform ?? null,
156
- credentials.serverStaticKey ?? null,
157
- credentials.serverHasPreKeys === undefined
158
- ? null
159
- : credentials.serverHasPreKeys
160
- ? 1
161
- : 0,
162
- credentials.routingInfo ?? null,
163
- credentials.lastSuccessTs ?? null,
164
- credentials.propsVersion ?? null,
165
- credentials.abPropsVersion ?? null,
166
- credentials.connectionLocation ?? null,
167
- credentials.accountCreationTs ?? null
168
- ]);
169
- });
170
- }
171
- async clear() {
172
- await this.withTransaction(async (db) => {
173
- db.run('DELETE FROM auth_credentials WHERE session_id = ?', [this.options.sessionId]);
174
- });
175
- }
176
- }
@@ -1,245 +0,0 @@
1
- import { createSqliteTableNameSqlResolver, resolveSqliteTableNames, serializeSqliteTableNames } from '../../providers/sqlite/table-names.js';
2
- import { toSafeNumber } from '../../../util/primitives.js';
3
- import { isBunRuntime } from '../../../util/runtime.js';
4
- const BETTER_SQLITE3_MODULE = 'better-sqlite3';
5
- const BUN_SQLITE_MODULE = 'bun:sqlite';
6
- const SQLITE_PRAGMA_TOKEN_PATTERN = /^[A-Za-z0-9_+-]+$/;
7
- const DEFAULT_SQLITE_PRAGMAS = Object.freeze({
8
- journal_mode: 'WAL',
9
- synchronous: 'normal',
10
- busy_timeout: 5000
11
- });
12
- const ALLOWED_SQLITE_PRAGMAS = {
13
- auto_vacuum: 'token_or_int',
14
- busy_timeout: 'int',
15
- cache_size: 'int',
16
- foreign_keys: 'token_or_int',
17
- journal_mode: 'token',
18
- journal_size_limit: 'int',
19
- legacy_alter_table: 'token_or_int',
20
- locking_mode: 'token',
21
- mmap_size: 'int',
22
- page_size: 'int',
23
- recursive_triggers: 'token_or_int',
24
- secure_delete: 'token_or_int',
25
- synchronous: 'token_or_int',
26
- temp_store: 'token_or_int',
27
- wal_autocheckpoint: 'int'
28
- };
29
- function asConstructor(loaded) {
30
- if (typeof loaded === 'function') {
31
- return loaded;
32
- }
33
- if (loaded && typeof loaded === 'object') {
34
- const candidate = loaded.default;
35
- if (typeof candidate === 'function') {
36
- return candidate;
37
- }
38
- }
39
- throw new Error('invalid sqlite driver export');
40
- }
41
- function statementFor(db, sql) {
42
- const prepare = db.prepare ?? db.query;
43
- if (!prepare) {
44
- throw new Error('sqlite driver does not expose prepare/query method');
45
- }
46
- const statement = prepare.call(db, sql);
47
- if (!statement ||
48
- typeof statement.run !== 'function' ||
49
- typeof statement.get !== 'function' ||
50
- typeof statement.all !== 'function') {
51
- throw new Error('invalid sqlite statement API');
52
- }
53
- return statement;
54
- }
55
- function wrapConnection(db, driver, resolveSql, onClose) {
56
- const statementCache = new Map();
57
- const cachedStatementFor = (sql) => {
58
- const resolvedSql = resolveSql(sql);
59
- const cached = statementCache.get(resolvedSql);
60
- if (cached) {
61
- return cached;
62
- }
63
- const statement = statementFor(db, resolvedSql);
64
- statementCache.set(resolvedSql, statement);
65
- return statement;
66
- };
67
- return {
68
- driver,
69
- exec(sql) {
70
- db.exec(resolveSql(sql));
71
- },
72
- run(sql, params) {
73
- const statement = cachedStatementFor(sql);
74
- if (!params || params.length === 0) {
75
- statement.run();
76
- return;
77
- }
78
- statement.run(...params);
79
- },
80
- get(sql, params) {
81
- const statement = cachedStatementFor(sql);
82
- const row = !params || params.length === 0 ? statement.get() : statement.get(...params);
83
- return row ?? null;
84
- },
85
- all(sql, params) {
86
- const statement = cachedStatementFor(sql);
87
- const rows = !params || params.length === 0 ? statement.all() : statement.all(...params);
88
- return Array.isArray(rows) ? rows : [];
89
- },
90
- close() {
91
- statementCache.clear();
92
- try {
93
- db.close();
94
- }
95
- finally {
96
- onClose?.();
97
- }
98
- }
99
- };
100
- }
101
- function pragmaEntries(options) {
102
- return Object.entries(mergePragmas(options.pragmas));
103
- }
104
- function mergePragmas(pragmas) {
105
- return {
106
- ...DEFAULT_SQLITE_PRAGMAS,
107
- ...(pragmas ?? {})
108
- };
109
- }
110
- const ALLOWED_SQLITE_PRAGMA_LIST = Object.keys(ALLOWED_SQLITE_PRAGMAS).sort().join(', ');
111
- function normalizePragmaKey(rawKey) {
112
- const key = rawKey.trim().toLowerCase();
113
- if (!Object.prototype.hasOwnProperty.call(ALLOWED_SQLITE_PRAGMAS, key)) {
114
- throw new Error(`unsupported sqlite pragma "${rawKey}". Allowed pragmas: ${ALLOWED_SQLITE_PRAGMA_LIST}`);
115
- }
116
- return key;
117
- }
118
- function normalizePragmaToken(key, rawValue) {
119
- const value = rawValue.trim();
120
- if (value.length === 0 || !SQLITE_PRAGMA_TOKEN_PATTERN.test(value)) {
121
- throw new Error(`invalid sqlite pragma "${key}" value "${rawValue}". Allowed token pattern: ${SQLITE_PRAGMA_TOKEN_PATTERN}`);
122
- }
123
- return value;
124
- }
125
- function normalizePragmaValue(key, rawValue) {
126
- const kind = ALLOWED_SQLITE_PRAGMAS[key];
127
- if (kind === 'int') {
128
- if (typeof rawValue !== 'number') {
129
- throw new Error(`sqlite pragma "${key}" must be a number`);
130
- }
131
- return String(toSafeNumber(rawValue, `sqlite pragma "${key}"`));
132
- }
133
- if (kind === 'token') {
134
- if (typeof rawValue !== 'string') {
135
- throw new Error(`sqlite pragma "${key}" must be a string token`);
136
- }
137
- return normalizePragmaToken(key, rawValue);
138
- }
139
- if (typeof rawValue === 'number') {
140
- return String(toSafeNumber(rawValue, `sqlite pragma "${key}"`));
141
- }
142
- return normalizePragmaToken(key, rawValue);
143
- }
144
- function applyPragmas(db, options) {
145
- for (const [rawKey, rawValue] of pragmaEntries(options)) {
146
- const key = normalizePragmaKey(rawKey);
147
- const value = normalizePragmaValue(key, rawValue);
148
- const statement = `${key}=${value}`;
149
- if (db.pragma) {
150
- db.pragma(statement);
151
- continue;
152
- }
153
- db.exec(`PRAGMA ${statement}`);
154
- }
155
- }
156
- function closeDatabaseSafely(db) {
157
- try {
158
- db.close();
159
- }
160
- catch {
161
- return;
162
- }
163
- }
164
- async function openBetterSqlite(options, resolveSql, onClose) {
165
- let loaded;
166
- try {
167
- loaded = await import(BETTER_SQLITE3_MODULE);
168
- }
169
- catch {
170
- throw new Error('optional dependency "better-sqlite3" is not installed. Install with: npm i better-sqlite3');
171
- }
172
- const Database = asConstructor(loaded);
173
- const db = new Database(options.path);
174
- try {
175
- applyPragmas(db, options);
176
- }
177
- catch (error) {
178
- closeDatabaseSafely(db);
179
- throw error;
180
- }
181
- return wrapConnection(db, 'better-sqlite3', resolveSql, onClose);
182
- }
183
- async function openBunSqlite(options, resolveSql, onClose) {
184
- let loaded;
185
- try {
186
- loaded = await import(BUN_SQLITE_MODULE);
187
- }
188
- catch {
189
- throw new Error('bun runtime sqlite module "bun:sqlite" is unavailable. Run this in Bun or set storage.sqlite.driver to "better-sqlite3".');
190
- }
191
- if (!loaded || typeof loaded !== 'object') {
192
- throw new Error('invalid bun sqlite module export');
193
- }
194
- const ctor = loaded.Database;
195
- if (typeof ctor !== 'function') {
196
- throw new Error('invalid bun sqlite module export');
197
- }
198
- const db = new ctor(options.path);
199
- try {
200
- applyPragmas(db, options);
201
- }
202
- catch (error) {
203
- closeDatabaseSafely(db);
204
- throw error;
205
- }
206
- return wrapConnection(db, 'bun', resolveSql, onClose);
207
- }
208
- function resolveDriver(requested) {
209
- if (requested && requested !== 'auto') {
210
- return requested;
211
- }
212
- return isBunRuntime() ? 'bun' : 'better-sqlite3';
213
- }
214
- export async function openSqliteConnection(options) {
215
- const driver = resolveDriver(options.driver);
216
- const resolvedTableNames = resolveSqliteTableNames(options.tableNames);
217
- const resolveSql = createSqliteTableNameSqlResolver(resolvedTableNames);
218
- const normalizedOptions = {
219
- ...options,
220
- driver,
221
- pragmas: mergePragmas(options.pragmas),
222
- tableNames: resolvedTableNames
223
- };
224
- const cacheKey = `${driver}|${options.path}|${Object.entries(normalizedOptions.pragmas ?? {})
225
- .sort(([left], [right]) => left.localeCompare(right))
226
- .map(([key, value]) => `${key}=${String(value)}`)
227
- .join(';')}|${serializeSqliteTableNames(resolvedTableNames)}`;
228
- const cached = SQLITE_CONNECTION_CACHE.get(cacheKey);
229
- if (cached) {
230
- return cached;
231
- }
232
- const onClose = () => {
233
- SQLITE_CONNECTION_CACHE.delete(cacheKey);
234
- };
235
- const created = driver === 'bun'
236
- ? openBunSqlite(normalizedOptions, resolveSql, onClose)
237
- : openBetterSqlite(normalizedOptions, resolveSql, onClose);
238
- const guarded = created.catch((error) => {
239
- SQLITE_CONNECTION_CACHE.delete(cacheKey);
240
- throw error;
241
- });
242
- SQLITE_CONNECTION_CACHE.set(cacheKey, guarded);
243
- return guarded;
244
- }
245
- const SQLITE_CONNECTION_CACHE = new Map();