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