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