zapo-js 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -177
  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 +19 -7
  12. package/dist/auth/pairing/WaPairingFlow.js +33 -24
  13. package/dist/auth/pairing/pairing-code-crypto.js +16 -18
  14. package/dist/client/WaClient.js +342 -473
  15. package/dist/client/WaClientFactory.js +279 -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 +682 -204
  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 +256 -125
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
  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 +161 -4
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +3 -17
  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 +280 -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 +6 -6
  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 +156 -6
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
  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 +66 -19
  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 +6 -0
  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/{providers/memory → memory}/appstate.store.js +5 -5
  245. package/dist/esm/store/memory/auth.store.js +24 -0
  246. package/dist/esm/store/memory/contact.store.js +79 -0
  247. package/dist/esm/store/memory/device-list.store.js +103 -0
  248. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  249. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  250. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  251. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  252. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  254. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  255. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  256. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  258. package/dist/esm/store/noop.store.js +6 -4
  259. package/dist/esm/transport/WaComms.js +14 -5
  260. package/dist/esm/transport/WaWebSocket.js +32 -8
  261. package/dist/esm/transport/binary/constants.js +10 -4
  262. package/dist/esm/transport/binary/decoder.js +21 -15
  263. package/dist/esm/transport/binary/encoder.js +96 -21
  264. package/dist/esm/transport/binary/tokens.js +12 -12
  265. package/dist/esm/transport/index.js +1 -0
  266. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  267. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  268. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  269. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  270. package/dist/esm/transport/node/builders/abprops.js +2 -2
  271. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  272. package/dist/esm/transport/node/builders/bot.js +38 -0
  273. package/dist/esm/transport/node/builders/business.js +30 -30
  274. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  275. package/dist/esm/transport/node/builders/community.js +53 -0
  276. package/dist/esm/transport/node/builders/device.js +2 -2
  277. package/dist/esm/transport/node/builders/email.js +6 -5
  278. package/dist/esm/transport/node/builders/global.js +1 -1
  279. package/dist/esm/transport/node/builders/group.js +114 -4
  280. package/dist/esm/transport/node/builders/media.js +2 -2
  281. package/dist/esm/transport/node/builders/message.js +83 -49
  282. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  283. package/dist/esm/transport/node/builders/passive.js +7 -0
  284. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  285. package/dist/esm/transport/node/builders/presence.js +27 -1
  286. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  287. package/dist/esm/transport/node/builders/privacy.js +6 -6
  288. package/dist/esm/transport/node/builders/profile.js +28 -8
  289. package/dist/esm/transport/node/builders/tos.js +58 -0
  290. package/dist/esm/transport/node/builders/usync.js +51 -2
  291. package/dist/esm/transport/node/helpers.js +3 -1
  292. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  293. package/dist/esm/transport/node/mex/client.js +22 -0
  294. package/dist/esm/transport/node/query.js +17 -0
  295. package/dist/esm/transport/node/usync.js +12 -0
  296. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  297. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  298. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  300. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  301. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  302. package/dist/esm/transport/noise/constants.js +0 -1
  303. package/dist/esm/transport/proxy.js +5 -0
  304. package/dist/esm/transport/stream/parse.js +3 -7
  305. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  306. package/dist/esm/util/async.js +4 -0
  307. package/dist/esm/util/bytes.js +37 -2
  308. package/dist/esm/util/clock.js +15 -0
  309. package/dist/esm/util/coercion.js +45 -3
  310. package/dist/esm/util/collections.js +11 -0
  311. package/dist/esm/util/index.js +2 -2
  312. package/dist/esm/util/primitives.js +19 -0
  313. package/dist/esm/util/runtime.js +5 -0
  314. package/dist/esm/version-spec.js +1 -0
  315. package/dist/index.js +31 -1
  316. package/dist/infra/log/ConsoleLogger.js +30 -6
  317. package/dist/infra/log/PinoLogger.js +64 -0
  318. package/dist/infra/log/types.js +4 -2
  319. package/dist/infra/perf/BackgroundQueue.js +55 -13
  320. package/dist/media/constants.js +34 -3
  321. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  322. package/dist/media/index.js +9 -4
  323. package/dist/media/sticker/sticker-pack.js +136 -0
  324. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  325. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  326. package/dist/message/WaMessageClient.js +46 -15
  327. package/dist/message/addons/link-preview/builder.js +39 -0
  328. package/dist/message/addons/link-preview/detect.js +58 -0
  329. package/dist/message/addons/link-preview/fetcher.js +394 -0
  330. package/dist/message/addons/link-preview/types.js +2 -0
  331. package/dist/message/context-info.js +129 -0
  332. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  333. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  334. package/dist/message/crypto/phash.js +136 -0
  335. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  336. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  337. package/dist/message/{content.js → encode/content.js} +192 -7
  338. package/dist/message/encode/media-payload.js +45 -0
  339. package/dist/message/{padding.js → encode/padding.js} +9 -3
  340. package/dist/message/index.js +2 -2
  341. package/dist/message/kinds/bot.js +120 -0
  342. package/dist/message/kinds/newsletter.js +248 -0
  343. package/dist/message/kinds/sticker-pack.js +34 -0
  344. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  345. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  346. package/dist/message/primitives/peer-data-operation.js +96 -0
  347. package/dist/mex.js +6 -0
  348. package/dist/proto.js +1 -1
  349. package/dist/protocol/abprops.js +10 -0
  350. package/dist/protocol/appstate.js +7 -31
  351. package/dist/protocol/auth.js +3 -2
  352. package/dist/protocol/bot.js +81 -0
  353. package/dist/protocol/browser.js +8 -0
  354. package/dist/protocol/business.js +22 -0
  355. package/dist/protocol/call.js +51 -0
  356. package/dist/protocol/constants.js +39 -3
  357. package/dist/protocol/defaults.js +3 -0
  358. package/dist/protocol/index.js +12 -3
  359. package/dist/protocol/jid.js +107 -5
  360. package/dist/protocol/media.js +25 -12
  361. package/dist/protocol/message.js +4 -1
  362. package/dist/protocol/newsletter.js +64 -0
  363. package/dist/protocol/nodes.js +22 -2
  364. package/dist/protocol/notification.js +19 -3
  365. package/dist/protocol/presence.js +16 -0
  366. package/dist/protocol/status.js +9 -0
  367. package/dist/retry/codec.js +5 -0
  368. package/dist/retry/parse.js +16 -34
  369. package/dist/retry/reason.js +5 -0
  370. package/dist/retry/replay.js +129 -35
  371. package/dist/retry/tracker.js +3 -7
  372. package/dist/signal/api/SignalDeviceSyncApi.js +64 -17
  373. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  374. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  375. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  376. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  377. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  378. package/dist/signal/api/codec.js +52 -0
  379. package/dist/signal/api/prekeys.js +4 -0
  380. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +5 -7
  381. package/dist/signal/constants.js +4 -1
  382. package/dist/signal/encoding.js +5 -303
  383. package/dist/signal/group/SenderKeyChain.js +17 -32
  384. package/dist/signal/group/SenderKeyManager.js +24 -7
  385. package/dist/signal/group/encoding.js +101 -0
  386. package/dist/signal/index.js +13 -10
  387. package/dist/signal/registration/encoding.js +39 -0
  388. package/dist/signal/registration/keygen.js +10 -0
  389. package/dist/signal/registration/utils.js +6 -0
  390. package/dist/signal/session/SignalProtocol.js +112 -10
  391. package/dist/signal/session/SignalRatchet.js +24 -54
  392. package/dist/signal/session/SignalSession.js +6 -14
  393. package/dist/signal/session/encoding.js +183 -0
  394. package/dist/signal/session/resolver.js +139 -30
  395. package/dist/store/cache/identity.cache.js +78 -0
  396. package/dist/store/cache/privacy-token.cache.js +60 -0
  397. package/dist/store/cache/sender-key.cache.js +104 -0
  398. package/dist/store/cache/session.cache.js +95 -0
  399. package/dist/store/contracts/group-metadata.store.js +2 -0
  400. package/dist/store/createStore.js +90 -36
  401. package/dist/store/index.js +18 -16
  402. package/dist/store/locks/contact.lock.js +1 -0
  403. package/dist/store/locks/device-list.lock.js +1 -0
  404. package/dist/store/locks/group-metadata.lock.js +23 -0
  405. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  406. package/dist/store/memory/auth.store.js +28 -0
  407. package/dist/store/memory/contact.store.js +83 -0
  408. package/dist/store/memory/device-list.store.js +107 -0
  409. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  410. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  411. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  412. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  413. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  414. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  415. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  416. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  417. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  418. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  419. package/dist/store/noop.store.js +7 -5
  420. package/dist/transport/WaComms.js +14 -5
  421. package/dist/transport/WaWebSocket.js +32 -8
  422. package/dist/transport/binary/constants.js +11 -5
  423. package/dist/transport/binary/decoder.js +24 -18
  424. package/dist/transport/binary/encoder.js +109 -34
  425. package/dist/transport/binary/tokens.js +12 -12
  426. package/dist/transport/index.js +3 -1
  427. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  428. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  429. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  430. package/dist/transport/node/WaNodeTransport.js +13 -0
  431. package/dist/transport/node/builders/abprops.js +1 -1
  432. package/dist/transport/node/builders/account-sync.js +7 -16
  433. package/dist/transport/node/builders/bot.js +43 -0
  434. package/dist/transport/node/builders/business.js +31 -31
  435. package/dist/transport/node/builders/chatstate.js +31 -0
  436. package/dist/transport/node/builders/community.js +59 -0
  437. package/dist/transport/node/builders/device.js +1 -1
  438. package/dist/transport/node/builders/email.js +6 -5
  439. package/dist/transport/node/builders/global.js +1 -1
  440. package/dist/transport/node/builders/group.js +121 -3
  441. package/dist/transport/node/builders/media.js +1 -1
  442. package/dist/transport/node/builders/message.js +84 -49
  443. package/dist/transport/node/builders/newsletter.js +183 -0
  444. package/dist/transport/node/builders/passive.js +10 -0
  445. package/dist/transport/node/builders/prekeys.js +3 -3
  446. package/dist/transport/node/builders/presence.js +28 -1
  447. package/dist/transport/node/builders/privacy-token.js +1 -1
  448. package/dist/transport/node/builders/privacy.js +5 -5
  449. package/dist/transport/node/builders/profile.js +30 -7
  450. package/dist/transport/node/builders/tos.js +63 -0
  451. package/dist/transport/node/builders/usync.js +52 -1
  452. package/dist/transport/node/helpers.js +2 -1
  453. package/dist/transport/node/mex/argo-decoder.js +2 -2
  454. package/dist/transport/node/mex/client.js +23 -0
  455. package/dist/transport/node/query.js +17 -0
  456. package/dist/transport/node/usync.js +13 -0
  457. package/dist/transport/noise/WaClientPayload.js +8 -8
  458. package/dist/transport/noise/WaMobileClientPayload.js +5 -0
  459. package/dist/transport/noise/WaNoiseCert.js +5 -0
  460. package/dist/transport/noise/WaNoiseHandshake.js +25 -23
  461. package/dist/transport/noise/WaNoiseSession.js +39 -59
  462. package/dist/transport/noise/WaNoiseSocket.js +18 -12
  463. package/dist/transport/noise/constants.js +1 -2
  464. package/dist/transport/proxy.js +5 -0
  465. package/dist/transport/stream/parse.js +3 -7
  466. package/dist/transport/wa-web-version-fetcher.js +94 -0
  467. package/dist/types/appstate/constants.d.ts +1 -1
  468. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  469. package/dist/types/appstate/index.d.ts +5 -5
  470. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  471. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  472. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  473. package/dist/types/appstate/utils.d.ts +17 -1
  474. package/dist/types/appstate-spec.d.ts +24 -0
  475. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  476. package/dist/types/auth/credentials-flow.d.ts +4 -3
  477. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  478. package/dist/types/auth/types.d.ts +48 -1
  479. package/dist/types/client/WaClient.d.ts +178 -71
  480. package/dist/types/client/WaClientFactory.d.ts +30 -5
  481. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  482. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  483. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  484. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  485. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  486. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  487. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  488. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  489. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  490. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  491. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  492. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +54 -31
  493. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  494. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  495. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  496. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  497. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  498. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  499. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  500. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  501. package/dist/types/client/events/abprops.d.ts +2 -1
  502. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  503. package/dist/types/client/events/business.d.ts +10 -0
  504. package/dist/types/client/events/call.d.ts +31 -0
  505. package/dist/types/client/events/chatstate.d.ts +9 -0
  506. package/dist/types/client/events/devices.d.ts +5 -4
  507. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  508. package/dist/types/client/events/group.d.ts +2 -1
  509. package/dist/types/client/events/identity.d.ts +2 -1
  510. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  511. package/dist/types/client/events/mex-notification.d.ts +6 -0
  512. package/dist/types/client/events/picture.d.ts +8 -0
  513. package/dist/types/client/events/presence.d.ts +28 -0
  514. package/dist/types/client/events/receipt.d.ts +14 -0
  515. package/dist/types/client/events/registration.d.ts +4 -3
  516. package/dist/types/client/index.d.ts +1 -1
  517. package/dist/types/client/media.d.ts +35 -1
  518. package/dist/types/client/messaging/fanout.d.ts +2 -2
  519. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  520. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  521. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  522. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  523. package/dist/types/client/messaging/messages.d.ts +28 -0
  524. package/dist/types/client/newsletter/admin.d.ts +71 -0
  525. package/dist/types/client/newsletter/content.d.ts +42 -0
  526. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  527. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  528. package/dist/types/client/newsletter/mex.d.ts +14 -0
  529. package/dist/types/client/newsletter/parse.d.ts +19 -0
  530. package/dist/types/client/newsletter/types.d.ts +190 -0
  531. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  532. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  533. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  534. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  535. package/dist/types/client/types.d.ts +843 -71
  536. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  537. package/dist/types/crypto/core/index.d.ts +2 -2
  538. package/dist/types/crypto/core/keys.d.ts +0 -4
  539. package/dist/types/crypto/core/nonce.d.ts +4 -5
  540. package/dist/types/crypto/core/primitives.d.ts +31 -20
  541. package/dist/types/crypto/core/random.d.ts +6 -0
  542. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  543. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  544. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  545. package/dist/types/crypto/curves/constants.d.ts +4 -3
  546. package/dist/types/crypto/curves/types.d.ts +0 -5
  547. package/dist/types/crypto/math/constants.d.ts +0 -1
  548. package/dist/types/crypto/math/mod.d.ts +0 -1
  549. package/dist/types/index.d.ts +32 -6
  550. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  551. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  552. package/dist/types/infra/log/types.d.ts +6 -0
  553. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  554. package/dist/types/media/constants.d.ts +7 -2
  555. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  556. package/dist/types/media/index.d.ts +7 -5
  557. package/dist/types/media/processor.d.ts +27 -5
  558. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  559. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  560. package/dist/types/media/transfer/conn.d.ts +7 -0
  561. package/dist/types/media/types.d.ts +1 -2
  562. package/dist/types/message/WaMessageClient.d.ts +14 -0
  563. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  564. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  565. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  566. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  567. package/dist/types/message/context-info.d.ts +66 -0
  568. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  569. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  570. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  571. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  572. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  573. package/dist/types/message/encode/content.d.ts +43 -0
  574. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  575. package/dist/types/message/encode/media-payload.d.ts +12 -0
  576. package/dist/types/message/index.d.ts +2 -2
  577. package/dist/types/message/kinds/bot.d.ts +31 -0
  578. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  579. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  580. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  581. package/dist/types/message/primitives/incoming.d.ts +21 -0
  582. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  583. package/dist/types/message/types.d.ts +208 -10
  584. package/dist/types/mex.d.ts +2 -0
  585. package/dist/types/proto.d.ts +2 -2
  586. package/dist/types/protocol/abprops.d.ts +9 -0
  587. package/dist/types/protocol/appstate.d.ts +4 -49
  588. package/dist/types/protocol/auth.d.ts +2 -2
  589. package/dist/types/protocol/bot.d.ts +45 -0
  590. package/dist/types/protocol/browser.d.ts +8 -0
  591. package/dist/types/protocol/business.d.ts +21 -0
  592. package/dist/types/protocol/call.d.ts +44 -0
  593. package/dist/types/protocol/constants.d.ts +16 -3
  594. package/dist/types/protocol/defaults.d.ts +3 -0
  595. package/dist/types/protocol/group.d.ts +1 -1
  596. package/dist/types/protocol/index.d.ts +2 -1
  597. package/dist/types/protocol/jid.d.ts +78 -0
  598. package/dist/types/protocol/media.d.ts +21 -13
  599. package/dist/types/protocol/message.d.ts +4 -0
  600. package/dist/types/protocol/newsletter.d.ts +65 -0
  601. package/dist/types/protocol/nodes.d.ts +20 -0
  602. package/dist/types/protocol/notification.d.ts +16 -0
  603. package/dist/types/protocol/presence.d.ts +16 -0
  604. package/dist/types/protocol/status.d.ts +7 -0
  605. package/dist/types/retry/codec.d.ts +5 -0
  606. package/dist/types/retry/index.d.ts +1 -1
  607. package/dist/types/retry/parse.d.ts +9 -0
  608. package/dist/types/retry/reason.d.ts +5 -0
  609. package/dist/types/retry/replay.d.ts +19 -5
  610. package/dist/types/retry/tracker.d.ts +10 -3
  611. package/dist/types/retry/types.d.ts +3 -8
  612. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  613. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  614. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  615. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  616. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  617. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  618. package/dist/types/signal/api/codec.d.ts +20 -0
  619. package/dist/types/signal/api/constants.d.ts +1 -1
  620. package/dist/types/signal/api/prekeys.d.ts +4 -0
  621. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  622. package/dist/types/signal/attestation/constants.d.ts +4 -0
  623. package/dist/types/signal/constants.d.ts +7 -4
  624. package/dist/types/signal/encoding.d.ts +6 -68
  625. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  626. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -0
  627. package/dist/types/signal/group/encoding.d.ts +25 -0
  628. package/dist/types/signal/index.d.ts +4 -1
  629. package/dist/types/signal/registration/encoding.d.ts +30 -0
  630. package/dist/types/signal/registration/keygen.d.ts +10 -0
  631. package/dist/types/signal/registration/utils.d.ts +5 -0
  632. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  633. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  634. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  635. package/dist/types/signal/session/encoding.d.ts +28 -0
  636. package/dist/types/signal/session/resolver.d.ts +14 -0
  637. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  638. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  639. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  640. package/dist/types/store/cache/session.cache.d.ts +23 -0
  641. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  642. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  643. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  644. package/dist/types/store/contracts/message.store.d.ts +0 -2
  645. package/dist/types/store/createStore.d.ts +54 -2
  646. package/dist/types/store/index.d.ts +17 -16
  647. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  648. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  649. package/dist/types/store/memory/auth.store.d.ts +18 -0
  650. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  651. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  652. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  653. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  654. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  655. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  656. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  657. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  658. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  659. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  661. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  662. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  663. package/dist/types/store/noop.store.d.ts +2 -2
  664. package/dist/types/store/types.d.ts +250 -6
  665. package/dist/types/transport/WaComms.d.ts +5 -0
  666. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  667. package/dist/types/transport/binary/constants.d.ts +8 -2
  668. package/dist/types/transport/binary/decoder.d.ts +5 -0
  669. package/dist/types/transport/binary/encoder.d.ts +5 -0
  670. package/dist/types/transport/binary/tokens.d.ts +6 -6
  671. package/dist/types/transport/index.d.ts +3 -1
  672. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  673. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  674. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  675. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  676. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  677. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  678. package/dist/types/transport/node/builders/business.d.ts +21 -4
  679. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  680. package/dist/types/transport/node/builders/community.d.ts +17 -0
  681. package/dist/types/transport/node/builders/group.d.ts +44 -2
  682. package/dist/types/transport/node/builders/message.d.ts +11 -6
  683. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  684. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  685. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  686. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  687. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  688. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  689. package/dist/types/transport/node/helpers.d.ts +1 -2
  690. package/dist/types/transport/node/mex/client.d.ts +12 -1
  691. package/dist/types/transport/node/query.d.ts +19 -1
  692. package/dist/types/transport/node/usync.d.ts +3 -0
  693. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +5 -0
  694. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  695. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  696. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  697. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  698. package/dist/types/transport/noise/constants.d.ts +4 -5
  699. package/dist/types/transport/proxy.d.ts +5 -0
  700. package/dist/types/transport/types.d.ts +14 -7
  701. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  702. package/dist/types/util/async.d.ts +4 -0
  703. package/dist/types/util/bytes.d.ts +36 -1
  704. package/dist/types/util/clock.d.ts +6 -0
  705. package/dist/types/util/coercion.d.ts +25 -0
  706. package/dist/types/util/collections.d.ts +8 -0
  707. package/dist/types/util/index.d.ts +2 -2
  708. package/dist/types/util/primitives.d.ts +11 -0
  709. package/dist/types/util/runtime.d.ts +5 -0
  710. package/dist/types/version-spec.d.ts +1 -0
  711. package/dist/util/async.js +4 -0
  712. package/dist/util/bytes.js +37 -2
  713. package/dist/util/clock.js +18 -0
  714. package/dist/util/coercion.js +48 -3
  715. package/dist/util/collections.js +12 -0
  716. package/dist/util/index.js +7 -1
  717. package/dist/util/primitives.js +20 -0
  718. package/dist/util/runtime.js +5 -0
  719. package/dist/version-spec.js +5 -0
  720. package/package.json +32 -8
  721. package/spec/appstate/index.d.ts +188 -0
  722. package/spec/appstate/index.js +850 -0
  723. package/spec/mex/index.d.ts +4172 -0
  724. package/spec/mex/index.js +261 -0
  725. package/spec/proto/index.d.ts +16305 -0
  726. package/spec/proto/index.js +1 -0
  727. package/spec/version/index.d.ts +4 -0
  728. package/spec/version/index.js +9 -0
  729. package/spec/version/version.json +3 -0
  730. package/dist/client/events/chat.js +0 -227
  731. package/dist/client/incoming.js +0 -306
  732. package/dist/client/mailbox.js +0 -66
  733. package/dist/client/messages.js +0 -305
  734. package/dist/esm/client/events/chat.js +0 -224
  735. package/dist/esm/client/incoming.js +0 -296
  736. package/dist/esm/client/mailbox.js +0 -63
  737. package/dist/esm/client/messages.js +0 -301
  738. package/dist/esm/media/WaMediaCrypto.js +0 -499
  739. package/dist/esm/message/phash.js +0 -47
  740. package/dist/esm/store/locks/participants.lock.js +0 -20
  741. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  742. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  743. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  744. package/dist/media/WaMediaCrypto.js +0 -503
  745. package/dist/message/phash.js +0 -50
  746. package/dist/store/locks/participants.lock.js +0 -23
  747. package/dist/store/providers/memory/contact.store.js +0 -32
  748. package/dist/store/providers/memory/device-list.store.js +0 -71
  749. package/dist/transport/node/mex/persist-ids.js +0 -13
  750. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  751. package/dist/types/client/events/chat.d.ts +0 -3
  752. package/dist/types/client/history-sync.d.ts +0 -20
  753. package/dist/types/client/messages.d.ts +0 -18
  754. package/dist/types/client/messaging/participants.d.ts +0 -13
  755. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  756. package/dist/types/media/conn.d.ts +0 -3
  757. package/dist/types/message/content.d.ts +0 -14
  758. package/dist/types/message/incoming.d.ts +0 -18
  759. package/dist/types/signal/crypto/constants.d.ts +0 -4
  760. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  761. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  762. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  763. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  764. package/proto/index.d.ts +0 -10903
  765. package/proto/index.js +0 -1
  766. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  767. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  768. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  769. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  770. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  771. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  772. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  773. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  774. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -0,0 +1,232 @@
1
+ import type { Readable } from 'node:stream';
2
+ import type { WaMessageDispatchCoordinator } from '../coordinators/WaMessageDispatchCoordinator';
3
+ import type { WaTrustedContactTokenCoordinator } from '../coordinators/WaTrustedContactTokenCoordinator';
4
+ import type { WaDownloadMediaOptions, WaIncomingAddonEvent, WaIncomingMessageEvent, WaSendMessageOptions } from '../types';
5
+ import type { Logger } from '../../infra/log/types';
6
+ import type { WaMediaTransferClient } from '../../media/transfer/WaMediaTransferClient';
7
+ import type { PeerDataOperationRequester } from '../../message/primitives/peer-data-operation';
8
+ import type { WaMessagePublishResult, WaSendMessageContent, WaSendReceiptEventOptions, WaSendReceiptOptions } from '../../message/types';
9
+ import { type Proto } from '../..';
10
+ import type { WaMessageSecretStore } from '../../store/contracts/message-secret.store';
11
+ import type { WaMessageStore } from '../../store/contracts/message.store';
12
+ import { type WaMexQuerySocket } from '../../transport/node/mex/client';
13
+ export interface WaMessageCoordinatorDeps {
14
+ readonly messageDispatch: WaMessageDispatchCoordinator;
15
+ readonly mediaTransfer: WaMediaTransferClient;
16
+ readonly logger: Logger;
17
+ readonly messageStore: WaMessageStore;
18
+ readonly messageSecretStore: WaMessageSecretStore;
19
+ readonly trustedContactToken: WaTrustedContactTokenCoordinator;
20
+ readonly emitAddon: (event: WaIncomingAddonEvent) => void;
21
+ readonly mexSocket: WaMexQuerySocket;
22
+ readonly peerDataOperation: PeerDataOperationRequester;
23
+ }
24
+ export interface WaRequestHistorySyncInput {
25
+ /** Chat the older messages should be fetched from. */
26
+ readonly chatJid: string;
27
+ /**
28
+ * Id of the oldest message currently in the local view. The server
29
+ * pages backwards from this anchor. Omit to let the server pick its
30
+ * own anchor (rarely useful).
31
+ */
32
+ readonly oldestMsgId?: string;
33
+ /** Whether {@link oldestMsgId} was sent by the current account. */
34
+ readonly oldestMsgFromMe?: boolean;
35
+ /** Epoch ms of the oldest local message; pairs with {@link oldestMsgId}. */
36
+ readonly oldestMsgTimestampMs?: number;
37
+ /**
38
+ * How many older messages to request. WhatsApp Web defaults to the
39
+ * server-side `history_sync_on_demand_message_count` AB-prop (~50);
40
+ * passing nothing here leaves the field unset so the server applies
41
+ * its own default.
42
+ */
43
+ readonly count?: number;
44
+ }
45
+ export interface WaReachoutTimelock {
46
+ readonly isActive: boolean;
47
+ readonly enforcementType: string | null;
48
+ readonly enforcementEndsAt: number | null;
49
+ }
50
+ export type WaMessageCappingType = 'INDIVIDUAL_NEW_CHAT_THREAD';
51
+ export interface WaMessageCappingInfo {
52
+ readonly totalQuota: number | null;
53
+ readonly usedQuota: number | null;
54
+ readonly cycleStartAt: number | null;
55
+ readonly cycleEndAt: number | null;
56
+ readonly serverSentAt: number | null;
57
+ readonly oteStatus: string | null;
58
+ readonly mvStatus: string | null;
59
+ readonly cappingStatus: string | null;
60
+ }
61
+ /**
62
+ * Coordinates outbound message sending, receipts, addon decryption, media
63
+ * download, and the related MEX account queries. Accessed via
64
+ * {@link WaClient.message}.
65
+ */
66
+ export declare class WaMessageCoordinator {
67
+ private readonly messageDispatch;
68
+ private readonly mediaTransfer;
69
+ private readonly logger;
70
+ private readonly messageStore;
71
+ private readonly messageSecretStore;
72
+ private readonly trustedContactToken;
73
+ private readonly emitAddon;
74
+ private readonly mexSocket;
75
+ private readonly peerDataOperation;
76
+ constructor(deps: WaMessageCoordinatorDeps);
77
+ /**
78
+ * Asks the server to backfill older messages for `chatJid` beyond what
79
+ * arrived in the initial history-sync. Implemented as a
80
+ * `PeerDataOperationRequestMessage` (type `HISTORY_SYNC_ON_DEMAND`)
81
+ * sent to this account's own user JID; the response arrives later as
82
+ * a `history_sync_chunk` event the same way the bootstrap chunks do -
83
+ * subscribe before calling if you need to react to the chunk.
84
+ *
85
+ * The method returns once the request is dispatched (with the protocol
86
+ * message id), **not** when the chunk arrives. Pair `oldestMsgId` +
87
+ * `oldestMsgTimestampMs` + `oldestMsgFromMe` from the topmost message
88
+ * currently visible to page backwards correctly.
89
+ */
90
+ requestHistorySync(input: WaRequestHistorySyncInput): Promise<{
91
+ readonly messageId: string;
92
+ }>;
93
+ /**
94
+ * Fetches the server-side "reachout" timelock that throttles cold outreach
95
+ * to non-contacts, returning the active window when enforcement is on.
96
+ */
97
+ getReachoutTimelock(): Promise<WaReachoutTimelock>;
98
+ /**
99
+ * Fetches the per-cycle message capping info applied to new-chat threads
100
+ * (quota, used, cycle boundaries, status flags).
101
+ */
102
+ getNewChatMessageCapping(type?: WaMessageCappingType): Promise<WaMessageCappingInfo>;
103
+ /**
104
+ * Force-refreshes the Signal session(s) for `jid`. Set `reasonIdentity` to
105
+ * `true` when the trigger was an identity change – this also queues a
106
+ * trusted-contact-token reissue.
107
+ */
108
+ syncSignalSession(jid: string, reasonIdentity?: boolean): Promise<void>;
109
+ /**
110
+ * Sends a message (any {@link WaSendMessageContent} kind – text, media,
111
+ * poll, reaction, edit, revoke, etc.) to `to` and returns the publish
112
+ * result containing the stanza id and ack metadata.
113
+ *
114
+ * `to` accepts any JID accepted by {@link normalizeRecipientJid}: bare
115
+ * digits (`'5511999999999'`), a phone JID (`'5511…@s.whatsapp.net'`),
116
+ * a group JID (`'…@g.us'`), or a LID. See the {@link WaSendMessageContent}
117
+ * union for the full kind list.
118
+ *
119
+ * **Gotchas:**
120
+ * - The stanza id is auto-generated unless you set `options.id`. Reusing
121
+ * an id manually makes the send idempotent on the server but is also how
122
+ * internal retries (`maxAttempts`) work – don't reuse ids across
123
+ * logically distinct messages.
124
+ * - Sending to a `@newsletter` JID routes through a separate code path
125
+ * that ignores most of `options` (no quote/forward/edit semantics).
126
+ * - Addon-crypto kinds (poll-vote, reaction, message-edit, ...) require an
127
+ * authenticated session (`meJid` present) – throws otherwise.
128
+ * - Group sends fan out to every cached member device. If your
129
+ * `groupMetadata` cache is empty/disabled, this triggers a metadata IQ
130
+ * per send (rate-limited server-side, see {@link WaCreateStoreOptions}).
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * // 1. Plain text (string shorthand)
135
+ * await client.message.send('5511999999999', 'hello!')
136
+ *
137
+ * // 2. Reply with mention
138
+ * await client.message.send(groupJid, {
139
+ * type: 'text',
140
+ * text: '@5511999999999 ping',
141
+ * contextInfo: {
142
+ * mentionedJid: ['5511999999999@s.whatsapp.net'],
143
+ * quoted: { key: { remoteJid: groupJid, fromMe: false, id: incomingId } }
144
+ * }
145
+ * })
146
+ *
147
+ * // 3. Image from a file path (the encoder opens + streams it for you)
148
+ * await client.message.send(jid, {
149
+ * type: 'image',
150
+ * media: '/tmp/photo.jpg',
151
+ * mimetype: 'image/jpeg',
152
+ * caption: 'check this out'
153
+ * })
154
+ *
155
+ * // 4. React to an incoming message (empty emoji = unreact)
156
+ * await client.message.send(event.key.remoteJid, {
157
+ * type: 'reaction',
158
+ * emoji: '👍',
159
+ * target: event.key // or pass the whole event
160
+ * })
161
+ *
162
+ * // 5. Poll
163
+ * const result = await client.message.send(jid, {
164
+ * type: 'poll',
165
+ * name: 'lunch?',
166
+ * options: ['pizza', 'sushi', 'burger'],
167
+ * selectableCount: 1
168
+ * })
169
+ * console.log('sent as', result.id)
170
+ * ```
171
+ */
172
+ send(to: string, content: WaSendMessageContent, options?: WaSendMessageOptions): Promise<WaMessagePublishResult>;
173
+ /**
174
+ * Sends a receipt (delivery / read / played / inactive). Overloads:
175
+ * - Pass one or many `WaIncomingMessageEvent` to auto-derive chat/sender
176
+ * metadata and batch ids by chat.
177
+ * - Pass an explicit `(jid, ids, options)` triple for manual control.
178
+ *
179
+ * **You usually don't need to call this for `'delivery'`** - the library
180
+ * already auto-ACKs delivery on every incoming `<message>` it decrypts
181
+ * successfully. Use this manually for `'read'`/`'played'` (read receipts
182
+ * the user explicitly toggled) or for `'inactive'`/retry receipts.
183
+ */
184
+ sendReceipt(target: WaIncomingMessageEvent | readonly WaIncomingMessageEvent[], options?: WaSendReceiptEventOptions): Promise<void>;
185
+ sendReceipt(jid: string, ids: string | readonly string[], options?: WaSendReceiptOptions): Promise<void>;
186
+ /**
187
+ * Resolves the media payload inside `source` and returns a `Readable`
188
+ * stream of the decrypted bytes. Throws when the message has no
189
+ * downloadable media.
190
+ *
191
+ * **Caller owns the stream** - pipe it somewhere or call `.destroy()` to
192
+ * release the underlying socket; an unconsumed stream leaks the connection.
193
+ * MAC + SHA-256 verification runs **as bytes are consumed**, so if you
194
+ * abort mid-read you've consumed unverified bytes. Pass `options.signal`
195
+ * to cancel cleanly, or use {@link downloadBytes} / {@link downloadToFile}
196
+ * for one-shot verified downloads.
197
+ */
198
+ download(source: WaIncomingMessageEvent | Proto.IMessage, options?: WaDownloadMediaOptions): Promise<Readable>;
199
+ /**
200
+ * Convenience wrapper around {@link download} that streams the decrypted
201
+ * media directly to `filePath`. On failure the **partial file is not
202
+ * cleaned up** - delete it yourself in the error handler if you don't
203
+ * want to leak corrupted artifacts.
204
+ */
205
+ downloadToFile(source: WaIncomingMessageEvent | Proto.IMessage, filePath: string, options?: WaDownloadMediaOptions): Promise<void>;
206
+ /**
207
+ * Convenience wrapper around {@link download} that buffers the decrypted
208
+ * media into a single `Uint8Array`. Use only for small media – caps via
209
+ * `options.maxBytes`.
210
+ */
211
+ downloadBytes(source: WaIncomingMessageEvent | Proto.IMessage, options?: WaDownloadMediaOptions): Promise<Uint8Array>;
212
+ /**
213
+ * Attempts to decrypt an addon payload (poll vote, reaction, edit, ...)
214
+ * attached to `event` and, on success, emits a typed
215
+ * `WaIncomingAddonEvent`. Silently returns when the parent message
216
+ * secret is missing or the payload is not an addon.
217
+ *
218
+ * Called automatically by the client unless `options.addons.autoDecrypt`
219
+ * is explicitly `false` - you rarely need to invoke it directly. The
220
+ * parent secret is looked up in the in-memory `messageSecret` cache
221
+ * first, then in the `messages` store. If both are `'none'`/missing,
222
+ * decryption fails and the event never fires; failures are logged at
223
+ * `warn` for `secretEncryptedMessage` addons (whose parent can be
224
+ * any message type, so the secret is only available when the
225
+ * `messages` mailbox is active) and at `debug` for the dedicated
226
+ * addon types (reactions, poll votes, event responses, comments)
227
+ * whose parent always carries a persisted secret or is itself
228
+ * short-lived.
229
+ */
230
+ tryDecryptAddon(event: WaIncomingMessageEvent): Promise<void>;
231
+ private dispatchReceipt;
232
+ }
@@ -1,69 +1,62 @@
1
1
  import type { WaAppStateSyncKey } from '../../appstate/types';
2
+ import type { WaAuthCredentials } from '../../auth/types';
2
3
  import type { DeviceFanoutResolver } from '../messaging/fanout';
4
+ import type { GroupMetadataCache } from '../messaging/group-metadata';
3
5
  import type { AppStateSyncKeyProtocol } from '../messaging/key-protocol';
4
- import type { GroupParticipantsCache } from '../messaging/participants';
5
6
  import type { WaGroupEvent, WaSendMessageOptions, WaSignalMessagePublishInput } from '../types';
6
7
  import type { Logger } from '../../infra/log/types';
7
- import type { WaEncryptedMessageInput, WaMessagePublishOptions, WaMessagePublishResult, WaSendMessageContent, WaSendReceiptInput } from '../../message/types';
8
+ import { type WaSendContextInfo } from '../../message/context-info';
9
+ import { type IcdcMeta } from '../../message/crypto/icdc';
10
+ import type { WaEncryptedMessageInput, WaMessageBuildResult, WaMessagePublishOptions, WaMessagePublishResult, WaSendMessageContent, WaSendReceiptInput } from '../../message/types';
8
11
  import type { WaMessageClient } from '../../message/WaMessageClient';
9
12
  import { type Proto } from '../..';
13
+ import { type WaStatusDistributionSetting } from '../../protocol/constants';
10
14
  import type { OutboundRetryTracker } from '../../retry/tracker';
15
+ import type { SignalDeviceSyncApi } from '../../signal/api/SignalDeviceSyncApi';
11
16
  import type { SenderKeyManager } from '../../signal/group/SenderKeyManager';
12
17
  import type { SignalSessionResolver } from '../../signal/session/resolver';
13
18
  import type { SignalProtocol } from '../../signal/session/SignalProtocol';
19
+ import type { SignalAddress } from '../../signal/types';
14
20
  import type { WaDeviceListStore } from '../../store/contracts/device-list.store';
15
21
  import type { WaIdentityStore } from '../../store/contracts/identity.store';
16
22
  import type { WaMessageSecretStore } from '../../store/contracts/message-secret.store';
17
23
  import type { WaSessionStore } from '../../store/contracts/session.store';
18
24
  import type { WaSignalStore } from '../../store/contracts/signal.store';
19
25
  import type { BinaryNode } from '../../transport/types';
26
+ import type { ServerClock } from '../../util/clock';
20
27
  interface WaMessageDispatchCoordinatorOptions {
21
28
  readonly logger: Logger;
22
29
  readonly messageClient: WaMessageClient;
23
30
  readonly retryTracker: OutboundRetryTracker;
24
31
  readonly sessionResolver: SignalSessionResolver;
25
32
  readonly fanoutResolver: DeviceFanoutResolver;
26
- readonly participantsCache: GroupParticipantsCache;
33
+ readonly groupMetadataCache: GroupMetadataCache;
27
34
  readonly appStateSyncKeyProtocol: AppStateSyncKeyProtocol;
28
- readonly buildMessageContent: (content: WaSendMessageContent) => Promise<Proto.IMessage>;
35
+ readonly buildMessageContent: (content: WaSendMessageContent, ctx?: {
36
+ readonly to: string;
37
+ readonly outgoingStanzaId?: string;
38
+ readonly meJid?: string;
39
+ }) => Promise<WaMessageBuildResult>;
29
40
  readonly senderKeyManager: SenderKeyManager;
30
41
  readonly signalProtocol: SignalProtocol;
31
42
  readonly signalStore: WaSignalStore;
32
43
  readonly sessionStore: WaSessionStore;
33
44
  readonly identityStore: WaIdentityStore;
34
45
  readonly deviceListStore: WaDeviceListStore;
46
+ readonly signalDeviceSync: SignalDeviceSyncApi;
35
47
  readonly messageSecretStore: WaMessageSecretStore;
36
- readonly getCurrentMeJid: () => string | null | undefined;
37
- readonly getCurrentMeLid: () => string | null | undefined;
38
- readonly getCurrentSignedIdentity: () => Proto.IADVSignedDeviceIdentity | null | undefined;
48
+ readonly getCurrentCredentials: () => WaAuthCredentials | null;
39
49
  readonly resolvePrivacyTokenNode: (recipientJid: string) => Promise<BinaryNode | null>;
40
50
  readonly onDirectMessageSent: (recipientJid: string) => void;
51
+ readonly sendNewsletterMessage?: (newsletterJid: string, content: WaSendMessageContent, options: WaSendMessageOptions, contextInfo: WaSendContextInfo | null) => Promise<WaMessagePublishResult>;
41
52
  readonly getIcdcHashLength?: () => number;
42
53
  readonly mobileMessageIdFormat?: boolean;
54
+ readonly serverClock: ServerClock;
43
55
  }
44
56
  export declare class WaMessageDispatchCoordinator {
45
- private readonly logger;
46
- private readonly messageClient;
47
- private readonly retryTracker;
48
- private readonly sessionResolver;
49
- private readonly fanoutResolver;
50
- private readonly participantsCache;
51
- private readonly appStateSyncKeyProtocol;
52
- private readonly buildMessageContent;
53
- private readonly senderKeyManager;
54
- private readonly signalProtocol;
55
- private readonly signalStore;
56
- private readonly sessionStore;
57
- private readonly identityStore;
58
- private readonly deviceListStore;
59
- private readonly messageSecretStore;
60
- private readonly getCurrentMeJid;
61
- private readonly getCurrentMeLid;
62
- private readonly getCurrentSignedIdentity;
63
- private readonly resolvePrivacyTokenNode;
64
- private readonly onDirectMessageSent;
65
- private readonly getIcdcHashLength;
57
+ private readonly deps;
66
58
  private readonly mobileMessageIdFormat;
59
+ private readonly serverClock;
67
60
  private readonly icdcDedup;
68
61
  private readonly privacyTokenDedup;
69
62
  private readonly distributionDedup;
@@ -72,23 +65,53 @@ export declare class WaMessageDispatchCoordinator {
72
65
  publishEncryptedMessage(input: WaEncryptedMessageInput, options?: WaMessagePublishOptions): Promise<WaMessagePublishResult>;
73
66
  publishSignalMessage(input: WaSignalMessagePublishInput, options?: WaMessagePublishOptions): Promise<WaMessagePublishResult>;
74
67
  sendMessage(to: string, content: WaSendMessageContent, options?: WaSendMessageOptions): Promise<WaMessagePublishResult>;
68
+ /**
69
+ * For a 1:1 recipient passed in PN form, returns the LID-addressed user JID
70
+ * (cache-first; falls back to a one-shot `queryLidsByPhoneJids`). Switching
71
+ * to LID before fanout ensures the envelope, eligible-requester list, and
72
+ * retry-receipt addressing all agree, which keeps the retry tracker from
73
+ * rejecting receipts that arrive in LID form. Returns the original PN if
74
+ * no LID is known/resolvable. Inputs already in LID form pass through.
75
+ */
76
+ private resolveDirectRecipientLid;
75
77
  syncSignalSession(jid: string, reasonIdentity?: boolean): Promise<void>;
76
78
  sendReceipt(input: WaSendReceiptInput): Promise<void>;
79
+ publishProtocolMessageToDevice(deviceJid: string, protocolMessage: Proto.Message.IProtocolMessage, options?: {
80
+ readonly id?: string;
81
+ readonly pushPriority?: 'high' | 'high_force';
82
+ }): Promise<WaMessagePublishResult>;
83
+ publishStatusMessage(input: {
84
+ readonly message: Proto.IMessage;
85
+ readonly recipients: readonly string[];
86
+ readonly statusSetting?: WaStatusDistributionSetting;
87
+ readonly options?: WaSendMessageOptions;
88
+ }): Promise<WaMessagePublishResult>;
89
+ publishBroadcastListMessage(input: {
90
+ readonly listJid: string;
91
+ readonly message: Proto.IMessage;
92
+ readonly recipients: readonly string[];
93
+ readonly options?: WaSendMessageOptions;
94
+ }): Promise<WaMessagePublishResult>;
95
+ private publishSenderKeyFanout;
77
96
  requestAppStateSyncKeys(keyIds: readonly Uint8Array[]): Promise<readonly string[]>;
78
97
  sendAppStateSyncKeyShare(toDeviceJid: string, keys: readonly WaAppStateSyncKey[], missingKeyIds?: readonly Uint8Array[]): Promise<void>;
79
- mutateParticipantsCacheFromGroupEvent(event: WaGroupEvent): Promise<void>;
98
+ mutateGroupMetadataCacheFromGroupEvent(event: WaGroupEvent): Promise<void>;
80
99
  private shouldUseGroupDirectPath;
81
100
  private publishGroupDirectMessage;
101
+ private buildBotSidecarParticipant;
82
102
  private publishGroupSenderKeyMessage;
83
103
  private resolveGroupAddressingMode;
84
104
  private resolveSenderForAddressingMode;
85
105
  private encryptGroupDistributionParticipants;
86
106
  private publishDirectSignalMessageWithFanout;
87
107
  private withResolvedMessageId;
88
- private generateOutgoingMessageId;
108
+ generateOutgoingMessageId(): Promise<string>;
89
109
  private tryBuildReportingTokenArtifacts;
90
110
  private getEncodedSignedDeviceIdentity;
91
- private resolveUserIcdc;
111
+ resolveUserIcdc(userJid: string, localIdentity?: {
112
+ readonly address: SignalAddress;
113
+ readonly pubKey: Uint8Array;
114
+ }): Promise<IcdcMeta | null>;
92
115
  private requireCurrentMeJid;
93
116
  }
94
117
  export {};
@@ -0,0 +1,13 @@
1
+ import { type WaNewsletterAdminOps } from '../newsletter/admin';
2
+ import { type WaNewsletterDiscoveryOps } from '../newsletter/discovery';
3
+ import { type WaNewsletterMessagingDeps, type WaNewsletterMessagingOps } from '../newsletter/messaging';
4
+ export { parseNewsletterMetadata } from '../newsletter/parse';
5
+ export type { WaNewsletterAdminInfo, WaNewsletterAdminInviteInput, WaNewsletterAdminInviteResult, WaNewsletterAdminProfile, WaNewsletterCapabilityExposure, WaNewsletterCreateInput, WaNewsletterDehydratedMetadata, WaNewsletterDirectoryCategoriesPreviewOptions, WaNewsletterDirectoryCategoryPreview, WaNewsletterDirectoryListOptions, WaNewsletterDirectoryResults, WaNewsletterDirectorySearchOptions, WaNewsletterDirectoryView, WaNewsletterFetchOptions, WaNewsletterFollower, WaNewsletterFollowersOptions, WaNewsletterFollowersPage, WaNewsletterInsightMetricRequest, WaNewsletterMetadata, WaNewsletterMuteInput, WaNewsletterPicture, WaNewsletterPollVoter, WaNewsletterReactInput, WaNewsletterReactionSenders, WaNewsletterRecommendedOptions, WaNewsletterRevokeInput, WaNewsletterSendOptions, WaNewsletterSendResult, WaNewsletterSimilarOptions, WaNewsletterUpdateInput, WaNewsletterViewReceiptInput, WaNewsletterVotePollInput, WaPageInfo } from '../newsletter/types';
6
+ /**
7
+ * Newsletter coordinator surface – combines the discovery, admin, and
8
+ * messaging operation sets. Accessed via {@link WaClient.newsletter}.
9
+ */
10
+ export type WaNewsletterCoordinator = WaNewsletterDiscoveryOps & WaNewsletterAdminOps & WaNewsletterMessagingOps;
11
+ export type WaNewsletterCoordinatorOptions = WaNewsletterMessagingDeps;
12
+ /** Builds a {@link WaNewsletterCoordinator} from its MEX/messaging dependencies. */
13
+ export declare function createNewsletterCoordinator(options: WaNewsletterCoordinatorOptions): WaNewsletterCoordinator;
@@ -1,4 +1,4 @@
1
- import type { WaAppStateSyncClient } from '../../appstate/WaAppStateSyncClient';
1
+ import type { WaAppStateSyncClient } from '../../appstate/sync/WaAppStateSyncClient';
2
2
  import type { WaAuthCredentials } from '../../auth/types';
3
3
  import type { Logger } from '../../infra/log/types';
4
4
  import type { SignalDigestSyncApi } from '../../signal/api/SignalDigestSyncApi';
@@ -13,11 +13,11 @@ type WaPassiveTasksRuntime = {
13
13
  readonly getCurrentCredentials: () => WaAuthCredentials | null;
14
14
  readonly persistServerHasPreKeys: (serverHasPreKeys: boolean) => Promise<void>;
15
15
  readonly sendNodeDirect: (node: BinaryNode) => Promise<void>;
16
- readonly takeDanglingReceipts: () => BinaryNode[];
16
+ readonly takeDanglingReceipts: () => readonly BinaryNode[];
17
17
  readonly requeueDanglingReceipt: (node: BinaryNode) => void;
18
18
  readonly shouldQueueDanglingReceipt: (node: BinaryNode, error: Error) => boolean;
19
19
  readonly syncAbProps: () => void;
20
- readonly sendPresenceAvailable: () => Promise<void>;
20
+ readonly sendInitialPresence: () => Promise<void>;
21
21
  };
22
22
  export declare class WaPassiveTasksCoordinator {
23
23
  private readonly logger;
@@ -48,6 +48,7 @@ export declare class WaPassiveTasksCoordinator {
48
48
  handleDigestNotification(): Promise<void>;
49
49
  resetInFlightState(): void;
50
50
  private runPassiveTasksAfterConnect;
51
+ private sendActiveModeIq;
51
52
  private validateDigestAndRecoverPreKeys;
52
53
  private uploadPreKeysIfMissing;
53
54
  private rotateSignedPreKeyIfDue;
@@ -0,0 +1,27 @@
1
+ import type { WaAuthCredentials } from '../../auth/types';
2
+ import { type BuildChatstateNodeInput } from '../../transport/node/builders/chatstate';
3
+ import { type BuildPresenceSubscribeNodeInput } from '../../transport/node/builders/presence';
4
+ import type { BinaryNode } from '../../transport/types';
5
+ /**
6
+ * Coordinates own presence broadcasts and peer presence subscriptions.
7
+ * Accessed via {@link WaClient.presence}.
8
+ */
9
+ export interface WaPresenceCoordinator {
10
+ /** Broadcasts the current account's `available`/`unavailable` presence. */
11
+ readonly send: (type?: 'available' | 'unavailable') => Promise<void>;
12
+ /** Sends a chatstate hint (typing/recording/paused/...) into a specific chat. */
13
+ readonly sendChatstate: (jid: string, options: Omit<BuildChatstateNodeInput, 'jid'>) => Promise<void>;
14
+ /**
15
+ * Subscribes to presence updates (online/offline + chatstate) for a chat.
16
+ * The subscription is per-jid and lives only for the current connection;
17
+ * after a reconnect the caller must re-subscribe to keep receiving events.
18
+ */
19
+ readonly subscribe: (jid: string, options?: Omit<BuildPresenceSubscribeNodeInput, 'jid'>) => Promise<void>;
20
+ }
21
+ interface WaPresenceCoordinatorOptions {
22
+ readonly sendNode: (node: BinaryNode) => Promise<void>;
23
+ readonly getCurrentCredentials: () => WaAuthCredentials | null;
24
+ }
25
+ /** Builds a {@link WaPresenceCoordinator} from its node-send dependency. */
26
+ export declare function createPresenceCoordinator(options: WaPresenceCoordinatorOptions): WaPresenceCoordinator;
27
+ export {};
@@ -11,16 +11,43 @@ export interface WaBlocklistResult {
11
11
  readonly jids: readonly string[];
12
12
  readonly dhash?: string;
13
13
  }
14
+ /**
15
+ * Coordinates privacy queries/mutations: per-category settings, blocklist,
16
+ * and the per-category disallowed lists. Accessed via {@link WaClient.privacy}.
17
+ */
14
18
  export interface WaPrivacyCoordinator {
19
+ /** Fetches the current value of every privacy category. */
15
20
  readonly getPrivacySettings: () => Promise<WaPrivacySettings>;
21
+ /**
22
+ * Updates a single privacy category to a new {@link WaPrivacyValue}.
23
+ *
24
+ * The `'contact_blacklist'` value (a deny-list of specific contacts on
25
+ * top of `'contacts'`/`'all'`) only flips the **mode** here - you must
26
+ * separately populate the per-category disallowed list with
27
+ * {@link getDisallowedList} + the corresponding app-state mutation, or
28
+ * the deny-list stays empty.
29
+ */
16
30
  readonly setPrivacySetting: <S extends WaPrivacySettingName>(setting: S, value: WaPrivacySettingValueMap[S]) => Promise<void>;
31
+ /**
32
+ * Fetches the per-category disallowed list (the JIDs explicitly excluded
33
+ * from `contact_blacklist`/`contact_whitelist` style settings).
34
+ */
17
35
  readonly getDisallowedList: (category: WaPrivacyDisallowedListSettingName) => Promise<WaPrivacyDisallowedListResult>;
36
+ /** Returns the current account-wide blocklist. */
18
37
  readonly getBlocklist: () => Promise<WaBlocklistResult>;
38
+ /**
39
+ * Blocks `jid` (account-wide blocklist). After this, the peer can no
40
+ * longer message/call you and cannot see your last seen/online/photo/
41
+ * status. The block is symmetric only from the peer's read perspective -
42
+ * they don't get an explicit "you were blocked" notification.
43
+ */
19
44
  readonly blockUser: (jid: string) => Promise<void>;
45
+ /** Removes `jid` from the blocklist. */
20
46
  readonly unblockUser: (jid: string) => Promise<void>;
21
47
  }
22
48
  interface WaPrivacyCoordinatorOptions {
23
49
  readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>) => Promise<BinaryNode>;
24
50
  }
51
+ /** Builds a {@link WaPrivacyCoordinator} backed by the given IQ query function. */
25
52
  export declare function createPrivacyCoordinator(options: WaPrivacyCoordinatorOptions): WaPrivacyCoordinator;
26
53
  export {};
@@ -1,4 +1,8 @@
1
+ import type { WaAppStateMutationCoordinator } from '../coordinators/WaAppStateMutationCoordinator';
2
+ import type { Logger } from '../../infra/log/types';
3
+ import type { SignalLidSyncResult } from '../../signal/api/SignalDeviceSyncApi';
1
4
  import { type WaProfilePictureType } from '../../transport/node/builders/profile';
5
+ import { type WaMexQuerySocket } from '../../transport/node/mex/client';
2
6
  import type { BinaryNode } from '../../transport/types';
3
7
  export interface WaProfilePictureResult {
4
8
  readonly url?: string;
@@ -19,20 +23,129 @@ export interface WaDisappearingModeResult {
19
23
  readonly timestamp: number;
20
24
  readonly ephemeralityDisabled?: boolean;
21
25
  }
26
+ export interface WaTextStatusResult {
27
+ readonly jid: string;
28
+ readonly text: string | null;
29
+ readonly emoji: string | null;
30
+ readonly ephemeralDurationSec: number | null;
31
+ readonly lastUpdateTime: number | null;
32
+ }
33
+ export interface WaSetTextStatusInput {
34
+ readonly text?: string | null;
35
+ readonly emoji?: string | null;
36
+ readonly ephemeralDurationSec?: number | null;
37
+ }
38
+ export interface WaUsernameResult {
39
+ readonly jid: string;
40
+ readonly username: string | null;
41
+ }
42
+ export interface WaOwnUsernameResult {
43
+ readonly username: string | null;
44
+ readonly state: string | null;
45
+ readonly pin: string | null;
46
+ }
47
+ export interface WaSetUsernameInput {
48
+ readonly username: string;
49
+ readonly reserved?: boolean;
50
+ readonly sessionId?: string;
51
+ readonly source?: 'USER_INPUT';
52
+ }
53
+ export interface WaUsernameAvailabilityResult {
54
+ readonly available: boolean;
55
+ readonly suggestions: readonly string[];
56
+ }
57
+ /**
58
+ * Coordinates own/peer profile queries and mutations: picture, status, text
59
+ * status, username, disappearing mode, and LID lookup. Accessed via
60
+ * {@link WaClient.profile}.
61
+ */
22
62
  export interface WaProfileCoordinator {
63
+ /** Fetches a profile picture envelope (URL + direct path + id). */
23
64
  readonly getProfilePicture: (jid: string, type?: WaProfilePictureType, existingId?: string) => Promise<WaProfilePictureResult>;
65
+ /**
66
+ * Sets the profile picture for the current account or `targetJid`
67
+ * (group/community admin operation when set). `imageBytes` is uploaded
68
+ * **as-is** - the library does not transcode, resize, or crop, so pass
69
+ * pre-encoded JPEG bytes shaped to WhatsApp's expected picture format
70
+ * (square, JPEG, reasonable resolution). Returns the server-side
71
+ * picture id on success.
72
+ */
24
73
  readonly setProfilePicture: (imageBytes: Uint8Array, targetJid?: string) => Promise<string | null>;
74
+ /** Deletes the profile picture for the current account or `targetJid` (admin op for groups/communities). */
25
75
  readonly deleteProfilePicture: (targetJid?: string) => Promise<void>;
76
+ /** Fetches the legacy "About" status for a single JID. */
26
77
  readonly getStatus: (jid: string) => Promise<WaProfileStatusResult>;
78
+ /** Sets the current account's legacy "About" status. */
27
79
  readonly setStatus: (text: string) => Promise<void>;
80
+ /**
81
+ * Sets the account's pushName - the display name broadcast to other
82
+ * users in chats and group participant lists. WhatsApp Web applies the
83
+ * change via a `SettingPushName` app-state mutation (collection
84
+ * `critical_block`); the new value reaches peers as their next
85
+ * incoming-message envelope from this account carries the updated
86
+ * `notify` attr. Empty strings are accepted but reset the display name
87
+ * to the device fingerprint default.
88
+ */
89
+ readonly setPushName: (name: string) => Promise<void>;
90
+ /** Batched usync fetch of picture id + status for many JIDs. */
28
91
  readonly getProfiles: (jids: readonly string[]) => Promise<readonly WaProfileInfo[]>;
92
+ /** Batched fetch of the disappearing-mode setting per JID. */
29
93
  readonly getDisappearingMode: (jids: readonly string[]) => Promise<readonly WaDisappearingModeResult[]>;
94
+ /**
95
+ * Sets the account-wide default disappearing-mode duration applied to
96
+ * **new** 1:1 chats started by this account. `durationSeconds` is the
97
+ * ephemeral message lifetime (`0` disables, `86400` = 24h, `604800` =
98
+ * 7d, `7776000` = 90d). Existing chats keep their per-chat setting -
99
+ * change that with a system `disappearing_mode` message instead.
100
+ */
101
+ readonly setDisappearingMode: (durationSeconds: number) => Promise<void>;
102
+ /** Batched fetch of the modern text-status (emoji + text) per JID. */
103
+ readonly getTextStatuses: (jids: readonly string[]) => Promise<readonly WaTextStatusResult[]>;
104
+ /**
105
+ * Updates the current account's text status (the modern "About" emoji +
106
+ * text shown in chat). Passing `text: null` (or `''`) **clears** the
107
+ * status; passing `ephemeralDurationSec` without `text` and `emoji` is
108
+ * silently coerced back to `0` (server rejects expiring empty statuses).
109
+ */
110
+ readonly setTextStatus: (input: WaSetTextStatusInput) => Promise<void>;
111
+ /** Batched fetch of username per JID. */
112
+ readonly getUsernames: (jids: readonly string[]) => Promise<readonly WaUsernameResult[]>;
113
+ /** Fetches the current account's username record (value, state, recovery pin). */
114
+ readonly getOwnUsername: () => Promise<WaOwnUsernameResult>;
115
+ /**
116
+ * Reserves/sets a username on the current account. Returns `true` only
117
+ * when the server reports `'SUCCESS'`; on any other outcome (taken,
118
+ * invalid, rate-limited) it returns `false` without throwing - check the
119
+ * value and consult {@link checkUsernameAvailability} for suggestions.
120
+ */
121
+ readonly setUsername: (input: WaSetUsernameInput) => Promise<boolean>;
122
+ /** Deletes the current account's username. Returns `true` on success. */
123
+ readonly deleteUsername: () => Promise<boolean>;
124
+ /** Fetches the "About" text for a single JID via MEX. */
125
+ readonly getAboutStatus: (jid: string) => Promise<string | null>;
126
+ /** Checks whether a username is available and returns server suggestions. */
127
+ readonly checkUsernameAvailability: (username: string) => Promise<WaUsernameAvailabilityResult>;
128
+ /** Sets the username recovery PIN. Returns `true` on success. */
129
+ readonly setUsernameKey: (pin: string) => Promise<boolean>;
130
+ /** Resolves LIDs for a list of phone numbers (handles normalization). */
131
+ readonly getLidsByPhoneNumbers: (phoneNumbers: readonly string[]) => Promise<readonly SignalLidSyncResult[]>;
30
132
  }
31
133
  interface WaProfileCoordinatorOptions {
32
134
  readonly queryWithContext: (context: string, node: BinaryNode, timeoutMs?: number, contextData?: Readonly<Record<string, unknown>>, options?: {
33
135
  readonly useSystemId?: boolean;
34
136
  }) => Promise<BinaryNode>;
35
137
  readonly generateSid: () => Promise<string>;
138
+ readonly mexSocket: WaMexQuerySocket;
139
+ readonly queryLidsByPhoneJids: (phoneJids: readonly string[]) => Promise<readonly SignalLidSyncResult[]>;
140
+ /**
141
+ * App-state mutation coordinator. {@link WaProfileCoordinator.setPushName}
142
+ * routes through `mutations.set({ schema: 'SettingPushName', ... })` so
143
+ * the pushName change shares the same flush pipeline as other queued
144
+ * mutations.
145
+ */
146
+ readonly mutations: WaAppStateMutationCoordinator;
147
+ readonly logger: Logger;
36
148
  }
149
+ /** Builds a {@link WaProfileCoordinator} from its IQ/MEX/SID dependencies. */
37
150
  export declare function createProfileCoordinator(options: WaProfileCoordinatorOptions): WaProfileCoordinator;
38
151
  export {};