zapo-js 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/README.md +12 -4
  2. package/dist/appstate/WaAppStateCrypto.js +1 -1
  3. package/dist/appstate/WaAppStateSyncClient.js +138 -93
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +8 -6
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +36 -47
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +7 -7
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  11. package/dist/auth/pairing/WaPairingFlow.js +13 -3
  12. package/dist/client/WaClient.js +225 -101
  13. package/dist/client/WaClientFactory.js +294 -44
  14. package/dist/client/connection/WaConnectionManager.js +19 -10
  15. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  16. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  17. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  18. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +292 -99
  19. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  20. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  21. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  22. package/dist/client/coordinators/WaRetryCoordinator.js +179 -27
  23. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  24. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  25. package/dist/client/dirty.js +40 -20
  26. package/dist/client/events/devices.js +72 -0
  27. package/dist/client/events/group.js +3 -11
  28. package/dist/client/events/identity.js +22 -0
  29. package/dist/client/events/privacy-token.js +39 -0
  30. package/dist/client/history-sync.js +50 -9
  31. package/dist/client/incoming.js +37 -7
  32. package/dist/client/mailbox.js +24 -23
  33. package/dist/client/messages.js +107 -31
  34. package/dist/client/messaging/fanout.js +21 -11
  35. package/dist/client/messaging/participants.js +6 -4
  36. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  37. package/dist/client/tokens/cs-token.js +50 -0
  38. package/dist/client/tokens/tc-token.js +25 -0
  39. package/dist/crypto/core/index.js +2 -2
  40. package/dist/crypto/core/keys.js +4 -4
  41. package/dist/crypto/core/nonce.js +2 -0
  42. package/dist/crypto/core/primitives.js +0 -8
  43. package/dist/crypto/core/random.js +22 -0
  44. package/dist/crypto/curves/X25519.js +25 -6
  45. package/dist/crypto/index.js +3 -0
  46. package/dist/crypto/math/constants.js +13 -36
  47. package/dist/crypto/math/edwards.js +171 -44
  48. package/dist/crypto/math/fe.js +706 -0
  49. package/dist/crypto/math/mod.js +10 -3
  50. package/dist/esm/appstate/WaAppStateCrypto.js +1 -1
  51. package/dist/esm/appstate/WaAppStateSyncClient.js +138 -93
  52. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  53. package/dist/esm/appstate/index.js +2 -2
  54. package/dist/esm/appstate/utils.js +2 -5
  55. package/dist/esm/auth/WaAuthClient.js +36 -47
  56. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +7 -7
  57. package/dist/esm/auth/index.js +0 -2
  58. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  59. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -4
  60. package/dist/esm/client/WaClient.js +225 -101
  61. package/dist/esm/client/WaClientFactory.js +295 -45
  62. package/dist/esm/client/connection/WaConnectionManager.js +19 -10
  63. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  64. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  65. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +1 -0
  66. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +295 -102
  67. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  68. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  69. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  70. package/dist/esm/client/coordinators/WaRetryCoordinator.js +181 -29
  71. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  72. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  73. package/dist/esm/client/dirty.js +40 -20
  74. package/dist/esm/client/events/devices.js +68 -0
  75. package/dist/esm/client/events/group.js +3 -11
  76. package/dist/esm/client/events/identity.js +19 -0
  77. package/dist/esm/client/events/privacy-token.js +36 -0
  78. package/dist/esm/client/history-sync.js +50 -9
  79. package/dist/esm/client/incoming.js +38 -8
  80. package/dist/esm/client/mailbox.js +24 -23
  81. package/dist/esm/client/messages.js +108 -32
  82. package/dist/esm/client/messaging/fanout.js +22 -12
  83. package/dist/esm/client/messaging/participants.js +6 -4
  84. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  85. package/dist/esm/client/tokens/cs-token.js +46 -0
  86. package/dist/esm/client/tokens/tc-token.js +18 -0
  87. package/dist/esm/crypto/core/index.js +2 -2
  88. package/dist/esm/crypto/core/keys.js +1 -1
  89. package/dist/esm/crypto/core/nonce.js +2 -0
  90. package/dist/esm/crypto/core/primitives.js +0 -7
  91. package/dist/esm/crypto/core/random.js +22 -1
  92. package/dist/esm/crypto/curves/X25519.js +25 -6
  93. package/dist/esm/crypto/index.js +1 -0
  94. package/dist/esm/crypto/math/constants.js +12 -35
  95. package/dist/esm/crypto/math/edwards.js +174 -47
  96. package/dist/esm/crypto/math/fe.js +691 -0
  97. package/dist/esm/crypto/math/mod.js +10 -1
  98. package/dist/esm/index.js +1 -1
  99. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  100. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  101. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  102. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  103. package/dist/esm/infra/perf/StoreLock.js +77 -0
  104. package/dist/esm/media/WaMediaCrypto.js +95 -13
  105. package/dist/esm/media/WaMediaTransferClient.js +39 -47
  106. package/dist/esm/media/constants.js +2 -1
  107. package/dist/esm/message/WaMessageClient.js +26 -19
  108. package/dist/esm/message/content.js +195 -9
  109. package/dist/esm/message/icdc.js +76 -0
  110. package/dist/esm/message/incoming.js +24 -12
  111. package/dist/esm/message/phash.js +3 -1
  112. package/dist/esm/message/reporting-token.js +14 -27
  113. package/dist/esm/protocol/appstate.js +9 -40
  114. package/dist/esm/protocol/browser.js +10 -18
  115. package/dist/esm/protocol/constants.js +5 -3
  116. package/dist/esm/protocol/defaults.js +6 -0
  117. package/dist/esm/protocol/index.js +1 -2
  118. package/dist/esm/protocol/jid.js +105 -36
  119. package/dist/esm/protocol/message.js +61 -1
  120. package/dist/esm/protocol/nodes.js +2 -0
  121. package/dist/esm/protocol/notification.js +3 -1
  122. package/dist/esm/protocol/privacy-token.js +17 -0
  123. package/dist/esm/protocol/privacy.js +55 -0
  124. package/dist/esm/protocol/stream.js +26 -1
  125. package/dist/esm/retry/codec.js +216 -0
  126. package/dist/esm/retry/constants.js +1 -1
  127. package/dist/esm/retry/index.js +2 -2
  128. package/dist/esm/retry/parse.js +50 -30
  129. package/dist/esm/retry/replay.js +11 -7
  130. package/dist/esm/retry/tracker.js +50 -12
  131. package/dist/esm/signal/api/SignalDeviceSyncApi.js +49 -32
  132. package/dist/esm/signal/api/SignalDigestSyncApi.js +13 -9
  133. package/dist/esm/signal/api/SignalIdentitySyncApi.js +26 -11
  134. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +18 -7
  135. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  136. package/dist/esm/signal/api/SignalSessionSyncApi.js +16 -7
  137. package/dist/esm/signal/api/result-map.js +10 -0
  138. package/dist/esm/signal/constants.js +0 -4
  139. package/dist/esm/signal/crypto/WaAdvSignature.js +12 -6
  140. package/dist/esm/signal/{store/sqlite.js → encoding.js} +78 -24
  141. package/dist/esm/signal/group/SenderKeyCodec.js +3 -2
  142. package/dist/esm/signal/group/SenderKeyManager.js +125 -106
  143. package/dist/esm/signal/index.js +1 -0
  144. package/dist/esm/signal/registration/keygen.js +6 -2
  145. package/dist/esm/signal/registration/utils.js +1 -0
  146. package/dist/esm/signal/session/SignalProtocol.js +150 -74
  147. package/dist/esm/signal/session/resolver.js +137 -102
  148. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  149. package/dist/esm/store/createStore.js +101 -187
  150. package/dist/esm/store/index.js +1 -10
  151. package/dist/esm/store/locks/appstate.lock.js +26 -0
  152. package/dist/esm/store/locks/auth.lock.js +15 -0
  153. package/dist/esm/store/locks/contact.lock.js +20 -0
  154. package/dist/esm/store/locks/device-list.lock.js +20 -0
  155. package/dist/esm/store/locks/message.lock.js +21 -0
  156. package/dist/esm/store/locks/participants.lock.js +20 -0
  157. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  158. package/dist/esm/store/locks/retry.lock.js +29 -0
  159. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  160. package/dist/esm/store/locks/signal.lock.js +63 -0
  161. package/dist/esm/store/locks/thread.lock.js +21 -0
  162. package/dist/esm/store/noop.store.js +1 -1
  163. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  164. package/dist/esm/store/providers/memory/device-list.store.js +10 -5
  165. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  166. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  167. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  168. package/dist/esm/store/providers/memory/signal.store.js +36 -19
  169. package/dist/esm/transport/WaComms.js +3 -1
  170. package/dist/esm/transport/WaWebSocket.js +0 -6
  171. package/dist/esm/transport/binary/constants.js +0 -30
  172. package/dist/esm/transport/binary/decoder.js +4 -4
  173. package/dist/esm/transport/binary/encoder.js +8 -15
  174. package/dist/esm/transport/binary/index.js +0 -1
  175. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -19
  176. package/dist/esm/transport/node/builders/business.js +129 -0
  177. package/dist/esm/transport/node/builders/global.js +370 -0
  178. package/dist/esm/transport/node/builders/index.js +5 -2
  179. package/dist/esm/transport/node/builders/message.js +63 -239
  180. package/dist/esm/transport/node/builders/pairing.js +0 -24
  181. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  182. package/dist/esm/transport/node/builders/privacy.js +48 -0
  183. package/dist/esm/transport/node/builders/profile.js +70 -0
  184. package/dist/esm/transport/node/builders/retry.js +10 -22
  185. package/dist/esm/transport/node/builders/usync.js +6 -2
  186. package/dist/esm/transport/node/helpers.js +19 -1
  187. package/dist/esm/transport/node/usync.js +3 -33
  188. package/dist/esm/transport/node/xml.js +35 -14
  189. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  190. package/dist/esm/transport/noise/WaNoiseCert.js +3 -3
  191. package/dist/esm/transport/noise/WaNoiseSession.js +64 -23
  192. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  193. package/dist/esm/transport/stream/parse.js +8 -4
  194. package/dist/esm/util/bytes.js +22 -18
  195. package/dist/esm/util/index.js +5 -0
  196. package/dist/esm/util/primitives.js +3 -2
  197. package/dist/index.js +7 -1
  198. package/dist/infra/perf/BackgroundQueue.js +482 -0
  199. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  200. package/dist/infra/perf/PromiseDedup.js +24 -0
  201. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  202. package/dist/infra/perf/StoreLock.js +81 -0
  203. package/dist/media/WaMediaCrypto.js +94 -12
  204. package/dist/media/WaMediaTransferClient.js +39 -47
  205. package/dist/media/constants.js +2 -1
  206. package/dist/message/WaMessageClient.js +26 -19
  207. package/dist/message/content.js +198 -9
  208. package/dist/message/icdc.js +81 -0
  209. package/dist/message/incoming.js +24 -12
  210. package/dist/message/phash.js +3 -1
  211. package/dist/message/reporting-token.js +14 -28
  212. package/dist/protocol/appstate.js +10 -41
  213. package/dist/protocol/browser.js +10 -18
  214. package/dist/protocol/constants.js +21 -2
  215. package/dist/protocol/defaults.js +6 -0
  216. package/dist/protocol/index.js +8 -5
  217. package/dist/protocol/jid.js +111 -36
  218. package/dist/protocol/message.js +62 -2
  219. package/dist/protocol/nodes.js +2 -0
  220. package/dist/protocol/notification.js +3 -1
  221. package/dist/protocol/privacy-token.js +20 -0
  222. package/dist/protocol/privacy.js +58 -0
  223. package/dist/protocol/stream.js +27 -2
  224. package/dist/retry/codec.js +220 -0
  225. package/dist/retry/constants.js +1 -1
  226. package/dist/retry/index.js +5 -5
  227. package/dist/retry/parse.js +51 -30
  228. package/dist/retry/replay.js +10 -6
  229. package/dist/retry/tracker.js +50 -12
  230. package/dist/signal/api/SignalDeviceSyncApi.js +48 -31
  231. package/dist/signal/api/SignalDigestSyncApi.js +13 -9
  232. package/dist/signal/api/SignalIdentitySyncApi.js +25 -10
  233. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  234. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  235. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  236. package/dist/signal/api/result-map.js +13 -0
  237. package/dist/signal/constants.js +1 -5
  238. package/dist/signal/crypto/WaAdvSignature.js +11 -5
  239. package/dist/signal/{store/sqlite.js → encoding.js} +79 -25
  240. package/dist/signal/group/SenderKeyCodec.js +4 -3
  241. package/dist/signal/group/SenderKeyManager.js +125 -106
  242. package/dist/signal/index.js +13 -1
  243. package/dist/signal/registration/keygen.js +6 -2
  244. package/dist/signal/registration/utils.js +1 -0
  245. package/dist/signal/session/SignalProtocol.js +150 -74
  246. package/dist/signal/session/resolver.js +135 -100
  247. package/dist/store/contracts/privacy-token.store.js +2 -0
  248. package/dist/store/createStore.js +101 -187
  249. package/dist/store/index.js +15 -33
  250. package/dist/store/locks/appstate.lock.js +29 -0
  251. package/dist/store/locks/auth.lock.js +18 -0
  252. package/dist/store/locks/contact.lock.js +23 -0
  253. package/dist/store/locks/device-list.lock.js +23 -0
  254. package/dist/store/locks/message.lock.js +24 -0
  255. package/dist/store/locks/participants.lock.js +23 -0
  256. package/dist/store/locks/privacy-token.lock.js +21 -0
  257. package/dist/store/locks/retry.lock.js +32 -0
  258. package/dist/store/locks/sender-key.lock.js +55 -0
  259. package/dist/store/locks/signal.lock.js +66 -0
  260. package/dist/store/locks/thread.lock.js +24 -0
  261. package/dist/store/noop.store.js +1 -1
  262. package/dist/store/providers/memory/appstate.store.js +22 -24
  263. package/dist/store/providers/memory/device-list.store.js +10 -5
  264. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  265. package/dist/store/providers/memory/retry.store.js +77 -2
  266. package/dist/store/providers/memory/sender-key.store.js +6 -1
  267. package/dist/store/providers/memory/signal.store.js +36 -19
  268. package/dist/transport/WaComms.js +3 -1
  269. package/dist/transport/WaWebSocket.js +0 -6
  270. package/dist/transport/binary/constants.js +1 -31
  271. package/dist/transport/binary/decoder.js +4 -4
  272. package/dist/transport/binary/encoder.js +8 -15
  273. package/dist/transport/binary/index.js +0 -4
  274. package/dist/transport/node/WaNodeOrchestrator.js +24 -18
  275. package/dist/transport/node/builders/business.js +137 -0
  276. package/dist/transport/node/builders/global.js +375 -0
  277. package/dist/transport/node/builders/index.js +18 -9
  278. package/dist/transport/node/builders/message.js +64 -245
  279. package/dist/transport/node/builders/pairing.js +0 -26
  280. package/dist/transport/node/builders/privacy-token.js +46 -0
  281. package/dist/transport/node/builders/privacy.js +55 -0
  282. package/dist/transport/node/builders/profile.js +78 -0
  283. package/dist/transport/node/builders/retry.js +9 -21
  284. package/dist/transport/node/builders/usync.js +6 -2
  285. package/dist/transport/node/helpers.js +20 -1
  286. package/dist/transport/node/usync.js +2 -32
  287. package/dist/transport/node/xml.js +35 -14
  288. package/dist/transport/noise/WaClientPayload.js +13 -13
  289. package/dist/transport/noise/WaNoiseCert.js +2 -2
  290. package/dist/transport/noise/WaNoiseSession.js +64 -23
  291. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  292. package/dist/transport/stream/parse.js +7 -3
  293. package/dist/types/appstate/encoding.d.ts +7 -0
  294. package/dist/types/appstate/index.d.ts +3 -3
  295. package/dist/types/appstate/utils.d.ts +0 -2
  296. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  297. package/dist/types/auth/index.d.ts +0 -2
  298. package/dist/types/auth/types.d.ts +1 -0
  299. package/dist/types/client/WaClient.d.ts +27 -12
  300. package/dist/types/client/WaClientFactory.d.ts +12 -4
  301. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  302. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  303. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -1
  304. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +14 -0
  305. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  306. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  307. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  308. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
  309. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  310. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  311. package/dist/types/client/events/devices.d.ts +20 -0
  312. package/dist/types/client/events/identity.d.ts +9 -0
  313. package/dist/types/client/events/privacy-token.d.ts +7 -0
  314. package/dist/types/client/history-sync.d.ts +9 -6
  315. package/dist/types/client/incoming.d.ts +3 -1
  316. package/dist/types/client/index.d.ts +1 -1
  317. package/dist/types/client/mailbox.d.ts +3 -5
  318. package/dist/types/client/messages.d.ts +1 -2
  319. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  320. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  321. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  322. package/dist/types/client/types.d.ts +51 -3
  323. package/dist/types/crypto/core/index.d.ts +2 -2
  324. package/dist/types/crypto/core/nonce.d.ts +2 -0
  325. package/dist/types/crypto/core/primitives.d.ts +0 -1
  326. package/dist/types/crypto/core/random.d.ts +1 -0
  327. package/dist/types/crypto/index.d.ts +1 -0
  328. package/dist/types/crypto/math/constants.d.ts +4 -2
  329. package/dist/types/crypto/math/fe.d.ts +30 -0
  330. package/dist/types/crypto/math/mod.d.ts +0 -2
  331. package/dist/types/crypto/math/types.d.ts +11 -4
  332. package/dist/types/index.d.ts +5 -3
  333. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  334. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  335. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  336. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  337. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  338. package/dist/types/media/WaMediaTransferClient.d.ts +3 -12
  339. package/dist/types/media/constants.d.ts +1 -1
  340. package/dist/types/media/index.d.ts +1 -1
  341. package/dist/types/media/types.d.ts +10 -2
  342. package/dist/types/message/content.d.ts +8 -0
  343. package/dist/types/message/icdc.d.ts +13 -0
  344. package/dist/types/message/reporting-token.d.ts +0 -1
  345. package/dist/types/message/types.d.ts +45 -6
  346. package/dist/types/protocol/appstate.d.ts +0 -11
  347. package/dist/types/protocol/constants.d.ts +7 -3
  348. package/dist/types/protocol/defaults.d.ts +6 -0
  349. package/dist/types/protocol/index.d.ts +1 -2
  350. package/dist/types/protocol/jid.d.ts +19 -2
  351. package/dist/types/protocol/message.d.ts +60 -0
  352. package/dist/types/protocol/nodes.d.ts +2 -0
  353. package/dist/types/protocol/notification.d.ts +2 -0
  354. package/dist/types/protocol/privacy-token.d.ts +17 -0
  355. package/dist/types/protocol/privacy.d.ts +75 -0
  356. package/dist/types/protocol/stream.d.ts +30 -0
  357. package/dist/types/retry/codec.d.ts +3 -0
  358. package/dist/types/retry/index.d.ts +3 -3
  359. package/dist/types/retry/parse.d.ts +5 -2
  360. package/dist/types/retry/tracker.d.ts +1 -0
  361. package/dist/types/retry/types.d.ts +6 -1
  362. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  363. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  364. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  365. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  366. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  367. package/dist/types/signal/api/result-map.d.ts +1 -0
  368. package/dist/types/signal/constants.d.ts +0 -3
  369. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  370. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  371. package/dist/types/signal/index.d.ts +2 -0
  372. package/dist/types/signal/session/SignalProtocol.d.ts +10 -4
  373. package/dist/types/signal/session/resolver.d.ts +7 -2
  374. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  375. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  376. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  377. package/dist/types/store/contracts/signal.store.d.ts +7 -0
  378. package/dist/types/store/createStore.d.ts +1 -1
  379. package/dist/types/store/index.d.ts +5 -13
  380. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  381. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  382. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  383. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  384. package/dist/types/store/locks/message.lock.d.ts +3 -0
  385. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  386. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  387. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  388. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  389. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  390. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  391. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  392. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  393. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  394. package/dist/types/store/providers/memory/signal.store.d.ts +2 -1
  395. package/dist/types/store/types.d.ts +49 -61
  396. package/dist/types/transport/WaWebSocket.d.ts +0 -1
  397. package/dist/types/transport/binary/constants.d.ts +0 -30
  398. package/dist/types/transport/binary/index.d.ts +0 -1
  399. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  400. package/dist/types/transport/node/builders/business.d.ts +29 -0
  401. package/dist/types/transport/node/builders/global.d.ts +102 -0
  402. package/dist/types/transport/node/builders/index.d.ts +5 -2
  403. package/dist/types/transport/node/builders/message.d.ts +8 -7
  404. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  405. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  406. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  407. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  408. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  409. package/dist/types/transport/node/helpers.d.ts +5 -0
  410. package/dist/types/transport/noise/WaNoiseSession.d.ts +3 -2
  411. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  412. package/dist/types/util/bytes.d.ts +1 -1
  413. package/dist/types/util/index.d.ts +5 -0
  414. package/dist/types/util/primitives.d.ts +0 -1
  415. package/dist/util/bytes.js +22 -18
  416. package/dist/util/index.js +23 -0
  417. package/dist/util/primitives.js +2 -2
  418. package/package.json +29 -7
  419. package/proto/index.js +1 -1
  420. package/dist/crypto/core/constants.js +0 -4
  421. package/dist/esm/crypto/core/constants.js +0 -1
  422. package/dist/esm/retry/outbound.js +0 -82
  423. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  424. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  425. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  426. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  427. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  428. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  429. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  430. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  431. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  432. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  433. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  434. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  435. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  436. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  437. package/dist/retry/outbound.js +0 -87
  438. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  439. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  440. package/dist/store/providers/sqlite/auth.store.js +0 -180
  441. package/dist/store/providers/sqlite/connection.js +0 -281
  442. package/dist/store/providers/sqlite/contact.store.js +0 -78
  443. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  444. package/dist/store/providers/sqlite/message.store.js +0 -136
  445. package/dist/store/providers/sqlite/migrations.js +0 -350
  446. package/dist/store/providers/sqlite/participants.store.js +0 -81
  447. package/dist/store/providers/sqlite/retry.store.js +0 -145
  448. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  449. package/dist/store/providers/sqlite/signal.store.js +0 -439
  450. package/dist/store/providers/sqlite/table-names.js +0 -113
  451. package/dist/store/providers/sqlite/thread.store.js +0 -89
  452. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  453. package/dist/types/crypto/core/constants.d.ts +0 -1
  454. package/dist/types/retry/outbound.d.ts +0 -4
  455. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  456. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  457. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  458. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  459. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  460. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  461. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  462. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  463. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  464. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  465. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  466. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  467. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  468. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
@@ -1,136 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaMessageSqliteStore = void 0;
4
- const BaseSqliteStore_1 = require("../../providers/sqlite/BaseSqliteStore");
5
- const coercion_1 = require("../../../util/coercion");
6
- const collections_1 = require("../../../util/collections");
7
- function decodeMessageRow(row) {
8
- return {
9
- id: (0, coercion_1.asString)(row.message_id, 'mailbox_messages.message_id'),
10
- threadJid: (0, coercion_1.asString)(row.thread_jid, 'mailbox_messages.thread_jid'),
11
- senderJid: (0, coercion_1.asOptionalString)(row.sender_jid, 'mailbox_messages.sender_jid'),
12
- participantJid: (0, coercion_1.asOptionalString)(row.participant_jid, 'mailbox_messages.participant_jid'),
13
- fromMe: Number(row.from_me) === 1,
14
- timestampMs: (0, coercion_1.asOptionalNumber)(row.timestamp_ms, 'mailbox_messages.timestamp_ms'),
15
- encType: (0, coercion_1.asOptionalString)(row.enc_type, 'mailbox_messages.enc_type'),
16
- plaintext: (0, coercion_1.asOptionalBytes)(row.plaintext, 'mailbox_messages.plaintext'),
17
- messageBytes: (0, coercion_1.asOptionalBytes)(row.message_bytes, 'mailbox_messages.message_bytes')
18
- };
19
- }
20
- class WaMessageSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
21
- constructor(options) {
22
- super(options, ['mailbox']);
23
- }
24
- async upsert(record) {
25
- const db = await this.getConnection();
26
- this.upsertMessageRow(db, record);
27
- }
28
- async upsertBatch(records) {
29
- if (records.length === 0) {
30
- return;
31
- }
32
- await this.withTransaction((db) => {
33
- for (const record of records) {
34
- this.upsertMessageRow(db, record);
35
- }
36
- });
37
- }
38
- async getById(id) {
39
- const db = await this.getConnection();
40
- const row = db.get(`SELECT
41
- message_id,
42
- thread_jid,
43
- sender_jid,
44
- participant_jid,
45
- from_me,
46
- timestamp_ms,
47
- enc_type,
48
- plaintext,
49
- message_bytes
50
- FROM mailbox_messages
51
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
52
- return row ? decodeMessageRow(row) : null;
53
- }
54
- async listByThread(threadJid, limit, beforeTimestampMs) {
55
- const db = await this.getConnection();
56
- const normalizedLimit = (0, collections_1.normalizeQueryLimit)(limit, 50);
57
- const rows = beforeTimestampMs === undefined
58
- ? db.all(`SELECT
59
- message_id,
60
- thread_jid,
61
- sender_jid,
62
- participant_jid,
63
- from_me,
64
- timestamp_ms,
65
- enc_type,
66
- plaintext,
67
- message_bytes
68
- FROM mailbox_messages
69
- WHERE session_id = ? AND thread_jid = ?
70
- ORDER BY timestamp_ms DESC, message_id DESC
71
- LIMIT ?`, [this.options.sessionId, threadJid, normalizedLimit])
72
- : db.all(`SELECT
73
- message_id,
74
- thread_jid,
75
- sender_jid,
76
- participant_jid,
77
- from_me,
78
- timestamp_ms,
79
- enc_type,
80
- plaintext,
81
- message_bytes
82
- FROM mailbox_messages
83
- WHERE session_id = ?
84
- AND thread_jid = ?
85
- AND timestamp_ms < ?
86
- ORDER BY timestamp_ms DESC, message_id DESC
87
- LIMIT ?`, [this.options.sessionId, threadJid, beforeTimestampMs, normalizedLimit]);
88
- return rows.map(decodeMessageRow);
89
- }
90
- async deleteById(id) {
91
- const db = await this.getConnection();
92
- db.run(`DELETE FROM mailbox_messages
93
- WHERE session_id = ? AND message_id = ?`, [this.options.sessionId, id]);
94
- const row = db.get('SELECT changes() AS total', []);
95
- return row ? Number(row.total) : 0;
96
- }
97
- async clear() {
98
- const db = await this.getConnection();
99
- db.run('DELETE FROM mailbox_messages WHERE session_id = ?', [this.options.sessionId]);
100
- }
101
- upsertMessageRow(db, record) {
102
- db.run(`INSERT INTO mailbox_messages (
103
- session_id,
104
- message_id,
105
- thread_jid,
106
- sender_jid,
107
- participant_jid,
108
- from_me,
109
- timestamp_ms,
110
- enc_type,
111
- plaintext,
112
- message_bytes
113
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
114
- ON CONFLICT(session_id, message_id) DO UPDATE SET
115
- thread_jid=excluded.thread_jid,
116
- sender_jid=excluded.sender_jid,
117
- participant_jid=excluded.participant_jid,
118
- from_me=excluded.from_me,
119
- timestamp_ms=excluded.timestamp_ms,
120
- enc_type=excluded.enc_type,
121
- plaintext=excluded.plaintext,
122
- message_bytes=excluded.message_bytes`, [
123
- this.options.sessionId,
124
- record.id,
125
- record.threadJid,
126
- record.senderJid ?? null,
127
- record.participantJid ?? null,
128
- record.fromMe ? 1 : 0,
129
- record.timestampMs ?? null,
130
- record.encType ?? null,
131
- record.plaintext ?? null,
132
- record.messageBytes ?? null
133
- ]);
134
- }
135
- }
136
- exports.WaMessageSqliteStore = WaMessageSqliteStore;
@@ -1,350 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ensureSqliteMigrations = ensureSqliteMigrations;
4
- const SQLITE_MIGRATIONS = [
5
- {
6
- id: '0001_auth_credentials_schema',
7
- domain: 'auth',
8
- up: (db) => {
9
- db.exec(`
10
- CREATE TABLE IF NOT EXISTS auth_credentials (
11
- session_id TEXT PRIMARY KEY,
12
- noise_pub_key BLOB NOT NULL,
13
- noise_priv_key BLOB NOT NULL,
14
- registration_id INTEGER NOT NULL,
15
- identity_pub_key BLOB NOT NULL,
16
- identity_priv_key BLOB NOT NULL,
17
- signed_prekey_id INTEGER NOT NULL,
18
- signed_prekey_pub_key BLOB NOT NULL,
19
- signed_prekey_priv_key BLOB NOT NULL,
20
- signed_prekey_signature BLOB NOT NULL,
21
- adv_secret_key BLOB NOT NULL,
22
- signed_identity BLOB,
23
- me_jid TEXT,
24
- me_lid TEXT,
25
- me_display_name TEXT,
26
- companion_enc_static BLOB,
27
- platform TEXT,
28
- server_static_key BLOB,
29
- server_has_prekeys INTEGER,
30
- routing_info BLOB,
31
- last_success_ts INTEGER,
32
- props_version INTEGER,
33
- ab_props_version INTEGER,
34
- connection_location TEXT,
35
- account_creation_ts INTEGER
36
- );
37
- `);
38
- }
39
- },
40
- {
41
- id: '0001_signal_schema',
42
- domain: 'signal',
43
- up: (db) => {
44
- db.exec(`
45
- CREATE TABLE IF NOT EXISTS signal_meta (
46
- session_id TEXT PRIMARY KEY,
47
- server_has_prekeys INTEGER NOT NULL DEFAULT 0,
48
- next_prekey_id INTEGER NOT NULL DEFAULT 1
49
- );
50
-
51
- CREATE TABLE IF NOT EXISTS signal_registration (
52
- session_id TEXT PRIMARY KEY,
53
- registration_id INTEGER NOT NULL,
54
- identity_pub_key BLOB NOT NULL,
55
- identity_priv_key BLOB NOT NULL
56
- );
57
-
58
- CREATE TABLE IF NOT EXISTS signal_signed_prekey (
59
- session_id TEXT PRIMARY KEY,
60
- key_id INTEGER NOT NULL,
61
- pub_key BLOB NOT NULL,
62
- priv_key BLOB NOT NULL,
63
- signature BLOB NOT NULL,
64
- uploaded INTEGER NOT NULL DEFAULT 0
65
- );
66
-
67
- CREATE TABLE IF NOT EXISTS signal_prekey (
68
- session_id TEXT NOT NULL,
69
- key_id INTEGER NOT NULL,
70
- pub_key BLOB NOT NULL,
71
- priv_key BLOB NOT NULL,
72
- uploaded INTEGER NOT NULL DEFAULT 0,
73
- PRIMARY KEY (session_id, key_id)
74
- );
75
-
76
- CREATE TABLE IF NOT EXISTS signal_session (
77
- session_id TEXT NOT NULL,
78
- user TEXT NOT NULL,
79
- server TEXT NOT NULL,
80
- device INTEGER NOT NULL,
81
- record BLOB NOT NULL,
82
- PRIMARY KEY (session_id, user, server, device)
83
- );
84
-
85
- CREATE TABLE IF NOT EXISTS signal_identity (
86
- session_id TEXT NOT NULL,
87
- user TEXT NOT NULL,
88
- server TEXT NOT NULL,
89
- device INTEGER NOT NULL,
90
- identity_key BLOB NOT NULL,
91
- PRIMARY KEY (session_id, user, server, device)
92
- );
93
- `);
94
- }
95
- },
96
- {
97
- id: '0001_sender_key_schema',
98
- domain: 'senderKey',
99
- up: (db) => {
100
- db.exec(`
101
- CREATE TABLE IF NOT EXISTS sender_keys (
102
- session_id TEXT NOT NULL,
103
- group_id TEXT NOT NULL,
104
- sender_user TEXT NOT NULL,
105
- sender_server TEXT NOT NULL,
106
- sender_device INTEGER NOT NULL,
107
- record BLOB NOT NULL,
108
- PRIMARY KEY (session_id, group_id, sender_user, sender_server, sender_device)
109
- );
110
-
111
- CREATE TABLE IF NOT EXISTS sender_key_distribution (
112
- session_id TEXT NOT NULL,
113
- group_id TEXT NOT NULL,
114
- sender_user TEXT NOT NULL,
115
- sender_server TEXT NOT NULL,
116
- sender_device INTEGER NOT NULL,
117
- key_id INTEGER NOT NULL,
118
- timestamp_ms INTEGER NOT NULL,
119
- PRIMARY KEY (session_id, group_id, sender_user, sender_server, sender_device)
120
- );
121
- `);
122
- }
123
- },
124
- {
125
- id: '0001_appstate_schema',
126
- domain: 'appState',
127
- up: (db) => {
128
- db.exec(`
129
- CREATE TABLE IF NOT EXISTS appstate_sync_keys (
130
- session_id TEXT NOT NULL,
131
- key_id BLOB NOT NULL,
132
- key_data BLOB NOT NULL,
133
- timestamp INTEGER NOT NULL,
134
- fingerprint BLOB,
135
- key_epoch INTEGER,
136
- PRIMARY KEY (session_id, key_id)
137
- );
138
-
139
- CREATE TABLE IF NOT EXISTS appstate_collection_versions (
140
- session_id TEXT NOT NULL,
141
- collection TEXT NOT NULL,
142
- version INTEGER NOT NULL,
143
- hash BLOB NOT NULL,
144
- PRIMARY KEY (session_id, collection)
145
- );
146
-
147
- CREATE TABLE IF NOT EXISTS appstate_collection_index_values (
148
- session_id TEXT NOT NULL,
149
- collection TEXT NOT NULL,
150
- index_mac_hex TEXT NOT NULL,
151
- value_mac BLOB NOT NULL,
152
- PRIMARY KEY (session_id, collection, index_mac_hex)
153
- );
154
- `);
155
- }
156
- },
157
- {
158
- id: '0003_retry_message_schema',
159
- domain: 'retry',
160
- up: (db) => {
161
- db.exec(`
162
- CREATE TABLE IF NOT EXISTS retry_outbound_messages (
163
- session_id TEXT NOT NULL,
164
- message_id TEXT NOT NULL,
165
- to_jid TEXT NOT NULL,
166
- participant_jid TEXT,
167
- recipient_jid TEXT,
168
- message_type TEXT NOT NULL,
169
- replay_mode TEXT NOT NULL,
170
- replay_payload BLOB NOT NULL,
171
- state TEXT NOT NULL,
172
- created_at_ms INTEGER NOT NULL,
173
- updated_at_ms INTEGER NOT NULL,
174
- expires_at_ms INTEGER NOT NULL,
175
- PRIMARY KEY (session_id, message_id)
176
- );
177
-
178
- CREATE INDEX IF NOT EXISTS retry_outbound_messages_by_expiry
179
- ON retry_outbound_messages (session_id, expires_at_ms);
180
- CREATE INDEX IF NOT EXISTS retry_outbound_messages_by_state
181
- ON retry_outbound_messages (session_id, state);
182
-
183
- CREATE TABLE IF NOT EXISTS retry_inbound_counters (
184
- session_id TEXT NOT NULL,
185
- message_id TEXT NOT NULL,
186
- requester_jid TEXT NOT NULL,
187
- retry_count INTEGER NOT NULL,
188
- updated_at_ms INTEGER NOT NULL,
189
- expires_at_ms INTEGER NOT NULL,
190
- PRIMARY KEY (session_id, message_id, requester_jid)
191
- );
192
-
193
- CREATE INDEX IF NOT EXISTS retry_inbound_counters_by_expiry
194
- ON retry_inbound_counters (session_id, expires_at_ms);
195
- `);
196
- }
197
- },
198
- {
199
- id: '0004_mailbox_schema',
200
- domain: 'mailbox',
201
- up: (db) => {
202
- db.exec(`
203
- CREATE TABLE IF NOT EXISTS mailbox_messages (
204
- session_id TEXT NOT NULL,
205
- message_id TEXT NOT NULL,
206
- thread_jid TEXT NOT NULL,
207
- sender_jid TEXT,
208
- participant_jid TEXT,
209
- from_me INTEGER NOT NULL,
210
- timestamp_ms INTEGER,
211
- enc_type TEXT,
212
- plaintext BLOB,
213
- message_bytes BLOB,
214
- PRIMARY KEY (session_id, message_id)
215
- );
216
-
217
- CREATE INDEX IF NOT EXISTS mailbox_messages_by_thread_timestamp
218
- ON mailbox_messages (session_id, thread_jid, timestamp_ms DESC);
219
-
220
- CREATE TABLE IF NOT EXISTS mailbox_threads (
221
- session_id TEXT NOT NULL,
222
- jid TEXT NOT NULL,
223
- name TEXT,
224
- unread_count INTEGER,
225
- archived INTEGER,
226
- pinned INTEGER,
227
- mute_end_ms INTEGER,
228
- marked_as_unread INTEGER,
229
- ephemeral_expiration INTEGER,
230
- PRIMARY KEY (session_id, jid)
231
- );
232
-
233
- CREATE TABLE IF NOT EXISTS mailbox_contacts (
234
- session_id TEXT NOT NULL,
235
- jid TEXT NOT NULL,
236
- display_name TEXT,
237
- push_name TEXT,
238
- lid TEXT,
239
- phone_number TEXT,
240
- last_updated_ms INTEGER NOT NULL,
241
- PRIMARY KEY (session_id, jid)
242
- );
243
- `);
244
- }
245
- },
246
- {
247
- id: '0005_participants_cache_schema',
248
- domain: 'participants',
249
- up: (db) => {
250
- db.exec(`
251
- CREATE TABLE IF NOT EXISTS group_participants_cache (
252
- session_id TEXT NOT NULL,
253
- group_jid TEXT NOT NULL,
254
- participants_json TEXT NOT NULL,
255
- updated_at_ms INTEGER NOT NULL,
256
- expires_at_ms INTEGER NOT NULL,
257
- PRIMARY KEY (session_id, group_jid)
258
- );
259
-
260
- CREATE INDEX IF NOT EXISTS group_participants_cache_by_expiry
261
- ON group_participants_cache (session_id, expires_at_ms);
262
- `);
263
- }
264
- },
265
- {
266
- id: '0006_device_list_cache_schema',
267
- domain: 'deviceList',
268
- up: (db) => {
269
- db.exec(`
270
- CREATE TABLE IF NOT EXISTS device_list_cache (
271
- session_id TEXT NOT NULL,
272
- user_jid TEXT NOT NULL,
273
- device_jids_json TEXT NOT NULL,
274
- updated_at_ms INTEGER NOT NULL,
275
- expires_at_ms INTEGER NOT NULL,
276
- PRIMARY KEY (session_id, user_jid)
277
- );
278
-
279
- CREATE INDEX IF NOT EXISTS device_list_cache_by_expiry
280
- ON device_list_cache (session_id, expires_at_ms);
281
- `);
282
- }
283
- },
284
- {
285
- id: '0007_signal_signed_prekey_rotation_ts',
286
- domain: 'signal',
287
- up: (db) => {
288
- db.exec(`
289
- ALTER TABLE signal_meta
290
- ADD COLUMN signed_prekey_rotation_ts INTEGER;
291
- `);
292
- }
293
- }
294
- ];
295
- function isMigrationAlreadyAppliedRace(error) {
296
- if (!(error instanceof Error)) {
297
- return false;
298
- }
299
- return /UNIQUE constraint failed: [A-Za-z_][A-Za-z0-9_]*\.id/.test(error.message);
300
- }
301
- function ensureMigrationTable(db) {
302
- db.exec(`
303
- CREATE TABLE IF NOT EXISTS wa_migrations (
304
- id TEXT PRIMARY KEY,
305
- applied_at INTEGER NOT NULL
306
- );
307
- `);
308
- }
309
- function hasMigration(db, id) {
310
- const row = db.get(`SELECT id
311
- FROM wa_migrations
312
- WHERE id = ?`, [id]);
313
- return !!row;
314
- }
315
- function hasDomain(domainSet, migration) {
316
- return domainSet.has(migration.domain);
317
- }
318
- async function ensureSqliteMigrations(db, domains) {
319
- ensureMigrationTable(db);
320
- const domainSet = new Set(domains);
321
- if (domainSet.size === 0) {
322
- return;
323
- }
324
- for (const migration of SQLITE_MIGRATIONS) {
325
- if (!hasDomain(domainSet, migration)) {
326
- continue;
327
- }
328
- if (hasMigration(db, migration.id)) {
329
- continue;
330
- }
331
- db.exec('BEGIN');
332
- try {
333
- if (hasMigration(db, migration.id)) {
334
- db.exec('COMMIT');
335
- continue;
336
- }
337
- db.run(`INSERT INTO wa_migrations (id, applied_at)
338
- VALUES (?, ?)`, [migration.id, Date.now()]);
339
- migration.up(db);
340
- db.exec('COMMIT');
341
- }
342
- catch (error) {
343
- db.exec('ROLLBACK');
344
- if (isMigrationAlreadyAppliedRace(error)) {
345
- continue;
346
- }
347
- throw error;
348
- }
349
- }
350
- }
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaParticipantsSqliteStore = void 0;
4
- const BaseSqliteStore_1 = require("../../providers/sqlite/BaseSqliteStore");
5
- const coercion_1 = require("../../../util/coercion");
6
- const DEFAULT_PARTICIPANTS_TTL_MS = 5 * 60 * 1000;
7
- class WaParticipantsSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
8
- constructor(options, ttlMs = DEFAULT_PARTICIPANTS_TTL_MS) {
9
- super(options, ['participants']);
10
- this.ttlMs = ttlMs;
11
- }
12
- async upsertGroupParticipants(snapshot) {
13
- const db = await this.getConnection();
14
- db.run(`INSERT INTO group_participants_cache (
15
- session_id,
16
- group_jid,
17
- participants_json,
18
- updated_at_ms,
19
- expires_at_ms
20
- ) VALUES (?, ?, ?, ?, ?)
21
- ON CONFLICT(session_id, group_jid) DO UPDATE SET
22
- participants_json=excluded.participants_json,
23
- updated_at_ms=excluded.updated_at_ms,
24
- expires_at_ms=excluded.expires_at_ms`, [
25
- this.options.sessionId,
26
- snapshot.groupJid,
27
- JSON.stringify(snapshot.participants),
28
- snapshot.updatedAtMs,
29
- snapshot.updatedAtMs + this.ttlMs
30
- ]);
31
- }
32
- async getGroupParticipants(groupJid, nowMs = Date.now()) {
33
- const db = await this.getConnection();
34
- const row = db.get(`SELECT group_jid, participants_json, updated_at_ms, expires_at_ms
35
- FROM group_participants_cache
36
- WHERE session_id = ? AND group_jid = ?`, [this.options.sessionId, groupJid]);
37
- if (!row) {
38
- return null;
39
- }
40
- const expiresAtMs = (0, coercion_1.asNumber)(row.expires_at_ms, 'group_participants_cache.expires_at_ms');
41
- if (expiresAtMs <= nowMs) {
42
- db.run(`DELETE FROM group_participants_cache
43
- WHERE session_id = ? AND group_jid = ?`, [this.options.sessionId, groupJid]);
44
- return null;
45
- }
46
- return {
47
- groupJid: (0, coercion_1.asString)(row.group_jid, 'group_participants_cache.group_jid'),
48
- participants: decodeParticipants(row.participants_json),
49
- updatedAtMs: (0, coercion_1.asNumber)(row.updated_at_ms, 'group_participants_cache.updated_at_ms')
50
- };
51
- }
52
- async deleteGroupParticipants(groupJid) {
53
- const db = await this.getConnection();
54
- db.run(`DELETE FROM group_participants_cache
55
- WHERE session_id = ? AND group_jid = ?`, [this.options.sessionId, groupJid]);
56
- const row = db.get('SELECT changes() AS total', []);
57
- return row ? Number(row.total) : 0;
58
- }
59
- async cleanupExpired(nowMs) {
60
- const db = await this.getConnection();
61
- db.run(`DELETE FROM group_participants_cache
62
- WHERE session_id = ? AND expires_at_ms <= ?`, [this.options.sessionId, nowMs]);
63
- const row = db.get('SELECT changes() AS total', []);
64
- return row ? Number(row.total) : 0;
65
- }
66
- async clear() {
67
- const db = await this.getConnection();
68
- db.run('DELETE FROM group_participants_cache WHERE session_id = ?', [
69
- this.options.sessionId
70
- ]);
71
- }
72
- }
73
- exports.WaParticipantsSqliteStore = WaParticipantsSqliteStore;
74
- function decodeParticipants(raw) {
75
- const json = (0, coercion_1.asString)(raw, 'group_participants_cache.participants_json');
76
- const parsed = JSON.parse(json);
77
- if (!Array.isArray(parsed)) {
78
- throw new Error('group_participants_cache.participants_json must be an array');
79
- }
80
- return parsed.map((entry) => (0, coercion_1.asString)(entry, 'group_participants_cache.participants_json entry'));
81
- }