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
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaIncomingNodeCoordinator = void 0;
4
- const incoming_1 = require("../incoming");
4
+ const chatstate_1 = require("../events/chatstate");
5
+ const incoming_1 = require("../events/incoming");
6
+ const presence_1 = require("../events/presence");
5
7
  const constants_1 = require("../../protocol/constants");
6
8
  const helpers_1 = require("../../transport/node/helpers");
7
9
  const parse_1 = require("../../transport/stream/parse");
@@ -14,12 +16,14 @@ const INFO_BULLETIN_CHILD_TAGS = new Set([
14
16
  'thread_metadata',
15
17
  'client_expiration'
16
18
  ]);
19
+ const FILTER_PROTECTED_TAGS = new Set([constants_1.WA_NODE_TAGS.SUCCESS, 'failure']);
17
20
  class WaIncomingNodeCoordinator {
18
21
  constructor(options) {
19
22
  this.logger = options.logger;
20
23
  this.runtime = options.runtime;
21
24
  this.offlineResume = options.offlineResume;
22
25
  this.nodeHandlerRegistry = new Map();
26
+ this.stanzaFilters = [];
23
27
  this.registerDefaultIncomingHandlers();
24
28
  this.mediaConnWarmupPromise = null;
25
29
  }
@@ -37,6 +41,9 @@ class WaIncomingNodeCoordinator {
37
41
  await this.runtime.handleStreamControlResult(streamControlResult);
38
42
  return;
39
43
  }
44
+ if (await this.applyStanzaFilters(node)) {
45
+ return;
46
+ }
40
47
  if (await this.handleSuccessNode(node)) {
41
48
  return;
42
49
  }
@@ -49,6 +56,46 @@ class WaIncomingNodeCoordinator {
49
56
  }
50
57
  this.runtime.emitUnhandledIncomingNode((0, incoming_1.createUnhandledIncomingNodeEvent)(node));
51
58
  }
59
+ registerIncomingStanzaFilter(filter) {
60
+ this.stanzaFilters.push(filter);
61
+ return () => {
62
+ const index = this.stanzaFilters.indexOf(filter);
63
+ if (index !== -1) {
64
+ this.stanzaFilters.splice(index, 1);
65
+ }
66
+ };
67
+ }
68
+ async applyStanzaFilters(node) {
69
+ if (this.stanzaFilters.length === 0 || FILTER_PROTECTED_TAGS.has(node.tag)) {
70
+ return false;
71
+ }
72
+ const filterLogger = this.logger.child({ tag: node.tag, id: node.attrs.id });
73
+ for (let i = 0; i < this.stanzaFilters.length; i += 1) {
74
+ let verdict;
75
+ try {
76
+ verdict = await this.stanzaFilters[i](node);
77
+ }
78
+ catch (error) {
79
+ filterLogger.warn('incoming stanza filter threw', {
80
+ message: (0, primitives_1.toError)(error).message
81
+ });
82
+ continue;
83
+ }
84
+ if (!verdict) {
85
+ continue;
86
+ }
87
+ filterLogger.trace('incoming stanza dropped by filter', {
88
+ type: node.attrs.type,
89
+ from: node.attrs.from
90
+ });
91
+ const ack = (0, incoming_1.buildInboundAck)(node);
92
+ if (ack) {
93
+ await (0, incoming_1.sendSafeAck)(this.logger, this.runtime.sendNode, ack);
94
+ }
95
+ return true;
96
+ }
97
+ return false;
98
+ }
52
99
  registerIncomingHandler(registration) {
53
100
  const handlersByTag = this.nodeHandlerRegistry.get(registration.tag);
54
101
  const entry = {
@@ -123,7 +170,8 @@ class WaIncomingNodeCoordinator {
123
170
  return false;
124
171
  }
125
172
  isRetryReceiptType(type) {
126
- return type === 'retry' || type === 'enc_rekey_retry';
173
+ return (type === constants_1.WA_MESSAGE_TYPES.RECEIPT_TYPE_RETRY ||
174
+ type === constants_1.WA_MESSAGE_TYPES.RECEIPT_TYPE_ENC_REKEY_RETRY);
127
175
  }
128
176
  registerDefaultIncomingHandlers() {
129
177
  const runtime = this.runtime;
@@ -151,6 +199,26 @@ class WaIncomingNodeCoordinator {
151
199
  emitUnhandledStanza: runtime.emitUnhandledIncomingNode
152
200
  })
153
201
  });
202
+ this.registerIncomingHandler({
203
+ tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
204
+ subtype: constants_1.WA_NOTIFICATION_TYPES.BUSINESS,
205
+ handler: (0, incoming_1.createIncomingBusinessNotificationHandler)({
206
+ logger: this.logger,
207
+ sendNode: runtime.sendNode,
208
+ emitBusinessEvent: runtime.emitBusinessEvent,
209
+ emitUnhandledStanza: runtime.emitUnhandledIncomingNode
210
+ })
211
+ });
212
+ this.registerIncomingHandler({
213
+ tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
214
+ subtype: constants_1.WA_NOTIFICATION_TYPES.PICTURE,
215
+ handler: (0, incoming_1.createIncomingPictureNotificationHandler)({
216
+ logger: this.logger,
217
+ sendNode: runtime.sendNode,
218
+ emitPictureEvent: runtime.emitPictureEvent,
219
+ emitUnhandledStanza: runtime.emitUnhandledIncomingNode
220
+ })
221
+ });
154
222
  this.registerIncomingHandler({
155
223
  tag: constants_1.WA_NODE_TAGS.NOTIFICATION,
156
224
  subtype: constants_1.WA_NOTIFICATION_TYPES.REGISTRATION,
@@ -167,6 +235,7 @@ class WaIncomingNodeCoordinator {
167
235
  logger: this.logger,
168
236
  sendNode: runtime.sendNode,
169
237
  emitIncomingNotification: runtime.emitIncomingNotification,
238
+ emitMexNotification: runtime.emitMexNotification,
170
239
  emitUnhandledStanza: runtime.emitUnhandledIncomingNode,
171
240
  syncAppState: runtime.syncAppState
172
241
  })
@@ -186,28 +255,39 @@ class WaIncomingNodeCoordinator {
186
255
  })
187
256
  });
188
257
  this.registerIncomingHandler({
189
- tag: 'presence',
258
+ tag: constants_1.WA_NODE_TAGS.PRESENCE,
259
+ // eslint-disable-next-line @typescript-eslint/require-await
190
260
  handler: async (node) => {
191
- runtime.emitIncomingPresence((0, incoming_1.createIncomingBaseEvent)(node));
261
+ runtime.emitIncomingPresence({
262
+ ...(0, incoming_1.createIncomingBaseEvent)(node),
263
+ ...(0, presence_1.parsePresenceNode)(node)
264
+ });
192
265
  return true;
193
266
  }
194
267
  });
195
268
  this.registerIncomingHandler({
196
- tag: 'chatstate',
269
+ tag: constants_1.WA_NODE_TAGS.CHATSTATE,
270
+ // eslint-disable-next-line @typescript-eslint/require-await
197
271
  handler: async (node) => {
272
+ const parsed = (0, chatstate_1.parseChatstateNode)(node);
273
+ if (!parsed) {
274
+ return false;
275
+ }
198
276
  runtime.emitIncomingChatstate({
199
277
  ...(0, incoming_1.createIncomingBaseEvent)(node),
200
- participantJid: node.attrs.participant
278
+ ...parsed
201
279
  });
202
280
  return true;
203
281
  }
204
282
  });
205
283
  this.registerIncomingHandler({
206
- tag: 'call',
207
- handler: async (node) => {
208
- runtime.emitIncomingCall((0, incoming_1.createIncomingBaseEvent)(node));
209
- return true;
210
- }
284
+ tag: constants_1.WA_NODE_TAGS.CALL,
285
+ handler: (0, incoming_1.createIncomingCallHandler)({
286
+ logger: this.logger,
287
+ sendNode: runtime.sendNode,
288
+ emitIncomingCall: runtime.emitIncomingCall,
289
+ getCurrentCredentials: runtime.getCurrentCredentials
290
+ })
211
291
  });
212
292
  this.registerIncomingHandler({
213
293
  tag: 'failure',
@@ -221,8 +301,13 @@ class WaIncomingNodeCoordinator {
221
301
  });
222
302
  this.registerIncomingHandler({
223
303
  tag: constants_1.WA_NODE_TAGS.ERROR,
304
+ // eslint-disable-next-line @typescript-eslint/require-await
224
305
  handler: async (node) => {
225
- runtime.emitIncomingErrorStanza((0, incoming_1.createIncomingBaseEvent)(node));
306
+ runtime.emitIncomingErrorStanza({
307
+ ...(0, incoming_1.createIncomingBaseEvent)(node),
308
+ code: (0, primitives_1.parseOptionalInt)(node.attrs.code),
309
+ text: node.attrs.text
310
+ });
226
311
  return true;
227
312
  }
228
313
  });
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLowLevelCoordinator = createLowLevelCoordinator;
4
+ const constants_1 = require("../../protocol/constants");
5
+ const primitives_1 = require("../../util/primitives");
6
+ /** Builds a {@link WaLowLevelCoordinator} from its transport dependencies. */
7
+ function createLowLevelCoordinator(options) {
8
+ const { logger, nodeOrchestrator, incomingNode, receiptQueue, isConnected } = options;
9
+ const defaultIqTimeoutMs = options.defaultIqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS;
10
+ return {
11
+ sendNode: async (node) => {
12
+ try {
13
+ await nodeOrchestrator.sendNode(node);
14
+ }
15
+ catch (error) {
16
+ const normalized = (0, primitives_1.toError)(error);
17
+ if (receiptQueue.shouldQueue(node, normalized)) {
18
+ receiptQueue.enqueue(node);
19
+ logger.warn('queued dangling receipt after send failure', {
20
+ id: node.attrs.id,
21
+ to: node.attrs.to,
22
+ message: normalized.message,
23
+ queueSize: receiptQueue.size()
24
+ });
25
+ return;
26
+ }
27
+ throw normalized;
28
+ }
29
+ },
30
+ query: async (node, timeoutMs = defaultIqTimeoutMs, queryOptions = {}) => {
31
+ if (!isConnected()) {
32
+ throw new Error('client is not connected');
33
+ }
34
+ logger.debug('wa client query', { tag: node.tag, id: node.attrs.id, timeoutMs });
35
+ return nodeOrchestrator.query(node, timeoutMs, queryOptions);
36
+ },
37
+ registerIncomingHandler: (registration) => incomingNode.registerIncomingHandler(registration),
38
+ unregisterIncomingHandler: (registration) => incomingNode.unregisterIncomingHandler(registration),
39
+ registerIncomingStanzaFilter: (filter) => incomingNode.registerIncomingStanzaFilter(filter)
40
+ };
41
+ }
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaMessageCoordinator = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const promises_1 = require("node:stream/promises");
6
+ const receipt_1 = require("../events/receipt");
7
+ const addon_crypto_1 = require("../../message/crypto/addon-crypto");
8
+ const content_1 = require("../../message/encode/content");
9
+ const media_payload_1 = require("../../message/encode/media-payload");
10
+ const _proto_1 = require("../../proto.js");
11
+ const jid_1 = require("../../protocol/jid");
12
+ const client_1 = require("../../transport/node/mex/client");
13
+ const bytes_1 = require("../../util/bytes");
14
+ const coercion_1 = require("../../util/coercion");
15
+ const primitives_1 = require("../../util/primitives");
16
+ function parseReachoutTimelockMexResponse(data) {
17
+ const root = data?.xwa2_fetch_account_reachout_timelock;
18
+ return {
19
+ isActive: root?.is_active === true,
20
+ enforcementType: (0, coercion_1.tryAsString)(root?.enforcement_type),
21
+ enforcementEndsAt: (0, coercion_1.tryAsNumber)(root?.time_enforcement_ends)
22
+ };
23
+ }
24
+ function parseMessageCappingMexResponse(data) {
25
+ const root = data?.xwa2_message_capping_info;
26
+ return {
27
+ totalQuota: (0, coercion_1.tryAsNumber)(root?.total_quota),
28
+ usedQuota: (0, coercion_1.tryAsNumber)(root?.used_quota),
29
+ cycleStartAt: (0, coercion_1.tryAsNumber)(root?.cycle_start_timestamp),
30
+ cycleEndAt: (0, coercion_1.tryAsNumber)(root?.cycle_end_timestamp),
31
+ serverSentAt: (0, coercion_1.tryAsNumber)(root?.server_sent_timestamp),
32
+ oteStatus: (0, coercion_1.tryAsString)(root?.ote_status),
33
+ mvStatus: (0, coercion_1.tryAsString)(root?.mv_status),
34
+ cappingStatus: (0, coercion_1.tryAsString)(root?.capping_status)
35
+ };
36
+ }
37
+ /**
38
+ * Coordinates outbound message sending, receipts, addon decryption, media
39
+ * download, and the related MEX account queries. Accessed via
40
+ * {@link WaClient.message}.
41
+ */
42
+ class WaMessageCoordinator {
43
+ constructor(deps) {
44
+ this.messageDispatch = deps.messageDispatch;
45
+ this.mediaTransfer = deps.mediaTransfer;
46
+ this.logger = deps.logger;
47
+ this.messageStore = deps.messageStore;
48
+ this.messageSecretStore = deps.messageSecretStore;
49
+ this.trustedContactToken = deps.trustedContactToken;
50
+ this.emitAddon = deps.emitAddon;
51
+ this.mexSocket = deps.mexSocket;
52
+ this.peerDataOperation = deps.peerDataOperation;
53
+ }
54
+ /**
55
+ * Asks the server to backfill older messages for `chatJid` beyond what
56
+ * arrived in the initial history-sync. Implemented as a
57
+ * `PeerDataOperationRequestMessage` (type `HISTORY_SYNC_ON_DEMAND`)
58
+ * sent to this account's own user JID; the response arrives later as
59
+ * a `history_sync_chunk` event the same way the bootstrap chunks do -
60
+ * subscribe before calling if you need to react to the chunk.
61
+ *
62
+ * The method returns once the request is dispatched (with the protocol
63
+ * message id), **not** when the chunk arrives. Pair `oldestMsgId` +
64
+ * `oldestMsgTimestampMs` + `oldestMsgFromMe` from the topmost message
65
+ * currently visible to page backwards correctly.
66
+ */
67
+ async requestHistorySync(input) {
68
+ const chatJid = (0, jid_1.normalizeRecipientJid)(input.chatJid);
69
+ if (input.count !== undefined) {
70
+ if (!Number.isFinite(input.count) ||
71
+ !Number.isSafeInteger(input.count) ||
72
+ input.count <= 0) {
73
+ throw new Error(`invalid count: ${input.count}`);
74
+ }
75
+ }
76
+ if (input.oldestMsgTimestampMs !== undefined) {
77
+ if (!Number.isFinite(input.oldestMsgTimestampMs) ||
78
+ !Number.isSafeInteger(input.oldestMsgTimestampMs) ||
79
+ input.oldestMsgTimestampMs < 0) {
80
+ throw new Error(`invalid oldestMsgTimestampMs: ${input.oldestMsgTimestampMs}`);
81
+ }
82
+ }
83
+ const historySyncOnDemandRequest = {
84
+ chatJid,
85
+ supportInlineResponse: true,
86
+ ...(input.oldestMsgId === undefined ? {} : { oldestMsgId: input.oldestMsgId }),
87
+ ...(input.oldestMsgFromMe === undefined
88
+ ? {}
89
+ : { oldestMsgFromMe: input.oldestMsgFromMe }),
90
+ ...(input.oldestMsgTimestampMs === undefined
91
+ ? {}
92
+ : { oldestMsgTimestampMs: input.oldestMsgTimestampMs }),
93
+ ...(input.count === undefined ? {} : { onDemandMsgCount: input.count })
94
+ };
95
+ return this.peerDataOperation.send(_proto_1.proto.Message.PeerDataOperationRequestType.HISTORY_SYNC_ON_DEMAND, { historySyncOnDemandRequest });
96
+ }
97
+ /**
98
+ * Fetches the server-side "reachout" timelock that throttles cold outreach
99
+ * to non-contacts, returning the active window when enforcement is on.
100
+ */
101
+ async getReachoutTimelock() {
102
+ const data = await (0, client_1.runMexQuery)(this.mexSocket, 'FetchReachoutTimelock', {});
103
+ return parseReachoutTimelockMexResponse(data);
104
+ }
105
+ /**
106
+ * Fetches the per-cycle message capping info applied to new-chat threads
107
+ * (quota, used, cycle boundaries, status flags).
108
+ */
109
+ async getNewChatMessageCapping(type = 'INDIVIDUAL_NEW_CHAT_THREAD') {
110
+ const data = await (0, client_1.runMexQuery)(this.mexSocket, 'FetchNewChatMessageCappingInfo', {
111
+ input: { type }
112
+ });
113
+ return parseMessageCappingMexResponse(data);
114
+ }
115
+ /**
116
+ * Force-refreshes the Signal session(s) for `jid`. Set `reasonIdentity` to
117
+ * `true` when the trigger was an identity change – this also queues a
118
+ * trusted-contact-token reissue.
119
+ */
120
+ async syncSignalSession(jid, reasonIdentity = false) {
121
+ await this.messageDispatch.syncSignalSession(jid, reasonIdentity);
122
+ if (reasonIdentity) {
123
+ this.trustedContactToken.reissueOnIdentityChange(jid).catch((err) => this.logger.warn('tc token reissue on identity change failed', {
124
+ jid,
125
+ message: (0, primitives_1.toError)(err).message
126
+ }));
127
+ }
128
+ }
129
+ /**
130
+ * Sends a message (any {@link WaSendMessageContent} kind – text, media,
131
+ * poll, reaction, edit, revoke, etc.) to `to` and returns the publish
132
+ * result containing the stanza id and ack metadata.
133
+ *
134
+ * `to` accepts any JID accepted by {@link normalizeRecipientJid}: bare
135
+ * digits (`'5511999999999'`), a phone JID (`'5511…@s.whatsapp.net'`),
136
+ * a group JID (`'…@g.us'`), or a LID. See the {@link WaSendMessageContent}
137
+ * union for the full kind list.
138
+ *
139
+ * **Gotchas:**
140
+ * - The stanza id is auto-generated unless you set `options.id`. Reusing
141
+ * an id manually makes the send idempotent on the server but is also how
142
+ * internal retries (`maxAttempts`) work – don't reuse ids across
143
+ * logically distinct messages.
144
+ * - Sending to a `@newsletter` JID routes through a separate code path
145
+ * that ignores most of `options` (no quote/forward/edit semantics).
146
+ * - Addon-crypto kinds (poll-vote, reaction, message-edit, ...) require an
147
+ * authenticated session (`meJid` present) – throws otherwise.
148
+ * - Group sends fan out to every cached member device. If your
149
+ * `groupMetadata` cache is empty/disabled, this triggers a metadata IQ
150
+ * per send (rate-limited server-side, see {@link WaCreateStoreOptions}).
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * // 1. Plain text (string shorthand)
155
+ * await client.message.send('5511999999999', 'hello!')
156
+ *
157
+ * // 2. Reply with mention
158
+ * await client.message.send(groupJid, {
159
+ * type: 'text',
160
+ * text: '@5511999999999 ping',
161
+ * contextInfo: {
162
+ * mentionedJid: ['5511999999999@s.whatsapp.net'],
163
+ * quoted: { key: { remoteJid: groupJid, fromMe: false, id: incomingId } }
164
+ * }
165
+ * })
166
+ *
167
+ * // 3. Image from a file path (the encoder opens + streams it for you)
168
+ * await client.message.send(jid, {
169
+ * type: 'image',
170
+ * media: '/tmp/photo.jpg',
171
+ * mimetype: 'image/jpeg',
172
+ * caption: 'check this out'
173
+ * })
174
+ *
175
+ * // 4. React to an incoming message (empty emoji = unreact)
176
+ * await client.message.send(event.key.remoteJid, {
177
+ * type: 'reaction',
178
+ * emoji: '👍',
179
+ * target: event.key // or pass the whole event
180
+ * })
181
+ *
182
+ * // 5. Poll
183
+ * const result = await client.message.send(jid, {
184
+ * type: 'poll',
185
+ * name: 'lunch?',
186
+ * options: ['pizza', 'sushi', 'burger'],
187
+ * selectableCount: 1
188
+ * })
189
+ * console.log('sent as', result.id)
190
+ * ```
191
+ */
192
+ send(to, content, options = {}) {
193
+ return this.messageDispatch.sendMessage(to, content, options);
194
+ }
195
+ async sendReceipt(first, second, third) {
196
+ if (typeof first === 'string') {
197
+ const ids = second;
198
+ await this.dispatchReceipt(first, ids, third ?? {});
199
+ return;
200
+ }
201
+ const events = Array.isArray(first) ? first : [first];
202
+ const options = second ?? {};
203
+ const targets = events.map((event) => {
204
+ if (!event.key.remoteJid || !event.key.id) {
205
+ throw new Error('sendReceipt event is missing key.remoteJid or key.id');
206
+ }
207
+ const senderJid = event.key.participant ?? event.key.remoteJid;
208
+ return {
209
+ chatJid: event.key.remoteJid,
210
+ id: event.key.id,
211
+ senderJid: senderJid
212
+ ? (0, jid_1.applyDeviceToJid)(senderJid, event.key.senderDevice)
213
+ : undefined,
214
+ isGroupChat: event.key.isGroup,
215
+ isBroadcastChat: event.key.isBroadcast
216
+ };
217
+ });
218
+ for (const group of (0, receipt_1.aggregateReceiptTargets)(targets)) {
219
+ await this.dispatchReceipt(group.jid, group.ids, {
220
+ ...options,
221
+ participant: group.participant
222
+ });
223
+ }
224
+ }
225
+ /**
226
+ * Resolves the media payload inside `source` and returns a `Readable`
227
+ * stream of the decrypted bytes. Throws when the message has no
228
+ * downloadable media.
229
+ *
230
+ * **Caller owns the stream** - pipe it somewhere or call `.destroy()` to
231
+ * release the underlying socket; an unconsumed stream leaks the connection.
232
+ * MAC + SHA-256 verification runs **as bytes are consumed**, so if you
233
+ * abort mid-read you've consumed unverified bytes. Pass `options.signal`
234
+ * to cancel cleanly, or use {@link downloadBytes} / {@link downloadToFile}
235
+ * for one-shot verified downloads.
236
+ */
237
+ async download(source, options = {}) {
238
+ const message = 'rawNode' in source ? source.message : source;
239
+ const payload = (0, media_payload_1.resolveMediaPayload)(message);
240
+ if (!payload) {
241
+ throw new Error('message has no downloadable media');
242
+ }
243
+ const { plaintext, metadata } = await this.mediaTransfer.downloadAndDecryptStream({
244
+ directPath: payload.directPath,
245
+ mediaType: payload.mediaType,
246
+ mediaKey: payload.mediaKey,
247
+ fileSha256: payload.fileSha256,
248
+ fileEncSha256: payload.fileEncSha256,
249
+ timeoutMs: options.timeoutMs,
250
+ signal: options.signal,
251
+ maxBytes: options.maxBytes
252
+ });
253
+ metadata.catch(() => undefined);
254
+ return plaintext;
255
+ }
256
+ /**
257
+ * Convenience wrapper around {@link download} that streams the decrypted
258
+ * media directly to `filePath`. On failure the **partial file is not
259
+ * cleaned up** - delete it yourself in the error handler if you don't
260
+ * want to leak corrupted artifacts.
261
+ */
262
+ async downloadToFile(source, filePath, options = {}) {
263
+ const stream = await this.download(source, options);
264
+ await (0, promises_1.pipeline)(stream, (0, node_fs_1.createWriteStream)(filePath));
265
+ }
266
+ /**
267
+ * Convenience wrapper around {@link download} that buffers the decrypted
268
+ * media into a single `Uint8Array`. Use only for small media – caps via
269
+ * `options.maxBytes`.
270
+ */
271
+ async downloadBytes(source, options = {}) {
272
+ const stream = await this.download(source, options);
273
+ return (0, bytes_1.readAllBytes)(stream, { maxBytes: options.maxBytes });
274
+ }
275
+ /**
276
+ * Attempts to decrypt an addon payload (poll vote, reaction, edit, ...)
277
+ * attached to `event` and, on success, emits a typed
278
+ * `WaIncomingAddonEvent`. Silently returns when the parent message
279
+ * secret is missing or the payload is not an addon.
280
+ *
281
+ * Called automatically by the client unless `options.addons.autoDecrypt`
282
+ * is explicitly `false` - you rarely need to invoke it directly. The
283
+ * parent secret is looked up in the in-memory `messageSecret` cache
284
+ * first, then in the `messages` store. If both are `'none'`/missing,
285
+ * decryption fails and the event never fires; failures are logged at
286
+ * `warn` for `secretEncryptedMessage` addons (whose parent can be
287
+ * any message type, so the secret is only available when the
288
+ * `messages` mailbox is active) and at `debug` for the dedicated
289
+ * addon types (reactions, poll votes, event responses, comments)
290
+ * whose parent always carries a persisted secret or is itself
291
+ * short-lived.
292
+ */
293
+ async tryDecryptAddon(event) {
294
+ const message = event.message;
295
+ if (!message)
296
+ return;
297
+ const addon = (0, addon_crypto_1.identifyEncryptedAddon)(message);
298
+ if (!addon)
299
+ return;
300
+ const targetMessageId = addon.targetMessageKey.id;
301
+ if (!targetMessageId)
302
+ return;
303
+ const parentEntry = await (0, addon_crypto_1.resolveParentMessageSecret)(targetMessageId, this.messageSecretStore, this.messageStore);
304
+ if (!parentEntry) {
305
+ const logCtx = {
306
+ id: event.key.id,
307
+ targetId: targetMessageId,
308
+ kind: addon.kind
309
+ };
310
+ if ((0, content_1.unwrapMessage)(message).secretEncryptedMessage) {
311
+ this.logger.warn('addon parent message secret not found - enable the `messages` mailbox to support decryption of secretEncryptedMessage addons on arbitrary parents', logCtx);
312
+ }
313
+ else {
314
+ this.logger.debug('addon parent message secret not found', logCtx);
315
+ }
316
+ return;
317
+ }
318
+ const parentMsgOriginalSender = parentEntry.senderJid;
319
+ const modificationSender = event.key.participant ?? event.key.remoteJid;
320
+ const plaintext = await (0, addon_crypto_1.decryptAddonPayload)({
321
+ messageSecret: parentEntry.secret,
322
+ stanzaId: targetMessageId,
323
+ parentMsgOriginalSender,
324
+ modificationSender,
325
+ modificationType: addon.modificationType,
326
+ ciphertext: addon.encPayload,
327
+ iv: addon.encIv,
328
+ additionalData: (0, addon_crypto_1.shouldUseAddonAdditionalData)(addon.modificationType)
329
+ ? (0, addon_crypto_1.buildAddonAdditionalData)(targetMessageId, modificationSender)
330
+ : undefined
331
+ });
332
+ let decrypted = (0, addon_crypto_1.decodeAddonPlaintext)(addon.kind, plaintext);
333
+ if (decrypted.kind === 'poll_vote' && decrypted.pollVote.selectedOptions) {
334
+ const names = await (0, addon_crypto_1.resolvePollOptionNames)(decrypted.pollVote.selectedOptions, targetMessageId, this.messageStore);
335
+ if (names) {
336
+ decrypted = { ...decrypted, selectedOptionNames: names };
337
+ }
338
+ }
339
+ this.emitAddon({
340
+ rawNode: event.rawNode,
341
+ key: event.key,
342
+ stanzaType: event.stanzaType,
343
+ offline: event.offline,
344
+ kind: addon.kind,
345
+ targetMessageId,
346
+ decrypted,
347
+ raw: message
348
+ });
349
+ }
350
+ dispatchReceipt(jid, ids, options) {
351
+ const idArray = typeof ids === 'string' ? [ids] : ids;
352
+ if (idArray.length === 0) {
353
+ throw new Error('sendReceipt requires at least one message id');
354
+ }
355
+ const [id, ...rest] = idArray;
356
+ const input = {
357
+ ...options,
358
+ to: jid,
359
+ id,
360
+ listIds: rest.length > 0 ? rest : undefined
361
+ };
362
+ return this.messageDispatch.sendReceipt(input);
363
+ }
364
+ }
365
+ exports.WaMessageCoordinator = WaMessageCoordinator;