zapo-js 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (630) hide show
  1. package/README.md +16 -4
  2. package/dist/appstate/WaAppStateCrypto.js +50 -42
  3. package/dist/appstate/WaAppStateSyncClient.js +215 -133
  4. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  5. package/dist/appstate/index.js +9 -7
  6. package/dist/appstate/utils.js +0 -5
  7. package/dist/auth/WaAuthClient.js +55 -57
  8. package/dist/auth/credentials-flow.js +195 -0
  9. package/dist/auth/index.js +1 -6
  10. package/dist/auth/pairing/WaPairingFlow.js +39 -32
  11. package/dist/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +35 -17
  12. package/dist/client/WaClient.js +338 -174
  13. package/dist/client/WaClientFactory.js +399 -66
  14. package/dist/client/connection/WaConnectionManager.js +23 -11
  15. package/dist/client/coordinators/WaAbPropsCoordinator.js +141 -0
  16. package/dist/client/coordinators/WaBusinessCoordinator.js +232 -0
  17. package/dist/client/coordinators/WaEmailCoordinator.js +63 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +11 -7
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +34 -8
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +341 -118
  21. package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
  22. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
  23. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  24. package/dist/client/coordinators/WaProfileCoordinator.js +214 -0
  25. package/dist/client/coordinators/WaRetryCoordinator.js +184 -30
  26. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  27. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +184 -0
  28. package/dist/client/dirty.js +41 -21
  29. package/dist/client/events/abprops.js +43 -0
  30. package/dist/client/events/devices.js +72 -0
  31. package/dist/client/events/group.js +3 -11
  32. package/dist/client/events/identity.js +22 -0
  33. package/dist/client/events/privacy-token.js +38 -0
  34. package/dist/client/events/registration.js +42 -0
  35. package/dist/client/history-sync.js +50 -9
  36. package/dist/client/incoming.js +74 -7
  37. package/dist/client/mailbox.js +40 -23
  38. package/dist/client/media.js +243 -0
  39. package/dist/client/messages.js +245 -92
  40. package/dist/client/messaging/fanout.js +21 -11
  41. package/dist/client/messaging/participants.js +6 -4
  42. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  43. package/dist/client/tokens/cs-token.js +50 -0
  44. package/dist/client/tokens/tc-token.js +25 -0
  45. package/dist/crypto/core/index.js +5 -2
  46. package/dist/crypto/core/keys.js +4 -4
  47. package/dist/crypto/core/nonce.js +2 -0
  48. package/dist/crypto/core/primitives.js +0 -8
  49. package/dist/crypto/core/random.js +24 -8
  50. package/dist/crypto/core/xeddsa.js +57 -0
  51. package/dist/crypto/curves/X25519.js +43 -6
  52. package/dist/crypto/curves/constants.js +2 -1
  53. package/dist/crypto/index.js +3 -0
  54. package/dist/crypto/math/constants.js +13 -36
  55. package/dist/crypto/math/edwards.js +171 -44
  56. package/dist/crypto/math/fe.js +706 -0
  57. package/dist/crypto/math/mod.js +10 -3
  58. package/dist/esm/appstate/WaAppStateCrypto.js +40 -32
  59. package/dist/esm/appstate/WaAppStateSyncClient.js +206 -124
  60. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  61. package/dist/esm/appstate/index.js +2 -2
  62. package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +1 -1
  63. package/dist/esm/appstate/utils.js +2 -5
  64. package/dist/esm/auth/WaAuthClient.js +52 -54
  65. package/dist/esm/auth/credentials-flow.js +190 -0
  66. package/dist/esm/auth/index.js +0 -2
  67. package/dist/esm/auth/pairing/WaPairingFlow.js +39 -32
  68. package/dist/esm/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +26 -10
  69. package/dist/esm/client/WaClient.js +339 -175
  70. package/dist/esm/client/WaClientFactory.js +401 -68
  71. package/dist/esm/client/connection/WaConnectionManager.js +23 -11
  72. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +137 -0
  73. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +229 -0
  74. package/dist/esm/client/coordinators/WaEmailCoordinator.js +60 -0
  75. package/dist/esm/client/coordinators/WaGroupCoordinator.js +11 -7
  76. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +36 -10
  77. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +337 -114
  78. package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
  79. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +97 -36
  80. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  81. package/dist/esm/client/coordinators/WaProfileCoordinator.js +211 -0
  82. package/dist/esm/client/coordinators/WaRetryCoordinator.js +186 -32
  83. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  84. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +180 -0
  85. package/dist/esm/client/dirty.js +41 -21
  86. package/dist/esm/client/events/abprops.js +40 -0
  87. package/dist/esm/client/events/devices.js +68 -0
  88. package/dist/esm/client/events/group.js +3 -11
  89. package/dist/esm/client/events/identity.js +19 -0
  90. package/dist/esm/client/events/privacy-token.js +35 -0
  91. package/dist/esm/client/events/registration.js +39 -0
  92. package/dist/esm/client/history-sync.js +50 -9
  93. package/dist/esm/client/incoming.js +74 -8
  94. package/dist/esm/client/mailbox.js +40 -23
  95. package/dist/esm/client/media.js +234 -0
  96. package/dist/esm/client/messages.js +244 -91
  97. package/dist/esm/client/messaging/fanout.js +22 -12
  98. package/dist/esm/client/messaging/participants.js +6 -4
  99. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  100. package/dist/esm/client/tokens/cs-token.js +46 -0
  101. package/dist/esm/client/tokens/tc-token.js +18 -0
  102. package/dist/esm/crypto/core/index.js +3 -2
  103. package/dist/esm/crypto/core/keys.js +1 -1
  104. package/dist/esm/crypto/core/nonce.js +2 -0
  105. package/dist/esm/crypto/core/primitives.js +0 -7
  106. package/dist/esm/crypto/core/random.js +23 -7
  107. package/dist/esm/crypto/core/xeddsa.js +53 -0
  108. package/dist/esm/crypto/curves/X25519.js +45 -8
  109. package/dist/esm/crypto/curves/constants.js +1 -0
  110. package/dist/esm/crypto/index.js +1 -0
  111. package/dist/esm/crypto/math/constants.js +12 -35
  112. package/dist/esm/crypto/math/edwards.js +174 -47
  113. package/dist/esm/crypto/math/fe.js +691 -0
  114. package/dist/esm/crypto/math/mod.js +10 -1
  115. package/dist/esm/index.js +1 -1
  116. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  117. package/dist/esm/infra/perf/BoundedTaskQueue.js +3 -1
  118. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  119. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  120. package/dist/esm/infra/perf/StoreLock.js +80 -0
  121. package/dist/esm/media/WaMediaCrypto.js +332 -55
  122. package/dist/esm/media/WaMediaTransferClient.js +69 -220
  123. package/dist/esm/media/constants.js +4 -1
  124. package/dist/esm/media/processor.js +1 -0
  125. package/dist/esm/message/WaMessageClient.js +26 -19
  126. package/dist/esm/message/addon-crypto.js +130 -3
  127. package/dist/esm/message/content.js +206 -14
  128. package/dist/esm/message/icdc.js +76 -0
  129. package/dist/esm/message/incoming.js +38 -24
  130. package/dist/esm/message/phash.js +35 -13
  131. package/dist/esm/message/reporting-token.js +17 -30
  132. package/dist/esm/message/use-case-secret.js +1 -1
  133. package/dist/esm/protocol/abprops.js +159 -0
  134. package/dist/esm/protocol/appstate.js +9 -40
  135. package/dist/esm/protocol/browser.js +24 -18
  136. package/dist/esm/protocol/constants.js +8 -4
  137. package/dist/esm/protocol/defaults.js +6 -0
  138. package/dist/esm/protocol/email.js +30 -0
  139. package/dist/esm/protocol/index.js +1 -2
  140. package/dist/esm/protocol/jid.js +142 -39
  141. package/dist/esm/protocol/message.js +61 -1
  142. package/dist/esm/protocol/nodes.js +8 -2
  143. package/dist/esm/protocol/notification.js +9 -1
  144. package/dist/esm/protocol/privacy-token.js +17 -0
  145. package/dist/esm/protocol/privacy.js +55 -0
  146. package/dist/esm/protocol/stream.js +26 -1
  147. package/dist/esm/retry/codec.js +216 -0
  148. package/dist/esm/retry/constants.js +1 -1
  149. package/dist/esm/retry/index.js +2 -2
  150. package/dist/esm/retry/parse.js +50 -30
  151. package/dist/esm/retry/reason.js +1 -1
  152. package/dist/esm/retry/replay.js +11 -7
  153. package/dist/esm/retry/tracker.js +50 -12
  154. package/dist/esm/signal/api/SignalDeviceSyncApi.js +52 -32
  155. package/dist/esm/signal/api/SignalDigestSyncApi.js +21 -15
  156. package/dist/esm/signal/api/SignalIdentitySyncApi.js +30 -15
  157. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +19 -8
  158. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  159. package/dist/esm/signal/api/SignalSessionSyncApi.js +17 -8
  160. package/dist/esm/signal/api/result-map.js +10 -0
  161. package/dist/esm/signal/constants.js +0 -4
  162. package/dist/esm/signal/crypto/WaAdvSignature.js +5 -45
  163. package/dist/esm/signal/crypto/constants.js +0 -4
  164. package/dist/esm/signal/{store/sqlite.js → encoding.js} +40 -29
  165. package/dist/esm/signal/group/SenderKeyChain.js +3 -3
  166. package/dist/esm/signal/group/SenderKeyCodec.js +8 -8
  167. package/dist/esm/signal/group/SenderKeyManager.js +131 -109
  168. package/dist/esm/signal/index.js +1 -0
  169. package/dist/esm/signal/registration/keygen.js +8 -5
  170. package/dist/esm/signal/registration/utils.js +3 -2
  171. package/dist/esm/signal/session/SignalProtocol.js +158 -81
  172. package/dist/esm/signal/session/SignalRatchet.js +21 -10
  173. package/dist/esm/signal/session/SignalSerializer.js +5 -6
  174. package/dist/esm/signal/session/SignalSession.js +11 -9
  175. package/dist/esm/signal/session/resolver.js +140 -105
  176. package/dist/esm/store/contracts/identity.store.js +1 -0
  177. package/dist/esm/store/contracts/message-secret.store.js +1 -0
  178. package/dist/esm/store/contracts/pre-key.store.js +1 -0
  179. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  180. package/dist/esm/store/contracts/session.store.js +1 -0
  181. package/dist/esm/store/createStore.js +143 -193
  182. package/dist/esm/store/index.js +5 -10
  183. package/dist/esm/store/locks/appstate.lock.js +26 -0
  184. package/dist/esm/store/locks/auth.lock.js +15 -0
  185. package/dist/esm/store/locks/contact.lock.js +20 -0
  186. package/dist/esm/store/locks/device-list.lock.js +20 -0
  187. package/dist/esm/store/locks/identity.lock.js +16 -0
  188. package/dist/esm/store/locks/message-secret.lock.js +17 -0
  189. package/dist/esm/store/locks/message.lock.js +21 -0
  190. package/dist/esm/store/locks/participants.lock.js +20 -0
  191. package/dist/esm/store/locks/pre-key.lock.js +27 -0
  192. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  193. package/dist/esm/store/locks/retry.lock.js +29 -0
  194. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  195. package/dist/esm/store/locks/session.lock.js +19 -0
  196. package/dist/esm/store/locks/signal.lock.js +39 -0
  197. package/dist/esm/store/locks/thread.lock.js +21 -0
  198. package/dist/esm/store/noop.store.js +21 -1
  199. package/dist/esm/store/providers/memory/appstate.store.js +22 -24
  200. package/dist/esm/store/providers/memory/device-list.store.js +13 -5
  201. package/dist/esm/store/providers/memory/identity.store.js +31 -0
  202. package/dist/esm/store/providers/memory/message-secret.store.js +81 -0
  203. package/dist/esm/store/providers/memory/participants.store.js +3 -0
  204. package/dist/esm/store/providers/memory/pre-key.store.js +97 -0
  205. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  206. package/dist/esm/store/providers/memory/retry.store.js +99 -10
  207. package/dist/esm/store/providers/memory/sender-key.store.js +6 -1
  208. package/dist/esm/store/providers/memory/session.store.js +45 -0
  209. package/dist/esm/store/providers/memory/signal.store.js +1 -147
  210. package/dist/esm/transport/WaComms.js +7 -4
  211. package/dist/esm/transport/WaWebSocket.js +9 -7
  212. package/dist/esm/transport/binary/constants.js +0 -30
  213. package/dist/esm/transport/binary/decoder.js +4 -4
  214. package/dist/esm/transport/binary/encoder.js +8 -15
  215. package/dist/esm/transport/binary/index.js +0 -1
  216. package/dist/esm/transport/index.js +6 -0
  217. package/dist/esm/transport/keepalive/WaKeepAlive.js +17 -8
  218. package/dist/esm/transport/node/WaMobileTcpSocket.js +114 -0
  219. package/dist/esm/transport/node/WaNodeOrchestrator.js +37 -22
  220. package/dist/esm/transport/node/builders/abprops.js +20 -0
  221. package/dist/esm/transport/node/builders/business.js +129 -0
  222. package/dist/esm/transport/node/builders/device.js +11 -0
  223. package/dist/esm/transport/node/builders/email.js +65 -0
  224. package/dist/esm/transport/node/builders/global.js +370 -0
  225. package/dist/esm/transport/node/builders/message.js +63 -239
  226. package/dist/esm/transport/node/builders/offline.js +14 -0
  227. package/dist/esm/transport/node/builders/pairing.js +0 -24
  228. package/dist/esm/transport/node/builders/prekeys.js +37 -40
  229. package/dist/esm/transport/node/builders/presence.js +13 -0
  230. package/dist/esm/transport/node/builders/privacy-token.js +37 -0
  231. package/dist/esm/transport/node/builders/privacy.js +48 -0
  232. package/dist/esm/transport/node/builders/profile.js +70 -0
  233. package/dist/esm/transport/node/builders/retry.js +11 -23
  234. package/dist/esm/transport/node/builders/usync.js +6 -2
  235. package/dist/esm/transport/node/helpers.js +43 -1
  236. package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
  237. package/dist/esm/transport/node/mex/client.js +83 -0
  238. package/dist/esm/transport/node/mex/persist-ids.js +10 -0
  239. package/dist/esm/transport/node/usync.js +3 -33
  240. package/dist/esm/transport/node/xml.js +35 -14
  241. package/dist/esm/transport/noise/WaClientPayload.js +24 -19
  242. package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
  243. package/dist/esm/transport/noise/WaMobileClientPayload.js +53 -0
  244. package/dist/esm/transport/noise/WaNoiseCert.js +9 -27
  245. package/dist/esm/transport/noise/WaNoiseSession.js +76 -34
  246. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  247. package/dist/esm/transport/stream/parse.js +8 -4
  248. package/dist/esm/util/bytes.js +22 -18
  249. package/dist/esm/util/index.js +5 -0
  250. package/dist/esm/util/primitives.js +3 -2
  251. package/dist/index.js +7 -1
  252. package/dist/infra/perf/BackgroundQueue.js +482 -0
  253. package/dist/infra/perf/BoundedTaskQueue.js +3 -1
  254. package/dist/infra/perf/PromiseDedup.js +24 -0
  255. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  256. package/dist/infra/perf/StoreLock.js +84 -0
  257. package/dist/media/WaMediaCrypto.js +328 -51
  258. package/dist/media/WaMediaTransferClient.js +72 -253
  259. package/dist/media/constants.js +5 -2
  260. package/dist/media/processor.js +2 -0
  261. package/dist/message/WaMessageClient.js +26 -19
  262. package/dist/message/addon-crypto.js +131 -0
  263. package/dist/message/content.js +211 -14
  264. package/dist/message/icdc.js +81 -0
  265. package/dist/message/incoming.js +38 -24
  266. package/dist/message/phash.js +35 -13
  267. package/dist/message/reporting-token.js +16 -30
  268. package/dist/message/use-case-secret.js +1 -1
  269. package/dist/protocol/abprops.js +163 -0
  270. package/dist/protocol/appstate.js +10 -41
  271. package/dist/protocol/browser.js +25 -18
  272. package/dist/protocol/constants.js +33 -2
  273. package/dist/protocol/defaults.js +6 -0
  274. package/dist/protocol/email.js +33 -0
  275. package/dist/protocol/index.js +8 -5
  276. package/dist/protocol/jid.js +149 -39
  277. package/dist/protocol/message.js +62 -2
  278. package/dist/protocol/nodes.js +8 -2
  279. package/dist/protocol/notification.js +10 -2
  280. package/dist/protocol/privacy-token.js +20 -0
  281. package/dist/protocol/privacy.js +58 -0
  282. package/dist/protocol/stream.js +27 -2
  283. package/dist/retry/codec.js +220 -0
  284. package/dist/retry/constants.js +1 -1
  285. package/dist/retry/index.js +5 -5
  286. package/dist/retry/parse.js +51 -30
  287. package/dist/retry/reason.js +1 -1
  288. package/dist/retry/replay.js +10 -6
  289. package/dist/retry/tracker.js +50 -12
  290. package/dist/signal/api/SignalDeviceSyncApi.js +51 -31
  291. package/dist/signal/api/SignalDigestSyncApi.js +21 -15
  292. package/dist/signal/api/SignalIdentitySyncApi.js +29 -14
  293. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +17 -6
  294. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  295. package/dist/signal/api/SignalSessionSyncApi.js +16 -7
  296. package/dist/signal/api/result-map.js +13 -0
  297. package/dist/signal/constants.js +1 -5
  298. package/dist/signal/crypto/WaAdvSignature.js +2 -44
  299. package/dist/signal/crypto/constants.js +1 -5
  300. package/dist/signal/{store/sqlite.js → encoding.js} +41 -25
  301. package/dist/signal/group/SenderKeyChain.js +2 -2
  302. package/dist/signal/group/SenderKeyCodec.js +8 -8
  303. package/dist/signal/group/SenderKeyManager.js +130 -108
  304. package/dist/signal/index.js +13 -1
  305. package/dist/signal/registration/keygen.js +7 -4
  306. package/dist/signal/registration/utils.js +3 -2
  307. package/dist/signal/session/SignalProtocol.js +158 -81
  308. package/dist/signal/session/SignalRatchet.js +19 -8
  309. package/dist/signal/session/SignalSerializer.js +5 -6
  310. package/dist/signal/session/SignalSession.js +11 -9
  311. package/dist/signal/session/resolver.js +138 -103
  312. package/dist/store/contracts/identity.store.js +2 -0
  313. package/dist/store/contracts/message-secret.store.js +2 -0
  314. package/dist/store/contracts/pre-key.store.js +2 -0
  315. package/dist/store/contracts/privacy-token.store.js +2 -0
  316. package/dist/store/contracts/session.store.js +2 -0
  317. package/dist/store/createStore.js +142 -192
  318. package/dist/store/index.js +23 -33
  319. package/dist/store/locks/appstate.lock.js +29 -0
  320. package/dist/store/locks/auth.lock.js +18 -0
  321. package/dist/store/locks/contact.lock.js +23 -0
  322. package/dist/store/locks/device-list.lock.js +23 -0
  323. package/dist/store/locks/identity.lock.js +19 -0
  324. package/dist/store/locks/message-secret.lock.js +20 -0
  325. package/dist/store/locks/message.lock.js +24 -0
  326. package/dist/store/locks/participants.lock.js +23 -0
  327. package/dist/store/locks/pre-key.lock.js +30 -0
  328. package/dist/store/locks/privacy-token.lock.js +21 -0
  329. package/dist/store/locks/retry.lock.js +32 -0
  330. package/dist/store/locks/sender-key.lock.js +55 -0
  331. package/dist/store/locks/session.lock.js +22 -0
  332. package/dist/store/locks/signal.lock.js +42 -0
  333. package/dist/store/locks/thread.lock.js +24 -0
  334. package/dist/store/noop.store.js +22 -2
  335. package/dist/store/providers/memory/appstate.store.js +22 -24
  336. package/dist/store/providers/memory/device-list.store.js +13 -5
  337. package/dist/store/providers/memory/identity.store.js +35 -0
  338. package/dist/store/providers/memory/message-secret.store.js +85 -0
  339. package/dist/store/providers/memory/participants.store.js +3 -0
  340. package/dist/store/providers/memory/pre-key.store.js +101 -0
  341. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  342. package/dist/store/providers/memory/retry.store.js +98 -9
  343. package/dist/store/providers/memory/sender-key.store.js +6 -1
  344. package/dist/store/providers/memory/session.store.js +49 -0
  345. package/dist/store/providers/memory/signal.store.js +1 -147
  346. package/dist/transport/WaComms.js +7 -4
  347. package/dist/transport/WaWebSocket.js +9 -7
  348. package/dist/transport/binary/constants.js +1 -31
  349. package/dist/transport/binary/decoder.js +4 -4
  350. package/dist/transport/binary/encoder.js +8 -15
  351. package/dist/transport/binary/index.js +0 -4
  352. package/dist/transport/index.js +17 -1
  353. package/dist/transport/keepalive/WaKeepAlive.js +17 -8
  354. package/dist/transport/node/WaMobileTcpSocket.js +118 -0
  355. package/dist/transport/node/WaNodeOrchestrator.js +36 -21
  356. package/dist/transport/node/builders/abprops.js +23 -0
  357. package/dist/transport/node/builders/business.js +137 -0
  358. package/dist/transport/node/builders/device.js +14 -0
  359. package/dist/transport/node/builders/email.js +72 -0
  360. package/dist/transport/node/builders/global.js +375 -0
  361. package/dist/transport/node/builders/message.js +64 -245
  362. package/dist/transport/node/builders/offline.js +17 -0
  363. package/dist/transport/node/builders/pairing.js +0 -26
  364. package/dist/transport/node/builders/prekeys.js +36 -39
  365. package/dist/transport/node/builders/presence.js +16 -0
  366. package/dist/transport/node/builders/privacy-token.js +42 -0
  367. package/dist/transport/node/builders/privacy.js +55 -0
  368. package/dist/transport/node/builders/profile.js +78 -0
  369. package/dist/transport/node/builders/retry.js +10 -22
  370. package/dist/transport/node/builders/usync.js +6 -2
  371. package/dist/transport/node/helpers.js +46 -1
  372. package/dist/transport/node/mex/argo-decoder.js +189 -0
  373. package/dist/transport/node/mex/client.js +86 -0
  374. package/dist/transport/node/mex/persist-ids.js +13 -0
  375. package/dist/transport/node/usync.js +2 -32
  376. package/dist/transport/node/xml.js +35 -14
  377. package/dist/transport/noise/WaClientPayload.js +26 -21
  378. package/dist/transport/noise/WaFrameCodec.js +1 -1
  379. package/dist/transport/noise/WaMobileClientPayload.js +56 -0
  380. package/dist/transport/noise/WaNoiseCert.js +8 -26
  381. package/dist/transport/noise/WaNoiseSession.js +75 -33
  382. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  383. package/dist/transport/stream/parse.js +7 -3
  384. package/dist/types/appstate/WaAppStateCrypto.d.ts +11 -8
  385. package/dist/types/appstate/WaAppStateSyncClient.d.ts +6 -2
  386. package/dist/types/appstate/encoding.d.ts +7 -0
  387. package/dist/types/appstate/index.d.ts +3 -3
  388. package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → response-parser.d.ts} +1 -1
  389. package/dist/types/appstate/types.d.ts +1 -1
  390. package/dist/types/appstate/utils.d.ts +0 -2
  391. package/dist/types/auth/WaAuthClient.d.ts +9 -3
  392. package/dist/types/auth/credentials-flow.d.ts +20 -0
  393. package/dist/types/auth/index.d.ts +0 -2
  394. package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
  395. package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +6 -1
  396. package/dist/types/auth/types.d.ts +41 -0
  397. package/dist/types/client/WaClient.d.ts +44 -18
  398. package/dist/types/client/WaClientFactory.d.ts +22 -8
  399. package/dist/types/client/connection/WaConnectionManager.d.ts +2 -0
  400. package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
  401. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  402. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +24 -0
  403. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +9 -2
  404. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -2
  405. package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
  406. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +16 -1
  407. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  408. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +38 -0
  409. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +12 -0
  410. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  411. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +55 -0
  412. package/dist/types/client/dirty.d.ts +3 -1
  413. package/dist/types/client/events/abprops.d.ts +14 -0
  414. package/dist/types/client/events/devices.d.ts +20 -0
  415. package/dist/types/client/events/identity.d.ts +9 -0
  416. package/dist/types/client/events/privacy-token.d.ts +7 -0
  417. package/dist/types/client/events/registration.d.ts +17 -0
  418. package/dist/types/client/history-sync.d.ts +9 -6
  419. package/dist/types/client/incoming.d.ts +9 -2
  420. package/dist/types/client/index.d.ts +1 -1
  421. package/dist/types/client/mailbox.d.ts +5 -5
  422. package/dist/types/client/media.d.ts +31 -0
  423. package/dist/types/client/messages.d.ts +3 -2
  424. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  425. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  426. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  427. package/dist/types/client/types.d.ts +151 -4
  428. package/dist/types/crypto/core/index.d.ts +3 -2
  429. package/dist/types/crypto/core/nonce.d.ts +2 -0
  430. package/dist/types/crypto/core/primitives.d.ts +1 -2
  431. package/dist/types/crypto/core/random.d.ts +2 -1
  432. package/dist/types/crypto/core/xeddsa.d.ts +2 -0
  433. package/dist/types/crypto/curves/constants.d.ts +1 -0
  434. package/dist/types/crypto/index.d.ts +2 -0
  435. package/dist/types/crypto/math/constants.d.ts +4 -2
  436. package/dist/types/crypto/math/fe.d.ts +30 -0
  437. package/dist/types/crypto/math/mod.d.ts +0 -2
  438. package/dist/types/crypto/math/types.d.ts +11 -4
  439. package/dist/types/index.d.ts +6 -3
  440. package/dist/types/infra/log/ConsoleLogger.d.ts +1 -1
  441. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  442. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  443. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  444. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  445. package/dist/types/infra/perf/StoreLock.d.ts +11 -0
  446. package/dist/types/media/WaMediaCrypto.d.ts +16 -6
  447. package/dist/types/media/WaMediaTransferClient.d.ts +6 -23
  448. package/dist/types/media/constants.d.ts +3 -1
  449. package/dist/types/media/index.d.ts +2 -1
  450. package/dist/types/media/processor.d.ts +28 -0
  451. package/dist/types/media/types.d.ts +19 -5
  452. package/dist/types/message/addon-crypto.d.ts +34 -3
  453. package/dist/types/message/content.d.ts +11 -1
  454. package/dist/types/message/icdc.d.ts +13 -0
  455. package/dist/types/message/reporting-token.d.ts +0 -1
  456. package/dist/types/message/types.d.ts +42 -11
  457. package/dist/types/protocol/abprops.d.ts +142 -0
  458. package/dist/types/protocol/appstate.d.ts +0 -11
  459. package/dist/types/protocol/browser.d.ts +1 -0
  460. package/dist/types/protocol/constants.d.ts +12 -4
  461. package/dist/types/protocol/defaults.d.ts +6 -0
  462. package/dist/types/protocol/email.d.ts +32 -0
  463. package/dist/types/protocol/index.d.ts +1 -2
  464. package/dist/types/protocol/jid.d.ts +20 -2
  465. package/dist/types/protocol/message.d.ts +60 -0
  466. package/dist/types/protocol/nodes.d.ts +6 -0
  467. package/dist/types/protocol/notification.d.ts +8 -0
  468. package/dist/types/protocol/privacy-token.d.ts +17 -0
  469. package/dist/types/protocol/privacy.d.ts +75 -0
  470. package/dist/types/protocol/stream.d.ts +31 -0
  471. package/dist/types/retry/codec.d.ts +3 -0
  472. package/dist/types/retry/index.d.ts +3 -3
  473. package/dist/types/retry/parse.d.ts +5 -2
  474. package/dist/types/retry/reason.d.ts +1 -1
  475. package/dist/types/retry/tracker.d.ts +1 -0
  476. package/dist/types/retry/types.d.ts +6 -1
  477. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +2 -1
  478. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +9 -0
  479. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +5 -3
  480. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  481. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  482. package/dist/types/signal/api/result-map.d.ts +1 -0
  483. package/dist/types/signal/constants.d.ts +0 -3
  484. package/dist/types/signal/crypto/WaAdvSignature.d.ts +0 -2
  485. package/dist/types/signal/crypto/constants.d.ts +0 -1
  486. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +9 -3
  487. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  488. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -7
  489. package/dist/types/signal/index.d.ts +2 -0
  490. package/dist/types/signal/registration/utils.d.ts +2 -1
  491. package/dist/types/signal/session/SignalProtocol.d.ts +21 -6
  492. package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
  493. package/dist/types/signal/session/resolver.d.ts +11 -4
  494. package/dist/types/signal/types.d.ts +16 -4
  495. package/dist/types/store/contracts/appstate.store.d.ts +1 -1
  496. package/dist/types/store/contracts/identity.store.d.ts +11 -0
  497. package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
  498. package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
  499. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  500. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  501. package/dist/types/store/contracts/session.store.d.ts +14 -0
  502. package/dist/types/store/contracts/signal.store.d.ts +1 -27
  503. package/dist/types/store/createStore.d.ts +1 -1
  504. package/dist/types/store/index.d.ts +12 -12
  505. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  506. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  507. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  508. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  509. package/dist/types/store/locks/identity.lock.d.ts +3 -0
  510. package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
  511. package/dist/types/store/locks/message.lock.d.ts +3 -0
  512. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  513. package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
  514. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  515. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  516. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  517. package/dist/types/store/locks/session.lock.d.ts +3 -0
  518. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  519. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  520. package/dist/types/store/noop.store.d.ts +4 -0
  521. package/dist/types/store/providers/memory/appstate.store.d.ts +1 -1
  522. package/dist/types/store/providers/memory/identity.store.d.ts +18 -0
  523. package/dist/types/store/providers/memory/message-secret.store.d.ts +21 -0
  524. package/dist/types/store/providers/memory/pre-key.store.d.ts +23 -0
  525. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  526. package/dist/types/store/providers/memory/retry.store.d.ts +15 -1
  527. package/dist/types/store/providers/memory/session.store.d.ts +21 -0
  528. package/dist/types/store/providers/memory/signal.store.d.ts +2 -43
  529. package/dist/types/store/providers/memory/thread.store.d.ts +1 -1
  530. package/dist/types/store/types.d.ts +69 -61
  531. package/dist/types/transport/WaWebSocket.d.ts +1 -1
  532. package/dist/types/transport/binary/constants.d.ts +0 -30
  533. package/dist/types/transport/binary/index.d.ts +0 -1
  534. package/dist/types/transport/index.d.ts +8 -1
  535. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +4 -1
  536. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +18 -0
  537. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +9 -6
  538. package/dist/types/transport/node/builders/abprops.d.ts +5 -0
  539. package/dist/types/transport/node/builders/business.d.ts +29 -0
  540. package/dist/types/transport/node/builders/device.d.ts +2 -0
  541. package/dist/types/transport/node/builders/email.d.ts +11 -0
  542. package/dist/types/transport/node/builders/global.d.ts +102 -0
  543. package/dist/types/transport/node/builders/message.d.ts +8 -7
  544. package/dist/types/transport/node/builders/offline.d.ts +2 -0
  545. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  546. package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
  547. package/dist/types/transport/node/builders/presence.d.ts +6 -0
  548. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  549. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  550. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  551. package/dist/types/transport/node/builders/retry.d.ts +0 -1
  552. package/dist/types/transport/node/helpers.d.ts +8 -0
  553. package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
  554. package/dist/types/transport/node/mex/client.d.ts +18 -0
  555. package/dist/types/transport/node/mex/persist-ids.d.ts +14 -0
  556. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +29 -0
  557. package/dist/types/transport/noise/WaNoiseCert.d.ts +7 -1
  558. package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
  559. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  560. package/dist/types/transport/types.d.ts +8 -0
  561. package/dist/types/util/bytes.d.ts +1 -1
  562. package/dist/types/util/index.d.ts +5 -0
  563. package/dist/types/util/primitives.d.ts +0 -1
  564. package/dist/util/bytes.js +22 -18
  565. package/dist/util/index.js +23 -0
  566. package/dist/util/primitives.js +2 -2
  567. package/package.json +34 -10
  568. package/proto/index.js +1 -1
  569. package/dist/auth/flow/WaAuthCredentialsFlow.js +0 -130
  570. package/dist/auth/pairing/constants.js +0 -5
  571. package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
  572. package/dist/crypto/core/constants.js +0 -4
  573. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
  574. package/dist/esm/auth/pairing/constants.js +0 -2
  575. package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
  576. package/dist/esm/crypto/core/constants.js +0 -1
  577. package/dist/esm/retry/outbound.js +0 -82
  578. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  579. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -250
  580. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  581. package/dist/esm/store/providers/sqlite/connection.js +0 -245
  582. package/dist/esm/store/providers/sqlite/contact.store.js +0 -74
  583. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -127
  584. package/dist/esm/store/providers/sqlite/message.store.js +0 -132
  585. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  586. package/dist/esm/store/providers/sqlite/participants.store.js +0 -77
  587. package/dist/esm/store/providers/sqlite/retry.store.js +0 -141
  588. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -198
  589. package/dist/esm/store/providers/sqlite/signal.store.js +0 -435
  590. package/dist/esm/store/providers/sqlite/table-names.js +0 -107
  591. package/dist/esm/store/providers/sqlite/thread.store.js +0 -85
  592. package/dist/esm/transport/node/builders/index.js +0 -8
  593. package/dist/retry/outbound.js +0 -87
  594. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  595. package/dist/store/providers/sqlite/appstate.store.js +0 -254
  596. package/dist/store/providers/sqlite/auth.store.js +0 -180
  597. package/dist/store/providers/sqlite/connection.js +0 -281
  598. package/dist/store/providers/sqlite/contact.store.js +0 -78
  599. package/dist/store/providers/sqlite/device-list.store.js +0 -131
  600. package/dist/store/providers/sqlite/message.store.js +0 -136
  601. package/dist/store/providers/sqlite/migrations.js +0 -350
  602. package/dist/store/providers/sqlite/participants.store.js +0 -81
  603. package/dist/store/providers/sqlite/retry.store.js +0 -145
  604. package/dist/store/providers/sqlite/sender-key.store.js +0 -202
  605. package/dist/store/providers/sqlite/signal.store.js +0 -439
  606. package/dist/store/providers/sqlite/table-names.js +0 -113
  607. package/dist/store/providers/sqlite/thread.store.js +0 -89
  608. package/dist/transport/node/builders/index.js +0 -42
  609. package/dist/types/appstate/store/sqlite.d.ts +0 -7
  610. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
  611. package/dist/types/auth/pairing/constants.d.ts +0 -2
  612. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
  613. package/dist/types/crypto/core/constants.d.ts +0 -1
  614. package/dist/types/retry/outbound.d.ts +0 -4
  615. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  616. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -17
  617. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  618. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  619. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -12
  620. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -15
  621. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -13
  622. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  623. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -12
  624. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -15
  625. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -24
  626. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -53
  627. package/dist/types/store/providers/sqlite/table-names.d.ts +0 -5
  628. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -13
  629. package/dist/types/transport/node/builders/index.d.ts +0 -8
  630. /package/dist/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +0 -0
@@ -1,7 +1,10 @@
1
1
  import type { AppStateCollectionName } from '../appstate/types';
2
- import type { WaAuthClientOptions, WaAuthCredentials, WaAuthSocketOptions } from '../auth/types';
2
+ import type { WaAuthClientOptions, WaAuthCredentials, WaAuthDangerousOptions, WaAuthSocketOptions } from '../auth/types';
3
+ import type { WaMediaProcessor } from '../media/processor';
4
+ import type { WaDecodedAddon } from '../message/addon-crypto';
3
5
  import type { WaMessagePublishOptions } from '../message/types';
4
6
  import type { Proto } from '..';
7
+ import type { WaConnectionCode, WaConnectionOpenReason, WaDisconnectReason } from '../protocol/stream';
5
8
  import type { WaStore } from '../store/types';
6
9
  import type { BinaryNode, WaProxyTransport } from '../transport/types';
7
10
  export interface WaClientProxyOptions {
@@ -9,6 +12,23 @@ export interface WaClientProxyOptions {
9
12
  readonly mediaUpload?: WaProxyTransport;
10
13
  readonly mediaDownload?: WaProxyTransport;
11
14
  }
15
+ export interface WaLogoutStoreClearOptions {
16
+ readonly auth?: boolean;
17
+ readonly signal?: boolean;
18
+ readonly preKey?: boolean;
19
+ readonly session?: boolean;
20
+ readonly identity?: boolean;
21
+ readonly senderKey?: boolean;
22
+ readonly appState?: boolean;
23
+ readonly retry?: boolean;
24
+ readonly participants?: boolean;
25
+ readonly deviceList?: boolean;
26
+ readonly messages?: boolean;
27
+ readonly messageSecret?: boolean;
28
+ readonly threads?: boolean;
29
+ readonly contacts?: boolean;
30
+ readonly privacyToken?: boolean;
31
+ }
12
32
  export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOptions {
13
33
  readonly store: WaStore;
14
34
  readonly sessionId: string;
@@ -24,10 +44,88 @@ export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOption
24
44
  readonly messageAckTimeoutMs?: number;
25
45
  readonly messageMaxAttempts?: number;
26
46
  readonly messageRetryDelayMs?: number;
47
+ readonly writeBehind?: WaWriteBehindOptions;
27
48
  readonly history?: WaHistorySyncOptions;
28
49
  readonly chatEvents?: {
29
50
  readonly emitSnapshotMutations?: boolean;
30
51
  };
52
+ readonly privacyToken?: WaPrivacyTokenOptions;
53
+ readonly addons?: WaAddonOptions;
54
+ readonly logoutStoreClear?: WaLogoutStoreClearOptions;
55
+ readonly media?: WaMediaOptions;
56
+ /**
57
+ * Test-only overrides intended for running against a fake server.
58
+ *
59
+ * These hooks **do not** bypass any security checks — they only swap in
60
+ * test fixtures (e.g. a different root CA) so the full verification code
61
+ * path still runs end-to-end. If you actually need to skip a check, use
62
+ * `dangerous` instead.
63
+ */
64
+ readonly testHooks?: WaClientTestHooks;
65
+ /**
66
+ * Dangerous escape hatches. **Do not enable in production.** Each flag here
67
+ * disables a security check the production code path enforces.
68
+ */
69
+ readonly dangerous?: WaClientDangerousOptions;
70
+ }
71
+ export interface WaClientDangerousOptions extends WaAuthDangerousOptions {
72
+ /**
73
+ * Skip the XEdDSA signature check on incoming group sender-key messages.
74
+ * Ciphertexts will be decrypted even if the trailing signature does not
75
+ * verify against the stored sender signing public key.
76
+ */
77
+ readonly disableSenderKeySignatureVerification?: boolean;
78
+ /**
79
+ * Skip HMAC verification across the app-state sync pipeline: per-mutation
80
+ * value and index MACs, snapshot MACs, and patch MACs. Tampered server
81
+ * payloads will be accepted as long as the ciphertext decrypts cleanly.
82
+ */
83
+ readonly disableAppStateMacVerification?: boolean;
84
+ /**
85
+ * Skip the truncated HMAC-SHA256 check on encrypted media payloads
86
+ * during download. Tampered ciphertexts will still be decrypted.
87
+ */
88
+ readonly disableMediaMacVerification?: boolean;
89
+ }
90
+ export interface WaClientTestHooks {
91
+ /**
92
+ * Override the noise certificate-chain root CA used to verify the
93
+ * server's static key during the handshake.
94
+ *
95
+ * The default is the production WhatsApp root. Tests against a fake
96
+ * server inject the fake server's ephemeral root here so that the lib
97
+ * still runs the full certificate-verification code path against a
98
+ * chain signed by a known key — no validation logic is bypassed.
99
+ */
100
+ readonly noiseRootCa?: WaNoiseRootCaOverride;
101
+ }
102
+ export interface WaNoiseRootCaOverride {
103
+ /** Serialized X25519 public key (32 bytes raw, no version prefix). */
104
+ readonly publicKey: Uint8Array;
105
+ /** Serial number that intermediate certificates issued by this root must declare. */
106
+ readonly serial: number;
107
+ }
108
+ export interface WaMediaOptions {
109
+ readonly processor?: WaMediaProcessor;
110
+ readonly generateThumbnail?: boolean;
111
+ readonly generateProbe?: boolean;
112
+ readonly generateWaveform?: boolean;
113
+ readonly generateStickerThumbnail?: boolean;
114
+ }
115
+ export interface WaAddonOptions {
116
+ readonly autoDecrypt?: boolean;
117
+ }
118
+ export interface WaPrivacyTokenOptions {
119
+ readonly tcTokenDurationS?: number;
120
+ readonly tcTokenNumBuckets?: number;
121
+ readonly tcTokenSenderDurationS?: number;
122
+ readonly tcTokenSenderNumBuckets?: number;
123
+ readonly tcTokenMaxDurationS?: number;
124
+ }
125
+ export interface WaWriteBehindOptions {
126
+ readonly maxPendingKeys?: number;
127
+ readonly maxWriteConcurrency?: number;
128
+ readonly flushTimeoutMs?: number;
31
129
  }
32
130
  export interface WaHistorySyncOptions {
33
131
  readonly enabled?: boolean;
@@ -47,6 +145,7 @@ export interface WaSignalMessagePublishInput {
47
145
  export interface WaSendMessageOptions extends WaMessagePublishOptions {
48
146
  readonly id?: string;
49
147
  readonly expectedIdentity?: Uint8Array;
148
+ readonly subtype?: string;
50
149
  }
51
150
  export interface WaClearChatOptions {
52
151
  readonly deleteStarred?: boolean;
@@ -106,6 +205,26 @@ export interface WaIncomingNotificationEvent extends WaIncomingBaseEvent {
106
205
  readonly classification?: 'core' | 'out_of_scope' | 'unknown' | 'info_bulletin';
107
206
  readonly details?: Readonly<Record<string, unknown>>;
108
207
  }
208
+ export interface WaRegistrationCodeEvent extends WaIncomingBaseEvent {
209
+ readonly code: string;
210
+ readonly expiryTimestampMs: number;
211
+ readonly fromDeviceId: string;
212
+ }
213
+ export interface WaAccountTakeoverNoticeEvent extends WaIncomingBaseEvent {
214
+ readonly serverToken: string;
215
+ readonly attemptTimestampMs: number;
216
+ readonly newDeviceName?: string;
217
+ readonly newDevicePlatform?: string;
218
+ readonly newDeviceAppVersion?: string;
219
+ }
220
+ export type WaAddonKind = 'reaction' | 'poll_vote' | 'event_response' | 'comment';
221
+ export interface WaIncomingAddonEvent extends WaIncomingBaseEvent {
222
+ readonly kind: WaAddonKind;
223
+ readonly targetMessageId: string;
224
+ readonly senderJid: string;
225
+ readonly decrypted: WaDecodedAddon;
226
+ readonly raw: Proto.IMessage;
227
+ }
109
228
  export interface WaIncomingFailureEvent extends WaIncomingBaseEvent {
110
229
  readonly failureReason?: number;
111
230
  readonly failureCode?: number;
@@ -201,7 +320,19 @@ export interface WaChatEvent {
201
320
  readonly locked?: boolean;
202
321
  readonly deviceAgentId?: string;
203
322
  }
204
- export type WaEmptyEvent = Readonly<Record<string, never>>;
323
+ export type WaConnectionEvent = {
324
+ readonly status: 'open';
325
+ readonly reason: WaConnectionOpenReason;
326
+ readonly code: null;
327
+ readonly isLogout: false;
328
+ readonly isNewLogin: boolean;
329
+ } | {
330
+ readonly status: 'close';
331
+ readonly reason: WaDisconnectReason;
332
+ readonly code: WaConnectionCode | null;
333
+ readonly isLogout: boolean;
334
+ readonly isNewLogin: false;
335
+ };
205
336
  export interface WaClientEventMap {
206
337
  readonly auth_qr: (event: {
207
338
  readonly qr: string;
@@ -222,8 +353,7 @@ export interface WaClientEventMap {
222
353
  readonly client_error: (event: {
223
354
  readonly error: Error;
224
355
  }) => void;
225
- readonly connection_open: (event: WaEmptyEvent) => void;
226
- readonly connection_close: (event: WaEmptyEvent) => void;
356
+ readonly connection: (event: WaConnectionEvent) => void;
227
357
  readonly transport_frame_in: (event: {
228
358
  readonly frame: Uint8Array;
229
359
  }) => void;
@@ -243,16 +373,33 @@ export interface WaClientEventMap {
243
373
  readonly frame: Uint8Array;
244
374
  }) => void;
245
375
  readonly message: (event: WaIncomingMessageEvent) => void;
376
+ readonly message_addon: (event: WaIncomingAddonEvent) => void;
246
377
  readonly message_protocol: (event: WaIncomingProtocolMessageEvent) => void;
247
378
  readonly message_receipt: (event: WaIncomingReceiptEvent) => void;
248
379
  readonly presence: (event: WaIncomingPresenceEvent) => void;
249
380
  readonly chatstate: (event: WaIncomingChatstateEvent) => void;
250
381
  readonly call: (event: WaIncomingCallEvent) => void;
251
382
  readonly notification: (event: WaIncomingNotificationEvent) => void;
383
+ readonly registration_code_received: (event: WaRegistrationCodeEvent) => void;
384
+ readonly account_takeover_notice: (event: WaAccountTakeoverNoticeEvent) => void;
252
385
  readonly failure: (event: WaIncomingFailureEvent) => void;
253
386
  readonly stanza_error: (event: WaIncomingBaseEvent) => void;
254
387
  readonly stanza_unhandled: (event: WaIncomingUnhandledStanzaEvent) => void;
255
388
  readonly group_event: (event: WaGroupEvent) => void;
256
389
  readonly chat_event: (event: WaChatEvent) => void;
257
390
  readonly history_sync_chunk: (event: WaHistorySyncChunkEvent) => void;
391
+ readonly privacy_token_update: (event: WaPrivacyTokenUpdateEvent) => void;
392
+ readonly offline_resume: (event: WaOfflineResumeEvent) => void;
393
+ }
394
+ export interface WaOfflineResumeEvent {
395
+ readonly status: 'resuming' | 'complete';
396
+ readonly totalStanzas: number;
397
+ readonly remainingStanzas: number;
398
+ readonly forced: boolean;
399
+ }
400
+ export interface WaPrivacyTokenUpdateEvent {
401
+ readonly jid: string;
402
+ readonly timestampS: number;
403
+ readonly type: string;
404
+ readonly source: 'notification' | 'history_sync';
258
405
  }
@@ -6,5 +6,6 @@ export { X25519 } from '../curves/X25519';
6
6
  export { hkdf, hkdfSplit } from '../core/hkdf';
7
7
  export { toSerializedPubKey, toRawPubKey, prependVersion, readVersionedContent } from '../core/keys';
8
8
  export { buildNonce } from '../core/nonce';
9
- export { randomBytesAsync, randomIntAsync } from '../core/random';
10
- export { type CryptoKey, sha1, sha256, sha512, importAesGcmKey, aesGcmEncrypt, aesGcmDecrypt, importAesCbcKey, aesCbcEncrypt, aesCbcDecrypt, importHmacKey, importHmacSha512Key, hmacSign, pbkdf2DeriveAesCtrKey, aesCtrEncrypt, aesCtrDecrypt, ed25519VerifyRaw } from '../core/primitives';
9
+ export { randomBytesAsync, randomFillAsync, randomIntAsync } from '../core/random';
10
+ export { type CryptoKey, sha1, sha256, sha512, importAesGcmKey, aesGcmEncrypt, aesGcmDecrypt, importAesCbcKey, aesCbcEncrypt, aesCbcDecrypt, importHmacKey, importHmacSha512Key, hmacSign, pbkdf2DeriveAesCtrKey, aesCtrEncrypt, aesCtrDecrypt } from '../core/primitives';
11
+ export { xeddsaSign, xeddsaVerify } from '../core/xeddsa';
@@ -1,5 +1,7 @@
1
1
  /**
2
2
  * Builds a 12-byte nonce for AES-GCM encryption with counter in the last 4 bytes.
3
+ * Allocates a new buffer per call because concurrent Noise encrypt/decrypt operations
4
+ * may hold references to different nonces simultaneously.
3
5
  * Throws if counter exceeds uint32 range to prevent nonce reuse.
4
6
  */
5
7
  export declare function buildNonce(counter: number): Uint8Array;
@@ -9,7 +9,7 @@ export type CryptoKey = webcrypto.CryptoKey;
9
9
  export declare function sha256(value: Uint8Array): Promise<Uint8Array>;
10
10
  export declare function sha1(value: Uint8Array): Promise<Uint8Array>;
11
11
  export declare function sha512(value: Uint8Array): Promise<Uint8Array>;
12
- export declare function md5Bytes(input: string): Uint8Array;
12
+ export declare function md5Bytes(input: string | Uint8Array): Uint8Array;
13
13
  export declare function importAesGcmKey(raw: Uint8Array, usages: ('encrypt' | 'decrypt')[]): Promise<webcrypto.CryptoKey>;
14
14
  export declare function aesGcmEncrypt(key: webcrypto.CryptoKey, nonce: Uint8Array, plaintext: Uint8Array, aad?: Uint8Array): Promise<Uint8Array>;
15
15
  export declare function aesGcmDecrypt(key: webcrypto.CryptoKey, nonce: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array): Promise<Uint8Array>;
@@ -22,4 +22,3 @@ export declare function hmacSign(key: webcrypto.CryptoKey, data: Uint8Array): Pr
22
22
  export declare function pbkdf2DeriveAesCtrKey(password: Uint8Array, salt: Uint8Array, iterations: number): Promise<CryptoKey>;
23
23
  export declare function aesCtrEncrypt(key: CryptoKey, counter: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
24
24
  export declare function aesCtrDecrypt(key: CryptoKey, counter: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
25
- export declare function ed25519VerifyRaw(publicKey: Uint8Array, signature: Uint8Array, message: Uint8Array): Promise<boolean>;
@@ -1,2 +1,3 @@
1
- export declare function randomBytesAsync(size: number): Promise<Uint8Array>;
1
+ export declare function randomFillAsync(target: Uint8Array, offset?: number, size?: number): Promise<Uint8Array>;
2
2
  export declare const randomIntAsync: (min: number, max: number) => Promise<number>;
3
+ export declare const randomBytesAsync: (size: number) => Promise<Uint8Array>;
@@ -0,0 +1,2 @@
1
+ export declare function xeddsaVerify(curvePublicKey: Uint8Array, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
2
+ export declare function xeddsaSign(privateKey: Uint8Array, message: Uint8Array): Promise<Uint8Array>;
@@ -1,2 +1,3 @@
1
1
  export declare const X25519_PKCS8_PREFIX: Uint8Array<ArrayBufferLike>;
2
+ export declare const X25519_SPKI_PREFIX: Uint8Array<ArrayBufferLike>;
2
3
  export declare const ED25519_PKCS8_PREFIX: Uint8Array<ArrayBufferLike>;
@@ -1 +1,3 @@
1
1
  export * from './core';
2
+ export { X25519 } from './curves/X25519';
3
+ export type { SignalKeyPair } from './curves/types';
@@ -1,7 +1,9 @@
1
+ import { type Fe } from '../math/fe';
1
2
  import type { ExtendedPoint } from '../math/types';
2
3
  export declare const FIELD_P: bigint;
3
4
  export declare const GROUP_L: bigint;
4
- export declare const EDWARDS_D: bigint;
5
- export declare const TWO_D: bigint;
5
+ export declare const FE_TWO_D: Fe;
6
+ export declare const FE_ZERO: Fe;
7
+ export declare const FE_ONE: Fe;
6
8
  export declare const BASE_POINT: ExtendedPoint;
7
9
  export declare const IDENTITY_POINT: ExtendedPoint;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Field element arithmetic for GF(2^255-19).
3
+ * Representation: 16 limbs of 16 bits in Float64Array (tweetnacl style).
4
+ * Hot-path operations are allocation-free using pre-allocated temporaries.
5
+ */
6
+ export type Fe = Float64Array;
7
+ export declare function fe(): Fe;
8
+ export declare function feCopy(o: Fe, a: Fe): void;
9
+ export declare function feFromBigInt(n: bigint): Fe;
10
+ export declare function feToBigInt(a: Fe): bigint;
11
+ export declare function feFromBytes(o: Fe, s: Uint8Array): void;
12
+ export declare function fePack(o: Uint8Array, n: Fe): void;
13
+ export declare function feAdd(o: Fe, a: Fe, b: Fe): void;
14
+ export declare function feSub(o: Fe, a: Fe, b: Fe): void;
15
+ export declare function feNeg(o: Fe, a: Fe): void;
16
+ /**
17
+ * Fully unrolled field multiplication with folded reduction.
18
+ * Computes o = a * b mod (2^255-19) using negacyclic convolution:
19
+ * t[i] = Σ a[j]*b[i-j] (direct) + 38 * Σ a[j]*b[i+16-j] (wrapped)
20
+ * All values in local variables for register allocation.
21
+ */
22
+ export declare function feMul(o: Fe, a: Fe, b: Fe): void;
23
+ /**
24
+ * Fully unrolled field squaring with folded reduction and symmetry.
25
+ * Exploits a[j]*a[k] == a[k]*a[j] to halve off-diagonal multiplications.
26
+ * Combined with negacyclic reduction: wrapped terms use a38[k] = 38*a[k].
27
+ */
28
+ export declare function feSqr(o: Fe, a: Fe): void;
29
+ export declare function feSqrN(o: Fe, a: Fe, n: number): void;
30
+ export declare function feInv(o: Fe, a: Fe): void;
@@ -1,5 +1,3 @@
1
- import { FIELD_P, GROUP_L } from '../math/constants';
2
- export { FIELD_P, GROUP_L };
3
1
  export declare function mod(value: bigint, modulus?: bigint): bigint;
4
2
  export declare function modGroup(value: bigint): bigint;
5
3
  export declare function modInv(value: bigint, modulus?: bigint): bigint;
@@ -1,6 +1,13 @@
1
+ import type { Fe } from '../math/fe';
1
2
  export interface ExtendedPoint {
2
- readonly x: bigint;
3
- readonly y: bigint;
4
- readonly z: bigint;
5
- readonly t: bigint;
3
+ readonly x: Fe;
4
+ readonly y: Fe;
5
+ readonly z: Fe;
6
+ readonly t: Fe;
7
+ }
8
+ export interface MutablePoint {
9
+ x: Fe;
10
+ y: Fe;
11
+ z: Fe;
12
+ t: Fe;
6
13
  }
@@ -1,10 +1,13 @@
1
1
  export { WaClient } from '@client';
2
- export type { WaClientEventMap, WaClientOptions, WaClientProxyOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions } from '@client';
2
+ export type { WaClientEventMap, WaClientOptions, WaClientProxyOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions, WaWriteBehindOptions } from '@client';
3
+ export type { WaBlocklistResult, WaPrivacyCoordinator, WaPrivacyDisallowedListResult, WaPrivacySettings } from './client/coordinators/WaPrivacyCoordinator';
4
+ export type { WaAuthCredentials } from './auth/types';
3
5
  export { ConsoleLogger } from './infra/log/ConsoleLogger';
4
6
  export { PinoLogger, createPinoLogger } from './infra/log/PinoLogger';
5
7
  export type { PinoLoggerOptions } from './infra/log/PinoLogger';
6
8
  export type { Logger, LogLevel } from './infra/log/types';
7
9
  export { createStore } from '@store';
8
- export type { WaAppStateCollectionStoreState, WaAppStateStore, WaAuthStore, WaContactStore, WaCreateStoreCustomCacheProviders, WaCreateStoreCustomProviders, WaCreateStoreOptions, WaDeviceListSnapshot, WaDeviceListStore, WaMessageStore, WaParticipantsSnapshot, WaParticipantsStore, WaRetryStore, WaSenderKeyStore, WaSignalStore, WaSqliteDriver, WaSqliteStorageOptions, WaStoredContactRecord, WaStoredMessageRecord, WaStoredThreadRecord, WaStore, WaStoreCacheProviderSelection, WaStoreCacheTtlSelection, WaStoreDomainValueOrFactory, WaStoreProviderSelection, WaStoreSession, WaThreadStore } from '@store';
9
- export { getLoginIdentity, getWaCompanionPlatformId, getWaMediaHkdfInfo, isGroupJid, normalizeDeviceJid, normalizeRecipientJid, parsePhoneJid, parseSignalAddressFromJid, splitJid, toUserJid, WA_ACCOUNT_SYNC_PROTOCOLS, 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, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS, WA_DEFAULTS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_DISCONNECT_REASONS, WA_IQ_TYPES, WA_LOGOUT_REASONS, WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_MEDIA_HKDF_INFO, WA_NODE_TAGS, WA_PAIRING_KDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO, WA_READY_STATES, WA_RETRYABLE_ACK_CODES, WA_SIGNALING, WA_STREAM_SIGNALING, WA_SUPPORTED_DIRTY_TYPES, WA_XMLNS } from '@protocol';
10
+ export type { WaAppStateCollectionStoreState, WaAppStateStore, WaAuthStore, WaContactStore, WaCreateStoreOptions, WaDeviceListSnapshot, WaDeviceListStore, WaMessageStore, WaParticipantsSnapshot, WaParticipantsStore, WaRetryStore, WaSenderKeyStore, WaSessionStore, WaSignalStore, WaIdentityStore, WaPreKeyStore, WaStoredContactRecord, WaStoredMessageRecord, WaStoredThreadRecord, WaStore, WaStoreBackend, WaStoreSession, WaThreadStore } from '@store';
11
+ export { getLoginIdentity, getWaCompanionPlatformId, getWaMediaHkdfInfo, isGroupJid, normalizeDeviceJid, normalizeRecipientJid, parsePhoneJid, parseSignalAddressFromJid, splitJid, toUserJid, WA_ACCOUNT_SYNC_PROTOCOLS, 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, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS, WA_DEFAULTS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_DISCONNECT_REASONS, WA_IQ_TYPES, WA_LOGOUT_REASONS, WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_MEDIA_HKDF_INFO, WA_NODE_TAGS, WA_PAIRING_KDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO, WA_READY_STATES, WA_RETRYABLE_ACK_CODES, WA_SIGNALING, WA_STREAM_SIGNALING, WA_SUPPORTED_DIRTY_TYPES, WA_PRIVACY_CATEGORIES, WA_PRIVACY_CATEGORY_TO_SETTING, WA_PRIVACY_DISALLOWED_LIST_CATEGORIES, WA_PRIVACY_SETTING_TO_CATEGORY, WA_PRIVACY_TAGS, WA_PRIVACY_VALUES, WA_XMLNS } from '@protocol';
12
+ export type { WaPrivacyCategory, WaPrivacySettingName, WaPrivacyValue } from '@protocol';
10
13
  export { proto } from '.';
@@ -1,4 +1,4 @@
1
- import type { LogLevel, Logger } from '../log/types';
1
+ import type { Logger, LogLevel } from '../log/types';
2
2
  export declare class ConsoleLogger implements Logger {
3
3
  readonly level: LogLevel;
4
4
  private readonly minLevelPriority;
@@ -1,4 +1,4 @@
1
- import type { LogLevel, Logger } from '../log/types';
1
+ import type { Logger, LogLevel } from '../log/types';
2
2
  type PinoLikeLogger = {
3
3
  level: string;
4
4
  trace: (...args: unknown[]) => void;
@@ -0,0 +1,58 @@
1
+ export interface BackgroundQueueOptions<K extends string, V> {
2
+ readonly coalesce?: (previous: V, incoming: V, key: K) => V;
3
+ readonly maxPendingKeys?: number;
4
+ readonly maxWriteConcurrency?: number;
5
+ readonly flushTimeoutMs?: number;
6
+ readonly onError?: (key: K, error: unknown, attempt: number) => void;
7
+ readonly onPressure?: (pendingKeys: number) => void;
8
+ readonly onDiscard?: (key: K, value: V) => void;
9
+ }
10
+ export interface BackgroundQueueFlushResult {
11
+ readonly flushed: number;
12
+ readonly remaining: number;
13
+ }
14
+ export declare class BackgroundQueue<K extends string, V> {
15
+ private readonly writer;
16
+ private readonly coalesce;
17
+ private readonly maxPendingKeys;
18
+ private readonly maxWriteConcurrency;
19
+ private readonly flushTimeoutMs;
20
+ private readonly onError?;
21
+ private readonly onPressure?;
22
+ private readonly onDiscard?;
23
+ private readonly pendingByKey;
24
+ private readonly retryTimersByKey;
25
+ private readonly stateWaiters;
26
+ private drainingPromise;
27
+ private inFlight;
28
+ private flushedCount;
29
+ private shutdownRequested;
30
+ private retryDisabled;
31
+ constructor(writer: (key: K, value: V) => Promise<void>, options?: BackgroundQueueOptions<K, V>);
32
+ enqueue(key: K, value: V): void;
33
+ enqueueAsync(key: K, value: V): Promise<void>;
34
+ private waitForCapacity;
35
+ private addPendingEntry;
36
+ private detachRetryEntry;
37
+ flush(timeoutMs?: number): Promise<BackgroundQueueFlushResult>;
38
+ destroy(timeoutMs?: number): Promise<BackgroundQueueFlushResult>;
39
+ private ensureDrain;
40
+ private drainLoop;
41
+ private takeBatch;
42
+ private processEntry;
43
+ private takeNext;
44
+ private mergeForRetry;
45
+ private retryDelayMs;
46
+ private scheduleRetry;
47
+ private resolveEntry;
48
+ private discardEntry;
49
+ private discardPending;
50
+ private remaining;
51
+ private trackedKeys;
52
+ private notifyStateChange;
53
+ private waitForStateChange;
54
+ private removeStateWaiter;
55
+ private invokeOnError;
56
+ private invokeOnPressure;
57
+ private invokeOnDiscard;
58
+ }
@@ -0,0 +1,4 @@
1
+ export declare class PromiseDedup {
2
+ private readonly inFlight;
3
+ run<T>(key: string, task: () => Promise<T>): Promise<T>;
4
+ }
@@ -0,0 +1,17 @@
1
+ type SharedExclusiveTask<T> = () => Promise<T>;
2
+ export declare class SharedExclusiveGate {
3
+ private activeShared;
4
+ private pendingExclusive;
5
+ private exclusiveActive;
6
+ private closed;
7
+ private readonly waiters;
8
+ runShared<T>(task: SharedExclusiveTask<T>): Promise<T>;
9
+ private runSharedSlow;
10
+ runExclusive<T>(task: SharedExclusiveTask<T>): Promise<T>;
11
+ close(): Promise<void>;
12
+ private acquireShared;
13
+ private acquireExclusive;
14
+ private notifyStateChange;
15
+ private waitForStateChange;
16
+ }
17
+ export {};
@@ -0,0 +1,11 @@
1
+ type StoreTask<T> = () => Promise<T>;
2
+ export declare class StoreLock {
3
+ private static readonly _noop;
4
+ private readonly chains;
5
+ private closed;
6
+ run<T>(key: string, task: StoreTask<T>): Promise<T>;
7
+ private runInternal;
8
+ runMany<T>(keys: readonly string[], task: StoreTask<T>): Promise<T>;
9
+ shutdown(): Promise<void>;
10
+ }
11
+ export {};
@@ -1,12 +1,22 @@
1
- import type { Readable } from 'node:stream';
2
- import type { MediaCryptoType, WaMediaDecryptReadableOptions, WaMediaDecryptionResult, WaMediaDerivedKeys, WaMediaEncryptionResult, WaMediaReadableDecryptionResult, WaMediaReadableEncryptionResult } from './types';
1
+ import { type Readable } from 'node:stream';
2
+ import type { MediaCryptoType, WaMediaDecryptionResult, WaMediaDecryptReadableOptions, WaMediaDerivedKeys, WaMediaEncryptionResult, WaMediaFileEncryptionResult, WaMediaReadableDecryptionResult, WaMediaReadableEncryptionResult } from './types';
3
3
  export declare class WaMediaCrypto {
4
4
  static generateMediaKey(): Promise<Uint8Array>;
5
5
  static deriveKeys(mediaType: MediaCryptoType, mediaKey: Uint8Array): Promise<WaMediaDerivedKeys>;
6
- static encryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Uint8Array): Promise<WaMediaEncryptionResult>;
7
- static decryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, ciphertextHmac: Uint8Array, expectedFileSha256?: Uint8Array, expectedFileEncSha256?: Uint8Array): Promise<WaMediaDecryptionResult>;
8
- static encryptReadable(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Readable): Promise<WaMediaReadableEncryptionResult>;
9
- static decryptReadableToBytes(encrypted: Readable, options: WaMediaDecryptReadableOptions): Promise<WaMediaDecryptionResult>;
6
+ static encryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Uint8Array, options?: {
7
+ readonly sidecar?: boolean;
8
+ readonly firstFrameLength?: number;
9
+ }): Promise<WaMediaEncryptionResult>;
10
+ static decryptBytes(mediaType: MediaCryptoType, mediaKey: Uint8Array, ciphertextHmac: Uint8Array, expectedFileSha256?: Uint8Array, expectedFileEncSha256?: Uint8Array, skipMacVerification?: boolean): Promise<WaMediaDecryptionResult>;
11
+ static encryptReadable(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Readable, options?: {
12
+ readonly sidecar?: boolean;
13
+ readonly firstFrameLength?: number;
14
+ }): Promise<WaMediaReadableEncryptionResult>;
15
+ static encryptToFile(mediaType: MediaCryptoType, mediaKey: Uint8Array, plaintext: Readable, options?: {
16
+ readonly sidecar?: boolean;
17
+ readonly firstFrameLength?: number;
18
+ }): Promise<WaMediaFileEncryptionResult>;
19
+ static cleanupEncryptedFile(filePath: string): Promise<void>;
10
20
  static decryptReadable(encrypted: Readable, options: WaMediaDecryptReadableOptions): Promise<WaMediaReadableDecryptionResult>;
11
21
  static encryptedLength(plaintextLength: number): number;
12
22
  }
@@ -1,11 +1,10 @@
1
- import { Readable } from 'node:stream';
2
- import type { MediaCryptoType, WaMediaTransferClientOptions } from './types';
1
+ import type { Readable } from 'node:stream';
2
+ import type { MediaCryptoType, WaMediaReadableDecryptionResult, WaMediaTransferClientOptions } from './types';
3
3
  interface StreamDownloadRequest {
4
4
  readonly url?: string;
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
8
  readonly agent?: WaMediaTransferClientOptions['defaultDownloadAgent'];
10
9
  readonly timeoutMs?: number;
11
10
  readonly signal?: AbortSignal;
@@ -37,6 +36,7 @@ interface EncryptedUploadResult {
37
36
  readonly mediaKey: Uint8Array;
38
37
  readonly fileSha256: Uint8Array;
39
38
  readonly fileEncSha256: Uint8Array;
39
+ readonly plaintextLength: number;
40
40
  }
41
41
  interface EncryptedDownloadRequest extends StreamDownloadRequest {
42
42
  readonly mediaType: MediaCryptoType;
@@ -44,48 +44,31 @@ interface EncryptedDownloadRequest extends StreamDownloadRequest {
44
44
  readonly fileSha256?: Uint8Array;
45
45
  readonly fileEncSha256?: Uint8Array;
46
46
  }
47
- interface EncryptedDownloadStream {
48
- readonly plaintext: Readable;
49
- readonly metadata: Promise<{
50
- readonly fileSha256: Uint8Array;
51
- readonly fileEncSha256: Uint8Array;
52
- }>;
53
- }
54
47
  export declare class WaMediaTransferClient {
55
48
  private readonly logger?;
56
49
  private readonly defaultHosts;
57
50
  private readonly defaultTimeoutMs;
58
51
  private readonly defaultMaxReadBytes;
59
52
  private readonly defaultHeaders;
60
- private readonly defaultUploadDispatcher;
61
- private readonly defaultDownloadDispatcher;
62
53
  private readonly defaultUploadAgent;
63
54
  private readonly defaultDownloadAgent;
64
- private gotModulePromise;
55
+ private readonly skipMacVerification;
65
56
  constructor(options?: WaMediaTransferClientOptions);
66
57
  downloadStream(request: StreamDownloadRequest): Promise<StreamTransferResponse>;
67
58
  downloadBytes(request: StreamDownloadRequest): Promise<Uint8Array>;
68
59
  uploadStream(request: StreamUploadRequest): Promise<StreamTransferResponse>;
69
60
  uploadEncrypted(request: EncryptedUploadRequest): Promise<EncryptedUploadResult>;
70
61
  downloadAndDecrypt(request: EncryptedDownloadRequest): Promise<Uint8Array>;
71
- downloadAndDecryptStream(request: EncryptedDownloadRequest): Promise<EncryptedDownloadStream>;
62
+ downloadAndDecryptStream(request: EncryptedDownloadRequest): Promise<WaMediaReadableDecryptionResult>;
72
63
  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;
64
+ private httpRequest;
79
65
  private resolveTransferRequest;
80
- private executeTransfer;
81
66
  private prepareEncryptedUpload;
82
67
  private assertSuccessfulResponse;
83
68
  private requireResponseBody;
84
69
  private resolveUrls;
85
- private readAllBytesWithLimit;
86
70
  private fetchWithFallback;
87
71
  private createAbortContext;
88
- private headersToRecord;
89
72
  private drainBody;
90
73
  }
91
74
  export {};
@@ -7,4 +7,6 @@ export declare const ENC_KEY_END = 48;
7
7
  export declare const MAC_KEY_START = 48;
8
8
  export declare const MAC_KEY_END = 80;
9
9
  export declare const HMAC_TRUNCATED_SIZE = 10;
10
- export declare const MEDIA_UPLOAD_PATHS: Readonly<Record<'image' | 'video' | 'audio' | 'document' | 'sticker' | 'gif' | 'ptt', string>>;
10
+ export declare const SIDECAR_CHUNK_SIZE = 65536;
11
+ export declare const SIDECAR_HMAC_SIZE = 10;
12
+ export declare const MEDIA_UPLOAD_PATHS: Readonly<Record<'image' | 'video' | 'audio' | 'document' | 'sticker' | 'gif' | 'ptt' | 'ptv', string>>;
@@ -1,4 +1,5 @@
1
1
  export { WaMediaTransferClient } from './WaMediaTransferClient';
2
2
  export { parseMediaConnResponse } from './conn';
3
- export type { WaMediaConn, WaMediaConnHost, WaMediaTransferClientOptions, WaMediaDerivedKeys, WaMediaEncryptionResult, WaMediaDecryptionResult, WaMediaReadableEncryptionResult, WaMediaReadableDecryptionResult } from './types';
3
+ export type { WaMediaConn } from './types';
4
4
  export { WaMediaCrypto } from './WaMediaCrypto';
5
+ export type { WaMediaProcessor, WaMediaProcessorImageResult, WaMediaProcessorInput, WaMediaProcessorProbeResult, WaMediaProcessorStickerThumbnailResult, WaMediaProcessorWaveformResult } from './processor';
@@ -0,0 +1,28 @@
1
+ import type { Readable } from 'node:stream';
2
+ export interface WaMediaProcessorImageResult {
3
+ readonly jpegThumbnail: Uint8Array;
4
+ readonly width: number;
5
+ readonly height: number;
6
+ }
7
+ export interface WaMediaProcessorStickerThumbnailResult {
8
+ readonly pngThumbnail: Uint8Array;
9
+ readonly width: number;
10
+ readonly height: number;
11
+ }
12
+ export interface WaMediaProcessorProbeResult {
13
+ readonly durationSeconds?: number;
14
+ readonly width?: number;
15
+ readonly height?: number;
16
+ }
17
+ export interface WaMediaProcessorWaveformResult {
18
+ readonly waveform: Uint8Array;
19
+ readonly durationSeconds: number;
20
+ }
21
+ export type WaMediaProcessorInput = Uint8Array | Readable | string;
22
+ export interface WaMediaProcessor {
23
+ readonly generateImageThumbnail?: (input: WaMediaProcessorInput, maxEdge: number) => Promise<WaMediaProcessorImageResult>;
24
+ readonly generateVideoThumbnail?: (input: WaMediaProcessorInput, maxEdge: number) => Promise<WaMediaProcessorImageResult | null>;
25
+ readonly probeMedia?: (input: WaMediaProcessorInput) => Promise<WaMediaProcessorProbeResult>;
26
+ readonly computeWaveform?: (input: WaMediaProcessorInput) => Promise<WaMediaProcessorWaveformResult | null>;
27
+ readonly generateStickerThumbnail?: (input: WaMediaProcessorInput, maxEdge: number) => Promise<WaMediaProcessorStickerThumbnailResult>;
28
+ }