zapo-js 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/README.md +20 -4
  2. package/dist/appstate/WaAppStateCrypto.js +19 -26
  3. package/dist/appstate/WaAppStateSyncClient.js +293 -181
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/{store/sqlite.js → encoding.js} +13 -8
  7. package/dist/appstate/index.js +8 -6
  8. package/dist/appstate/utils.js +9 -34
  9. package/dist/auth/WaAuthClient.js +43 -61
  10. package/dist/auth/flow/WaAuthCredentialsFlow.js +22 -15
  11. package/dist/auth/index.js +1 -8
  12. package/dist/auth/pairing/WaPairingCodeCrypto.js +6 -4
  13. package/dist/auth/pairing/WaPairingFlow.js +34 -26
  14. package/dist/auth/pairing/WaQrFlow.js +37 -24
  15. package/dist/client/WaClient.js +275 -324
  16. package/dist/client/WaClientFactory.js +500 -133
  17. package/dist/client/connection/WaConnectionManager.js +301 -0
  18. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  19. package/dist/client/connection/WaReceiptQueue.js +51 -0
  20. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +241 -0
  22. package/dist/client/coordinators/WaGroupCoordinator.js +30 -16
  23. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
  24. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +439 -701
  25. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  26. package/dist/client/coordinators/WaPrivacyCoordinator.js +134 -0
  27. package/dist/client/coordinators/WaProfileCoordinator.js +212 -0
  28. package/dist/client/coordinators/WaRetryCoordinator.js +242 -57
  29. package/dist/client/coordinators/WaStreamControlCoordinator.js +18 -11
  30. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +166 -0
  31. package/dist/client/dirty.js +74 -48
  32. package/dist/client/events/chat.js +4 -3
  33. package/dist/client/events/devices.js +72 -0
  34. package/dist/client/events/group.js +62 -47
  35. package/dist/client/events/identity.js +22 -0
  36. package/dist/client/events/privacy-token.js +39 -0
  37. package/dist/client/history-sync.js +94 -63
  38. package/dist/client/incoming.js +60 -27
  39. package/dist/client/mailbox.js +24 -23
  40. package/dist/client/messages.js +107 -31
  41. package/dist/client/messaging/fanout.js +199 -0
  42. package/dist/client/messaging/key-protocol.js +130 -0
  43. package/dist/client/messaging/participants.js +193 -0
  44. package/dist/client/persistence/WriteBehindPersistence.js +129 -0
  45. package/dist/client/tokens/cs-token.js +50 -0
  46. package/dist/client/tokens/tc-token.js +25 -0
  47. package/dist/crypto/core/hkdf.js +3 -8
  48. package/dist/crypto/core/index.js +2 -5
  49. package/dist/crypto/core/keys.js +6 -7
  50. package/dist/crypto/core/nonce.js +2 -0
  51. package/dist/crypto/core/primitives.js +12 -23
  52. package/dist/crypto/core/random.js +26 -23
  53. package/dist/crypto/curves/Ed25519.js +7 -8
  54. package/dist/crypto/curves/X25519.js +38 -22
  55. package/dist/crypto/index.js +1 -3
  56. package/dist/crypto/math/constants.js +13 -36
  57. package/dist/crypto/math/edwards.js +171 -44
  58. package/dist/crypto/math/fe.js +706 -0
  59. package/dist/crypto/math/mod.js +10 -3
  60. package/dist/esm/appstate/WaAppStateCrypto.js +7 -14
  61. package/dist/esm/appstate/WaAppStateSyncClient.js +284 -172
  62. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  63. package/dist/esm/appstate/constants.js +3 -2
  64. package/dist/esm/appstate/{store/sqlite.js → encoding.js} +13 -8
  65. package/dist/esm/appstate/index.js +2 -2
  66. package/dist/esm/appstate/utils.js +8 -30
  67. package/dist/esm/auth/WaAuthClient.js +43 -61
  68. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +22 -15
  69. package/dist/esm/auth/index.js +0 -3
  70. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +6 -4
  71. package/dist/esm/auth/pairing/WaPairingFlow.js +28 -20
  72. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  73. package/dist/esm/client/WaClient.js +275 -324
  74. package/dist/esm/client/WaClientFactory.js +501 -134
  75. package/dist/esm/client/connection/WaConnectionManager.js +297 -0
  76. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  77. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  78. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  79. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +238 -0
  80. package/dist/esm/client/coordinators/WaGroupCoordinator.js +23 -9
  81. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +21 -27
  82. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +443 -705
  83. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +74 -31
  84. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +131 -0
  85. package/dist/esm/client/coordinators/WaProfileCoordinator.js +209 -0
  86. package/dist/esm/client/coordinators/WaRetryCoordinator.js +244 -59
  87. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +19 -12
  88. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +162 -0
  89. package/dist/esm/client/dirty.js +69 -43
  90. package/dist/esm/client/events/chat.js +4 -3
  91. package/dist/esm/client/events/devices.js +68 -0
  92. package/dist/esm/client/events/group.js +53 -39
  93. package/dist/esm/client/events/identity.js +19 -0
  94. package/dist/esm/client/events/privacy-token.js +36 -0
  95. package/dist/esm/client/history-sync.js +91 -60
  96. package/dist/esm/client/incoming.js +61 -28
  97. package/dist/esm/client/mailbox.js +24 -23
  98. package/dist/esm/client/messages.js +108 -32
  99. package/dist/esm/client/messaging/fanout.js +196 -0
  100. package/dist/esm/client/messaging/key-protocol.js +127 -0
  101. package/dist/esm/client/messaging/participants.js +190 -0
  102. package/dist/esm/client/persistence/WriteBehindPersistence.js +125 -0
  103. package/dist/esm/client/tokens/cs-token.js +46 -0
  104. package/dist/esm/client/tokens/tc-token.js +18 -0
  105. package/dist/esm/crypto/core/hkdf.js +3 -8
  106. package/dist/esm/crypto/core/index.js +2 -3
  107. package/dist/esm/crypto/core/keys.js +3 -4
  108. package/dist/esm/crypto/core/nonce.js +2 -0
  109. package/dist/esm/crypto/core/primitives.js +12 -22
  110. package/dist/esm/crypto/core/random.js +25 -23
  111. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  112. package/dist/esm/crypto/curves/X25519.js +35 -19
  113. package/dist/esm/crypto/index.js +0 -1
  114. package/dist/esm/crypto/math/constants.js +12 -35
  115. package/dist/esm/crypto/math/edwards.js +174 -47
  116. package/dist/esm/crypto/math/fe.js +691 -0
  117. package/dist/esm/crypto/math/mod.js +10 -1
  118. package/dist/esm/index.js +1 -1
  119. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  120. package/dist/esm/infra/log/PinoLogger.js +15 -9
  121. package/dist/esm/infra/log/types.js +11 -1
  122. package/dist/esm/infra/perf/BackgroundQueue.js +478 -0
  123. package/dist/esm/infra/perf/BoundedTaskQueue.js +16 -18
  124. package/dist/esm/infra/perf/PromiseDedup.js +20 -0
  125. package/dist/esm/infra/perf/SharedExclusiveGate.js +109 -0
  126. package/dist/esm/infra/perf/StoreLock.js +77 -0
  127. package/dist/esm/media/WaMediaCrypto.js +96 -16
  128. package/dist/esm/media/WaMediaTransferClient.js +251 -91
  129. package/dist/esm/media/conn.js +10 -6
  130. package/dist/esm/media/constants.js +6 -2
  131. package/dist/esm/message/WaMessageClient.js +30 -32
  132. package/dist/esm/message/ack.js +6 -6
  133. package/dist/esm/message/addon-crypto.js +59 -0
  134. package/dist/esm/message/content.js +195 -9
  135. package/dist/esm/message/icdc.js +76 -0
  136. package/dist/esm/message/incoming.js +129 -122
  137. package/dist/esm/message/index.js +2 -0
  138. package/dist/esm/message/phash.js +3 -1
  139. package/dist/esm/message/reporting-token.js +425 -0
  140. package/dist/esm/message/use-case-secret.js +49 -0
  141. package/dist/esm/protocol/appstate.js +27 -0
  142. package/dist/esm/protocol/browser.js +10 -18
  143. package/dist/esm/protocol/constants.js +6 -3
  144. package/dist/esm/protocol/defaults.js +6 -0
  145. package/dist/esm/protocol/index.js +2 -11
  146. package/dist/esm/protocol/jid.js +133 -52
  147. package/dist/esm/protocol/media.js +3 -3
  148. package/dist/esm/protocol/message.js +61 -1
  149. package/dist/esm/protocol/nodes.js +4 -0
  150. package/dist/esm/protocol/notification.js +3 -1
  151. package/dist/esm/protocol/privacy-token.js +17 -0
  152. package/dist/esm/protocol/privacy.js +55 -0
  153. package/dist/esm/protocol/stream.js +26 -1
  154. package/dist/esm/protocol/usync.js +11 -0
  155. package/dist/esm/retry/codec.js +216 -0
  156. package/dist/esm/retry/constants.js +1 -1
  157. package/dist/esm/retry/index.js +3 -2
  158. package/dist/esm/retry/parse.js +88 -86
  159. package/dist/esm/retry/replay.js +54 -51
  160. package/dist/esm/retry/tracker.js +94 -0
  161. package/dist/esm/signal/api/SignalDeviceSyncApi.js +276 -92
  162. package/dist/esm/signal/api/SignalDigestSyncApi.js +17 -8
  163. package/dist/esm/signal/api/SignalIdentitySyncApi.js +67 -37
  164. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +86 -67
  165. package/dist/esm/signal/api/SignalRotateKeyApi.js +4 -2
  166. package/dist/esm/signal/api/SignalSessionSyncApi.js +36 -34
  167. package/dist/esm/signal/api/result-map.js +10 -0
  168. package/dist/esm/signal/constants.js +0 -4
  169. package/dist/esm/signal/crypto/WaAdvSignature.js +13 -9
  170. package/dist/esm/signal/{store/sqlite.js → encoding.js} +93 -60
  171. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  172. package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
  173. package/dist/esm/signal/group/SenderKeyManager.js +144 -115
  174. package/dist/esm/signal/index.js +2 -0
  175. package/dist/esm/signal/registration/keygen.js +6 -2
  176. package/dist/esm/signal/registration/utils.js +1 -0
  177. package/dist/esm/signal/session/SignalProtocol.js +164 -53
  178. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  179. package/dist/esm/signal/session/SignalSession.js +14 -9
  180. package/dist/esm/signal/session/resolver.js +221 -0
  181. package/dist/esm/store/contracts/privacy-token.store.js +1 -0
  182. package/dist/esm/store/createStore.js +100 -188
  183. package/dist/esm/store/index.js +1 -10
  184. package/dist/esm/store/locks/appstate.lock.js +26 -0
  185. package/dist/esm/store/locks/auth.lock.js +15 -0
  186. package/dist/esm/store/locks/contact.lock.js +20 -0
  187. package/dist/esm/store/locks/device-list.lock.js +20 -0
  188. package/dist/esm/store/locks/message.lock.js +21 -0
  189. package/dist/esm/store/locks/participants.lock.js +20 -0
  190. package/dist/esm/store/locks/privacy-token.lock.js +18 -0
  191. package/dist/esm/store/locks/retry.lock.js +29 -0
  192. package/dist/esm/store/locks/sender-key.lock.js +52 -0
  193. package/dist/esm/store/locks/signal.lock.js +63 -0
  194. package/dist/esm/store/locks/thread.lock.js +21 -0
  195. package/dist/esm/store/noop.store.js +4 -7
  196. package/dist/esm/store/providers/memory/appstate.store.js +38 -16
  197. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  198. package/dist/esm/store/providers/memory/device-list.store.js +12 -34
  199. package/dist/esm/store/providers/memory/message.store.js +11 -5
  200. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  201. package/dist/esm/store/providers/memory/privacy-token.store.js +43 -0
  202. package/dist/esm/store/providers/memory/retry.store.js +77 -2
  203. package/dist/esm/store/providers/memory/sender-key.store.js +11 -8
  204. package/dist/esm/store/providers/memory/signal.store.js +47 -18
  205. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  206. package/dist/esm/transport/WaComms.js +28 -24
  207. package/dist/esm/transport/WaWebSocket.js +115 -18
  208. package/dist/esm/transport/binary/constants.js +0 -30
  209. package/dist/esm/transport/binary/decoder.js +8 -8
  210. package/dist/esm/transport/binary/encoder.js +10 -9
  211. package/dist/esm/transport/binary/index.js +0 -1
  212. package/dist/esm/transport/index.js +1 -0
  213. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  214. package/dist/esm/transport/node/WaNodeOrchestrator.js +25 -21
  215. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  216. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  217. package/dist/esm/transport/node/builders/business.js +129 -0
  218. package/dist/esm/transport/node/builders/global.js +370 -0
  219. package/dist/esm/transport/node/builders/index.js +7 -3
  220. package/dist/esm/transport/node/builders/message.js +63 -230
  221. package/dist/esm/transport/node/builders/pairing.js +2 -27
  222. package/dist/esm/transport/node/builders/privacy-token.js +41 -0
  223. package/dist/esm/transport/node/builders/privacy.js +48 -0
  224. package/dist/esm/transport/node/builders/profile.js +70 -0
  225. package/dist/esm/transport/node/builders/retry.js +10 -22
  226. package/dist/esm/transport/node/builders/usync.js +45 -0
  227. package/dist/esm/transport/node/helpers.js +125 -5
  228. package/dist/esm/transport/node/usync.js +5 -0
  229. package/dist/esm/transport/node/xml.js +35 -14
  230. package/dist/esm/transport/noise/WaClientPayload.js +10 -10
  231. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  232. package/dist/esm/transport/noise/WaNoiseCert.js +4 -7
  233. package/dist/esm/transport/noise/WaNoiseSession.js +77 -29
  234. package/dist/esm/transport/noise/WaNoiseSocket.js +8 -4
  235. package/dist/esm/transport/proxy.js +27 -0
  236. package/dist/esm/transport/stream/parse.js +17 -48
  237. package/dist/esm/util/bytes.js +67 -45
  238. package/dist/esm/util/coercion.js +6 -14
  239. package/dist/esm/util/index.js +5 -0
  240. package/dist/esm/util/primitives.js +40 -14
  241. package/dist/index.js +7 -1
  242. package/dist/infra/log/ConsoleLogger.js +18 -17
  243. package/dist/infra/log/PinoLogger.js +15 -9
  244. package/dist/infra/log/types.js +12 -0
  245. package/dist/infra/perf/BackgroundQueue.js +482 -0
  246. package/dist/infra/perf/BoundedTaskQueue.js +16 -18
  247. package/dist/infra/perf/PromiseDedup.js +24 -0
  248. package/dist/infra/perf/SharedExclusiveGate.js +113 -0
  249. package/dist/infra/perf/StoreLock.js +81 -0
  250. package/dist/media/WaMediaCrypto.js +95 -15
  251. package/dist/media/WaMediaTransferClient.js +284 -91
  252. package/dist/media/conn.js +10 -6
  253. package/dist/media/constants.js +6 -2
  254. package/dist/message/WaMessageClient.js +31 -33
  255. package/dist/message/ack.js +6 -6
  256. package/dist/message/addon-crypto.js +65 -0
  257. package/dist/message/content.js +198 -9
  258. package/dist/message/icdc.js +81 -0
  259. package/dist/message/incoming.js +127 -120
  260. package/dist/message/index.js +2 -0
  261. package/dist/message/phash.js +3 -1
  262. package/dist/message/reporting-token.js +429 -0
  263. package/dist/message/use-case-secret.js +55 -0
  264. package/dist/protocol/appstate.js +28 -1
  265. package/dist/protocol/browser.js +10 -18
  266. package/dist/protocol/constants.js +26 -1
  267. package/dist/protocol/defaults.js +6 -0
  268. package/dist/protocol/index.js +23 -42
  269. package/dist/protocol/jid.js +140 -52
  270. package/dist/protocol/media.js +3 -3
  271. package/dist/protocol/message.js +62 -2
  272. package/dist/protocol/nodes.js +4 -0
  273. package/dist/protocol/notification.js +3 -1
  274. package/dist/protocol/privacy-token.js +20 -0
  275. package/dist/protocol/privacy.js +58 -0
  276. package/dist/protocol/stream.js +27 -2
  277. package/dist/protocol/usync.js +14 -0
  278. package/dist/retry/codec.js +220 -0
  279. package/dist/retry/constants.js +1 -1
  280. package/dist/retry/index.js +7 -5
  281. package/dist/retry/parse.js +88 -85
  282. package/dist/retry/replay.js +52 -49
  283. package/dist/retry/tracker.js +97 -0
  284. package/dist/signal/api/SignalDeviceSyncApi.js +273 -89
  285. package/dist/signal/api/SignalDigestSyncApi.js +17 -8
  286. package/dist/signal/api/SignalIdentitySyncApi.js +66 -36
  287. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +82 -63
  288. package/dist/signal/api/SignalRotateKeyApi.js +4 -2
  289. package/dist/signal/api/SignalSessionSyncApi.js +36 -34
  290. package/dist/signal/api/result-map.js +13 -0
  291. package/dist/signal/constants.js +1 -5
  292. package/dist/signal/crypto/WaAdvSignature.js +11 -7
  293. package/dist/signal/{store/sqlite.js → encoding.js} +94 -61
  294. package/dist/signal/group/SenderKeyChain.js +27 -22
  295. package/dist/signal/group/SenderKeyCodec.js +5 -6
  296. package/dist/signal/group/SenderKeyManager.js +144 -115
  297. package/dist/signal/index.js +15 -1
  298. package/dist/signal/registration/keygen.js +6 -2
  299. package/dist/signal/registration/utils.js +1 -0
  300. package/dist/signal/session/SignalProtocol.js +164 -53
  301. package/dist/signal/session/SignalRatchet.js +24 -15
  302. package/dist/signal/session/SignalSession.js +14 -9
  303. package/dist/signal/session/resolver.js +224 -0
  304. package/dist/store/contracts/privacy-token.store.js +2 -0
  305. package/dist/store/createStore.js +100 -188
  306. package/dist/store/index.js +15 -33
  307. package/dist/store/locks/appstate.lock.js +29 -0
  308. package/dist/store/locks/auth.lock.js +18 -0
  309. package/dist/store/locks/contact.lock.js +23 -0
  310. package/dist/store/locks/device-list.lock.js +23 -0
  311. package/dist/store/locks/message.lock.js +24 -0
  312. package/dist/store/locks/participants.lock.js +23 -0
  313. package/dist/store/locks/privacy-token.lock.js +21 -0
  314. package/dist/store/locks/retry.lock.js +32 -0
  315. package/dist/store/locks/sender-key.lock.js +55 -0
  316. package/dist/store/locks/signal.lock.js +66 -0
  317. package/dist/store/locks/thread.lock.js +24 -0
  318. package/dist/store/noop.store.js +4 -7
  319. package/dist/store/providers/memory/appstate.store.js +36 -14
  320. package/dist/store/providers/memory/contact.store.js +5 -0
  321. package/dist/store/providers/memory/device-list.store.js +12 -34
  322. package/dist/store/providers/memory/message.store.js +11 -5
  323. package/dist/store/providers/memory/participants.store.js +1 -8
  324. package/dist/store/providers/memory/privacy-token.store.js +47 -0
  325. package/dist/store/providers/memory/retry.store.js +77 -2
  326. package/dist/store/providers/memory/sender-key.store.js +14 -11
  327. package/dist/store/providers/memory/signal.store.js +54 -25
  328. package/dist/store/providers/memory/thread.store.js +5 -0
  329. package/dist/transport/WaComms.js +30 -26
  330. package/dist/transport/WaWebSocket.js +148 -18
  331. package/dist/transport/binary/constants.js +1 -31
  332. package/dist/transport/binary/decoder.js +8 -8
  333. package/dist/transport/binary/encoder.js +10 -9
  334. package/dist/transport/binary/index.js +0 -4
  335. package/dist/transport/index.js +7 -1
  336. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  337. package/dist/transport/node/WaNodeOrchestrator.js +25 -21
  338. package/dist/transport/node/WaNodeTransport.js +0 -3
  339. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  340. package/dist/transport/node/builders/business.js +137 -0
  341. package/dist/transport/node/builders/global.js +375 -0
  342. package/dist/transport/node/builders/index.js +29 -17
  343. package/dist/transport/node/builders/message.js +64 -236
  344. package/dist/transport/node/builders/pairing.js +2 -29
  345. package/dist/transport/node/builders/privacy-token.js +46 -0
  346. package/dist/transport/node/builders/privacy.js +55 -0
  347. package/dist/transport/node/builders/profile.js +78 -0
  348. package/dist/transport/node/builders/retry.js +9 -21
  349. package/dist/transport/node/builders/usync.js +49 -0
  350. package/dist/transport/node/helpers.js +131 -4
  351. package/dist/transport/node/usync.js +8 -0
  352. package/dist/transport/node/xml.js +35 -14
  353. package/dist/transport/noise/WaClientPayload.js +13 -13
  354. package/dist/transport/noise/WaFrameCodec.js +47 -32
  355. package/dist/transport/noise/WaNoiseCert.js +5 -8
  356. package/dist/transport/noise/WaNoiseSession.js +77 -29
  357. package/dist/transport/noise/WaNoiseSocket.js +8 -4
  358. package/dist/transport/proxy.js +34 -0
  359. package/dist/transport/stream/parse.js +20 -52
  360. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  361. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  362. package/dist/types/appstate/constants.d.ts +1 -0
  363. package/dist/types/appstate/encoding.d.ts +7 -0
  364. package/dist/types/appstate/index.d.ts +3 -3
  365. package/dist/types/appstate/utils.d.ts +0 -3
  366. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  367. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +1 -1
  368. package/dist/types/auth/index.d.ts +0 -4
  369. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  370. package/dist/types/auth/types.d.ts +7 -9
  371. package/dist/types/client/WaClient.d.ts +42 -25
  372. package/dist/types/client/WaClientFactory.d.ts +33 -26
  373. package/dist/types/client/connection/WaConnectionManager.d.ts +66 -0
  374. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  375. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  376. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  377. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +57 -0
  378. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +3 -2
  379. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +29 -38
  380. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -0
  381. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +26 -0
  382. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +36 -0
  383. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +8 -0
  384. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +3 -2
  385. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +45 -0
  386. package/dist/types/client/dirty.d.ts +1 -0
  387. package/dist/types/client/events/devices.d.ts +20 -0
  388. package/dist/types/client/events/group.d.ts +2 -1
  389. package/dist/types/client/events/identity.d.ts +9 -0
  390. package/dist/types/client/events/privacy-token.d.ts +7 -0
  391. package/dist/types/client/history-sync.d.ts +9 -6
  392. package/dist/types/client/incoming.d.ts +3 -1
  393. package/dist/types/client/index.d.ts +1 -1
  394. package/dist/types/client/mailbox.d.ts +3 -5
  395. package/dist/types/client/messages.d.ts +1 -2
  396. package/dist/types/client/messaging/fanout.d.ts +14 -0
  397. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  398. package/dist/types/client/messaging/participants.d.ts +13 -0
  399. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +34 -0
  400. package/dist/types/client/tokens/cs-token.d.ts +10 -0
  401. package/dist/types/client/tokens/tc-token.d.ts +5 -0
  402. package/dist/types/client/types.d.ts +75 -4
  403. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  404. package/dist/types/crypto/core/index.d.ts +2 -3
  405. package/dist/types/crypto/core/nonce.d.ts +2 -0
  406. package/dist/types/crypto/core/primitives.d.ts +0 -1
  407. package/dist/types/crypto/core/random.d.ts +2 -7
  408. package/dist/types/crypto/index.d.ts +0 -1
  409. package/dist/types/crypto/math/constants.d.ts +4 -2
  410. package/dist/types/crypto/math/fe.d.ts +30 -0
  411. package/dist/types/crypto/math/mod.d.ts +0 -2
  412. package/dist/types/crypto/math/types.d.ts +11 -4
  413. package/dist/types/index.d.ts +5 -3
  414. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  415. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  416. package/dist/types/infra/log/types.d.ts +1 -0
  417. package/dist/types/infra/perf/BackgroundQueue.d.ts +58 -0
  418. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  419. package/dist/types/infra/perf/PromiseDedup.d.ts +4 -0
  420. package/dist/types/infra/perf/SharedExclusiveGate.d.ts +17 -0
  421. package/dist/types/infra/perf/StoreLock.d.ts +10 -0
  422. package/dist/types/media/WaMediaCrypto.d.ts +3 -2
  423. package/dist/types/media/WaMediaTransferClient.d.ts +16 -15
  424. package/dist/types/media/constants.d.ts +1 -1
  425. package/dist/types/media/index.d.ts +1 -1
  426. package/dist/types/media/types.d.ts +15 -2
  427. package/dist/types/message/addon-crypto.d.ts +25 -0
  428. package/dist/types/message/content.d.ts +8 -0
  429. package/dist/types/message/icdc.d.ts +13 -0
  430. package/dist/types/message/index.d.ts +2 -0
  431. package/dist/types/message/reporting-token.d.ts +18 -0
  432. package/dist/types/message/types.d.ts +45 -6
  433. package/dist/types/message/use-case-secret.d.ts +20 -0
  434. package/dist/types/protocol/appstate.d.ts +47 -0
  435. package/dist/types/protocol/constants.d.ts +8 -3
  436. package/dist/types/protocol/defaults.d.ts +6 -0
  437. package/dist/types/protocol/index.d.ts +2 -11
  438. package/dist/types/protocol/jid.d.ts +22 -5
  439. package/dist/types/protocol/message.d.ts +60 -0
  440. package/dist/types/protocol/nodes.d.ts +4 -0
  441. package/dist/types/protocol/notification.d.ts +2 -0
  442. package/dist/types/protocol/privacy-token.d.ts +17 -0
  443. package/dist/types/protocol/privacy.d.ts +75 -0
  444. package/dist/types/protocol/stream.d.ts +30 -0
  445. package/dist/types/protocol/usync.d.ts +11 -0
  446. package/dist/types/retry/codec.d.ts +3 -0
  447. package/dist/types/retry/index.d.ts +4 -3
  448. package/dist/types/retry/parse.d.ts +5 -2
  449. package/dist/types/retry/replay.d.ts +0 -4
  450. package/dist/types/retry/tracker.d.ts +20 -0
  451. package/dist/types/retry/types.d.ts +10 -4
  452. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +15 -2
  453. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +6 -0
  454. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +2 -0
  455. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +4 -5
  456. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +8 -6
  457. package/dist/types/signal/api/result-map.d.ts +1 -0
  458. package/dist/types/signal/constants.d.ts +0 -3
  459. package/dist/types/signal/{store/sqlite.d.ts → encoding.d.ts} +3 -3
  460. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  461. package/dist/types/signal/group/SenderKeyManager.d.ts +10 -5
  462. package/dist/types/signal/index.d.ts +3 -0
  463. package/dist/types/signal/session/SignalProtocol.d.ts +19 -4
  464. package/dist/types/signal/session/resolver.d.ts +22 -0
  465. package/dist/types/store/contracts/appstate.store.d.ts +4 -1
  466. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  467. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  468. package/dist/types/store/contracts/message.store.d.ts +1 -0
  469. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  470. package/dist/types/store/contracts/privacy-token.store.d.ts +16 -0
  471. package/dist/types/store/contracts/retry.store.d.ts +7 -0
  472. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  473. package/dist/types/store/contracts/signal.store.d.ts +13 -0
  474. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  475. package/dist/types/store/createStore.d.ts +1 -1
  476. package/dist/types/store/index.d.ts +5 -13
  477. package/dist/types/store/locks/appstate.lock.d.ts +3 -0
  478. package/dist/types/store/locks/auth.lock.d.ts +3 -0
  479. package/dist/types/store/locks/contact.lock.d.ts +3 -0
  480. package/dist/types/store/locks/device-list.lock.d.ts +2 -0
  481. package/dist/types/store/locks/message.lock.d.ts +3 -0
  482. package/dist/types/store/locks/participants.lock.d.ts +2 -0
  483. package/dist/types/store/locks/privacy-token.lock.d.ts +2 -0
  484. package/dist/types/store/locks/retry.lock.d.ts +2 -0
  485. package/dist/types/store/locks/sender-key.lock.d.ts +3 -0
  486. package/dist/types/store/locks/signal.lock.d.ts +3 -0
  487. package/dist/types/store/locks/thread.lock.d.ts +3 -0
  488. package/dist/types/store/providers/memory/appstate.store.d.ts +3 -1
  489. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  490. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  491. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  492. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  493. package/dist/types/store/providers/memory/privacy-token.store.d.ts +13 -0
  494. package/dist/types/store/providers/memory/retry.store.d.ts +8 -0
  495. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  496. package/dist/types/store/providers/memory/signal.store.d.ts +8 -1
  497. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  498. package/dist/types/store/types.d.ts +49 -58
  499. package/dist/types/transport/WaWebSocket.d.ts +3 -1
  500. package/dist/types/transport/binary/constants.d.ts +0 -30
  501. package/dist/types/transport/binary/index.d.ts +0 -1
  502. package/dist/types/transport/index.d.ts +2 -1
  503. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  504. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +3 -4
  505. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  506. package/dist/types/transport/node/builders/business.d.ts +29 -0
  507. package/dist/types/transport/node/builders/global.d.ts +102 -0
  508. package/dist/types/transport/node/builders/group.d.ts +4 -6
  509. package/dist/types/transport/node/builders/index.d.ts +7 -3
  510. package/dist/types/transport/node/builders/message.d.ts +20 -30
  511. package/dist/types/transport/node/builders/pairing.d.ts +0 -2
  512. package/dist/types/transport/node/builders/privacy-token.d.ts +9 -0
  513. package/dist/types/transport/node/builders/privacy.d.ts +7 -0
  514. package/dist/types/transport/node/builders/profile.d.ts +8 -0
  515. package/dist/types/transport/node/builders/retry.d.ts +2 -5
  516. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  517. package/dist/types/transport/node/helpers.d.ts +13 -0
  518. package/dist/types/transport/node/usync.d.ts +2 -0
  519. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  520. package/dist/types/transport/noise/WaNoiseSession.d.ts +4 -2
  521. package/dist/types/transport/noise/WaNoiseSocket.d.ts +4 -2
  522. package/dist/types/transport/proxy.d.ts +6 -0
  523. package/dist/types/transport/stream/parse.d.ts +0 -1
  524. package/dist/types/transport/types.d.ts +18 -1
  525. package/dist/types/util/bytes.d.ts +5 -0
  526. package/dist/types/util/index.d.ts +5 -0
  527. package/dist/types/util/primitives.d.ts +2 -0
  528. package/dist/util/bytes.js +72 -46
  529. package/dist/util/coercion.js +6 -14
  530. package/dist/util/index.js +23 -0
  531. package/dist/util/primitives.js +42 -14
  532. package/package.json +52 -9
  533. package/proto/index.js +1 -1
  534. package/dist/crypto/core/constants.js +0 -4
  535. package/dist/crypto/core/encoding.js +0 -29
  536. package/dist/esm/crypto/core/constants.js +0 -1
  537. package/dist/esm/crypto/core/encoding.js +0 -25
  538. package/dist/esm/retry/outbound.js +0 -83
  539. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +0 -37
  540. package/dist/esm/store/providers/sqlite/appstate.store.js +0 -169
  541. package/dist/esm/store/providers/sqlite/auth.store.js +0 -176
  542. package/dist/esm/store/providers/sqlite/connection.js +0 -240
  543. package/dist/esm/store/providers/sqlite/contact.store.js +0 -61
  544. package/dist/esm/store/providers/sqlite/device-list.store.js +0 -155
  545. package/dist/esm/store/providers/sqlite/message.store.js +0 -119
  546. package/dist/esm/store/providers/sqlite/migrations.js +0 -347
  547. package/dist/esm/store/providers/sqlite/participants.store.js +0 -85
  548. package/dist/esm/store/providers/sqlite/retry.store.js +0 -144
  549. package/dist/esm/store/providers/sqlite/sender-key.store.js +0 -203
  550. package/dist/esm/store/providers/sqlite/signal.store.js +0 -353
  551. package/dist/esm/store/providers/sqlite/thread.store.js +0 -72
  552. package/dist/esm/util/base64.js +0 -18
  553. package/dist/esm/util/signal-address.js +0 -5
  554. package/dist/retry/outbound.js +0 -88
  555. package/dist/store/providers/sqlite/BaseSqliteStore.js +0 -41
  556. package/dist/store/providers/sqlite/appstate.store.js +0 -173
  557. package/dist/store/providers/sqlite/auth.store.js +0 -180
  558. package/dist/store/providers/sqlite/connection.js +0 -276
  559. package/dist/store/providers/sqlite/contact.store.js +0 -65
  560. package/dist/store/providers/sqlite/device-list.store.js +0 -159
  561. package/dist/store/providers/sqlite/message.store.js +0 -123
  562. package/dist/store/providers/sqlite/migrations.js +0 -350
  563. package/dist/store/providers/sqlite/participants.store.js +0 -89
  564. package/dist/store/providers/sqlite/retry.store.js +0 -148
  565. package/dist/store/providers/sqlite/sender-key.store.js +0 -207
  566. package/dist/store/providers/sqlite/signal.store.js +0 -357
  567. package/dist/store/providers/sqlite/thread.store.js +0 -76
  568. package/dist/types/appstate/store/sqlite.d.ts +0 -21
  569. package/dist/types/crypto/core/constants.d.ts +0 -1
  570. package/dist/types/crypto/core/encoding.d.ts +0 -11
  571. package/dist/types/retry/outbound.d.ts +0 -4
  572. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +0 -12
  573. package/dist/types/store/providers/sqlite/appstate.store.d.ts +0 -15
  574. package/dist/types/store/providers/sqlite/auth.store.d.ts +0 -10
  575. package/dist/types/store/providers/sqlite/connection.d.ts +0 -10
  576. package/dist/types/store/providers/sqlite/contact.store.d.ts +0 -10
  577. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -18
  578. package/dist/types/store/providers/sqlite/message.store.d.ts +0 -11
  579. package/dist/types/store/providers/sqlite/migrations.d.ts +0 -3
  580. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -13
  581. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -16
  582. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -25
  583. package/dist/types/store/providers/sqlite/signal.store.d.ts +0 -46
  584. package/dist/types/store/providers/sqlite/thread.store.d.ts +0 -11
  585. package/dist/types/util/base64.d.ts +0 -4
  586. package/dist/types/util/signal-address.d.ts +0 -2
  587. package/dist/util/base64.js +0 -24
  588. package/dist/util/signal-address.js +0 -8
  589. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -0,0 +1,36 @@
1
+ import type { WaProfilePictureType } from '../../transport/node/builders/profile';
2
+ import type { BinaryNode } from '../../transport/types';
3
+ export interface WaProfilePictureResult {
4
+ readonly url?: string;
5
+ readonly directPath?: string;
6
+ readonly id?: string;
7
+ readonly type?: string;
8
+ }
9
+ export interface WaProfileStatusResult {
10
+ readonly status: string | null;
11
+ }
12
+ export interface WaProfileInfo {
13
+ readonly jid: string;
14
+ readonly pictureId?: number;
15
+ readonly status?: string | null;
16
+ }
17
+ export interface WaDisappearingModeResult {
18
+ readonly duration: number;
19
+ readonly timestamp: number;
20
+ readonly ephemeralityDisabled?: boolean;
21
+ }
22
+ export interface WaProfileCoordinator {
23
+ readonly getProfilePicture: (jid: string, type?: WaProfilePictureType, existingId?: string) => Promise<WaProfilePictureResult>;
24
+ readonly setProfilePicture: (imageBytes: Uint8Array, targetJid?: string) => Promise<string | null>;
25
+ readonly deleteProfilePicture: (targetJid?: string) => Promise<void>;
26
+ readonly getStatus: (jid: string) => Promise<WaProfileStatusResult>;
27
+ readonly setStatus: (text: string) => Promise<void>;
28
+ readonly getProfiles: (jids: readonly string[]) => Promise<readonly WaProfileInfo[]>;
29
+ readonly getDisappearingMode: (jids: readonly string[]) => Promise<readonly WaDisappearingModeResult[]>;
30
+ }
31
+ interface WaProfileCoordinatorOptions {
32
+ readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
33
+ readonly generateSid: () => Promise<string>;
34
+ }
35
+ export declare function createProfileCoordinator(options: WaProfileCoordinatorOptions): WaProfileCoordinator;
36
+ export {};
@@ -38,6 +38,8 @@ export declare class WaRetryCoordinator {
38
38
  private readonly getCurrentMeLid;
39
39
  private readonly getCurrentSignedIdentity;
40
40
  private readonly retryProcessingByMessageId;
41
+ private readonly retrySessionBaseKeys;
42
+ private nextRetryCleanupAtMs;
41
43
  constructor(options: WaRetryCoordinatorOptions);
42
44
  onDecryptFailure(context: WaRetryDecryptFailureContext, error: unknown): Promise<boolean>;
43
45
  handleIncomingRetryReceipt(receiptNode: BinaryNode): Promise<void>;
@@ -51,11 +53,17 @@ export declare class WaRetryCoordinator {
51
53
  private runRetryTaskSerialized;
52
54
  private buildRetryKeysSection;
53
55
  private updateLocalSessionFromRetryRequest;
56
+ private applySessionBaseKeyPolicy;
54
57
  private markRetryRequesterSenderKeyAsStale;
55
58
  private fetchMissingPreKeysSession;
56
59
  private authorizeRetryRequest;
57
60
  private isRequesterAuthorizedDevice;
58
61
  private mapOutboundStateFromReceiptType;
59
62
  private sendRetryAckSafe;
63
+ private maybeCleanupRetryStore;
64
+ private retrySessionBaseKeyMapKey;
65
+ private setRetrySessionBaseKey;
66
+ private getRetrySessionBaseKey;
67
+ private cleanupRetrySessionBaseKeys;
60
68
  }
61
69
  export {};
@@ -1,4 +1,5 @@
1
1
  import type { Logger } from '../../infra/log/types';
2
+ import type { WaConnectionCode, WaConnectionOpenReason, WaDisconnectReason } from '../../protocol/stream';
2
3
  import type { WaStreamControlNodeResult } from '../../transport/stream/parse';
3
4
  import type { WaComms } from '../../transport/WaComms';
4
5
  interface WaStreamControlCoordinatorOptions {
@@ -6,9 +7,9 @@ interface WaStreamControlCoordinatorOptions {
6
7
  readonly getComms: () => WaComms | null;
7
8
  readonly clearPendingQueries: (error: Error) => void;
8
9
  readonly clearMediaConnCache: () => void;
9
- readonly disconnect: () => Promise<void>;
10
+ readonly disconnect: (reason: WaDisconnectReason, isLogout: boolean, code: WaConnectionCode | null) => Promise<void>;
10
11
  readonly clearStoredCredentials: () => Promise<void>;
11
- readonly connect: () => Promise<void>;
12
+ readonly connect: (reason: WaConnectionOpenReason) => Promise<void>;
12
13
  }
13
14
  export interface WaStreamControlHandler {
14
15
  readonly handleStreamControlResult: (result: WaStreamControlNodeResult) => Promise<void>;
@@ -0,0 +1,45 @@
1
+ import type { ParsedPrivacyToken } from '../events/privacy-token';
2
+ import type { WaClientEventMap } from '../types';
3
+ import type { Logger } from '../../infra/log/types';
4
+ import type { WaPrivacyTokenStore } from '../../store/contracts/privacy-token.store';
5
+ import type { BinaryNode } from '../../transport/types';
6
+ type WaTrustedContactTokenRuntime = {
7
+ readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
8
+ readonly emitEvent: <K extends keyof WaClientEventMap>(event: K, ...args: Parameters<WaClientEventMap[K]>) => void;
9
+ readonly getCurrentMeLid: () => string | null;
10
+ };
11
+ export declare class WaTrustedContactTokenCoordinator {
12
+ private readonly logger;
13
+ private readonly store;
14
+ private readonly runtime;
15
+ private readonly config;
16
+ private readonly csTokenGenerator;
17
+ private readonly senderTokenDedup;
18
+ private cachedNctSalt;
19
+ private nctSaltHydrated;
20
+ constructor(options: {
21
+ readonly logger: Logger;
22
+ readonly store: WaPrivacyTokenStore;
23
+ readonly runtime: WaTrustedContactTokenRuntime;
24
+ readonly durationS?: number;
25
+ readonly numBuckets?: number;
26
+ readonly senderDurationS?: number;
27
+ readonly senderNumBuckets?: number;
28
+ readonly maxDurationS?: number;
29
+ });
30
+ resolveTokenForMessage(recipientJid: string): Promise<BinaryNode | null>;
31
+ handleIncomingToken(fromJid: string, tokens: readonly ParsedPrivacyToken[]): Promise<void>;
32
+ maybeIssueSenderToken(recipientJid: string): Promise<void>;
33
+ reissueOnIdentityChange(jid: string): Promise<void>;
34
+ hydrateFromHistorySync(conversations: readonly {
35
+ readonly jid: string;
36
+ readonly tcToken?: Uint8Array | null;
37
+ readonly tcTokenTimestamp?: number | null;
38
+ readonly tcTokenSenderTimestamp?: number | null;
39
+ }[]): Promise<void>;
40
+ handleNctSaltSync(salt: Uint8Array | null): Promise<void>;
41
+ hydrateNctSaltFromHistorySync(salt: Uint8Array): Promise<void>;
42
+ private getNctSalt;
43
+ private issuePrivacyToken;
44
+ }
45
+ export {};
@@ -11,6 +11,7 @@ interface WaDirtySyncRuntime {
11
11
  readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
12
12
  readonly getCurrentCredentials: () => WaAuthCredentials | null;
13
13
  readonly syncAppState: () => Promise<void>;
14
+ readonly generateUsyncSid: () => Promise<string>;
14
15
  }
15
16
  export declare function parseDirtyBits(nodes: readonly BinaryNode[], logger: Logger): readonly WaDirtyBit[];
16
17
  export declare function handleDirtyBits(runtime: WaDirtySyncRuntime, dirtyBits: readonly WaDirtyBit[]): Promise<void>;
@@ -0,0 +1,20 @@
1
+ import type { BinaryNode } from '../../transport/types';
2
+ export declare const DEVICE_NOTIFICATION_ACTIONS: Readonly<{
3
+ readonly ADD: "add";
4
+ readonly REMOVE: "remove";
5
+ readonly UPDATE: "update";
6
+ }>;
7
+ export type DeviceNotificationAction = (typeof DEVICE_NOTIFICATION_ACTIONS)[keyof typeof DEVICE_NOTIFICATION_ACTIONS];
8
+ export interface DeviceNotificationDevice {
9
+ readonly deviceId: number;
10
+ readonly keyIndex: number | null;
11
+ }
12
+ export interface DeviceNotification {
13
+ readonly action: DeviceNotificationAction;
14
+ readonly stanzaId: string;
15
+ readonly fromJid: string;
16
+ readonly lid: string | undefined;
17
+ readonly hash: string | undefined;
18
+ readonly devices: readonly DeviceNotificationDevice[];
19
+ }
20
+ export declare function parseDeviceNotification(node: BinaryNode): DeviceNotification | null;
@@ -1,7 +1,8 @@
1
- import type { WaGroupEvent, WaIncomingUnhandledStanzaEvent } from '../types';
1
+ import type { WaGroupEvent, WaGroupEventParticipant, WaIncomingUnhandledStanzaEvent } from '../types';
2
2
  import type { BinaryNode } from '../../transport/types';
3
3
  export interface WaParseGroupNotificationResult {
4
4
  readonly events: readonly WaGroupEvent[];
5
5
  readonly unhandled: readonly WaIncomingUnhandledStanzaEvent[];
6
6
  }
7
+ export declare function parseParticipants(node: BinaryNode): readonly WaGroupEventParticipant[];
7
8
  export declare function parseGroupNotificationEvents(notificationNode: BinaryNode): WaParseGroupNotificationResult;
@@ -0,0 +1,9 @@
1
+ import type { BinaryNode } from '../../transport/types';
2
+ export interface IdentityChangeNotification {
3
+ readonly fromJid: string;
4
+ readonly stanzaId: string;
5
+ readonly displayName: string | undefined;
6
+ readonly lid: string | undefined;
7
+ readonly offline: string | undefined;
8
+ }
9
+ export declare function parseIdentityChangeNotification(node: BinaryNode): IdentityChangeNotification | null;
@@ -0,0 +1,7 @@
1
+ import type { BinaryNode } from '../../transport/types';
2
+ export interface ParsedPrivacyToken {
3
+ readonly type: string;
4
+ readonly tokenBytes: Uint8Array;
5
+ readonly timestampS: number;
6
+ }
7
+ export declare function parsePrivacyTokenNotification(node: BinaryNode): readonly ParsedPrivacyToken[];
@@ -1,17 +1,20 @@
1
+ import type { WriteBehindPersistence } from './persistence/WriteBehindPersistence';
1
2
  import type { WaClientEventMap } from './types';
2
3
  import type { Logger } from '../infra/log/types';
3
4
  import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
4
5
  import { type Proto } from '..';
5
- import type { WaContactStore } from '../store/contracts/contact.store';
6
- import type { WaMessageStore } from '../store/contracts/message.store';
7
- import type { WaThreadStore } from '../store/contracts/thread.store';
8
6
  interface WaHistorySyncDeps {
9
7
  readonly logger: Logger;
10
8
  readonly mediaTransfer: WaMediaTransferClient;
11
- readonly contactStore: WaContactStore;
12
- readonly messageStore: WaMessageStore;
13
- readonly threadStore: WaThreadStore;
9
+ readonly writeBehind: WriteBehindPersistence;
14
10
  readonly emitEvent: <K extends keyof WaClientEventMap>(event: K, ...args: Parameters<WaClientEventMap[K]>) => void;
11
+ readonly onPrivacyTokens?: (conversations: readonly {
12
+ readonly jid: string;
13
+ readonly tcToken?: Uint8Array | null;
14
+ readonly tcTokenTimestamp?: number | null;
15
+ readonly tcTokenSenderTimestamp?: number | null;
16
+ }[]) => Promise<void>;
17
+ readonly onNctSalt?: (salt: Uint8Array) => Promise<void>;
15
18
  }
16
19
  export declare function processHistorySyncNotification(deps: WaHistorySyncDeps, notification: Proto.Message.IHistorySyncNotification): Promise<void>;
17
20
  export {};
@@ -1,5 +1,6 @@
1
1
  import type { WaIncomingBaseEvent, WaIncomingFailureEvent, WaIncomingNotificationEvent, WaIncomingReceiptEvent, WaIncomingUnhandledStanzaEvent, WaGroupEvent } from './types';
2
2
  import type { Logger } from '../infra/log/types';
3
+ import type { WaConnectionCode, WaDisconnectReason } from '../protocol/stream';
3
4
  import type { BinaryNode } from '../transport/types';
4
5
  interface IncomingAckRuntime {
5
6
  readonly logger: Logger;
@@ -13,7 +14,8 @@ type IncomingReceiptHandlerOptions = IncomingAckRuntime & {
13
14
  type IncomingFailureHandlerOptions = {
14
15
  readonly logger: Logger;
15
16
  readonly emitIncomingFailure: (event: WaIncomingFailureEvent) => void;
16
- readonly disconnect: () => Promise<void>;
17
+ readonly stopComms: () => void;
18
+ readonly disconnect: (reason: WaDisconnectReason, isLogout: boolean, code: WaConnectionCode | null) => Promise<void>;
17
19
  readonly clearStoredCredentials: () => Promise<void>;
18
20
  };
19
21
  type IncomingNotificationHandlerOptions = IncomingAckRuntime & {
@@ -1,2 +1,2 @@
1
1
  export { WaClient } from './WaClient';
2
- export type { WaChatEvent, WaChatEventAction, WaChatEventSource, WaClientEventMap, WaClientOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions } from './types';
2
+ export type { WaAppStateMessageKey, WaClientProxyOptions, WaClearChatOptions, WaChatEvent, WaChatEventAction, WaChatEventSource, WaClientEventMap, WaClientOptions, WaConnectionEvent, WaDeleteChatOptions, WaDeleteMessageForMeOptions, WaHistorySyncChunkEvent, WaHistorySyncOptions, WaLogoutStoreClearOptions, WaWriteBehindOptions } from './types';
@@ -1,12 +1,10 @@
1
+ import type { WriteBehindPersistence } from './persistence/WriteBehindPersistence';
1
2
  import type { WaIncomingMessageEvent } from './types';
2
3
  import type { Logger } from '../infra/log/types';
3
- import type { WaContactStore } from '../store/contracts/contact.store';
4
- import type { WaMessageStore } from '../store/contracts/message.store';
5
4
  interface WaPersistIncomingMailboxOptions {
6
5
  readonly logger: Logger;
7
- readonly contactStore: WaContactStore;
8
- readonly messageStore: WaMessageStore;
6
+ readonly writeBehind: WriteBehindPersistence;
9
7
  readonly event: WaIncomingMessageEvent;
10
8
  }
11
- export declare function persistIncomingMailboxEntities(options: WaPersistIncomingMailboxOptions): Promise<void>;
9
+ export declare function persistIncomingMailboxEntities(options: WaPersistIncomingMailboxOptions): void;
12
10
  export {};
@@ -4,7 +4,7 @@ import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
4
4
  import type { WaSendMessageContent } from '../message/types';
5
5
  import type { Proto } from '..';
6
6
  import type { BinaryNode } from '../transport/types';
7
- interface WaMediaMessageOptions {
7
+ export interface WaMediaMessageOptions {
8
8
  readonly logger: Logger;
9
9
  readonly mediaTransfer: WaMediaTransferClient;
10
10
  readonly iqTimeoutMs?: number;
@@ -14,4 +14,3 @@ interface WaMediaMessageOptions {
14
14
  }
15
15
  export declare function buildMediaMessageContent(options: WaMediaMessageOptions, content: WaSendMessageContent): Promise<Proto.IMessage>;
16
16
  export declare function getMediaConn(options: WaMediaMessageOptions, forceRefresh?: boolean): Promise<WaMediaConn>;
17
- export {};
@@ -0,0 +1,14 @@
1
+ import type { Logger } from '../../infra/log/types';
2
+ import type { SignalDeviceSyncApi } from '../../signal/api/SignalDeviceSyncApi';
3
+ export type DeviceFanoutResolver = {
4
+ resolveDirectFanoutDeviceJids(recipientJid: string, selfDeviceJid: string): Promise<readonly string[]>;
5
+ resolveGroupParticipantDeviceJids(participantUserJids: readonly string[]): Promise<readonly string[]>;
6
+ resolveOwnPeerDeviceJids(): Promise<readonly string[]>;
7
+ resolveSelfDeviceJidForRecipient(recipientJid: string, meJid: string, meLid: string | null | undefined): string;
8
+ };
9
+ export declare function createDeviceFanoutResolver(options: {
10
+ readonly signalDeviceSync: SignalDeviceSyncApi;
11
+ readonly getCurrentMeJid: () => string | null | undefined;
12
+ readonly getCurrentMeLid: () => string | null | undefined;
13
+ readonly logger: Logger;
14
+ }): DeviceFanoutResolver;
@@ -0,0 +1,18 @@
1
+ import type { WaAppStateSyncKey } from '../../appstate/types';
2
+ import type { DeviceFanoutResolver } from '../messaging/fanout';
3
+ import type { WaSignalMessagePublishInput } from '../types';
4
+ import type { Logger } from '../../infra/log/types';
5
+ import type { WaMessagePublishOptions, WaMessagePublishResult } from '../../message/types';
6
+ type PublishSignalMessageFn = (input: WaSignalMessagePublishInput, options?: WaMessagePublishOptions) => Promise<WaMessagePublishResult>;
7
+ export type AppStateSyncKeyProtocol = {
8
+ requestKeys(keyIds: readonly Uint8Array[]): Promise<readonly string[]>;
9
+ sendKeyShare(toDeviceJid: string, keys: readonly WaAppStateSyncKey[], missingKeyIds?: readonly Uint8Array[]): Promise<void>;
10
+ };
11
+ export declare function createAppStateSyncKeyProtocol(options: {
12
+ readonly publishSignalMessage: PublishSignalMessageFn;
13
+ readonly fanoutResolver: DeviceFanoutResolver;
14
+ readonly getCurrentMeJid: () => string | null | undefined;
15
+ readonly getCurrentMeLid: () => string | null | undefined;
16
+ readonly logger: Logger;
17
+ }): AppStateSyncKeyProtocol;
18
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { WaGroupEvent } from '../types';
2
+ import type { Logger } from '../../infra/log/types';
3
+ import type { WaParticipantsStore } from '../../store/contracts/participants.store';
4
+ export type GroupParticipantsCache = {
5
+ resolveParticipantUsers(groupJid: string): Promise<readonly string[]>;
6
+ refreshParticipantUsers(groupJid: string): Promise<readonly string[]>;
7
+ mutateFromGroupEvent(event: WaGroupEvent): Promise<void>;
8
+ };
9
+ export declare function createGroupParticipantsCache(options: {
10
+ readonly participantsStore: WaParticipantsStore;
11
+ readonly queryGroupParticipantJids: (groupJid: string) => Promise<readonly string[]>;
12
+ readonly logger: Logger;
13
+ }): GroupParticipantsCache;
@@ -0,0 +1,34 @@
1
+ import type { WaWriteBehindOptions } from '../types';
2
+ import type { Logger } from '../../infra/log/types';
3
+ import type { BackgroundQueueFlushResult } from '../../infra/perf/BackgroundQueue';
4
+ import type { WaContactStore, WaStoredContactRecord } from '../../store/contracts/contact.store';
5
+ import type { WaMessageStore, WaStoredMessageRecord } from '../../store/contracts/message.store';
6
+ import type { WaStoredThreadRecord, WaThreadStore } from '../../store/contracts/thread.store';
7
+ interface WriteBehindStores {
8
+ readonly messageStore: WaMessageStore;
9
+ readonly threadStore: WaThreadStore;
10
+ readonly contactStore: WaContactStore;
11
+ }
12
+ export interface WriteBehindDrainResult {
13
+ readonly messages: BackgroundQueueFlushResult;
14
+ readonly threads: BackgroundQueueFlushResult;
15
+ readonly contacts: BackgroundQueueFlushResult;
16
+ readonly flushed: number;
17
+ readonly remaining: number;
18
+ }
19
+ export declare class WriteBehindPersistence {
20
+ private readonly logger;
21
+ private readonly queues;
22
+ private readonly flushTimeoutMs;
23
+ constructor(stores: WriteBehindStores, logger: Logger, options?: WaWriteBehindOptions);
24
+ persistMessage(record: WaStoredMessageRecord): void;
25
+ persistMessageAsync(record: WaStoredMessageRecord): Promise<void>;
26
+ persistThread(record: WaStoredThreadRecord): void;
27
+ persistThreadAsync(record: WaStoredThreadRecord): Promise<void>;
28
+ persistContact(record: WaStoredContactRecord): void;
29
+ persistContactAsync(record: WaStoredContactRecord): Promise<void>;
30
+ flush(timeoutMs?: number): Promise<WriteBehindDrainResult>;
31
+ destroy(timeoutMs?: number): Promise<WriteBehindDrainResult>;
32
+ private toDrainResult;
33
+ }
34
+ export {};
@@ -0,0 +1,10 @@
1
+ export declare class CsTokenGenerator {
2
+ private cachedKey;
3
+ private cachedSalt;
4
+ private readonly cache;
5
+ constructor();
6
+ generate(nctSalt: Uint8Array, accountLid: string): Promise<Uint8Array>;
7
+ invalidate(): void;
8
+ private isSameSalt;
9
+ private resolveKey;
10
+ }
@@ -0,0 +1,5 @@
1
+ export declare function computeBucket(unixTimeS: number, durationS: number): number;
2
+ export declare function tokenExpirationCutoffS(nowS: number, durationS: number, numBuckets: number): number;
3
+ export declare function isTokenExpired(tokenTimestampS: number, nowS: number, durationS: number, numBuckets: number): boolean;
4
+ export declare function shouldSendNewToken(senderTimestampS: number, nowS: number, senderDurationS: number): boolean;
5
+ export declare function clampDuration(durationS: number, maxDurationS: number): number;
@@ -2,11 +2,31 @@ import type { AppStateCollectionName } from '../appstate/types';
2
2
  import type { WaAuthClientOptions, WaAuthCredentials, WaAuthSocketOptions } from '../auth/types';
3
3
  import type { WaMessagePublishOptions } from '../message/types';
4
4
  import type { Proto } from '..';
5
+ import type { WaConnectionCode, WaConnectionOpenReason, WaDisconnectReason } from '../protocol/stream';
5
6
  import type { WaStore } from '../store/types';
6
- import type { BinaryNode } from '../transport/types';
7
+ import type { BinaryNode, WaProxyTransport } from '../transport/types';
8
+ export interface WaClientProxyOptions {
9
+ readonly ws?: WaProxyTransport;
10
+ readonly mediaUpload?: WaProxyTransport;
11
+ readonly mediaDownload?: WaProxyTransport;
12
+ }
13
+ export interface WaLogoutStoreClearOptions {
14
+ readonly auth?: boolean;
15
+ readonly signal?: boolean;
16
+ readonly senderKey?: boolean;
17
+ readonly appState?: boolean;
18
+ readonly retry?: boolean;
19
+ readonly participants?: boolean;
20
+ readonly deviceList?: boolean;
21
+ readonly messages?: boolean;
22
+ readonly threads?: boolean;
23
+ readonly contacts?: boolean;
24
+ readonly privacyToken?: boolean;
25
+ }
7
26
  export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOptions {
8
27
  readonly store: WaStore;
9
28
  readonly sessionId: string;
29
+ readonly proxy?: WaClientProxyOptions;
10
30
  readonly chatSocketUrls?: readonly string[];
11
31
  readonly iqTimeoutMs?: number;
12
32
  readonly nodeQueryTimeoutMs?: number;
@@ -18,10 +38,25 @@ export interface WaClientOptions extends WaAuthClientOptions, WaAuthSocketOption
18
38
  readonly messageAckTimeoutMs?: number;
19
39
  readonly messageMaxAttempts?: number;
20
40
  readonly messageRetryDelayMs?: number;
41
+ readonly writeBehind?: WaWriteBehindOptions;
21
42
  readonly history?: WaHistorySyncOptions;
22
43
  readonly chatEvents?: {
23
44
  readonly emitSnapshotMutations?: boolean;
24
45
  };
46
+ readonly privacyToken?: WaPrivacyTokenOptions;
47
+ readonly logoutStoreClear?: WaLogoutStoreClearOptions;
48
+ }
49
+ export interface WaPrivacyTokenOptions {
50
+ readonly tcTokenDurationS?: number;
51
+ readonly tcTokenNumBuckets?: number;
52
+ readonly tcTokenSenderDurationS?: number;
53
+ readonly tcTokenSenderNumBuckets?: number;
54
+ readonly tcTokenMaxDurationS?: number;
55
+ }
56
+ export interface WaWriteBehindOptions {
57
+ readonly maxPendingKeys?: number;
58
+ readonly maxWriteConcurrency?: number;
59
+ readonly flushTimeoutMs?: number;
25
60
  }
26
61
  export interface WaHistorySyncOptions {
27
62
  readonly enabled?: boolean;
@@ -41,6 +76,24 @@ export interface WaSignalMessagePublishInput {
41
76
  export interface WaSendMessageOptions extends WaMessagePublishOptions {
42
77
  readonly id?: string;
43
78
  readonly expectedIdentity?: Uint8Array;
79
+ readonly subtype?: string;
80
+ }
81
+ export interface WaClearChatOptions {
82
+ readonly deleteStarred?: boolean;
83
+ readonly deleteMedia?: boolean;
84
+ }
85
+ export interface WaDeleteChatOptions {
86
+ readonly deleteMedia?: boolean;
87
+ }
88
+ export interface WaAppStateMessageKey {
89
+ readonly chatJid: string;
90
+ readonly id: string;
91
+ readonly fromMe: boolean;
92
+ readonly participantJid?: string;
93
+ }
94
+ export interface WaDeleteMessageForMeOptions {
95
+ readonly deleteMedia?: boolean;
96
+ readonly messageTimestampMs?: number;
44
97
  }
45
98
  export type WaIncomingNodeHandler = (node: BinaryNode) => Promise<boolean>;
46
99
  export interface WaIncomingNodeHandlerRegistration {
@@ -178,7 +231,19 @@ export interface WaChatEvent {
178
231
  readonly locked?: boolean;
179
232
  readonly deviceAgentId?: string;
180
233
  }
181
- export type WaEmptyEvent = Readonly<Record<string, never>>;
234
+ export type WaConnectionEvent = {
235
+ readonly status: 'open';
236
+ readonly reason: WaConnectionOpenReason;
237
+ readonly code: null;
238
+ readonly isLogout: false;
239
+ readonly isNewLogin: boolean;
240
+ } | {
241
+ readonly status: 'close';
242
+ readonly reason: WaDisconnectReason;
243
+ readonly code: WaConnectionCode | null;
244
+ readonly isLogout: boolean;
245
+ readonly isNewLogin: false;
246
+ };
182
247
  export interface WaClientEventMap {
183
248
  readonly auth_qr: (event: {
184
249
  readonly qr: string;
@@ -199,8 +264,7 @@ export interface WaClientEventMap {
199
264
  readonly client_error: (event: {
200
265
  readonly error: Error;
201
266
  }) => void;
202
- readonly connection_open: (event: WaEmptyEvent) => void;
203
- readonly connection_close: (event: WaEmptyEvent) => void;
267
+ readonly connection: (event: WaConnectionEvent) => void;
204
268
  readonly transport_frame_in: (event: {
205
269
  readonly frame: Uint8Array;
206
270
  }) => void;
@@ -232,4 +296,11 @@ export interface WaClientEventMap {
232
296
  readonly group_event: (event: WaGroupEvent) => void;
233
297
  readonly chat_event: (event: WaChatEvent) => void;
234
298
  readonly history_sync_chunk: (event: WaHistorySyncChunkEvent) => void;
299
+ readonly privacy_token_update: (event: WaPrivacyTokenUpdateEvent) => void;
300
+ }
301
+ export interface WaPrivacyTokenUpdateEvent {
302
+ readonly jid: string;
303
+ readonly timestampS: number;
304
+ readonly type: string;
305
+ readonly source: 'notification' | 'history_sync';
235
306
  }
@@ -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,9 +3,8 @@
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';
10
- export { randomBytesAsync, randomIntAsync } from '../core/random';
11
- 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';
@@ -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;
@@ -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,8 +1,3 @@
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 function randomFillAsync(target: Uint8Array, offset?: number, size?: number): Promise<Uint8Array>;
3
+ export declare const randomIntAsync: (min: number, max: number) => Promise<number>;
@@ -1,3 +1,2 @@
1
1
  export * from './core';
2
- export { Ed25519 } from './curves/Ed25519';
3
2
  export { X25519 } from './curves/X25519';
@@ -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
  }