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,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,19 +137,21 @@ 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
+ emitEvent('group', event);
153
+ void messageDispatch.mutateGroupMetadataCacheFromGroupEvent(event).catch((error) => {
154
+ logger.warn('failed to mutate group metadata cache from group event', {
140
155
  action: event.action,
141
156
  groupJid: event.groupJid,
142
157
  contextGroupJid: event.contextGroupJid,
@@ -144,7 +159,9 @@ function createIncomingNodeRuntime(input) {
144
159
  });
145
160
  });
146
161
  },
147
- emitUnhandledIncomingNode: (event) => emitEvent('stanza_unhandled', event),
162
+ emitBusinessEvent: (event) => emitEvent('business', event),
163
+ emitPictureEvent: (event) => emitEvent('picture', event),
164
+ emitUnhandledIncomingNode: (event) => emitEvent('debug_unhandled_stanza', event),
148
165
  syncAppState,
149
166
  stopComms: () => {
150
167
  void connectionManager.getComms()?.stopComms();
@@ -156,7 +173,7 @@ function createIncomingNodeRuntime(input) {
156
173
  };
157
174
  }
158
175
  function createPassiveTasksRuntime(input) {
159
- const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials, abPropsCoordinator } = input;
176
+ const { queryWithContext, authClient, nodeOrchestrator, receiptQueue, getCurrentCredentials, abPropsCoordinator, markOnlineOnConnect } = input;
160
177
  return {
161
178
  queryWithContext,
162
179
  getCurrentCredentials,
@@ -166,9 +183,13 @@ function createPassiveTasksRuntime(input) {
166
183
  requeueDanglingReceipt: (node) => receiptQueue.enqueue(node),
167
184
  shouldQueueDanglingReceipt: (node, error) => receiptQueue.shouldQueue(node, error),
168
185
  syncAbProps: () => abPropsCoordinator.sync(),
169
- sendPresenceAvailable: async () => {
186
+ sendInitialPresence: async () => {
170
187
  const credentials = getCurrentCredentials();
171
- await nodeOrchestrator.sendNode(buildPresenceNode({ name: credentials?.meDisplayName ?? undefined }), false);
188
+ const name = credentials?.meDisplayName ?? undefined;
189
+ const node = markOnlineOnConnect
190
+ ? buildPresenceNode({ name })
191
+ : buildPresenceNode({ type: WA_PRESENCE_TYPES.UNAVAILABLE, name });
192
+ await nodeOrchestrator.sendNode(node, false);
172
193
  }
173
194
  };
174
195
  }
@@ -180,6 +201,7 @@ export function buildWaClientDependencies(input) {
180
201
  let passiveTasks = null;
181
202
  let mediaConnCacheFallback = null;
182
203
  let scheduleReconnectAfterPairing = () => undefined;
204
+ const serverClock = createServerClock(() => connectionManager?.getClockSkewMs() ?? null);
183
205
  const nodeTransport = new WaNodeTransport(logger);
184
206
  const nodeOrchestrator = new WaNodeOrchestrator({
185
207
  sendNode: async (node) => nodeTransport.sendNode(node),
@@ -195,7 +217,8 @@ export function buildWaClientDependencies(input) {
195
217
  intervalMs: options.keepAliveIntervalMs,
196
218
  getIntervalMs: () => abPropsCoordinator.getConfigValue('heartbeat_interval_s') * 1000,
197
219
  timeoutMs: options.deadSocketTimeoutMs,
198
- hostDomain: WA_DEFAULTS.HOST_DOMAIN
220
+ hostDomain: WA_DEFAULTS.HOST_DOMAIN,
221
+ onClockSkewMs: (clockSkewMs) => connectionManager?.setClockSkewMs(clockSkewMs, 'keepalive')
199
222
  });
200
223
  const mediaTransfer = new WaMediaTransferClient({
201
224
  logger,
@@ -204,6 +227,17 @@ export function buildWaClientDependencies(input) {
204
227
  defaultDownloadAgent: toProxyAgent(options.proxy?.mediaDownload),
205
228
  skipMacVerification: options.dangerous?.disableMediaMacVerification
206
229
  });
230
+ const linkPreviewOptions = options.linkPreview ?? {};
231
+ const linkPreviewFetcher = linkPreviewOptions.fetcher ??
232
+ createDefaultLinkPreviewFetcher({
233
+ mediaTransfer,
234
+ userAgent: linkPreviewOptions.userAgent,
235
+ fetchTimeoutMs: linkPreviewOptions.fetchTimeoutMs,
236
+ maxHtmlBytes: linkPreviewOptions.maxHtmlBytes,
237
+ maxThumbnailBytes: linkPreviewOptions.maxThumbnailBytes,
238
+ allowPrivateHosts: linkPreviewOptions.allowPrivateHosts,
239
+ proxy: linkPreviewOptions.proxy ?? options.proxy?.linkPreview
240
+ });
207
241
  const mediaMessageBuildOptions = {
208
242
  logger,
209
243
  mediaTransfer,
@@ -219,7 +253,16 @@ export function buildWaClientDependencies(input) {
219
253
  mediaConnCacheFallback = mediaConn;
220
254
  connectionManager?.setMediaConnCache(mediaConn);
221
255
  },
222
- media: options.media
256
+ serverClock,
257
+ media: options.media,
258
+ linkPreviewResolver: (content) => resolveLinkPreview(content.text, content.linkPreview, {
259
+ logger,
260
+ mediaTransfer,
261
+ getMediaConn: () => getClientMediaConn(mediaMessageBuildOptions),
262
+ fetcher: linkPreviewFetcher,
263
+ options: linkPreviewOptions,
264
+ serverClock
265
+ })
223
266
  };
224
267
  const messageClient = new WaMessageClient({
225
268
  logger,
@@ -294,10 +337,11 @@ export function buildWaClientDependencies(input) {
294
337
  sendNode: runtime.sendNode,
295
338
  query: runtime.query
296
339
  },
340
+ isConnected: () => connectionManager?.isConnected() ?? false,
297
341
  callbacks: {
298
342
  onQr: (qr, ttlMs) => runtime.emitEvent('auth_qr', { qr, ttlMs }),
299
343
  onPairingCode: (code) => runtime.emitEvent('auth_pairing_code', { code }),
300
- onPairingRefresh: (forceManual) => runtime.emitEvent('auth_pairing_refresh', { forceManual }),
344
+ onPairingRefresh: (forceManual) => runtime.emitEvent('auth_pairing_required', { forceManual }),
301
345
  onPaired: (credentials) => {
302
346
  runtime.emitEvent('auth_paired', { credentials });
303
347
  scheduleReconnectAfterPairing();
@@ -306,22 +350,31 @@ export function buildWaClientDependencies(input) {
306
350
  }
307
351
  });
308
352
  const getCurrentCredentials = authClient.getCurrentCredentials.bind(authClient);
309
- const getCurrentMeJid = () => getCurrentCredentials()?.meJid;
310
- const getCurrentMeLid = () => getCurrentCredentials()?.meLid;
311
- const getCurrentSignedIdentity = () => getCurrentCredentials()?.signedIdentity;
312
353
  const groupCoordinator = createGroupCoordinator({
313
- queryWithContext: runtime.queryWithContext
354
+ queryWithContext: runtime.queryWithContext,
355
+ mexSocket: { query: runtime.query }
356
+ });
357
+ const newsletterCoordinator = createNewsletterCoordinator({
358
+ mexSocket: { query: runtime.query },
359
+ sendNode: runtime.sendNode,
360
+ publishMessageNode: (node, opts) => messageDispatch.publishMessageNode(node, opts),
361
+ queryWithContext: runtime.queryWithContext,
362
+ generateStanzaId: () => messageDispatch.generateOutgoingMessageId(),
363
+ mediaTransfer,
364
+ getMediaConn: () => getClientMediaConn(mediaMessageBuildOptions),
365
+ getAbPropString: (name) => abPropsCoordinator.getConfigValue(name),
366
+ logger
314
367
  });
315
368
  const privacyCoordinator = createPrivacyCoordinator({
316
369
  queryWithContext: runtime.queryWithContext
317
370
  });
318
- const profileCoordinator = createProfileCoordinator({
371
+ const businessCoordinator = createBusinessCoordinator({
319
372
  queryWithContext: runtime.queryWithContext,
373
+ mediaTransfer,
374
+ getMediaConn: () => getClientMediaConn(mediaMessageBuildOptions),
375
+ logger,
320
376
  generateSid: generateUsyncSid
321
377
  });
322
- const businessCoordinator = createBusinessCoordinator({
323
- queryWithContext: runtime.queryWithContext
324
- });
325
378
  const emailCoordinator = createEmailCoordinator({
326
379
  queryWithContext: runtime.queryWithContext
327
380
  });
@@ -339,19 +392,21 @@ export function buildWaClientDependencies(input) {
339
392
  });
340
393
  const fanoutResolver = createDeviceFanoutResolver({
341
394
  signalDeviceSync,
342
- getCurrentMeJid,
343
- getCurrentMeLid,
395
+ getCurrentCredentials,
344
396
  logger
345
397
  });
346
- const participantsCache = createGroupParticipantsCache({
347
- participantsStore: sessionStore.participants,
348
- queryGroupParticipantJids: async (groupJid) => {
398
+ const groupMetadataCache = createGroupMetadataCache({
399
+ groupMetadataStore: sessionStore.groupMetadata,
400
+ queryGroupMetadata: async (groupJid) => {
349
401
  const metadata = await groupCoordinator.queryGroupMetadata(groupJid);
350
402
  const participantJids = new Array(metadata.participants.length);
351
403
  for (let index = 0; index < metadata.participants.length; index += 1) {
352
404
  participantJids[index] = metadata.participants[index].jid;
353
405
  }
354
- return participantJids;
406
+ return {
407
+ participants: participantJids,
408
+ ephemeral: metadata.ephemeral
409
+ };
355
410
  },
356
411
  logger
357
412
  });
@@ -361,8 +416,9 @@ export function buildWaClientDependencies(input) {
361
416
  runtime: {
362
417
  queryWithContext: runtime.queryWithContext,
363
418
  emitEvent: runtime.emitEvent,
364
- getCurrentMeLid: () => getCurrentMeLid() ?? null
419
+ getCurrentCredentials
365
420
  },
421
+ serverClock,
366
422
  durationS: options.privacyToken?.tcTokenDurationS,
367
423
  numBuckets: options.privacyToken?.tcTokenNumBuckets,
368
424
  senderDurationS: options.privacyToken?.tcTokenSenderDurationS,
@@ -383,10 +439,9 @@ export function buildWaClientDependencies(input) {
383
439
  });
384
440
  let messageDispatch;
385
441
  const appStateSyncKeyProtocol = createAppStateSyncKeyProtocol({
386
- publishSignalMessage: (signalInput, publishOptions) => messageDispatch.publishSignalMessage(signalInput, publishOptions),
442
+ publishProtocolMessageToDevice: (deviceJid, protocolMessage, opts) => messageDispatch.publishProtocolMessageToDevice(deviceJid, protocolMessage, opts),
387
443
  fanoutResolver,
388
- getCurrentMeJid,
389
- getCurrentMeLid,
444
+ getCurrentCredentials,
390
445
  logger
391
446
  });
392
447
  messageDispatch = new WaMessageDispatchCoordinator({
@@ -395,19 +450,18 @@ export function buildWaClientDependencies(input) {
395
450
  retryTracker,
396
451
  sessionResolver,
397
452
  fanoutResolver,
398
- participantsCache,
453
+ groupMetadataCache,
399
454
  appStateSyncKeyProtocol,
400
- buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
455
+ buildMessageContent: async (content, ctx) => buildMediaMessageContent(mediaMessageBuildOptions, content, ctx),
401
456
  senderKeyManager,
402
457
  signalProtocol,
403
458
  signalStore: sessionStore.signal,
404
459
  sessionStore: sessionStore.session,
405
460
  identityStore: sessionStore.identity,
406
461
  deviceListStore: sessionStore.deviceList,
462
+ signalDeviceSync,
407
463
  messageSecretStore: sessionStore.messageSecret,
408
- getCurrentMeJid,
409
- getCurrentMeLid,
410
- getCurrentSignedIdentity,
464
+ getCurrentCredentials,
411
465
  resolvePrivacyTokenNode: (recipientJid) => trustedContactToken.resolveTokenForMessage(recipientJid),
412
466
  onDirectMessageSent: (recipientJid) => {
413
467
  trustedContactToken.maybeIssueSenderToken(recipientJid).catch((err) => logger.warn('sender token issue failed', {
@@ -415,8 +469,36 @@ export function buildWaClientDependencies(input) {
415
469
  message: toError(err).message
416
470
  }));
417
471
  },
472
+ sendNewsletterMessage: (newsletterJid, content, sendOptions, contextInfo) => newsletterCoordinator.send(newsletterJid, content, {
473
+ stanzaId: sendOptions.id,
474
+ contextInfo,
475
+ additionalAttributes: sendOptions.additionalAttributes
476
+ }),
418
477
  getIcdcHashLength: () => abPropsCoordinator.getConfigValue('md_icdc_hash_length'),
419
- mobileMessageIdFormat: options.mobileTransport !== undefined
478
+ mobileMessageIdFormat: options.mobileTransport !== undefined,
479
+ serverClock
480
+ });
481
+ const presenceCoordinator = createPresenceCoordinator({
482
+ sendNode: (node) => nodeOrchestrator.sendNode(node, false),
483
+ getCurrentCredentials
484
+ });
485
+ const peerDataOperation = createPeerDataOperationRequester({
486
+ logger,
487
+ publishProtocolMessageToDevice: (deviceJid, protocolMessage, opts) => messageDispatch.publishProtocolMessageToDevice(deviceJid, protocolMessage, opts),
488
+ getCurrentCredentials,
489
+ generateOutgoingMessageId: () => messageDispatch.generateOutgoingMessageId(),
490
+ subscribeToProtocolMessage: runtime.subscribeProtocolMessage
491
+ });
492
+ const messageCoordinator = new WaMessageCoordinator({
493
+ messageDispatch,
494
+ mediaTransfer,
495
+ logger,
496
+ messageStore: sessionStore.messages,
497
+ messageSecretStore: sessionStore.messageSecret,
498
+ trustedContactToken,
499
+ emitAddon: (event) => runtime.emitEvent('message_addon', event),
500
+ mexSocket: { query: runtime.query },
501
+ peerDataOperation
420
502
  });
421
503
  const retryCoordinator = new WaRetryCoordinator({
422
504
  logger,
@@ -426,30 +508,85 @@ export function buildWaClientDependencies(input) {
426
508
  sessionStore: sessionStore.session,
427
509
  senderKeyStore: sessionStore.senderKey,
428
510
  signalProtocol,
511
+ sessionResolver,
429
512
  signalDeviceSync,
430
513
  signalMissingPreKeysSync,
431
514
  messageClient,
432
515
  sendNode: runtime.sendNode,
433
- getCurrentMeJid,
434
- getCurrentMeLid,
435
- getCurrentSignedIdentity
516
+ getCurrentCredentials,
517
+ resolveUserIcdc: (userJid) => messageDispatch.resolveUserIcdc(userJid),
518
+ peerDataOperation,
519
+ emitIncomingMessage: (event) => {
520
+ void runtime
521
+ .handleIncomingMessageEvent(event)
522
+ .catch((err) => runtime.handleError(toError(err)));
523
+ }
524
+ });
525
+ const botCoordinator = createBotCoordinator({
526
+ logger,
527
+ queryWithContext: runtime.queryWithContext,
528
+ buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
529
+ sendMessage: (to, content, sendOptions) => messageDispatch.sendMessage(to, content, sendOptions ?? {}),
530
+ messageStore: sessionStore.messages,
531
+ messageSecretStore: sessionStore.messageSecret,
532
+ getCurrentCredentials,
533
+ emitBotChunk: (event) => runtime.emitEvent('message_bot_chunk', event),
534
+ generateSid: generateUsyncSid
436
535
  });
437
536
  const appStateSync = new WaAppStateSyncClient({
438
537
  logger,
439
538
  query: runtime.query,
440
- getCurrentMeJid,
539
+ getCurrentMeJid: () => getCurrentCredentials()?.meJid,
441
540
  defaultTimeoutMs: options.appStateSyncTimeoutMs,
442
541
  store: sessionStore.appState,
542
+ serverClock,
443
543
  onMissingKeys: async ({ keyIds }) => {
444
544
  await messageDispatch.requestAppStateSyncKeys(keyIds);
445
545
  },
446
546
  skipMacVerification: options.dangerous?.disableAppStateMacVerification,
447
- mobilePrimary: options.mobileTransport !== undefined
547
+ mobilePrimary: options.mobileTransport !== undefined,
548
+ isOwnAccountDevice: (deviceJid) => {
549
+ const credentials = getCurrentCredentials();
550
+ if (!credentials)
551
+ return false;
552
+ const candidateUser = toUserJid(deviceJid);
553
+ return ((!!credentials.meJid && toUserJid(credentials.meJid) === candidateUser) ||
554
+ (!!credentials.meLid && toUserJid(credentials.meLid) === candidateUser));
555
+ },
556
+ sendKeyShare: (toDeviceJid, keys, missingKeyIds) => messageDispatch.sendAppStateSyncKeyShare(toDeviceJid, keys, missingKeyIds),
557
+ triggerSync: async () => {
558
+ await runtime.syncAppState();
559
+ }
448
560
  });
449
561
  const appStateMutations = new WaAppStateMutationCoordinator({
450
562
  logger,
451
563
  messageStore: sessionStore.messages,
452
- syncAppState: runtime.syncAppStateWithOptions
564
+ appStateSync,
565
+ mediaTransfer,
566
+ isConnected: () => connectionManager?.isConnected() ?? false,
567
+ serverClock,
568
+ emitSnapshotMutations: options.chatEvents?.emitSnapshotMutations === true,
569
+ emitMutation: (event) => runtime.emitEvent('mutation', event),
570
+ nctSaltSink: (salt) => trustedContactToken.handleNctSaltSync(salt),
571
+ contactSink: runtime.persistContact
572
+ });
573
+ const profileCoordinator = createProfileCoordinator({
574
+ queryWithContext: runtime.queryWithContext,
575
+ generateSid: generateUsyncSid,
576
+ mexSocket: { query: runtime.query },
577
+ queryLidsByPhoneJids: (phoneJids) => signalDeviceSync.queryLidsByPhoneJids(phoneJids),
578
+ mutations: appStateMutations,
579
+ logger
580
+ });
581
+ const statusCoordinator = createStatusCoordinator({
582
+ appStateMutations,
583
+ buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
584
+ publishStatusMessage: (input) => messageDispatch.publishStatusMessage(input)
585
+ });
586
+ const broadcastListCoordinator = createBroadcastListCoordinator({
587
+ appStateMutations,
588
+ buildMessageContent: async (content) => buildMediaMessageContent(mediaMessageBuildOptions, content),
589
+ publishBroadcastListMessage: (input) => messageDispatch.publishBroadcastListMessage(input)
453
590
  });
454
591
  connectionManager = new WaConnectionManager({
455
592
  logger,
@@ -459,7 +596,16 @@ export function buildWaClientDependencies(input) {
459
596
  nodeOrchestrator,
460
597
  nodeTransport,
461
598
  getPassiveTasks: () => passiveTasks,
462
- clearStoredCredentials: runtime.clearStoredState
599
+ clearStoredCredentials: runtime.clearStoredState,
600
+ onPostPairReconnected: () => {
601
+ runtime.emitEvent('connection', {
602
+ status: 'open',
603
+ reason: 'connected',
604
+ code: null,
605
+ isLogout: false,
606
+ isNewLogin: true
607
+ });
608
+ }
463
609
  });
464
610
  if (mediaConnCacheFallback !== null) {
465
611
  connectionManager.setMediaConnCache(mediaConnCacheFallback);
@@ -480,12 +626,15 @@ export function buildWaClientDependencies(input) {
480
626
  const connectWithClientSideEffects = async (reason) => {
481
627
  runtime.resumeIncomingEvents();
482
628
  await connectionManager?.connect(runtime.handleIncomingFrame);
629
+ if (!authClient.getCurrentCredentials()?.meJid) {
630
+ return;
631
+ }
483
632
  runtime.emitEvent('connection', {
484
633
  status: 'open',
485
634
  reason,
486
635
  code: null,
487
636
  isLogout: false,
488
- isNewLogin: connectionManager?.wasNewLogin() ?? false
637
+ isNewLogin: false
489
638
  });
490
639
  };
491
640
  const clearStoredCredentialsWithClientSideEffects = async () => {
@@ -506,7 +655,7 @@ export function buildWaClientDependencies(input) {
506
655
  const incomingMessageAckOptions = {
507
656
  logger,
508
657
  sendNode: runtime.sendNode,
509
- getMeJid: getCurrentMeJid,
658
+ getMeJid: () => getCurrentCredentials()?.meJid,
510
659
  signalProtocol,
511
660
  senderKeyManager,
512
661
  onDecryptFailure: (context, error) => retryCoordinator.onDecryptFailure(context, error),
@@ -515,14 +664,16 @@ export function buildWaClientDependencies(input) {
515
664
  .handleIncomingMessageEvent(event)
516
665
  .catch((err) => runtime.handleError(toError(err)));
517
666
  },
518
- emitUnhandledStanza: (event) => runtime.emitEvent('stanza_unhandled', event)
667
+ emitNewsletterMessageUpdate: (event) => runtime.emitEvent('newsletter_message_update', event),
668
+ emitUnhandledStanza: (event) => runtime.emitEvent('debug_unhandled_stanza', event)
519
669
  };
520
670
  const handleClientDirtyBits = (dirtyBits) => handleDirtyBits({
521
671
  logger,
522
672
  queryWithContext: runtime.queryWithContext,
523
673
  getCurrentCredentials,
524
674
  syncAppState: runtime.syncAppState,
525
- generateUsyncSid
675
+ generateUsyncSid,
676
+ newsletterListSubscribed: () => newsletterCoordinator.listSubscribed()
526
677
  }, dirtyBits);
527
678
  const offlineResume = new WaOfflineResumeCoordinator({
528
679
  logger,
@@ -548,11 +699,47 @@ export function buildWaClientDependencies(input) {
548
699
  syncAppState: runtime.syncAppState,
549
700
  disconnect: disconnectWithClientSideEffects,
550
701
  clearStoredCredentials: clearStoredCredentialsWithClientSideEffects,
551
- getCurrentMeJid,
702
+ getCurrentCredentials,
552
703
  handleClientDirtyBits,
553
704
  incomingMessageAckOptions
554
705
  })
555
706
  });
707
+ incomingNode.registerIncomingHandler({
708
+ tag: WA_NODE_TAGS.NOTIFICATION,
709
+ subtype: WA_NOTIFICATION_TYPES.NEWSLETTER,
710
+ prepend: true,
711
+ // eslint-disable-next-line @typescript-eslint/require-await
712
+ handler: async (node) => {
713
+ const newsletterJid = node.attrs.from;
714
+ if (!newsletterJid || !isNewsletterJid(newsletterJid)) {
715
+ return false;
716
+ }
717
+ const firstChild = getFirstNodeChild(node);
718
+ const childTag = firstChild?.tag;
719
+ const action = childTag === WA_NEWSLETTER_NOTIFICATION_TAGS.LIVE_UPDATES
720
+ ? 'live_updates'
721
+ : 'unknown';
722
+ runtime.emitEvent('newsletter', {
723
+ rawNode: node,
724
+ stanzaId: node.attrs.id,
725
+ chatJid: newsletterJid,
726
+ stanzaType: node.attrs.type,
727
+ offline: node.attrs.offline !== undefined,
728
+ newsletterJid,
729
+ action,
730
+ subType: childTag
731
+ });
732
+ if (action === 'live_updates') {
733
+ processNewsletterLiveUpdates(node, {
734
+ logger,
735
+ emitIncomingMessage: incomingMessageAckOptions.emitIncomingMessage,
736
+ emitNewsletterMessageUpdate: incomingMessageAckOptions.emitNewsletterMessageUpdate,
737
+ emitUnhandledStanza: incomingMessageAckOptions.emitUnhandledStanza
738
+ });
739
+ }
740
+ return false;
741
+ }
742
+ });
556
743
  incomingNode.registerIncomingHandler({
557
744
  tag: WA_NODE_TAGS.NOTIFICATION,
558
745
  subtype: WA_NOTIFICATION_TYPES.ENCRYPT,
@@ -563,7 +750,7 @@ export function buildWaClientDependencies(input) {
563
750
  return false;
564
751
  }
565
752
  const childTag = firstChild.tag;
566
- // <count value="N"/> server prekeys running low
753
+ // <count value="N"/> server prekeys running low
567
754
  if (childTag === 'count') {
568
755
  const ackNode = buildAckNode({
569
756
  kind: 'notification',
@@ -583,7 +770,7 @@ export function buildWaClientDependencies(input) {
583
770
  });
584
771
  return true;
585
772
  }
586
- // <digest/> digest key sync
773
+ // <digest/> digest key sync
587
774
  if (childTag === 'digest') {
588
775
  const ackNode = buildAckNode({
589
776
  kind: 'notification',
@@ -603,7 +790,7 @@ export function buildWaClientDependencies(input) {
603
790
  });
604
791
  return true;
605
792
  }
606
- // <identity/> contact identity key changed
793
+ // <identity/> contact identity key changed
607
794
  if (childTag === 'identity') {
608
795
  const parsed = parseIdentityChangeNotification(node);
609
796
  if (!parsed) {
@@ -616,15 +803,13 @@ export function buildWaClientDependencies(input) {
616
803
  });
617
804
  await runtime.sendNode(ackNode);
618
805
  const address = parseSignalAddressFromJid(parsed.fromJid);
619
- // ignore companion devices (non-primary)
620
806
  if (address.device !== 0) {
621
807
  logger.debug('identity-change: ignoring companion device', {
622
808
  jid: parsed.fromJid
623
809
  });
624
810
  return true;
625
811
  }
626
- // self-primary identity change → must disconnect
627
- const meJid = getCurrentMeJid();
812
+ const meJid = getCurrentCredentials()?.meJid;
628
813
  if (meJid) {
629
814
  const meUser = toUserJid(meJid);
630
815
  const fromUser = toUserJid(parsed.fromJid);
@@ -649,12 +834,13 @@ export function buildWaClientDependencies(input) {
649
834
  });
650
835
  });
651
836
  }
652
- runtime.emitEvent('notification', {
837
+ runtime.emitEvent('debug_notification', {
653
838
  rawNode: node,
654
839
  stanzaId: parsed.stanzaId,
655
840
  chatJid: parsed.fromJid,
656
- stanzaType: 'encrypt',
657
- notificationType: 'encrypt',
841
+ stanzaType: WA_NOTIFICATION_TYPES.ENCRYPT,
842
+ offline: node.attrs.offline !== undefined,
843
+ notificationType: WA_NOTIFICATION_TYPES.ENCRYPT,
658
844
  classification: 'core',
659
845
  details: {
660
846
  kind: 'identity_change',
@@ -699,7 +885,6 @@ export function buildWaClientDependencies(input) {
699
885
  });
700
886
  }
701
887
  }
702
- // invalidate device list cache so next fanout fetches fresh list
703
888
  if (sessionStore.deviceList) {
704
889
  await sessionStore.deviceList.deleteUserDevices(userJid).catch((error) => {
705
890
  logger.warn('devices-notification: invalidate cache failed', {
@@ -707,7 +892,6 @@ export function buildWaClientDependencies(input) {
707
892
  });
708
893
  });
709
894
  }
710
- // for update notifications, re-sync immediately
711
895
  if (parsed.action === DEVICE_NOTIFICATION_ACTIONS.UPDATE) {
712
896
  signalDeviceSync.syncDeviceList([userJid]).catch((error) => {
713
897
  logger.warn('devices-notification: sync device list failed', {
@@ -715,12 +899,13 @@ export function buildWaClientDependencies(input) {
715
899
  });
716
900
  });
717
901
  }
718
- runtime.emitEvent('notification', {
902
+ runtime.emitEvent('debug_notification', {
719
903
  rawNode: node,
720
904
  stanzaId: parsed.stanzaId,
721
905
  chatJid: parsed.fromJid,
722
- stanzaType: 'devices',
723
- notificationType: 'devices',
906
+ stanzaType: WA_NOTIFICATION_TYPES.DEVICES,
907
+ offline: node.attrs.offline !== undefined,
908
+ notificationType: WA_NOTIFICATION_TYPES.DEVICES,
724
909
  classification: 'core',
725
910
  details: {
726
911
  kind: 'device_list_change',
@@ -754,7 +939,6 @@ export function buildWaClientDependencies(input) {
754
939
  return true;
755
940
  }
756
941
  });
757
- // AB Props: sync after successful login and on server notification
758
942
  incomingNode.registerIncomingHandler({
759
943
  tag: WA_NODE_TAGS.NOTIFICATION,
760
944
  subtype: WA_NOTIFICATION_TYPES.SERVER,
@@ -786,11 +970,20 @@ export function buildWaClientDependencies(input) {
786
970
  nodeOrchestrator,
787
971
  receiptQueue,
788
972
  getCurrentCredentials,
789
- abPropsCoordinator
973
+ abPropsCoordinator,
974
+ markOnlineOnConnect: options.markOnlineOnConnect ?? false
790
975
  }),
791
976
  mobilePrimary: options.mobileTransport !== undefined,
792
977
  appStateSync
793
978
  });
979
+ const lowLevelCoordinator = createLowLevelCoordinator({
980
+ logger,
981
+ nodeOrchestrator,
982
+ incomingNode,
983
+ receiptQueue,
984
+ isConnected: () => connectionManager?.isConnected() ?? false,
985
+ defaultIqTimeoutMs: options.iqTimeoutMs
986
+ });
794
987
  return {
795
988
  nodeTransport,
796
989
  nodeOrchestrator,
@@ -808,20 +1001,28 @@ export function buildWaClientDependencies(input) {
808
1001
  signalSessionSync,
809
1002
  authClient,
810
1003
  messageDispatch,
1004
+ messageCoordinator,
1005
+ presenceCoordinator,
811
1006
  retryCoordinator,
812
1007
  appStateSync,
813
1008
  chatCoordinator: appStateMutations,
814
1009
  streamControl,
815
1010
  incomingNode,
1011
+ lowLevelCoordinator,
816
1012
  passiveTasks,
817
1013
  groupCoordinator,
1014
+ statusCoordinator,
1015
+ broadcastListCoordinator,
1016
+ newsletterCoordinator,
818
1017
  privacyCoordinator,
819
1018
  profileCoordinator,
820
1019
  businessCoordinator,
1020
+ botCoordinator,
821
1021
  emailCoordinator,
822
1022
  receiptQueue,
823
1023
  connectionManager,
824
1024
  trustedContactToken,
825
- abPropsCoordinator
1025
+ abPropsCoordinator,
1026
+ peerDataOperation
826
1027
  };
827
1028
  }