zapo-js 0.3.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -178
  3. package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  4. package/dist/appstate/index.js +7 -6
  5. package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
  6. package/dist/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  7. package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -53
  8. package/dist/appstate/utils.js +16 -0
  9. package/dist/appstate-spec.js +89 -0
  10. package/dist/auth/WaAuthClient.js +100 -5
  11. package/dist/auth/credentials-flow.js +20 -8
  12. package/dist/auth/pairing/WaPairingFlow.js +35 -26
  13. package/dist/auth/pairing/pairing-code-crypto.js +17 -19
  14. package/dist/client/WaClient.js +343 -474
  15. package/dist/client/WaClientFactory.js +281 -78
  16. package/dist/client/connection/WaConnectionManager.js +28 -11
  17. package/dist/client/coordinators/WaAbPropsCoordinator.js +1 -2
  18. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +663 -143
  19. package/dist/client/coordinators/WaBotCoordinator.js +345 -0
  20. package/dist/client/coordinators/WaBroadcastListCoordinator.js +20 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +81 -171
  22. package/dist/client/coordinators/WaEmailCoordinator.js +1 -0
  23. package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
  24. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +97 -12
  25. package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
  26. package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
  27. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +685 -207
  28. package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
  29. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +17 -4
  30. package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
  31. package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
  32. package/dist/client/coordinators/WaProfileCoordinator.js +220 -49
  33. package/dist/client/coordinators/WaRetryCoordinator.js +257 -126
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +8 -9
  36. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  37. package/dist/client/events/appstate-mutation.js +133 -0
  38. package/dist/client/events/business.js +375 -0
  39. package/dist/client/events/call.js +58 -0
  40. package/dist/client/events/chatstate.js +23 -0
  41. package/dist/client/events/devices.js +15 -16
  42. package/dist/client/{dirty.js → events/dirty.js} +33 -19
  43. package/dist/client/events/group.js +13 -24
  44. package/dist/client/events/identity.js +2 -1
  45. package/dist/client/events/incoming.js +502 -0
  46. package/dist/client/events/mex-notification.js +181 -0
  47. package/dist/client/events/picture.js +33 -0
  48. package/dist/client/events/presence.js +44 -0
  49. package/dist/client/events/receipt.js +26 -0
  50. package/dist/client/media.js +163 -6
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +93 -44
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +4 -18
  55. package/dist/client/messaging/link-preview.js +159 -0
  56. package/dist/client/messaging/messages.js +671 -0
  57. package/dist/client/newsletter/admin.js +165 -0
  58. package/dist/client/newsletter/content.js +253 -0
  59. package/dist/client/newsletter/discovery.js +115 -0
  60. package/dist/client/newsletter/messaging.js +197 -0
  61. package/dist/client/newsletter/mex.js +41 -0
  62. package/dist/client/newsletter/parse.js +217 -0
  63. package/dist/client/persistence/WriteBehindPersistence.js +31 -4
  64. package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
  65. package/dist/client/persistence/mailbox.js +104 -0
  66. package/dist/client/tokens/cs-token.js +11 -17
  67. package/dist/crypto/core/hkdf.js +12 -12
  68. package/dist/crypto/core/index.js +6 -8
  69. package/dist/crypto/core/keys.js +1 -8
  70. package/dist/crypto/core/nonce.js +12 -12
  71. package/dist/crypto/core/primitives.js +123 -93
  72. package/dist/crypto/core/random.js +6 -0
  73. package/dist/crypto/core/xeddsa.js +11 -9
  74. package/dist/crypto/curves/Ed25519.js +32 -21
  75. package/dist/crypto/curves/X25519.js +70 -34
  76. package/dist/crypto/curves/constants.js +2 -1
  77. package/dist/crypto/math/constants.js +1 -2
  78. package/dist/crypto/math/mod.js +0 -33
  79. package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  80. package/dist/esm/appstate/index.js +5 -5
  81. package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
  82. package/dist/esm/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  83. package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -52
  84. package/dist/esm/appstate/utils.js +16 -0
  85. package/dist/esm/appstate-spec.js +79 -0
  86. package/dist/esm/auth/WaAuthClient.js +100 -5
  87. package/dist/esm/auth/credentials-flow.js +18 -6
  88. package/dist/esm/auth/pairing/WaPairingFlow.js +34 -25
  89. package/dist/esm/auth/pairing/pairing-code-crypto.js +12 -14
  90. package/dist/esm/client/WaClient.js +345 -476
  91. package/dist/esm/client/WaClientFactory.js +282 -79
  92. package/dist/esm/client/connection/WaConnectionManager.js +28 -11
  93. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +2 -3
  94. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
  95. package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
  96. package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
  97. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +79 -169
  98. package/dist/esm/client/coordinators/WaEmailCoordinator.js +1 -0
  99. package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
  100. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +98 -13
  101. package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
  102. package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
  103. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +686 -208
  104. package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
  105. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +18 -5
  106. package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
  107. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
  108. package/dist/esm/client/coordinators/WaProfileCoordinator.js +223 -52
  109. package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -127
  110. package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
  111. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +8 -9
  112. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  113. package/dist/esm/client/events/appstate-mutation.js +130 -0
  114. package/dist/esm/client/events/business.js +370 -0
  115. package/dist/esm/client/events/call.js +55 -0
  116. package/dist/esm/client/events/chatstate.js +20 -0
  117. package/dist/esm/client/events/devices.js +15 -16
  118. package/dist/esm/client/{dirty.js → events/dirty.js} +33 -19
  119. package/dist/esm/client/events/group.js +14 -25
  120. package/dist/esm/client/events/identity.js +2 -1
  121. package/dist/esm/client/events/incoming.js +487 -0
  122. package/dist/esm/client/events/mex-notification.js +178 -0
  123. package/dist/esm/client/events/picture.js +30 -0
  124. package/dist/esm/client/events/presence.js +41 -0
  125. package/dist/esm/client/events/receipt.js +23 -0
  126. package/dist/esm/client/media.js +158 -8
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +92 -43
  129. package/dist/esm/client/messaging/ignore-key.js +126 -0
  130. package/dist/esm/client/messaging/key-protocol.js +3 -17
  131. package/dist/esm/client/messaging/link-preview.js +156 -0
  132. package/dist/esm/client/messaging/messages.js +667 -0
  133. package/dist/esm/client/newsletter/admin.js +162 -0
  134. package/dist/esm/client/newsletter/content.js +249 -0
  135. package/dist/esm/client/newsletter/discovery.js +112 -0
  136. package/dist/esm/client/newsletter/messaging.js +194 -0
  137. package/dist/esm/client/newsletter/mex.js +37 -0
  138. package/dist/esm/client/newsletter/parse.js +200 -0
  139. package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
  140. package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
  141. package/dist/esm/client/persistence/mailbox.js +101 -0
  142. package/dist/esm/client/tokens/cs-token.js +12 -18
  143. package/dist/esm/crypto/core/hkdf.js +14 -14
  144. package/dist/esm/crypto/core/index.js +2 -2
  145. package/dist/esm/crypto/core/keys.js +1 -7
  146. package/dist/esm/crypto/core/nonce.js +11 -11
  147. package/dist/esm/crypto/core/primitives.js +121 -88
  148. package/dist/esm/crypto/core/random.js +6 -0
  149. package/dist/esm/crypto/core/xeddsa.js +11 -9
  150. package/dist/esm/crypto/curves/Ed25519.js +35 -24
  151. package/dist/esm/crypto/curves/X25519.js +72 -36
  152. package/dist/esm/crypto/curves/constants.js +1 -0
  153. package/dist/esm/crypto/math/constants.js +1 -2
  154. package/dist/esm/crypto/math/mod.js +0 -32
  155. package/dist/esm/index.js +7 -2
  156. package/dist/esm/infra/log/ConsoleLogger.js +30 -6
  157. package/dist/esm/infra/log/PinoLogger.js +64 -0
  158. package/dist/esm/infra/log/types.js +4 -2
  159. package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
  160. package/dist/esm/media/constants.js +33 -2
  161. package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
  162. package/dist/esm/media/index.js +4 -3
  163. package/dist/esm/media/sticker/sticker-pack.js +133 -0
  164. package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  165. package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
  166. package/dist/esm/message/WaMessageClient.js +46 -15
  167. package/dist/esm/message/addons/link-preview/builder.js +36 -0
  168. package/dist/esm/message/addons/link-preview/detect.js +55 -0
  169. package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
  170. package/dist/esm/message/addons/link-preview/types.js +1 -0
  171. package/dist/esm/message/context-info.js +123 -0
  172. package/dist/esm/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  173. package/dist/esm/message/{icdc.js → crypto/icdc.js} +5 -7
  174. package/dist/esm/message/crypto/phash.js +133 -0
  175. package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  176. package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  177. package/dist/esm/message/{content.js → encode/content.js} +176 -7
  178. package/dist/esm/message/encode/media-payload.js +42 -0
  179. package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
  180. package/dist/esm/message/index.js +2 -2
  181. package/dist/esm/message/kinds/bot.js +111 -0
  182. package/dist/esm/message/kinds/newsletter.js +244 -0
  183. package/dist/esm/message/kinds/sticker-pack.js +29 -0
  184. package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
  185. package/dist/esm/message/{incoming.js → primitives/incoming.js} +215 -31
  186. package/dist/esm/message/primitives/peer-data-operation.js +93 -0
  187. package/dist/esm/mex.js +1 -0
  188. package/dist/esm/protocol/abprops.js +10 -0
  189. package/dist/esm/protocol/appstate.js +6 -30
  190. package/dist/esm/protocol/auth.js +3 -2
  191. package/dist/esm/protocol/bot.js +77 -0
  192. package/dist/esm/protocol/browser.js +8 -0
  193. package/dist/esm/protocol/business.js +19 -0
  194. package/dist/esm/protocol/call.js +48 -0
  195. package/dist/esm/protocol/constants.js +8 -2
  196. package/dist/esm/protocol/defaults.js +3 -0
  197. package/dist/esm/protocol/index.js +1 -1
  198. package/dist/esm/protocol/jid.js +102 -5
  199. package/dist/esm/protocol/media.js +25 -12
  200. package/dist/esm/protocol/message.js +4 -1
  201. package/dist/esm/protocol/newsletter.js +61 -0
  202. package/dist/esm/protocol/nodes.js +22 -2
  203. package/dist/esm/protocol/notification.js +18 -2
  204. package/dist/esm/protocol/presence.js +13 -0
  205. package/dist/esm/protocol/status.js +6 -0
  206. package/dist/esm/retry/codec.js +5 -0
  207. package/dist/esm/retry/parse.js +20 -38
  208. package/dist/esm/retry/reason.js +5 -0
  209. package/dist/esm/retry/replay.js +131 -37
  210. package/dist/esm/retry/tracker.js +4 -8
  211. package/dist/esm/signal/api/SignalDeviceSyncApi.js +69 -20
  212. package/dist/esm/signal/api/SignalDigestSyncApi.js +7 -2
  213. package/dist/esm/signal/api/SignalIdentitySyncApi.js +9 -0
  214. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
  215. package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
  216. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
  217. package/dist/esm/signal/api/codec.js +52 -1
  218. package/dist/esm/signal/api/prekeys.js +4 -0
  219. package/dist/esm/signal/{crypto → attestation}/WaAdvSignature.js +5 -6
  220. package/dist/esm/signal/constants.js +3 -0
  221. package/dist/esm/signal/encoding.js +6 -289
  222. package/dist/esm/signal/group/SenderKeyChain.js +18 -33
  223. package/dist/esm/signal/group/SenderKeyManager.js +25 -8
  224. package/dist/esm/signal/group/encoding.js +96 -0
  225. package/dist/esm/signal/index.js +4 -1
  226. package/dist/esm/signal/registration/encoding.js +34 -0
  227. package/dist/esm/signal/registration/keygen.js +10 -0
  228. package/dist/esm/signal/registration/utils.js +8 -1
  229. package/dist/esm/signal/session/SignalProtocol.js +113 -11
  230. package/dist/esm/signal/session/SignalRatchet.js +29 -58
  231. package/dist/esm/signal/session/SignalSession.js +7 -14
  232. package/dist/esm/signal/session/encoding.js +173 -0
  233. package/dist/esm/signal/session/resolver.js +139 -30
  234. package/dist/esm/store/cache/identity.cache.js +75 -0
  235. package/dist/esm/store/cache/privacy-token.cache.js +57 -0
  236. package/dist/esm/store/cache/sender-key.cache.js +101 -0
  237. package/dist/esm/store/cache/session.cache.js +92 -0
  238. package/dist/esm/store/contracts/group-metadata.store.js +1 -0
  239. package/dist/esm/store/createStore.js +91 -37
  240. package/dist/esm/store/index.js +15 -14
  241. package/dist/esm/store/locks/contact.lock.js +1 -0
  242. package/dist/esm/store/locks/device-list.lock.js +1 -0
  243. package/dist/esm/store/locks/group-metadata.lock.js +20 -0
  244. package/dist/esm/store/locks/pre-key.lock.js +4 -1
  245. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  246. package/dist/esm/store/memory/auth.store.js +24 -0
  247. package/dist/esm/store/memory/contact.store.js +79 -0
  248. package/dist/esm/store/memory/device-list.store.js +103 -0
  249. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  250. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  251. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  252. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  254. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  255. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  256. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  258. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  259. package/dist/esm/store/noop.store.js +6 -4
  260. package/dist/esm/transport/WaComms.js +14 -5
  261. package/dist/esm/transport/WaWebSocket.js +32 -8
  262. package/dist/esm/transport/binary/constants.js +10 -4
  263. package/dist/esm/transport/binary/decoder.js +21 -15
  264. package/dist/esm/transport/binary/encoder.js +96 -21
  265. package/dist/esm/transport/binary/tokens.js +12 -12
  266. package/dist/esm/transport/index.js +1 -0
  267. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  268. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  269. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  270. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  271. package/dist/esm/transport/node/builders/abprops.js +2 -2
  272. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  273. package/dist/esm/transport/node/builders/bot.js +38 -0
  274. package/dist/esm/transport/node/builders/business.js +30 -30
  275. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  276. package/dist/esm/transport/node/builders/community.js +53 -0
  277. package/dist/esm/transport/node/builders/device.js +2 -2
  278. package/dist/esm/transport/node/builders/email.js +6 -5
  279. package/dist/esm/transport/node/builders/global.js +1 -1
  280. package/dist/esm/transport/node/builders/group.js +114 -4
  281. package/dist/esm/transport/node/builders/media.js +2 -2
  282. package/dist/esm/transport/node/builders/message.js +83 -49
  283. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  284. package/dist/esm/transport/node/builders/passive.js +7 -0
  285. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  286. package/dist/esm/transport/node/builders/presence.js +27 -1
  287. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  288. package/dist/esm/transport/node/builders/privacy.js +6 -6
  289. package/dist/esm/transport/node/builders/profile.js +28 -8
  290. package/dist/esm/transport/node/builders/tos.js +58 -0
  291. package/dist/esm/transport/node/builders/usync.js +51 -2
  292. package/dist/esm/transport/node/helpers.js +3 -1
  293. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  294. package/dist/esm/transport/node/mex/client.js +22 -0
  295. package/dist/esm/transport/node/query.js +17 -0
  296. package/dist/esm/transport/node/usync.js +12 -0
  297. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  298. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  300. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  301. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  302. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  303. package/dist/esm/transport/noise/constants.js +0 -1
  304. package/dist/esm/transport/proxy.js +5 -0
  305. package/dist/esm/transport/stream/parse.js +3 -7
  306. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  307. package/dist/esm/util/async.js +4 -0
  308. package/dist/esm/util/bytes.js +37 -2
  309. package/dist/esm/util/clock.js +15 -0
  310. package/dist/esm/util/coercion.js +45 -3
  311. package/dist/esm/util/collections.js +11 -0
  312. package/dist/esm/util/index.js +2 -2
  313. package/dist/esm/util/primitives.js +19 -0
  314. package/dist/esm/util/runtime.js +5 -0
  315. package/dist/esm/version-spec.js +1 -0
  316. package/dist/index.js +35 -5
  317. package/dist/infra/log/ConsoleLogger.js +30 -6
  318. package/dist/infra/log/PinoLogger.js +64 -0
  319. package/dist/infra/log/types.js +4 -2
  320. package/dist/infra/perf/BackgroundQueue.js +55 -13
  321. package/dist/media/constants.js +34 -3
  322. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  323. package/dist/media/index.js +9 -4
  324. package/dist/media/sticker/sticker-pack.js +136 -0
  325. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  326. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  327. package/dist/message/WaMessageClient.js +46 -15
  328. package/dist/message/addons/link-preview/builder.js +39 -0
  329. package/dist/message/addons/link-preview/detect.js +58 -0
  330. package/dist/message/addons/link-preview/fetcher.js +394 -0
  331. package/dist/message/addons/link-preview/types.js +2 -0
  332. package/dist/message/context-info.js +129 -0
  333. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  334. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  335. package/dist/message/crypto/phash.js +136 -0
  336. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  337. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  338. package/dist/message/{content.js → encode/content.js} +192 -7
  339. package/dist/message/encode/media-payload.js +45 -0
  340. package/dist/message/{padding.js → encode/padding.js} +9 -3
  341. package/dist/message/index.js +2 -2
  342. package/dist/message/kinds/bot.js +120 -0
  343. package/dist/message/kinds/newsletter.js +248 -0
  344. package/dist/message/kinds/sticker-pack.js +34 -0
  345. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  346. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  347. package/dist/message/primitives/peer-data-operation.js +96 -0
  348. package/dist/mex.js +6 -0
  349. package/dist/proto.js +1 -1
  350. package/dist/protocol/abprops.js +10 -0
  351. package/dist/protocol/appstate.js +7 -31
  352. package/dist/protocol/auth.js +3 -2
  353. package/dist/protocol/bot.js +81 -0
  354. package/dist/protocol/browser.js +8 -0
  355. package/dist/protocol/business.js +22 -0
  356. package/dist/protocol/call.js +51 -0
  357. package/dist/protocol/constants.js +39 -3
  358. package/dist/protocol/defaults.js +3 -0
  359. package/dist/protocol/index.js +12 -3
  360. package/dist/protocol/jid.js +107 -5
  361. package/dist/protocol/media.js +25 -12
  362. package/dist/protocol/message.js +4 -1
  363. package/dist/protocol/newsletter.js +64 -0
  364. package/dist/protocol/nodes.js +22 -2
  365. package/dist/protocol/notification.js +19 -3
  366. package/dist/protocol/presence.js +16 -0
  367. package/dist/protocol/status.js +9 -0
  368. package/dist/retry/codec.js +5 -0
  369. package/dist/retry/parse.js +16 -34
  370. package/dist/retry/reason.js +5 -0
  371. package/dist/retry/replay.js +130 -36
  372. package/dist/retry/tracker.js +3 -7
  373. package/dist/signal/api/SignalDeviceSyncApi.js +67 -18
  374. package/dist/signal/api/SignalDigestSyncApi.js +7 -2
  375. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  376. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  377. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  378. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  379. package/dist/signal/api/codec.js +52 -0
  380. package/dist/signal/api/prekeys.js +4 -0
  381. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +6 -8
  382. package/dist/signal/constants.js +4 -1
  383. package/dist/signal/encoding.js +5 -303
  384. package/dist/signal/group/SenderKeyChain.js +18 -33
  385. package/dist/signal/group/SenderKeyCodec.js +2 -2
  386. package/dist/signal/group/SenderKeyManager.js +26 -9
  387. package/dist/signal/group/encoding.js +101 -0
  388. package/dist/signal/index.js +13 -10
  389. package/dist/signal/registration/encoding.js +39 -0
  390. package/dist/signal/registration/keygen.js +11 -1
  391. package/dist/signal/registration/utils.js +8 -1
  392. package/dist/signal/session/SignalProtocol.js +113 -11
  393. package/dist/signal/session/SignalRatchet.js +26 -56
  394. package/dist/signal/session/SignalSerializer.js +2 -2
  395. package/dist/signal/session/SignalSession.js +7 -15
  396. package/dist/signal/session/encoding.js +183 -0
  397. package/dist/signal/session/resolver.js +139 -30
  398. package/dist/store/cache/identity.cache.js +78 -0
  399. package/dist/store/cache/privacy-token.cache.js +60 -0
  400. package/dist/store/cache/sender-key.cache.js +104 -0
  401. package/dist/store/cache/session.cache.js +95 -0
  402. package/dist/store/contracts/group-metadata.store.js +2 -0
  403. package/dist/store/createStore.js +90 -36
  404. package/dist/store/index.js +18 -16
  405. package/dist/store/locks/contact.lock.js +1 -0
  406. package/dist/store/locks/device-list.lock.js +1 -0
  407. package/dist/store/locks/group-metadata.lock.js +23 -0
  408. package/dist/store/locks/pre-key.lock.js +4 -1
  409. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  410. package/dist/store/memory/auth.store.js +28 -0
  411. package/dist/store/memory/contact.store.js +83 -0
  412. package/dist/store/memory/device-list.store.js +107 -0
  413. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  414. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  415. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  416. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  417. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  418. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  419. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  420. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  421. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  422. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  423. package/dist/store/noop.store.js +7 -5
  424. package/dist/transport/WaComms.js +14 -5
  425. package/dist/transport/WaWebSocket.js +32 -8
  426. package/dist/transport/binary/constants.js +11 -5
  427. package/dist/transport/binary/decoder.js +24 -18
  428. package/dist/transport/binary/encoder.js +109 -34
  429. package/dist/transport/binary/tokens.js +12 -12
  430. package/dist/transport/index.js +3 -1
  431. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  432. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  433. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  434. package/dist/transport/node/WaNodeTransport.js +13 -0
  435. package/dist/transport/node/builders/abprops.js +1 -1
  436. package/dist/transport/node/builders/account-sync.js +7 -16
  437. package/dist/transport/node/builders/bot.js +43 -0
  438. package/dist/transport/node/builders/business.js +31 -31
  439. package/dist/transport/node/builders/chatstate.js +31 -0
  440. package/dist/transport/node/builders/community.js +59 -0
  441. package/dist/transport/node/builders/device.js +1 -1
  442. package/dist/transport/node/builders/email.js +6 -5
  443. package/dist/transport/node/builders/global.js +2 -2
  444. package/dist/transport/node/builders/group.js +121 -3
  445. package/dist/transport/node/builders/media.js +1 -1
  446. package/dist/transport/node/builders/message.js +84 -49
  447. package/dist/transport/node/builders/newsletter.js +183 -0
  448. package/dist/transport/node/builders/passive.js +10 -0
  449. package/dist/transport/node/builders/prekeys.js +3 -3
  450. package/dist/transport/node/builders/presence.js +28 -1
  451. package/dist/transport/node/builders/privacy-token.js +1 -1
  452. package/dist/transport/node/builders/privacy.js +5 -5
  453. package/dist/transport/node/builders/profile.js +30 -7
  454. package/dist/transport/node/builders/tos.js +63 -0
  455. package/dist/transport/node/builders/usync.js +52 -1
  456. package/dist/transport/node/helpers.js +3 -2
  457. package/dist/transport/node/mex/argo-decoder.js +2 -2
  458. package/dist/transport/node/mex/client.js +23 -0
  459. package/dist/transport/node/query.js +17 -0
  460. package/dist/transport/node/usync.js +13 -0
  461. package/dist/transport/noise/WaClientPayload.js +9 -9
  462. package/dist/transport/noise/WaMobileClientPayload.js +6 -1
  463. package/dist/transport/noise/WaNoiseCert.js +7 -2
  464. package/dist/transport/noise/WaNoiseHandshake.js +26 -24
  465. package/dist/transport/noise/WaNoiseSession.js +41 -61
  466. package/dist/transport/noise/WaNoiseSocket.js +19 -13
  467. package/dist/transport/noise/constants.js +1 -2
  468. package/dist/transport/proxy.js +5 -0
  469. package/dist/transport/stream/parse.js +3 -7
  470. package/dist/transport/wa-web-version-fetcher.js +94 -0
  471. package/dist/types/appstate/constants.d.ts +1 -1
  472. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  473. package/dist/types/appstate/index.d.ts +5 -5
  474. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  475. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  476. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  477. package/dist/types/appstate/types.d.ts +1 -1
  478. package/dist/types/appstate/utils.d.ts +18 -2
  479. package/dist/types/appstate-spec.d.ts +24 -0
  480. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  481. package/dist/types/auth/credentials-flow.d.ts +4 -3
  482. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  483. package/dist/types/auth/types.d.ts +49 -2
  484. package/dist/types/client/WaClient.d.ts +178 -71
  485. package/dist/types/client/WaClientFactory.d.ts +30 -5
  486. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  487. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  488. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  489. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  490. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  491. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  492. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  493. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  494. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  495. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  496. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  497. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +55 -32
  498. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  499. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  500. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  501. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  502. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  503. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  504. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  505. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  506. package/dist/types/client/events/abprops.d.ts +2 -1
  507. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  508. package/dist/types/client/events/business.d.ts +10 -0
  509. package/dist/types/client/events/call.d.ts +31 -0
  510. package/dist/types/client/events/chatstate.d.ts +9 -0
  511. package/dist/types/client/events/devices.d.ts +5 -4
  512. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  513. package/dist/types/client/events/group.d.ts +2 -1
  514. package/dist/types/client/events/identity.d.ts +2 -1
  515. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  516. package/dist/types/client/events/mex-notification.d.ts +6 -0
  517. package/dist/types/client/events/picture.d.ts +8 -0
  518. package/dist/types/client/events/presence.d.ts +28 -0
  519. package/dist/types/client/events/receipt.d.ts +14 -0
  520. package/dist/types/client/events/registration.d.ts +4 -3
  521. package/dist/types/client/index.d.ts +1 -1
  522. package/dist/types/client/media.d.ts +35 -1
  523. package/dist/types/client/messaging/fanout.d.ts +2 -2
  524. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  525. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  526. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  527. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  528. package/dist/types/client/messaging/messages.d.ts +28 -0
  529. package/dist/types/client/newsletter/admin.d.ts +71 -0
  530. package/dist/types/client/newsletter/content.d.ts +42 -0
  531. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  532. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  533. package/dist/types/client/newsletter/mex.d.ts +14 -0
  534. package/dist/types/client/newsletter/parse.d.ts +19 -0
  535. package/dist/types/client/newsletter/types.d.ts +190 -0
  536. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  537. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  538. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  539. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  540. package/dist/types/client/types.d.ts +844 -72
  541. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  542. package/dist/types/crypto/core/index.d.ts +2 -2
  543. package/dist/types/crypto/core/keys.d.ts +0 -4
  544. package/dist/types/crypto/core/nonce.d.ts +4 -5
  545. package/dist/types/crypto/core/primitives.d.ts +31 -20
  546. package/dist/types/crypto/core/random.d.ts +6 -0
  547. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  548. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  549. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  550. package/dist/types/crypto/curves/constants.d.ts +4 -3
  551. package/dist/types/crypto/curves/types.d.ts +0 -5
  552. package/dist/types/crypto/math/constants.d.ts +0 -1
  553. package/dist/types/crypto/math/mod.d.ts +0 -1
  554. package/dist/types/index.d.ts +34 -8
  555. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  556. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  557. package/dist/types/infra/log/types.d.ts +6 -0
  558. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  559. package/dist/types/media/constants.d.ts +7 -2
  560. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  561. package/dist/types/media/index.d.ts +7 -5
  562. package/dist/types/media/processor.d.ts +27 -5
  563. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  564. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  565. package/dist/types/media/transfer/conn.d.ts +7 -0
  566. package/dist/types/media/types.d.ts +1 -2
  567. package/dist/types/message/WaMessageClient.d.ts +14 -0
  568. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  569. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  570. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  571. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  572. package/dist/types/message/context-info.d.ts +66 -0
  573. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  574. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  575. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  576. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  577. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  578. package/dist/types/message/encode/content.d.ts +43 -0
  579. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  580. package/dist/types/message/encode/media-payload.d.ts +12 -0
  581. package/dist/types/message/index.d.ts +2 -2
  582. package/dist/types/message/kinds/bot.d.ts +31 -0
  583. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  584. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  585. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  586. package/dist/types/message/primitives/incoming.d.ts +21 -0
  587. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  588. package/dist/types/message/types.d.ts +209 -11
  589. package/dist/types/mex.d.ts +2 -0
  590. package/dist/types/proto.d.ts +2 -2
  591. package/dist/types/protocol/abprops.d.ts +9 -0
  592. package/dist/types/protocol/appstate.d.ts +4 -49
  593. package/dist/types/protocol/auth.d.ts +2 -2
  594. package/dist/types/protocol/bot.d.ts +45 -0
  595. package/dist/types/protocol/browser.d.ts +8 -0
  596. package/dist/types/protocol/business.d.ts +21 -0
  597. package/dist/types/protocol/call.d.ts +44 -0
  598. package/dist/types/protocol/constants.d.ts +16 -3
  599. package/dist/types/protocol/defaults.d.ts +3 -0
  600. package/dist/types/protocol/group.d.ts +1 -1
  601. package/dist/types/protocol/index.d.ts +2 -1
  602. package/dist/types/protocol/jid.d.ts +78 -0
  603. package/dist/types/protocol/media.d.ts +21 -13
  604. package/dist/types/protocol/message.d.ts +4 -0
  605. package/dist/types/protocol/newsletter.d.ts +65 -0
  606. package/dist/types/protocol/nodes.d.ts +20 -0
  607. package/dist/types/protocol/notification.d.ts +16 -0
  608. package/dist/types/protocol/presence.d.ts +16 -0
  609. package/dist/types/protocol/status.d.ts +7 -0
  610. package/dist/types/retry/codec.d.ts +5 -0
  611. package/dist/types/retry/index.d.ts +1 -1
  612. package/dist/types/retry/parse.d.ts +9 -0
  613. package/dist/types/retry/reason.d.ts +5 -0
  614. package/dist/types/retry/replay.d.ts +19 -5
  615. package/dist/types/retry/tracker.d.ts +10 -3
  616. package/dist/types/retry/types.d.ts +3 -8
  617. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  618. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  619. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  620. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  621. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  622. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  623. package/dist/types/signal/api/codec.d.ts +20 -0
  624. package/dist/types/signal/api/constants.d.ts +1 -1
  625. package/dist/types/signal/api/prekeys.d.ts +4 -0
  626. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  627. package/dist/types/signal/attestation/constants.d.ts +4 -0
  628. package/dist/types/signal/constants.d.ts +7 -4
  629. package/dist/types/signal/encoding.d.ts +6 -68
  630. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  631. package/dist/types/signal/group/SenderKeyManager.d.ts +18 -1
  632. package/dist/types/signal/group/encoding.d.ts +25 -0
  633. package/dist/types/signal/index.d.ts +4 -1
  634. package/dist/types/signal/registration/encoding.d.ts +30 -0
  635. package/dist/types/signal/registration/keygen.d.ts +10 -0
  636. package/dist/types/signal/registration/utils.d.ts +5 -0
  637. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  638. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  639. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  640. package/dist/types/signal/session/encoding.d.ts +28 -0
  641. package/dist/types/signal/session/resolver.d.ts +14 -0
  642. package/dist/types/signal/types.d.ts +1 -1
  643. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  644. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  645. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  646. package/dist/types/store/cache/session.cache.d.ts +23 -0
  647. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  648. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  649. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  650. package/dist/types/store/contracts/message.store.d.ts +0 -2
  651. package/dist/types/store/createStore.d.ts +54 -2
  652. package/dist/types/store/index.d.ts +17 -16
  653. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  654. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  655. package/dist/types/store/memory/auth.store.d.ts +18 -0
  656. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  657. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  658. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  659. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  661. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  662. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  663. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  664. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  665. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  666. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  667. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  668. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  669. package/dist/types/store/noop.store.d.ts +2 -2
  670. package/dist/types/store/types.d.ts +250 -6
  671. package/dist/types/transport/WaComms.d.ts +5 -0
  672. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  673. package/dist/types/transport/binary/constants.d.ts +8 -2
  674. package/dist/types/transport/binary/decoder.d.ts +5 -0
  675. package/dist/types/transport/binary/encoder.d.ts +5 -0
  676. package/dist/types/transport/binary/tokens.d.ts +6 -6
  677. package/dist/types/transport/index.d.ts +3 -1
  678. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  679. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  680. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  681. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  682. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  683. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  684. package/dist/types/transport/node/builders/business.d.ts +21 -4
  685. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  686. package/dist/types/transport/node/builders/community.d.ts +17 -0
  687. package/dist/types/transport/node/builders/group.d.ts +44 -2
  688. package/dist/types/transport/node/builders/message.d.ts +11 -6
  689. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  690. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  691. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  692. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  693. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  694. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  695. package/dist/types/transport/node/helpers.d.ts +1 -2
  696. package/dist/types/transport/node/mex/client.d.ts +12 -1
  697. package/dist/types/transport/node/query.d.ts +19 -1
  698. package/dist/types/transport/node/usync.d.ts +3 -0
  699. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +6 -1
  700. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  701. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  702. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  703. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  704. package/dist/types/transport/noise/constants.d.ts +4 -5
  705. package/dist/types/transport/noise/types.d.ts +1 -1
  706. package/dist/types/transport/proxy.d.ts +5 -0
  707. package/dist/types/transport/types.d.ts +14 -7
  708. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  709. package/dist/types/util/async.d.ts +4 -0
  710. package/dist/types/util/bytes.d.ts +36 -1
  711. package/dist/types/util/clock.d.ts +6 -0
  712. package/dist/types/util/coercion.d.ts +25 -0
  713. package/dist/types/util/collections.d.ts +8 -0
  714. package/dist/types/util/index.d.ts +2 -2
  715. package/dist/types/util/primitives.d.ts +11 -0
  716. package/dist/types/util/runtime.d.ts +5 -0
  717. package/dist/types/version-spec.d.ts +1 -0
  718. package/dist/util/async.js +4 -0
  719. package/dist/util/bytes.js +37 -2
  720. package/dist/util/clock.js +18 -0
  721. package/dist/util/coercion.js +48 -3
  722. package/dist/util/collections.js +12 -0
  723. package/dist/util/index.js +7 -1
  724. package/dist/util/primitives.js +20 -0
  725. package/dist/util/runtime.js +5 -0
  726. package/dist/version-spec.js +5 -0
  727. package/package.json +32 -8
  728. package/spec/appstate/index.d.ts +188 -0
  729. package/spec/appstate/index.js +850 -0
  730. package/spec/mex/index.d.ts +4172 -0
  731. package/spec/mex/index.js +261 -0
  732. package/spec/proto/index.d.ts +16305 -0
  733. package/spec/proto/index.js +1 -0
  734. package/spec/version/index.d.ts +4 -0
  735. package/spec/version/index.js +9 -0
  736. package/spec/version/version.json +3 -0
  737. package/dist/client/events/chat.js +0 -227
  738. package/dist/client/incoming.js +0 -306
  739. package/dist/client/mailbox.js +0 -66
  740. package/dist/client/messages.js +0 -305
  741. package/dist/esm/client/events/chat.js +0 -224
  742. package/dist/esm/client/incoming.js +0 -296
  743. package/dist/esm/client/mailbox.js +0 -63
  744. package/dist/esm/client/messages.js +0 -301
  745. package/dist/esm/media/WaMediaCrypto.js +0 -499
  746. package/dist/esm/message/phash.js +0 -47
  747. package/dist/esm/store/locks/participants.lock.js +0 -20
  748. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  749. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  750. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  751. package/dist/media/WaMediaCrypto.js +0 -503
  752. package/dist/message/phash.js +0 -50
  753. package/dist/store/locks/participants.lock.js +0 -23
  754. package/dist/store/providers/memory/contact.store.js +0 -32
  755. package/dist/store/providers/memory/device-list.store.js +0 -71
  756. package/dist/transport/node/mex/persist-ids.js +0 -13
  757. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  758. package/dist/types/client/events/chat.d.ts +0 -3
  759. package/dist/types/client/history-sync.d.ts +0 -20
  760. package/dist/types/client/messages.d.ts +0 -18
  761. package/dist/types/client/messaging/participants.d.ts +0 -13
  762. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  763. package/dist/types/media/conn.d.ts +0 -3
  764. package/dist/types/message/content.d.ts +0 -14
  765. package/dist/types/message/incoming.d.ts +0 -18
  766. package/dist/types/signal/crypto/constants.d.ts +0 -4
  767. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  768. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  769. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  770. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  771. package/proto/index.d.ts +0 -10903
  772. package/proto/index.js +0 -1
  773. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  774. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  775. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  776. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  777. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  778. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  779. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  780. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  781. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -1,34 +1,46 @@
1
- import { WaAppStateSyncClient } from '../appstate/WaAppStateSyncClient.js';
1
+ import { WaAppStateSyncClient } from '../appstate/sync/WaAppStateSyncClient.js';
2
2
  import { WaAuthClient } from '../auth/WaAuthClient.js';
3
3
  import { WaConnectionManager } from './connection/WaConnectionManager.js';
4
4
  import { WaReceiptQueue } from './connection/WaReceiptQueue.js';
5
5
  import { WaAbPropsCoordinator } from './coordinators/WaAbPropsCoordinator.js';
6
6
  import { WaAppStateMutationCoordinator } from './coordinators/WaAppStateMutationCoordinator.js';
7
+ import { createBotCoordinator } from './coordinators/WaBotCoordinator.js';
8
+ import { createBroadcastListCoordinator } from './coordinators/WaBroadcastListCoordinator.js';
7
9
  import { createBusinessCoordinator } from './coordinators/WaBusinessCoordinator.js';
8
10
  import { createEmailCoordinator } from './coordinators/WaEmailCoordinator.js';
9
11
  import { createGroupCoordinator } from './coordinators/WaGroupCoordinator.js';
10
12
  import { WaIncomingNodeCoordinator } from './coordinators/WaIncomingNodeCoordinator.js';
13
+ import { createLowLevelCoordinator } from './coordinators/WaLowLevelCoordinator.js';
14
+ import { WaMessageCoordinator } from './coordinators/WaMessageCoordinator.js';
11
15
  import { WaMessageDispatchCoordinator } from './coordinators/WaMessageDispatchCoordinator.js';
16
+ import { createNewsletterCoordinator } from './coordinators/WaNewsletterCoordinator.js';
12
17
  import { WaOfflineResumeCoordinator } from './coordinators/WaOfflineResumeCoordinator.js';
13
18
  import { WaPassiveTasksCoordinator } from './coordinators/WaPassiveTasksCoordinator.js';
19
+ import { createPresenceCoordinator } from './coordinators/WaPresenceCoordinator.js';
14
20
  import { createPrivacyCoordinator } from './coordinators/WaPrivacyCoordinator.js';
15
21
  import { createProfileCoordinator } from './coordinators/WaProfileCoordinator.js';
16
22
  import { WaRetryCoordinator } from './coordinators/WaRetryCoordinator.js';
23
+ import { createStatusCoordinator } from './coordinators/WaStatusCoordinator.js';
17
24
  import { createStreamControlHandler } from './coordinators/WaStreamControlCoordinator.js';
18
25
  import { WaTrustedContactTokenCoordinator } from './coordinators/WaTrustedContactTokenCoordinator.js';
19
- import { handleDirtyBits, parseDirtyBits } from './dirty.js';
20
26
  import { DEVICE_NOTIFICATION_ACTIONS, parseDeviceNotification } from './events/devices.js';
27
+ import { handleDirtyBits, parseDirtyBits } from './events/dirty.js';
21
28
  import { parseIdentityChangeNotification } from './events/identity.js';
22
29
  import { parsePrivacyTokenNotification } from './events/privacy-token.js';
23
- import { buildMediaMessageContent, getMediaConn as getClientMediaConn } from './messages.js';
24
30
  import { createDeviceFanoutResolver } from './messaging/fanout.js';
31
+ import { createGroupMetadataCache } from './messaging/group-metadata.js';
25
32
  import { createAppStateSyncKeyProtocol } from './messaging/key-protocol.js';
26
- import { createGroupParticipantsCache } from './messaging/participants.js';
27
- import { WaMediaTransferClient } from '../media/WaMediaTransferClient.js';
28
- import { handleIncomingMessageAck } from '../message/incoming.js';
33
+ import { resolveLinkPreview } from './messaging/link-preview.js';
34
+ import { buildMediaMessageContent, getMediaConn as getClientMediaConn } from './messaging/messages.js';
35
+ import { WaMediaTransferClient } from '../media/transfer/WaMediaTransferClient.js';
36
+ import { createDefaultLinkPreviewFetcher } from '../message/addons/link-preview/fetcher.js';
37
+ import { processNewsletterLiveUpdates } from '../message/kinds/newsletter.js';
38
+ import { handleIncomingMessageAck } from '../message/primitives/incoming.js';
39
+ import { createPeerDataOperationRequester } from '../message/primitives/peer-data-operation.js';
29
40
  import { WaMessageClient } from '../message/WaMessageClient.js';
30
- import { getWaCompanionPlatformId, WA_DEFAULTS, WA_DISCONNECT_REASONS, WA_NODE_TAGS, WA_NOTIFICATION_TYPES, WA_PRIVACY_TOKEN_NOTIFICATION_TYPE } from '../protocol/constants.js';
31
- import { parseSignalAddressFromJid, toUserJid } from '../protocol/jid.js';
41
+ import { getWaCompanionPlatformId, WA_DEFAULTS, WA_DISCONNECT_REASONS, WA_NEWSLETTER_NOTIFICATION_TAGS, WA_NODE_TAGS, WA_NOTIFICATION_TYPES, WA_PRIVACY_TOKEN_NOTIFICATION_TYPE } from '../protocol/constants.js';
42
+ import { isNewsletterJid, parseSignalAddressFromJid, toUserJid } from '../protocol/jid.js';
43
+ import { WA_PRESENCE_TYPES } from '../protocol/presence.js';
32
44
  import { createOutboundRetryTracker } from '../retry/tracker.js';
33
45
  import { SignalDeviceSyncApi } from '../signal/api/SignalDeviceSyncApi.js';
34
46
  import { SignalDigestSyncApi } from '../signal/api/SignalDigestSyncApi.js';
@@ -47,6 +59,7 @@ import { createUsyncSidGenerator } from '../transport/node/usync.js';
47
59
  import { WaNodeOrchestrator } from '../transport/node/WaNodeOrchestrator.js';
48
60
  import { WaNodeTransport } from '../transport/node/WaNodeTransport.js';
49
61
  import { isProxyTransport, toProxyAgent } from '../transport/proxy.js';
62
+ import { createServerClock } from '../util/clock.js';
50
63
  import { toError } from '../util/primitives.js';
51
64
  import { getRuntimeOsDisplayName } from '../util/runtime.js';
52
65
  function assertProxyTransport(value, path) {
@@ -104,13 +117,13 @@ export function resolveWaClientBase(options, logger) {
104
117
  };
105
118
  }
106
119
  function createIncomingNodeRuntime(input) {
107
- const { logger, emitEvent, authClient, connectionManager, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, sendNode, syncAppState, disconnect, clearStoredCredentials, getCurrentMeJid, handleClientDirtyBits, incomingMessageAckOptions } = input;
120
+ const { logger, emitEvent, authClient, connectionManager, nodeOrchestrator, streamControl, mediaMessageBuildOptions, retryCoordinator, messageDispatch, sendNode, syncAppState, disconnect, clearStoredCredentials, getCurrentCredentials, handleClientDirtyBits, incomingMessageAckOptions } = input;
108
121
  return {
109
122
  handleStreamControlResult: streamControl.handleStreamControlResult,
110
123
  persistSuccessAttributes: (attributes) => authClient.persistSuccessAttributes(attributes),
111
- emitSuccessNode: (node) => emitEvent('connection_success', { node }),
124
+ emitSuccessNode: (node) => emitEvent('debug_connection_success', { node }),
112
125
  updateClockSkewFromSuccess: (serverUnixSeconds) => connectionManager.updateClockSkewFromSuccess(serverUnixSeconds),
113
- shouldWarmupMediaConn: () => !!(getCurrentMeJid() && connectionManager.isConnected()),
126
+ shouldWarmupMediaConn: () => !!(getCurrentCredentials()?.meJid && connectionManager.isConnected()),
114
127
  warmupMediaConn: async () => {
115
128
  await getClientMediaConn(mediaMessageBuildOptions, true);
116
129
  },
@@ -124,27 +137,33 @@ function createIncomingNodeRuntime(input) {
124
137
  sendNode,
125
138
  handleIncomingRetryReceipt: (node) => retryCoordinator.handleIncomingRetryReceipt(node),
126
139
  trackOutboundReceipt: (node) => retryCoordinator.trackOutboundReceipt(node),
127
- emitIncomingReceipt: (event) => emitEvent('message_receipt', event),
140
+ emitIncomingReceipt: (event) => emitEvent('receipt', event),
128
141
  emitIncomingPresence: (event) => emitEvent('presence', event),
129
142
  emitIncomingChatstate: (event) => emitEvent('chatstate', event),
130
143
  emitIncomingCall: (event) => emitEvent('call', event),
131
- emitIncomingFailure: (event) => emitEvent('failure', event),
144
+ getCurrentCredentials,
145
+ emitIncomingFailure: (event) => emitEvent('stream_failure', event),
132
146
  emitIncomingErrorStanza: (event) => emitEvent('stanza_error', event),
133
- emitIncomingNotification: (event) => emitEvent('notification', event),
134
- emitRegistrationCode: (event) => emitEvent('registration_code_received', event),
135
- emitAccountTakeoverNotice: (event) => emitEvent('account_takeover_notice', event),
147
+ emitIncomingNotification: (event) => emitEvent('debug_notification', event),
148
+ emitMexNotification: (event) => emitEvent('mex_notification', event),
149
+ emitRegistrationCode: (event) => emitEvent('mobile_registration_code', event),
150
+ emitAccountTakeoverNotice: (event) => emitEvent('mobile_account_takeover_notice', event),
136
151
  emitGroupEvent: (event) => {
137
- emitEvent('group_event', event);
138
- void messageDispatch.mutateParticipantsCacheFromGroupEvent(event).catch((error) => {
139
- logger.warn('failed to mutate participants cache from group event', {
152
+ // Register the cache mutation before emitting so a handler that
153
+ // sends synchronously sees the fresh participants, not the stale ones.
154
+ void messageDispatch.mutateGroupMetadataCacheFromGroupEvent(event).catch((error) => {
155
+ logger.warn('failed to mutate group metadata cache from group event', {
140
156
  action: event.action,
141
157
  groupJid: event.groupJid,
142
158
  contextGroupJid: event.contextGroupJid,
143
159
  message: toError(error).message
144
160
  });
145
161
  });
162
+ emitEvent('group', event);
146
163
  },
147
- emitUnhandledIncomingNode: (event) => emitEvent('stanza_unhandled', event),
164
+ emitBusinessEvent: (event) => emitEvent('business', event),
165
+ emitPictureEvent: (event) => emitEvent('picture', event),
166
+ emitUnhandledIncomingNode: (event) => emitEvent('debug_unhandled_stanza', event),
148
167
  syncAppState,
149
168
  stopComms: () => {
150
169
  void connectionManager.getComms()?.stopComms();
@@ -156,7 +175,7 @@ function createIncomingNodeRuntime(input) {
156
175
  };
157
176
  }
158
177
  function createPassiveTasksRuntime(input) {
159
- const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials, abPropsCoordinator } = input;
178
+ const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials, abPropsCoordinator, markOnlineOnConnect } = input;
160
179
  return {
161
180
  queryWithContext,
162
181
  getCurrentCredentials,
@@ -166,9 +185,13 @@ function createPassiveTasksRuntime(input) {
166
185
  requeueDanglingReceipt: (node) => receiptQueue.enqueue(node),
167
186
  shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error),
168
187
  syncAbProps: () => abPropsCoordinator.sync(),
169
- sendPresenceAvailable: async () => {
188
+ sendInitialPresence: async () => {
170
189
  const credentials = getCurrentCredentials();
171
- await nodeOrchestrator.sendNode(buildPresenceNode({ name: credentials?.meDisplayName ?? undefined }), false);
190
+ const name = credentials?.meDisplayName ?? undefined;
191
+ const node = markOnlineOnConnect
192
+ ? buildPresenceNode({ name })
193
+ : buildPresenceNode({ type: WA_PRESENCE_TYPES.UNAVAILABLE, name });
194
+ await nodeOrchestrator.sendNode(node, false);
172
195
  }
173
196
  };
174
197
  }
@@ -180,6 +203,7 @@ export function buildWaClientDependencies(input) {
180
203
  let passiveTasks = null;
181
204
  let mediaConnCacheFallback = null;
182
205
  let scheduleReconnectAfterPairing = () => undefined;
206
+ const serverClock = createServerClock(() => connectionManager?.getClockSkewMs() ?? null);
183
207
  const nodeTransport = new WaNodeTransport(logger);
184
208
  const nodeOrchestrator = new WaNodeOrchestrator({
185
209
  sendNode: async (node) => nodeTransport.sendNode(node),
@@ -195,7 +219,8 @@ export function buildWaClientDependencies(input) {
195
219
  intervalMs: options.keepAliveIntervalMs,
196
220
  getIntervalMs: () => abPropsCoordinator.getConfigValue('heartbeat_interval_s') * 1000,
197
221
  timeoutMs: options.deadSocketTimeoutMs,
198
- hostDomain: WA_DEFAULTS.HOST_DOMAIN
222
+ hostDomain: WA_DEFAULTS.HOST_DOMAIN,
223
+ onClockSkewMs: (clockSkewMs) => connectionManager?.setClockSkewMs(clockSkewMs, 'keepalive')
199
224
  });
200
225
  const mediaTransfer = new WaMediaTransferClient({
201
226
  logger,
@@ -204,6 +229,17 @@ export function buildWaClientDependencies(input) {
204
229
  defaultDownloadAgent: toProxyAgent(options.proxy?.mediaDownload),
205
230
  skipMacVerification: options.dangerous?.disableMediaMacVerification
206
231
  });
232
+ const linkPreviewOptions = options.linkPreview ?? {};
233
+ const linkPreviewFetcher = linkPreviewOptions.fetcher ??
234
+ createDefaultLinkPreviewFetcher({
235
+ mediaTransfer,
236
+ userAgent: linkPreviewOptions.userAgent,
237
+ fetchTimeoutMs: linkPreviewOptions.fetchTimeoutMs,
238
+ maxHtmlBytes: linkPreviewOptions.maxHtmlBytes,
239
+ maxThumbnailBytes: linkPreviewOptions.maxThumbnailBytes,
240
+ allowPrivateHosts: linkPreviewOptions.allowPrivateHosts,
241
+ proxy: linkPreviewOptions.proxy ?? options.proxy?.linkPreview
242
+ });
207
243
  const mediaMessageBuildOptions = {
208
244
  logger,
209
245
  mediaTransfer,
@@ -219,7 +255,16 @@ export function buildWaClientDependencies(input) {
219
255
  mediaConnCacheFallback = mediaConn;
220
256
  connectionManager?.setMediaConnCache(mediaConn);
221
257
  },
222
- media: options.media
258
+ serverClock,
259
+ media: options.media,
260
+ linkPreviewResolver: (content) => resolveLinkPreview(content.text, content.linkPreview, {
261
+ logger,
262
+ mediaTransfer,
263
+ getMediaConn: () => getClientMediaConn(mediaMessageBuildOptions),
264
+ fetcher: linkPreviewFetcher,
265
+ options: linkPreviewOptions,
266
+ serverClock
267
+ })
223
268
  };
224
269
  const messageClient = new WaMessageClient({
225
270
  logger,
@@ -294,10 +339,11 @@ export function buildWaClientDependencies(input) {
294
339
  sendNode: runtime.sendNode,
295
340
  query: runtime.query
296
341
  },
342
+ isConnected: () => connectionManager?.isConnected() ?? false,
297
343
  callbacks: {
298
344
  onQr: (qr, ttlMs) => runtime.emitEvent('auth_qr', { qr, ttlMs }),
299
345
  onPairingCode: (code) => runtime.emitEvent('auth_pairing_code', { code }),
300
- onPairingRefresh: (forceManual) => runtime.emitEvent('auth_pairing_refresh', { forceManual }),
346
+ onPairingRefresh: (forceManual) => runtime.emitEvent('auth_pairing_required', { forceManual }),
301
347
  onPaired: (credentials) => {
302
348
  runtime.emitEvent('auth_paired', { credentials });
303
349
  scheduleReconnectAfterPairing();
@@ -306,22 +352,31 @@ export function buildWaClientDependencies(input) {
306
352
  }
307
353
  });
308
354
  const getCurrentCredentials = authClient.getCurrentCredentials.bind(authClient);
309
- const getCurrentMeJid = () => getCurrentCredentials()?.meJid;
310
- const getCurrentMeLid = () => getCurrentCredentials()?.meLid;
311
- const getCurrentSignedIdentity = () => getCurrentCredentials()?.signedIdentity;
312
355
  const groupCoordinator = createGroupCoordinator({
313
- queryWithContext: runtime.queryWithContext
356
+ queryWithContext: runtime.queryWithContext,
357
+ mexSocket: { query: runtime.query }
358
+ });
359
+ const newsletterCoordinator = createNewsletterCoordinator({
360
+ mexSocket: { query: runtime.query },
361
+ sendNode: runtime.sendNode,
362
+ publishMessageNode: (node, opts) => messageDispatch.publishMessageNode(node, opts),
363
+ queryWithContext: runtime.queryWithContext,
364
+ generateStanzaId: () => messageDispatch.generateOutgoingMessageId(),
365
+ mediaTransfer,
366
+ getMediaConn: () => getClientMediaConn(mediaMessageBuildOptions),
367
+ getAbPropString: (name) => abPropsCoordinator.getConfigValue(name),
368
+ logger
314
369
  });
315
370
  const privacyCoordinator = createPrivacyCoordinator({
316
371
  queryWithContext: runtime.queryWithContext
317
372
  });
318
- const profileCoordinator = createProfileCoordinator({
373
+ const businessCoordinator = createBusinessCoordinator({
319
374
  queryWithContext: runtime.queryWithContext,
375
+ mediaTransfer,
376
+ getMediaConn: () => getClientMediaConn(mediaMessageBuildOptions),
377
+ logger,
320
378
  generateSid: generateUsyncSid
321
379
  });
322
- const businessCoordinator = createBusinessCoordinator({
323
- queryWithContext: runtime.queryWithContext
324
- });
325
380
  const emailCoordinator = createEmailCoordinator({
326
381
  queryWithContext: runtime.queryWithContext
327
382
  });
@@ -339,19 +394,21 @@ export function buildWaClientDependencies(input) {
339
394
  });
340
395
  const fanoutResolver = createDeviceFanoutResolver({
341
396
  signalDeviceSync,
342
- getCurrentMeJid,
343
- getCurrentMeLid,
397
+ getCurrentCredentials,
344
398
  logger
345
399
  });
346
- const participantsCache = createGroupParticipantsCache({
347
- participantsStore: sessionStore.participants,
348
- queryGroupParticipantJids: async (groupJid) => {
400
+ const groupMetadataCache = createGroupMetadataCache({
401
+ groupMetadataStore: sessionStore.groupMetadata,
402
+ queryGroupMetadata: async (groupJid) => {
349
403
  const metadata = await groupCoordinator.queryGroupMetadata(groupJid);
350
404
  const participantJids = new Array(metadata.participants.length);
351
405
  for (let index = 0; index < metadata.participants.length; index += 1) {
352
406
  participantJids[index] = metadata.participants[index].jid;
353
407
  }
354
- return participantJids;
408
+ return {
409
+ participants: participantJids,
410
+ ephemeral: metadata.ephemeral
411
+ };
355
412
  },
356
413
  logger
357
414
  });
@@ -361,8 +418,9 @@ export function buildWaClientDependencies(input) {
361
418
  runtime: {
362
419
  queryWithContext: runtime.queryWithContext,
363
420
  emitEvent: runtime.emitEvent,
364
- getCurrentMeLid: () => getCurrentMeLid() ?? null
421
+ getCurrentCredentials
365
422
  },
423
+ serverClock,
366
424
  durationS: options.privacyToken?.tcTokenDurationS,
367
425
  numBuckets: options.privacyToken?.tcTokenNumBuckets,
368
426
  senderDurationS: options.privacyToken?.tcTokenSenderDurationS,
@@ -383,10 +441,9 @@ export function buildWaClientDependencies(input) {
383
441
  });
384
442
  let messageDispatch;
385
443
  const appStateSyncKeyProtocol = createAppStateSyncKeyProtocol({
386
- publishSignalMessage: (signalInput, publishOptions) => messageDispatch.publishSignalMessage(signalInput, publishOptions),
444
+ publishProtocolMessageToDevice: (deviceJid, protocolMessage, opts) => messageDispatch.publishProtocolMessageToDevice(deviceJid, protocolMessage, opts),
387
445
  fanoutResolver,
388
- getCurrentMeJid,
389
- getCurrentMeLid,
446
+ getCurrentCredentials,
390
447
  logger
391
448
  });
392
449
  messageDispatch = new WaMessageDispatchCoordinator({
@@ -395,19 +452,18 @@ export function buildWaClientDependencies(input) {
395
452
  retryTracker,
396
453
  sessionResolver,
397
454
  fanoutResolver,
398
- participantsCache,
455
+ groupMetadataCache,
399
456
  appStateSyncKeyProtocol,
400
- buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
457
+ buildMessageContent: async (content, ctx) => buildMediaMessageContent(mediaMessageBuildOptions, content, ctx),
401
458
  senderKeyManager,
402
459
  signalProtocol,
403
460
  signalStore: sessionStore.signal,
404
461
  sessionStore: sessionStore.session,
405
462
  identityStore: sessionStore.identity,
406
463
  deviceListStore: sessionStore.deviceList,
464
+ signalDeviceSync,
407
465
  messageSecretStore: sessionStore.messageSecret,
408
- getCurrentMeJid,
409
- getCurrentMeLid,
410
- getCurrentSignedIdentity,
466
+ getCurrentCredentials,
411
467
  resolvePrivacyTokenNode: (recipientJid) => trustedContactToken.resolveTokenForMessage(recipientJid),
412
468
  onDirectMessageSent: (recipientJid) => {
413
469
  trustedContactToken.maybeIssueSenderToken(recipientJid).catch((err) => logger.warn('sender token issue failed', {
@@ -415,8 +471,36 @@ export function buildWaClientDependencies(input) {
415
471
  message: toError(err).message
416
472
  }));
417
473
  },
474
+ sendNewsletterMessage: (newsletterJid, content, sendOptions, contextInfo) => newsletterCoordinator.send(newsletterJid, content, {
475
+ stanzaId: sendOptions.id,
476
+ contextInfo,
477
+ additionalAttributes: sendOptions.additionalAttributes
478
+ }),
418
479
  getIcdcHashLength: () => abPropsCoordinator.getConfigValue('md_icdc_hash_length'),
419
- mobileMessageIdFormat: options.mobileTransport !== undefined
480
+ mobileMessageIdFormat: options.mobileTransport !== undefined,
481
+ serverClock
482
+ });
483
+ const presenceCoordinator = createPresenceCoordinator({
484
+ sendNode: (node) => nodeOrchestrator.sendNode(node, false),
485
+ getCurrentCredentials
486
+ });
487
+ const peerDataOperation = createPeerDataOperationRequester({
488
+ logger,
489
+ publishProtocolMessageToDevice: (deviceJid, protocolMessage, opts) => messageDispatch.publishProtocolMessageToDevice(deviceJid, protocolMessage, opts),
490
+ getCurrentCredentials,
491
+ generateOutgoingMessageId: () => messageDispatch.generateOutgoingMessageId(),
492
+ subscribeToProtocolMessage: runtime.subscribeProtocolMessage
493
+ });
494
+ const messageCoordinator = new WaMessageCoordinator({
495
+ messageDispatch,
496
+ mediaTransfer,
497
+ logger,
498
+ messageStore: sessionStore.messages,
499
+ messageSecretStore: sessionStore.messageSecret,
500
+ trustedContactToken,
501
+ emitAddon: (event) => runtime.emitEvent('message_addon', event),
502
+ mexSocket: { query: runtime.query },
503
+ peerDataOperation
420
504
  });
421
505
  const retryCoordinator = new WaRetryCoordinator({
422
506
  logger,
@@ -426,30 +510,85 @@ export function buildWaClientDependencies(input) {
426
510
  sessionStore: sessionStore.session,
427
511
  senderKeyStore: sessionStore.senderKey,
428
512
  signalProtocol,
513
+ sessionResolver,
429
514
  signalDeviceSync,
430
515
  signalMissingPreKeysSync,
431
516
  messageClient,
432
517
  sendNode: runtime.sendNode,
433
- getCurrentMeJid,
434
- getCurrentMeLid,
435
- getCurrentSignedIdentity
518
+ getCurrentCredentials,
519
+ resolveUserIcdc: (userJid) => messageDispatch.resolveUserIcdc(userJid),
520
+ peerDataOperation,
521
+ emitIncomingMessage: (event) => {
522
+ void runtime
523
+ .handleIncomingMessageEvent(event)
524
+ .catch((err) => runtime.handleError(toError(err)));
525
+ }
526
+ });
527
+ const botCoordinator = createBotCoordinator({
528
+ logger,
529
+ queryWithContext: runtime.queryWithContext,
530
+ buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
531
+ sendMessage: (to, content, sendOptions) => messageDispatch.sendMessage(to, content, sendOptions ?? {}),
532
+ messageStore: sessionStore.messages,
533
+ messageSecretStore: sessionStore.messageSecret,
534
+ getCurrentCredentials,
535
+ emitBotChunk: (event) => runtime.emitEvent('message_bot_chunk', event),
536
+ generateSid: generateUsyncSid
436
537
  });
437
538
  const appStateSync = new WaAppStateSyncClient({
438
539
  logger,
439
540
  query: runtime.query,
440
- getCurrentMeJid,
541
+ getCurrentMeJid: () => getCurrentCredentials()?.meJid,
441
542
  defaultTimeoutMs: options.appStateSyncTimeoutMs,
442
543
  store: sessionStore.appState,
544
+ serverClock,
443
545
  onMissingKeys: async ({ keyIds }) => {
444
546
  await messageDispatch.requestAppStateSyncKeys(keyIds);
445
547
  },
446
548
  skipMacVerification: options.dangerous?.disableAppStateMacVerification,
447
- mobilePrimary: options.mobileTransport !== undefined
549
+ mobilePrimary: options.mobileTransport !== undefined,
550
+ isOwnAccountDevice: (deviceJid) => {
551
+ const credentials = getCurrentCredentials();
552
+ if (!credentials)
553
+ return false;
554
+ const candidateUser = toUserJid(deviceJid);
555
+ return ((!!credentials.meJid && toUserJid(credentials.meJid) === candidateUser) ||
556
+ (!!credentials.meLid && toUserJid(credentials.meLid) === candidateUser));
557
+ },
558
+ sendKeyShare: (toDeviceJid, keys, missingKeyIds) => messageDispatch.sendAppStateSyncKeyShare(toDeviceJid, keys, missingKeyIds),
559
+ triggerSync: async () => {
560
+ await runtime.syncAppState();
561
+ }
448
562
  });
449
563
  const appStateMutations = new WaAppStateMutationCoordinator({
450
564
  logger,
451
565
  messageStore: sessionStore.messages,
452
- syncAppState: runtime.syncAppStateWithOptions
566
+ appStateSync,
567
+ mediaTransfer,
568
+ isConnected: () => connectionManager?.isConnected() ?? false,
569
+ serverClock,
570
+ emitSnapshotMutations: options.chatEvents?.emitSnapshotMutations === true,
571
+ emitMutation: (event) => runtime.emitEvent('mutation', event),
572
+ nctSaltSink: (salt) => trustedContactToken.handleNctSaltSync(salt),
573
+ contactSink: runtime.persistContact
574
+ });
575
+ const profileCoordinator = createProfileCoordinator({
576
+ queryWithContext: runtime.queryWithContext,
577
+ generateSid: generateUsyncSid,
578
+ mexSocket: { query: runtime.query },
579
+ queryLidsByPhoneJids: (phoneJids) => signalDeviceSync.queryLidsByPhoneJids(phoneJids),
580
+ mutations: appStateMutations,
581
+ logger
582
+ });
583
+ const statusCoordinator = createStatusCoordinator({
584
+ appStateMutations,
585
+ buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
586
+ publishStatusMessage: (input) => messageDispatch.publishStatusMessage(input)
587
+ });
588
+ const broadcastListCoordinator = createBroadcastListCoordinator({
589
+ appStateMutations,
590
+ buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
591
+ publishBroadcastListMessage: (input) => messageDispatch.publishBroadcastListMessage(input)
453
592
  });
454
593
  connectionManager = new WaConnectionManager({
455
594
  logger,
@@ -459,7 +598,16 @@ export function buildWaClientDependencies(input) {
459
598
  nodeOrchestrator,
460
599
  nodeTransport,
461
600
  getPassiveTasks: () => passiveTasks,
462
- clearStoredCredentials: runtime.clearStoredState
601
+ clearStoredCredentials: runtime.clearStoredState,
602
+ onPostPairReconnected: () => {
603
+ runtime.emitEvent('connection', {
604
+ status: 'open',
605
+ reason: 'connected',
606
+ code: null,
607
+ isLogout: false,
608
+ isNewLogin: true
609
+ });
610
+ }
463
611
  });
464
612
  if (mediaConnCacheFallback !== null) {
465
613
  connectionManager.setMediaConnCache(mediaConnCacheFallback);
@@ -480,12 +628,15 @@ export function buildWaClientDependencies(input) {
480
628
  const connectWithClientSideEffects = async (reason) => {
481
629
  runtime.resumeIncomingEvents();
482
630
  await connectionManager?.connect(runtime.handleIncomingFrame);
631
+ if (!authClient.getCurrentCredentials()?.meJid) {
632
+ return;
633
+ }
483
634
  runtime.emitEvent('connection', {
484
635
  status: 'open',
485
636
  reason,
486
637
  code: null,
487
638
  isLogout: false,
488
- isNewLogin: connectionManager?.wasNewLogin() ?? false
639
+ isNewLogin: false
489
640
  });
490
641
  };
491
642
  const clearStoredCredentialsWithClientSideEffects = async () => {
@@ -506,7 +657,7 @@ export function buildWaClientDependencies(input) {
506
657
  const incomingMessageAckOptions = {
507
658
  logger,
508
659
  sendNode: runtime.sendNode,
509
- getMeJid: getCurrentMeJid,
660
+ getMeJid: () => getCurrentCredentials()?.meJid,
510
661
  signalProtocol,
511
662
  senderKeyManager,
512
663
  onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
@@ -515,14 +666,16 @@ export function buildWaClientDependencies(input) {
515
666
  .handleIncomingMessageEvent(event)
516
667
  .catch((err) => runtime.handleError(toError(err)));
517
668
  },
518
- emitUnhandledStanza: (event) => runtime.emitEvent('stanza_unhandled', event)
669
+ emitNewsletterMessageUpdate: (event) => runtime.emitEvent('newsletter_message_update', event),
670
+ emitUnhandledStanza: (event) => runtime.emitEvent('debug_unhandled_stanza', event)
519
671
  };
520
672
  const handleClientDirtyBits = (dirtyBits) => handleDirtyBits({
521
673
  logger,
522
674
  queryWithContext: runtime.queryWithContext,
523
675
  getCurrentCredentials,
524
676
  syncAppState: runtime.syncAppState,
525
- generateUsyncSid
677
+ generateUsyncSid,
678
+ newsletterListSubscribed: () => newsletterCoordinator.listSubscribed()
526
679
  }, dirtyBits);
527
680
  const offlineResume = new WaOfflineResumeCoordinator({
528
681
  logger,
@@ -548,11 +701,47 @@ export function buildWaClientDependencies(input) {
548
701
  syncAppState: runtime.syncAppState,
549
702
  disconnect: disconnectWithClientSideEffects,
550
703
  clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
551
- getCurrentMeJid,
704
+ getCurrentCredentials,
552
705
  handleClientDirtyBits,
553
706
  incomingMessageAckOptions
554
707
  })
555
708
  });
709
+ incomingNode.registerIncomingHandler({
710
+ tag: WA_NODE_TAGS.NOTIFICATION,
711
+ subtype: WA_NOTIFICATION_TYPES.NEWSLETTER,
712
+ prepend: true,
713
+ // eslint-disable-next-line @typescript-eslint/require-await
714
+ handler: async (node) => {
715
+ const newsletterJid = node.attrs.from;
716
+ if (!newsletterJid || !isNewsletterJid(newsletterJid)) {
717
+ return false;
718
+ }
719
+ const firstChild = getFirstNodeChild(node);
720
+ const childTag = firstChild?.tag;
721
+ const action = childTag === WA_NEWSLETTER_NOTIFICATION_TAGS.LIVE_UPDATES
722
+ ? 'live_updates'
723
+ : 'unknown';
724
+ runtime.emitEvent('newsletter', {
725
+ rawNode: node,
726
+ stanzaId: node.attrs.id,
727
+ chatJid: newsletterJid,
728
+ stanzaType: node.attrs.type,
729
+ offline: node.attrs.offline !== undefined,
730
+ newsletterJid,
731
+ action,
732
+ subType: childTag
733
+ });
734
+ if (action === 'live_updates') {
735
+ processNewsletterLiveUpdates(node, {
736
+ logger,
737
+ emitIncomingMessage: incomingMessageAckOptions.emitIncomingMessage,
738
+ emitNewsletterMessageUpdate: incomingMessageAckOptions.emitNewsletterMessageUpdate,
739
+ emitUnhandledStanza: incomingMessageAckOptions.emitUnhandledStanza
740
+ });
741
+ }
742
+ return false;
743
+ }
744
+ });
556
745
  incomingNode.registerIncomingHandler({
557
746
  tag: WA_NODE_TAGS.NOTIFICATION,
558
747
  subtype: WA_NOTIFICATION_TYPES.ENCRYPT,
@@ -563,7 +752,7 @@ export function buildWaClientDependencies(input) {
563
752
  return false;
564
753
  }
565
754
  const childTag = firstChild.tag;
566
- // <count value="N"/> server prekeys running low
755
+ // <count value="N"/> server prekeys running low
567
756
  if (childTag === 'count') {
568
757
  const ackNode = buildAckNode({
569
758
  kind: 'notification',
@@ -583,7 +772,7 @@ export function buildWaClientDependencies(input) {
583
772
  });
584
773
  return true;
585
774
  }
586
- // <digest/> digest key sync
775
+ // <digest/> digest key sync
587
776
  if (childTag === 'digest') {
588
777
  const ackNode = buildAckNode({
589
778
  kind: 'notification',
@@ -603,7 +792,7 @@ export function buildWaClientDependencies(input) {
603
792
  });
604
793
  return true;
605
794
  }
606
- // <identity/> contact identity key changed
795
+ // <identity/> contact identity key changed
607
796
  if (childTag === 'identity') {
608
797
  const parsed = parseIdentityChangeNotification(node);
609
798
  if (!parsed) {
@@ -616,15 +805,13 @@ export function buildWaClientDependencies(input) {
616
805
  });
617
806
  await runtime.sendNode(ackNode);
618
807
  const address = parseSignalAddressFromJid(parsed.fromJid);
619
- // ignore companion devices (non-primary)
620
808
  if (address.device !== 0) {
621
809
  logger.debug('identity-change: ignoring companion device', {
622
810
  jid: parsed.fromJid
623
811
  });
624
812
  return true;
625
813
  }
626
- // self-primary identity change → must disconnect
627
- const meJid = getCurrentMeJid();
814
+ const meJid = getCurrentCredentials()?.meJid;
628
815
  if (meJid) {
629
816
  const meUser = toUserJid(meJid);
630
817
  const fromUser = toUserJid(parsed.fromJid);
@@ -649,12 +836,13 @@ export function buildWaClientDependencies(input) {
649
836
  });
650
837
  });
651
838
  }
652
- runtime.emitEvent('notification', {
839
+ runtime.emitEvent('debug_notification', {
653
840
  rawNode: node,
654
841
  stanzaId: parsed.stanzaId,
655
842
  chatJid: parsed.fromJid,
656
- stanzaType: 'encrypt',
657
- notificationType: 'encrypt',
843
+ stanzaType: WA_NOTIFICATION_TYPES.ENCRYPT,
844
+ offline: node.attrs.offline !== undefined,
845
+ notificationType: WA_NOTIFICATION_TYPES.ENCRYPT,
658
846
  classification: 'core',
659
847
  details: {
660
848
  kind: 'identity_change',
@@ -699,7 +887,6 @@ export function buildWaClientDependencies(input) {
699
887
  });
700
888
  }
701
889
  }
702
- // invalidate device list cache so next fanout fetches fresh list
703
890
  if (sessionStore.deviceList) {
704
891
  await sessionStore.deviceList.deleteUserDevices(userJid).catch((error) => {
705
892
  logger.warn('devices-notification: invalidate cache failed', {
@@ -707,7 +894,6 @@ export function buildWaClientDependencies(input) {
707
894
  });
708
895
  });
709
896
  }
710
- // for update notifications, re-sync immediately
711
897
  if (parsed.action === DEVICE_NOTIFICATION_ACTIONS.UPDATE) {
712
898
  signalDeviceSync.syncDeviceList([userJid]).catch((error) => {
713
899
  logger.warn('devices-notification: sync device list failed', {
@@ -715,12 +901,13 @@ export function buildWaClientDependencies(input) {
715
901
  });
716
902
  });
717
903
  }
718
- runtime.emitEvent('notification', {
904
+ runtime.emitEvent('debug_notification', {
719
905
  rawNode: node,
720
906
  stanzaId: parsed.stanzaId,
721
907
  chatJid: parsed.fromJid,
722
- stanzaType: 'devices',
723
- notificationType: 'devices',
908
+ stanzaType: WA_NOTIFICATION_TYPES.DEVICES,
909
+ offline: node.attrs.offline !== undefined,
910
+ notificationType: WA_NOTIFICATION_TYPES.DEVICES,
724
911
  classification: 'core',
725
912
  details: {
726
913
  kind: 'device_list_change',
@@ -754,7 +941,6 @@ export function buildWaClientDependencies(input) {
754
941
  return true;
755
942
  }
756
943
  });
757
- // AB Props: sync after successful login and on server notification
758
944
  incomingNode.registerIncomingHandler({
759
945
  tag: WA_NODE_TAGS.NOTIFICATION,
760
946
  subtype: WA_NOTIFICATION_TYPES.SERVER,
@@ -786,11 +972,20 @@ export function buildWaClientDependencies(input) {
786
972
  nodeOrchestrator,
787
973
  receiptQueue,
788
974
  getCurrentCredentials,
789
- abPropsCoordinator
975
+ abPropsCoordinator,
976
+ markOnlineOnConnect: options.markOnlineOnConnect ?? false
790
977
  }),
791
978
  mobilePrimary: options.mobileTransport !== undefined,
792
979
  appStateSync
793
980
  });
981
+ const lowLevelCoordinator = createLowLevelCoordinator({
982
+ logger,
983
+ nodeOrchestrator,
984
+ incomingNode,
985
+ receiptQueue,
986
+ isConnected: () => connectionManager?.isConnected() ?? false,
987
+ defaultIqTimeoutMs: options.iqTimeoutMs
988
+ });
794
989
  return {
795
990
  nodeTransport,
796
991
  nodeOrchestrator,
@@ -808,20 +1003,28 @@ export function buildWaClientDependencies(input) {
808
1003
  signalSessionSync,
809
1004
  authClient,
810
1005
  messageDispatch,
1006
+ messageCoordinator,
1007
+ presenceCoordinator,
811
1008
  retryCoordinator,
812
1009
  appStateSync,
813
1010
  chatCoordinator: appStateMutations,
814
1011
  streamControl,
815
1012
  incomingNode,
1013
+ lowLevelCoordinator,
816
1014
  passiveTasks,
817
1015
  groupCoordinator,
1016
+ statusCoordinator,
1017
+ broadcastListCoordinator,
1018
+ newsletterCoordinator,
818
1019
  privacyCoordinator,
819
1020
  profileCoordinator,
820
1021
  businessCoordinator,
1022
+ botCoordinator,
821
1023
  emailCoordinator,
822
1024
  receiptQueue,
823
1025
  connectionManager,
824
1026
  trustedContactToken,
825
- abPropsCoordinator
1027
+ abPropsCoordinator,
1028
+ peerDataOperation
826
1029
  };
827
1030
  }