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