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
@@ -2,10 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseSyncResponse = parseSyncResponse;
4
4
  exports.parseCollectionState = parseCollectionState;
5
- const utils_1 = require("./utils");
6
- const _proto_1 = require("../proto.js");
7
- const constants_1 = require("../protocol/constants");
8
- const helpers_1 = require("../transport/node/helpers");
5
+ const utils_1 = require("../utils");
6
+ const _proto_1 = require("../../proto");
7
+ const constants_1 = require("../../protocol/constants");
8
+ const helpers_1 = require("../../transport/node/helpers");
9
+ const primitives_1 = require("../../util/primitives");
10
+ /**
11
+ * Parses an app-state `sync` IQ response into one payload per collection,
12
+ * decoding embedded patches and snapshot references. Throws when the IQ is
13
+ * an error envelope or missing the `<sync>` child.
14
+ */
9
15
  function parseSyncResponse(iqNode) {
10
16
  if (iqNode.tag !== constants_1.WA_NODE_TAGS.IQ) {
11
17
  throw new Error(`invalid sync response tag ${iqNode.tag}`);
@@ -30,11 +36,10 @@ function parseSyncResponse(iqNode) {
30
36
  const versionAttr = collectionNode.attrs.version;
31
37
  let version;
32
38
  if (versionAttr) {
33
- const parsedVersion = Number.parseInt(versionAttr, 10);
34
- if (!Number.isSafeInteger(parsedVersion) || parsedVersion < 0) {
39
+ version = (0, primitives_1.parseOptionalInt)(versionAttr);
40
+ if (version === undefined) {
35
41
  throw new Error(`invalid app-state collection version "${versionAttr}"`);
36
42
  }
37
- version = parsedVersion;
38
43
  }
39
44
  const [patchesNode, snapshotNode] = (0, helpers_1.findNodeChildrenByTags)(collectionNode, [
40
45
  constants_1.WA_NODE_TAGS.PATCHES,
@@ -59,6 +64,11 @@ function parseSyncResponse(iqNode) {
59
64
  }
60
65
  return payloads;
61
66
  }
67
+ /**
68
+ * Reads a `<collection>` node and returns the right
69
+ * {@link AppStateCollectionState} (success / has-more / conflict / fatal /
70
+ * retryable) based on its `type` attribute and embedded error code.
71
+ */
62
72
  function parseCollectionState(node) {
63
73
  const type = node.attrs.type;
64
74
  const hasMorePatches = node.attrs.has_more_patches === 'true';
@@ -75,7 +85,9 @@ function parseCollectionState(node) {
75
85
  : constants_1.WA_APP_STATE_COLLECTION_STATES.CONFLICT;
76
86
  }
77
87
  if (code === constants_1.WA_APP_STATE_ERROR_CODES.BAD_REQUEST ||
78
- code === constants_1.WA_APP_STATE_ERROR_CODES.NOT_FOUND) {
88
+ code === constants_1.WA_APP_STATE_ERROR_CODES.NOT_FOUND ||
89
+ code === constants_1.WA_APP_STATE_ERROR_CODES.NOT_ALLOWED ||
90
+ code === constants_1.WA_APP_STATE_ERROR_CODES.NOT_ACCEPTABLE) {
79
91
  return constants_1.WA_APP_STATE_COLLECTION_STATES.ERROR_FATAL;
80
92
  }
81
93
  return constants_1.WA_APP_STATE_COLLECTION_STATES.ERROR_RETRY;
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaAppStateSyncClient = exports.WaAppStateMissingKeyError = void 0;
4
- const constants_1 = require("./constants");
5
- const response_parser_1 = require("./response-parser");
6
- const WaAppStateCrypto_1 = require("./WaAppStateCrypto");
7
- const _crypto_1 = require("../crypto/index.js");
8
- const _proto_1 = require("../proto.js");
9
- const constants_2 = require("../protocol/constants");
10
- const jid_1 = require("../protocol/jid");
11
- const query_1 = require("../transport/node/query");
12
- const bytes_1 = require("../util/bytes");
13
- const primitives_1 = require("../util/primitives");
3
+ exports.WaAppStateSyncClient = void 0;
4
+ const constants_1 = require("../constants");
5
+ const WaAppStateCrypto_1 = require("../crypto/WaAppStateCrypto");
6
+ const response_parser_1 = require("../parsers/response-parser");
7
+ const _crypto_1 = require("../../crypto");
8
+ const _proto_1 = require("../../proto");
9
+ const constants_2 = require("../../protocol/constants");
10
+ const jid_1 = require("../../protocol/jid");
11
+ const query_1 = require("../../transport/node/query");
12
+ const bytes_1 = require("../../util/bytes");
13
+ const primitives_1 = require("../../util/primitives");
14
14
  class WaAppStateMissingKeyError extends Error {
15
15
  constructor(message, keyId, collection) {
16
16
  super(message);
@@ -19,25 +19,33 @@ class WaAppStateMissingKeyError extends Error {
19
19
  this.name = 'WaAppStateMissingKeyError';
20
20
  }
21
21
  }
22
- exports.WaAppStateMissingKeyError = WaAppStateMissingKeyError;
22
+ /**
23
+ * App-state synchronization client. Owns the sync key inventory, processes
24
+ * snapshots/patches, encrypts pending mutations, and persists the resulting
25
+ * collection state in the {@link WaAppStateStore}.
26
+ */
23
27
  class WaAppStateSyncClient {
24
28
  constructor(options) {
25
29
  this.logger = options.logger;
26
30
  this.query = options.query;
27
31
  this.store = options.store;
32
+ this.serverClock = options.serverClock;
28
33
  this.getCurrentMeJid = options.getCurrentMeJid;
29
34
  this.hostDomain = options.hostDomain ?? constants_2.WA_DEFAULTS.HOST_DOMAIN;
30
35
  this.defaultTimeoutMs = options.defaultTimeoutMs ?? constants_2.WA_DEFAULTS.APP_STATE_SYNC_TIMEOUT_MS;
31
36
  this.onMissingKeys = options.onMissingKeys;
37
+ this.isOwnAccountDevice = options.isOwnAccountDevice;
38
+ this.sendKeyShare = options.sendKeyShare;
39
+ this.triggerSync = options.triggerSync;
32
40
  this.crypto = new WaAppStateCrypto_1.WaAppStateCrypto(undefined, options.skipMacVerification === true);
33
41
  this.mobilePrimary = options.mobilePrimary ?? false;
34
42
  this.syncContext = null;
35
43
  this.syncPromise = null;
36
44
  }
37
- async exportState() {
38
- this.logger.trace('app-state export requested');
39
- return this.store.exportData();
40
- }
45
+ /**
46
+ * Returns the active app-state sync key, generating and persisting a new
47
+ * one when the store is empty (used during initial setup).
48
+ */
41
49
  async ensureInitialSyncKey() {
42
50
  const existing = await this.store.getActiveSyncKey();
43
51
  if (existing) {
@@ -49,7 +57,7 @@ class WaAppStateSyncClient {
49
57
  const key = {
50
58
  keyId: keyIdBytes,
51
59
  keyData,
52
- timestamp: Date.now(),
60
+ timestamp: this.serverClock.nowMs(),
53
61
  fingerprint: { rawId, currentIndex: 0, deviceIndexes: [0] }
54
62
  };
55
63
  await this.store.upsertSyncKeys([key]);
@@ -60,6 +68,7 @@ class WaAppStateSyncClient {
60
68
  });
61
69
  return key;
62
70
  }
71
+ /** Imports peer-shared sync keys into the store; returns the count actually added. */
63
72
  async importSyncKeys(keys) {
64
73
  this.logger.debug('app-state importing sync keys', { count: keys.length });
65
74
  const inserted = await this.store.upsertSyncKeys(keys);
@@ -69,6 +78,119 @@ class WaAppStateSyncClient {
69
78
  }
70
79
  return inserted;
71
80
  }
81
+ /** Handler for `AppStateSyncKeyShare` protocol messages – stores received keys and triggers a sync. */
82
+ async handleIncomingKeyShare(context, protocolMessage) {
83
+ const log = this.logger.child({ id: context.id, from: context.remoteJid });
84
+ const share = protocolMessage.appStateSyncKeyShare;
85
+ if (!share) {
86
+ log.warn('incoming app-state key share protocol message without payload');
87
+ return;
88
+ }
89
+ try {
90
+ const imported = await this.importSyncKeyShare(share);
91
+ log.info('imported app-state sync key share from protocol message', { imported });
92
+ if (imported > 0 && this.triggerSync) {
93
+ void this.triggerSync().catch((error) => {
94
+ log.warn('failed to sync app-state after key share import', {
95
+ message: (0, primitives_1.toError)(error).message
96
+ });
97
+ });
98
+ }
99
+ }
100
+ catch (error) {
101
+ log.warn('failed to import app-state sync key share from protocol message', {
102
+ message: (0, primitives_1.toError)(error).message
103
+ });
104
+ }
105
+ }
106
+ /** Handler for `AppStateSyncKeyRequest` protocol messages – replies with the requested keys via `sendKeyShare`. */
107
+ async handleIncomingKeyRequest(context, protocolMessage) {
108
+ const log = this.logger.child({ id: context.id, from: context.remoteJid });
109
+ const request = protocolMessage.appStateSyncKeyRequest;
110
+ if (!request) {
111
+ log.warn('incoming app-state key request protocol message without payload');
112
+ return;
113
+ }
114
+ const senderJid = context.participant ?? context.remoteJid;
115
+ if (!senderJid) {
116
+ log.warn('incoming app-state key request missing sender jid');
117
+ return;
118
+ }
119
+ let requesterDeviceJid;
120
+ try {
121
+ const requesterRaw = (0, jid_1.applyDeviceToJid)(senderJid, context.senderDevice);
122
+ requesterDeviceJid = (0, jid_1.normalizeDeviceJid)(requesterRaw);
123
+ }
124
+ catch (error) {
125
+ log.warn('incoming app-state key request has malformed sender jid', {
126
+ senderJid,
127
+ message: (0, primitives_1.toError)(error).message
128
+ });
129
+ return;
130
+ }
131
+ const deviceLog = log.child({ to: requesterDeviceJid });
132
+ if (this.isOwnAccountDevice && !this.isOwnAccountDevice(requesterDeviceJid)) {
133
+ deviceLog.warn('incoming app-state key request ignored: sender is not own account');
134
+ return;
135
+ }
136
+ const requestedKeyIds = this.extractKeyRequestIds(request);
137
+ if (requestedKeyIds.length === 0) {
138
+ deviceLog.warn('incoming app-state key request has no valid key ids');
139
+ return;
140
+ }
141
+ if (!this.sendKeyShare) {
142
+ deviceLog.warn('incoming app-state key request received but no sendKeyShare wired');
143
+ return;
144
+ }
145
+ const requestedKeys = await this.store.getSyncKeysBatch(requestedKeyIds);
146
+ const availableKeys = [];
147
+ const missingKeyIds = [];
148
+ for (let i = 0; i < requestedKeys.length; i += 1) {
149
+ const key = requestedKeys[i];
150
+ if (key !== null) {
151
+ availableKeys.push(key);
152
+ }
153
+ else {
154
+ missingKeyIds.push(requestedKeyIds[i]);
155
+ }
156
+ }
157
+ try {
158
+ await this.sendKeyShare(requesterDeviceJid, availableKeys, missingKeyIds);
159
+ deviceLog.info('responded to app-state key request', {
160
+ requested: requestedKeyIds.length,
161
+ shared: availableKeys.length,
162
+ missing: missingKeyIds.length
163
+ });
164
+ }
165
+ catch (error) {
166
+ deviceLog.warn('failed to respond to app-state key request', {
167
+ requested: requestedKeyIds.length,
168
+ shared: availableKeys.length,
169
+ missing: missingKeyIds.length,
170
+ message: (0, primitives_1.toError)(error).message
171
+ });
172
+ }
173
+ }
174
+ extractKeyRequestIds(request) {
175
+ const deduped = new Map();
176
+ for (const key of request.keyIds ?? []) {
177
+ try {
178
+ const keyId = (0, bytes_1.decodeProtoBytes)(key.keyId, 'appStateSyncKeyRequest.keyIds[].keyId');
179
+ const keyHex = (0, bytes_1.bytesToHex)(keyId);
180
+ if (deduped.has(keyHex)) {
181
+ continue;
182
+ }
183
+ deduped.set(keyHex, keyId);
184
+ }
185
+ catch (error) {
186
+ this.logger.trace('ignoring malformed app-state key id request entry', {
187
+ message: (0, primitives_1.toError)(error).message
188
+ });
189
+ }
190
+ }
191
+ return [...deduped.values()];
192
+ }
193
+ /** Imports the keys from a decoded `AppStateSyncKeyShare` proto message. */
72
194
  async importSyncKeyShare(share) {
73
195
  const keys = [];
74
196
  for (const item of share.keys ?? []) {
@@ -84,13 +206,19 @@ class WaAppStateSyncClient {
84
206
  keyId,
85
207
  keyData,
86
208
  timestamp: item.keyData?.timestamp === null || item.keyData?.timestamp === undefined
87
- ? Date.now()
209
+ ? this.serverClock.nowMs()
88
210
  : this.normalizeProtoLong(item.keyData?.timestamp, 'appStateSyncKeyShare.keys[].keyData.timestamp'),
89
211
  fingerprint: item.keyData?.fingerprint ?? undefined
90
212
  });
91
213
  }
92
214
  return this.importSyncKeys(keys);
93
215
  }
216
+ /**
217
+ * Runs one app-state sync round across the requested collections,
218
+ * applying any `pendingMutations` and downloading external snapshots
219
+ * via `options.downloadExternalBlob` when present. Concurrent calls
220
+ * share the in-flight promise.
221
+ */
94
222
  async sync(options = {}) {
95
223
  if (this.syncPromise) {
96
224
  this.logger.debug('app-state sync already in flight, joining existing run');
@@ -122,7 +250,7 @@ class WaAppStateSyncClient {
122
250
  for (let index = 0; index < collections.length; index += 1) {
123
251
  context.collections.set(collections[index], initialCollectionStates[index]);
124
252
  }
125
- this.logger.info('app-state sync start', {
253
+ this.logger.debug('app-state sync start', {
126
254
  collections: collections.length,
127
255
  pendingMutations: options.pendingMutations?.length ?? 0
128
256
  });
@@ -172,13 +300,13 @@ class WaAppStateSyncClient {
172
300
  }
173
301
  if (stateChanged && context.dirtyCollections.size > 0) {
174
302
  await this.persistCollectionUpdates();
175
- this.logger.info('app-state sync persisted updated state');
303
+ this.logger.debug('app-state sync persisted updated state');
176
304
  }
177
305
  const orderedResults = collections.map((collection) => resultMap.get(collection) ?? {
178
306
  collection,
179
307
  state: constants_2.WA_APP_STATE_COLLECTION_STATES.ERROR_RETRY
180
308
  });
181
- this.logger.info('app-state sync finished', {
309
+ this.logger.debug('app-state sync finished', {
182
310
  collections: orderedResults.length,
183
311
  stateChanged
184
312
  });
@@ -332,11 +460,12 @@ class WaAppStateSyncClient {
332
460
  return payloadByCollection;
333
461
  }
334
462
  async processCollectionRound({ collection, payloadByCollection, pendingByCollection, options, outgoingContexts, skippedUploadCollections }) {
463
+ const collectionLogger = this.logger.child({ collection });
335
464
  const payload = payloadByCollection.get(collection);
336
465
  let shouldRefetch = false;
337
466
  let collectionStateChanged = false;
338
467
  if (!payload) {
339
- this.logger.warn('app-state sync response missing collection payload', { collection });
468
+ collectionLogger.warn('app-state sync response missing collection payload');
340
469
  return this.createCollectionOutcome(collection, constants_2.WA_APP_STATE_COLLECTION_STATES.ERROR_RETRY);
341
470
  }
342
471
  if (payload.state === constants_2.WA_APP_STATE_COLLECTION_STATES.ERROR_FATAL ||
@@ -396,8 +525,7 @@ class WaAppStateSyncClient {
396
525
  payload.state === constants_2.WA_APP_STATE_COLLECTION_STATES.SUCCESS_HAS_MORE ||
397
526
  (payload.state === constants_2.WA_APP_STATE_COLLECTION_STATES.SUCCESS &&
398
527
  skippedUploadCollections.has(collection));
399
- this.logger.debug('app-state collection processed', {
400
- collection: payload.collection,
528
+ collectionLogger.debug('app-state collection processed', {
401
529
  state: payload.state,
402
530
  version: payload.version,
403
531
  appliedMutations: appliedMutations.length
@@ -406,16 +534,13 @@ class WaAppStateSyncClient {
406
534
  }
407
535
  catch (error) {
408
536
  if (error instanceof WaAppStateMissingKeyError) {
409
- this.logger.warn('app-state blocked by missing key', {
410
- collection: payload.collection,
537
+ collectionLogger.debug('app-state blocked by missing key', {
411
538
  message: error.message
412
539
  });
413
540
  return this.createCollectionOutcome(collection, constants_2.WA_APP_STATE_COLLECTION_STATES.BLOCKED, payload.version, shouldRefetch, collectionStateChanged, undefined, error.keyId);
414
541
  }
415
- const message = error instanceof Error ? error.message : String(error);
416
- this.logger.warn('app-state collection processing failed', {
417
- collection: payload.collection,
418
- message
542
+ collectionLogger.debug('app-state collection processing failed', {
543
+ message: (0, primitives_1.toError)(error).message
419
544
  });
420
545
  return this.createCollectionOutcome(collection, constants_2.WA_APP_STATE_COLLECTION_STATES.ERROR_RETRY, payload.version, true, collectionStateChanged);
421
546
  }
@@ -441,11 +566,13 @@ class WaAppStateSyncClient {
441
566
  return;
442
567
  }
443
568
  const keyIdsHex = keyIds.map((keyId) => (0, bytes_1.bytesToHex)(keyId));
444
- this.logger.info('app-state requesting missing sync keys', {
569
+ const requestLogger = this.logger.child({
445
570
  keys: keyIdsHex.length,
446
- keyIds: keyIdsHex.join(','),
447
571
  collections: collections.join(',')
448
572
  });
573
+ requestLogger.debug('app-state requesting missing sync keys', {
574
+ keyIds: keyIdsHex.join(',')
575
+ });
449
576
  try {
450
577
  await input.onMissingKeys({
451
578
  keyIds,
@@ -453,10 +580,8 @@ class WaAppStateSyncClient {
453
580
  });
454
581
  }
455
582
  catch (error) {
456
- this.logger.warn('app-state missing key callback failed', {
457
- keys: keyIdsHex.length,
458
- collections: collections.join(','),
459
- message: error instanceof Error ? error.message : String(error)
583
+ requestLogger.warn('app-state missing key callback failed', {
584
+ message: (0, primitives_1.toError)(error).message
460
585
  });
461
586
  }
462
587
  }
@@ -479,7 +604,8 @@ class WaAppStateSyncClient {
479
604
  const decodedMutations = _proto_1.proto.SyncdMutations.decode(patchBytes);
480
605
  readyPatch = {
481
606
  ...readyPatch,
482
- mutations: decodedMutations.mutations ?? []
607
+ mutations: decodedMutations.mutations ?? [],
608
+ externalMutations: undefined
483
609
  };
484
610
  }
485
611
  return this.validatePatch(payload.collection, readyPatch);
@@ -569,7 +695,7 @@ class WaAppStateSyncClient {
569
695
  const ltHash = await this.crypto.ltHashAdd(constants_1.APP_STATE_EMPTY_LT_HASH, ltHashInput);
570
696
  if (keyData !== null) {
571
697
  const expectedSnapshotMac = await this.crypto.generateSnapshotMac(keyData, ltHash, version, collection);
572
- if (!(0, bytes_1.uint8Equal)(expectedSnapshotMac, snapshot.mac)) {
698
+ if (!(0, bytes_1.uint8TimingSafeEqual)(expectedSnapshotMac, snapshot.mac)) {
573
699
  throw new Error(`snapshot MAC mismatch for ${collection}`);
574
700
  }
575
701
  }
@@ -708,12 +834,16 @@ class WaAppStateSyncClient {
708
834
  async assertPatchMacsMatch(patch, collection, patchKeyData, patchVersion, nextHash, valueMacs) {
709
835
  const snapshotMac = (0, bytes_1.decodeProtoBytes)(patch.snapshotMac, `patch.snapshotMac (${collection})`);
710
836
  const expectedSnapshotMac = await this.crypto.generateSnapshotMac(patchKeyData, nextHash, patchVersion, collection);
711
- if (!(0, bytes_1.uint8Equal)(expectedSnapshotMac, snapshotMac)) {
712
- throw new Error(`patch snapshot MAC mismatch for ${collection}`);
837
+ // non-fatal: wa-mob/wa-web tolerate this – patchMac below covers payload integrity.
838
+ if (!(0, bytes_1.uint8TimingSafeEqual)(expectedSnapshotMac, snapshotMac)) {
839
+ this.logger.debug('patch snapshot MAC mismatch (tolerated)', {
840
+ collection,
841
+ patchVersion
842
+ });
713
843
  }
714
844
  const patchMac = (0, bytes_1.decodeProtoBytes)(patch.patchMac, `patch.patchMac (${collection})`);
715
845
  const expectedPatchMac = await this.crypto.generatePatchMac(patchKeyData, snapshotMac, valueMacs, patchVersion, collection);
716
- if (!(0, bytes_1.uint8Equal)(expectedPatchMac, patchMac)) {
846
+ if (!(0, bytes_1.uint8TimingSafeEqual)(expectedPatchMac, patchMac)) {
717
847
  throw new Error(`patch MAC mismatch for ${collection}`);
718
848
  }
719
849
  }
@@ -722,7 +852,7 @@ class WaAppStateSyncClient {
722
852
  throw new WaAppStateMissingKeyError(`no sync key available to upload ${collection}`, null, collection);
723
853
  }
724
854
  const encryptedResults = await Promise.all(pendingMutations.map(async (mutation) => {
725
- const value = mutation.operation === 'set' ? mutation.value : mutation.previousValue;
855
+ const value = mutation.operation === 'set' ? mutation.value : null;
726
856
  const operationCode = mutation.operation === 'remove'
727
857
  ? _proto_1.proto.SyncdMutation.SyncdOperation.REMOVE
728
858
  : _proto_1.proto.SyncdMutation.SyncdOperation.SET;
@@ -761,14 +891,12 @@ class WaAppStateSyncClient {
761
891
  const snapshotMac = await this.crypto.generateSnapshotMac(activeKey.keyData, nextState.hash, patchVersion, collection);
762
892
  const patchMac = await this.crypto.generatePatchMac(activeKey.keyData, snapshotMac, valueMacs, patchVersion, collection);
763
893
  const deviceIndex = this.resolveDeviceIndex();
764
- const clientDebugData = this.buildPatchClientDebugData();
765
894
  const encodedPatch = _proto_1.proto.SyncdPatch.encode({
766
895
  mutations: encryptedMutations,
767
896
  snapshotMac,
768
897
  patchMac,
769
898
  keyId: { id: activeKey.keyId },
770
- ...(deviceIndex === undefined ? {} : { deviceIndex }),
771
- clientDebugData
899
+ ...(deviceIndex === undefined ? {} : { deviceIndex })
772
900
  }).finish();
773
901
  return {
774
902
  encodedPatch,
@@ -796,12 +924,6 @@ class WaAppStateSyncClient {
796
924
  return undefined;
797
925
  }
798
926
  }
799
- buildPatchClientDebugData() {
800
- return _proto_1.proto.PatchDebugData.encode({
801
- isSenderPrimary: false,
802
- senderPlatform: _proto_1.proto.PatchDebugData.Platform.WEB
803
- }).finish();
804
- }
805
927
  async computeNextCollectionState(baseHash, baseMap, mutations, collection) {
806
928
  const indexValueMap = new Map(baseMap);
807
929
  const addValues = [];
@@ -842,8 +964,7 @@ class WaAppStateSyncClient {
842
964
  return (0, primitives_1.longToNumber)(value);
843
965
  }
844
966
  catch (error) {
845
- const reason = error instanceof Error ? error.message : String(error);
846
- throw new Error(`invalid ${field}: ${reason}`);
967
+ throw new Error(`invalid ${field}: ${(0, primitives_1.toError)(error).message}`);
847
968
  }
848
969
  }
849
970
  groupPendingMutations(pendingMutations) {
@@ -7,17 +7,29 @@ exports.downloadExternalBlobReference = downloadExternalBlobReference;
7
7
  const constants_1 = require("../protocol/constants");
8
8
  const bytes_1 = require("../util/bytes");
9
9
  const APP_STATE_COLLECTION_NAMES = new Set(Object.values(constants_1.WA_APP_STATE_COLLECTIONS));
10
+ /**
11
+ * Returns `value` typed as a known {@link AppStateCollectionName}, or `null`
12
+ * when the string is unrecognized.
13
+ */
10
14
  function parseCollectionName(value) {
11
15
  return value && APP_STATE_COLLECTION_NAMES.has(value) ? value : null;
12
16
  }
13
17
  function keyDeviceId(keyId) {
14
18
  return keyId.byteLength < 6 ? null : (keyId[0] << 8) | keyId[1];
15
19
  }
20
+ /**
21
+ * Reads the 32-bit big-endian epoch encoded in bytes 2..5 of an app-state key id.
22
+ * Returns `-1` when the key id is too short.
23
+ */
16
24
  function keyEpoch(keyId) {
17
25
  return keyId.byteLength < 6
18
26
  ? -1
19
27
  : keyId[2] * 16777216 + keyId[3] * 65536 + keyId[4] * 256 + keyId[5];
20
28
  }
29
+ /**
30
+ * Picks the highest-epoch app-state sync key from `keys`. Ties are broken by
31
+ * the lower device id. Returns `null` when the iterable is empty.
32
+ */
21
33
  function pickActiveSyncKey(keys) {
22
34
  let active = null;
23
35
  for (const key of keys) {
@@ -42,6 +54,10 @@ function pickActiveSyncKey(keys) {
42
54
  }
43
55
  return active;
44
56
  }
57
+ /**
58
+ * Downloads and decrypts an external app-state blob via the media transfer
59
+ * client. Throws when the reference is missing required fields.
60
+ */
45
61
  async function downloadExternalBlobReference(mediaTransfer, reference) {
46
62
  if (!reference.directPath) {
47
63
  throw new Error('external blob reference is missing directPath');
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WA_APPSTATE_SCHEMA_BY_ACTION_NAME = exports.WA_APPSTATE_SCHEMAS = exports.WA_APPSTATE_COLLECTIONS = void 0;
4
+ exports.getAppstateSchemaByActionName = getAppstateSchemaByActionName;
5
+ exports.resolveEnumObject = resolveEnumObject;
6
+ exports.encodeEnumValue = encodeEnumValue;
7
+ exports.decodeEnumValue = decodeEnumValue;
8
+ exports.decodeIndexArgsFromSchema = decodeIndexArgsFromSchema;
9
+ const _proto_1 = require("./proto");
10
+ const appstate_1 = require("../spec/appstate");
11
+ var appstate_2 = require("../spec/appstate");
12
+ Object.defineProperty(exports, "WA_APPSTATE_COLLECTIONS", { enumerable: true, get: function () { return appstate_2.WA_APPSTATE_COLLECTIONS; } });
13
+ Object.defineProperty(exports, "WA_APPSTATE_SCHEMAS", { enumerable: true, get: function () { return appstate_2.WA_APPSTATE_SCHEMAS; } });
14
+ const SCHEMA_BY_ACTION_NAME_BUILDER = {};
15
+ for (const key of Object.keys(appstate_1.WA_APPSTATE_SCHEMAS)) {
16
+ SCHEMA_BY_ACTION_NAME_BUILDER[appstate_1.WA_APPSTATE_SCHEMAS[key].name] = key;
17
+ }
18
+ exports.WA_APPSTATE_SCHEMA_BY_ACTION_NAME = Object.freeze(SCHEMA_BY_ACTION_NAME_BUILDER);
19
+ function getAppstateSchemaByActionName(actionName) {
20
+ const key = exports.WA_APPSTATE_SCHEMA_BY_ACTION_NAME[actionName];
21
+ if (!key) {
22
+ return null;
23
+ }
24
+ return { key, schema: appstate_1.WA_APPSTATE_SCHEMAS[key] };
25
+ }
26
+ function resolveEnumObject(protoEnumPath) {
27
+ const segments = protoEnumPath.split('.');
28
+ let cursor = _proto_1.proto.SyncActionValue;
29
+ for (const seg of segments) {
30
+ if (cursor === null || cursor === undefined)
31
+ return null;
32
+ if (typeof cursor !== 'object' && typeof cursor !== 'function')
33
+ return null;
34
+ cursor = cursor[seg];
35
+ }
36
+ if (cursor === null || cursor === undefined)
37
+ return null;
38
+ if (typeof cursor !== 'object' && typeof cursor !== 'function')
39
+ return null;
40
+ return cursor;
41
+ }
42
+ function encodeEnumValue(protoEnumPath, name) {
43
+ const enumObj = resolveEnumObject(protoEnumPath);
44
+ if (!enumObj)
45
+ return null;
46
+ const value = enumObj[name];
47
+ return typeof value === 'number' ? value : null;
48
+ }
49
+ function decodeEnumValue(protoEnumPath, value) {
50
+ const enumObj = resolveEnumObject(protoEnumPath);
51
+ if (!enumObj)
52
+ return null;
53
+ for (const key of Object.keys(enumObj)) {
54
+ if (enumObj[key] === value)
55
+ return key;
56
+ }
57
+ return null;
58
+ }
59
+ function decodeIndexArgsFromSchema(schema, parts) {
60
+ if (parts.length !== schema.indexParts.length) {
61
+ return null;
62
+ }
63
+ const args = {};
64
+ for (let i = 0; i < schema.indexParts.length; i += 1) {
65
+ const part = schema.indexParts[i];
66
+ const raw = parts[i];
67
+ if (part.type === 'literal') {
68
+ continue;
69
+ }
70
+ if (part.type === 'boolString') {
71
+ if (raw !== '0' && raw !== '1')
72
+ return null;
73
+ args[part.name] = raw === '1';
74
+ continue;
75
+ }
76
+ if (part.type === 'jidOrZero') {
77
+ args[part.name] = raw === '0' ? null : raw;
78
+ continue;
79
+ }
80
+ if (part.type === 'enum') {
81
+ const numeric = Number(raw);
82
+ const name = Number.isFinite(numeric) ? decodeEnumValue(part.protoEnum, numeric) : null;
83
+ args[part.name] = name ?? raw;
84
+ continue;
85
+ }
86
+ args[part.name] = raw;
87
+ }
88
+ return args;
89
+ }