zapo-js 0.1.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 (585) hide show
  1. package/README.md +235 -0
  2. package/dist/appstate/WaAppStateCrypto.js +202 -0
  3. package/dist/appstate/WaAppStateSyncClient.js +808 -0
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +71 -0
  5. package/dist/appstate/constants.js +23 -0
  6. package/dist/appstate/index.js +28 -0
  7. package/dist/appstate/store/sqlite.js +55 -0
  8. package/dist/appstate/types.js +2 -0
  9. package/dist/appstate/utils.js +84 -0
  10. package/dist/auth/WaAuthClient.js +266 -0
  11. package/dist/auth/flow/WaAuthCredentialsFlow.js +123 -0
  12. package/dist/auth/index.js +27 -0
  13. package/dist/auth/pairing/WaPairingCodeCrypto.js +75 -0
  14. package/dist/auth/pairing/WaPairingFlow.js +328 -0
  15. package/dist/auth/pairing/WaQrFlow.js +86 -0
  16. package/dist/auth/pairing/constants.js +5 -0
  17. package/dist/auth/types.js +2 -0
  18. package/dist/client/WaClient.js +749 -0
  19. package/dist/client/WaClientFactory.js +381 -0
  20. package/dist/client/coordinators/WaGroupCoordinator.js +191 -0
  21. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +315 -0
  22. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +1061 -0
  23. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +200 -0
  24. package/dist/client/coordinators/WaRetryCoordinator.js +494 -0
  25. package/dist/client/coordinators/WaStreamControlCoordinator.js +123 -0
  26. package/dist/client/dirty.js +254 -0
  27. package/dist/client/events/chat.js +226 -0
  28. package/dist/client/events/group.js +410 -0
  29. package/dist/client/history-sync.js +122 -0
  30. package/dist/client/incoming.js +236 -0
  31. package/dist/client/index.js +5 -0
  32. package/dist/client/mailbox.js +49 -0
  33. package/dist/client/messages.js +152 -0
  34. package/dist/client/types.js +2 -0
  35. package/dist/crypto/core/constants.js +4 -0
  36. package/dist/crypto/core/encoding.js +29 -0
  37. package/dist/crypto/core/hkdf.js +26 -0
  38. package/dist/crypto/core/index.js +43 -0
  39. package/dist/crypto/core/keys.js +73 -0
  40. package/dist/crypto/core/nonce.js +18 -0
  41. package/dist/crypto/core/primitives.js +121 -0
  42. package/dist/crypto/core/random.js +32 -0
  43. package/dist/crypto/curves/Ed25519.js +42 -0
  44. package/dist/crypto/curves/X25519.js +64 -0
  45. package/dist/crypto/curves/constants.js +6 -0
  46. package/dist/crypto/curves/types.js +9 -0
  47. package/dist/crypto/index.js +22 -0
  48. package/dist/crypto/math/constants.js +44 -0
  49. package/dist/crypto/math/edwards.js +64 -0
  50. package/dist/crypto/math/le.js +20 -0
  51. package/dist/crypto/math/mod.js +38 -0
  52. package/dist/crypto/math/types.js +2 -0
  53. package/dist/esm/appstate/WaAppStateCrypto.js +198 -0
  54. package/dist/esm/appstate/WaAppStateSyncClient.js +803 -0
  55. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +67 -0
  56. package/dist/esm/appstate/constants.js +20 -0
  57. package/dist/esm/appstate/index.js +6 -0
  58. package/dist/esm/appstate/store/sqlite.js +49 -0
  59. package/dist/esm/appstate/types.js +1 -0
  60. package/dist/esm/appstate/utils.js +75 -0
  61. package/dist/esm/auth/WaAuthClient.js +262 -0
  62. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +118 -0
  63. package/dist/esm/auth/index.js +5 -0
  64. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +71 -0
  65. package/dist/esm/auth/pairing/WaPairingFlow.js +324 -0
  66. package/dist/esm/auth/pairing/WaQrFlow.js +82 -0
  67. package/dist/esm/auth/pairing/constants.js +2 -0
  68. package/dist/esm/auth/types.js +1 -0
  69. package/dist/esm/client/WaClient.js +745 -0
  70. package/dist/esm/client/WaClientFactory.js +377 -0
  71. package/dist/esm/client/coordinators/WaGroupCoordinator.js +188 -0
  72. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +311 -0
  73. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +1057 -0
  74. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +196 -0
  75. package/dist/esm/client/coordinators/WaRetryCoordinator.js +490 -0
  76. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +120 -0
  77. package/dist/esm/client/dirty.js +250 -0
  78. package/dist/esm/client/events/chat.js +223 -0
  79. package/dist/esm/client/events/group.js +407 -0
  80. package/dist/esm/client/history-sync.js +119 -0
  81. package/dist/esm/client/incoming.js +227 -0
  82. package/dist/esm/client/index.js +1 -0
  83. package/dist/esm/client/mailbox.js +46 -0
  84. package/dist/esm/client/messages.js +148 -0
  85. package/dist/esm/client/types.js +1 -0
  86. package/dist/esm/crypto/core/constants.js +1 -0
  87. package/dist/esm/crypto/core/encoding.js +25 -0
  88. package/dist/esm/crypto/core/hkdf.js +22 -0
  89. package/dist/esm/crypto/core/index.js +11 -0
  90. package/dist/esm/crypto/core/keys.js +66 -0
  91. package/dist/esm/crypto/core/nonce.js +15 -0
  92. package/dist/esm/crypto/core/primitives.js +102 -0
  93. package/dist/esm/crypto/core/random.js +28 -0
  94. package/dist/esm/crypto/curves/Ed25519.js +38 -0
  95. package/dist/esm/crypto/curves/X25519.js +58 -0
  96. package/dist/esm/crypto/curves/constants.js +3 -0
  97. package/dist/esm/crypto/curves/types.js +6 -0
  98. package/dist/esm/crypto/index.js +3 -0
  99. package/dist/esm/crypto/math/constants.js +41 -0
  100. package/dist/esm/crypto/math/edwards.js +60 -0
  101. package/dist/esm/crypto/math/le.js +16 -0
  102. package/dist/esm/crypto/math/mod.js +31 -0
  103. package/dist/esm/crypto/math/types.js +1 -0
  104. package/dist/esm/index.js +6 -0
  105. package/dist/esm/infra/log/ConsoleLogger.js +40 -0
  106. package/dist/esm/infra/log/PinoLogger.js +73 -0
  107. package/dist/esm/infra/log/types.js +1 -0
  108. package/dist/esm/infra/perf/BoundedTaskQueue.js +62 -0
  109. package/dist/esm/media/WaMediaCrypto.js +224 -0
  110. package/dist/esm/media/WaMediaTransferClient.js +361 -0
  111. package/dist/esm/media/conn.js +33 -0
  112. package/dist/esm/media/constants.js +18 -0
  113. package/dist/esm/media/index.js +3 -0
  114. package/dist/esm/media/types.js +1 -0
  115. package/dist/esm/message/WaMessageClient.js +210 -0
  116. package/dist/esm/message/ack.js +46 -0
  117. package/dist/esm/message/content.js +20 -0
  118. package/dist/esm/message/device-sent.js +49 -0
  119. package/dist/esm/message/incoming.js +318 -0
  120. package/dist/esm/message/index.js +2 -0
  121. package/dist/esm/message/padding.js +20 -0
  122. package/dist/esm/message/phash.js +25 -0
  123. package/dist/esm/message/types.js +1 -0
  124. package/dist/esm/package.json +3 -0
  125. package/dist/esm/proto.js +3 -0
  126. package/dist/esm/protocol/appstate.js +34 -0
  127. package/dist/esm/protocol/auth.js +12 -0
  128. package/dist/esm/protocol/browser.js +41 -0
  129. package/dist/esm/protocol/constants.js +11 -0
  130. package/dist/esm/protocol/defaults.js +27 -0
  131. package/dist/esm/protocol/dirty.js +26 -0
  132. package/dist/esm/protocol/group.js +5 -0
  133. package/dist/esm/protocol/index.js +11 -0
  134. package/dist/esm/protocol/jid.js +94 -0
  135. package/dist/esm/protocol/media.js +20 -0
  136. package/dist/esm/protocol/message.js +16 -0
  137. package/dist/esm/protocol/nodes.js +83 -0
  138. package/dist/esm/protocol/notification.js +50 -0
  139. package/dist/esm/protocol/stream.js +60 -0
  140. package/dist/esm/retry/constants.js +20 -0
  141. package/dist/esm/retry/index.js +5 -0
  142. package/dist/esm/retry/outbound.js +83 -0
  143. package/dist/esm/retry/parse.js +130 -0
  144. package/dist/esm/retry/reason.js +50 -0
  145. package/dist/esm/retry/replay.js +177 -0
  146. package/dist/esm/retry/types.js +1 -0
  147. package/dist/esm/signal/api/SignalDeviceSyncApi.js +185 -0
  148. package/dist/esm/signal/api/SignalDigestSyncApi.js +179 -0
  149. package/dist/esm/signal/api/SignalIdentitySyncApi.js +111 -0
  150. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +141 -0
  151. package/dist/esm/signal/api/SignalRotateKeyApi.js +59 -0
  152. package/dist/esm/signal/api/SignalSessionSyncApi.js +187 -0
  153. package/dist/esm/signal/api/codec.js +23 -0
  154. package/dist/esm/signal/api/constants.js +9 -0
  155. package/dist/esm/signal/api/prekeys.js +9 -0
  156. package/dist/esm/signal/constants.js +16 -0
  157. package/dist/esm/signal/crypto/WaAdvSignature.js +60 -0
  158. package/dist/esm/signal/crypto/constants.js +8 -0
  159. package/dist/esm/signal/group/SenderKeyChain.js +97 -0
  160. package/dist/esm/signal/group/SenderKeyCodec.js +46 -0
  161. package/dist/esm/signal/group/SenderKeyManager.js +176 -0
  162. package/dist/esm/signal/index.js +11 -0
  163. package/dist/esm/signal/registration/keygen.js +31 -0
  164. package/dist/esm/signal/registration/utils.js +16 -0
  165. package/dist/esm/signal/session/SignalProtocol.js +122 -0
  166. package/dist/esm/signal/session/SignalRatchet.js +260 -0
  167. package/dist/esm/signal/session/SignalSerializer.js +63 -0
  168. package/dist/esm/signal/session/SignalSession.js +153 -0
  169. package/dist/esm/signal/store/sqlite.js +310 -0
  170. package/dist/esm/signal/types.js +1 -0
  171. package/dist/esm/store/contracts/appstate.store.js +1 -0
  172. package/dist/esm/store/contracts/auth.store.js +1 -0
  173. package/dist/esm/store/contracts/contact.store.js +1 -0
  174. package/dist/esm/store/contracts/device-list.store.js +1 -0
  175. package/dist/esm/store/contracts/message.store.js +1 -0
  176. package/dist/esm/store/contracts/participants.store.js +1 -0
  177. package/dist/esm/store/contracts/retry.store.js +1 -0
  178. package/dist/esm/store/contracts/sender-key.store.js +1 -0
  179. package/dist/esm/store/contracts/signal.store.js +1 -0
  180. package/dist/esm/store/contracts/thread.store.js +1 -0
  181. package/dist/esm/store/createStore.js +278 -0
  182. package/dist/esm/store/index.js +20 -0
  183. package/dist/esm/store/noop.store.js +43 -0
  184. package/dist/esm/store/providers/memory/appstate.store.js +101 -0
  185. package/dist/esm/store/providers/memory/contact.store.js +23 -0
  186. package/dist/esm/store/providers/memory/device-list.store.js +86 -0
  187. package/dist/esm/store/providers/memory/message.store.js +40 -0
  188. package/dist/esm/store/providers/memory/participants.store.js +61 -0
  189. package/dist/esm/store/providers/memory/retry.store.js +71 -0
  190. package/dist/esm/store/providers/memory/sender-key.store.js +88 -0
  191. package/dist/esm/store/providers/memory/signal.store.js +170 -0
  192. package/dist/esm/store/providers/memory/thread.store.js +34 -0
  193. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +37 -0
  194. package/dist/esm/store/providers/sqlite/appstate.store.js +169 -0
  195. package/dist/esm/store/providers/sqlite/auth.store.js +176 -0
  196. package/dist/esm/store/providers/sqlite/connection.js +240 -0
  197. package/dist/esm/store/providers/sqlite/contact.store.js +61 -0
  198. package/dist/esm/store/providers/sqlite/device-list.store.js +155 -0
  199. package/dist/esm/store/providers/sqlite/message.store.js +119 -0
  200. package/dist/esm/store/providers/sqlite/migrations.js +347 -0
  201. package/dist/esm/store/providers/sqlite/participants.store.js +85 -0
  202. package/dist/esm/store/providers/sqlite/retry.store.js +144 -0
  203. package/dist/esm/store/providers/sqlite/sender-key.store.js +203 -0
  204. package/dist/esm/store/providers/sqlite/signal.store.js +353 -0
  205. package/dist/esm/store/providers/sqlite/thread.store.js +72 -0
  206. package/dist/esm/store/types.js +1 -0
  207. package/dist/esm/transport/WaComms.js +527 -0
  208. package/dist/esm/transport/WaWebSocket.js +361 -0
  209. package/dist/esm/transport/binary/constants.js +96 -0
  210. package/dist/esm/transport/binary/decoder.js +275 -0
  211. package/dist/esm/transport/binary/encoder.js +210 -0
  212. package/dist/esm/transport/binary/index.js +4 -0
  213. package/dist/esm/transport/binary/tokens.js +1280 -0
  214. package/dist/esm/transport/index.js +6 -0
  215. package/dist/esm/transport/keepalive/WaKeepAlive.js +141 -0
  216. package/dist/esm/transport/node/WaNodeOrchestrator.js +143 -0
  217. package/dist/esm/transport/node/WaNodeTransport.js +64 -0
  218. package/dist/esm/transport/node/builders/accountSync.js +101 -0
  219. package/dist/esm/transport/node/builders/group.js +47 -0
  220. package/dist/esm/transport/node/builders/index.js +7 -0
  221. package/dist/esm/transport/node/builders/media.js +10 -0
  222. package/dist/esm/transport/node/builders/message.js +317 -0
  223. package/dist/esm/transport/node/builders/pairing.js +130 -0
  224. package/dist/esm/transport/node/builders/prekeys.js +102 -0
  225. package/dist/esm/transport/node/builders/retry.js +116 -0
  226. package/dist/esm/transport/node/helpers.js +37 -0
  227. package/dist/esm/transport/node/query.js +53 -0
  228. package/dist/esm/transport/node/xml.js +39 -0
  229. package/dist/esm/transport/noise/WaClientPayload.js +162 -0
  230. package/dist/esm/transport/noise/WaFrameCodec.js +121 -0
  231. package/dist/esm/transport/noise/WaNoiseCert.js +74 -0
  232. package/dist/esm/transport/noise/WaNoiseHandshake.js +57 -0
  233. package/dist/esm/transport/noise/WaNoiseSession.js +322 -0
  234. package/dist/esm/transport/noise/WaNoiseSocket.js +17 -0
  235. package/dist/esm/transport/noise/constants.js +8 -0
  236. package/dist/esm/transport/noise/types.js +1 -0
  237. package/dist/esm/transport/stream/parse.js +91 -0
  238. package/dist/esm/transport/types.js +1 -0
  239. package/dist/esm/util/async.js +5 -0
  240. package/dist/esm/util/base64.js +18 -0
  241. package/dist/esm/util/bytes.js +275 -0
  242. package/dist/esm/util/coercion.js +56 -0
  243. package/dist/esm/util/collections.js +27 -0
  244. package/dist/esm/util/primitives.js +32 -0
  245. package/dist/esm/util/runtime.js +15 -0
  246. package/dist/esm/util/signal-address.js +5 -0
  247. package/dist/index.js +52 -0
  248. package/dist/infra/log/ConsoleLogger.js +44 -0
  249. package/dist/infra/log/PinoLogger.js +111 -0
  250. package/dist/infra/log/types.js +2 -0
  251. package/dist/infra/perf/BoundedTaskQueue.js +67 -0
  252. package/dist/media/WaMediaCrypto.js +228 -0
  253. package/dist/media/WaMediaTransferClient.js +365 -0
  254. package/dist/media/conn.js +36 -0
  255. package/dist/media/constants.js +21 -0
  256. package/dist/media/index.js +9 -0
  257. package/dist/media/types.js +2 -0
  258. package/dist/message/WaMessageClient.js +214 -0
  259. package/dist/message/ack.js +52 -0
  260. package/dist/message/content.js +24 -0
  261. package/dist/message/device-sent.js +53 -0
  262. package/dist/message/incoming.js +321 -0
  263. package/dist/message/index.js +20 -0
  264. package/dist/message/padding.js +24 -0
  265. package/dist/message/phash.js +28 -0
  266. package/dist/message/types.js +2 -0
  267. package/dist/proto.js +5 -0
  268. package/dist/protocol/appstate.js +37 -0
  269. package/dist/protocol/auth.js +15 -0
  270. package/dist/protocol/browser.js +45 -0
  271. package/dist/protocol/constants.js +46 -0
  272. package/dist/protocol/defaults.js +30 -0
  273. package/dist/protocol/dirty.js +29 -0
  274. package/dist/protocol/group.js +8 -0
  275. package/dist/protocol/index.js +53 -0
  276. package/dist/protocol/jid.js +107 -0
  277. package/dist/protocol/media.js +24 -0
  278. package/dist/protocol/message.js +19 -0
  279. package/dist/protocol/nodes.js +86 -0
  280. package/dist/protocol/notification.js +53 -0
  281. package/dist/protocol/stream.js +63 -0
  282. package/dist/retry/constants.js +23 -0
  283. package/dist/retry/index.js +19 -0
  284. package/dist/retry/outbound.js +88 -0
  285. package/dist/retry/parse.js +133 -0
  286. package/dist/retry/reason.js +53 -0
  287. package/dist/retry/replay.js +181 -0
  288. package/dist/retry/types.js +2 -0
  289. package/dist/signal/api/SignalDeviceSyncApi.js +189 -0
  290. package/dist/signal/api/SignalDigestSyncApi.js +183 -0
  291. package/dist/signal/api/SignalIdentitySyncApi.js +115 -0
  292. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +145 -0
  293. package/dist/signal/api/SignalRotateKeyApi.js +63 -0
  294. package/dist/signal/api/SignalSessionSyncApi.js +191 -0
  295. package/dist/signal/api/codec.js +27 -0
  296. package/dist/signal/api/constants.js +12 -0
  297. package/dist/signal/api/prekeys.js +16 -0
  298. package/dist/signal/constants.js +19 -0
  299. package/dist/signal/crypto/WaAdvSignature.js +72 -0
  300. package/dist/signal/crypto/constants.js +11 -0
  301. package/dist/signal/group/SenderKeyChain.js +101 -0
  302. package/dist/signal/group/SenderKeyCodec.js +50 -0
  303. package/dist/signal/group/SenderKeyManager.js +180 -0
  304. package/dist/signal/index.js +29 -0
  305. package/dist/signal/registration/keygen.js +37 -0
  306. package/dist/signal/registration/utils.js +19 -0
  307. package/dist/signal/session/SignalProtocol.js +126 -0
  308. package/dist/signal/session/SignalRatchet.js +268 -0
  309. package/dist/signal/session/SignalSerializer.js +69 -0
  310. package/dist/signal/session/SignalSession.js +165 -0
  311. package/dist/signal/store/sqlite.js +324 -0
  312. package/dist/signal/types.js +2 -0
  313. package/dist/store/contracts/appstate.store.js +2 -0
  314. package/dist/store/contracts/auth.store.js +2 -0
  315. package/dist/store/contracts/contact.store.js +2 -0
  316. package/dist/store/contracts/device-list.store.js +2 -0
  317. package/dist/store/contracts/message.store.js +2 -0
  318. package/dist/store/contracts/participants.store.js +2 -0
  319. package/dist/store/contracts/retry.store.js +2 -0
  320. package/dist/store/contracts/sender-key.store.js +2 -0
  321. package/dist/store/contracts/signal.store.js +2 -0
  322. package/dist/store/contracts/thread.store.js +2 -0
  323. package/dist/store/createStore.js +281 -0
  324. package/dist/store/index.js +43 -0
  325. package/dist/store/noop.store.js +46 -0
  326. package/dist/store/providers/memory/appstate.store.js +105 -0
  327. package/dist/store/providers/memory/contact.store.js +27 -0
  328. package/dist/store/providers/memory/device-list.store.js +90 -0
  329. package/dist/store/providers/memory/message.store.js +44 -0
  330. package/dist/store/providers/memory/participants.store.js +65 -0
  331. package/dist/store/providers/memory/retry.store.js +75 -0
  332. package/dist/store/providers/memory/sender-key.store.js +92 -0
  333. package/dist/store/providers/memory/signal.store.js +174 -0
  334. package/dist/store/providers/memory/thread.store.js +38 -0
  335. package/dist/store/providers/sqlite/BaseSqliteStore.js +41 -0
  336. package/dist/store/providers/sqlite/appstate.store.js +173 -0
  337. package/dist/store/providers/sqlite/auth.store.js +180 -0
  338. package/dist/store/providers/sqlite/connection.js +276 -0
  339. package/dist/store/providers/sqlite/contact.store.js +65 -0
  340. package/dist/store/providers/sqlite/device-list.store.js +159 -0
  341. package/dist/store/providers/sqlite/message.store.js +123 -0
  342. package/dist/store/providers/sqlite/migrations.js +350 -0
  343. package/dist/store/providers/sqlite/participants.store.js +89 -0
  344. package/dist/store/providers/sqlite/retry.store.js +148 -0
  345. package/dist/store/providers/sqlite/sender-key.store.js +207 -0
  346. package/dist/store/providers/sqlite/signal.store.js +357 -0
  347. package/dist/store/providers/sqlite/thread.store.js +76 -0
  348. package/dist/store/types.js +2 -0
  349. package/dist/transport/WaComms.js +531 -0
  350. package/dist/transport/WaWebSocket.js +365 -0
  351. package/dist/transport/binary/constants.js +99 -0
  352. package/dist/transport/binary/decoder.js +279 -0
  353. package/dist/transport/binary/encoder.js +214 -0
  354. package/dist/transport/binary/index.js +23 -0
  355. package/dist/transport/binary/tokens.js +1283 -0
  356. package/dist/transport/index.js +18 -0
  357. package/dist/transport/keepalive/WaKeepAlive.js +145 -0
  358. package/dist/transport/node/WaNodeOrchestrator.js +147 -0
  359. package/dist/transport/node/WaNodeTransport.js +68 -0
  360. package/dist/transport/node/builders/accountSync.js +110 -0
  361. package/dist/transport/node/builders/group.js +52 -0
  362. package/dist/transport/node/builders/index.js +39 -0
  363. package/dist/transport/node/builders/media.js +13 -0
  364. package/dist/transport/node/builders/message.js +328 -0
  365. package/dist/transport/node/builders/pairing.js +137 -0
  366. package/dist/transport/node/builders/prekeys.js +107 -0
  367. package/dist/transport/node/builders/retry.js +119 -0
  368. package/dist/transport/node/helpers.js +46 -0
  369. package/dist/transport/node/query.js +59 -0
  370. package/dist/transport/node/xml.js +42 -0
  371. package/dist/transport/noise/WaClientPayload.js +166 -0
  372. package/dist/transport/noise/WaFrameCodec.js +125 -0
  373. package/dist/transport/noise/WaNoiseCert.js +77 -0
  374. package/dist/transport/noise/WaNoiseHandshake.js +61 -0
  375. package/dist/transport/noise/WaNoiseSession.js +326 -0
  376. package/dist/transport/noise/WaNoiseSocket.js +21 -0
  377. package/dist/transport/noise/constants.js +11 -0
  378. package/dist/transport/noise/types.js +2 -0
  379. package/dist/transport/stream/parse.js +97 -0
  380. package/dist/transport/types.js +2 -0
  381. package/dist/types/appstate/WaAppStateCrypto.d.ts +59 -0
  382. package/dist/types/appstate/WaAppStateSyncClient.d.ts +63 -0
  383. package/dist/types/appstate/WaAppStateSyncResponseParser.d.ts +12 -0
  384. package/dist/types/appstate/constants.d.ts +14 -0
  385. package/dist/types/appstate/index.d.ts +7 -0
  386. package/dist/types/appstate/store/sqlite.d.ts +21 -0
  387. package/dist/types/appstate/types.d.ts +66 -0
  388. package/dist/types/appstate/utils.d.ts +10 -0
  389. package/dist/types/auth/WaAuthClient.d.ts +61 -0
  390. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +14 -0
  391. package/dist/types/auth/index.d.ts +6 -0
  392. package/dist/types/auth/pairing/WaPairingCodeCrypto.d.ts +17 -0
  393. package/dist/types/auth/pairing/WaPairingFlow.d.ts +48 -0
  394. package/dist/types/auth/pairing/WaQrFlow.d.ts +23 -0
  395. package/dist/types/auth/pairing/constants.d.ts +2 -0
  396. package/dist/types/auth/types.d.ts +48 -0
  397. package/dist/types/client/WaClient.d.ts +97 -0
  398. package/dist/types/client/WaClientFactory.d.ts +83 -0
  399. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +48 -0
  400. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +60 -0
  401. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +90 -0
  402. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +43 -0
  403. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +61 -0
  404. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +17 -0
  405. package/dist/types/client/dirty.d.ts +17 -0
  406. package/dist/types/client/events/chat.d.ts +3 -0
  407. package/dist/types/client/events/group.d.ts +7 -0
  408. package/dist/types/client/history-sync.d.ts +17 -0
  409. package/dist/types/client/incoming.d.ts +35 -0
  410. package/dist/types/client/index.d.ts +2 -0
  411. package/dist/types/client/mailbox.d.ts +12 -0
  412. package/dist/types/client/messages.d.ts +17 -0
  413. package/dist/types/client/types.d.ts +235 -0
  414. package/dist/types/crypto/core/constants.d.ts +1 -0
  415. package/dist/types/crypto/core/encoding.d.ts +11 -0
  416. package/dist/types/crypto/core/hkdf.d.ts +8 -0
  417. package/dist/types/crypto/core/index.d.ts +11 -0
  418. package/dist/types/crypto/core/keys.d.ts +20 -0
  419. package/dist/types/crypto/core/nonce.d.ts +5 -0
  420. package/dist/types/crypto/core/primitives.d.ts +25 -0
  421. package/dist/types/crypto/core/random.d.ts +8 -0
  422. package/dist/types/crypto/curves/Ed25519.d.ts +7 -0
  423. package/dist/types/crypto/curves/X25519.d.ts +8 -0
  424. package/dist/types/crypto/curves/constants.d.ts +2 -0
  425. package/dist/types/crypto/curves/types.d.ts +10 -0
  426. package/dist/types/crypto/index.d.ts +3 -0
  427. package/dist/types/crypto/math/constants.d.ts +7 -0
  428. package/dist/types/crypto/math/edwards.d.ts +3 -0
  429. package/dist/types/crypto/math/le.d.ts +2 -0
  430. package/dist/types/crypto/math/mod.d.ts +5 -0
  431. package/dist/types/crypto/math/types.d.ts +6 -0
  432. package/dist/types/index.d.ts +10 -0
  433. package/dist/types/infra/log/ConsoleLogger.d.ts +11 -0
  434. package/dist/types/infra/log/PinoLogger.d.ts +30 -0
  435. package/dist/types/infra/log/types.d.ts +9 -0
  436. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +19 -0
  437. package/dist/types/media/WaMediaCrypto.d.ts +12 -0
  438. package/dist/types/media/WaMediaTransferClient.d.ts +81 -0
  439. package/dist/types/media/conn.d.ts +3 -0
  440. package/dist/types/media/constants.d.ts +10 -0
  441. package/dist/types/media/index.d.ts +4 -0
  442. package/dist/types/media/types.d.ts +56 -0
  443. package/dist/types/message/WaMessageClient.d.ts +29 -0
  444. package/dist/types/message/ack.d.ts +5 -0
  445. package/dist/types/message/content.d.ts +4 -0
  446. package/dist/types/message/device-sent.d.ts +3 -0
  447. package/dist/types/message/incoming.d.ts +18 -0
  448. package/dist/types/message/index.d.ts +2 -0
  449. package/dist/types/message/padding.d.ts +2 -0
  450. package/dist/types/message/phash.d.ts +1 -0
  451. package/dist/types/message/types.d.ts +58 -0
  452. package/dist/types/proto.d.ts +2 -0
  453. package/dist/types/protocol/appstate.d.ts +34 -0
  454. package/dist/types/protocol/auth.d.ts +12 -0
  455. package/dist/types/protocol/browser.d.ts +22 -0
  456. package/dist/types/protocol/constants.d.ts +11 -0
  457. package/dist/types/protocol/defaults.d.ts +26 -0
  458. package/dist/types/protocol/dirty.d.ts +15 -0
  459. package/dist/types/protocol/group.d.ts +6 -0
  460. package/dist/types/protocol/index.d.ts +11 -0
  461. package/dist/types/protocol/jid.d.ts +19 -0
  462. package/dist/types/protocol/media.d.ts +15 -0
  463. package/dist/types/protocol/message.d.ts +16 -0
  464. package/dist/types/protocol/nodes.d.ts +83 -0
  465. package/dist/types/protocol/notification.d.ts +50 -0
  466. package/dist/types/protocol/stream.d.ts +60 -0
  467. package/dist/types/retry/constants.d.ts +21 -0
  468. package/dist/types/retry/index.d.ts +7 -0
  469. package/dist/types/retry/outbound.d.ts +4 -0
  470. package/dist/types/retry/parse.d.ts +3 -0
  471. package/dist/types/retry/reason.d.ts +2 -0
  472. package/dist/types/retry/replay.d.ts +30 -0
  473. package/dist/types/retry/types.d.ts +70 -0
  474. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +31 -0
  475. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +27 -0
  476. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +26 -0
  477. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +39 -0
  478. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +22 -0
  479. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +38 -0
  480. package/dist/types/signal/api/codec.d.ts +3 -0
  481. package/dist/types/signal/api/constants.d.ts +9 -0
  482. package/dist/types/signal/api/prekeys.d.ts +6 -0
  483. package/dist/types/signal/constants.d.ts +14 -0
  484. package/dist/types/signal/crypto/WaAdvSignature.d.ts +7 -0
  485. package/dist/types/signal/crypto/constants.d.ts +5 -0
  486. package/dist/types/signal/group/SenderKeyChain.d.ts +11 -0
  487. package/dist/types/signal/group/SenderKeyCodec.d.ts +14 -0
  488. package/dist/types/signal/group/SenderKeyManager.d.ts +22 -0
  489. package/dist/types/signal/index.d.ts +12 -0
  490. package/dist/types/signal/registration/keygen.d.ts +5 -0
  491. package/dist/types/signal/registration/utils.d.ts +9 -0
  492. package/dist/types/signal/session/SignalProtocol.d.ts +22 -0
  493. package/dist/types/signal/session/SignalRatchet.d.ts +25 -0
  494. package/dist/types/signal/session/SignalSerializer.d.ts +6 -0
  495. package/dist/types/signal/session/SignalSession.d.ts +43 -0
  496. package/dist/types/signal/store/sqlite.d.ts +72 -0
  497. package/dist/types/signal/types.d.ts +110 -0
  498. package/dist/types/store/contracts/appstate.store.d.ts +22 -0
  499. package/dist/types/store/contracts/auth.store.d.ts +6 -0
  500. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  501. package/dist/types/store/contracts/device-list.store.d.ts +16 -0
  502. package/dist/types/store/contracts/message.store.d.ts +18 -0
  503. package/dist/types/store/contracts/participants.store.d.ts +14 -0
  504. package/dist/types/store/contracts/retry.store.d.ts +11 -0
  505. package/dist/types/store/contracts/sender-key.store.d.ts +16 -0
  506. package/dist/types/store/contracts/signal.store.d.ts +31 -0
  507. package/dist/types/store/contracts/thread.store.d.ts +17 -0
  508. package/dist/types/store/createStore.d.ts +2 -0
  509. package/dist/types/store/index.d.ts +31 -0
  510. package/dist/types/store/noop.store.d.ts +10 -0
  511. package/dist/types/store/providers/memory/appstate.store.d.ts +21 -0
  512. package/dist/types/store/providers/memory/contact.store.d.ts +13 -0
  513. package/dist/types/store/providers/memory/device-list.store.d.ts +20 -0
  514. package/dist/types/store/providers/memory/message.store.d.ts +14 -0
  515. package/dist/types/store/providers/memory/participants.store.d.ts +18 -0
  516. package/dist/types/store/providers/memory/retry.store.d.ts +18 -0
  517. package/dist/types/store/providers/memory/sender-key.store.d.ts +28 -0
  518. package/dist/types/store/providers/memory/signal.store.d.ts +51 -0
  519. package/dist/types/store/providers/memory/thread.store.d.ts +14 -0
  520. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +12 -0
  521. package/dist/types/store/providers/sqlite/appstate.store.d.ts +15 -0
  522. package/dist/types/store/providers/sqlite/auth.store.d.ts +10 -0
  523. package/dist/types/store/providers/sqlite/connection.d.ts +10 -0
  524. package/dist/types/store/providers/sqlite/contact.store.d.ts +10 -0
  525. package/dist/types/store/providers/sqlite/device-list.store.d.ts +18 -0
  526. package/dist/types/store/providers/sqlite/message.store.d.ts +11 -0
  527. package/dist/types/store/providers/sqlite/migrations.d.ts +3 -0
  528. package/dist/types/store/providers/sqlite/participants.store.d.ts +13 -0
  529. package/dist/types/store/providers/sqlite/retry.store.d.ts +16 -0
  530. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +25 -0
  531. package/dist/types/store/providers/sqlite/signal.store.d.ts +46 -0
  532. package/dist/types/store/providers/sqlite/thread.store.d.ts +11 -0
  533. package/dist/types/store/types.d.ts +103 -0
  534. package/dist/types/transport/WaComms.d.ts +61 -0
  535. package/dist/types/transport/WaWebSocket.d.ts +36 -0
  536. package/dist/types/transport/binary/constants.d.ts +49 -0
  537. package/dist/types/transport/binary/decoder.d.ts +3 -0
  538. package/dist/types/transport/binary/encoder.d.ts +3 -0
  539. package/dist/types/transport/binary/index.d.ts +4 -0
  540. package/dist/types/transport/binary/tokens.d.ts +11 -0
  541. package/dist/types/transport/index.d.ts +7 -0
  542. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +39 -0
  543. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +28 -0
  544. package/dist/types/transport/node/WaNodeTransport.d.ts +22 -0
  545. package/dist/types/transport/node/builders/accountSync.d.ts +11 -0
  546. package/dist/types/transport/node/builders/group.d.ts +16 -0
  547. package/dist/types/transport/node/builders/index.d.ts +7 -0
  548. package/dist/types/transport/node/builders/media.d.ts +2 -0
  549. package/dist/types/transport/node/builders/message.d.ts +52 -0
  550. package/dist/types/transport/node/builders/pairing.d.ts +18 -0
  551. package/dist/types/transport/node/builders/prekeys.d.ts +5 -0
  552. package/dist/types/transport/node/builders/retry.d.ts +18 -0
  553. package/dist/types/transport/node/helpers.d.ts +8 -0
  554. package/dist/types/transport/node/query.d.ts +10 -0
  555. package/dist/types/transport/node/xml.d.ts +2 -0
  556. package/dist/types/transport/noise/WaClientPayload.d.ts +3 -0
  557. package/dist/types/transport/noise/WaFrameCodec.d.ts +9 -0
  558. package/dist/types/transport/noise/WaNoiseCert.d.ts +1 -0
  559. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +14 -0
  560. package/dist/types/transport/noise/WaNoiseSession.d.ts +33 -0
  561. package/dist/types/transport/noise/WaNoiseSocket.d.ts +10 -0
  562. package/dist/types/transport/noise/constants.d.ts +7 -0
  563. package/dist/types/transport/noise/types.d.ts +23 -0
  564. package/dist/types/transport/stream/parse.d.ts +23 -0
  565. package/dist/types/transport/types.d.ts +71 -0
  566. package/dist/types/util/async.d.ts +1 -0
  567. package/dist/types/util/base64.d.ts +4 -0
  568. package/dist/types/util/bytes.d.ts +28 -0
  569. package/dist/types/util/coercion.d.ts +8 -0
  570. package/dist/types/util/collections.d.ts +3 -0
  571. package/dist/types/util/primitives.d.ts +7 -0
  572. package/dist/types/util/runtime.d.ts +2 -0
  573. package/dist/types/util/signal-address.d.ts +2 -0
  574. package/dist/util/async.js +8 -0
  575. package/dist/util/base64.js +24 -0
  576. package/dist/util/bytes.js +291 -0
  577. package/dist/util/coercion.js +66 -0
  578. package/dist/util/collections.js +32 -0
  579. package/dist/util/primitives.js +37 -0
  580. package/dist/util/runtime.js +19 -0
  581. package/dist/util/signal-address.js +8 -0
  582. package/package.json +150 -0
  583. package/proto/index.d.ts +10861 -0
  584. package/proto/index.js +1 -0
  585. package/scripts/check-node-version.cjs +55 -0
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaSignalSqliteStore = void 0;
4
+ const sqlite_1 = require("../../../signal/store/sqlite");
5
+ const BaseSqliteStore_1 = require("../../providers/sqlite/BaseSqliteStore");
6
+ const coercion_1 = require("../../../util/coercion");
7
+ const signal_address_1 = require("../../../util/signal-address");
8
+ const DEFAULTS = Object.freeze({
9
+ preKeyBatchSize: 500,
10
+ hasSessionBatchSize: 250
11
+ });
12
+ class WaSignalSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
13
+ constructor(options, storeOptions = {}) {
14
+ super(options, ['signal']);
15
+ this.preKeyBatchSize = (0, coercion_1.resolvePositive)(storeOptions.preKeyBatchSize, DEFAULTS.preKeyBatchSize, 'signal.sqlite.preKeyBatchSize');
16
+ this.hasSessionBatchSize = (0, coercion_1.resolvePositive)(storeOptions.hasSessionBatchSize, DEFAULTS.hasSessionBatchSize, 'signal.sqlite.hasSessionBatchSize');
17
+ }
18
+ async getRegistrationInfo() {
19
+ const db = await this.getConnection();
20
+ const row = db.get(`SELECT registration_id, identity_pub_key, identity_priv_key
21
+ FROM signal_registration
22
+ WHERE session_id = ?`, [this.options.sessionId]);
23
+ return row ? (0, sqlite_1.decodeSignalRegistrationRow)(row) : null;
24
+ }
25
+ async setRegistrationInfo(info) {
26
+ const db = await this.getConnection();
27
+ db.run(`INSERT INTO signal_registration (
28
+ session_id,
29
+ registration_id,
30
+ identity_pub_key,
31
+ identity_priv_key
32
+ ) VALUES (?, ?, ?, ?)
33
+ ON CONFLICT(session_id) DO UPDATE SET
34
+ registration_id=excluded.registration_id,
35
+ identity_pub_key=excluded.identity_pub_key,
36
+ identity_priv_key=excluded.identity_priv_key`, [
37
+ this.options.sessionId,
38
+ info.registrationId,
39
+ info.identityKeyPair.pubKey,
40
+ info.identityKeyPair.privKey
41
+ ]);
42
+ }
43
+ async getSignedPreKey() {
44
+ const db = await this.getConnection();
45
+ const row = db.get(`SELECT key_id, pub_key, priv_key, signature, uploaded
46
+ FROM signal_signed_prekey
47
+ WHERE session_id = ?`, [this.options.sessionId]);
48
+ return row ? (0, sqlite_1.decodeSignalSignedPreKeyRow)(row) : null;
49
+ }
50
+ async setSignedPreKey(record) {
51
+ const db = await this.getConnection();
52
+ db.run(`INSERT INTO signal_signed_prekey (
53
+ session_id,
54
+ key_id,
55
+ pub_key,
56
+ priv_key,
57
+ signature,
58
+ uploaded
59
+ ) VALUES (?, ?, ?, ?, ?, ?)
60
+ ON CONFLICT(session_id) DO UPDATE SET
61
+ key_id=excluded.key_id,
62
+ pub_key=excluded.pub_key,
63
+ priv_key=excluded.priv_key,
64
+ signature=excluded.signature,
65
+ uploaded=excluded.uploaded`, [
66
+ this.options.sessionId,
67
+ record.keyId,
68
+ record.keyPair.pubKey,
69
+ record.keyPair.privKey,
70
+ record.signature,
71
+ record.uploaded === true ? 1 : 0
72
+ ]);
73
+ }
74
+ async getSignedPreKeyById(keyId) {
75
+ const db = await this.getConnection();
76
+ const row = db.get(`SELECT key_id, pub_key, priv_key, signature, uploaded
77
+ FROM signal_signed_prekey
78
+ WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, keyId]);
79
+ return row ? (0, sqlite_1.decodeSignalSignedPreKeyRow)(row) : null;
80
+ }
81
+ async setSignedPreKeyRotationTs(value) {
82
+ const db = await this.getConnection();
83
+ this.ensureMetaRow(db);
84
+ db.run(`UPDATE signal_meta
85
+ SET signed_prekey_rotation_ts = ?
86
+ WHERE session_id = ?`, [value, this.options.sessionId]);
87
+ }
88
+ async getSignedPreKeyRotationTs() {
89
+ const db = await this.getConnection();
90
+ const meta = this.getMeta(db);
91
+ return meta.signedPreKeyRotationTs;
92
+ }
93
+ async putPreKey(record) {
94
+ const db = await this.getConnection();
95
+ this.ensureMetaRow(db);
96
+ this.upsertPreKey(db, record);
97
+ db.run(`UPDATE signal_meta
98
+ SET next_prekey_id = MAX(next_prekey_id, ?)
99
+ WHERE session_id = ?`, [record.keyId + 1, this.options.sessionId]);
100
+ }
101
+ async getOrGenPreKeys(count, generator) {
102
+ if (!Number.isSafeInteger(count) || count <= 0) {
103
+ throw new Error(`invalid prekey count: ${count}`);
104
+ }
105
+ return this.withTransaction(async (db) => {
106
+ this.ensureMetaRow(db);
107
+ const available = db
108
+ .all(`SELECT key_id, pub_key, priv_key, uploaded
109
+ FROM signal_prekey
110
+ WHERE session_id = ? AND uploaded = 0
111
+ ORDER BY key_id ASC
112
+ LIMIT ?`, [this.options.sessionId, count])
113
+ .map((row) => (0, sqlite_1.decodeSignalPreKeyRow)(row));
114
+ if (available.length < count) {
115
+ let nextPreKeyId = this.getMeta(db).nextPreKeyId;
116
+ while (available.length < count) {
117
+ const requestedKeyId = nextPreKeyId;
118
+ const generated = await generator(requestedKeyId);
119
+ this.upsertPreKey(db, generated);
120
+ available.push(generated);
121
+ nextPreKeyId = Math.max(requestedKeyId + 1, generated.keyId + 1);
122
+ }
123
+ db.run(`UPDATE signal_meta
124
+ SET next_prekey_id = ?
125
+ WHERE session_id = ?`, [nextPreKeyId, this.options.sessionId]);
126
+ }
127
+ return available;
128
+ });
129
+ }
130
+ async getPreKeyById(keyId) {
131
+ const db = await this.getConnection();
132
+ const row = db.get(`SELECT key_id, pub_key, priv_key, uploaded
133
+ FROM signal_prekey
134
+ WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, keyId]);
135
+ return row ? (0, sqlite_1.decodeSignalPreKeyRow)(row) : null;
136
+ }
137
+ async getPreKeysById(keyIds) {
138
+ if (keyIds.length === 0) {
139
+ return [];
140
+ }
141
+ const db = await this.getConnection();
142
+ const uniqueKeyIds = [...new Set(keyIds)];
143
+ const byId = new Map();
144
+ for (let start = 0; start < uniqueKeyIds.length; start += this.preKeyBatchSize) {
145
+ const end = Math.min(start + this.preKeyBatchSize, uniqueKeyIds.length);
146
+ const batchLength = end - start;
147
+ const placeholders = new Array(batchLength).fill('?').join(', ');
148
+ const params = [this.options.sessionId];
149
+ for (let index = start; index < end; index += 1) {
150
+ params.push(uniqueKeyIds[index]);
151
+ }
152
+ const rows = db.all(`SELECT key_id, pub_key, priv_key, uploaded
153
+ FROM signal_prekey
154
+ WHERE session_id = ? AND key_id IN (${placeholders})`, params);
155
+ for (const row of rows) {
156
+ const record = (0, sqlite_1.decodeSignalPreKeyRow)(row);
157
+ byId.set(record.keyId, record);
158
+ }
159
+ }
160
+ return keyIds.map((keyId) => byId.get(keyId) ?? null);
161
+ }
162
+ async consumePreKeyById(keyId) {
163
+ return this.withTransaction((db) => {
164
+ const row = db.get(`SELECT key_id, pub_key, priv_key, uploaded
165
+ FROM signal_prekey
166
+ WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, keyId]);
167
+ if (!row) {
168
+ return null;
169
+ }
170
+ db.run(`DELETE FROM signal_prekey
171
+ WHERE session_id = ? AND key_id = ?`, [this.options.sessionId, keyId]);
172
+ return (0, sqlite_1.decodeSignalPreKeyRow)(row);
173
+ });
174
+ }
175
+ async getOrGenSinglePreKey(generator) {
176
+ const records = await this.getOrGenPreKeys(1, generator);
177
+ return records[0];
178
+ }
179
+ async markKeyAsUploaded(keyId) {
180
+ const db = await this.getConnection();
181
+ const meta = this.getMeta(db);
182
+ if (keyId < 0 || keyId >= meta.nextPreKeyId) {
183
+ throw new Error(`prekey ${keyId} is out of boundary`);
184
+ }
185
+ db.run(`UPDATE signal_prekey
186
+ SET uploaded = 1
187
+ WHERE session_id = ? AND key_id <= ?`, [this.options.sessionId, keyId]);
188
+ }
189
+ async setServerHasPreKeys(value) {
190
+ const db = await this.getConnection();
191
+ this.ensureMetaRow(db);
192
+ db.run(`UPDATE signal_meta
193
+ SET server_has_prekeys = ?
194
+ WHERE session_id = ?`, [value ? 1 : 0, this.options.sessionId]);
195
+ }
196
+ async getServerHasPreKeys() {
197
+ const db = await this.getConnection();
198
+ const meta = this.getMeta(db);
199
+ return meta.serverHasPreKeys;
200
+ }
201
+ async hasSession(address) {
202
+ const db = await this.getConnection();
203
+ const target = (0, sqlite_1.toSignalAddressParts)(address);
204
+ return (db.get(`SELECT 1 AS has_session
205
+ FROM signal_session
206
+ WHERE session_id = ? AND user = ? AND server = ? AND device = ?
207
+ LIMIT 1`, [this.options.sessionId, target.user, target.server, target.device]) !== null);
208
+ }
209
+ async hasSessions(addresses) {
210
+ if (addresses.length === 0) {
211
+ return [];
212
+ }
213
+ const db = await this.getConnection();
214
+ const targets = addresses.map((address) => (0, sqlite_1.toSignalAddressParts)(address));
215
+ const existingKeys = new Set();
216
+ for (let start = 0; start < targets.length; start += this.hasSessionBatchSize) {
217
+ const end = Math.min(start + this.hasSessionBatchSize, targets.length);
218
+ const batchLength = end - start;
219
+ const filters = new Array(batchLength)
220
+ .fill('(user = ? AND server = ? AND device = ?)')
221
+ .join(' OR ');
222
+ const params = [this.options.sessionId];
223
+ for (let index = start; index < end; index += 1) {
224
+ const target = targets[index];
225
+ params.push(target.user, target.server, target.device);
226
+ }
227
+ const rows = db.all(`SELECT user, server, device
228
+ FROM signal_session
229
+ WHERE session_id = ? AND (${filters})`, params);
230
+ for (const row of rows) {
231
+ existingKeys.add((0, signal_address_1.signalAddressKey)({
232
+ user: (0, coercion_1.asString)(row.user, 'signal_session.user'),
233
+ server: (0, coercion_1.asString)(row.server, 'signal_session.server'),
234
+ device: (0, coercion_1.asNumber)(row.device, 'signal_session.device')
235
+ }));
236
+ }
237
+ }
238
+ return addresses.map((address) => existingKeys.has((0, signal_address_1.signalAddressKey)(address)));
239
+ }
240
+ async getSession(address) {
241
+ const db = await this.getConnection();
242
+ const target = (0, sqlite_1.toSignalAddressParts)(address);
243
+ const row = db.get(`SELECT user, server, device, record
244
+ FROM signal_session
245
+ WHERE session_id = ? AND user = ? AND server = ? AND device = ?`, [this.options.sessionId, target.user, target.server, target.device]);
246
+ return row ? (0, sqlite_1.decodeSignalSessionRecord)(row.record) : null;
247
+ }
248
+ async setSession(address, session) {
249
+ const db = await this.getConnection();
250
+ const target = (0, sqlite_1.toSignalAddressParts)(address);
251
+ db.run(`INSERT INTO signal_session (
252
+ session_id,
253
+ user,
254
+ server,
255
+ device,
256
+ record
257
+ ) VALUES (?, ?, ?, ?, ?)
258
+ ON CONFLICT(session_id, user, server, device) DO UPDATE SET
259
+ record=excluded.record`, [
260
+ this.options.sessionId,
261
+ target.user,
262
+ target.server,
263
+ target.device,
264
+ (0, sqlite_1.encodeSignalSessionRecord)(session)
265
+ ]);
266
+ }
267
+ async deleteSession(address) {
268
+ const db = await this.getConnection();
269
+ const target = (0, sqlite_1.toSignalAddressParts)(address);
270
+ db.run(`DELETE FROM signal_session
271
+ WHERE session_id = ? AND user = ? AND server = ? AND device = ?`, [this.options.sessionId, target.user, target.server, target.device]);
272
+ }
273
+ async getRemoteIdentity(address) {
274
+ const db = await this.getConnection();
275
+ const target = (0, sqlite_1.toSignalAddressParts)(address);
276
+ const row = db.get(`SELECT identity_key
277
+ FROM signal_identity
278
+ WHERE session_id = ? AND user = ? AND server = ? AND device = ?`, [this.options.sessionId, target.user, target.server, target.device]);
279
+ return row ? (0, sqlite_1.decodeSignalRemoteIdentity)(row.identity_key) : null;
280
+ }
281
+ async setRemoteIdentity(address, identityKey) {
282
+ const db = await this.getConnection();
283
+ const target = (0, sqlite_1.toSignalAddressParts)(address);
284
+ this.upsertRemoteIdentity(db, target, identityKey);
285
+ }
286
+ async setRemoteIdentities(entries) {
287
+ if (entries.length === 0) {
288
+ return;
289
+ }
290
+ await this.withTransaction((db) => {
291
+ for (const entry of entries) {
292
+ const target = (0, sqlite_1.toSignalAddressParts)(entry.address);
293
+ this.upsertRemoteIdentity(db, target, entry.identityKey);
294
+ }
295
+ });
296
+ }
297
+ async clear() {
298
+ await this.withTransaction((db) => {
299
+ db.run('DELETE FROM signal_registration WHERE session_id = ?', [this.options.sessionId]);
300
+ db.run('DELETE FROM signal_signed_prekey WHERE session_id = ?', [this.options.sessionId]);
301
+ db.run('DELETE FROM signal_prekey WHERE session_id = ?', [this.options.sessionId]);
302
+ db.run('DELETE FROM signal_session WHERE session_id = ?', [this.options.sessionId]);
303
+ db.run('DELETE FROM signal_identity WHERE session_id = ?', [this.options.sessionId]);
304
+ db.run('DELETE FROM signal_meta WHERE session_id = ?', [this.options.sessionId]);
305
+ });
306
+ }
307
+ upsertPreKey(db, record) {
308
+ db.run(`INSERT INTO signal_prekey (
309
+ session_id,
310
+ key_id,
311
+ pub_key,
312
+ priv_key,
313
+ uploaded
314
+ ) VALUES (?, ?, ?, ?, ?)
315
+ ON CONFLICT(session_id, key_id) DO UPDATE SET
316
+ pub_key=excluded.pub_key,
317
+ priv_key=excluded.priv_key,
318
+ uploaded=excluded.uploaded`, [
319
+ this.options.sessionId,
320
+ record.keyId,
321
+ record.keyPair.pubKey,
322
+ record.keyPair.privKey,
323
+ record.uploaded === true ? 1 : 0
324
+ ]);
325
+ }
326
+ ensureMetaRow(db) {
327
+ db.run(`INSERT INTO signal_meta (
328
+ session_id,
329
+ server_has_prekeys,
330
+ next_prekey_id
331
+ ) VALUES (?, 0, 1)
332
+ ON CONFLICT(session_id) DO NOTHING`, [this.options.sessionId]);
333
+ }
334
+ getMeta(db) {
335
+ this.ensureMetaRow(db);
336
+ const row = db.get(`SELECT server_has_prekeys, next_prekey_id, signed_prekey_rotation_ts
337
+ FROM signal_meta
338
+ WHERE session_id = ?`, [this.options.sessionId]);
339
+ return {
340
+ serverHasPreKeys: (0, coercion_1.toBoolOrUndef)(row.server_has_prekeys) === true,
341
+ nextPreKeyId: (0, coercion_1.asNumber)(row.next_prekey_id, 'signal_meta.next_prekey_id'),
342
+ signedPreKeyRotationTs: (0, coercion_1.asOptionalNumber)(row.signed_prekey_rotation_ts, 'signal_meta.signed_prekey_rotation_ts') ?? null
343
+ };
344
+ }
345
+ upsertRemoteIdentity(db, target, identityKey) {
346
+ db.run(`INSERT INTO signal_identity (
347
+ session_id,
348
+ user,
349
+ server,
350
+ device,
351
+ identity_key
352
+ ) VALUES (?, ?, ?, ?, ?)
353
+ ON CONFLICT(session_id, user, server, device) DO UPDATE SET
354
+ identity_key=excluded.identity_key`, [this.options.sessionId, target.user, target.server, target.device, identityKey]);
355
+ }
356
+ }
357
+ exports.WaSignalSqliteStore = WaSignalSqliteStore;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaThreadSqliteStore = 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
+ const THREAD_COLUMNS = 'jid, name, unread_count, archived, pinned, mute_end_ms, marked_as_unread, ephemeral_expiration';
8
+ function decodeThreadRow(row) {
9
+ return {
10
+ jid: (0, coercion_1.asString)(row.jid, 'mailbox_threads.jid'),
11
+ name: (0, coercion_1.asOptionalString)(row.name, 'mailbox_threads.name'),
12
+ unreadCount: (0, coercion_1.asOptionalNumber)(row.unread_count, 'mailbox_threads.unread_count'),
13
+ archived: (0, coercion_1.toBoolOrUndef)(row.archived),
14
+ pinned: (0, coercion_1.asOptionalNumber)(row.pinned, 'mailbox_threads.pinned'),
15
+ muteEndMs: (0, coercion_1.asOptionalNumber)(row.mute_end_ms, 'mailbox_threads.mute_end_ms'),
16
+ markedAsUnread: (0, coercion_1.toBoolOrUndef)(row.marked_as_unread),
17
+ ephemeralExpiration: (0, coercion_1.asOptionalNumber)(row.ephemeral_expiration, 'mailbox_threads.ephemeral_expiration')
18
+ };
19
+ }
20
+ class WaThreadSqliteStore extends BaseSqliteStore_1.BaseSqliteStore {
21
+ constructor(options) {
22
+ super(options, ['mailbox']);
23
+ }
24
+ async upsert(record) {
25
+ const db = await this.getConnection();
26
+ db.run(`INSERT INTO mailbox_threads (
27
+ session_id, jid, name, unread_count, archived, pinned,
28
+ mute_end_ms, marked_as_unread, ephemeral_expiration
29
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
30
+ ON CONFLICT(session_id, jid) DO UPDATE SET
31
+ name=COALESCE(excluded.name, mailbox_threads.name),
32
+ unread_count=COALESCE(excluded.unread_count, mailbox_threads.unread_count),
33
+ archived=COALESCE(excluded.archived, mailbox_threads.archived),
34
+ pinned=COALESCE(excluded.pinned, mailbox_threads.pinned),
35
+ mute_end_ms=COALESCE(excluded.mute_end_ms, mailbox_threads.mute_end_ms),
36
+ marked_as_unread=COALESCE(excluded.marked_as_unread, mailbox_threads.marked_as_unread),
37
+ ephemeral_expiration=COALESCE(excluded.ephemeral_expiration, mailbox_threads.ephemeral_expiration)`, [
38
+ this.options.sessionId,
39
+ record.jid,
40
+ record.name ?? null,
41
+ record.unreadCount ?? null,
42
+ record.archived === undefined ? null : record.archived ? 1 : 0,
43
+ record.pinned ?? null,
44
+ record.muteEndMs ?? null,
45
+ record.markedAsUnread === undefined ? null : record.markedAsUnread ? 1 : 0,
46
+ record.ephemeralExpiration ?? null
47
+ ]);
48
+ }
49
+ async getByJid(jid) {
50
+ const db = await this.getConnection();
51
+ const row = db.get(`SELECT ${THREAD_COLUMNS}
52
+ FROM mailbox_threads
53
+ WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
54
+ return row ? decodeThreadRow(row) : null;
55
+ }
56
+ async list(limit) {
57
+ const db = await this.getConnection();
58
+ const rows = db.all(`SELECT ${THREAD_COLUMNS}
59
+ FROM mailbox_threads
60
+ WHERE session_id = ?
61
+ LIMIT ?`, [this.options.sessionId, (0, collections_1.normalizeQueryLimit)(limit, 100)]);
62
+ return rows.map(decodeThreadRow);
63
+ }
64
+ async deleteByJid(jid) {
65
+ const db = await this.getConnection();
66
+ db.run(`DELETE FROM mailbox_threads
67
+ WHERE session_id = ? AND jid = ?`, [this.options.sessionId, jid]);
68
+ const row = db.get('SELECT changes() AS total', []);
69
+ return row ? Number(row.total) : 0;
70
+ }
71
+ async clear() {
72
+ const db = await this.getConnection();
73
+ db.run('DELETE FROM mailbox_threads WHERE session_id = ?', [this.options.sessionId]);
74
+ }
75
+ }
76
+ exports.WaThreadSqliteStore = WaThreadSqliteStore;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });