zapo-js 0.1.0 → 0.1.2

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 (366) hide show
  1. package/README.md +12 -7
  2. package/dist/appstate/WaAppStateCrypto.js +18 -25
  3. package/dist/appstate/WaAppStateSyncClient.js +181 -114
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/utils.js +10 -30
  7. package/dist/auth/WaAuthClient.js +48 -55
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
  9. package/dist/auth/index.js +1 -3
  10. package/dist/auth/pairing/WaPairingFlow.js +21 -23
  11. package/dist/auth/pairing/WaQrFlow.js +37 -24
  12. package/dist/client/WaClient.js +103 -276
  13. package/dist/client/WaClientFactory.js +227 -110
  14. package/dist/client/connection/WaConnectionManager.js +292 -0
  15. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  16. package/dist/client/connection/WaReceiptQueue.js +51 -0
  17. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +27 -17
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
  21. package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
  22. package/dist/client/dirty.js +35 -29
  23. package/dist/client/events/chat.js +4 -3
  24. package/dist/client/events/group.js +59 -36
  25. package/dist/client/history-sync.js +53 -63
  26. package/dist/client/incoming.js +23 -20
  27. package/dist/client/mailbox.js +8 -8
  28. package/dist/client/messages.js +4 -4
  29. package/dist/client/messaging/fanout.js +189 -0
  30. package/dist/client/messaging/key-protocol.js +130 -0
  31. package/dist/client/messaging/participants.js +191 -0
  32. package/dist/crypto/core/hkdf.js +3 -8
  33. package/dist/crypto/core/index.js +1 -4
  34. package/dist/crypto/core/keys.js +2 -3
  35. package/dist/crypto/core/primitives.js +12 -15
  36. package/dist/crypto/core/random.js +7 -26
  37. package/dist/crypto/curves/Ed25519.js +7 -8
  38. package/dist/crypto/curves/X25519.js +13 -16
  39. package/dist/crypto/index.js +0 -5
  40. package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
  41. package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
  42. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  43. package/dist/esm/appstate/constants.js +3 -2
  44. package/dist/esm/appstate/utils.js +8 -27
  45. package/dist/esm/auth/WaAuthClient.js +48 -55
  46. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
  47. package/dist/esm/auth/index.js +0 -1
  48. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
  49. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  50. package/dist/esm/client/WaClient.js +103 -276
  51. package/dist/esm/client/WaClientFactory.js +227 -110
  52. package/dist/esm/client/connection/WaConnectionManager.js +288 -0
  53. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  54. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  55. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  56. package/dist/esm/client/coordinators/WaGroupCoordinator.js +20 -10
  57. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  58. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
  59. package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
  60. package/dist/esm/client/dirty.js +30 -24
  61. package/dist/esm/client/events/chat.js +4 -3
  62. package/dist/esm/client/events/group.js +50 -28
  63. package/dist/esm/client/history-sync.js +50 -60
  64. package/dist/esm/client/incoming.js +23 -20
  65. package/dist/esm/client/mailbox.js +8 -8
  66. package/dist/esm/client/messages.js +1 -1
  67. package/dist/esm/client/messaging/fanout.js +186 -0
  68. package/dist/esm/client/messaging/key-protocol.js +127 -0
  69. package/dist/esm/client/messaging/participants.js +188 -0
  70. package/dist/esm/crypto/core/hkdf.js +3 -8
  71. package/dist/esm/crypto/core/index.js +0 -1
  72. package/dist/esm/crypto/core/keys.js +2 -3
  73. package/dist/esm/crypto/core/primitives.js +12 -15
  74. package/dist/esm/crypto/core/random.js +6 -25
  75. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  76. package/dist/esm/crypto/curves/X25519.js +10 -13
  77. package/dist/esm/crypto/index.js +0 -2
  78. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  79. package/dist/esm/infra/log/PinoLogger.js +15 -9
  80. package/dist/esm/infra/log/types.js +11 -1
  81. package/dist/esm/infra/perf/BoundedTaskQueue.js +13 -17
  82. package/dist/esm/media/WaMediaCrypto.js +2 -4
  83. package/dist/esm/media/WaMediaTransferClient.js +226 -58
  84. package/dist/esm/media/conn.js +10 -6
  85. package/dist/esm/media/constants.js +4 -1
  86. package/dist/esm/message/WaMessageClient.js +4 -13
  87. package/dist/esm/message/ack.js +6 -6
  88. package/dist/esm/message/addon-crypto.js +59 -0
  89. package/dist/esm/message/incoming.js +106 -111
  90. package/dist/esm/message/index.js +2 -0
  91. package/dist/esm/message/reporting-token.js +438 -0
  92. package/dist/esm/message/use-case-secret.js +49 -0
  93. package/dist/esm/protocol/appstate.js +58 -0
  94. package/dist/esm/protocol/constants.js +2 -1
  95. package/dist/esm/protocol/index.js +2 -10
  96. package/dist/esm/protocol/jid.js +63 -51
  97. package/dist/esm/protocol/media.js +3 -3
  98. package/dist/esm/protocol/nodes.js +2 -0
  99. package/dist/esm/protocol/usync.js +11 -0
  100. package/dist/esm/retry/index.js +1 -0
  101. package/dist/esm/retry/outbound.js +4 -5
  102. package/dist/esm/retry/parse.js +58 -76
  103. package/dist/esm/retry/replay.js +48 -49
  104. package/dist/esm/retry/tracker.js +56 -0
  105. package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
  106. package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
  107. package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
  108. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
  109. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
  110. package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
  111. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  112. package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
  113. package/dist/esm/signal/group/SenderKeyManager.js +26 -16
  114. package/dist/esm/signal/index.js +1 -0
  115. package/dist/esm/signal/session/SignalProtocol.js +49 -14
  116. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  117. package/dist/esm/signal/session/SignalSession.js +14 -9
  118. package/dist/esm/signal/session/resolver.js +186 -0
  119. package/dist/esm/signal/store/sqlite.js +16 -37
  120. package/dist/esm/store/createStore.js +16 -18
  121. package/dist/esm/store/noop.store.js +3 -6
  122. package/dist/esm/store/providers/memory/appstate.store.js +30 -6
  123. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  124. package/dist/esm/store/providers/memory/device-list.store.js +3 -30
  125. package/dist/esm/store/providers/memory/message.store.js +11 -5
  126. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  127. package/dist/esm/store/providers/memory/sender-key.store.js +5 -7
  128. package/dist/esm/store/providers/memory/signal.store.js +13 -1
  129. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  130. package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
  131. package/dist/esm/store/providers/sqlite/connection.js +18 -13
  132. package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
  133. package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
  134. package/dist/esm/store/providers/sqlite/message.store.js +45 -32
  135. package/dist/esm/store/providers/sqlite/migrations.js +1 -1
  136. package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
  137. package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
  138. package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
  139. package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
  140. package/dist/esm/store/providers/sqlite/table-names.js +107 -0
  141. package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
  142. package/dist/esm/transport/WaComms.js +25 -23
  143. package/dist/esm/transport/WaWebSocket.js +115 -12
  144. package/dist/esm/transport/binary/decoder.js +4 -4
  145. package/dist/esm/transport/binary/encoder.js +12 -4
  146. package/dist/esm/transport/index.js +1 -0
  147. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  148. package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
  149. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  150. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  151. package/dist/esm/transport/node/builders/index.js +2 -1
  152. package/dist/esm/transport/node/builders/message.js +9 -0
  153. package/dist/esm/transport/node/builders/pairing.js +4 -5
  154. package/dist/esm/transport/node/builders/usync.js +41 -0
  155. package/dist/esm/transport/node/helpers.js +107 -5
  156. package/dist/esm/transport/node/usync.js +35 -0
  157. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  158. package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
  159. package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
  160. package/dist/esm/transport/proxy.js +27 -0
  161. package/dist/esm/transport/stream/parse.js +13 -48
  162. package/dist/esm/util/bytes.js +50 -32
  163. package/dist/esm/util/coercion.js +6 -14
  164. package/dist/esm/util/primitives.js +39 -14
  165. package/dist/infra/log/ConsoleLogger.js +18 -17
  166. package/dist/infra/log/PinoLogger.js +15 -9
  167. package/dist/infra/log/types.js +12 -0
  168. package/dist/infra/perf/BoundedTaskQueue.js +13 -17
  169. package/dist/media/WaMediaCrypto.js +1 -3
  170. package/dist/media/WaMediaTransferClient.js +259 -58
  171. package/dist/media/conn.js +10 -6
  172. package/dist/media/constants.js +4 -1
  173. package/dist/message/WaMessageClient.js +5 -14
  174. package/dist/message/ack.js +6 -6
  175. package/dist/message/addon-crypto.js +65 -0
  176. package/dist/message/incoming.js +104 -109
  177. package/dist/message/index.js +2 -0
  178. package/dist/message/reporting-token.js +443 -0
  179. package/dist/message/use-case-secret.js +55 -0
  180. package/dist/protocol/appstate.js +59 -1
  181. package/dist/protocol/constants.js +7 -1
  182. package/dist/protocol/index.js +20 -42
  183. package/dist/protocol/jid.js +64 -51
  184. package/dist/protocol/media.js +3 -3
  185. package/dist/protocol/nodes.js +2 -0
  186. package/dist/protocol/usync.js +14 -0
  187. package/dist/retry/index.js +3 -1
  188. package/dist/retry/outbound.js +6 -7
  189. package/dist/retry/parse.js +57 -75
  190. package/dist/retry/replay.js +46 -47
  191. package/dist/retry/tracker.js +59 -0
  192. package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
  193. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  194. package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
  195. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
  196. package/dist/signal/api/SignalSessionSyncApi.js +23 -30
  197. package/dist/signal/crypto/WaAdvSignature.js +2 -4
  198. package/dist/signal/group/SenderKeyChain.js +27 -22
  199. package/dist/signal/group/SenderKeyCodec.js +1 -3
  200. package/dist/signal/group/SenderKeyManager.js +26 -16
  201. package/dist/signal/index.js +3 -1
  202. package/dist/signal/session/SignalProtocol.js +49 -14
  203. package/dist/signal/session/SignalRatchet.js +24 -15
  204. package/dist/signal/session/SignalSession.js +14 -9
  205. package/dist/signal/session/resolver.js +189 -0
  206. package/dist/signal/store/sqlite.js +16 -37
  207. package/dist/store/createStore.js +16 -18
  208. package/dist/store/noop.store.js +3 -6
  209. package/dist/store/providers/memory/appstate.store.js +28 -4
  210. package/dist/store/providers/memory/contact.store.js +5 -0
  211. package/dist/store/providers/memory/device-list.store.js +3 -30
  212. package/dist/store/providers/memory/message.store.js +11 -5
  213. package/dist/store/providers/memory/participants.store.js +1 -8
  214. package/dist/store/providers/memory/sender-key.store.js +8 -10
  215. package/dist/store/providers/memory/signal.store.js +21 -9
  216. package/dist/store/providers/memory/thread.store.js +5 -0
  217. package/dist/store/providers/sqlite/appstate.store.js +81 -0
  218. package/dist/store/providers/sqlite/connection.js +18 -13
  219. package/dist/store/providers/sqlite/contact.store.js +31 -18
  220. package/dist/store/providers/sqlite/device-list.store.js +7 -35
  221. package/dist/store/providers/sqlite/message.store.js +45 -32
  222. package/dist/store/providers/sqlite/migrations.js +1 -1
  223. package/dist/store/providers/sqlite/participants.store.js +1 -9
  224. package/dist/store/providers/sqlite/retry.store.js +8 -11
  225. package/dist/store/providers/sqlite/sender-key.store.js +24 -29
  226. package/dist/store/providers/sqlite/signal.store.js +105 -23
  227. package/dist/store/providers/sqlite/table-names.js +113 -0
  228. package/dist/store/providers/sqlite/thread.store.js +35 -22
  229. package/dist/transport/WaComms.js +27 -25
  230. package/dist/transport/WaWebSocket.js +148 -12
  231. package/dist/transport/binary/decoder.js +4 -4
  232. package/dist/transport/binary/encoder.js +12 -4
  233. package/dist/transport/index.js +7 -1
  234. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  235. package/dist/transport/node/WaNodeOrchestrator.js +2 -4
  236. package/dist/transport/node/WaNodeTransport.js +0 -3
  237. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  238. package/dist/transport/node/builders/index.js +12 -9
  239. package/dist/transport/node/builders/message.js +9 -0
  240. package/dist/transport/node/builders/pairing.js +4 -5
  241. package/dist/transport/node/builders/usync.js +45 -0
  242. package/dist/transport/node/helpers.js +112 -4
  243. package/dist/transport/node/usync.js +38 -0
  244. package/dist/transport/noise/WaFrameCodec.js +47 -32
  245. package/dist/transport/noise/WaNoiseCert.js +5 -8
  246. package/dist/transport/noise/WaNoiseSession.js +17 -10
  247. package/dist/transport/proxy.js +34 -0
  248. package/dist/transport/stream/parse.js +17 -53
  249. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  250. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  251. package/dist/types/appstate/constants.d.ts +1 -0
  252. package/dist/types/appstate/store/sqlite.d.ts +4 -18
  253. package/dist/types/appstate/utils.d.ts +0 -1
  254. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  255. package/dist/types/auth/index.d.ts +0 -2
  256. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  257. package/dist/types/auth/types.d.ts +6 -9
  258. package/dist/types/client/WaClient.d.ts +27 -25
  259. package/dist/types/client/WaClientFactory.d.ts +22 -23
  260. package/dist/types/client/connection/WaConnectionManager.d.ts +64 -0
  261. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  262. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  263. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  264. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +0 -1
  265. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
  266. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
  267. package/dist/types/client/dirty.d.ts +1 -0
  268. package/dist/types/client/events/group.d.ts +2 -1
  269. package/dist/types/client/index.d.ts +1 -1
  270. package/dist/types/client/messaging/fanout.d.ts +14 -0
  271. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  272. package/dist/types/client/messaging/participants.d.ts +13 -0
  273. package/dist/types/client/types.d.ts +24 -1
  274. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  275. package/dist/types/crypto/core/index.d.ts +0 -1
  276. package/dist/types/crypto/core/random.d.ts +1 -7
  277. package/dist/types/crypto/index.d.ts +0 -2
  278. package/dist/types/index.d.ts +1 -1
  279. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  280. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  281. package/dist/types/infra/log/types.d.ts +1 -0
  282. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  283. package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
  284. package/dist/types/media/types.d.ts +5 -0
  285. package/dist/types/message/addon-crypto.d.ts +25 -0
  286. package/dist/types/message/index.d.ts +2 -0
  287. package/dist/types/message/reporting-token.d.ts +19 -0
  288. package/dist/types/message/use-case-secret.d.ts +20 -0
  289. package/dist/types/protocol/appstate.d.ts +58 -0
  290. package/dist/types/protocol/constants.d.ts +2 -1
  291. package/dist/types/protocol/index.d.ts +2 -10
  292. package/dist/types/protocol/jid.d.ts +3 -3
  293. package/dist/types/protocol/nodes.d.ts +2 -0
  294. package/dist/types/protocol/usync.d.ts +11 -0
  295. package/dist/types/retry/index.d.ts +1 -0
  296. package/dist/types/retry/replay.d.ts +0 -4
  297. package/dist/types/retry/tracker.d.ts +19 -0
  298. package/dist/types/retry/types.d.ts +4 -3
  299. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
  300. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  301. package/dist/types/signal/index.d.ts +1 -0
  302. package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
  303. package/dist/types/signal/session/resolver.d.ts +17 -0
  304. package/dist/types/store/contracts/appstate.store.d.ts +3 -0
  305. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  306. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  307. package/dist/types/store/contracts/message.store.d.ts +1 -0
  308. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  309. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  310. package/dist/types/store/contracts/signal.store.d.ts +6 -0
  311. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  312. package/dist/types/store/index.d.ts +1 -1
  313. package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
  314. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  315. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  316. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  317. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  318. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  319. package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
  320. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  321. package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
  322. package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
  323. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
  324. package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
  325. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
  326. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
  327. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
  328. package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
  329. package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
  330. package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
  331. package/dist/types/store/types.d.ts +3 -0
  332. package/dist/types/transport/WaWebSocket.d.ts +3 -0
  333. package/dist/types/transport/index.d.ts +2 -1
  334. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  335. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  336. package/dist/types/transport/node/builders/group.d.ts +4 -6
  337. package/dist/types/transport/node/builders/index.d.ts +2 -1
  338. package/dist/types/transport/node/builders/message.d.ts +14 -25
  339. package/dist/types/transport/node/builders/retry.d.ts +2 -4
  340. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  341. package/dist/types/transport/node/helpers.d.ts +8 -0
  342. package/dist/types/transport/node/usync.d.ts +2 -0
  343. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  344. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
  345. package/dist/types/transport/proxy.d.ts +6 -0
  346. package/dist/types/transport/stream/parse.d.ts +0 -1
  347. package/dist/types/transport/types.d.ts +18 -1
  348. package/dist/types/util/bytes.d.ts +5 -0
  349. package/dist/types/util/primitives.d.ts +3 -0
  350. package/dist/util/bytes.js +55 -33
  351. package/dist/util/coercion.js +6 -14
  352. package/dist/util/primitives.js +42 -14
  353. package/package.json +27 -9
  354. package/proto/index.d.ts +1090 -1048
  355. package/proto/index.js +1 -1
  356. package/scripts/check-node-version.cjs +0 -1
  357. package/dist/crypto/core/encoding.js +0 -29
  358. package/dist/esm/crypto/core/encoding.js +0 -25
  359. package/dist/esm/util/base64.js +0 -18
  360. package/dist/esm/util/signal-address.js +0 -5
  361. package/dist/types/crypto/core/encoding.d.ts +0 -11
  362. package/dist/types/util/base64.d.ts +0 -4
  363. package/dist/types/util/signal-address.d.ts +0 -2
  364. package/dist/util/base64.js +0 -24
  365. package/dist/util/signal-address.js +0 -8
  366. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -3,10 +3,16 @@ import type { WaAuthClientOptions, WaAuthCredentials, WaAuthSocketOptions } from
3
3
  import type { WaMessagePublishOptions } from '../message/types';
4
4
  import type { Proto } from '..';
5
5
  import type { WaStore } from '../store/types';
6
- import type { BinaryNode } from '../transport/types';
6
+ import type { BinaryNode, WaProxyTransport } from '../transport/types';
7
+ export interface WaClientProxyOptions {
8
+ readonly ws?: WaProxyTransport;
9
+ readonly mediaUpload?: WaProxyTransport;
10
+ readonly mediaDownload?: WaProxyTransport;
11
+ }
7
12
  export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOptions {
8
13
  readonly store: WaStore;
9
14
  readonly sessionId: string;
15
+ readonly proxy?: WaClientProxyOptions;
10
16
  readonly chatSocketUrls?: readonly string[];
11
17
  readonly iqTimeoutMs?: number;
12
18
  readonly nodeQueryTimeoutMs?: number;
@@ -42,6 +48,23 @@ export interface WaSendMessageOptions extends WaMessagePublishOptions {
42
48
  readonly id?: string;
43
49
  readonly expectedIdentity?: Uint8Array;
44
50
  }
51
+ export interface WaClearChatOptions {
52
+ readonly deleteStarred?: boolean;
53
+ readonly deleteMedia?: boolean;
54
+ }
55
+ export interface WaDeleteChatOptions {
56
+ readonly deleteMedia?: boolean;
57
+ }
58
+ export interface WaAppStateMessageKey {
59
+ readonly chatJid: string;
60
+ readonly id: string;
61
+ readonly fromMe: boolean;
62
+ readonly participantJid?: string;
63
+ }
64
+ export interface WaDeleteMessageForMeOptions {
65
+ readonly deleteMedia?: boolean;
66
+ readonly messageTimestampMs?: number;
67
+ }
45
68
  export type WaIncomingNodeHandler = (node: BinaryNode) => Promise<boolean>;
46
69
  export interface WaIncomingNodeHandlerRegistration {
47
70
  readonly tag: string;
@@ -1,8 +1,2 @@
1
- /**
2
- * HKDF key derivation using SHA-256
3
- */
4
1
  export declare function hkdf(ikm: Uint8Array, salt: Uint8Array | null, info: Uint8Array | string, outLength: number): Promise<Uint8Array>;
5
- /**
6
- * HKDF key derivation that outputs two 32-byte keys
7
- */
8
2
  export declare function hkdfSplit(ikm: Uint8Array, salt: Uint8Array | null, info: string): Promise<readonly [Uint8Array, Uint8Array]>;
@@ -3,7 +3,6 @@
3
3
  */
4
4
  export { Ed25519 } from '../curves/Ed25519';
5
5
  export { X25519 } from '../curves/X25519';
6
- export { decodeBase64Url, assert32 } from '../core/encoding';
7
6
  export { hkdf, hkdfSplit } from '../core/hkdf';
8
7
  export { toSerializedPubKey, toRawPubKey, prependVersion, readVersionedContent } from '../core/keys';
9
8
  export { buildNonce } from '../core/nonce';
@@ -1,8 +1,2 @@
1
- /**
2
- * Generates cryptographically secure random bytes
3
- */
4
1
  export declare function randomBytesAsync(size: number): Promise<Uint8Array>;
5
- /**
6
- * Generates a cryptographically secure random integer in the range [min, max)
7
- */
8
- export declare function randomIntAsync(min: number, max: number): Promise<number>;
2
+ export declare const randomIntAsync: (min: number, max: number) => Promise<number>;
@@ -1,3 +1 @@
1
1
  export * from './core';
2
- export { Ed25519 } from './curves/Ed25519';
3
- export { X25519 } from './curves/X25519';
@@ -1,5 +1,5 @@
1
1
  export { WaClient } from '@client';
2
- export type { WaClientEventMap, WaClientOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions } from '@client';
2
+ export type { WaClientEventMap, WaClientOptions, WaClientProxyOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions } from '@client';
3
3
  export { ConsoleLogger } from './infra/log/ConsoleLogger';
4
4
  export { PinoLogger, createPinoLogger } from './infra/log/PinoLogger';
5
5
  export type { PinoLoggerOptions } from './infra/log/PinoLogger';
@@ -1,11 +1,12 @@
1
1
  import type { LogLevel, Logger } from '../log/types';
2
2
  export declare class ConsoleLogger implements Logger {
3
3
  readonly level: LogLevel;
4
+ private readonly minLevelPriority;
4
5
  constructor(level?: LogLevel);
5
6
  trace(message: string, context?: Record<string, unknown>): void;
6
7
  debug(message: string, context?: Record<string, unknown>): void;
7
8
  info(message: string, context?: Record<string, unknown>): void;
8
9
  warn(message: string, context?: Record<string, unknown>): void;
9
10
  error(message: string, context?: Record<string, unknown>): void;
10
- private canLog;
11
+ private write;
11
12
  }
@@ -24,7 +24,7 @@ export declare class PinoLogger implements Logger {
24
24
  info(message: string, context?: Readonly<Record<string, unknown>>): void;
25
25
  warn(message: string, context?: Readonly<Record<string, unknown>>): void;
26
26
  error(message: string, context?: Readonly<Record<string, unknown>>): void;
27
- private writeLog;
27
+ private write;
28
28
  }
29
29
  export declare function createPinoLogger(options?: PinoLoggerOptions): Promise<PinoLogger>;
30
30
  export {};
@@ -7,3 +7,4 @@ export interface Logger {
7
7
  warn(message: string, context?: Readonly<Record<string, unknown>>): void;
8
8
  error(message: string, context?: Readonly<Record<string, unknown>>): void;
9
9
  }
10
+ export declare function createNoopLogger(level?: LogLevel): Logger;
@@ -10,10 +10,10 @@ export declare class BoundedTaskQueue {
10
10
  private head;
11
11
  private running;
12
12
  constructor(maxQueueSize?: number, maxConcurrency?: number);
13
+ private readonly settleTask;
13
14
  enqueue<T>(task: Task<T>): Promise<T>;
14
15
  pending(): number;
15
16
  inFlight(): number;
16
17
  private drain;
17
- private compactIfNeeded;
18
18
  }
19
19
  export {};
@@ -5,6 +5,8 @@ interface StreamDownloadRequest {
5
5
  readonly directPath?: string;
6
6
  readonly hosts?: readonly string[];
7
7
  readonly headers?: Readonly<Record<string, string>>;
8
+ readonly dispatcher?: WaMediaTransferClientOptions['defaultDownloadDispatcher'];
9
+ readonly agent?: WaMediaTransferClientOptions['defaultDownloadAgent'];
8
10
  readonly timeoutMs?: number;
9
11
  readonly signal?: AbortSignal;
10
12
  readonly maxBytes?: number;
@@ -55,6 +57,11 @@ export declare class WaMediaTransferClient {
55
57
  private readonly defaultTimeoutMs;
56
58
  private readonly defaultMaxReadBytes;
57
59
  private readonly defaultHeaders;
60
+ private readonly defaultUploadDispatcher;
61
+ private readonly defaultDownloadDispatcher;
62
+ private readonly defaultUploadAgent;
63
+ private readonly defaultDownloadAgent;
64
+ private gotModulePromise;
58
65
  constructor(options?: WaMediaTransferClientOptions);
59
66
  downloadStream(request: StreamDownloadRequest): Promise<StreamTransferResponse>;
60
67
  downloadBytes(request: StreamDownloadRequest): Promise<Uint8Array>;
@@ -63,19 +70,22 @@ export declare class WaMediaTransferClient {
63
70
  downloadAndDecrypt(request: EncryptedDownloadRequest): Promise<Uint8Array>;
64
71
  downloadAndDecryptStream(request: EncryptedDownloadRequest): Promise<EncryptedDownloadStream>;
65
72
  readResponseBytes(response: StreamTransferResponse, maxBytes?: number): Promise<Uint8Array>;
73
+ private transferRequest;
74
+ private fetchWithDispatcher;
75
+ private toFetchTransferResponse;
76
+ private gotWithAgent;
77
+ private loadGotModule;
78
+ private toGotTransferResponse;
66
79
  private resolveTransferRequest;
67
80
  private executeTransfer;
68
81
  private prepareEncryptedUpload;
69
82
  private assertSuccessfulResponse;
70
83
  private requireResponseBody;
71
84
  private resolveUrls;
72
- private mergeHeaders;
73
85
  private readAllBytesWithLimit;
74
86
  private fetchWithFallback;
75
87
  private createAbortContext;
76
- private toResponse;
77
88
  private headersToRecord;
78
- private cancelWebBody;
79
89
  private drainBody;
80
90
  }
81
91
  export {};
@@ -1,5 +1,6 @@
1
1
  import type { Readable } from 'node:stream';
2
2
  import type { Logger } from '../infra/log/types';
3
+ import type { WaProxyAgent, WaProxyDispatcher } from '../transport/types';
3
4
  export type MediaKind = 'image' | 'video' | 'audio' | 'document' | 'sticker';
4
5
  export type MediaCryptoType = MediaKind | 'ptt' | 'gif' | 'ptv' | 'history' | 'md-app-state';
5
6
  export interface WaMediaConnHost {
@@ -17,6 +18,10 @@ export interface WaMediaTransferClientOptions {
17
18
  readonly defaultTimeoutMs?: number;
18
19
  readonly defaultMaxReadBytes?: number;
19
20
  readonly defaultHeaders?: Readonly<Record<string, string>>;
21
+ readonly defaultUploadDispatcher?: WaProxyDispatcher;
22
+ readonly defaultDownloadDispatcher?: WaProxyDispatcher;
23
+ readonly defaultUploadAgent?: WaProxyAgent;
24
+ readonly defaultDownloadAgent?: WaProxyAgent;
20
25
  }
21
26
  export interface WaMediaDerivedKeys {
22
27
  readonly iv: Uint8Array;
@@ -0,0 +1,25 @@
1
+ import { WA_USE_CASE_SECRET_MODIFICATION_TYPES } from './use-case-secret';
2
+ type WaAddonBytes = Uint8Array | ArrayBuffer | ArrayBufferView;
3
+ export declare function shouldUseAddonAdditionalData(modificationType: (typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES)[keyof typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES]): boolean;
4
+ export declare function buildAddonAdditionalData(stanzaId: string, addOnSenderJid: string): Uint8Array;
5
+ export declare function encryptAddonPayload(input: {
6
+ readonly messageSecret: WaAddonBytes;
7
+ readonly stanzaId: string;
8
+ readonly parentMsgOriginalSender: string;
9
+ readonly modificationSender: string;
10
+ readonly modificationType: (typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES)[keyof typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES];
11
+ readonly payload: WaAddonBytes;
12
+ readonly iv: WaAddonBytes;
13
+ readonly additionalData?: WaAddonBytes;
14
+ }): Promise<Uint8Array>;
15
+ export declare function decryptAddonPayload(input: {
16
+ readonly messageSecret: WaAddonBytes;
17
+ readonly stanzaId: string;
18
+ readonly parentMsgOriginalSender: string;
19
+ readonly modificationSender: string;
20
+ readonly modificationType: (typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES)[keyof typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES];
21
+ readonly ciphertext: WaAddonBytes;
22
+ readonly iv: WaAddonBytes;
23
+ readonly additionalData?: WaAddonBytes;
24
+ }): Promise<Uint8Array>;
25
+ export {};
@@ -1,2 +1,4 @@
1
1
  export { WaMessageClient } from './WaMessageClient';
2
+ export * from './addon-crypto';
2
3
  export * from './types';
4
+ export * from './use-case-secret';
@@ -0,0 +1,19 @@
1
+ import { type Proto } from '..';
2
+ import type { BinaryNode } from '../transport/types';
3
+ export declare const WA_REPORTING_TOKEN_VERSION = 2;
4
+ export interface BuildReportingTokenNodeInput {
5
+ readonly message: Proto.IMessage;
6
+ readonly stanzaId: string;
7
+ readonly senderUserJid: string;
8
+ readonly remoteJid: string;
9
+ readonly version?: number;
10
+ }
11
+ export interface BuildReportingTokenArtifactsResult {
12
+ readonly node: BinaryNode;
13
+ readonly version: number;
14
+ readonly reportingToken: Uint8Array;
15
+ readonly reportingTokenContent: Uint8Array;
16
+ readonly reportingTokenKey: Uint8Array;
17
+ }
18
+ export declare function buildReportingTokenNode(input: BuildReportingTokenNodeInput): Promise<BinaryNode | null>;
19
+ export declare function buildReportingTokenArtifacts(input: BuildReportingTokenNodeInput): Promise<BuildReportingTokenArtifactsResult | null>;
@@ -0,0 +1,20 @@
1
+ import type { Proto } from '..';
2
+ export declare const WA_MESSAGE_SECRET_BYTES = 32;
3
+ export declare const WA_USE_CASE_SECRET_MODIFICATION_TYPES: Readonly<{
4
+ readonly POLL_VOTE: "Poll Vote";
5
+ readonly ENC_REACTION: "Enc Reaction";
6
+ readonly ENC_COMMENT: "Enc Comment";
7
+ readonly REPORT_TOKEN: "Report Token";
8
+ readonly EVENT_RESPONSE: "Event Response";
9
+ readonly EVENT_EDIT_ENCRYPTED: "Event Edit";
10
+ readonly MESSAGE_EDIT: "Message Edit";
11
+ }>;
12
+ export declare function assertMessageSecret(messageSecret: Uint8Array | ArrayBuffer | ArrayBufferView, context?: string): Uint8Array;
13
+ export declare function ensureMessageSecret(message: Proto.IMessage): Promise<Proto.IMessage>;
14
+ export declare function createUseCaseSecret(input: {
15
+ readonly messageSecret: Uint8Array | ArrayBuffer | ArrayBufferView;
16
+ readonly stanzaId: string;
17
+ readonly parentMsgOriginalSender: string;
18
+ readonly modificationSender: string;
19
+ readonly modificationType: (typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES)[keyof typeof WA_USE_CASE_SECRET_MODIFICATION_TYPES];
20
+ }): Promise<Uint8Array>;
@@ -32,3 +32,61 @@ export declare const WA_APP_STATE_KDF_INFO: Readonly<{
32
32
  readonly MUTATION_KEYS: "WhatsApp Mutation Keys";
33
33
  readonly PATCH_INTEGRITY: "WhatsApp Patch Integrity";
34
34
  }>;
35
+ export declare const WA_APP_STATE_CHAT_MUTATION_ACTIONS: Readonly<{
36
+ readonly STAR: "star";
37
+ readonly MUTE: "mute";
38
+ readonly PIN: "pin_v1";
39
+ readonly ARCHIVE: "archive";
40
+ readonly DELETE_MESSAGE_FOR_ME: "deleteMessageForMe";
41
+ readonly MARK_CHAT_AS_READ: "markChatAsRead";
42
+ readonly CLEAR_CHAT: "clearChat";
43
+ readonly DELETE_CHAT: "deleteChat";
44
+ readonly LOCK_CHAT: "lock";
45
+ }>;
46
+ export declare const WA_APP_STATE_CHAT_MUTATION_SPECS: Readonly<{
47
+ readonly STAR: {
48
+ readonly collection: "regular_high";
49
+ readonly action: "star";
50
+ readonly version: 2;
51
+ };
52
+ readonly MUTE: {
53
+ readonly collection: "regular_high";
54
+ readonly action: "mute";
55
+ readonly version: 2;
56
+ };
57
+ readonly PIN: {
58
+ readonly collection: "regular_low";
59
+ readonly action: "pin_v1";
60
+ readonly version: 5;
61
+ };
62
+ readonly ARCHIVE: {
63
+ readonly collection: "regular_low";
64
+ readonly action: "archive";
65
+ readonly version: 3;
66
+ };
67
+ readonly DELETE_MESSAGE_FOR_ME: {
68
+ readonly collection: "regular_high";
69
+ readonly action: "deleteMessageForMe";
70
+ readonly version: 3;
71
+ };
72
+ readonly MARK_CHAT_AS_READ: {
73
+ readonly collection: "regular_low";
74
+ readonly action: "markChatAsRead";
75
+ readonly version: 3;
76
+ };
77
+ readonly CLEAR_CHAT: {
78
+ readonly collection: "regular_high";
79
+ readonly action: "clearChat";
80
+ readonly version: 6;
81
+ };
82
+ readonly DELETE_CHAT: {
83
+ readonly collection: "regular_high";
84
+ readonly action: "deleteChat";
85
+ readonly version: 6;
86
+ };
87
+ readonly LOCK_CHAT: {
88
+ readonly collection: "regular_low";
89
+ readonly action: "lock";
90
+ readonly version: 7;
91
+ };
92
+ }>;
@@ -3,9 +3,10 @@ export { WA_SIGNALING, WA_PAIRING_KDF_INFO } from './auth';
3
3
  export { WA_DISCONNECT_REASONS, WA_LOGOUT_REASONS, WA_READY_STATES, WA_STREAM_SIGNALING } from './stream';
4
4
  export { WA_IQ_TYPES, WA_NODE_TAGS, WA_XMLNS } from './nodes';
5
5
  export { WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_RETRYABLE_ACK_CODES } from './message';
6
- export { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE } from './appstate';
6
+ export { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_CHAT_MUTATION_ACTIONS, WA_APP_STATE_CHAT_MUTATION_SPECS, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE } from './appstate';
7
7
  export { getWaMediaHkdfInfo, WA_MEDIA_HKDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO } from './media';
8
8
  export { WA_ACCOUNT_SYNC_PROTOCOLS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_SUPPORTED_DIRTY_TYPES } from './dirty';
9
9
  export { WA_GROUP_NOTIFICATION_TAGS, WA_NOTIFICATION_TYPES } from './notification';
10
10
  export { WA_DEFAULTS } from './defaults';
11
11
  export { WA_GROUP_PARTICIPANT_TYPES, type WaGroupSetting } from './group';
12
+ export { WA_USYNC_CONTEXTS, WA_USYNC_DEFAULTS, WA_USYNC_MODES } from './usync';
@@ -1,11 +1,3 @@
1
- export { getWaCompanionPlatformId, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS } from './browser';
2
- export { WA_SIGNALING, WA_PAIRING_KDF_INFO } from './auth';
3
- export { WA_DISCONNECT_REASONS, WA_LOGOUT_REASONS, WA_READY_STATES, WA_STREAM_SIGNALING } from './stream';
4
- export { WA_IQ_TYPES, WA_NODE_TAGS, WA_XMLNS } from './nodes';
5
- export { WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_RETRYABLE_ACK_CODES } from './message';
6
- export { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE } from './appstate';
7
- export { getWaMediaHkdfInfo, WA_MEDIA_HKDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO } from './media';
8
- export { WA_ACCOUNT_SYNC_PROTOCOLS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_SUPPORTED_DIRTY_TYPES } from './dirty';
9
- export { WA_GROUP_NOTIFICATION_TAGS, WA_NOTIFICATION_TYPES } from './notification';
10
- export { WA_DEFAULTS } from './defaults';
1
+ export * from './constants';
11
2
  export { getLoginIdentity, isGroupJid, normalizeDeviceJid, normalizeRecipientJid, parsePhoneJid, parseSignalAddressFromJid, splitJid, toUserJid } from './jid';
3
+ export { WA_USYNC_CONTEXTS, WA_USYNC_DEFAULTS, WA_USYNC_MODES } from './usync';
@@ -1,9 +1,8 @@
1
1
  import type { SignalAddress } from '../signal/types';
2
- export interface ParsedJid {
2
+ export declare function splitJid(jid: string): {
3
3
  readonly user: string;
4
4
  readonly server: string;
5
- }
6
- export declare function splitJid(jid: string): ParsedJid;
5
+ };
7
6
  export declare function normalizeRecipientJid(to: string): string;
8
7
  export declare function isJidType(jid: string, type: string): boolean;
9
8
  export declare function isGroupJid(jid: string): boolean;
@@ -17,3 +16,4 @@ export declare function getLoginIdentity(meJid: string): {
17
16
  readonly device: number;
18
17
  };
19
18
  export declare function parsePhoneJid(input: string): string;
19
+ export declare function signalAddressKey(address: SignalAddress): string;
@@ -23,6 +23,8 @@ export declare const WA_NODE_TAGS: Readonly<{
23
23
  readonly KEY_FETCH: "key_fetch";
24
24
  readonly LIST: "list";
25
25
  readonly USER: "user";
26
+ readonly CONTACT: "contact";
27
+ readonly LID: "lid";
26
28
  readonly PICTURE: "picture";
27
29
  readonly PRIVACY: "privacy";
28
30
  readonly PARTICIPATING: "participating";
@@ -0,0 +1,11 @@
1
+ export declare const WA_USYNC_MODES: Readonly<{
2
+ readonly QUERY: "query";
3
+ }>;
4
+ export declare const WA_USYNC_CONTEXTS: Readonly<{
5
+ readonly INTERACTIVE: "interactive";
6
+ readonly NOTIFICATION: "notification";
7
+ }>;
8
+ export declare const WA_USYNC_DEFAULTS: Readonly<{
9
+ readonly INDEX: "0";
10
+ readonly LAST: "true";
11
+ }>;
@@ -5,3 +5,4 @@ export { parseRetryReceiptRequest } from './parse';
5
5
  export type { WaParsedRetryRequest, WaRetryDecryptFailureContext, WaRetryEncryptedReplayPayload, WaRetryKey, WaRetryKeyBundle, WaRetryOpaqueNodeReplayPayload, WaRetryOutboundMessageRecord, WaRetryOutboundMode, WaRetryOutboundState, WaRetryPlaintextReplayPayload, WaRetryReceiptType, WaRetryReplayPayload, WaRetrySignedKey } from './types';
6
6
  export { decodeRetryReplayPayload, encodeRetryReplayPayload, pickRetryStateMax } from './outbound';
7
7
  export { WaRetryReplayService, type WaRetryReplayServiceOptions, type WaRetryResendResult } from './replay';
8
+ export { createOutboundRetryTracker, type OutboundRetryTrackHint, type OutboundRetryTracker } from './tracker';
@@ -22,9 +22,5 @@ export declare class WaRetryReplayService {
22
22
  private resendOpaquePayload;
23
23
  private maybeWrapGroupRetryPlaintextForSelfDevice;
24
24
  private isRequesterCurrentAccount;
25
- private get logger();
26
- private get messageClient();
27
- private get signalProtocol();
28
- private getCurrentSignedIdentity;
29
25
  private isOpaqueReplayCompatible;
30
26
  }
@@ -0,0 +1,19 @@
1
+ import type { Logger } from '../infra/log/types';
2
+ import type { WaMessagePublishResult } from '../message/types';
3
+ import type { WaRetryReplayPayload } from './types';
4
+ import type { WaRetryStore } from '../store/contracts/retry.store';
5
+ export type OutboundRetryTrackHint = {
6
+ readonly messageIdHint?: string;
7
+ readonly toJid?: string;
8
+ readonly type: string;
9
+ readonly replayPayload: WaRetryReplayPayload;
10
+ readonly participantJid?: string;
11
+ readonly recipientJid?: string;
12
+ };
13
+ export type OutboundRetryTracker = {
14
+ track(hint: OutboundRetryTrackHint, publish: () => Promise<WaMessagePublishResult>): Promise<WaMessagePublishResult>;
15
+ };
16
+ export declare function createOutboundRetryTracker(options: {
17
+ readonly retryStore: WaRetryStore;
18
+ readonly logger: Logger;
19
+ }): OutboundRetryTracker;
@@ -5,15 +5,16 @@ export type WaRetryOutboundState = 'pending' | 'delivered' | 'read' | 'played' |
5
5
  export interface WaRetryKey {
6
6
  readonly id: number;
7
7
  readonly publicKey: Uint8Array;
8
+ readonly signature?: Uint8Array;
8
9
  }
9
- export interface WaRetrySignedKey extends WaRetryKey {
10
+ export type WaRetrySignedKey = WaRetryKey & {
10
11
  readonly signature: Uint8Array;
11
- }
12
+ };
12
13
  export interface WaRetryKeyBundle {
13
14
  readonly identity: Uint8Array;
14
15
  readonly deviceIdentity?: Uint8Array;
15
16
  readonly key?: WaRetryKey;
16
- readonly skey: WaRetrySignedKey;
17
+ readonly skey: WaRetryKey;
17
18
  }
18
19
  export interface WaParsedRetryRequest {
19
20
  readonly type: WaRetryReceiptType;
@@ -1,5 +1,6 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
2
  import type { WaDeviceListStore } from '../../store/contracts/device-list.store';
3
+ import { type WaUsyncSidGenerator } from '../../transport/node/usync';
3
4
  import type { BinaryNode } from '../../transport/types';
4
5
  interface SignalDeviceSyncApiOptions {
5
6
  readonly logger: Logger;
@@ -7,6 +8,12 @@ interface SignalDeviceSyncApiOptions {
7
8
  readonly deviceListStore?: WaDeviceListStore;
8
9
  readonly defaultTimeoutMs?: number;
9
10
  readonly hostDomain?: string;
11
+ readonly generateSid?: WaUsyncSidGenerator;
12
+ }
13
+ export interface SignalLidSyncResult {
14
+ readonly phoneJid: string;
15
+ readonly lidJid: string | null;
16
+ readonly exists: boolean;
10
17
  }
11
18
  export declare class SignalDeviceSyncApi {
12
19
  private readonly logger;
@@ -14,18 +21,23 @@ export declare class SignalDeviceSyncApi {
14
21
  private readonly deviceListStore?;
15
22
  private readonly defaultTimeoutMs;
16
23
  private readonly hostDomain;
24
+ private readonly generateSid;
17
25
  constructor(options: SignalDeviceSyncApiOptions);
18
26
  syncDeviceList(userJids: readonly string[], timeoutMs?: number): Promise<readonly {
19
27
  readonly jid: string;
20
28
  readonly deviceJids: readonly string[];
21
29
  }[]>;
30
+ queryLidsByPhoneJids(phoneJids: readonly string[], timeoutMs?: number): Promise<readonly SignalLidSyncResult[]>;
22
31
  private collectUsersToQuery;
23
32
  private makeDeviceSyncRequest;
33
+ private makeLidSyncRequest;
24
34
  private parseDeviceSyncResponse;
35
+ private parseLidSyncResponse;
36
+ private buildLidSyncResult;
37
+ private parseLidSyncContactExists;
25
38
  private parseUserDeviceJids;
26
39
  private normalizeUsers;
27
40
  private normalizeUserJid;
28
41
  private toDeviceJid;
29
- private makeSid;
30
42
  }
31
43
  export {};
@@ -1,14 +1,12 @@
1
- export interface ParsedDistributionPayload {
1
+ export declare function parseDistributionPayload(payload: Uint8Array): {
2
2
  readonly keyId: number;
3
3
  readonly iteration: number;
4
4
  readonly chainKey: Uint8Array;
5
5
  readonly signingPublicKey: Uint8Array;
6
- }
7
- export interface ParsedSenderKeyMessage {
6
+ };
7
+ export declare function parseSenderKeyMessage(versionContentMac: Uint8Array): {
8
8
  readonly keyId: number;
9
9
  readonly iteration: number;
10
10
  readonly ciphertext: Uint8Array;
11
11
  readonly versionContentMac: Uint8Array;
12
- }
13
- export declare function parseDistributionPayload(payload: Uint8Array): ParsedDistributionPayload;
14
- export declare function parseSenderKeyMessage(versionContentMac: Uint8Array): ParsedSenderKeyMessage;
12
+ };
@@ -10,3 +10,4 @@ export { SignalSessionSyncApi } from './api/SignalSessionSyncApi';
10
10
  export { SenderKeyManager } from './group/SenderKeyManager';
11
11
  export { createAndStoreInitialKeys } from './registration/utils';
12
12
  export { SignalProtocol } from './session/SignalProtocol';
13
+ export { createSignalSessionResolver, type SignalSessionResolver } from './session/resolver';
@@ -13,6 +13,15 @@ export declare class SignalProtocol {
13
13
  readonly ciphertext: Uint8Array;
14
14
  readonly baseKey: Uint8Array | null;
15
15
  }>;
16
+ encryptMessagesBatch(requests: readonly {
17
+ readonly address: SignalAddress;
18
+ readonly plaintext: Uint8Array;
19
+ readonly expectedIdentity?: Uint8Array;
20
+ }[]): Promise<readonly {
21
+ readonly type: 'msg' | 'pkmsg';
22
+ readonly ciphertext: Uint8Array;
23
+ readonly baseKey: Uint8Array | null;
24
+ }[]>;
16
25
  decryptMessage(address: SignalAddress, envelope: {
17
26
  readonly type: 'msg' | 'pkmsg';
18
27
  readonly ciphertext: Uint8Array;
@@ -0,0 +1,17 @@
1
+ import type { Logger } from '../../infra/log/types';
2
+ import type { SignalIdentitySyncApi } from '../api/SignalIdentitySyncApi';
3
+ import type { SignalSessionSyncApi } from '../api/SignalSessionSyncApi';
4
+ import type { SignalProtocol } from '../session/SignalProtocol';
5
+ import type { SignalAddress } from '../types';
6
+ import type { WaSignalStore } from '../../store/contracts/signal.store';
7
+ export type SignalSessionResolver = {
8
+ ensureSession(address: SignalAddress, jid: string, expectedIdentity?: Uint8Array, reasonIdentity?: boolean): Promise<void>;
9
+ ensureSessionsBatch(targetJids: readonly string[], expectedIdentityByJid?: ReadonlyMap<string, Uint8Array>): Promise<void>;
10
+ };
11
+ export declare function createSignalSessionResolver(options: {
12
+ readonly signalProtocol: SignalProtocol;
13
+ readonly signalStore: WaSignalStore;
14
+ readonly signalIdentitySync: SignalIdentitySyncApi;
15
+ readonly signalSessionSync: SignalSessionSyncApi;
16
+ readonly logger: Logger;
17
+ }): SignalSessionResolver;
@@ -1,5 +1,6 @@
1
1
  import type { AppStateCollectionName, WaAppStateStoreData, WaAppStateSyncKey } from '../../appstate/types';
2
2
  export interface WaAppStateCollectionStoreState {
3
+ readonly initialized: boolean;
3
4
  readonly version: number;
4
5
  readonly hash: Uint8Array;
5
6
  readonly indexValueMap: ReadonlyMap<string, Uint8Array>;
@@ -15,8 +16,10 @@ export interface WaAppStateStore {
15
16
  upsertSyncKeys(keys: readonly WaAppStateSyncKey[]): Promise<number>;
16
17
  getSyncKey(keyId: Uint8Array): Promise<WaAppStateSyncKey | null>;
17
18
  getSyncKeyData(keyId: Uint8Array): Promise<Uint8Array | null>;
19
+ getSyncKeyDataBatch(keyIds: readonly Uint8Array[]): Promise<readonly (Uint8Array | null)[]>;
18
20
  getActiveSyncKey(): Promise<WaAppStateSyncKey | null>;
19
21
  getCollectionState(collection: AppStateCollectionName): Promise<WaAppStateCollectionStoreState>;
22
+ getCollectionStates(collections: readonly AppStateCollectionName[]): Promise<readonly WaAppStateCollectionStoreState[]>;
20
23
  setCollectionStates(updates: readonly WaAppStateCollectionStateUpdate[]): Promise<void>;
21
24
  clear(): Promise<void>;
22
25
  }
@@ -8,6 +8,7 @@ export interface WaStoredContactRecord {
8
8
  }
9
9
  export interface WaContactStore {
10
10
  upsert(record: WaStoredContactRecord): Promise<void>;
11
+ upsertBatch(records: readonly WaStoredContactRecord[]): Promise<void>;
11
12
  getByJid(jid: string): Promise<WaStoredContactRecord | null>;
12
13
  deleteByJid(jid: string): Promise<number>;
13
14
  clear(): Promise<void>;
@@ -4,11 +4,8 @@ export interface WaDeviceListSnapshot {
4
4
  readonly updatedAtMs: number;
5
5
  }
6
6
  export interface WaDeviceListStore {
7
- getTtlMs(): number;
8
7
  destroy?(): Promise<void>;
9
- upsertUserDevices(snapshot: WaDeviceListSnapshot): Promise<void>;
10
8
  upsertUserDevicesBatch(snapshots: readonly WaDeviceListSnapshot[]): Promise<void>;
11
- getUserDevices(userJid: string, nowMs?: number): Promise<WaDeviceListSnapshot | null>;
12
9
  getUserDevicesBatch(userJids: readonly string[], nowMs?: number): Promise<readonly (WaDeviceListSnapshot | null)[]>;
13
10
  deleteUserDevices(userJid: string): Promise<number>;
14
11
  cleanupExpired(nowMs: number): Promise<number>;
@@ -11,6 +11,7 @@ export interface WaStoredMessageRecord {
11
11
  }
12
12
  export interface WaMessageStore {
13
13
  upsert(record: WaStoredMessageRecord): Promise<void>;
14
+ upsertBatch(records: readonly WaStoredMessageRecord[]): Promise<void>;
14
15
  getById(id: string): Promise<WaStoredMessageRecord | null>;
15
16
  listByThread(threadJid: string, limit?: number, beforeTimestampMs?: number): Promise<readonly WaStoredMessageRecord[]>;
16
17
  deleteById(id: string): Promise<number>;
@@ -4,7 +4,6 @@ export interface WaParticipantsSnapshot {
4
4
  readonly updatedAtMs: number;
5
5
  }
6
6
  export interface WaParticipantsStore {
7
- getTtlMs(): number;
8
7
  destroy?(): Promise<void>;
9
8
  upsertGroupParticipants(snapshot: WaParticipantsSnapshot): Promise<void>;
10
9
  getGroupParticipants(groupJid: string, nowMs?: number): Promise<WaParticipantsSnapshot | null>;
@@ -8,7 +8,6 @@ export interface WaSenderKeyStore {
8
8
  readonly skDistribList: readonly SenderKeyDistributionRecord[];
9
9
  }>;
10
10
  getDeviceSenderKey(groupId: string, sender: SignalAddress): Promise<SenderKeyRecord | null>;
11
- getDeviceSenderKeyDistribution(groupId: string, sender: SignalAddress): Promise<SenderKeyDistributionRecord | null>;
12
11
  getDeviceSenderKeyDistributions(groupId: string, senders: readonly SignalAddress[]): Promise<readonly (SenderKeyDistributionRecord | null)[]>;
13
12
  deleteDeviceSenderKey(target: SignalAddress, groupId?: string): Promise<number>;
14
13
  markForgetSenderKey(groupId: string, participants: readonly SignalAddress[]): Promise<number>;