zapo-js 0.3.0 → 1.0.1

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