zapo-js 0.3.0 → 1.0.1

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 (781) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -178
  3. package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  4. package/dist/appstate/index.js +7 -6
  5. package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
  6. package/dist/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  7. package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -53
  8. package/dist/appstate/utils.js +16 -0
  9. package/dist/appstate-spec.js +89 -0
  10. package/dist/auth/WaAuthClient.js +100 -5
  11. package/dist/auth/credentials-flow.js +20 -8
  12. package/dist/auth/pairing/WaPairingFlow.js +35 -26
  13. package/dist/auth/pairing/pairing-code-crypto.js +17 -19
  14. package/dist/client/WaClient.js +343 -474
  15. package/dist/client/WaClientFactory.js +281 -78
  16. package/dist/client/connection/WaConnectionManager.js +28 -11
  17. package/dist/client/coordinators/WaAbPropsCoordinator.js +1 -2
  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 -171
  22. package/dist/client/coordinators/WaEmailCoordinator.js +1 -0
  23. package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
  24. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +97 -12
  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 +685 -207
  28. package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
  29. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +17 -4
  30. package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
  31. package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
  32. package/dist/client/coordinators/WaProfileCoordinator.js +220 -49
  33. package/dist/client/coordinators/WaRetryCoordinator.js +257 -126
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +8 -9
  36. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  37. package/dist/client/events/appstate-mutation.js +133 -0
  38. package/dist/client/events/business.js +375 -0
  39. package/dist/client/events/call.js +58 -0
  40. package/dist/client/events/chatstate.js +23 -0
  41. package/dist/client/events/devices.js +15 -16
  42. package/dist/client/{dirty.js → events/dirty.js} +33 -19
  43. package/dist/client/events/group.js +13 -24
  44. package/dist/client/events/identity.js +2 -1
  45. package/dist/client/events/incoming.js +502 -0
  46. package/dist/client/events/mex-notification.js +181 -0
  47. package/dist/client/events/picture.js +33 -0
  48. package/dist/client/events/presence.js +44 -0
  49. package/dist/client/events/receipt.js +26 -0
  50. package/dist/client/media.js +163 -6
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +93 -44
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +4 -18
  55. package/dist/client/messaging/link-preview.js +159 -0
  56. package/dist/client/messaging/messages.js +671 -0
  57. package/dist/client/newsletter/admin.js +165 -0
  58. package/dist/client/newsletter/content.js +253 -0
  59. package/dist/client/newsletter/discovery.js +115 -0
  60. package/dist/client/newsletter/messaging.js +197 -0
  61. package/dist/client/newsletter/mex.js +41 -0
  62. package/dist/client/newsletter/parse.js +217 -0
  63. package/dist/client/persistence/WriteBehindPersistence.js +31 -4
  64. package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
  65. package/dist/client/persistence/mailbox.js +104 -0
  66. package/dist/client/tokens/cs-token.js +11 -17
  67. package/dist/crypto/core/hkdf.js +12 -12
  68. package/dist/crypto/core/index.js +6 -8
  69. package/dist/crypto/core/keys.js +1 -8
  70. package/dist/crypto/core/nonce.js +12 -12
  71. package/dist/crypto/core/primitives.js +123 -93
  72. package/dist/crypto/core/random.js +6 -0
  73. package/dist/crypto/core/xeddsa.js +11 -9
  74. package/dist/crypto/curves/Ed25519.js +32 -21
  75. package/dist/crypto/curves/X25519.js +70 -34
  76. package/dist/crypto/curves/constants.js +2 -1
  77. package/dist/crypto/math/constants.js +1 -2
  78. package/dist/crypto/math/mod.js +0 -33
  79. package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  80. package/dist/esm/appstate/index.js +5 -5
  81. package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
  82. package/dist/esm/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  83. package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -52
  84. package/dist/esm/appstate/utils.js +16 -0
  85. package/dist/esm/appstate-spec.js +79 -0
  86. package/dist/esm/auth/WaAuthClient.js +100 -5
  87. package/dist/esm/auth/credentials-flow.js +18 -6
  88. package/dist/esm/auth/pairing/WaPairingFlow.js +34 -25
  89. package/dist/esm/auth/pairing/pairing-code-crypto.js +12 -14
  90. package/dist/esm/client/WaClient.js +345 -476
  91. package/dist/esm/client/WaClientFactory.js +282 -79
  92. package/dist/esm/client/connection/WaConnectionManager.js +28 -11
  93. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +2 -3
  94. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
  95. package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
  96. package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
  97. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +79 -169
  98. package/dist/esm/client/coordinators/WaEmailCoordinator.js +1 -0
  99. package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
  100. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +98 -13
  101. package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
  102. package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
  103. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +686 -208
  104. package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
  105. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +18 -5
  106. package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
  107. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
  108. package/dist/esm/client/coordinators/WaProfileCoordinator.js +223 -52
  109. package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -127
  110. package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
  111. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +8 -9
  112. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  113. package/dist/esm/client/events/appstate-mutation.js +130 -0
  114. package/dist/esm/client/events/business.js +370 -0
  115. package/dist/esm/client/events/call.js +55 -0
  116. package/dist/esm/client/events/chatstate.js +20 -0
  117. package/dist/esm/client/events/devices.js +15 -16
  118. package/dist/esm/client/{dirty.js → events/dirty.js} +33 -19
  119. package/dist/esm/client/events/group.js +14 -25
  120. package/dist/esm/client/events/identity.js +2 -1
  121. package/dist/esm/client/events/incoming.js +487 -0
  122. package/dist/esm/client/events/mex-notification.js +178 -0
  123. package/dist/esm/client/events/picture.js +30 -0
  124. package/dist/esm/client/events/presence.js +41 -0
  125. package/dist/esm/client/events/receipt.js +23 -0
  126. package/dist/esm/client/media.js +158 -8
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +92 -43
  129. package/dist/esm/client/messaging/ignore-key.js +126 -0
  130. package/dist/esm/client/messaging/key-protocol.js +3 -17
  131. package/dist/esm/client/messaging/link-preview.js +156 -0
  132. package/dist/esm/client/messaging/messages.js +667 -0
  133. package/dist/esm/client/newsletter/admin.js +162 -0
  134. package/dist/esm/client/newsletter/content.js +249 -0
  135. package/dist/esm/client/newsletter/discovery.js +112 -0
  136. package/dist/esm/client/newsletter/messaging.js +194 -0
  137. package/dist/esm/client/newsletter/mex.js +37 -0
  138. package/dist/esm/client/newsletter/parse.js +200 -0
  139. package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
  140. package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
  141. package/dist/esm/client/persistence/mailbox.js +101 -0
  142. package/dist/esm/client/tokens/cs-token.js +12 -18
  143. package/dist/esm/crypto/core/hkdf.js +14 -14
  144. package/dist/esm/crypto/core/index.js +2 -2
  145. package/dist/esm/crypto/core/keys.js +1 -7
  146. package/dist/esm/crypto/core/nonce.js +11 -11
  147. package/dist/esm/crypto/core/primitives.js +121 -88
  148. package/dist/esm/crypto/core/random.js +6 -0
  149. package/dist/esm/crypto/core/xeddsa.js +11 -9
  150. package/dist/esm/crypto/curves/Ed25519.js +35 -24
  151. package/dist/esm/crypto/curves/X25519.js +72 -36
  152. package/dist/esm/crypto/curves/constants.js +1 -0
  153. package/dist/esm/crypto/math/constants.js +1 -2
  154. package/dist/esm/crypto/math/mod.js +0 -32
  155. package/dist/esm/index.js +7 -2
  156. package/dist/esm/infra/log/ConsoleLogger.js +30 -6
  157. package/dist/esm/infra/log/PinoLogger.js +64 -0
  158. package/dist/esm/infra/log/types.js +4 -2
  159. package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
  160. package/dist/esm/media/constants.js +33 -2
  161. package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
  162. package/dist/esm/media/index.js +4 -3
  163. package/dist/esm/media/sticker/sticker-pack.js +133 -0
  164. package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  165. package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
  166. package/dist/esm/message/WaMessageClient.js +46 -15
  167. package/dist/esm/message/addons/link-preview/builder.js +36 -0
  168. package/dist/esm/message/addons/link-preview/detect.js +55 -0
  169. package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
  170. package/dist/esm/message/addons/link-preview/types.js +1 -0
  171. package/dist/esm/message/context-info.js +123 -0
  172. package/dist/esm/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  173. package/dist/esm/message/{icdc.js → crypto/icdc.js} +5 -7
  174. package/dist/esm/message/crypto/phash.js +133 -0
  175. package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  176. package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  177. package/dist/esm/message/{content.js → encode/content.js} +176 -7
  178. package/dist/esm/message/encode/media-payload.js +42 -0
  179. package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
  180. package/dist/esm/message/index.js +2 -2
  181. package/dist/esm/message/kinds/bot.js +111 -0
  182. package/dist/esm/message/kinds/newsletter.js +244 -0
  183. package/dist/esm/message/kinds/sticker-pack.js +29 -0
  184. package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
  185. package/dist/esm/message/{incoming.js → primitives/incoming.js} +215 -31
  186. package/dist/esm/message/primitives/peer-data-operation.js +93 -0
  187. package/dist/esm/mex.js +1 -0
  188. package/dist/esm/protocol/abprops.js +10 -0
  189. package/dist/esm/protocol/appstate.js +6 -30
  190. package/dist/esm/protocol/auth.js +3 -2
  191. package/dist/esm/protocol/bot.js +77 -0
  192. package/dist/esm/protocol/browser.js +8 -0
  193. package/dist/esm/protocol/business.js +19 -0
  194. package/dist/esm/protocol/call.js +48 -0
  195. package/dist/esm/protocol/constants.js +8 -2
  196. package/dist/esm/protocol/defaults.js +3 -0
  197. package/dist/esm/protocol/index.js +1 -1
  198. package/dist/esm/protocol/jid.js +102 -5
  199. package/dist/esm/protocol/media.js +25 -12
  200. package/dist/esm/protocol/message.js +4 -1
  201. package/dist/esm/protocol/newsletter.js +61 -0
  202. package/dist/esm/protocol/nodes.js +22 -2
  203. package/dist/esm/protocol/notification.js +18 -2
  204. package/dist/esm/protocol/presence.js +13 -0
  205. package/dist/esm/protocol/status.js +6 -0
  206. package/dist/esm/retry/codec.js +5 -0
  207. package/dist/esm/retry/parse.js +20 -38
  208. package/dist/esm/retry/reason.js +5 -0
  209. package/dist/esm/retry/replay.js +131 -37
  210. package/dist/esm/retry/tracker.js +4 -8
  211. package/dist/esm/signal/api/SignalDeviceSyncApi.js +69 -20
  212. package/dist/esm/signal/api/SignalDigestSyncApi.js +7 -2
  213. package/dist/esm/signal/api/SignalIdentitySyncApi.js +9 -0
  214. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
  215. package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
  216. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
  217. package/dist/esm/signal/api/codec.js +52 -1
  218. package/dist/esm/signal/api/prekeys.js +4 -0
  219. package/dist/esm/signal/{crypto → attestation}/WaAdvSignature.js +5 -6
  220. package/dist/esm/signal/constants.js +3 -0
  221. package/dist/esm/signal/encoding.js +6 -289
  222. package/dist/esm/signal/group/SenderKeyChain.js +18 -33
  223. package/dist/esm/signal/group/SenderKeyManager.js +25 -8
  224. package/dist/esm/signal/group/encoding.js +96 -0
  225. package/dist/esm/signal/index.js +4 -1
  226. package/dist/esm/signal/registration/encoding.js +34 -0
  227. package/dist/esm/signal/registration/keygen.js +10 -0
  228. package/dist/esm/signal/registration/utils.js +8 -1
  229. package/dist/esm/signal/session/SignalProtocol.js +113 -11
  230. package/dist/esm/signal/session/SignalRatchet.js +29 -58
  231. package/dist/esm/signal/session/SignalSession.js +7 -14
  232. package/dist/esm/signal/session/encoding.js +173 -0
  233. package/dist/esm/signal/session/resolver.js +139 -30
  234. package/dist/esm/store/cache/identity.cache.js +75 -0
  235. package/dist/esm/store/cache/privacy-token.cache.js +57 -0
  236. package/dist/esm/store/cache/sender-key.cache.js +101 -0
  237. package/dist/esm/store/cache/session.cache.js +92 -0
  238. package/dist/esm/store/contracts/group-metadata.store.js +1 -0
  239. package/dist/esm/store/createStore.js +91 -37
  240. package/dist/esm/store/index.js +15 -14
  241. package/dist/esm/store/locks/contact.lock.js +1 -0
  242. package/dist/esm/store/locks/device-list.lock.js +1 -0
  243. package/dist/esm/store/locks/group-metadata.lock.js +20 -0
  244. package/dist/esm/store/locks/pre-key.lock.js +4 -1
  245. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  246. package/dist/esm/store/memory/auth.store.js +24 -0
  247. package/dist/esm/store/memory/contact.store.js +79 -0
  248. package/dist/esm/store/memory/device-list.store.js +103 -0
  249. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  250. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  251. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  252. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  254. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  255. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  256. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  258. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  259. package/dist/esm/store/noop.store.js +6 -4
  260. package/dist/esm/transport/WaComms.js +14 -5
  261. package/dist/esm/transport/WaWebSocket.js +32 -8
  262. package/dist/esm/transport/binary/constants.js +10 -4
  263. package/dist/esm/transport/binary/decoder.js +21 -15
  264. package/dist/esm/transport/binary/encoder.js +96 -21
  265. package/dist/esm/transport/binary/tokens.js +12 -12
  266. package/dist/esm/transport/index.js +1 -0
  267. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  268. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  269. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  270. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  271. package/dist/esm/transport/node/builders/abprops.js +2 -2
  272. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  273. package/dist/esm/transport/node/builders/bot.js +38 -0
  274. package/dist/esm/transport/node/builders/business.js +30 -30
  275. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  276. package/dist/esm/transport/node/builders/community.js +53 -0
  277. package/dist/esm/transport/node/builders/device.js +2 -2
  278. package/dist/esm/transport/node/builders/email.js +6 -5
  279. package/dist/esm/transport/node/builders/global.js +1 -1
  280. package/dist/esm/transport/node/builders/group.js +114 -4
  281. package/dist/esm/transport/node/builders/media.js +2 -2
  282. package/dist/esm/transport/node/builders/message.js +83 -49
  283. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  284. package/dist/esm/transport/node/builders/passive.js +7 -0
  285. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  286. package/dist/esm/transport/node/builders/presence.js +27 -1
  287. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  288. package/dist/esm/transport/node/builders/privacy.js +6 -6
  289. package/dist/esm/transport/node/builders/profile.js +28 -8
  290. package/dist/esm/transport/node/builders/tos.js +58 -0
  291. package/dist/esm/transport/node/builders/usync.js +51 -2
  292. package/dist/esm/transport/node/helpers.js +3 -1
  293. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  294. package/dist/esm/transport/node/mex/client.js +22 -0
  295. package/dist/esm/transport/node/query.js +17 -0
  296. package/dist/esm/transport/node/usync.js +12 -0
  297. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  298. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  300. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  301. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  302. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  303. package/dist/esm/transport/noise/constants.js +0 -1
  304. package/dist/esm/transport/proxy.js +5 -0
  305. package/dist/esm/transport/stream/parse.js +3 -7
  306. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  307. package/dist/esm/util/async.js +4 -0
  308. package/dist/esm/util/bytes.js +37 -2
  309. package/dist/esm/util/clock.js +15 -0
  310. package/dist/esm/util/coercion.js +45 -3
  311. package/dist/esm/util/collections.js +11 -0
  312. package/dist/esm/util/index.js +2 -2
  313. package/dist/esm/util/primitives.js +19 -0
  314. package/dist/esm/util/runtime.js +5 -0
  315. package/dist/esm/version-spec.js +1 -0
  316. package/dist/index.js +35 -5
  317. package/dist/infra/log/ConsoleLogger.js +30 -6
  318. package/dist/infra/log/PinoLogger.js +64 -0
  319. package/dist/infra/log/types.js +4 -2
  320. package/dist/infra/perf/BackgroundQueue.js +55 -13
  321. package/dist/media/constants.js +34 -3
  322. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  323. package/dist/media/index.js +9 -4
  324. package/dist/media/sticker/sticker-pack.js +136 -0
  325. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  326. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  327. package/dist/message/WaMessageClient.js +46 -15
  328. package/dist/message/addons/link-preview/builder.js +39 -0
  329. package/dist/message/addons/link-preview/detect.js +58 -0
  330. package/dist/message/addons/link-preview/fetcher.js +394 -0
  331. package/dist/message/addons/link-preview/types.js +2 -0
  332. package/dist/message/context-info.js +129 -0
  333. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  334. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  335. package/dist/message/crypto/phash.js +136 -0
  336. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  337. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  338. package/dist/message/{content.js → encode/content.js} +192 -7
  339. package/dist/message/encode/media-payload.js +45 -0
  340. package/dist/message/{padding.js → encode/padding.js} +9 -3
  341. package/dist/message/index.js +2 -2
  342. package/dist/message/kinds/bot.js +120 -0
  343. package/dist/message/kinds/newsletter.js +248 -0
  344. package/dist/message/kinds/sticker-pack.js +34 -0
  345. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  346. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  347. package/dist/message/primitives/peer-data-operation.js +96 -0
  348. package/dist/mex.js +6 -0
  349. package/dist/proto.js +1 -1
  350. package/dist/protocol/abprops.js +10 -0
  351. package/dist/protocol/appstate.js +7 -31
  352. package/dist/protocol/auth.js +3 -2
  353. package/dist/protocol/bot.js +81 -0
  354. package/dist/protocol/browser.js +8 -0
  355. package/dist/protocol/business.js +22 -0
  356. package/dist/protocol/call.js +51 -0
  357. package/dist/protocol/constants.js +39 -3
  358. package/dist/protocol/defaults.js +3 -0
  359. package/dist/protocol/index.js +12 -3
  360. package/dist/protocol/jid.js +107 -5
  361. package/dist/protocol/media.js +25 -12
  362. package/dist/protocol/message.js +4 -1
  363. package/dist/protocol/newsletter.js +64 -0
  364. package/dist/protocol/nodes.js +22 -2
  365. package/dist/protocol/notification.js +19 -3
  366. package/dist/protocol/presence.js +16 -0
  367. package/dist/protocol/status.js +9 -0
  368. package/dist/retry/codec.js +5 -0
  369. package/dist/retry/parse.js +16 -34
  370. package/dist/retry/reason.js +5 -0
  371. package/dist/retry/replay.js +130 -36
  372. package/dist/retry/tracker.js +3 -7
  373. package/dist/signal/api/SignalDeviceSyncApi.js +67 -18
  374. package/dist/signal/api/SignalDigestSyncApi.js +7 -2
  375. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  376. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  377. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  378. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  379. package/dist/signal/api/codec.js +52 -0
  380. package/dist/signal/api/prekeys.js +4 -0
  381. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +6 -8
  382. package/dist/signal/constants.js +4 -1
  383. package/dist/signal/encoding.js +5 -303
  384. package/dist/signal/group/SenderKeyChain.js +18 -33
  385. package/dist/signal/group/SenderKeyCodec.js +2 -2
  386. package/dist/signal/group/SenderKeyManager.js +26 -9
  387. package/dist/signal/group/encoding.js +101 -0
  388. package/dist/signal/index.js +13 -10
  389. package/dist/signal/registration/encoding.js +39 -0
  390. package/dist/signal/registration/keygen.js +11 -1
  391. package/dist/signal/registration/utils.js +8 -1
  392. package/dist/signal/session/SignalProtocol.js +113 -11
  393. package/dist/signal/session/SignalRatchet.js +26 -56
  394. package/dist/signal/session/SignalSerializer.js +2 -2
  395. package/dist/signal/session/SignalSession.js +7 -15
  396. package/dist/signal/session/encoding.js +183 -0
  397. package/dist/signal/session/resolver.js +139 -30
  398. package/dist/store/cache/identity.cache.js +78 -0
  399. package/dist/store/cache/privacy-token.cache.js +60 -0
  400. package/dist/store/cache/sender-key.cache.js +104 -0
  401. package/dist/store/cache/session.cache.js +95 -0
  402. package/dist/store/contracts/group-metadata.store.js +2 -0
  403. package/dist/store/createStore.js +90 -36
  404. package/dist/store/index.js +18 -16
  405. package/dist/store/locks/contact.lock.js +1 -0
  406. package/dist/store/locks/device-list.lock.js +1 -0
  407. package/dist/store/locks/group-metadata.lock.js +23 -0
  408. package/dist/store/locks/pre-key.lock.js +4 -1
  409. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  410. package/dist/store/memory/auth.store.js +28 -0
  411. package/dist/store/memory/contact.store.js +83 -0
  412. package/dist/store/memory/device-list.store.js +107 -0
  413. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  414. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  415. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  416. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  417. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  418. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  419. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  420. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  421. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  422. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  423. package/dist/store/noop.store.js +7 -5
  424. package/dist/transport/WaComms.js +14 -5
  425. package/dist/transport/WaWebSocket.js +32 -8
  426. package/dist/transport/binary/constants.js +11 -5
  427. package/dist/transport/binary/decoder.js +24 -18
  428. package/dist/transport/binary/encoder.js +109 -34
  429. package/dist/transport/binary/tokens.js +12 -12
  430. package/dist/transport/index.js +3 -1
  431. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  432. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  433. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  434. package/dist/transport/node/WaNodeTransport.js +13 -0
  435. package/dist/transport/node/builders/abprops.js +1 -1
  436. package/dist/transport/node/builders/account-sync.js +7 -16
  437. package/dist/transport/node/builders/bot.js +43 -0
  438. package/dist/transport/node/builders/business.js +31 -31
  439. package/dist/transport/node/builders/chatstate.js +31 -0
  440. package/dist/transport/node/builders/community.js +59 -0
  441. package/dist/transport/node/builders/device.js +1 -1
  442. package/dist/transport/node/builders/email.js +6 -5
  443. package/dist/transport/node/builders/global.js +2 -2
  444. package/dist/transport/node/builders/group.js +121 -3
  445. package/dist/transport/node/builders/media.js +1 -1
  446. package/dist/transport/node/builders/message.js +84 -49
  447. package/dist/transport/node/builders/newsletter.js +183 -0
  448. package/dist/transport/node/builders/passive.js +10 -0
  449. package/dist/transport/node/builders/prekeys.js +3 -3
  450. package/dist/transport/node/builders/presence.js +28 -1
  451. package/dist/transport/node/builders/privacy-token.js +1 -1
  452. package/dist/transport/node/builders/privacy.js +5 -5
  453. package/dist/transport/node/builders/profile.js +30 -7
  454. package/dist/transport/node/builders/tos.js +63 -0
  455. package/dist/transport/node/builders/usync.js +52 -1
  456. package/dist/transport/node/helpers.js +3 -2
  457. package/dist/transport/node/mex/argo-decoder.js +2 -2
  458. package/dist/transport/node/mex/client.js +23 -0
  459. package/dist/transport/node/query.js +17 -0
  460. package/dist/transport/node/usync.js +13 -0
  461. package/dist/transport/noise/WaClientPayload.js +9 -9
  462. package/dist/transport/noise/WaMobileClientPayload.js +6 -1
  463. package/dist/transport/noise/WaNoiseCert.js +7 -2
  464. package/dist/transport/noise/WaNoiseHandshake.js +26 -24
  465. package/dist/transport/noise/WaNoiseSession.js +41 -61
  466. package/dist/transport/noise/WaNoiseSocket.js +19 -13
  467. package/dist/transport/noise/constants.js +1 -2
  468. package/dist/transport/proxy.js +5 -0
  469. package/dist/transport/stream/parse.js +3 -7
  470. package/dist/transport/wa-web-version-fetcher.js +94 -0
  471. package/dist/types/appstate/constants.d.ts +1 -1
  472. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  473. package/dist/types/appstate/index.d.ts +5 -5
  474. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  475. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  476. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  477. package/dist/types/appstate/types.d.ts +1 -1
  478. package/dist/types/appstate/utils.d.ts +18 -2
  479. package/dist/types/appstate-spec.d.ts +24 -0
  480. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  481. package/dist/types/auth/credentials-flow.d.ts +4 -3
  482. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  483. package/dist/types/auth/types.d.ts +49 -2
  484. package/dist/types/client/WaClient.d.ts +178 -71
  485. package/dist/types/client/WaClientFactory.d.ts +30 -5
  486. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  487. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  488. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  489. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  490. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  491. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  492. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  493. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  494. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  495. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  496. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  497. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +55 -32
  498. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  499. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  500. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  501. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  502. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  503. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  504. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  505. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  506. package/dist/types/client/events/abprops.d.ts +2 -1
  507. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  508. package/dist/types/client/events/business.d.ts +10 -0
  509. package/dist/types/client/events/call.d.ts +31 -0
  510. package/dist/types/client/events/chatstate.d.ts +9 -0
  511. package/dist/types/client/events/devices.d.ts +5 -4
  512. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  513. package/dist/types/client/events/group.d.ts +2 -1
  514. package/dist/types/client/events/identity.d.ts +2 -1
  515. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  516. package/dist/types/client/events/mex-notification.d.ts +6 -0
  517. package/dist/types/client/events/picture.d.ts +8 -0
  518. package/dist/types/client/events/presence.d.ts +28 -0
  519. package/dist/types/client/events/receipt.d.ts +14 -0
  520. package/dist/types/client/events/registration.d.ts +4 -3
  521. package/dist/types/client/index.d.ts +1 -1
  522. package/dist/types/client/media.d.ts +35 -1
  523. package/dist/types/client/messaging/fanout.d.ts +2 -2
  524. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  525. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  526. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  527. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  528. package/dist/types/client/messaging/messages.d.ts +28 -0
  529. package/dist/types/client/newsletter/admin.d.ts +71 -0
  530. package/dist/types/client/newsletter/content.d.ts +42 -0
  531. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  532. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  533. package/dist/types/client/newsletter/mex.d.ts +14 -0
  534. package/dist/types/client/newsletter/parse.d.ts +19 -0
  535. package/dist/types/client/newsletter/types.d.ts +190 -0
  536. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  537. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  538. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  539. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  540. package/dist/types/client/types.d.ts +844 -72
  541. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  542. package/dist/types/crypto/core/index.d.ts +2 -2
  543. package/dist/types/crypto/core/keys.d.ts +0 -4
  544. package/dist/types/crypto/core/nonce.d.ts +4 -5
  545. package/dist/types/crypto/core/primitives.d.ts +31 -20
  546. package/dist/types/crypto/core/random.d.ts +6 -0
  547. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  548. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  549. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  550. package/dist/types/crypto/curves/constants.d.ts +4 -3
  551. package/dist/types/crypto/curves/types.d.ts +0 -5
  552. package/dist/types/crypto/math/constants.d.ts +0 -1
  553. package/dist/types/crypto/math/mod.d.ts +0 -1
  554. package/dist/types/index.d.ts +34 -8
  555. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  556. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  557. package/dist/types/infra/log/types.d.ts +6 -0
  558. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  559. package/dist/types/media/constants.d.ts +7 -2
  560. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  561. package/dist/types/media/index.d.ts +7 -5
  562. package/dist/types/media/processor.d.ts +27 -5
  563. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  564. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  565. package/dist/types/media/transfer/conn.d.ts +7 -0
  566. package/dist/types/media/types.d.ts +1 -2
  567. package/dist/types/message/WaMessageClient.d.ts +14 -0
  568. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  569. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  570. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  571. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  572. package/dist/types/message/context-info.d.ts +66 -0
  573. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  574. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  575. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  576. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  577. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  578. package/dist/types/message/encode/content.d.ts +43 -0
  579. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  580. package/dist/types/message/encode/media-payload.d.ts +12 -0
  581. package/dist/types/message/index.d.ts +2 -2
  582. package/dist/types/message/kinds/bot.d.ts +31 -0
  583. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  584. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  585. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  586. package/dist/types/message/primitives/incoming.d.ts +21 -0
  587. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  588. package/dist/types/message/types.d.ts +209 -11
  589. package/dist/types/mex.d.ts +2 -0
  590. package/dist/types/proto.d.ts +2 -2
  591. package/dist/types/protocol/abprops.d.ts +9 -0
  592. package/dist/types/protocol/appstate.d.ts +4 -49
  593. package/dist/types/protocol/auth.d.ts +2 -2
  594. package/dist/types/protocol/bot.d.ts +45 -0
  595. package/dist/types/protocol/browser.d.ts +8 -0
  596. package/dist/types/protocol/business.d.ts +21 -0
  597. package/dist/types/protocol/call.d.ts +44 -0
  598. package/dist/types/protocol/constants.d.ts +16 -3
  599. package/dist/types/protocol/defaults.d.ts +3 -0
  600. package/dist/types/protocol/group.d.ts +1 -1
  601. package/dist/types/protocol/index.d.ts +2 -1
  602. package/dist/types/protocol/jid.d.ts +78 -0
  603. package/dist/types/protocol/media.d.ts +21 -13
  604. package/dist/types/protocol/message.d.ts +4 -0
  605. package/dist/types/protocol/newsletter.d.ts +65 -0
  606. package/dist/types/protocol/nodes.d.ts +20 -0
  607. package/dist/types/protocol/notification.d.ts +16 -0
  608. package/dist/types/protocol/presence.d.ts +16 -0
  609. package/dist/types/protocol/status.d.ts +7 -0
  610. package/dist/types/retry/codec.d.ts +5 -0
  611. package/dist/types/retry/index.d.ts +1 -1
  612. package/dist/types/retry/parse.d.ts +9 -0
  613. package/dist/types/retry/reason.d.ts +5 -0
  614. package/dist/types/retry/replay.d.ts +19 -5
  615. package/dist/types/retry/tracker.d.ts +10 -3
  616. package/dist/types/retry/types.d.ts +3 -8
  617. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  618. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  619. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  620. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  621. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  622. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  623. package/dist/types/signal/api/codec.d.ts +20 -0
  624. package/dist/types/signal/api/constants.d.ts +1 -1
  625. package/dist/types/signal/api/prekeys.d.ts +4 -0
  626. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  627. package/dist/types/signal/attestation/constants.d.ts +4 -0
  628. package/dist/types/signal/constants.d.ts +7 -4
  629. package/dist/types/signal/encoding.d.ts +6 -68
  630. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  631. package/dist/types/signal/group/SenderKeyManager.d.ts +18 -1
  632. package/dist/types/signal/group/encoding.d.ts +25 -0
  633. package/dist/types/signal/index.d.ts +4 -1
  634. package/dist/types/signal/registration/encoding.d.ts +30 -0
  635. package/dist/types/signal/registration/keygen.d.ts +10 -0
  636. package/dist/types/signal/registration/utils.d.ts +5 -0
  637. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  638. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  639. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  640. package/dist/types/signal/session/encoding.d.ts +28 -0
  641. package/dist/types/signal/session/resolver.d.ts +14 -0
  642. package/dist/types/signal/types.d.ts +1 -1
  643. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  644. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  645. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  646. package/dist/types/store/cache/session.cache.d.ts +23 -0
  647. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  648. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  649. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  650. package/dist/types/store/contracts/message.store.d.ts +0 -2
  651. package/dist/types/store/createStore.d.ts +54 -2
  652. package/dist/types/store/index.d.ts +17 -16
  653. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  654. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  655. package/dist/types/store/memory/auth.store.d.ts +18 -0
  656. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  657. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  658. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  659. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  661. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  662. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  663. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  664. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  665. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  666. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  667. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  668. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  669. package/dist/types/store/noop.store.d.ts +2 -2
  670. package/dist/types/store/types.d.ts +250 -6
  671. package/dist/types/transport/WaComms.d.ts +5 -0
  672. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  673. package/dist/types/transport/binary/constants.d.ts +8 -2
  674. package/dist/types/transport/binary/decoder.d.ts +5 -0
  675. package/dist/types/transport/binary/encoder.d.ts +5 -0
  676. package/dist/types/transport/binary/tokens.d.ts +6 -6
  677. package/dist/types/transport/index.d.ts +3 -1
  678. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  679. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  680. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  681. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  682. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  683. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  684. package/dist/types/transport/node/builders/business.d.ts +21 -4
  685. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  686. package/dist/types/transport/node/builders/community.d.ts +17 -0
  687. package/dist/types/transport/node/builders/group.d.ts +44 -2
  688. package/dist/types/transport/node/builders/message.d.ts +11 -6
  689. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  690. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  691. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  692. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  693. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  694. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  695. package/dist/types/transport/node/helpers.d.ts +1 -2
  696. package/dist/types/transport/node/mex/client.d.ts +12 -1
  697. package/dist/types/transport/node/query.d.ts +19 -1
  698. package/dist/types/transport/node/usync.d.ts +3 -0
  699. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +6 -1
  700. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  701. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  702. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  703. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  704. package/dist/types/transport/noise/constants.d.ts +4 -5
  705. package/dist/types/transport/noise/types.d.ts +1 -1
  706. package/dist/types/transport/proxy.d.ts +5 -0
  707. package/dist/types/transport/types.d.ts +14 -7
  708. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  709. package/dist/types/util/async.d.ts +4 -0
  710. package/dist/types/util/bytes.d.ts +36 -1
  711. package/dist/types/util/clock.d.ts +6 -0
  712. package/dist/types/util/coercion.d.ts +25 -0
  713. package/dist/types/util/collections.d.ts +8 -0
  714. package/dist/types/util/index.d.ts +2 -2
  715. package/dist/types/util/primitives.d.ts +11 -0
  716. package/dist/types/util/runtime.d.ts +5 -0
  717. package/dist/types/version-spec.d.ts +1 -0
  718. package/dist/util/async.js +4 -0
  719. package/dist/util/bytes.js +37 -2
  720. package/dist/util/clock.js +18 -0
  721. package/dist/util/coercion.js +48 -3
  722. package/dist/util/collections.js +12 -0
  723. package/dist/util/index.js +7 -1
  724. package/dist/util/primitives.js +20 -0
  725. package/dist/util/runtime.js +5 -0
  726. package/dist/version-spec.js +5 -0
  727. package/package.json +32 -8
  728. package/spec/appstate/index.d.ts +188 -0
  729. package/spec/appstate/index.js +850 -0
  730. package/spec/mex/index.d.ts +4172 -0
  731. package/spec/mex/index.js +261 -0
  732. package/spec/proto/index.d.ts +16305 -0
  733. package/spec/proto/index.js +1 -0
  734. package/spec/version/index.d.ts +4 -0
  735. package/spec/version/index.js +9 -0
  736. package/spec/version/version.json +3 -0
  737. package/dist/client/events/chat.js +0 -227
  738. package/dist/client/incoming.js +0 -306
  739. package/dist/client/mailbox.js +0 -66
  740. package/dist/client/messages.js +0 -305
  741. package/dist/esm/client/events/chat.js +0 -224
  742. package/dist/esm/client/incoming.js +0 -296
  743. package/dist/esm/client/mailbox.js +0 -63
  744. package/dist/esm/client/messages.js +0 -301
  745. package/dist/esm/media/WaMediaCrypto.js +0 -499
  746. package/dist/esm/message/phash.js +0 -47
  747. package/dist/esm/store/locks/participants.lock.js +0 -20
  748. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  749. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  750. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  751. package/dist/media/WaMediaCrypto.js +0 -503
  752. package/dist/message/phash.js +0 -50
  753. package/dist/store/locks/participants.lock.js +0 -23
  754. package/dist/store/providers/memory/contact.store.js +0 -32
  755. package/dist/store/providers/memory/device-list.store.js +0 -71
  756. package/dist/transport/node/mex/persist-ids.js +0 -13
  757. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  758. package/dist/types/client/events/chat.d.ts +0 -3
  759. package/dist/types/client/history-sync.d.ts +0 -20
  760. package/dist/types/client/messages.d.ts +0 -18
  761. package/dist/types/client/messaging/participants.d.ts +0 -13
  762. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  763. package/dist/types/media/conn.d.ts +0 -3
  764. package/dist/types/message/content.d.ts +0 -14
  765. package/dist/types/message/incoming.d.ts +0 -18
  766. package/dist/types/signal/crypto/constants.d.ts +0 -4
  767. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  768. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  769. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  770. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  771. package/proto/index.d.ts +0 -10903
  772. package/proto/index.js +0 -1
  773. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  774. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  775. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  776. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  777. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  778. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  779. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  780. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  781. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -8,8 +8,18 @@ const constants_1 = require("../protocol/constants");
8
8
  const bytes_1 = require("../util/bytes");
9
9
  const primitives_1 = require("../util/primitives");
10
10
  const runtime_1 = require("../util/runtime");
11
+ /**
12
+ * Owns the auth/pairing lifecycle and persistence of {@link WaAuthCredentials}.
13
+ * Exposed as `client.auth` on a {@link WaClient}.
14
+ *
15
+ * Lifecycle: construct with options + dependencies, call
16
+ * {@link loadOrCreateCredentials} to bring credentials online, then either
17
+ * follow the QR flow (`onQr` callback) or call {@link requestPairingCode} for
18
+ * the link-code flow.
19
+ */
11
20
  class WaAuthClient {
12
21
  constructor(options, deps) {
22
+ this.versionOverride = null;
13
23
  const deviceBrowser = options.deviceBrowser ?? constants_1.WA_DEFAULTS.DEVICE_BROWSER;
14
24
  const device = Object.freeze({
15
25
  browser: deviceBrowser,
@@ -28,6 +38,7 @@ class WaAuthClient {
28
38
  this.authStore = deps.authStore;
29
39
  this.signalStore = deps.signalStore;
30
40
  this.preKeyStore = deps.preKeyStore;
41
+ this.isConnected = deps.isConnected;
31
42
  this.credentials = null;
32
43
  this.qrFlow = new WaQrFlow_1.WaQrFlow({
33
44
  logger: this.logger,
@@ -52,6 +63,10 @@ class WaAuthClient {
52
63
  dangerous: options.dangerous
53
64
  });
54
65
  }
66
+ /**
67
+ * Returns a snapshot of auth readiness flags (connection, registration,
68
+ * pending QR/pairing prompts).
69
+ */
55
70
  getState(connected = false) {
56
71
  return {
57
72
  connected,
@@ -60,9 +75,14 @@ class WaAuthClient {
60
75
  hasPairingCode: this.pairingFlow.hasPairingSession()
61
76
  };
62
77
  }
78
+ /** Returns the currently-loaded credentials, or `null` before initialization. */
63
79
  getCurrentCredentials() {
64
80
  return this.credentials;
65
81
  }
82
+ /**
83
+ * Loads persisted credentials from the auth store, or generates a fresh
84
+ * set when none exist. Must be called before connecting.
85
+ */
66
86
  async loadOrCreateCredentials() {
67
87
  return this.runHandled(async () => {
68
88
  this.logger.debug('auth client loadOrCreateCredentials start');
@@ -79,29 +99,56 @@ class WaAuthClient {
79
99
  return this.credentials;
80
100
  });
81
101
  }
82
- buildCommsConfig(socketOptions, overrides = {}) {
102
+ /**
103
+ * Builds a {@link WaCommsConfig} from the current credentials and the
104
+ * runtime device/transport options – feeds {@link WaComms}.
105
+ */
106
+ async buildCommsConfig(socketOptions, overrides = {}) {
83
107
  this.logger.trace('auth client building comms config');
108
+ const override = this.versionOverride;
109
+ this.versionOverride = null;
84
110
  return (0, credentials_flow_1.buildCommsConfig)(this.logger, this.requireCredentials(), socketOptions, {
85
111
  deviceBrowser: this.options.deviceBrowser,
86
112
  deviceOsDisplayName: this.options.deviceOsDisplayName,
87
113
  requireFullSync: this.options.requireFullSync,
88
- version: this.options.version,
114
+ version: override ?? this.options.version,
89
115
  mobileTransport: this.options.mobileTransport,
90
116
  noiseTrustedRootCa: overrides.noiseTrustedRootCa,
91
117
  disableNoiseCertificateChainVerification: overrides.disableNoiseCertificateChainVerification ??
92
118
  this.options.dangerous?.disableNoiseCertificateChainVerification
93
119
  });
94
120
  }
121
+ /**
122
+ * One-shot override for the next {@link buildCommsConfig} call: takes
123
+ * precedence over the user-supplied `version` option, then clears. Used
124
+ * by the `recoverFromClientTooOld` auto-retry to inject a fresh version
125
+ * string fetched from `web.whatsapp.com` without mutating the user's
126
+ * options.
127
+ */
128
+ setNextConnectVersion(version) {
129
+ this.versionOverride = version;
130
+ }
131
+ /** Clears the in-memory QR and pairing sessions without touching storage. */
132
+ // eslint-disable-next-line @typescript-eslint/require-await
95
133
  async clearTransientState() {
96
134
  this.logger.trace('auth client clear transient state');
97
135
  this.qrFlow.clear();
98
136
  this.pairingFlow.clearSession();
99
137
  }
138
+ /**
139
+ * Wipes credentials from memory **and** from the auth store. Does
140
+ * **not** touch the other store domains (signal, app-state, ...) -
141
+ * those are cleared separately when {@link WaClient.logout} triggers
142
+ * the server-side logout path, honoring `options.logoutStoreClear`.
143
+ * Call this manually only when you want to force a re-pair without
144
+ * going through the server logout IQ.
145
+ */
100
146
  async clearStoredCredentials() {
101
147
  this.logger.warn('auth client clearing stored credentials');
102
148
  this.credentials = null;
103
149
  await Promise.all([this.authStore.clear(), this.clearTransientState()]);
104
150
  }
151
+ /** Stores the server's noise static key for subsequent handshakes. */
105
152
  async persistServerStaticKey(serverStaticKey) {
106
153
  this.logger.debug('persisting server static key', {
107
154
  keyLength: serverStaticKey.byteLength
@@ -111,6 +158,7 @@ class WaAuthClient {
111
158
  serverStaticKey
112
159
  }));
113
160
  }
161
+ /** Stores the "server holds prekeys" flag; persists only when the value changes. */
114
162
  async persistServerHasPreKeys(serverHasPreKeys) {
115
163
  await this.patchCredentials((credentials) => ({
116
164
  ...credentials,
@@ -124,6 +172,10 @@ class WaAuthClient {
124
172
  }
125
173
  });
126
174
  }
175
+ /**
176
+ * Stores the routing-info blob received from the server. Skips persistence
177
+ * when the value matches the one already on disk.
178
+ */
127
179
  async persistRoutingInfo(routingInfo) {
128
180
  this.logger.trace('persisting routing info', {
129
181
  byteLength: routingInfo.byteLength
@@ -141,6 +193,7 @@ class WaAuthClient {
141
193
  }
142
194
  });
143
195
  }
196
+ /** Clears the persisted routing-info blob (used after a routing error). */
144
197
  async clearRoutingInfo() {
145
198
  return this.patchCredentials((credentials) => ({
146
199
  ...credentials,
@@ -152,6 +205,11 @@ class WaAuthClient {
152
205
  }
153
206
  });
154
207
  }
208
+ /**
209
+ * Persists the per-connection success attributes from the server (LID,
210
+ * display name, companion key, last-success ts, props versions, ...). Only
211
+ * persists when at least one attribute actually changed.
212
+ */
155
213
  async persistSuccessAttributes(attributes) {
156
214
  let persistDiff;
157
215
  const computeDiff = (current, next) => ({
@@ -188,24 +246,56 @@ class WaAuthClient {
188
246
  }
189
247
  });
190
248
  }
191
- async requestPairingCode(phoneNumber, shouldShowPushNotification = false, customCode) {
249
+ /**
250
+ * Requests an 8-character pairing code for `phoneNumber` (link-code flow).
251
+ * Pass `customCode` to suggest a specific code; the server still validates
252
+ * and may return a different one.
253
+ *
254
+ * The client must already be connected – kick off `WaClient.connect()` in
255
+ * parallel, wait for the `auth_pairing_required` event (or any QR), then
256
+ * call this. The user then enters the returned code in WhatsApp on their
257
+ * phone under *Linked Devices → Link with phone number instead*.
258
+ *
259
+ * @example
260
+ * ```ts
261
+ * // Start the handshake; do NOT await – connect() resolves only after pairing
262
+ * void client.connect()
263
+ *
264
+ * // Wait until the pairing screen is ready on the server side
265
+ * await new Promise<void>((resolve) => client.once('auth_pairing_required', () => resolve()))
266
+ *
267
+ * // Phone number in international format, digits only
268
+ * const code = await client.auth.requestPairingCode('5511999999999')
269
+ * console.log(`enter this on your phone: ${code.match(/.{1,4}/g)!.join('-')}`)
270
+ *
271
+ * // The `connect()` promise resolves after the user types the code:
272
+ * await new Promise<void>((resolve) => client.once('auth_paired', () => resolve()))
273
+ * ```
274
+ */
275
+ async requestPairingCode(phoneNumber, shouldShowPushNotification = true, customCode) {
276
+ this.requireConnected();
192
277
  this.requireCredentials();
193
- this.logger.info('auth client requesting pairing code');
278
+ this.logger.debug('auth client requesting pairing code');
194
279
  return this.runHandled(() => this.pairingFlow.requestPairingCode(phoneNumber, shouldShowPushNotification, customCode));
195
280
  }
281
+ /** Fetches the ISO country code the server resolved for the current account. */
196
282
  async fetchPairingCountryCodeIso() {
283
+ this.requireConnected();
197
284
  this.requireCredentials();
198
285
  this.logger.trace('auth client fetching pairing country code ISO');
199
286
  return this.runHandled(() => this.pairingFlow.fetchPairingCountryCodeIso());
200
287
  }
288
+ /** Dispatcher: returns `true` when `node` is a pairing-related IQ-set we handled. */
201
289
  async handleIncomingIqSet(node) {
202
290
  this.logger.trace('auth client handleIncomingIqSet', { id: node.attrs.id });
203
291
  return this.runHandled(() => this.pairingFlow.handleIncomingIqSet(node));
204
292
  }
293
+ /** Dispatcher: returns `true` when `node` is a link-code companion notification. */
205
294
  async handleLinkCodeNotification(node) {
206
295
  this.logger.trace('auth client handleLinkCodeNotification', { id: node.attrs.id });
207
296
  return this.runHandled(() => this.pairingFlow.handleLinkCodeNotification(node));
208
297
  }
298
+ /** Dispatcher: returns `true` when `node` is a companion-registration refresh notification. */
209
299
  async handleCompanionRegRefreshNotification(node) {
210
300
  this.logger.trace('auth client handleCompanionRegRefreshNotification', {
211
301
  id: node.attrs.id
@@ -233,7 +323,7 @@ class WaAuthClient {
233
323
  }
234
324
  async updateCredentials(credentials) {
235
325
  this.logger.trace('auth client update credentials', {
236
- registered: credentials?.meJid !== null && credentials?.meJid !== undefined
326
+ registered: !!credentials?.meJid
237
327
  });
238
328
  this.credentials = credentials;
239
329
  await (0, credentials_flow_1.persistCredentials)({
@@ -243,6 +333,11 @@ class WaAuthClient {
243
333
  preKeyStore: this.preKeyStore
244
334
  }, credentials);
245
335
  }
336
+ requireConnected() {
337
+ if (this.isConnected && !this.isConnected()) {
338
+ throw new Error('client is not connected');
339
+ }
340
+ }
246
341
  requireCredentials() {
247
342
  if (!this.credentials) {
248
343
  throw new Error('credentials are not initialized');
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadOrCreateCredentials = loadOrCreateCredentials;
4
4
  exports.persistCredentials = persistCredentials;
5
5
  exports.buildCommsConfig = buildCommsConfig;
6
- const _crypto_1 = require("../crypto/index.js");
6
+ const _crypto_1 = require("../crypto");
7
7
  const keys_1 = require("../crypto/core/keys");
8
8
  const X25519_1 = require("../crypto/curves/X25519");
9
9
  const jid_1 = require("../protocol/jid");
10
- const utils_1 = require("../signal/registration/utils");
10
+ const _signal_1 = require("../signal");
11
11
  const WaMobileTcpSocket_1 = require("../transport/node/WaMobileTcpSocket");
12
12
  const WaMobileClientPayload_1 = require("../transport/noise/WaMobileClientPayload");
13
13
  const proxy_1 = require("../transport/proxy");
@@ -53,7 +53,18 @@ function mobileTransportFromCredentials(credentials) {
53
53
  ...(credentials.memClass !== undefined ? { memClass: credentials.memClass } : {})
54
54
  };
55
55
  }
56
- function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
56
+ async function resolveVersion(version) {
57
+ if (version === undefined)
58
+ return undefined;
59
+ if (typeof version === 'string')
60
+ return version;
61
+ const resolved = await version();
62
+ if (typeof resolved !== 'string' || resolved.length === 0) {
63
+ throw new Error('version resolver returned a non-string value');
64
+ }
65
+ return resolved;
66
+ }
67
+ async function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
57
68
  const meJid = credentials.meJid;
58
69
  const registered = meJid !== null && meJid !== undefined;
59
70
  const loginIdentity = registered ? (0, jid_1.getLoginIdentity)(meJid) : null;
@@ -75,10 +86,10 @@ function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
75
86
  });
76
87
  if (effectiveMobileTransport) {
77
88
  if (wsProxy) {
78
- throw new Error('mobileTransport does not support socketOptions.proxy.ws remove the proxy option or open an issue to add TCP proxy support');
89
+ throw new Error('mobileTransport does not support socketOptions.proxy.ws remove the proxy option or open an issue to add TCP proxy support');
79
90
  }
80
91
  if (!loginIdentity) {
81
- throw new Error('mobileTransport requires registered credentials (meJid) run the mobile bridge flow first');
92
+ throw new Error('mobileTransport requires registered credentials (meJid) run the mobile bridge flow first');
82
93
  }
83
94
  const loginPayload = (0, WaMobileClientPayload_1.buildMobileLoginPayload)({
84
95
  username: loginIdentity.username,
@@ -109,6 +120,7 @@ function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
109
120
  }
110
121
  };
111
122
  }
123
+ const versionBase = await resolveVersion(clientOptions.version);
112
124
  return {
113
125
  url: socketOptions.url,
114
126
  urls: socketOptions.urls,
@@ -134,7 +146,7 @@ function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
134
146
  device: loginIdentity.device,
135
147
  deviceBrowser: clientOptions.deviceBrowser,
136
148
  deviceOsDisplayName: clientOptions.deviceOsDisplayName,
137
- versionBase: clientOptions.version
149
+ versionBase
138
150
  }
139
151
  : undefined,
140
152
  registrationPayloadConfig: !loginIdentity
@@ -144,7 +156,7 @@ function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
144
156
  deviceBrowser: clientOptions.deviceBrowser,
145
157
  deviceOsDisplayName: clientOptions.deviceOsDisplayName,
146
158
  requireFullSync: clientOptions.requireFullSync,
147
- versionBase: clientOptions.version
159
+ versionBase
148
160
  }
149
161
  : undefined
150
162
  }
@@ -154,7 +166,7 @@ async function createFreshCredentials(signalStore, preKeyStore, logger) {
154
166
  logger.trace('creating fresh credentials');
155
167
  const [noiseKeyPair, registrationBundle, advSecretKey] = await Promise.all([
156
168
  X25519_1.X25519.generateKeyPair(),
157
- (0, utils_1.createAndStoreInitialKeys)(signalStore, preKeyStore),
169
+ (0, _signal_1.createAndStoreInitialKeys)(signalStore, preKeyStore),
158
170
  (0, _crypto_1.randomBytesAsync)(32)
159
171
  ]);
160
172
  return {
@@ -2,12 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaPairingFlow = void 0;
4
4
  const pairing_code_crypto_1 = require("../pairing/pairing-code-crypto");
5
- const _crypto_1 = require("../../crypto/index.js");
6
- const _proto_1 = require("../../proto.js");
5
+ const _crypto_1 = require("../../crypto");
6
+ const _proto_1 = require("../../proto");
7
7
  const browser_1 = require("../../protocol/browser");
8
8
  const constants_1 = require("../../protocol/constants");
9
9
  const jid_1 = require("../../protocol/jid");
10
- const WaAdvSignature_1 = require("../../signal/crypto/WaAdvSignature");
10
+ const WaAdvSignature_1 = require("../../signal/attestation/WaAdvSignature");
11
11
  const global_1 = require("../../transport/node/builders/global");
12
12
  const pairing_1 = require("../../transport/node/builders/pairing");
13
13
  const helpers_1 = require("../../transport/node/helpers");
@@ -24,7 +24,7 @@ class WaPairingFlow {
24
24
  this.opts.logger.trace('pairing flow session cleared');
25
25
  this.pairingSession = null;
26
26
  }
27
- async requestPairingCode(phoneNumber, shouldShowPushNotification = false, customCode) {
27
+ async requestPairingCode(phoneNumber, shouldShowPushNotification = true, customCode) {
28
28
  this.opts.logger.info('requesting pairing code', {
29
29
  shouldShowPushNotification,
30
30
  hasCustomCode: customCode !== undefined
@@ -68,7 +68,7 @@ class WaPairingFlow {
68
68
  finished: false
69
69
  };
70
70
  this.opts.callbacks.emitPairingCode(companionHello.pairingCode);
71
- this.opts.logger.info('pairing code emitted', {
71
+ this.opts.logger.debug('pairing code emitted', {
72
72
  phoneJid,
73
73
  createdAtSeconds: this.pairingSession.createdAtSeconds
74
74
  });
@@ -86,21 +86,19 @@ class WaPairingFlow {
86
86
  return iso;
87
87
  }
88
88
  async handleIncomingIqSet(node) {
89
- this.opts.logger.trace('pairing flow received iq:set', {
90
- id: node.attrs.id,
91
- from: node.attrs.from
92
- });
89
+ const iqLogger = this.opts.logger.child({ id: node.attrs.id });
90
+ iqLogger.trace('pairing flow received iq:set', { from: node.attrs.from });
93
91
  const firstChild = (0, helpers_1.getFirstNodeChild)(node);
94
92
  if (!firstChild) {
95
93
  return false;
96
94
  }
97
95
  if (firstChild.tag === constants_1.WA_NODE_TAGS.PAIR_DEVICE) {
98
- this.opts.logger.debug('handling pair-device stanza', { id: node.attrs.id });
96
+ iqLogger.debug('handling pair-device stanza');
99
97
  await this.handlePairDevice(node, firstChild);
100
98
  return true;
101
99
  }
102
100
  if (firstChild.tag === constants_1.WA_NODE_TAGS.PAIR_SUCCESS) {
103
- this.opts.logger.debug('handling pair-success stanza', { id: node.attrs.id });
101
+ iqLogger.debug('handling pair-success stanza');
104
102
  await this.handlePairSuccess(node, firstChild);
105
103
  return true;
106
104
  }
@@ -127,7 +125,7 @@ class WaPairingFlow {
127
125
  }
128
126
  const ref = (0, helpers_1.decodeNodeContentUtf8OrBytes)(refNode.content, 'refresh_code.link_code_pairing_ref');
129
127
  if ((0, bytes_1.uint8Equal)(ref, this.pairingSession.ref)) {
130
- this.opts.logger.info('received pairing refresh notification', {
128
+ this.opts.logger.debug('received pairing refresh notification', {
131
129
  forceManualRefresh: linkCodeNode.attrs.force_manual_refresh === 'true'
132
130
  });
133
131
  this.opts.callbacks.emitPairingRefresh(linkCodeNode.attrs.force_manual_refresh === 'true');
@@ -153,7 +151,7 @@ class WaPairingFlow {
153
151
  node,
154
152
  typeOverride: constants_1.WA_SIGNALING.COMPANION_REG_REFRESH_NOTIFICATION
155
153
  }));
156
- this.opts.logger.info('handled companion_reg_refresh notification');
154
+ this.opts.logger.debug('handled companion_reg_refresh notification');
157
155
  this.opts.qrFlow.refreshCurrentQr();
158
156
  return true;
159
157
  }
@@ -163,10 +161,10 @@ class WaPairingFlow {
163
161
  await this.rotateAdvSecret(this.requireCredentials());
164
162
  await this.opts.socket.sendNode((0, global_1.buildIqResultNode)(iqNode));
165
163
  this.opts.qrFlow.setRefs(refs);
166
- this.opts.logger.info('pair-device refs updated', { refsCount: refs.length });
164
+ this.opts.logger.debug('pair-device refs updated', { refsCount: refs.length });
167
165
  }
168
166
  async handlePairSuccess(iqNode, pairSuccessNode) {
169
- this.opts.logger.info('processing pair-success node');
167
+ this.opts.logger.debug('processing pair-success node');
170
168
  const credentials = this.requireCredentials();
171
169
  const [deviceIdentityNode, deviceNode, platformNode] = (0, helpers_1.findNodeChildrenByTags)(pairSuccessNode, [constants_1.WA_NODE_TAGS.DEVICE_IDENTITY, 'device', constants_1.WA_NODE_TAGS.PLATFORM]);
172
170
  if (!deviceIdentityNode || !deviceNode || !platformNode) {
@@ -186,13 +184,18 @@ class WaPairingFlow {
186
184
  const hmacInput = isHosted
187
185
  ? (0, bytes_1.concatBytes)([WaAdvSignature_1.ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE, wrappedDetails])
188
186
  : wrappedDetails;
189
- const expectedHmac = await (0, WaAdvSignature_1.computeAdvIdentityHmac)(credentials.advSecretKey, hmacInput);
190
- if (!(0, bytes_1.uint8Equal)(expectedHmac, wrappedHmac)) {
191
- this.opts.logger.error('pair-success hmac mismatch');
187
+ const expectedHmac = (0, WaAdvSignature_1.computeAdvIdentityHmac)(credentials.advSecretKey, hmacInput);
188
+ if (!(0, bytes_1.uint8TimingSafeEqual)(expectedHmac, wrappedHmac)) {
189
+ this.opts.logger.error('pair-success hmac mismatch', {
190
+ meJid: deviceNode.attrs.jid,
191
+ meLid: deviceNode.attrs.lid,
192
+ platform: platformNode.attrs.name,
193
+ isHosted
194
+ });
192
195
  throw new Error('pair-success HMAC validation failed');
193
196
  }
194
197
  }
195
- const { signedIdentity, keyIndex, responseIdentityBytes } = await this.buildPairSuccessResponseIdentity(credentials, wrappedDetails, isHosted);
198
+ const { signedIdentity, keyIndex, responseIdentityBytes } = await this.buildPairSuccessResponseIdentity(credentials, wrappedDetails);
196
199
  const nextCredentials = {
197
200
  ...credentials,
198
201
  signedIdentity,
@@ -233,21 +236,25 @@ class WaPairingFlow {
233
236
  this.opts.callbacks.emitPaired(nextCredentials);
234
237
  this.opts.logger.debug('pair-success completed and paired event emitted');
235
238
  }
236
- async buildPairSuccessResponseIdentity(credentials, wrappedDetails, isHosted) {
239
+ async buildPairSuccessResponseIdentity(credentials, wrappedDetails) {
237
240
  const signedIdentity = _proto_1.proto.ADVSignedDeviceIdentity.decode(wrappedDetails);
238
241
  const details = (0, bytes_1.decodeProtoBytes)(signedIdentity.details, 'ADVSignedDeviceIdentity.details');
239
242
  const accountSignature = (0, bytes_1.decodeProtoBytes)(signedIdentity.accountSignature, 'ADVSignedDeviceIdentity.accountSignature');
240
243
  const accountSignatureKey = (0, bytes_1.decodeProtoBytes)(signedIdentity.accountSignatureKey, 'ADVSignedDeviceIdentity.accountSignatureKey');
241
244
  const localIdentity = credentials.registrationInfo.identityKeyPair;
245
+ const advDeviceIdentity = _proto_1.proto.ADVDeviceIdentity.decode(details);
246
+ const isDeviceHosted = advDeviceIdentity.deviceType === _proto_1.proto.ADVEncryptionType.HOSTED;
242
247
  if (this.opts.dangerous?.disableAdvSignatureVerification !== true) {
243
- const validAccountSignature = await (0, WaAdvSignature_1.verifyDeviceIdentityAccountSignature)(details, accountSignature, localIdentity.pubKey, accountSignatureKey, isHosted);
248
+ const validAccountSignature = await (0, WaAdvSignature_1.verifyDeviceIdentityAccountSignature)(details, accountSignature, localIdentity.pubKey, accountSignatureKey, isDeviceHosted);
244
249
  if (!validAccountSignature) {
245
- this.opts.logger.error('pair-success account signature invalid');
250
+ this.opts.logger.error('pair-success account signature invalid', {
251
+ keyIndex: advDeviceIdentity.keyIndex ?? 0,
252
+ isDeviceHosted
253
+ });
246
254
  throw new Error('pair-success account signature validation failed');
247
255
  }
248
256
  }
249
- signedIdentity.deviceSignature = await (0, WaAdvSignature_1.generateDeviceSignature)(details, localIdentity, accountSignatureKey, isHosted);
250
- const advDeviceIdentity = _proto_1.proto.ADVDeviceIdentity.decode(details);
257
+ signedIdentity.deviceSignature = await (0, WaAdvSignature_1.generateDeviceSignature)(details, localIdentity, accountSignatureKey, false);
251
258
  const responseIdentityBytes = _proto_1.proto.ADVSignedDeviceIdentity.encode({
252
259
  details: signedIdentity.details,
253
260
  accountSignature: signedIdentity.accountSignature,
@@ -283,7 +290,9 @@ class WaPairingFlow {
283
290
  }
284
291
  const ref = (0, helpers_1.decodeNodeContentUtf8OrBytes)(refNode.content, 'primary_hello.link_code_pairing_ref');
285
292
  if (!pairingSession.ref || !(0, bytes_1.uint8Equal)(ref, pairingSession.ref)) {
286
- this.opts.logger.warn('primary_hello ref mismatch ignored');
293
+ this.opts.logger.warn('primary_hello ref mismatch ignored', {
294
+ phoneJid: pairingSession.phoneJid
295
+ });
287
296
  return;
288
297
  }
289
298
  const nowSeconds = Math.floor(Date.now() / 1000);
@@ -312,7 +321,7 @@ class WaPairingFlow {
312
321
  advSecretKey: finish.advSecret
313
322
  });
314
323
  pairingSession.finished = true;
315
- this.opts.logger.info('primary_hello completed with companion_finish success');
324
+ this.opts.logger.debug('primary_hello completed with companion_finish success');
316
325
  }
317
326
  async rotateAdvSecret(credentials) {
318
327
  const nextCredentials = {
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PBKDF2_ITERATIONS = exports.CROCKFORD_ALPHABET = void 0;
3
+ exports.PBKDF2_ITERATIONS = void 0;
4
4
  exports.normalizeCustomPairingCode = normalizeCustomPairingCode;
5
5
  exports.createCompanionHello = createCompanionHello;
6
6
  exports.completeCompanionFinish = completeCompanionFinish;
7
- const _crypto_1 = require("../../crypto/index.js");
7
+ const _crypto_1 = require("../../crypto");
8
8
  const X25519_1 = require("../../crypto/curves/X25519");
9
9
  const constants_1 = require("../../protocol/constants");
10
10
  const bytes_1 = require("../../util/bytes");
11
- exports.CROCKFORD_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTVWXYZ';
11
+ const CROCKFORD_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTVWXYZ';
12
12
  exports.PBKDF2_ITERATIONS = 2 << 16;
13
+ const PAIRING_AES_KEY_BYTES = 32;
13
14
  function bytesToCrockford(bytes) {
14
15
  let bitCount = 0;
15
16
  let value = 0;
@@ -18,12 +19,12 @@ function bytesToCrockford(bytes) {
18
19
  value = (value << 8) | bytes[i];
19
20
  bitCount += 8;
20
21
  while (bitCount >= 5) {
21
- out += exports.CROCKFORD_ALPHABET[(value >>> (bitCount - 5)) & 31];
22
+ out += CROCKFORD_ALPHABET[(value >>> (bitCount - 5)) & 31];
22
23
  bitCount -= 5;
23
24
  }
24
25
  }
25
26
  if (bitCount > 0) {
26
- out += exports.CROCKFORD_ALPHABET[(value << (5 - bitCount)) & 31];
27
+ out += CROCKFORD_ALPHABET[(value << (5 - bitCount)) & 31];
27
28
  }
28
29
  return out;
29
30
  }
@@ -33,8 +34,8 @@ function normalizeCustomPairingCode(input) {
33
34
  throw new Error(`custom pairing code must be 8 characters, got ${stripped.length}`);
34
35
  }
35
36
  for (let i = 0; i < stripped.length; i += 1) {
36
- if (exports.CROCKFORD_ALPHABET.indexOf(stripped[i]) < 0) {
37
- throw new Error(`custom pairing code contains invalid character "${stripped[i]}" (allowed: ${exports.CROCKFORD_ALPHABET})`);
37
+ if (CROCKFORD_ALPHABET.indexOf(stripped[i]) < 0) {
38
+ throw new Error(`custom pairing code contains invalid character "${stripped[i]}" (allowed: ${CROCKFORD_ALPHABET})`);
38
39
  }
39
40
  }
40
41
  return stripped;
@@ -48,8 +49,8 @@ async function createCompanionHello(options = {}) {
48
49
  normalizedCustomCode !== null ? Promise.resolve(null) : (0, _crypto_1.randomBytesAsync)(5)
49
50
  ]);
50
51
  const pairingCode = normalizedCustomCode ?? bytesToCrockford(codeBytes);
51
- const cipher = await (0, _crypto_1.pbkdf2DeriveAesCtrKey)(bytes_1.TEXT_ENCODER.encode(pairingCode), salt, exports.PBKDF2_ITERATIONS);
52
- const encrypted = await (0, _crypto_1.aesCtrEncrypt)(cipher, counter, companionEphemeralKeyPair.pubKey);
52
+ const cipherKey = await (0, _crypto_1.pbkdf2Sha256)(bytes_1.TEXT_ENCODER.encode(pairingCode), salt, exports.PBKDF2_ITERATIONS, PAIRING_AES_KEY_BYTES);
53
+ const encrypted = (0, _crypto_1.aesCtrEncrypt)(cipherKey, counter, companionEphemeralKeyPair.pubKey);
53
54
  return {
54
55
  pairingCode,
55
56
  companionEphemeralKeyPair,
@@ -60,31 +61,28 @@ async function completeCompanionFinish(args) {
60
61
  if (args.wrappedPrimaryEphemeralPub.length <= 48) {
61
62
  throw new Error('invalid wrapped primary payload');
62
63
  }
63
- const pairingCipher = await (0, _crypto_1.pbkdf2DeriveAesCtrKey)(bytes_1.TEXT_ENCODER.encode(args.pairingCode), args.wrappedPrimaryEphemeralPub.subarray(0, 32), exports.PBKDF2_ITERATIONS);
64
- const primaryEphemeralPub = await (0, _crypto_1.aesCtrDecrypt)(pairingCipher, args.wrappedPrimaryEphemeralPub.subarray(32, 48), args.wrappedPrimaryEphemeralPub.subarray(48));
64
+ const pairingCipherKey = await (0, _crypto_1.pbkdf2Sha256)(bytes_1.TEXT_ENCODER.encode(args.pairingCode), args.wrappedPrimaryEphemeralPub.subarray(0, 32), exports.PBKDF2_ITERATIONS, PAIRING_AES_KEY_BYTES);
65
+ const primaryEphemeralPub = (0, _crypto_1.aesCtrDecrypt)(pairingCipherKey, args.wrappedPrimaryEphemeralPub.subarray(32, 48), args.wrappedPrimaryEphemeralPub.subarray(48));
65
66
  if (primaryEphemeralPub.length === 0) {
66
67
  throw new Error('empty primary ephemeral public key');
67
68
  }
68
- const [sharedEphemeral, bundleSalt, bundleSecret, bundleIv] = await Promise.all([
69
+ const [sharedEphemeral, sharedIdentity, bundleSalt, bundleSecret, bundleIv] = await Promise.all([
69
70
  X25519_1.X25519.scalarMult(args.companionEphemeralPrivKey, primaryEphemeralPub),
71
+ X25519_1.X25519.scalarMult(args.registrationIdentityKeyPair.privKey, args.primaryIdentityPub),
70
72
  (0, _crypto_1.randomBytesAsync)(32),
71
73
  (0, _crypto_1.randomBytesAsync)(32),
72
74
  (0, _crypto_1.randomBytesAsync)(12)
73
75
  ]);
74
- const bundleEncryptionKeyRaw = await (0, _crypto_1.hkdf)(sharedEphemeral, bundleSalt, constants_1.WA_PAIRING_KDF_INFO.LINK_CODE_BUNDLE, 32);
75
- const bundleEncryptionKey = await (0, _crypto_1.importAesGcmKey)(bundleEncryptionKeyRaw, ['encrypt']);
76
+ const bundleEncryptionKey = (0, _crypto_1.hkdf)(sharedEphemeral, bundleSalt, constants_1.WA_PAIRING_KDF_INFO.LINK_CODE_BUNDLE, 32);
76
77
  const plaintextBundle = (0, bytes_1.concatBytes)([
77
78
  args.registrationIdentityKeyPair.pubKey,
78
79
  args.primaryIdentityPub,
79
80
  bundleSecret
80
81
  ]);
81
- const [encryptedBundle, sharedIdentity] = await Promise.all([
82
- (0, _crypto_1.aesGcmEncrypt)(bundleEncryptionKey, bundleIv, plaintextBundle),
83
- X25519_1.X25519.scalarMult(args.registrationIdentityKeyPair.privKey, args.primaryIdentityPub)
84
- ]);
82
+ const encryptedBundle = (0, _crypto_1.aesGcmEncrypt)(bundleEncryptionKey, bundleIv, plaintextBundle);
85
83
  const wrappedKeyBundle = (0, bytes_1.concatBytes)([bundleSalt, bundleIv, encryptedBundle]);
86
84
  const advMaterial = (0, bytes_1.concatBytes)([sharedEphemeral, sharedIdentity, bundleSecret]);
87
- const advSecret = await (0, _crypto_1.hkdf)(advMaterial, null, constants_1.WA_PAIRING_KDF_INFO.ADV_SECRET, 32);
85
+ const advSecret = (0, _crypto_1.hkdf)(advMaterial, null, constants_1.WA_PAIRING_KDF_INFO.ADV_SECRET, 32);
88
86
  return {
89
87
  wrappedKeyBundle,
90
88
  companionIdentityPublic: args.registrationIdentityKeyPair.pubKey,