zapo-js 0.2.0 → 1.0.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 (863) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -179
  3. package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +79 -62
  4. package/dist/appstate/index.js +8 -7
  5. package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
  6. package/dist/appstate/{WaAppStateSyncResponseParser.js → parsers/response-parser.js} +20 -8
  7. package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +246 -88
  8. package/dist/appstate/utils.js +16 -0
  9. package/dist/appstate-spec.js +89 -0
  10. package/dist/auth/WaAuthClient.js +117 -13
  11. package/dist/auth/credentials-flow.js +207 -0
  12. package/dist/auth/pairing/WaPairingFlow.js +53 -47
  13. package/dist/auth/pairing/pairing-code-crypto.js +91 -0
  14. package/dist/client/WaClient.js +369 -460
  15. package/dist/client/WaClientFactory.js +377 -93
  16. package/dist/client/connection/WaConnectionManager.js +31 -11
  17. package/dist/client/coordinators/WaAbPropsCoordinator.js +140 -0
  18. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +663 -143
  19. package/dist/client/coordinators/WaBotCoordinator.js +345 -0
  20. package/dist/client/coordinators/WaBroadcastListCoordinator.js +20 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +81 -180
  22. package/dist/client/coordinators/WaEmailCoordinator.js +64 -0
  23. package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
  24. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +130 -20
  25. package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
  26. package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
  27. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +724 -216
  28. package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
  29. package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
  30. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +53 -22
  31. package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
  32. package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
  33. package/dist/client/coordinators/WaProfileCoordinator.js +223 -50
  34. package/dist/client/coordinators/WaRetryCoordinator.js +256 -123
  35. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  36. package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
  37. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +29 -10
  38. package/dist/client/events/abprops.js +43 -0
  39. package/dist/client/events/appstate-mutation.js +133 -0
  40. package/dist/client/events/business.js +375 -0
  41. package/dist/client/events/call.js +58 -0
  42. package/dist/client/events/chatstate.js +23 -0
  43. package/dist/client/events/devices.js +15 -16
  44. package/dist/client/{dirty.js → events/dirty.js} +34 -20
  45. package/dist/client/events/group.js +13 -24
  46. package/dist/client/events/identity.js +2 -1
  47. package/dist/client/events/incoming.js +502 -0
  48. package/dist/client/events/mex-notification.js +181 -0
  49. package/dist/client/events/picture.js +33 -0
  50. package/dist/client/events/presence.js +44 -0
  51. package/dist/client/events/privacy-token.js +1 -2
  52. package/dist/client/events/receipt.js +26 -0
  53. package/dist/client/events/registration.js +42 -0
  54. package/dist/client/media.js +400 -0
  55. package/dist/client/messaging/fanout.js +9 -10
  56. package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
  57. package/dist/client/messaging/ignore-key.js +132 -0
  58. package/dist/client/messaging/key-protocol.js +3 -17
  59. package/dist/client/messaging/link-preview.js +159 -0
  60. package/dist/client/messaging/messages.js +671 -0
  61. package/dist/client/newsletter/admin.js +165 -0
  62. package/dist/client/newsletter/content.js +253 -0
  63. package/dist/client/newsletter/discovery.js +115 -0
  64. package/dist/client/newsletter/messaging.js +197 -0
  65. package/dist/client/newsletter/mex.js +41 -0
  66. package/dist/client/newsletter/parse.js +217 -0
  67. package/dist/client/persistence/WriteBehindPersistence.js +31 -4
  68. package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
  69. package/dist/client/persistence/mailbox.js +104 -0
  70. package/dist/client/tokens/cs-token.js +11 -17
  71. package/dist/crypto/core/hkdf.js +12 -12
  72. package/dist/crypto/core/index.js +9 -8
  73. package/dist/crypto/core/keys.js +1 -8
  74. package/dist/crypto/core/nonce.js +12 -12
  75. package/dist/crypto/core/primitives.js +123 -93
  76. package/dist/crypto/core/random.js +9 -9
  77. package/dist/crypto/core/xeddsa.js +59 -0
  78. package/dist/crypto/curves/Ed25519.js +32 -21
  79. package/dist/crypto/curves/X25519.js +71 -17
  80. package/dist/crypto/curves/constants.js +3 -1
  81. package/dist/crypto/math/constants.js +1 -2
  82. package/dist/crypto/math/mod.js +0 -33
  83. package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +72 -55
  84. package/dist/esm/appstate/index.js +5 -5
  85. package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
  86. package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → parsers/response-parser.js} +20 -8
  87. package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +235 -76
  88. package/dist/esm/appstate/utils.js +16 -0
  89. package/dist/esm/appstate-spec.js +79 -0
  90. package/dist/esm/auth/WaAuthClient.js +114 -10
  91. package/dist/esm/auth/credentials-flow.js +202 -0
  92. package/dist/esm/auth/pairing/WaPairingFlow.js +52 -46
  93. package/dist/esm/auth/pairing/pairing-code-crypto.js +85 -0
  94. package/dist/esm/client/WaClient.js +372 -463
  95. package/dist/esm/client/WaClientFactory.js +380 -96
  96. package/dist/esm/client/connection/WaConnectionManager.js +31 -11
  97. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +136 -0
  98. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
  99. package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
  100. package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
  101. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +78 -177
  102. package/dist/esm/client/coordinators/WaEmailCoordinator.js +61 -0
  103. package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
  104. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +132 -22
  105. package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
  106. package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
  107. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +719 -211
  108. package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
  109. package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
  110. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +54 -23
  111. package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
  112. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
  113. package/dist/esm/client/coordinators/WaProfileCoordinator.js +226 -53
  114. package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -125
  115. package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
  116. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +6 -6
  117. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +31 -12
  118. package/dist/esm/client/events/abprops.js +40 -0
  119. package/dist/esm/client/events/appstate-mutation.js +130 -0
  120. package/dist/esm/client/events/business.js +370 -0
  121. package/dist/esm/client/events/call.js +55 -0
  122. package/dist/esm/client/events/chatstate.js +20 -0
  123. package/dist/esm/client/events/devices.js +15 -16
  124. package/dist/esm/client/{dirty.js → events/dirty.js} +34 -20
  125. package/dist/esm/client/events/group.js +14 -25
  126. package/dist/esm/client/events/identity.js +2 -1
  127. package/dist/esm/client/events/incoming.js +487 -0
  128. package/dist/esm/client/events/mex-notification.js +178 -0
  129. package/dist/esm/client/events/picture.js +30 -0
  130. package/dist/esm/client/events/presence.js +41 -0
  131. package/dist/esm/client/events/privacy-token.js +1 -2
  132. package/dist/esm/client/events/receipt.js +23 -0
  133. package/dist/esm/client/events/registration.js +39 -0
  134. package/dist/esm/client/media.js +384 -0
  135. package/dist/esm/client/messaging/fanout.js +10 -11
  136. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
  137. package/dist/esm/client/messaging/ignore-key.js +126 -0
  138. package/dist/esm/client/messaging/key-protocol.js +3 -17
  139. package/dist/esm/client/messaging/link-preview.js +156 -0
  140. package/dist/esm/client/messaging/messages.js +667 -0
  141. package/dist/esm/client/newsletter/admin.js +162 -0
  142. package/dist/esm/client/newsletter/content.js +249 -0
  143. package/dist/esm/client/newsletter/discovery.js +112 -0
  144. package/dist/esm/client/newsletter/messaging.js +194 -0
  145. package/dist/esm/client/newsletter/mex.js +37 -0
  146. package/dist/esm/client/newsletter/parse.js +200 -0
  147. package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
  148. package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
  149. package/dist/esm/client/persistence/mailbox.js +101 -0
  150. package/dist/esm/client/tokens/cs-token.js +12 -18
  151. package/dist/esm/crypto/core/hkdf.js +14 -14
  152. package/dist/esm/crypto/core/index.js +3 -2
  153. package/dist/esm/crypto/core/keys.js +1 -7
  154. package/dist/esm/crypto/core/nonce.js +11 -11
  155. package/dist/esm/crypto/core/primitives.js +121 -88
  156. package/dist/esm/crypto/core/random.js +8 -7
  157. package/dist/esm/crypto/core/xeddsa.js +55 -0
  158. package/dist/esm/crypto/curves/Ed25519.js +35 -24
  159. package/dist/esm/crypto/curves/X25519.js +74 -20
  160. package/dist/esm/crypto/curves/constants.js +2 -0
  161. package/dist/esm/crypto/math/constants.js +1 -2
  162. package/dist/esm/crypto/math/mod.js +0 -32
  163. package/dist/esm/index.js +7 -2
  164. package/dist/esm/infra/log/ConsoleLogger.js +30 -6
  165. package/dist/esm/infra/log/PinoLogger.js +64 -0
  166. package/dist/esm/infra/log/types.js +4 -2
  167. package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
  168. package/dist/esm/infra/perf/StoreLock.js +7 -4
  169. package/dist/esm/media/constants.js +35 -2
  170. package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
  171. package/dist/esm/media/index.js +4 -3
  172. package/dist/esm/media/processor.js +1 -0
  173. package/dist/esm/media/sticker/sticker-pack.js +133 -0
  174. package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +84 -196
  175. package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
  176. package/dist/esm/message/WaMessageClient.js +46 -15
  177. package/dist/esm/message/addons/link-preview/builder.js +36 -0
  178. package/dist/esm/message/addons/link-preview/detect.js +55 -0
  179. package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
  180. package/dist/esm/message/addons/link-preview/types.js +1 -0
  181. package/dist/esm/message/context-info.js +123 -0
  182. package/dist/esm/message/crypto/addon-crypto.js +244 -0
  183. package/dist/esm/message/{icdc.js → crypto/icdc.js} +11 -13
  184. package/dist/esm/message/crypto/phash.js +133 -0
  185. package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +7 -7
  186. package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +21 -4
  187. package/dist/esm/message/{content.js → encode/content.js} +183 -8
  188. package/dist/esm/message/encode/media-payload.js +42 -0
  189. package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
  190. package/dist/esm/message/index.js +2 -2
  191. package/dist/esm/message/kinds/bot.js +111 -0
  192. package/dist/esm/message/kinds/newsletter.js +244 -0
  193. package/dist/esm/message/kinds/sticker-pack.js +29 -0
  194. package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
  195. package/dist/esm/message/primitives/incoming.js +511 -0
  196. package/dist/esm/message/primitives/peer-data-operation.js +93 -0
  197. package/dist/esm/mex.js +1 -0
  198. package/dist/esm/protocol/abprops.js +169 -0
  199. package/dist/esm/protocol/appstate.js +6 -30
  200. package/dist/esm/protocol/auth.js +3 -2
  201. package/dist/esm/protocol/bot.js +77 -0
  202. package/dist/esm/protocol/browser.js +22 -0
  203. package/dist/esm/protocol/business.js +19 -0
  204. package/dist/esm/protocol/call.js +48 -0
  205. package/dist/esm/protocol/constants.js +10 -2
  206. package/dist/esm/protocol/defaults.js +3 -0
  207. package/dist/esm/protocol/email.js +30 -0
  208. package/dist/esm/protocol/index.js +1 -1
  209. package/dist/esm/protocol/jid.js +142 -11
  210. package/dist/esm/protocol/media.js +25 -12
  211. package/dist/esm/protocol/message.js +4 -1
  212. package/dist/esm/protocol/newsletter.js +61 -0
  213. package/dist/esm/protocol/nodes.js +26 -2
  214. package/dist/esm/protocol/notification.js +24 -2
  215. package/dist/esm/protocol/presence.js +13 -0
  216. package/dist/esm/protocol/status.js +6 -0
  217. package/dist/esm/retry/codec.js +5 -0
  218. package/dist/esm/retry/parse.js +20 -38
  219. package/dist/esm/retry/reason.js +6 -1
  220. package/dist/esm/retry/replay.js +131 -37
  221. package/dist/esm/retry/tracker.js +4 -8
  222. package/dist/esm/signal/api/SignalDeviceSyncApi.js +71 -21
  223. package/dist/esm/signal/api/SignalDigestSyncApi.js +15 -8
  224. package/dist/esm/signal/api/SignalIdentitySyncApi.js +13 -4
  225. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
  226. package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
  227. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
  228. package/dist/esm/signal/api/codec.js +52 -1
  229. package/dist/esm/signal/api/prekeys.js +4 -0
  230. package/dist/esm/signal/attestation/WaAdvSignature.js +17 -0
  231. package/dist/esm/signal/{crypto → attestation}/constants.js +0 -4
  232. package/dist/esm/signal/constants.js +3 -0
  233. package/dist/esm/signal/encoding.js +6 -332
  234. package/dist/esm/signal/group/SenderKeyChain.js +20 -35
  235. package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
  236. package/dist/esm/signal/group/SenderKeyManager.js +37 -17
  237. package/dist/esm/signal/group/encoding.js +96 -0
  238. package/dist/esm/signal/index.js +4 -1
  239. package/dist/esm/signal/registration/encoding.js +34 -0
  240. package/dist/esm/signal/registration/keygen.js +12 -3
  241. package/dist/esm/signal/registration/utils.js +8 -2
  242. package/dist/esm/signal/session/SignalProtocol.js +129 -26
  243. package/dist/esm/signal/session/SignalRatchet.js +46 -64
  244. package/dist/esm/signal/session/SignalSerializer.js +5 -6
  245. package/dist/esm/signal/session/SignalSession.js +14 -19
  246. package/dist/esm/signal/session/encoding.js +173 -0
  247. package/dist/esm/signal/session/resolver.js +144 -35
  248. package/dist/esm/store/cache/identity.cache.js +75 -0
  249. package/dist/esm/store/cache/privacy-token.cache.js +57 -0
  250. package/dist/esm/store/cache/sender-key.cache.js +101 -0
  251. package/dist/esm/store/cache/session.cache.js +92 -0
  252. package/dist/esm/store/contracts/group-metadata.store.js +1 -0
  253. package/dist/esm/store/contracts/identity.store.js +1 -0
  254. package/dist/esm/store/contracts/message-secret.store.js +1 -0
  255. package/dist/esm/store/contracts/pre-key.store.js +1 -0
  256. package/dist/esm/store/contracts/session.store.js +1 -0
  257. package/dist/esm/store/createStore.js +129 -39
  258. package/dist/esm/store/index.js +15 -10
  259. package/dist/esm/store/locks/contact.lock.js +1 -0
  260. package/dist/esm/store/locks/device-list.lock.js +1 -0
  261. package/dist/esm/store/locks/group-metadata.lock.js +20 -0
  262. package/dist/esm/store/locks/identity.lock.js +16 -0
  263. package/dist/esm/store/locks/message-secret.lock.js +17 -0
  264. package/dist/esm/store/locks/pre-key.lock.js +27 -0
  265. package/dist/esm/store/locks/session.lock.js +19 -0
  266. package/dist/esm/store/locks/signal.lock.js +0 -24
  267. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  268. package/dist/esm/store/memory/auth.store.js +24 -0
  269. package/dist/esm/store/memory/contact.store.js +79 -0
  270. package/dist/esm/store/memory/device-list.store.js +103 -0
  271. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -12
  272. package/dist/esm/store/memory/identity.store.js +31 -0
  273. package/dist/esm/store/memory/message-secret.store.js +90 -0
  274. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  275. package/dist/esm/store/memory/pre-key.store.js +97 -0
  276. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  277. package/dist/esm/store/{providers/memory → memory}/retry.store.js +49 -14
  278. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  279. package/dist/esm/store/memory/session.store.js +45 -0
  280. package/dist/esm/store/memory/signal.store.js +36 -0
  281. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  282. package/dist/esm/store/noop.store.js +26 -4
  283. package/dist/esm/transport/WaComms.js +18 -8
  284. package/dist/esm/transport/WaWebSocket.js +41 -9
  285. package/dist/esm/transport/binary/constants.js +10 -4
  286. package/dist/esm/transport/binary/decoder.js +21 -15
  287. package/dist/esm/transport/binary/encoder.js +96 -21
  288. package/dist/esm/transport/binary/tokens.js +12 -12
  289. package/dist/esm/transport/index.js +7 -0
  290. package/dist/esm/transport/keepalive/WaKeepAlive.js +35 -12
  291. package/dist/esm/transport/node/WaMobileTcpSocket.js +120 -0
  292. package/dist/esm/transport/node/WaNodeOrchestrator.js +26 -13
  293. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  294. package/dist/esm/transport/node/builders/abprops.js +20 -0
  295. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  296. package/dist/esm/transport/node/builders/bot.js +38 -0
  297. package/dist/esm/transport/node/builders/business.js +30 -30
  298. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  299. package/dist/esm/transport/node/builders/community.js +53 -0
  300. package/dist/esm/transport/node/builders/device.js +11 -0
  301. package/dist/esm/transport/node/builders/email.js +66 -0
  302. package/dist/esm/transport/node/builders/global.js +1 -1
  303. package/dist/esm/transport/node/builders/group.js +114 -4
  304. package/dist/esm/transport/node/builders/media.js +2 -2
  305. package/dist/esm/transport/node/builders/message.js +83 -49
  306. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  307. package/dist/esm/transport/node/builders/offline.js +14 -0
  308. package/dist/esm/transport/node/builders/passive.js +7 -0
  309. package/dist/esm/transport/node/builders/prekeys.js +40 -43
  310. package/dist/esm/transport/node/builders/presence.js +39 -0
  311. package/dist/esm/transport/node/builders/privacy-token.js +19 -23
  312. package/dist/esm/transport/node/builders/privacy.js +6 -6
  313. package/dist/esm/transport/node/builders/profile.js +28 -8
  314. package/dist/esm/transport/node/builders/retry.js +1 -1
  315. package/dist/esm/transport/node/builders/tos.js +58 -0
  316. package/dist/esm/transport/node/builders/usync.js +51 -2
  317. package/dist/esm/transport/node/helpers.js +27 -1
  318. package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
  319. package/dist/esm/transport/node/mex/client.js +105 -0
  320. package/dist/esm/transport/node/query.js +17 -0
  321. package/dist/esm/transport/node/usync.js +12 -0
  322. package/dist/esm/transport/noise/WaClientPayload.js +23 -18
  323. package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
  324. package/dist/esm/transport/noise/WaMobileClientPayload.js +58 -0
  325. package/dist/esm/transport/noise/WaNoiseCert.js +14 -27
  326. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  327. package/dist/esm/transport/noise/WaNoiseSession.js +48 -67
  328. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  329. package/dist/esm/transport/noise/constants.js +0 -1
  330. package/dist/esm/transport/proxy.js +5 -0
  331. package/dist/esm/transport/stream/parse.js +3 -7
  332. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  333. package/dist/esm/util/async.js +4 -0
  334. package/dist/esm/util/bytes.js +37 -2
  335. package/dist/esm/util/clock.js +15 -0
  336. package/dist/esm/util/coercion.js +45 -3
  337. package/dist/esm/util/collections.js +11 -0
  338. package/dist/esm/util/index.js +2 -2
  339. package/dist/esm/util/primitives.js +19 -0
  340. package/dist/esm/util/runtime.js +5 -0
  341. package/dist/esm/version-spec.js +1 -0
  342. package/dist/index.js +31 -1
  343. package/dist/infra/log/ConsoleLogger.js +30 -6
  344. package/dist/infra/log/PinoLogger.js +64 -0
  345. package/dist/infra/log/types.js +4 -2
  346. package/dist/infra/perf/BackgroundQueue.js +55 -13
  347. package/dist/infra/perf/StoreLock.js +7 -4
  348. package/dist/media/constants.js +36 -3
  349. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  350. package/dist/media/index.js +9 -4
  351. package/dist/media/processor.js +2 -0
  352. package/dist/media/sticker/sticker-pack.js +136 -0
  353. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +87 -229
  354. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  355. package/dist/message/WaMessageClient.js +46 -15
  356. package/dist/message/addons/link-preview/builder.js +39 -0
  357. package/dist/message/addons/link-preview/detect.js +58 -0
  358. package/dist/message/addons/link-preview/fetcher.js +394 -0
  359. package/dist/message/addons/link-preview/types.js +2 -0
  360. package/dist/message/context-info.js +129 -0
  361. package/dist/message/crypto/addon-crypto.js +254 -0
  362. package/dist/message/{icdc.js → crypto/icdc.js} +11 -13
  363. package/dist/message/crypto/phash.js +136 -0
  364. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +7 -7
  365. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +21 -4
  366. package/dist/message/{content.js → encode/content.js} +200 -7
  367. package/dist/message/encode/media-payload.js +45 -0
  368. package/dist/message/{padding.js → encode/padding.js} +9 -3
  369. package/dist/message/index.js +2 -2
  370. package/dist/message/kinds/bot.js +120 -0
  371. package/dist/message/kinds/newsletter.js +248 -0
  372. package/dist/message/kinds/sticker-pack.js +34 -0
  373. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  374. package/dist/message/{incoming.js → primitives/incoming.js} +225 -38
  375. package/dist/message/primitives/peer-data-operation.js +96 -0
  376. package/dist/mex.js +6 -0
  377. package/dist/proto.js +1 -1
  378. package/dist/protocol/abprops.js +173 -0
  379. package/dist/protocol/appstate.js +7 -31
  380. package/dist/protocol/auth.js +3 -2
  381. package/dist/protocol/bot.js +81 -0
  382. package/dist/protocol/browser.js +23 -0
  383. package/dist/protocol/business.js +22 -0
  384. package/dist/protocol/call.js +51 -0
  385. package/dist/protocol/constants.js +51 -3
  386. package/dist/protocol/defaults.js +3 -0
  387. package/dist/protocol/email.js +33 -0
  388. package/dist/protocol/index.js +12 -3
  389. package/dist/protocol/jid.js +148 -11
  390. package/dist/protocol/media.js +25 -12
  391. package/dist/protocol/message.js +4 -1
  392. package/dist/protocol/newsletter.js +64 -0
  393. package/dist/protocol/nodes.js +26 -2
  394. package/dist/protocol/notification.js +25 -3
  395. package/dist/protocol/presence.js +16 -0
  396. package/dist/protocol/status.js +9 -0
  397. package/dist/retry/codec.js +5 -0
  398. package/dist/retry/parse.js +16 -34
  399. package/dist/retry/reason.js +6 -1
  400. package/dist/retry/replay.js +129 -35
  401. package/dist/retry/tracker.js +3 -7
  402. package/dist/signal/api/SignalDeviceSyncApi.js +69 -19
  403. package/dist/signal/api/SignalDigestSyncApi.js +14 -7
  404. package/dist/signal/api/SignalIdentitySyncApi.js +13 -4
  405. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  406. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  407. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  408. package/dist/signal/api/codec.js +52 -0
  409. package/dist/signal/api/prekeys.js +4 -0
  410. package/dist/signal/attestation/WaAdvSignature.js +26 -0
  411. package/dist/signal/{crypto → attestation}/constants.js +1 -5
  412. package/dist/signal/constants.js +4 -1
  413. package/dist/signal/encoding.js +5 -341
  414. package/dist/signal/group/SenderKeyChain.js +19 -34
  415. package/dist/signal/group/SenderKeyCodec.js +4 -5
  416. package/dist/signal/group/SenderKeyManager.js +36 -16
  417. package/dist/signal/group/encoding.js +101 -0
  418. package/dist/signal/index.js +13 -10
  419. package/dist/signal/registration/encoding.js +39 -0
  420. package/dist/signal/registration/keygen.js +11 -2
  421. package/dist/signal/registration/utils.js +8 -2
  422. package/dist/signal/session/SignalProtocol.js +128 -25
  423. package/dist/signal/session/SignalRatchet.js +41 -60
  424. package/dist/signal/session/SignalSerializer.js +5 -6
  425. package/dist/signal/session/SignalSession.js +13 -19
  426. package/dist/signal/session/encoding.js +183 -0
  427. package/dist/signal/session/resolver.js +144 -35
  428. package/dist/store/cache/identity.cache.js +78 -0
  429. package/dist/store/cache/privacy-token.cache.js +60 -0
  430. package/dist/store/cache/sender-key.cache.js +104 -0
  431. package/dist/store/cache/session.cache.js +95 -0
  432. package/dist/store/contracts/group-metadata.store.js +2 -0
  433. package/dist/store/contracts/identity.store.js +2 -0
  434. package/dist/store/contracts/message-secret.store.js +2 -0
  435. package/dist/store/contracts/pre-key.store.js +2 -0
  436. package/dist/store/contracts/session.store.js +2 -0
  437. package/dist/store/createStore.js +128 -38
  438. package/dist/store/index.js +22 -12
  439. package/dist/store/locks/contact.lock.js +1 -0
  440. package/dist/store/locks/device-list.lock.js +1 -0
  441. package/dist/store/locks/group-metadata.lock.js +23 -0
  442. package/dist/store/locks/identity.lock.js +19 -0
  443. package/dist/store/locks/message-secret.lock.js +20 -0
  444. package/dist/store/locks/pre-key.lock.js +30 -0
  445. package/dist/store/locks/session.lock.js +22 -0
  446. package/dist/store/locks/signal.lock.js +0 -24
  447. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  448. package/dist/store/memory/auth.store.js +28 -0
  449. package/dist/store/memory/contact.store.js +83 -0
  450. package/dist/store/memory/device-list.store.js +107 -0
  451. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +26 -14
  452. package/dist/store/memory/identity.store.js +35 -0
  453. package/dist/store/memory/message-secret.store.js +94 -0
  454. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  455. package/dist/store/memory/pre-key.store.js +101 -0
  456. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  457. package/dist/store/{providers/memory → memory}/retry.store.js +49 -14
  458. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  459. package/dist/store/memory/session.store.js +49 -0
  460. package/dist/store/memory/signal.store.js +40 -0
  461. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  462. package/dist/store/noop.store.js +27 -5
  463. package/dist/transport/WaComms.js +18 -8
  464. package/dist/transport/WaWebSocket.js +41 -9
  465. package/dist/transport/binary/constants.js +11 -5
  466. package/dist/transport/binary/decoder.js +24 -18
  467. package/dist/transport/binary/encoder.js +109 -34
  468. package/dist/transport/binary/tokens.js +12 -12
  469. package/dist/transport/index.js +19 -1
  470. package/dist/transport/keepalive/WaKeepAlive.js +35 -12
  471. package/dist/transport/node/WaMobileTcpSocket.js +124 -0
  472. package/dist/transport/node/WaNodeOrchestrator.js +25 -12
  473. package/dist/transport/node/WaNodeTransport.js +13 -0
  474. package/dist/transport/node/builders/abprops.js +23 -0
  475. package/dist/transport/node/builders/account-sync.js +7 -16
  476. package/dist/transport/node/builders/bot.js +43 -0
  477. package/dist/transport/node/builders/business.js +31 -31
  478. package/dist/transport/node/builders/chatstate.js +31 -0
  479. package/dist/transport/node/builders/community.js +59 -0
  480. package/dist/transport/node/builders/device.js +14 -0
  481. package/dist/transport/node/builders/email.js +73 -0
  482. package/dist/transport/node/builders/global.js +1 -1
  483. package/dist/transport/node/builders/group.js +121 -3
  484. package/dist/transport/node/builders/media.js +1 -1
  485. package/dist/transport/node/builders/message.js +84 -49
  486. package/dist/transport/node/builders/newsletter.js +183 -0
  487. package/dist/transport/node/builders/offline.js +17 -0
  488. package/dist/transport/node/builders/passive.js +10 -0
  489. package/dist/transport/node/builders/prekeys.js +38 -41
  490. package/dist/transport/node/builders/presence.js +43 -0
  491. package/dist/transport/node/builders/privacy-token.js +18 -22
  492. package/dist/transport/node/builders/privacy.js +5 -5
  493. package/dist/transport/node/builders/profile.js +30 -7
  494. package/dist/transport/node/builders/retry.js +1 -1
  495. package/dist/transport/node/builders/tos.js +63 -0
  496. package/dist/transport/node/builders/usync.js +52 -1
  497. package/dist/transport/node/helpers.js +28 -1
  498. package/dist/transport/node/mex/argo-decoder.js +189 -0
  499. package/dist/transport/node/mex/client.js +109 -0
  500. package/dist/transport/node/query.js +17 -0
  501. package/dist/transport/node/usync.js +13 -0
  502. package/dist/transport/noise/WaClientPayload.js +22 -17
  503. package/dist/transport/noise/WaFrameCodec.js +1 -1
  504. package/dist/transport/noise/WaMobileClientPayload.js +61 -0
  505. package/dist/transport/noise/WaNoiseCert.js +13 -26
  506. package/dist/transport/noise/WaNoiseHandshake.js +25 -23
  507. package/dist/transport/noise/WaNoiseSession.js +47 -66
  508. package/dist/transport/noise/WaNoiseSocket.js +18 -12
  509. package/dist/transport/noise/constants.js +1 -2
  510. package/dist/transport/proxy.js +5 -0
  511. package/dist/transport/stream/parse.js +3 -7
  512. package/dist/transport/wa-web-version-fetcher.js +94 -0
  513. package/dist/types/appstate/constants.d.ts +1 -1
  514. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +29 -9
  515. package/dist/types/appstate/index.d.ts +5 -5
  516. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  517. package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → parsers/response-parser.d.ts} +13 -3
  518. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  519. package/dist/types/appstate/types.d.ts +1 -1
  520. package/dist/types/appstate/utils.d.ts +17 -1
  521. package/dist/types/appstate-spec.d.ts +24 -0
  522. package/dist/types/auth/WaAuthClient.d.ts +95 -3
  523. package/dist/types/auth/credentials-flow.d.ts +21 -0
  524. package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
  525. package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +5 -1
  526. package/dist/types/auth/types.d.ts +88 -1
  527. package/dist/types/client/WaClient.d.ts +183 -65
  528. package/dist/types/client/WaClientFactory.d.ts +40 -9
  529. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  530. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  531. package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
  532. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  533. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  534. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  535. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +45 -44
  536. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +40 -0
  537. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  538. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +16 -4
  539. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  540. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  541. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +65 -29
  542. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  543. package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
  544. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +15 -3
  545. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  546. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +28 -1
  547. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +117 -2
  548. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +23 -15
  549. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  550. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +16 -2
  551. package/dist/types/client/events/abprops.d.ts +15 -0
  552. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  553. package/dist/types/client/events/business.d.ts +10 -0
  554. package/dist/types/client/events/call.d.ts +31 -0
  555. package/dist/types/client/events/chatstate.d.ts +9 -0
  556. package/dist/types/client/events/devices.d.ts +5 -4
  557. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +7 -4
  558. package/dist/types/client/events/group.d.ts +2 -1
  559. package/dist/types/client/events/identity.d.ts +2 -1
  560. package/dist/types/client/events/incoming.d.ts +65 -0
  561. package/dist/types/client/events/mex-notification.d.ts +6 -0
  562. package/dist/types/client/events/picture.d.ts +8 -0
  563. package/dist/types/client/events/presence.d.ts +28 -0
  564. package/dist/types/client/events/receipt.d.ts +14 -0
  565. package/dist/types/client/events/registration.d.ts +18 -0
  566. package/dist/types/client/index.d.ts +1 -1
  567. package/dist/types/client/media.d.ts +65 -0
  568. package/dist/types/client/messaging/fanout.d.ts +2 -2
  569. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  570. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  571. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  572. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  573. package/dist/types/client/messaging/messages.d.ts +28 -0
  574. package/dist/types/client/newsletter/admin.d.ts +71 -0
  575. package/dist/types/client/newsletter/content.d.ts +42 -0
  576. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  577. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  578. package/dist/types/client/newsletter/mex.d.ts +14 -0
  579. package/dist/types/client/newsletter/parse.d.ts +19 -0
  580. package/dist/types/client/newsletter/types.d.ts +190 -0
  581. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +13 -2
  582. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  583. package/dist/types/client/persistence/mailbox.d.ts +12 -0
  584. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  585. package/dist/types/client/types.d.ts +926 -55
  586. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  587. package/dist/types/crypto/core/index.d.ts +3 -2
  588. package/dist/types/crypto/core/keys.d.ts +0 -4
  589. package/dist/types/crypto/core/nonce.d.ts +4 -5
  590. package/dist/types/crypto/core/primitives.d.ts +31 -20
  591. package/dist/types/crypto/core/random.d.ts +7 -1
  592. package/dist/types/crypto/core/xeddsa.d.ts +11 -0
  593. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  594. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  595. package/dist/types/crypto/curves/constants.d.ts +4 -2
  596. package/dist/types/crypto/curves/types.d.ts +0 -5
  597. package/dist/types/crypto/index.d.ts +1 -0
  598. package/dist/types/crypto/math/constants.d.ts +0 -1
  599. package/dist/types/crypto/math/mod.d.ts +0 -1
  600. package/dist/types/index.d.ts +32 -5
  601. package/dist/types/infra/log/ConsoleLogger.d.ts +19 -2
  602. package/dist/types/infra/log/PinoLogger.d.ts +56 -2
  603. package/dist/types/infra/log/types.d.ts +6 -0
  604. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  605. package/dist/types/infra/perf/StoreLock.d.ts +1 -0
  606. package/dist/types/media/constants.d.ts +9 -2
  607. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  608. package/dist/types/media/index.d.ts +7 -4
  609. package/dist/types/media/processor.d.ts +50 -0
  610. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  611. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +33 -12
  612. package/dist/types/media/transfer/conn.d.ts +7 -0
  613. package/dist/types/media/types.d.ts +10 -5
  614. package/dist/types/message/WaMessageClient.d.ts +14 -0
  615. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  616. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  617. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  618. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  619. package/dist/types/message/context-info.d.ts +66 -0
  620. package/dist/types/message/crypto/addon-crypto.d.ts +78 -0
  621. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +6 -6
  622. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  623. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  624. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  625. package/dist/types/message/encode/content.d.ts +43 -0
  626. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  627. package/dist/types/message/encode/media-payload.d.ts +12 -0
  628. package/dist/types/message/index.d.ts +2 -2
  629. package/dist/types/message/kinds/bot.d.ts +31 -0
  630. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  631. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  632. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  633. package/dist/types/message/primitives/incoming.d.ts +21 -0
  634. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  635. package/dist/types/message/types.d.ts +218 -28
  636. package/dist/types/mex.d.ts +2 -0
  637. package/dist/types/proto.d.ts +2 -2
  638. package/dist/types/protocol/abprops.d.ts +151 -0
  639. package/dist/types/protocol/appstate.d.ts +4 -49
  640. package/dist/types/protocol/auth.d.ts +2 -2
  641. package/dist/types/protocol/bot.d.ts +45 -0
  642. package/dist/types/protocol/browser.d.ts +9 -0
  643. package/dist/types/protocol/business.d.ts +21 -0
  644. package/dist/types/protocol/call.d.ts +44 -0
  645. package/dist/types/protocol/constants.d.ts +20 -3
  646. package/dist/types/protocol/defaults.d.ts +3 -0
  647. package/dist/types/protocol/email.d.ts +32 -0
  648. package/dist/types/protocol/group.d.ts +1 -1
  649. package/dist/types/protocol/index.d.ts +2 -1
  650. package/dist/types/protocol/jid.d.ts +79 -0
  651. package/dist/types/protocol/media.d.ts +21 -13
  652. package/dist/types/protocol/message.d.ts +4 -0
  653. package/dist/types/protocol/newsletter.d.ts +65 -0
  654. package/dist/types/protocol/nodes.d.ts +24 -0
  655. package/dist/types/protocol/notification.d.ts +22 -0
  656. package/dist/types/protocol/presence.d.ts +16 -0
  657. package/dist/types/protocol/status.d.ts +7 -0
  658. package/dist/types/protocol/stream.d.ts +1 -0
  659. package/dist/types/retry/codec.d.ts +5 -0
  660. package/dist/types/retry/index.d.ts +1 -1
  661. package/dist/types/retry/parse.d.ts +9 -0
  662. package/dist/types/retry/reason.d.ts +6 -1
  663. package/dist/types/retry/replay.d.ts +19 -5
  664. package/dist/types/retry/tracker.d.ts +10 -3
  665. package/dist/types/retry/types.d.ts +3 -8
  666. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  667. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +13 -0
  668. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +12 -3
  669. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  670. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  671. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  672. package/dist/types/signal/api/codec.d.ts +20 -0
  673. package/dist/types/signal/api/constants.d.ts +1 -1
  674. package/dist/types/signal/api/prekeys.d.ts +4 -0
  675. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -4
  676. package/dist/types/signal/attestation/constants.d.ts +4 -0
  677. package/dist/types/signal/constants.d.ts +7 -4
  678. package/dist/types/signal/encoding.d.ts +6 -62
  679. package/dist/types/signal/group/SenderKeyChain.d.ts +2 -2
  680. package/dist/types/signal/group/SenderKeyManager.d.ts +24 -2
  681. package/dist/types/signal/group/encoding.d.ts +25 -0
  682. package/dist/types/signal/index.d.ts +4 -1
  683. package/dist/types/signal/registration/encoding.d.ts +30 -0
  684. package/dist/types/signal/registration/keygen.d.ts +10 -0
  685. package/dist/types/signal/registration/utils.d.ts +7 -1
  686. package/dist/types/signal/session/SignalProtocol.d.ts +66 -2
  687. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  688. package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
  689. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  690. package/dist/types/signal/session/encoding.d.ts +28 -0
  691. package/dist/types/signal/session/resolver.d.ts +18 -2
  692. package/dist/types/signal/types.d.ts +16 -4
  693. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  694. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  695. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  696. package/dist/types/store/cache/session.cache.d.ts +23 -0
  697. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  698. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  699. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  700. package/dist/types/store/contracts/identity.store.d.ts +11 -0
  701. package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
  702. package/dist/types/store/contracts/message.store.d.ts +0 -2
  703. package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
  704. package/dist/types/store/contracts/session.store.d.ts +14 -0
  705. package/dist/types/store/contracts/signal.store.d.ts +1 -34
  706. package/dist/types/store/createStore.d.ts +54 -2
  707. package/dist/types/store/index.d.ts +22 -13
  708. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  709. package/dist/types/store/locks/identity.lock.d.ts +3 -0
  710. package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
  711. package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
  712. package/dist/types/store/locks/session.lock.d.ts +3 -0
  713. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  714. package/dist/types/store/memory/auth.store.d.ts +18 -0
  715. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  716. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  717. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  718. package/dist/types/store/memory/identity.store.d.ts +18 -0
  719. package/dist/types/store/memory/message-secret.store.d.ts +31 -0
  720. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  721. package/dist/types/store/memory/pre-key.store.d.ts +23 -0
  722. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  723. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +23 -4
  724. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  725. package/dist/types/store/memory/session.store.d.ts +21 -0
  726. package/dist/types/store/memory/signal.store.d.ts +16 -0
  727. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  728. package/dist/types/store/noop.store.d.ts +6 -2
  729. package/dist/types/store/types.d.ts +271 -7
  730. package/dist/types/transport/WaComms.d.ts +5 -0
  731. package/dist/types/transport/WaWebSocket.d.ts +6 -0
  732. package/dist/types/transport/binary/constants.d.ts +8 -2
  733. package/dist/types/transport/binary/decoder.d.ts +5 -0
  734. package/dist/types/transport/binary/encoder.d.ts +5 -0
  735. package/dist/types/transport/binary/tokens.d.ts +6 -6
  736. package/dist/types/transport/index.d.ts +9 -0
  737. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +11 -1
  738. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +24 -0
  739. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +11 -2
  740. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  741. package/dist/types/transport/node/builders/abprops.d.ts +5 -0
  742. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  743. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  744. package/dist/types/transport/node/builders/business.d.ts +21 -4
  745. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  746. package/dist/types/transport/node/builders/community.d.ts +17 -0
  747. package/dist/types/transport/node/builders/device.d.ts +2 -0
  748. package/dist/types/transport/node/builders/email.d.ts +11 -0
  749. package/dist/types/transport/node/builders/group.d.ts +44 -2
  750. package/dist/types/transport/node/builders/message.d.ts +11 -6
  751. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  752. package/dist/types/transport/node/builders/offline.d.ts +2 -0
  753. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  754. package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
  755. package/dist/types/transport/node/builders/presence.d.ts +13 -0
  756. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  757. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  758. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  759. package/dist/types/transport/node/helpers.d.ts +3 -1
  760. package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
  761. package/dist/types/transport/node/mex/client.d.ts +29 -0
  762. package/dist/types/transport/node/query.d.ts +19 -1
  763. package/dist/types/transport/node/usync.d.ts +3 -0
  764. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +34 -0
  765. package/dist/types/transport/noise/WaNoiseCert.d.ts +12 -1
  766. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  767. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -1
  768. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  769. package/dist/types/transport/noise/constants.d.ts +4 -5
  770. package/dist/types/transport/proxy.d.ts +5 -0
  771. package/dist/types/transport/types.d.ts +15 -0
  772. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  773. package/dist/types/util/async.d.ts +4 -0
  774. package/dist/types/util/bytes.d.ts +36 -1
  775. package/dist/types/util/clock.d.ts +6 -0
  776. package/dist/types/util/coercion.d.ts +25 -0
  777. package/dist/types/util/collections.d.ts +8 -0
  778. package/dist/types/util/index.d.ts +2 -2
  779. package/dist/types/util/primitives.d.ts +11 -0
  780. package/dist/types/util/runtime.d.ts +5 -0
  781. package/dist/types/version-spec.d.ts +1 -0
  782. package/dist/util/async.js +4 -0
  783. package/dist/util/bytes.js +37 -2
  784. package/dist/util/clock.js +18 -0
  785. package/dist/util/coercion.js +48 -3
  786. package/dist/util/collections.js +12 -0
  787. package/dist/util/index.js +7 -1
  788. package/dist/util/primitives.js +20 -0
  789. package/dist/util/runtime.js +5 -0
  790. package/dist/version-spec.js +5 -0
  791. package/package.json +37 -11
  792. package/spec/appstate/index.d.ts +188 -0
  793. package/spec/appstate/index.js +850 -0
  794. package/spec/mex/index.d.ts +4172 -0
  795. package/spec/mex/index.js +261 -0
  796. package/spec/proto/index.d.ts +16305 -0
  797. package/spec/proto/index.js +1 -0
  798. package/spec/version/index.d.ts +4 -0
  799. package/spec/version/index.js +9 -0
  800. package/spec/version/version.json +3 -0
  801. package/dist/auth/flow/WaAuthCredentialsFlow.js +0 -130
  802. package/dist/auth/pairing/WaPairingCodeCrypto.js +0 -77
  803. package/dist/auth/pairing/constants.js +0 -5
  804. package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
  805. package/dist/client/events/chat.js +0 -227
  806. package/dist/client/incoming.js +0 -269
  807. package/dist/client/mailbox.js +0 -50
  808. package/dist/client/messages.js +0 -228
  809. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
  810. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +0 -73
  811. package/dist/esm/auth/pairing/constants.js +0 -2
  812. package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
  813. package/dist/esm/client/events/chat.js +0 -224
  814. package/dist/esm/client/incoming.js +0 -260
  815. package/dist/esm/client/mailbox.js +0 -47
  816. package/dist/esm/client/messages.js +0 -224
  817. package/dist/esm/media/WaMediaCrypto.js +0 -304
  818. package/dist/esm/message/addon-crypto.js +0 -59
  819. package/dist/esm/message/incoming.js +0 -325
  820. package/dist/esm/message/phash.js +0 -27
  821. package/dist/esm/signal/crypto/WaAdvSignature.js +0 -64
  822. package/dist/esm/store/locks/participants.lock.js +0 -20
  823. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  824. package/dist/esm/store/providers/memory/device-list.store.js +0 -64
  825. package/dist/esm/store/providers/memory/signal.store.js +0 -199
  826. package/dist/esm/transport/node/builders/index.js +0 -11
  827. package/dist/media/WaMediaCrypto.js +0 -308
  828. package/dist/message/addon-crypto.js +0 -65
  829. package/dist/message/phash.js +0 -30
  830. package/dist/signal/crypto/WaAdvSignature.js +0 -76
  831. package/dist/store/locks/participants.lock.js +0 -23
  832. package/dist/store/providers/memory/contact.store.js +0 -32
  833. package/dist/store/providers/memory/device-list.store.js +0 -68
  834. package/dist/store/providers/memory/signal.store.js +0 -203
  835. package/dist/transport/node/builders/index.js +0 -51
  836. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -66
  837. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
  838. package/dist/types/auth/pairing/constants.d.ts +0 -2
  839. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
  840. package/dist/types/client/events/chat.d.ts +0 -3
  841. package/dist/types/client/history-sync.d.ts +0 -20
  842. package/dist/types/client/incoming.d.ts +0 -37
  843. package/dist/types/client/mailbox.d.ts +0 -10
  844. package/dist/types/client/messages.d.ts +0 -16
  845. package/dist/types/client/messaging/participants.d.ts +0 -13
  846. package/dist/types/media/WaMediaCrypto.d.ts +0 -13
  847. package/dist/types/media/conn.d.ts +0 -3
  848. package/dist/types/message/addon-crypto.d.ts +0 -25
  849. package/dist/types/message/content.d.ts +0 -12
  850. package/dist/types/message/incoming.d.ts +0 -18
  851. package/dist/types/signal/crypto/constants.d.ts +0 -5
  852. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  853. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  854. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  855. package/dist/types/store/providers/memory/signal.store.d.ts +0 -58
  856. package/dist/types/transport/node/builders/index.d.ts +0 -11
  857. package/proto/index.d.ts +0 -10903
  858. package/proto/index.js +0 -1
  859. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  860. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  861. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  862. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  863. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -1,10 +1,10 @@
1
- import type { Proto } from '..';
1
+ import { type Proto } from '../..';
2
2
  interface WaAppStateDerivedKeys {
3
- readonly indexKey: Uint8Array;
4
- readonly valueEncryptionKey: Uint8Array;
5
- readonly valueMacKey: Uint8Array;
6
- readonly snapshotMacKey: Uint8Array;
7
- readonly patchMacKey: Uint8Array;
3
+ readonly indexHmacKey: Uint8Array;
4
+ readonly valueEncryptionAesKey: Uint8Array;
5
+ readonly valueMacHmacKey: Uint8Array;
6
+ readonly snapshotMacHmacKey: Uint8Array;
7
+ readonly patchMacHmacKey: Uint8Array;
8
8
  }
9
9
  interface WaAppStateEncryptedMutation {
10
10
  readonly indexMac: Uint8Array;
@@ -18,13 +18,27 @@ interface WaAppStateDecryptedMutation {
18
18
  readonly indexMac: Uint8Array;
19
19
  readonly valueMac: Uint8Array;
20
20
  }
21
+ /**
22
+ * Implements the app-state mutation cryptography: HKDF key derivation (with
23
+ * a bounded LRU cache), per-mutation encrypt/decrypt, snapshot/patch MAC
24
+ * generation, and the LT-hash arithmetic used to track collection state.
25
+ */
21
26
  export declare class WaAppStateCrypto {
22
27
  private readonly derivedKeysCache;
23
28
  private readonly derivedKeysCacheMaxSize;
24
- constructor(derivedKeysCacheMaxSize?: number);
29
+ private readonly skipMacVerification;
30
+ constructor(derivedKeysCacheMaxSize?: number, skipMacVerification?: boolean);
31
+ get isMacVerificationSkipped(): boolean;
32
+ /** Empties the derived-keys LRU cache (e.g. after a session reset). */
25
33
  clearCache(): void;
26
- deriveKeys(keyData: Uint8Array): Promise<WaAppStateDerivedKeys>;
27
- generateIndexMac(indexKey: Uint8Array, indexBytes: Uint8Array): Promise<Uint8Array>;
34
+ /**
35
+ * Derives the index/value/snapshot/patch keys from an app-state sync key.
36
+ * Cached by base64 of `keyData` (LRU-bounded).
37
+ */
38
+ deriveKeys(keyData: Uint8Array): WaAppStateDerivedKeys;
39
+ /** Computes the HMAC-SHA-256 index MAC over `indexBytes`. */
40
+ generateIndexMac(indexHmacKey: Uint8Array, indexBytes: Uint8Array): Uint8Array;
41
+ /** Encrypts a single mutation value with AES-CBC + HMAC value-MAC. */
28
42
  encryptMutation(args: {
29
43
  readonly operation: number;
30
44
  readonly keyId: Uint8Array;
@@ -34,6 +48,7 @@ export declare class WaAppStateCrypto {
34
48
  readonly version: number;
35
49
  readonly iv?: Uint8Array;
36
50
  }): Promise<WaAppStateEncryptedMutation>;
51
+ /** Verifies and decrypts a single app-state mutation. */
37
52
  decryptMutation(args: {
38
53
  readonly operation: number;
39
54
  readonly keyId: Uint8Array;
@@ -41,10 +56,15 @@ export declare class WaAppStateCrypto {
41
56
  readonly indexMac: Uint8Array;
42
57
  readonly valueBlob: Uint8Array;
43
58
  }): Promise<WaAppStateDecryptedMutation>;
59
+ /** Generates the HMAC-SHA-512 snapshot MAC over the LT-hash + version + collection name. */
44
60
  generateSnapshotMac(keyData: Uint8Array, ltHash: Uint8Array, version: number, collectionName: string): Promise<Uint8Array>;
61
+ /** Generates the HMAC-SHA-512 patch MAC binding mutations to a collection version. */
45
62
  generatePatchMac(keyData: Uint8Array, snapshotMac: Uint8Array, valueMacs: readonly Uint8Array[], version: number, collectionName: string): Promise<Uint8Array>;
63
+ /** Adds value MACs into the running LT-hash digest for a collection. */
46
64
  ltHashAdd(base: Uint8Array, addValues: readonly Uint8Array[]): Promise<Uint8Array>;
65
+ /** Removes value MACs from the running LT-hash digest (for `remove` operations). */
47
66
  ltHashSubtract(base: Uint8Array, removeValues: readonly Uint8Array[]): Promise<Uint8Array>;
67
+ /** Combined subtract+add LT-hash update used when a key's value MAC changes in place. */
48
68
  ltHashSubtractThenAdd(base: Uint8Array, addValues: readonly Uint8Array[], removeValues: readonly Uint8Array[]): Promise<{
49
69
  readonly hash: Uint8Array;
50
70
  readonly subtractResult: Uint8Array;
@@ -1,7 +1,7 @@
1
- export * from './constants';
1
+ export { APP_STATE_EMPTY_LT_HASH } from './constants';
2
2
  export type { AppStateCollectionName, WaAppStateStoreData, WaAppStateSyncKey, WaAppStateSyncOptions } from './types';
3
- export { encodeAppStateFingerprint, decodeAppStateFingerprint, decodeAppStateCollections, decodeAppStateSyncKeys } from './encoding';
3
+ export { encodeAppStateFingerprint, decodeAppStateFingerprint, decodeAppStateCollections, decodeAppStateSyncKeys } from './parsers/encoding';
4
4
  export * from './utils';
5
- export { WaAppStateCrypto } from './WaAppStateCrypto';
6
- export { parseSyncResponse } from './WaAppStateSyncResponseParser';
7
- export { WaAppStateSyncClient } from './WaAppStateSyncClient';
5
+ export { WaAppStateCrypto } from './crypto/WaAppStateCrypto';
6
+ export { parseSyncResponse } from './parsers/response-parser';
7
+ export { WaAppStateSyncClient } from './sync/WaAppStateSyncClient';
@@ -1,7 +1,14 @@
1
- import type { WaAppStateStoreData, WaAppStateSyncKey } from './types';
1
+ import type { WaAppStateStoreData, WaAppStateSyncKey } from '../types';
2
2
  type StoreRow = Readonly<Record<string, unknown>>;
3
+ /** Serializes an app-state sync key fingerprint to its protobuf bytes, or `null` when absent. */
3
4
  export declare function encodeAppStateFingerprint(fingerprint: WaAppStateSyncKey['fingerprint']): Uint8Array | null;
5
+ /** Inverse of {@link encodeAppStateFingerprint}; throws on malformed input. */
4
6
  export declare function decodeAppStateFingerprint(raw: unknown): WaAppStateSyncKey['fingerprint'] | undefined;
7
+ /** Decodes app-state sync-key SQL rows into {@link WaAppStateSyncKey} records. */
5
8
  export declare function decodeAppStateSyncKeys(rows: readonly StoreRow[]): readonly WaAppStateSyncKey[];
9
+ /**
10
+ * Joins app-state collection-version and index-value SQL rows into the
11
+ * `collections` shape used by the in-memory app-state store.
12
+ */
6
13
  export declare function decodeAppStateCollections(versionRows: readonly StoreRow[], valueRows: readonly StoreRow[]): WaAppStateStoreData['collections'];
7
14
  export {};
@@ -1,6 +1,6 @@
1
- import type { AppStateCollectionName, AppStateCollectionState } from './types';
2
- import type { Proto } from '..';
3
- import type { BinaryNode } from '../transport/types';
1
+ import type { AppStateCollectionName, AppStateCollectionState } from '../types';
2
+ import { type Proto } from '../..';
3
+ import type { BinaryNode } from '../../transport/types';
4
4
  export interface CollectionResponsePayload {
5
5
  readonly collection: AppStateCollectionName;
6
6
  readonly state: AppStateCollectionState;
@@ -8,5 +8,15 @@ export interface CollectionResponsePayload {
8
8
  readonly patches: readonly Proto.ISyncdPatch[];
9
9
  readonly snapshotReference?: Proto.IExternalBlobReference;
10
10
  }
11
+ /**
12
+ * Parses an app-state `sync` IQ response into one payload per collection,
13
+ * decoding embedded patches and snapshot references. Throws when the IQ is
14
+ * an error envelope or missing the `<sync>` child.
15
+ */
11
16
  export declare function parseSyncResponse(iqNode: BinaryNode): readonly CollectionResponsePayload[];
17
+ /**
18
+ * Reads a `<collection>` node and returns the right
19
+ * {@link AppStateCollectionState} (success / has-more / conflict / fatal /
20
+ * retryable) based on its `type` attribute and embedded error code.
21
+ */
12
22
  export declare function parseCollectionState(node: BinaryNode): AppStateCollectionState;
@@ -0,0 +1,105 @@
1
+ import type { WaAppStateMissingKeysEvent, WaAppStateSyncKey, WaAppStateSyncOptions, WaAppStateSyncResult } from '../types';
2
+ import type { Logger } from '../../infra/log/types';
3
+ import { type Proto } from '../..';
4
+ import type { WaAppStateStore } from '../../store/contracts/appstate.store';
5
+ import type { BinaryNode } from '../../transport/types';
6
+ import type { ServerClock } from '../../util/clock';
7
+ /**
8
+ * Minimal message-key context for incoming app-state key protocol messages.
9
+ * Uses the proto `Proto.IMessageKey` attribute names so callers can pass an
10
+ * incoming message's `key` verbatim (no field remapping).
11
+ */
12
+ interface IncomingKeyEventContext {
13
+ readonly remoteJid?: string;
14
+ readonly id?: string;
15
+ readonly participant?: string;
16
+ readonly senderDevice: number;
17
+ }
18
+ interface WaAppStateSyncClientOptions {
19
+ readonly logger: Logger;
20
+ readonly query: (node: BinaryNode, timeoutMs: number) => Promise<BinaryNode>;
21
+ readonly store: WaAppStateStore;
22
+ readonly serverClock: ServerClock;
23
+ readonly getCurrentMeJid?: () => string | null | undefined;
24
+ readonly hostDomain?: string;
25
+ readonly defaultTimeoutMs?: number;
26
+ readonly onMissingKeys?: (event: WaAppStateMissingKeysEvent) => Promise<void>;
27
+ readonly skipMacVerification?: boolean;
28
+ readonly mobilePrimary?: boolean;
29
+ readonly isOwnAccountDevice?: (deviceJid: string) => boolean;
30
+ readonly sendKeyShare?: (toDeviceJid: string, keys: readonly WaAppStateSyncKey[], missingKeyIds: readonly Uint8Array[]) => Promise<void>;
31
+ readonly triggerSync?: () => Promise<void>;
32
+ }
33
+ /**
34
+ * App-state synchronization client. Owns the sync key inventory, processes
35
+ * snapshots/patches, encrypts pending mutations, and persists the resulting
36
+ * collection state in the {@link WaAppStateStore}.
37
+ */
38
+ export declare class WaAppStateSyncClient {
39
+ private readonly logger;
40
+ private readonly query;
41
+ private readonly store;
42
+ private readonly serverClock;
43
+ private readonly getCurrentMeJid?;
44
+ private readonly hostDomain;
45
+ private readonly defaultTimeoutMs;
46
+ private readonly onMissingKeys?;
47
+ private readonly isOwnAccountDevice?;
48
+ private readonly sendKeyShare?;
49
+ private readonly triggerSync?;
50
+ private readonly crypto;
51
+ private readonly mobilePrimary;
52
+ private syncContext;
53
+ private syncPromise;
54
+ constructor(options: WaAppStateSyncClientOptions);
55
+ /**
56
+ * Returns the active app-state sync key, generating and persisting a new
57
+ * one when the store is empty (used during initial setup).
58
+ */
59
+ ensureInitialSyncKey(): Promise<WaAppStateSyncKey>;
60
+ /** Imports peer-shared sync keys into the store; returns the count actually added. */
61
+ importSyncKeys(keys: readonly WaAppStateSyncKey[]): Promise<number>;
62
+ /** Handler for `AppStateSyncKeyShare` protocol messages – stores received keys and triggers a sync. */
63
+ handleIncomingKeyShare(context: IncomingKeyEventContext, protocolMessage: Proto.Message.IProtocolMessage): Promise<void>;
64
+ /** Handler for `AppStateSyncKeyRequest` protocol messages – replies with the requested keys via `sendKeyShare`. */
65
+ handleIncomingKeyRequest(context: IncomingKeyEventContext, protocolMessage: Proto.Message.IProtocolMessage): Promise<void>;
66
+ private extractKeyRequestIds;
67
+ /** Imports the keys from a decoded `AppStateSyncKeyShare` proto message. */
68
+ importSyncKeyShare(share: Proto.Message.IAppStateSyncKeyShare): Promise<number>;
69
+ /**
70
+ * Runs one app-state sync round across the requested collections,
71
+ * applying any `pendingMutations` and downloading external snapshots
72
+ * via `options.downloadExternalBlob` when present. Concurrent calls
73
+ * share the in-flight promise.
74
+ */
75
+ sync(options?: WaAppStateSyncOptions): Promise<WaAppStateSyncResult>;
76
+ private syncOnce;
77
+ private syncCollectionsRound;
78
+ private buildCollectionSyncRequest;
79
+ private buildSyncIqNode;
80
+ private fetchSyncPayloadByCollection;
81
+ private processCollectionRound;
82
+ private createCollectionOutcome;
83
+ private notifyMissingKeys;
84
+ private resolveReadyPatches;
85
+ private validateSnapshot;
86
+ private parseCollectionPatchVersion;
87
+ private validatePatch;
88
+ private applySnapshot;
89
+ private applyPatch;
90
+ private decryptSnapshotRecords;
91
+ private decryptPatchMutations;
92
+ private assertPatchMacsMatch;
93
+ private buildOutgoingPatch;
94
+ private resolveDeviceIndex;
95
+ private computeNextCollectionState;
96
+ private normalizeProtoLong;
97
+ private groupPendingMutations;
98
+ private preloadKeyData;
99
+ private getKeyData;
100
+ private getCollectionState;
101
+ private setCollectionState;
102
+ private persistCollectionUpdates;
103
+ private requireSyncContext;
104
+ }
105
+ export {};
@@ -1,5 +1,5 @@
1
1
  import type { Proto } from '..';
2
- import type { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES } from '../protocol/constants';
2
+ import type { WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_COLLECTIONS } from '../protocol/constants';
3
3
  export type AppStateCollectionName = (typeof WA_APP_STATE_COLLECTIONS)[keyof typeof WA_APP_STATE_COLLECTIONS];
4
4
  export type AppStateCollectionState = (typeof WA_APP_STATE_COLLECTION_STATES)[keyof typeof WA_APP_STATE_COLLECTION_STATES];
5
5
  export interface WaAppStateSyncKey {
@@ -1,7 +1,23 @@
1
1
  import type { AppStateCollectionName, WaAppStateSyncKey } from './types';
2
- import type { WaMediaTransferClient } from '../media/WaMediaTransferClient';
2
+ import type { WaMediaTransferClient } from '../media/transfer/WaMediaTransferClient';
3
3
  import type { Proto } from '..';
4
+ /**
5
+ * Returns `value` typed as a known {@link AppStateCollectionName}, or `null`
6
+ * when the string is unrecognized.
7
+ */
4
8
  export declare function parseCollectionName(value: string | undefined): AppStateCollectionName | null;
9
+ /**
10
+ * Reads the 32-bit big-endian epoch encoded in bytes 2..5 of an app-state key id.
11
+ * Returns `-1` when the key id is too short.
12
+ */
5
13
  export declare function keyEpoch(keyId: Uint8Array): number;
14
+ /**
15
+ * Picks the highest-epoch app-state sync key from `keys`. Ties are broken by
16
+ * the lower device id. Returns `null` when the iterable is empty.
17
+ */
6
18
  export declare function pickActiveSyncKey(keys: Iterable<WaAppStateSyncKey>): WaAppStateSyncKey | null;
19
+ /**
20
+ * Downloads and decrypts an external app-state blob via the media transfer
21
+ * client. Throws when the reference is missing required fields.
22
+ */
7
23
  export declare function downloadExternalBlobReference(mediaTransfer: WaMediaTransferClient, reference: Proto.IExternalBlobReference): Promise<Uint8Array>;
@@ -0,0 +1,24 @@
1
+ import { proto, type Proto } from '.';
2
+ import { WA_APPSTATE_SCHEMAS as RAW_WA_APPSTATE_SCHEMAS, type WaAppstateActionKey, type WaAppstateSchema, type WaAppstateValueEnumFields } from '../spec/appstate';
3
+ export { WA_APPSTATE_COLLECTIONS, WA_APPSTATE_SCHEMAS } from '../spec/appstate';
4
+ export type { WaAppstateActionKey, WaAppstateCollection, WaAppstateIndexArgs, WaAppstateIndexPart, WaAppstateIndexValueOf, WaAppstateSchema, WaAppstateScope, WaAppstateValueEnumFields } from '../spec/appstate';
5
+ export type GetByPath<T, P extends string> = P extends `${infer Head}.${infer Tail}` ? Head extends keyof T ? GetByPath<T[Head], Tail> : never : P extends keyof T ? T[P] : never;
6
+ export type EnumNamesAt<P extends string> = keyof GetByPath<typeof proto.SyncActionValue, P> & string;
7
+ type EnumValueFor<P extends string, Original> = Original extends ReadonlyArray<unknown> | null | undefined ? ReadonlyArray<EnumNamesAt<P>> | null | undefined : EnumNamesAt<P> | null | undefined;
8
+ type WithEnumStrings<Data, Fields extends WaAppstateValueEnumFields | null> = Fields extends WaAppstateValueEnumFields ? {
9
+ [K in keyof Data]: K extends keyof Fields ? Fields[K] extends string ? EnumValueFor<Fields[K], Data[K]> : Data[K] : Data[K];
10
+ } : Data;
11
+ export type ValueForSchema<S extends WaAppstateSchema> = S['valueField'] extends keyof Proto.ISyncActionValue ? Pick<Proto.ISyncActionValue, S['valueField'] & keyof Proto.ISyncActionValue> : Proto.ISyncActionValue;
12
+ export type ValueForKey<K extends WaAppstateActionKey> = ValueForSchema<(typeof RAW_WA_APPSTATE_SCHEMAS)[K]>;
13
+ type BaseDataForSchema<S extends WaAppstateSchema> = S['valueField'] extends keyof Proto.ISyncActionValue ? NonNullable<Proto.ISyncActionValue[S['valueField'] & keyof Proto.ISyncActionValue]> : Proto.ISyncActionValue;
14
+ export type DataForSchema<S extends WaAppstateSchema> = WithEnumStrings<BaseDataForSchema<S>, S['valueEnumFields']>;
15
+ export type DataForKey<K extends WaAppstateActionKey> = DataForSchema<(typeof RAW_WA_APPSTATE_SCHEMAS)[K]>;
16
+ export declare const WA_APPSTATE_SCHEMA_BY_ACTION_NAME: Readonly<Record<string, WaAppstateActionKey>>;
17
+ export declare function getAppstateSchemaByActionName(actionName: string): {
18
+ readonly key: WaAppstateActionKey;
19
+ readonly schema: WaAppstateSchema;
20
+ } | null;
21
+ export declare function resolveEnumObject(protoEnumPath: string): Record<string, number | string> | null;
22
+ export declare function encodeEnumValue(protoEnumPath: string, name: string): number | null;
23
+ export declare function decodeEnumValue(protoEnumPath: string, value: number): string | null;
24
+ export declare function decodeIndexArgsFromSchema(schema: WaAppstateSchema, parts: readonly string[]): Readonly<Record<string, string | boolean | null>> | null;
@@ -1,16 +1,20 @@
1
1
  import type { WaAuthClientOptions, WaAuthCredentials, WaAuthSocketOptions, WaSuccessPersistAttributes } from './types';
2
2
  import type { Logger } from '../infra/log/types';
3
3
  import type { WaAuthStore } from '../store/contracts/auth.store';
4
+ import type { WaPreKeyStore } from '../store/contracts/pre-key.store';
4
5
  import type { WaSignalStore } from '../store/contracts/signal.store';
5
- import type { BinaryNode } from '../transport/types';
6
+ import type { WaNoiseRootCa } from '../transport/noise/WaNoiseCert';
7
+ import type { BinaryNode, WaCommsConfig } from '../transport/types';
6
8
  type WaAuthClientDeps = Readonly<{
7
9
  readonly logger: Logger;
8
10
  readonly authStore: WaAuthStore;
9
11
  readonly signalStore: WaSignalStore;
12
+ readonly preKeyStore: WaPreKeyStore;
10
13
  readonly socket: {
11
14
  readonly sendNode: (node: BinaryNode) => Promise<void>;
12
15
  readonly query: (node: BinaryNode, timeoutMs?: number) => Promise<BinaryNode>;
13
16
  };
17
+ readonly isConnected?: () => boolean;
14
18
  readonly callbacks?: {
15
19
  readonly onQr?: (qr: string, ttlMs: number) => void;
16
20
  readonly onPairingCode?: (code: string) => void;
@@ -19,40 +23,128 @@ type WaAuthClientDeps = Readonly<{
19
23
  readonly onError?: (error: Error) => void;
20
24
  };
21
25
  }>;
26
+ /**
27
+ * Owns the auth/pairing lifecycle and persistence of {@link WaAuthCredentials}.
28
+ * Exposed as `client.auth` on a {@link WaClient}.
29
+ *
30
+ * Lifecycle: construct with options + dependencies, call
31
+ * {@link loadOrCreateCredentials} to bring credentials online, then either
32
+ * follow the QR flow (`onQr` callback) or call {@link requestPairingCode} for
33
+ * the link-code flow.
34
+ */
22
35
  export declare class WaAuthClient {
23
36
  private readonly options;
24
37
  private readonly logger;
25
38
  private readonly callbacks;
26
39
  private readonly authStore;
27
40
  private readonly signalStore;
41
+ private readonly preKeyStore;
42
+ private readonly isConnected?;
28
43
  private readonly qrFlow;
29
44
  private readonly pairingFlow;
30
45
  private credentials;
46
+ private versionOverride;
31
47
  constructor(options: WaAuthClientOptions, deps: WaAuthClientDeps);
48
+ /**
49
+ * Returns a snapshot of auth readiness flags (connection, registration,
50
+ * pending QR/pairing prompts).
51
+ */
32
52
  getState(connected?: boolean): {
33
53
  connected: boolean;
34
54
  registered: boolean;
35
55
  hasQr: boolean;
36
56
  hasPairingCode: boolean;
37
57
  };
58
+ /** Returns the currently-loaded credentials, or `null` before initialization. */
38
59
  getCurrentCredentials(): WaAuthCredentials | null;
60
+ /**
61
+ * Loads persisted credentials from the auth store, or generates a fresh
62
+ * set when none exist. Must be called before connecting.
63
+ */
39
64
  loadOrCreateCredentials(): Promise<WaAuthCredentials>;
40
- buildCommsConfig(socketOptions: WaAuthSocketOptions): import("../transport/types").WaCommsConfig;
65
+ /**
66
+ * Builds a {@link WaCommsConfig} from the current credentials and the
67
+ * runtime device/transport options – feeds {@link WaComms}.
68
+ */
69
+ buildCommsConfig(socketOptions: WaAuthSocketOptions, overrides?: {
70
+ readonly noiseTrustedRootCa?: WaNoiseRootCa;
71
+ readonly disableNoiseCertificateChainVerification?: boolean;
72
+ }): Promise<WaCommsConfig>;
73
+ /**
74
+ * One-shot override for the next {@link buildCommsConfig} call: takes
75
+ * precedence over the user-supplied `version` option, then clears. Used
76
+ * by the `recoverFromClientTooOld` auto-retry to inject a fresh version
77
+ * string fetched from `web.whatsapp.com` without mutating the user's
78
+ * options.
79
+ */
80
+ setNextConnectVersion(version: string): void;
81
+ /** Clears the in-memory QR and pairing sessions without touching storage. */
41
82
  clearTransientState(): Promise<void>;
83
+ /**
84
+ * Wipes credentials from memory **and** from the auth store. Does
85
+ * **not** touch the other store domains (signal, app-state, ...) -
86
+ * those are cleared separately when {@link WaClient.logout} triggers
87
+ * the server-side logout path, honoring `options.logoutStoreClear`.
88
+ * Call this manually only when you want to force a re-pair without
89
+ * going through the server logout IQ.
90
+ */
42
91
  clearStoredCredentials(): Promise<void>;
92
+ /** Stores the server's noise static key for subsequent handshakes. */
43
93
  persistServerStaticKey(serverStaticKey: Uint8Array): Promise<void>;
94
+ /** Stores the "server holds prekeys" flag; persists only when the value changes. */
44
95
  persistServerHasPreKeys(serverHasPreKeys: boolean): Promise<void>;
96
+ /**
97
+ * Stores the routing-info blob received from the server. Skips persistence
98
+ * when the value matches the one already on disk.
99
+ */
45
100
  persistRoutingInfo(routingInfo: Uint8Array): Promise<void>;
101
+ /** Clears the persisted routing-info blob (used after a routing error). */
46
102
  clearRoutingInfo(): Promise<WaAuthCredentials>;
103
+ /**
104
+ * Persists the per-connection success attributes from the server (LID,
105
+ * display name, companion key, last-success ts, props versions, ...). Only
106
+ * persists when at least one attribute actually changed.
107
+ */
47
108
  persistSuccessAttributes(attributes: WaSuccessPersistAttributes): Promise<void>;
48
- requestPairingCode(phoneNumber: string, shouldShowPushNotification?: boolean): Promise<string>;
109
+ /**
110
+ * Requests an 8-character pairing code for `phoneNumber` (link-code flow).
111
+ * Pass `customCode` to suggest a specific code; the server still validates
112
+ * and may return a different one.
113
+ *
114
+ * The client must already be connected – kick off `WaClient.connect()` in
115
+ * parallel, wait for the `auth_pairing_required` event (or any QR), then
116
+ * call this. The user then enters the returned code in WhatsApp on their
117
+ * phone under *Linked Devices → Link with phone number instead*.
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * // Start the handshake; do NOT await – connect() resolves only after pairing
122
+ * void client.connect()
123
+ *
124
+ * // Wait until the pairing screen is ready on the server side
125
+ * await new Promise<void>((resolve) => client.once('auth_pairing_required', () => resolve()))
126
+ *
127
+ * // Phone number in international format, digits only
128
+ * const code = await client.auth.requestPairingCode('5511999999999')
129
+ * console.log(`enter this on your phone: ${code.match(/.{1,4}/g)!.join('-')}`)
130
+ *
131
+ * // The `connect()` promise resolves after the user types the code:
132
+ * await new Promise<void>((resolve) => client.once('auth_paired', () => resolve()))
133
+ * ```
134
+ */
135
+ requestPairingCode(phoneNumber: string, shouldShowPushNotification?: boolean, customCode?: string): Promise<string>;
136
+ /** Fetches the ISO country code the server resolved for the current account. */
49
137
  fetchPairingCountryCodeIso(): Promise<string>;
138
+ /** Dispatcher: returns `true` when `node` is a pairing-related IQ-set we handled. */
50
139
  handleIncomingIqSet(node: BinaryNode): Promise<boolean>;
140
+ /** Dispatcher: returns `true` when `node` is a link-code companion notification. */
51
141
  handleLinkCodeNotification(node: BinaryNode): Promise<boolean>;
142
+ /** Dispatcher: returns `true` when `node` is a companion-registration refresh notification. */
52
143
  handleCompanionRegRefreshNotification(node: BinaryNode): Promise<boolean>;
53
144
  private patchCredentials;
54
145
  private runHandled;
55
146
  private updateCredentials;
147
+ private requireConnected;
56
148
  private requireCredentials;
57
149
  private handleError;
58
150
  }
@@ -0,0 +1,21 @@
1
+ import type { WaAuthClientOptions, WaAuthCredentials, WaAuthSocketOptions } from './types';
2
+ import type { Logger } from '../infra/log/types';
3
+ import type { WaAuthStore } from '../store/contracts/auth.store';
4
+ import type { WaPreKeyStore } from '../store/contracts/pre-key.store';
5
+ import type { WaSignalStore } from '../store/contracts/signal.store';
6
+ import type { WaNoiseRootCa } from '../transport/noise/WaNoiseCert';
7
+ import type { WaCommsConfig } from '../transport/types';
8
+ interface WaAuthCredentialsFlowArgs {
9
+ readonly logger: Logger;
10
+ readonly authStore: WaAuthStore;
11
+ readonly signalStore: WaSignalStore;
12
+ readonly preKeyStore: WaPreKeyStore;
13
+ readonly skipSignedPreKeySignatureVerification?: boolean;
14
+ }
15
+ export declare function loadOrCreateCredentials(args: WaAuthCredentialsFlowArgs): Promise<WaAuthCredentials>;
16
+ export declare function persistCredentials(args: WaAuthCredentialsFlowArgs, credentials: WaAuthCredentials): Promise<void>;
17
+ export declare function buildCommsConfig(logger: Logger, credentials: WaAuthCredentials, socketOptions: WaAuthSocketOptions, clientOptions: Pick<WaAuthClientOptions, 'deviceBrowser' | 'deviceOsDisplayName' | 'requireFullSync' | 'version' | 'mobileTransport'> & {
18
+ readonly noiseTrustedRootCa?: WaNoiseRootCa;
19
+ readonly disableNoiseCertificateChainVerification?: boolean;
20
+ }): Promise<WaCommsConfig>;
21
+ export {};
@@ -1,4 +1,4 @@
1
- import type { WaAuthCredentials } from '../types';
1
+ import type { WaAuthCredentials, WaAuthDangerousOptions } from '../types';
2
2
  import type { Logger } from '../../infra/log/types';
3
3
  import type { BinaryNode } from '../../transport/types';
4
4
  interface WaPairingFlowOptions {
@@ -26,6 +26,7 @@ interface WaPairingFlowOptions {
26
26
  readonly emitPairingRefresh: (forceManual: boolean) => void;
27
27
  readonly emitPaired: (credentials: WaAuthCredentials) => void;
28
28
  };
29
+ readonly dangerous?: WaAuthDangerousOptions;
29
30
  }
30
31
  export declare class WaPairingFlow {
31
32
  private readonly opts;
@@ -33,7 +34,7 @@ export declare class WaPairingFlow {
33
34
  constructor(options: WaPairingFlowOptions);
34
35
  hasPairingSession(): boolean;
35
36
  clearSession(): void;
36
- requestPairingCode(phoneNumber: string, shouldShowPushNotification?: boolean): Promise<string>;
37
+ requestPairingCode(phoneNumber: string, shouldShowPushNotification?: boolean, customCode?: string): Promise<string>;
37
38
  fetchPairingCountryCodeIso(): Promise<string>;
38
39
  handleIncomingIqSet(node: BinaryNode): Promise<boolean>;
39
40
  handleLinkCodeNotification(node: BinaryNode): Promise<boolean>;
@@ -1,5 +1,9 @@
1
1
  import type { SignalKeyPair } from '../../crypto/curves/types';
2
- export declare function createCompanionHello(): Promise<{
2
+ export declare const PBKDF2_ITERATIONS: number;
3
+ export declare function normalizeCustomPairingCode(input: string): string;
4
+ export declare function createCompanionHello(options?: {
5
+ readonly customCode?: string;
6
+ }): Promise<{
3
7
  readonly pairingCode: string;
4
8
  readonly companionEphemeralKeyPair: SignalKeyPair;
5
9
  readonly wrappedCompanionEphemeralPub: Uint8Array;
@@ -1,7 +1,14 @@
1
1
  import type { SignalKeyPair } from '../crypto/curves/types';
2
2
  import type { Proto } from '..';
3
3
  import type { RegistrationInfo, SignedPreKeyRecord } from '../signal/types';
4
+ import type { WaMobileTransportDeviceInfo } from '../transport/noise/WaMobileClientPayload';
4
5
  import type { WaCommsConfig, WaProxyTransport } from '../transport/types';
6
+ export type { WaMobileTransportDeviceInfo } from '../transport/noise/WaMobileClientPayload';
7
+ /**
8
+ * @sensitive Contains private key material (`noiseKeyPair`, `signedPreKey`,
9
+ * `advSecretKey`, `serverStaticKey`, `companionEncStatic`). Never log, serialize
10
+ * via `JSON.stringify`, or transmit unencrypted. Persist with encryption-at-rest.
11
+ */
5
12
  export interface WaAuthCredentials {
6
13
  readonly noiseKeyPair: SignalKeyPair;
7
14
  readonly registrationInfo: RegistrationInfo;
@@ -21,18 +28,98 @@ export interface WaAuthCredentials {
21
28
  readonly abPropsVersion?: number;
22
29
  readonly connectionLocation?: string;
23
30
  readonly accountCreationTs?: number;
31
+ readonly deviceInfo?: WaMobileTransportDeviceInfo;
32
+ readonly pushName?: string;
33
+ readonly yearClass?: number;
34
+ readonly memClass?: number;
24
35
  }
25
36
  export type WaAuthSocketOptions = Pick<WaCommsConfig, 'url' | 'urls' | 'protocols' | 'connectTimeoutMs' | 'reconnectIntervalMs' | 'timeoutIntervalMs' | 'maxReconnectAttempts'> & {
26
37
  readonly proxy?: {
27
38
  readonly ws?: WaProxyTransport;
28
39
  };
29
40
  };
41
+ /**
42
+ * WhatsApp Web version supplied to {@link WaAuthClientOptions.version}. Either
43
+ * a literal `'x.y.z'` string or an async resolver invoked once per connect,
44
+ * letting callers refresh the version (e.g. via `fetchLatestWaWebVersion`)
45
+ * without rebuilding the client.
46
+ */
47
+ export type WaVersionResolver = string | (() => string | Promise<string>);
30
48
  export interface WaAuthClientOptions {
49
+ /**
50
+ * Browser id advertised during pairing (`'chrome' | 'firefox' | 'safari' |
51
+ * ...`, see {@link WA_BROWSERS}). Drives the platform id sent in the
52
+ * link-code stanza and the *Linked Devices* UI label on the phone.
53
+ * Defaults to `WA_DEFAULTS.DEVICE_BROWSER` (`'chrome'`).
54
+ */
31
55
  readonly deviceBrowser?: string;
56
+ /**
57
+ * Override the numeric companion platform id (see
58
+ * {@link WA_COMPANION_PLATFORM_IDS}). Inferred from `deviceBrowser` when
59
+ * omitted – set explicitly for non-browser platforms (Electron, UWP, ...).
60
+ */
32
61
  readonly devicePlatform?: string;
62
+ /**
63
+ * Human-readable OS name shown in the *Linked Devices* list (`'Windows'`,
64
+ * `'Mac OS'`, `'Linux'`). Defaults to the current runtime's OS.
65
+ */
33
66
  readonly deviceOsDisplayName?: string;
67
+ /**
68
+ * When `true`, request a full history download from the primary device on
69
+ * pairing instead of just recent messages. Off by default.
70
+ */
34
71
  readonly requireFullSync?: boolean;
35
- readonly version?: string;
72
+ /**
73
+ * WhatsApp Web version the client advertises. Either a `'x.y.z'` literal
74
+ * or a (sync/async) resolver invoked once per connect – use the resolver
75
+ * form together with {@link fetchLatestWaWebVersion} to refresh the
76
+ * version when the hardcoded default starts hitting `failure_client_too_old`.
77
+ * Defaults to a tested production version.
78
+ */
79
+ readonly version?: WaVersionResolver;
80
+ /**
81
+ * **Dangerous escape hatches** – each flag disables a security check.
82
+ * Do not enable in production.
83
+ */
84
+ readonly dangerous?: WaAuthDangerousOptions;
85
+ /**
86
+ * Mobile-transport overrides (TCP socket, device info). Set this to
87
+ * connect via the WhatsApp Mobile protocol instead of Web – see
88
+ * {@link WaMobileTransportOptions}.
89
+ */
90
+ readonly mobileTransport?: WaMobileTransportOptions;
91
+ }
92
+ export interface WaMobileTransportOptions {
93
+ readonly deviceInfo: WaMobileTransportDeviceInfo;
94
+ readonly tcpUrl?: string;
95
+ readonly passive?: boolean;
96
+ readonly pushName?: string;
97
+ readonly yearClass?: number;
98
+ readonly memClass?: number;
99
+ }
100
+ export interface WaAuthDangerousOptions {
101
+ /**
102
+ * Skip the noise certificate-chain verification during the handshake.
103
+ * The server's static key will be accepted without proof that it was
104
+ * issued by a trusted root.
105
+ */
106
+ readonly disableNoiseCertificateChainVerification?: boolean;
107
+ /**
108
+ * Skip the XEdDSA account-signature check on the `pair-success` ADV
109
+ * identity payload, which normally proves the primary device signed off
110
+ * on this companion.
111
+ */
112
+ readonly disableAdvSignatureVerification?: boolean;
113
+ /**
114
+ * Skip the HMAC check on the `pair-success` stanza that ties the ADV
115
+ * payload to the shared pairing secret.
116
+ */
117
+ readonly disablePairSuccessHmacVerification?: boolean;
118
+ /**
119
+ * Skip the XEdDSA signature check on the locally stored signed pre-key
120
+ * during credential load. Corrupt or forged credentials will be accepted.
121
+ */
122
+ readonly disableSignedPreKeySignatureVerification?: boolean;
36
123
  }
37
124
  export interface WaSuccessPersistAttributes {
38
125
  readonly meLid?: string;