zapo-js 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -177
  3. package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  4. package/dist/appstate/index.js +7 -6
  5. package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
  6. package/dist/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  7. package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -53
  8. package/dist/appstate/utils.js +16 -0
  9. package/dist/appstate-spec.js +89 -0
  10. package/dist/auth/WaAuthClient.js +100 -5
  11. package/dist/auth/credentials-flow.js +19 -7
  12. package/dist/auth/pairing/WaPairingFlow.js +33 -24
  13. package/dist/auth/pairing/pairing-code-crypto.js +16 -18
  14. package/dist/client/WaClient.js +342 -473
  15. package/dist/client/WaClientFactory.js +279 -78
  16. package/dist/client/connection/WaConnectionManager.js +28 -11
  17. package/dist/client/coordinators/WaAbPropsCoordinator.js +1 -2
  18. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +663 -143
  19. package/dist/client/coordinators/WaBotCoordinator.js +345 -0
  20. package/dist/client/coordinators/WaBroadcastListCoordinator.js +20 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +81 -171
  22. package/dist/client/coordinators/WaEmailCoordinator.js +1 -0
  23. package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
  24. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +97 -12
  25. package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
  26. package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
  27. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +682 -204
  28. package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
  29. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +17 -4
  30. package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
  31. package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
  32. package/dist/client/coordinators/WaProfileCoordinator.js +220 -49
  33. package/dist/client/coordinators/WaRetryCoordinator.js +256 -125
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
  36. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  37. package/dist/client/events/appstate-mutation.js +133 -0
  38. package/dist/client/events/business.js +375 -0
  39. package/dist/client/events/call.js +58 -0
  40. package/dist/client/events/chatstate.js +23 -0
  41. package/dist/client/events/devices.js +15 -16
  42. package/dist/client/{dirty.js → events/dirty.js} +33 -19
  43. package/dist/client/events/group.js +13 -24
  44. package/dist/client/events/identity.js +2 -1
  45. package/dist/client/events/incoming.js +502 -0
  46. package/dist/client/events/mex-notification.js +181 -0
  47. package/dist/client/events/picture.js +33 -0
  48. package/dist/client/events/presence.js +44 -0
  49. package/dist/client/events/receipt.js +26 -0
  50. package/dist/client/media.js +161 -4
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +3 -17
  55. package/dist/client/messaging/link-preview.js +159 -0
  56. package/dist/client/messaging/messages.js +671 -0
  57. package/dist/client/newsletter/admin.js +165 -0
  58. package/dist/client/newsletter/content.js +253 -0
  59. package/dist/client/newsletter/discovery.js +115 -0
  60. package/dist/client/newsletter/messaging.js +197 -0
  61. package/dist/client/newsletter/mex.js +41 -0
  62. package/dist/client/newsletter/parse.js +217 -0
  63. package/dist/client/persistence/WriteBehindPersistence.js +31 -4
  64. package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
  65. package/dist/client/persistence/mailbox.js +104 -0
  66. package/dist/client/tokens/cs-token.js +11 -17
  67. package/dist/crypto/core/hkdf.js +12 -12
  68. package/dist/crypto/core/index.js +6 -8
  69. package/dist/crypto/core/keys.js +1 -8
  70. package/dist/crypto/core/nonce.js +12 -12
  71. package/dist/crypto/core/primitives.js +123 -93
  72. package/dist/crypto/core/random.js +6 -0
  73. package/dist/crypto/core/xeddsa.js +11 -9
  74. package/dist/crypto/curves/Ed25519.js +32 -21
  75. package/dist/crypto/curves/X25519.js +70 -34
  76. package/dist/crypto/curves/constants.js +2 -1
  77. package/dist/crypto/math/constants.js +1 -2
  78. package/dist/crypto/math/mod.js +0 -33
  79. package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  80. package/dist/esm/appstate/index.js +5 -5
  81. package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
  82. package/dist/esm/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  83. package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -52
  84. package/dist/esm/appstate/utils.js +16 -0
  85. package/dist/esm/appstate-spec.js +79 -0
  86. package/dist/esm/auth/WaAuthClient.js +100 -5
  87. package/dist/esm/auth/credentials-flow.js +18 -6
  88. package/dist/esm/auth/pairing/WaPairingFlow.js +34 -25
  89. package/dist/esm/auth/pairing/pairing-code-crypto.js +12 -14
  90. package/dist/esm/client/WaClient.js +345 -476
  91. package/dist/esm/client/WaClientFactory.js +280 -79
  92. package/dist/esm/client/connection/WaConnectionManager.js +28 -11
  93. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +2 -3
  94. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
  95. package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
  96. package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
  97. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +79 -169
  98. package/dist/esm/client/coordinators/WaEmailCoordinator.js +1 -0
  99. package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
  100. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +98 -13
  101. package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
  102. package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
  103. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +686 -208
  104. package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
  105. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +18 -5
  106. package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
  107. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
  108. package/dist/esm/client/coordinators/WaProfileCoordinator.js +223 -52
  109. package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -127
  110. package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
  111. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +6 -6
  112. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  113. package/dist/esm/client/events/appstate-mutation.js +130 -0
  114. package/dist/esm/client/events/business.js +370 -0
  115. package/dist/esm/client/events/call.js +55 -0
  116. package/dist/esm/client/events/chatstate.js +20 -0
  117. package/dist/esm/client/events/devices.js +15 -16
  118. package/dist/esm/client/{dirty.js → events/dirty.js} +33 -19
  119. package/dist/esm/client/events/group.js +14 -25
  120. package/dist/esm/client/events/identity.js +2 -1
  121. package/dist/esm/client/events/incoming.js +487 -0
  122. package/dist/esm/client/events/mex-notification.js +178 -0
  123. package/dist/esm/client/events/picture.js +30 -0
  124. package/dist/esm/client/events/presence.js +41 -0
  125. package/dist/esm/client/events/receipt.js +23 -0
  126. package/dist/esm/client/media.js +156 -6
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
  129. package/dist/esm/client/messaging/ignore-key.js +126 -0
  130. package/dist/esm/client/messaging/key-protocol.js +3 -17
  131. package/dist/esm/client/messaging/link-preview.js +156 -0
  132. package/dist/esm/client/messaging/messages.js +667 -0
  133. package/dist/esm/client/newsletter/admin.js +162 -0
  134. package/dist/esm/client/newsletter/content.js +249 -0
  135. package/dist/esm/client/newsletter/discovery.js +112 -0
  136. package/dist/esm/client/newsletter/messaging.js +194 -0
  137. package/dist/esm/client/newsletter/mex.js +37 -0
  138. package/dist/esm/client/newsletter/parse.js +200 -0
  139. package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
  140. package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
  141. package/dist/esm/client/persistence/mailbox.js +101 -0
  142. package/dist/esm/client/tokens/cs-token.js +12 -18
  143. package/dist/esm/crypto/core/hkdf.js +14 -14
  144. package/dist/esm/crypto/core/index.js +2 -2
  145. package/dist/esm/crypto/core/keys.js +1 -7
  146. package/dist/esm/crypto/core/nonce.js +11 -11
  147. package/dist/esm/crypto/core/primitives.js +121 -88
  148. package/dist/esm/crypto/core/random.js +6 -0
  149. package/dist/esm/crypto/core/xeddsa.js +11 -9
  150. package/dist/esm/crypto/curves/Ed25519.js +35 -24
  151. package/dist/esm/crypto/curves/X25519.js +72 -36
  152. package/dist/esm/crypto/curves/constants.js +1 -0
  153. package/dist/esm/crypto/math/constants.js +1 -2
  154. package/dist/esm/crypto/math/mod.js +0 -32
  155. package/dist/esm/index.js +7 -2
  156. package/dist/esm/infra/log/ConsoleLogger.js +30 -6
  157. package/dist/esm/infra/log/PinoLogger.js +64 -0
  158. package/dist/esm/infra/log/types.js +4 -2
  159. package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
  160. package/dist/esm/media/constants.js +33 -2
  161. package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
  162. package/dist/esm/media/index.js +4 -3
  163. package/dist/esm/media/sticker/sticker-pack.js +133 -0
  164. package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  165. package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
  166. package/dist/esm/message/WaMessageClient.js +46 -15
  167. package/dist/esm/message/addons/link-preview/builder.js +36 -0
  168. package/dist/esm/message/addons/link-preview/detect.js +55 -0
  169. package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
  170. package/dist/esm/message/addons/link-preview/types.js +1 -0
  171. package/dist/esm/message/context-info.js +123 -0
  172. package/dist/esm/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  173. package/dist/esm/message/{icdc.js → crypto/icdc.js} +5 -7
  174. package/dist/esm/message/crypto/phash.js +133 -0
  175. package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  176. package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  177. package/dist/esm/message/{content.js → encode/content.js} +176 -7
  178. package/dist/esm/message/encode/media-payload.js +42 -0
  179. package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
  180. package/dist/esm/message/index.js +2 -2
  181. package/dist/esm/message/kinds/bot.js +111 -0
  182. package/dist/esm/message/kinds/newsletter.js +244 -0
  183. package/dist/esm/message/kinds/sticker-pack.js +29 -0
  184. package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
  185. package/dist/esm/message/{incoming.js → primitives/incoming.js} +215 -31
  186. package/dist/esm/message/primitives/peer-data-operation.js +93 -0
  187. package/dist/esm/mex.js +1 -0
  188. package/dist/esm/protocol/abprops.js +10 -0
  189. package/dist/esm/protocol/appstate.js +6 -30
  190. package/dist/esm/protocol/auth.js +3 -2
  191. package/dist/esm/protocol/bot.js +77 -0
  192. package/dist/esm/protocol/browser.js +8 -0
  193. package/dist/esm/protocol/business.js +19 -0
  194. package/dist/esm/protocol/call.js +48 -0
  195. package/dist/esm/protocol/constants.js +8 -2
  196. package/dist/esm/protocol/defaults.js +3 -0
  197. package/dist/esm/protocol/index.js +1 -1
  198. package/dist/esm/protocol/jid.js +102 -5
  199. package/dist/esm/protocol/media.js +25 -12
  200. package/dist/esm/protocol/message.js +4 -1
  201. package/dist/esm/protocol/newsletter.js +61 -0
  202. package/dist/esm/protocol/nodes.js +22 -2
  203. package/dist/esm/protocol/notification.js +18 -2
  204. package/dist/esm/protocol/presence.js +13 -0
  205. package/dist/esm/protocol/status.js +6 -0
  206. package/dist/esm/retry/codec.js +5 -0
  207. package/dist/esm/retry/parse.js +20 -38
  208. package/dist/esm/retry/reason.js +5 -0
  209. package/dist/esm/retry/replay.js +131 -37
  210. package/dist/esm/retry/tracker.js +4 -8
  211. package/dist/esm/signal/api/SignalDeviceSyncApi.js +66 -19
  212. package/dist/esm/signal/api/SignalDigestSyncApi.js +7 -2
  213. package/dist/esm/signal/api/SignalIdentitySyncApi.js +9 -0
  214. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
  215. package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
  216. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
  217. package/dist/esm/signal/api/codec.js +52 -1
  218. package/dist/esm/signal/api/prekeys.js +4 -0
  219. package/dist/esm/signal/{crypto → attestation}/WaAdvSignature.js +5 -6
  220. package/dist/esm/signal/constants.js +3 -0
  221. package/dist/esm/signal/encoding.js +6 -289
  222. package/dist/esm/signal/group/SenderKeyChain.js +18 -33
  223. package/dist/esm/signal/group/SenderKeyManager.js +25 -8
  224. package/dist/esm/signal/group/encoding.js +96 -0
  225. package/dist/esm/signal/index.js +4 -1
  226. package/dist/esm/signal/registration/encoding.js +34 -0
  227. package/dist/esm/signal/registration/keygen.js +10 -0
  228. package/dist/esm/signal/registration/utils.js +6 -0
  229. package/dist/esm/signal/session/SignalProtocol.js +113 -11
  230. package/dist/esm/signal/session/SignalRatchet.js +29 -58
  231. package/dist/esm/signal/session/SignalSession.js +7 -14
  232. package/dist/esm/signal/session/encoding.js +173 -0
  233. package/dist/esm/signal/session/resolver.js +139 -30
  234. package/dist/esm/store/cache/identity.cache.js +75 -0
  235. package/dist/esm/store/cache/privacy-token.cache.js +57 -0
  236. package/dist/esm/store/cache/sender-key.cache.js +101 -0
  237. package/dist/esm/store/cache/session.cache.js +92 -0
  238. package/dist/esm/store/contracts/group-metadata.store.js +1 -0
  239. package/dist/esm/store/createStore.js +91 -37
  240. package/dist/esm/store/index.js +15 -14
  241. package/dist/esm/store/locks/contact.lock.js +1 -0
  242. package/dist/esm/store/locks/device-list.lock.js +1 -0
  243. package/dist/esm/store/locks/group-metadata.lock.js +20 -0
  244. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  245. package/dist/esm/store/memory/auth.store.js +24 -0
  246. package/dist/esm/store/memory/contact.store.js +79 -0
  247. package/dist/esm/store/memory/device-list.store.js +103 -0
  248. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  249. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  250. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  251. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  252. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  254. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  255. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  256. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  258. package/dist/esm/store/noop.store.js +6 -4
  259. package/dist/esm/transport/WaComms.js +14 -5
  260. package/dist/esm/transport/WaWebSocket.js +32 -8
  261. package/dist/esm/transport/binary/constants.js +10 -4
  262. package/dist/esm/transport/binary/decoder.js +21 -15
  263. package/dist/esm/transport/binary/encoder.js +96 -21
  264. package/dist/esm/transport/binary/tokens.js +12 -12
  265. package/dist/esm/transport/index.js +1 -0
  266. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  267. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  268. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  269. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  270. package/dist/esm/transport/node/builders/abprops.js +2 -2
  271. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  272. package/dist/esm/transport/node/builders/bot.js +38 -0
  273. package/dist/esm/transport/node/builders/business.js +30 -30
  274. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  275. package/dist/esm/transport/node/builders/community.js +53 -0
  276. package/dist/esm/transport/node/builders/device.js +2 -2
  277. package/dist/esm/transport/node/builders/email.js +6 -5
  278. package/dist/esm/transport/node/builders/global.js +1 -1
  279. package/dist/esm/transport/node/builders/group.js +114 -4
  280. package/dist/esm/transport/node/builders/media.js +2 -2
  281. package/dist/esm/transport/node/builders/message.js +83 -49
  282. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  283. package/dist/esm/transport/node/builders/passive.js +7 -0
  284. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  285. package/dist/esm/transport/node/builders/presence.js +27 -1
  286. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  287. package/dist/esm/transport/node/builders/privacy.js +6 -6
  288. package/dist/esm/transport/node/builders/profile.js +28 -8
  289. package/dist/esm/transport/node/builders/tos.js +58 -0
  290. package/dist/esm/transport/node/builders/usync.js +51 -2
  291. package/dist/esm/transport/node/helpers.js +3 -1
  292. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  293. package/dist/esm/transport/node/mex/client.js +22 -0
  294. package/dist/esm/transport/node/query.js +17 -0
  295. package/dist/esm/transport/node/usync.js +12 -0
  296. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  297. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  298. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  300. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  301. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  302. package/dist/esm/transport/noise/constants.js +0 -1
  303. package/dist/esm/transport/proxy.js +5 -0
  304. package/dist/esm/transport/stream/parse.js +3 -7
  305. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  306. package/dist/esm/util/async.js +4 -0
  307. package/dist/esm/util/bytes.js +37 -2
  308. package/dist/esm/util/clock.js +15 -0
  309. package/dist/esm/util/coercion.js +45 -3
  310. package/dist/esm/util/collections.js +11 -0
  311. package/dist/esm/util/index.js +2 -2
  312. package/dist/esm/util/primitives.js +19 -0
  313. package/dist/esm/util/runtime.js +5 -0
  314. package/dist/esm/version-spec.js +1 -0
  315. package/dist/index.js +31 -1
  316. package/dist/infra/log/ConsoleLogger.js +30 -6
  317. package/dist/infra/log/PinoLogger.js +64 -0
  318. package/dist/infra/log/types.js +4 -2
  319. package/dist/infra/perf/BackgroundQueue.js +55 -13
  320. package/dist/media/constants.js +34 -3
  321. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  322. package/dist/media/index.js +9 -4
  323. package/dist/media/sticker/sticker-pack.js +136 -0
  324. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  325. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  326. package/dist/message/WaMessageClient.js +46 -15
  327. package/dist/message/addons/link-preview/builder.js +39 -0
  328. package/dist/message/addons/link-preview/detect.js +58 -0
  329. package/dist/message/addons/link-preview/fetcher.js +394 -0
  330. package/dist/message/addons/link-preview/types.js +2 -0
  331. package/dist/message/context-info.js +129 -0
  332. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  333. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  334. package/dist/message/crypto/phash.js +136 -0
  335. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  336. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  337. package/dist/message/{content.js → encode/content.js} +192 -7
  338. package/dist/message/encode/media-payload.js +45 -0
  339. package/dist/message/{padding.js → encode/padding.js} +9 -3
  340. package/dist/message/index.js +2 -2
  341. package/dist/message/kinds/bot.js +120 -0
  342. package/dist/message/kinds/newsletter.js +248 -0
  343. package/dist/message/kinds/sticker-pack.js +34 -0
  344. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  345. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  346. package/dist/message/primitives/peer-data-operation.js +96 -0
  347. package/dist/mex.js +6 -0
  348. package/dist/proto.js +1 -1
  349. package/dist/protocol/abprops.js +10 -0
  350. package/dist/protocol/appstate.js +7 -31
  351. package/dist/protocol/auth.js +3 -2
  352. package/dist/protocol/bot.js +81 -0
  353. package/dist/protocol/browser.js +8 -0
  354. package/dist/protocol/business.js +22 -0
  355. package/dist/protocol/call.js +51 -0
  356. package/dist/protocol/constants.js +39 -3
  357. package/dist/protocol/defaults.js +3 -0
  358. package/dist/protocol/index.js +12 -3
  359. package/dist/protocol/jid.js +107 -5
  360. package/dist/protocol/media.js +25 -12
  361. package/dist/protocol/message.js +4 -1
  362. package/dist/protocol/newsletter.js +64 -0
  363. package/dist/protocol/nodes.js +22 -2
  364. package/dist/protocol/notification.js +19 -3
  365. package/dist/protocol/presence.js +16 -0
  366. package/dist/protocol/status.js +9 -0
  367. package/dist/retry/codec.js +5 -0
  368. package/dist/retry/parse.js +16 -34
  369. package/dist/retry/reason.js +5 -0
  370. package/dist/retry/replay.js +129 -35
  371. package/dist/retry/tracker.js +3 -7
  372. package/dist/signal/api/SignalDeviceSyncApi.js +64 -17
  373. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  374. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  375. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  376. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  377. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  378. package/dist/signal/api/codec.js +52 -0
  379. package/dist/signal/api/prekeys.js +4 -0
  380. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +5 -7
  381. package/dist/signal/constants.js +4 -1
  382. package/dist/signal/encoding.js +5 -303
  383. package/dist/signal/group/SenderKeyChain.js +17 -32
  384. package/dist/signal/group/SenderKeyManager.js +24 -7
  385. package/dist/signal/group/encoding.js +101 -0
  386. package/dist/signal/index.js +13 -10
  387. package/dist/signal/registration/encoding.js +39 -0
  388. package/dist/signal/registration/keygen.js +10 -0
  389. package/dist/signal/registration/utils.js +6 -0
  390. package/dist/signal/session/SignalProtocol.js +112 -10
  391. package/dist/signal/session/SignalRatchet.js +24 -54
  392. package/dist/signal/session/SignalSession.js +6 -14
  393. package/dist/signal/session/encoding.js +183 -0
  394. package/dist/signal/session/resolver.js +139 -30
  395. package/dist/store/cache/identity.cache.js +78 -0
  396. package/dist/store/cache/privacy-token.cache.js +60 -0
  397. package/dist/store/cache/sender-key.cache.js +104 -0
  398. package/dist/store/cache/session.cache.js +95 -0
  399. package/dist/store/contracts/group-metadata.store.js +2 -0
  400. package/dist/store/createStore.js +90 -36
  401. package/dist/store/index.js +18 -16
  402. package/dist/store/locks/contact.lock.js +1 -0
  403. package/dist/store/locks/device-list.lock.js +1 -0
  404. package/dist/store/locks/group-metadata.lock.js +23 -0
  405. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  406. package/dist/store/memory/auth.store.js +28 -0
  407. package/dist/store/memory/contact.store.js +83 -0
  408. package/dist/store/memory/device-list.store.js +107 -0
  409. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  410. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  411. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  412. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  413. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  414. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  415. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  416. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  417. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  418. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  419. package/dist/store/noop.store.js +7 -5
  420. package/dist/transport/WaComms.js +14 -5
  421. package/dist/transport/WaWebSocket.js +32 -8
  422. package/dist/transport/binary/constants.js +11 -5
  423. package/dist/transport/binary/decoder.js +24 -18
  424. package/dist/transport/binary/encoder.js +109 -34
  425. package/dist/transport/binary/tokens.js +12 -12
  426. package/dist/transport/index.js +3 -1
  427. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  428. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  429. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  430. package/dist/transport/node/WaNodeTransport.js +13 -0
  431. package/dist/transport/node/builders/abprops.js +1 -1
  432. package/dist/transport/node/builders/account-sync.js +7 -16
  433. package/dist/transport/node/builders/bot.js +43 -0
  434. package/dist/transport/node/builders/business.js +31 -31
  435. package/dist/transport/node/builders/chatstate.js +31 -0
  436. package/dist/transport/node/builders/community.js +59 -0
  437. package/dist/transport/node/builders/device.js +1 -1
  438. package/dist/transport/node/builders/email.js +6 -5
  439. package/dist/transport/node/builders/global.js +1 -1
  440. package/dist/transport/node/builders/group.js +121 -3
  441. package/dist/transport/node/builders/media.js +1 -1
  442. package/dist/transport/node/builders/message.js +84 -49
  443. package/dist/transport/node/builders/newsletter.js +183 -0
  444. package/dist/transport/node/builders/passive.js +10 -0
  445. package/dist/transport/node/builders/prekeys.js +3 -3
  446. package/dist/transport/node/builders/presence.js +28 -1
  447. package/dist/transport/node/builders/privacy-token.js +1 -1
  448. package/dist/transport/node/builders/privacy.js +5 -5
  449. package/dist/transport/node/builders/profile.js +30 -7
  450. package/dist/transport/node/builders/tos.js +63 -0
  451. package/dist/transport/node/builders/usync.js +52 -1
  452. package/dist/transport/node/helpers.js +2 -1
  453. package/dist/transport/node/mex/argo-decoder.js +2 -2
  454. package/dist/transport/node/mex/client.js +23 -0
  455. package/dist/transport/node/query.js +17 -0
  456. package/dist/transport/node/usync.js +13 -0
  457. package/dist/transport/noise/WaClientPayload.js +8 -8
  458. package/dist/transport/noise/WaMobileClientPayload.js +5 -0
  459. package/dist/transport/noise/WaNoiseCert.js +5 -0
  460. package/dist/transport/noise/WaNoiseHandshake.js +25 -23
  461. package/dist/transport/noise/WaNoiseSession.js +39 -59
  462. package/dist/transport/noise/WaNoiseSocket.js +18 -12
  463. package/dist/transport/noise/constants.js +1 -2
  464. package/dist/transport/proxy.js +5 -0
  465. package/dist/transport/stream/parse.js +3 -7
  466. package/dist/transport/wa-web-version-fetcher.js +94 -0
  467. package/dist/types/appstate/constants.d.ts +1 -1
  468. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  469. package/dist/types/appstate/index.d.ts +5 -5
  470. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  471. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  472. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  473. package/dist/types/appstate/utils.d.ts +17 -1
  474. package/dist/types/appstate-spec.d.ts +24 -0
  475. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  476. package/dist/types/auth/credentials-flow.d.ts +4 -3
  477. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  478. package/dist/types/auth/types.d.ts +48 -1
  479. package/dist/types/client/WaClient.d.ts +178 -71
  480. package/dist/types/client/WaClientFactory.d.ts +30 -5
  481. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  482. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  483. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  484. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  485. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  486. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  487. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  488. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  489. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  490. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  491. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  492. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +54 -31
  493. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  494. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  495. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  496. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  497. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  498. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  499. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  500. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  501. package/dist/types/client/events/abprops.d.ts +2 -1
  502. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  503. package/dist/types/client/events/business.d.ts +10 -0
  504. package/dist/types/client/events/call.d.ts +31 -0
  505. package/dist/types/client/events/chatstate.d.ts +9 -0
  506. package/dist/types/client/events/devices.d.ts +5 -4
  507. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  508. package/dist/types/client/events/group.d.ts +2 -1
  509. package/dist/types/client/events/identity.d.ts +2 -1
  510. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  511. package/dist/types/client/events/mex-notification.d.ts +6 -0
  512. package/dist/types/client/events/picture.d.ts +8 -0
  513. package/dist/types/client/events/presence.d.ts +28 -0
  514. package/dist/types/client/events/receipt.d.ts +14 -0
  515. package/dist/types/client/events/registration.d.ts +4 -3
  516. package/dist/types/client/index.d.ts +1 -1
  517. package/dist/types/client/media.d.ts +35 -1
  518. package/dist/types/client/messaging/fanout.d.ts +2 -2
  519. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  520. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  521. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  522. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  523. package/dist/types/client/messaging/messages.d.ts +28 -0
  524. package/dist/types/client/newsletter/admin.d.ts +71 -0
  525. package/dist/types/client/newsletter/content.d.ts +42 -0
  526. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  527. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  528. package/dist/types/client/newsletter/mex.d.ts +14 -0
  529. package/dist/types/client/newsletter/parse.d.ts +19 -0
  530. package/dist/types/client/newsletter/types.d.ts +190 -0
  531. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  532. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  533. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  534. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  535. package/dist/types/client/types.d.ts +843 -71
  536. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  537. package/dist/types/crypto/core/index.d.ts +2 -2
  538. package/dist/types/crypto/core/keys.d.ts +0 -4
  539. package/dist/types/crypto/core/nonce.d.ts +4 -5
  540. package/dist/types/crypto/core/primitives.d.ts +31 -20
  541. package/dist/types/crypto/core/random.d.ts +6 -0
  542. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  543. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  544. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  545. package/dist/types/crypto/curves/constants.d.ts +4 -3
  546. package/dist/types/crypto/curves/types.d.ts +0 -5
  547. package/dist/types/crypto/math/constants.d.ts +0 -1
  548. package/dist/types/crypto/math/mod.d.ts +0 -1
  549. package/dist/types/index.d.ts +32 -6
  550. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  551. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  552. package/dist/types/infra/log/types.d.ts +6 -0
  553. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  554. package/dist/types/media/constants.d.ts +7 -2
  555. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  556. package/dist/types/media/index.d.ts +7 -5
  557. package/dist/types/media/processor.d.ts +27 -5
  558. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  559. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  560. package/dist/types/media/transfer/conn.d.ts +7 -0
  561. package/dist/types/media/types.d.ts +1 -2
  562. package/dist/types/message/WaMessageClient.d.ts +14 -0
  563. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  564. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  565. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  566. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  567. package/dist/types/message/context-info.d.ts +66 -0
  568. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  569. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  570. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  571. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  572. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  573. package/dist/types/message/encode/content.d.ts +43 -0
  574. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  575. package/dist/types/message/encode/media-payload.d.ts +12 -0
  576. package/dist/types/message/index.d.ts +2 -2
  577. package/dist/types/message/kinds/bot.d.ts +31 -0
  578. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  579. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  580. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  581. package/dist/types/message/primitives/incoming.d.ts +21 -0
  582. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  583. package/dist/types/message/types.d.ts +208 -10
  584. package/dist/types/mex.d.ts +2 -0
  585. package/dist/types/proto.d.ts +2 -2
  586. package/dist/types/protocol/abprops.d.ts +9 -0
  587. package/dist/types/protocol/appstate.d.ts +4 -49
  588. package/dist/types/protocol/auth.d.ts +2 -2
  589. package/dist/types/protocol/bot.d.ts +45 -0
  590. package/dist/types/protocol/browser.d.ts +8 -0
  591. package/dist/types/protocol/business.d.ts +21 -0
  592. package/dist/types/protocol/call.d.ts +44 -0
  593. package/dist/types/protocol/constants.d.ts +16 -3
  594. package/dist/types/protocol/defaults.d.ts +3 -0
  595. package/dist/types/protocol/group.d.ts +1 -1
  596. package/dist/types/protocol/index.d.ts +2 -1
  597. package/dist/types/protocol/jid.d.ts +78 -0
  598. package/dist/types/protocol/media.d.ts +21 -13
  599. package/dist/types/protocol/message.d.ts +4 -0
  600. package/dist/types/protocol/newsletter.d.ts +65 -0
  601. package/dist/types/protocol/nodes.d.ts +20 -0
  602. package/dist/types/protocol/notification.d.ts +16 -0
  603. package/dist/types/protocol/presence.d.ts +16 -0
  604. package/dist/types/protocol/status.d.ts +7 -0
  605. package/dist/types/retry/codec.d.ts +5 -0
  606. package/dist/types/retry/index.d.ts +1 -1
  607. package/dist/types/retry/parse.d.ts +9 -0
  608. package/dist/types/retry/reason.d.ts +5 -0
  609. package/dist/types/retry/replay.d.ts +19 -5
  610. package/dist/types/retry/tracker.d.ts +10 -3
  611. package/dist/types/retry/types.d.ts +3 -8
  612. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  613. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  614. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  615. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  616. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  617. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  618. package/dist/types/signal/api/codec.d.ts +20 -0
  619. package/dist/types/signal/api/constants.d.ts +1 -1
  620. package/dist/types/signal/api/prekeys.d.ts +4 -0
  621. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  622. package/dist/types/signal/attestation/constants.d.ts +4 -0
  623. package/dist/types/signal/constants.d.ts +7 -4
  624. package/dist/types/signal/encoding.d.ts +6 -68
  625. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  626. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -0
  627. package/dist/types/signal/group/encoding.d.ts +25 -0
  628. package/dist/types/signal/index.d.ts +4 -1
  629. package/dist/types/signal/registration/encoding.d.ts +30 -0
  630. package/dist/types/signal/registration/keygen.d.ts +10 -0
  631. package/dist/types/signal/registration/utils.d.ts +5 -0
  632. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  633. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  634. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  635. package/dist/types/signal/session/encoding.d.ts +28 -0
  636. package/dist/types/signal/session/resolver.d.ts +14 -0
  637. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  638. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  639. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  640. package/dist/types/store/cache/session.cache.d.ts +23 -0
  641. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  642. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  643. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  644. package/dist/types/store/contracts/message.store.d.ts +0 -2
  645. package/dist/types/store/createStore.d.ts +54 -2
  646. package/dist/types/store/index.d.ts +17 -16
  647. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  648. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  649. package/dist/types/store/memory/auth.store.d.ts +18 -0
  650. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  651. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  652. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  653. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  654. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  655. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  656. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  657. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  658. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  659. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  661. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  662. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  663. package/dist/types/store/noop.store.d.ts +2 -2
  664. package/dist/types/store/types.d.ts +250 -6
  665. package/dist/types/transport/WaComms.d.ts +5 -0
  666. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  667. package/dist/types/transport/binary/constants.d.ts +8 -2
  668. package/dist/types/transport/binary/decoder.d.ts +5 -0
  669. package/dist/types/transport/binary/encoder.d.ts +5 -0
  670. package/dist/types/transport/binary/tokens.d.ts +6 -6
  671. package/dist/types/transport/index.d.ts +3 -1
  672. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  673. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  674. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  675. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  676. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  677. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  678. package/dist/types/transport/node/builders/business.d.ts +21 -4
  679. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  680. package/dist/types/transport/node/builders/community.d.ts +17 -0
  681. package/dist/types/transport/node/builders/group.d.ts +44 -2
  682. package/dist/types/transport/node/builders/message.d.ts +11 -6
  683. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  684. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  685. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  686. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  687. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  688. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  689. package/dist/types/transport/node/helpers.d.ts +1 -2
  690. package/dist/types/transport/node/mex/client.d.ts +12 -1
  691. package/dist/types/transport/node/query.d.ts +19 -1
  692. package/dist/types/transport/node/usync.d.ts +3 -0
  693. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +5 -0
  694. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  695. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  696. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  697. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  698. package/dist/types/transport/noise/constants.d.ts +4 -5
  699. package/dist/types/transport/proxy.d.ts +5 -0
  700. package/dist/types/transport/types.d.ts +14 -7
  701. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  702. package/dist/types/util/async.d.ts +4 -0
  703. package/dist/types/util/bytes.d.ts +36 -1
  704. package/dist/types/util/clock.d.ts +6 -0
  705. package/dist/types/util/coercion.d.ts +25 -0
  706. package/dist/types/util/collections.d.ts +8 -0
  707. package/dist/types/util/index.d.ts +2 -2
  708. package/dist/types/util/primitives.d.ts +11 -0
  709. package/dist/types/util/runtime.d.ts +5 -0
  710. package/dist/types/version-spec.d.ts +1 -0
  711. package/dist/util/async.js +4 -0
  712. package/dist/util/bytes.js +37 -2
  713. package/dist/util/clock.js +18 -0
  714. package/dist/util/coercion.js +48 -3
  715. package/dist/util/collections.js +12 -0
  716. package/dist/util/index.js +7 -1
  717. package/dist/util/primitives.js +20 -0
  718. package/dist/util/runtime.js +5 -0
  719. package/dist/version-spec.js +5 -0
  720. package/package.json +32 -8
  721. package/spec/appstate/index.d.ts +188 -0
  722. package/spec/appstate/index.js +850 -0
  723. package/spec/mex/index.d.ts +4172 -0
  724. package/spec/mex/index.js +261 -0
  725. package/spec/proto/index.d.ts +16305 -0
  726. package/spec/proto/index.js +1 -0
  727. package/spec/version/index.d.ts +4 -0
  728. package/spec/version/index.js +9 -0
  729. package/spec/version/version.json +3 -0
  730. package/dist/client/events/chat.js +0 -227
  731. package/dist/client/incoming.js +0 -306
  732. package/dist/client/mailbox.js +0 -66
  733. package/dist/client/messages.js +0 -305
  734. package/dist/esm/client/events/chat.js +0 -224
  735. package/dist/esm/client/incoming.js +0 -296
  736. package/dist/esm/client/mailbox.js +0 -63
  737. package/dist/esm/client/messages.js +0 -301
  738. package/dist/esm/media/WaMediaCrypto.js +0 -499
  739. package/dist/esm/message/phash.js +0 -47
  740. package/dist/esm/store/locks/participants.lock.js +0 -20
  741. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  742. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  743. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  744. package/dist/media/WaMediaCrypto.js +0 -503
  745. package/dist/message/phash.js +0 -50
  746. package/dist/store/locks/participants.lock.js +0 -23
  747. package/dist/store/providers/memory/contact.store.js +0 -32
  748. package/dist/store/providers/memory/device-list.store.js +0 -71
  749. package/dist/transport/node/mex/persist-ids.js +0 -13
  750. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  751. package/dist/types/client/events/chat.d.ts +0 -3
  752. package/dist/types/client/history-sync.d.ts +0 -20
  753. package/dist/types/client/messages.d.ts +0 -18
  754. package/dist/types/client/messaging/participants.d.ts +0 -13
  755. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  756. package/dist/types/media/conn.d.ts +0 -3
  757. package/dist/types/message/content.d.ts +0 -14
  758. package/dist/types/message/incoming.d.ts +0 -18
  759. package/dist/types/signal/crypto/constants.d.ts +0 -4
  760. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  761. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  762. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  763. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  764. package/proto/index.d.ts +0 -10903
  765. package/proto/index.js +0 -1
  766. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  767. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  768. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  769. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  770. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  771. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  772. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  773. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  774. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -1,19 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaRetryReplayService = void 0;
4
- const device_sent_1 = require("../message/device-sent");
5
- const padding_1 = require("../message/padding");
4
+ const icdc_1 = require("../message/crypto/icdc");
5
+ const device_sent_1 = require("../message/encode/device-sent");
6
+ const padding_1 = require("../message/encode/padding");
6
7
  const _proto_1 = require("../proto.js");
8
+ const constants_1 = require("../protocol/constants");
7
9
  const jid_1 = require("../protocol/jid");
8
10
  const codec_1 = require("./codec");
9
11
  const binary_1 = require("../transport/binary");
10
12
  const message_1 = require("../transport/node/builders/message");
11
13
  const helpers_1 = require("../transport/node/helpers");
12
14
  const primitives_1 = require("../util/primitives");
15
+ /**
16
+ * Replays a previously-sent outbound message in response to an incoming
17
+ * retry receipt. Dispatches to plaintext/encrypted/opaque-node handlers
18
+ * based on the stored payload shape.
19
+ */
13
20
  class WaRetryReplayService {
14
21
  constructor(options) {
15
22
  this.options = options;
16
23
  }
24
+ /**
25
+ * Resends `outbound` to `requesterJid`. Returns `'resent'` on a fresh
26
+ * send or `'ineligible'` when the cached payload cannot satisfy the
27
+ * request (e.g. requester not in the original device list).
28
+ */
17
29
  async resendOutboundMessage(outbound, requesterJid, retryCount) {
18
30
  const payload = outbound.replayPayload instanceof Uint8Array
19
31
  ? (0, codec_1.decodeRetryReplayPayload)(outbound.replayPayload)
@@ -42,43 +54,137 @@ class WaRetryReplayService {
42
54
  catch {
43
55
  return 'ineligible';
44
56
  }
45
- if (payloadUserJid !== requesterUserJid) {
57
+ const requesterIsSelf = this.isRequesterCurrentAccount(requesterJid);
58
+ if (payloadUserJid !== requesterUserJid && !requesterIsSelf) {
46
59
  return 'ineligible';
47
60
  }
48
- const encrypted = await this.options.signalProtocol.encryptMessage(requesterAddress, payload.plaintext);
61
+ const plaintext = (await this.refreshRetryPlaintext(payload, {
62
+ wrapAsDeviceSent: requesterIsSelf,
63
+ includeRecipientIcdc: true,
64
+ logContext: 'direct'
65
+ })) ?? payload.plaintext;
66
+ await this.options.sessionResolver.ensureSession(requesterAddress, requesterJid);
67
+ const encrypted = await this.options.signalProtocol.encryptMessage(requesterAddress, plaintext);
68
+ const deviceIdentity = encrypted.type === 'pkmsg' ? this.resolveSignedDeviceIdentity('direct') : undefined;
69
+ const metaNode = (0, jid_1.isHostedDeviceJid)(requesterJid)
70
+ ? (0, message_1.buildMetaNode)({ sender_intent: 'hosted' })
71
+ : undefined;
49
72
  await this.options.messageClient.sendEncrypted({
50
73
  to: requesterJid,
51
74
  encType: encrypted.type,
52
75
  ciphertext: encrypted.ciphertext,
53
76
  encCount: retryCount,
54
77
  id: outbound.messageId,
55
- type: payload.type
78
+ type: payload.type,
79
+ deviceIdentity,
80
+ metaNode
56
81
  });
57
82
  return 'resent';
58
83
  }
84
+ resolveSignedDeviceIdentity(context) {
85
+ const signedIdentity = this.options.getCurrentCredentials()?.signedIdentity;
86
+ if (!signedIdentity) {
87
+ this.options.logger.warn('retry request missing signed identity for pkmsg envelope', {
88
+ context
89
+ });
90
+ return undefined;
91
+ }
92
+ return _proto_1.proto.ADVSignedDeviceIdentity.encode(signedIdentity).finish();
93
+ }
94
+ async refreshRetryPlaintext(payload, options) {
95
+ if (!options.wrapAsDeviceSent && !this.options.resolveUserIcdc) {
96
+ return null;
97
+ }
98
+ try {
99
+ const messageBytes = (0, padding_1.unpadPkcs7)(payload.plaintext);
100
+ const decoded = _proto_1.proto.Message.decode(messageBytes);
101
+ let message = decoded;
102
+ let changed = false;
103
+ if (this.options.resolveUserIcdc) {
104
+ const meUserJid = this.safeUserJid(this.options.getCurrentCredentials()?.meJid);
105
+ const recipientUserJid = options.includeRecipientIcdc
106
+ ? this.safeUserJid(payload.to)
107
+ : null;
108
+ const [senderIcdc, recipientIcdc] = await Promise.all([
109
+ meUserJid ? this.options.resolveUserIcdc(meUserJid) : Promise.resolve(null),
110
+ recipientUserJid
111
+ ? this.options.resolveUserIcdc(recipientUserJid)
112
+ : Promise.resolve(null)
113
+ ]);
114
+ const injected = (0, icdc_1.injectDeviceListMetadata)(message, senderIcdc, recipientIcdc);
115
+ if (injected !== message) {
116
+ message = injected;
117
+ changed = true;
118
+ }
119
+ }
120
+ if (options.wrapAsDeviceSent && !message.deviceSentMessage) {
121
+ message = (0, device_sent_1.wrapDeviceSentMessage)(message, payload.to);
122
+ changed = true;
123
+ }
124
+ if (!changed) {
125
+ return null;
126
+ }
127
+ return (0, padding_1.writeRandomPadMax16)(_proto_1.proto.Message.encode(message).finish());
128
+ }
129
+ catch (error) {
130
+ this.options.logger.warn('retry request failed to refresh plaintext', {
131
+ context: options.logContext,
132
+ to: payload.to,
133
+ message: (0, primitives_1.toError)(error).message
134
+ });
135
+ return null;
136
+ }
137
+ }
138
+ safeUserJid(jid) {
139
+ if (!jid)
140
+ return null;
141
+ try {
142
+ return (0, jid_1.toUserJid)(jid);
143
+ }
144
+ catch {
145
+ return null;
146
+ }
147
+ }
59
148
  async resendGroupPlaintextPayload(outbound, payload, requesterJid, requesterAddress, retryCount) {
60
- const plaintext = (await this.maybeWrapGroupRetryPlaintextForSelfDevice(payload, requesterJid)) ??
61
- payload.plaintext;
149
+ const plaintext = (await this.refreshRetryPlaintext(payload, {
150
+ wrapAsDeviceSent: this.isRequesterCurrentAccount(requesterJid),
151
+ includeRecipientIcdc: false,
152
+ logContext: 'group'
153
+ })) ?? payload.plaintext;
62
154
  const encrypted = await this.options.signalProtocol.encryptMessage(requesterAddress, plaintext);
63
155
  let deviceIdentity;
64
156
  if (encrypted.type === 'pkmsg') {
65
- const signedIdentity = this.options.getCurrentSignedIdentity();
157
+ const signedIdentity = this.options.getCurrentCredentials()?.signedIdentity;
66
158
  if (!signedIdentity) {
67
159
  this.options.logger.warn('retry request rejected: missing signed identity for pkmsg group retry');
68
160
  return 'ineligible';
69
161
  }
70
162
  deviceIdentity = _proto_1.proto.ADVSignedDeviceIdentity.encode(signedIdentity).finish();
71
163
  }
164
+ const isStatus = (0, jid_1.isStatusBroadcastJid)(payload.to);
165
+ const metaAttrs = {};
166
+ if (isStatus) {
167
+ metaAttrs.status_setting = payload.statusSetting ?? 'contacts';
168
+ }
169
+ if ((0, jid_1.isHostedDeviceJid)(requesterJid)) {
170
+ metaAttrs.sender_intent = 'hosted';
171
+ }
172
+ const metaNode = Object.keys(metaAttrs).length > 0 ? (0, message_1.buildMetaNode)(metaAttrs) : undefined;
72
173
  const retryNode = (0, message_1.buildGroupRetryMessageNode)({
73
174
  to: payload.to,
74
175
  type: payload.type,
75
176
  id: outbound.messageId,
76
177
  requesterJid,
77
- addressingMode: requesterAddress.server === 'lid' ? 'lid' : 'pn',
178
+ addressingMode: isStatus
179
+ ? undefined
180
+ : requesterAddress.server === constants_1.WA_DEFAULTS.LID_SERVER
181
+ ? 'lid'
182
+ : 'pn',
78
183
  encType: encrypted.type,
79
184
  ciphertext: encrypted.ciphertext,
80
185
  retryCount,
81
- deviceIdentity
186
+ deviceIdentity,
187
+ metaNode
82
188
  });
83
189
  await this.options.messageClient.sendMessageNode(retryNode);
84
190
  return 'resent';
@@ -90,6 +196,12 @@ class WaRetryReplayService {
90
196
  if ((0, jid_1.normalizeDeviceJid)(payload.to) !== normalizedRequesterJid) {
91
197
  return 'ineligible';
92
198
  }
199
+ const deviceIdentity = payload.encType === 'pkmsg'
200
+ ? this.resolveSignedDeviceIdentity('encrypted_replay')
201
+ : undefined;
202
+ const metaNode = (0, jid_1.isHostedDeviceJid)(requesterJid)
203
+ ? (0, message_1.buildMetaNode)({ sender_intent: 'hosted' })
204
+ : undefined;
93
205
  await this.options.messageClient.sendEncrypted({
94
206
  to: requesterJid,
95
207
  encType: payload.encType,
@@ -97,7 +209,9 @@ class WaRetryReplayService {
97
209
  encCount: retryCount,
98
210
  id: outbound.messageId,
99
211
  type: payload.type,
100
- participant: payload.participant
212
+ participant: payload.participant,
213
+ deviceIdentity,
214
+ metaNode
101
215
  });
102
216
  return 'resent';
103
217
  }
@@ -118,39 +232,19 @@ class WaRetryReplayService {
118
232
  await this.options.messageClient.sendMessageNode(replayNode);
119
233
  return 'resent';
120
234
  }
121
- async maybeWrapGroupRetryPlaintextForSelfDevice(payload, requesterJid) {
122
- if (!this.isRequesterCurrentAccount(requesterJid)) {
123
- return null;
124
- }
125
- try {
126
- const messageBytes = (0, padding_1.unpadPkcs7)(payload.plaintext);
127
- const message = _proto_1.proto.Message.decode(messageBytes);
128
- const wrapped = (0, device_sent_1.wrapDeviceSentMessage)(message, payload.to);
129
- return (0, padding_1.writeRandomPadMax16)(_proto_1.proto.Message.encode(wrapped).finish());
130
- }
131
- catch (error) {
132
- this.options.logger.warn('retry request failed to wrap deviceSent payload for self requester', {
133
- requester: requesterJid,
134
- to: payload.to,
135
- message: (0, primitives_1.toError)(error).message
136
- });
137
- return null;
138
- }
139
- }
140
235
  isRequesterCurrentAccount(requesterJid) {
141
236
  const requesterUser = (0, jid_1.toUserJid)(requesterJid);
142
- const meJid = this.options.getCurrentMeJid();
143
- if (meJid && (0, jid_1.toUserJid)(meJid) === requesterUser) {
237
+ const credentials = this.options.getCurrentCredentials();
238
+ if (credentials?.meJid && (0, jid_1.toUserJid)(credentials.meJid) === requesterUser) {
144
239
  return true;
145
240
  }
146
- const meLid = this.options.getCurrentMeLid();
147
- if (meLid && (0, jid_1.toUserJid)(meLid) === requesterUser) {
241
+ if (credentials?.meLid && (0, jid_1.toUserJid)(credentials.meLid) === requesterUser) {
148
242
  return true;
149
243
  }
150
244
  return false;
151
245
  }
152
246
  isOpaqueReplayCompatible(node, normalizedRequesterJid) {
153
- const participantsNode = (0, helpers_1.findNodeChild)(node, 'participants');
247
+ const participantsNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_NODE_TAGS.PARTICIPANTS);
154
248
  if (participantsNode) {
155
249
  const participantsContent = Array.isArray(participantsNode.content)
156
250
  ? participantsNode.content
@@ -5,6 +5,7 @@ const jid_1 = require("../protocol/jid");
5
5
  const codec_1 = require("./codec");
6
6
  const constants_1 = require("./constants");
7
7
  const primitives_1 = require("../util/primitives");
8
+ /** Builds an {@link OutboundRetryTracker} backed by a {@link WaRetryStore}. */
8
9
  function createOutboundRetryTracker(options) {
9
10
  const { retryStore, logger } = options;
10
11
  const retryTtlMs = retryStore.getTtlMs?.() ?? constants_1.RETRY_OUTBOUND_TTL_MS;
@@ -20,7 +21,7 @@ function createOutboundRetryTracker(options) {
20
21
  continue;
21
22
  }
22
23
  try {
23
- deduped.add((0, jid_1.normalizeDeviceJid)(raw));
24
+ deduped.add((0, jid_1.toUserJid)(raw));
24
25
  }
25
26
  catch {
26
27
  continue;
@@ -48,7 +49,6 @@ function createOutboundRetryTracker(options) {
48
49
  };
49
50
  return {
50
51
  track: async (hint, publish) => {
51
- const nowMs = Date.now();
52
52
  const replayMode = hint.replayPayload.mode;
53
53
  const resolvedToJid = hint.toJid ?? (replayMode === 'opaque_node' ? '' : hint.replayPayload.to);
54
54
  const replayPayload = supportsRawReplayPayload
@@ -59,7 +59,7 @@ function createOutboundRetryTracker(options) {
59
59
  resolvedToJid &&
60
60
  !(0, jid_1.isGroupOrBroadcastJid)(resolvedToJid)) {
61
61
  try {
62
- eligibleRequesterDeviceJids = [(0, jid_1.normalizeDeviceJid)(resolvedToJid)];
62
+ eligibleRequesterDeviceJids = [(0, jid_1.toUserJid)(resolvedToJid)];
63
63
  }
64
64
  catch {
65
65
  eligibleRequesterDeviceJids = undefined;
@@ -68,15 +68,11 @@ function createOutboundRetryTracker(options) {
68
68
  const createRetryOutboundRecord = (messageId, updatedAtMs, expiresAtMs) => ({
69
69
  messageId,
70
70
  toJid: resolvedToJid,
71
- participantJid: hint.participantJid,
72
- recipientJid: hint.recipientJid,
73
71
  eligibleRequesterDeviceJids,
74
72
  deliveredRequesterDeviceJids: [],
75
- messageType: hint.type,
76
73
  replayMode,
77
74
  replayPayload,
78
75
  state: 'pending',
79
- createdAtMs: nowMs,
80
76
  updatedAtMs,
81
77
  expiresAtMs
82
78
  });
@@ -8,6 +8,10 @@ const usync_1 = require("../../transport/node/builders/usync");
8
8
  const helpers_1 = require("../../transport/node/helpers");
9
9
  const query_1 = require("../../transport/node/query");
10
10
  const usync_2 = require("../../transport/node/usync");
11
+ /**
12
+ * Resolves the device list and LID mapping for a set of users via the `usync`
13
+ * protocol. Concurrent calls for the same JIDs are deduplicated.
14
+ */
11
15
  class SignalDeviceSyncApi {
12
16
  constructor(options) {
13
17
  this.syncDedup = new PromiseDedup_1.PromiseDedup();
@@ -19,6 +23,10 @@ class SignalDeviceSyncApi {
19
23
  this.hostDomain = options.hostDomain ?? constants_1.WA_DEFAULTS.HOST_DOMAIN;
20
24
  this.generateSid = options.generateSid ?? (0, usync_2.createUsyncSidGenerator)();
21
25
  }
26
+ /**
27
+ * Refreshes the device list for every JID in `userJids`. Returns the
28
+ * resolved per-user device JIDs (matches the on-store snapshot).
29
+ */
22
30
  syncDeviceList(userJids, timeoutMs = this.defaultTimeoutMs) {
23
31
  const normalizedUsers = this.normalizeUsers(userJids);
24
32
  if (normalizedUsers.length === 0) {
@@ -87,6 +95,10 @@ class SignalDeviceSyncApi {
87
95
  });
88
96
  return merged;
89
97
  }
98
+ /**
99
+ * Looks up LIDs for a list of phone JIDs via a `lid` usync query. Returns
100
+ * one entry per input JID with `exists` indicating server-side presence.
101
+ */
90
102
  async queryLidsByPhoneJids(phoneJids, timeoutMs = this.defaultTimeoutMs) {
91
103
  const normalizedPhoneJids = this.normalizeUsers(phoneJids);
92
104
  if (normalizedPhoneJids.length === 0) {
@@ -128,8 +140,51 @@ class SignalDeviceSyncApi {
128
140
  users: result.length,
129
141
  found
130
142
  });
143
+ await this.propagateAltUserJids(result);
131
144
  return result;
132
145
  }
146
+ /**
147
+ * Enriches existing device-list snapshots with the resolved LID equivalents
148
+ * so {@link WaDeviceListStore.findByAnyUserJid} can later match a retry
149
+ * receipt arriving in LID form against an eligible list stored in PN form
150
+ * (and vice versa). Skips users with no cached snapshot — the alt gets
151
+ * recorded on the next {@link syncDeviceList} sweep.
152
+ */
153
+ async propagateAltUserJids(results) {
154
+ if (!this.deviceListStore || results.length === 0)
155
+ return;
156
+ const nowMs = Date.now();
157
+ const lidByPhoneJid = new Map();
158
+ const phoneJids = [];
159
+ for (const entry of results) {
160
+ if (entry.lidJid && entry.phoneJid) {
161
+ lidByPhoneJid.set(entry.phoneJid, entry.lidJid);
162
+ phoneJids.push(entry.phoneJid);
163
+ }
164
+ }
165
+ if (phoneJids.length === 0)
166
+ return;
167
+ const existing = await this.deviceListStore.getUserDevicesBatch(phoneJids, nowMs);
168
+ const updates = [];
169
+ for (let index = 0; index < phoneJids.length; index += 1) {
170
+ const snapshot = existing[index];
171
+ if (!snapshot)
172
+ continue;
173
+ const phoneJid = phoneJids[index];
174
+ const lidJid = lidByPhoneJid.get(phoneJid);
175
+ if (!lidJid || snapshot.altUserJid === lidJid)
176
+ continue;
177
+ updates.push({
178
+ userJid: snapshot.userJid,
179
+ altUserJid: lidJid,
180
+ deviceJids: snapshot.deviceJids,
181
+ updatedAtMs: nowMs
182
+ });
183
+ }
184
+ if (updates.length > 0) {
185
+ await this.deviceListStore.upsertUserDevicesBatch(updates);
186
+ }
187
+ }
133
188
  async collectUsersToQuery(normalizedUsers, nowMs, cachedByUser, store) {
134
189
  const records = await store.getUserDevicesBatch(normalizedUsers, nowMs);
135
190
  const usersToQuery = new Array(normalizedUsers.length);
@@ -203,16 +258,12 @@ class SignalDeviceSyncApi {
203
258
  }
204
259
  parseDeviceSyncResponse(node, requestedUsers) {
205
260
  (0, query_1.assertIqResult)(node, 'signal device sync');
206
- const usyncNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_NODE_TAGS.USYNC);
207
- if (!usyncNode) {
208
- throw new Error('signal device sync response missing usync node');
209
- }
210
- const listNode = (0, helpers_1.findNodeChild)(usyncNode, constants_1.WA_NODE_TAGS.LIST);
211
- if (!listNode) {
212
- throw new Error('signal device sync response missing list node');
261
+ (0, usync_2.logUsyncProtocolErrors)((0, usync_1.parseUsyncResultEnvelope)(node), this.logger, 'signal.deviceSync');
262
+ const userNodes = (0, usync_1.iterateUsyncUsers)(node);
263
+ if (!userNodes) {
264
+ throw new Error('signal device sync response missing usync envelope');
213
265
  }
214
266
  const requestedSet = new Set(requestedUsers);
215
- const userNodes = (0, helpers_1.getNodeChildrenByTag)(listNode, constants_1.WA_NODE_TAGS.USER);
216
267
  const parsed = new Array(userNodes.length);
217
268
  let parsedCount = 0;
218
269
  for (let index = 0; index < userNodes.length; index += 1) {
@@ -236,16 +287,12 @@ class SignalDeviceSyncApi {
236
287
  }
237
288
  parseLidSyncResponse(node, requestedUsers) {
238
289
  (0, query_1.assertIqResult)(node, 'signal lid sync');
239
- const usyncNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_NODE_TAGS.USYNC);
240
- if (!usyncNode) {
241
- throw new Error('signal lid sync response missing usync node');
242
- }
243
- const listNode = (0, helpers_1.findNodeChild)(usyncNode, constants_1.WA_NODE_TAGS.LIST);
244
- if (!listNode) {
245
- throw new Error('signal lid sync response missing list node');
290
+ (0, usync_2.logUsyncProtocolErrors)((0, usync_1.parseUsyncResultEnvelope)(node), this.logger, 'signal.lidSync');
291
+ const userNodes = (0, usync_1.iterateUsyncUsers)(node);
292
+ if (!userNodes) {
293
+ throw new Error('signal lid sync response missing usync envelope');
246
294
  }
247
295
  const requestedSet = new Set(requestedUsers);
248
- const userNodes = (0, helpers_1.getNodeChildrenByTag)(listNode, constants_1.WA_NODE_TAGS.USER);
249
296
  const parsed = new Array(userNodes.length);
250
297
  let parsedCount = 0;
251
298
  for (let index = 0; index < userNodes.length; index += 1) {
@@ -335,7 +382,7 @@ class SignalDeviceSyncApi {
335
382
  ? rawUserJid.slice(rawAtIndex + 1)
336
383
  : parsedNormalizedUser.server;
337
384
  const dedup = new Set();
338
- for (const deviceNode of (0, helpers_1.getNodeChildrenByTag)(deviceListNode, 'device')) {
385
+ for (const deviceNode of (0, helpers_1.getNodeChildrenByTag)(deviceListNode, constants_1.WA_NODE_TAGS.DEVICE)) {
339
386
  const parsedId = deviceNode.attrs.id
340
387
  ? Number.parseInt(deviceNode.attrs.id, 10)
341
388
  : Number.NaN;
@@ -9,6 +9,11 @@ const constants_2 = require("../api/constants");
9
9
  const helpers_1 = require("../../transport/node/helpers");
10
10
  const query_1 = require("../../transport/node/query");
11
11
  const bytes_1 = require("../../util/bytes");
12
+ /**
13
+ * Validates the local Signal key bundle (identity, signed prekey, one-time
14
+ * prekey ids) against the server-side digest. Used to detect drift after a
15
+ * crash or partial sync and decide whether to re-upload.
16
+ */
12
17
  class SignalDigestSyncApi {
13
18
  constructor(options) {
14
19
  this.logger = options.logger;
@@ -123,7 +128,7 @@ class SignalDigestSyncApi {
123
128
  }
124
129
  bytesToHash.push((0, keys_1.toRawPubKey)(preKey.keyPair.pubKey));
125
130
  }
126
- const localHash = (await (0, _crypto_1.sha1)((0, bytes_1.concatBytes)(bytesToHash))).subarray(0, digest.hash.byteLength);
131
+ const localHash = (0, _crypto_1.sha1)(bytesToHash).subarray(0, digest.hash.byteLength);
127
132
  if (!(0, bytes_1.uint8Equal)(localHash, digest.hash)) {
128
133
  return {
129
134
  valid: false,
@@ -9,6 +9,11 @@ const codec_1 = require("../api/codec");
9
9
  const constants_2 = require("../api/constants");
10
10
  const helpers_1 = require("../../transport/node/helpers");
11
11
  const query_1 = require("../../transport/node/query");
12
+ /**
13
+ * Fetches identity keys for a list of JIDs from the server and persists them
14
+ * into the identity store. Concurrent calls for the same JID set are
15
+ * deduplicated.
16
+ */
12
17
  class SignalIdentitySyncApi {
13
18
  constructor(options) {
14
19
  this.syncDedup = new PromiseDedup_1.PromiseDedup();
@@ -19,6 +24,10 @@ class SignalIdentitySyncApi {
19
24
  options.defaultTimeoutMs ?? constants_1.WA_DEFAULTS.SIGNAL_FETCH_KEY_BUNDLES_TIMEOUT_MS;
20
25
  this.hostDomain = options.hostDomain ?? constants_1.WA_DEFAULTS.HOST_DOMAIN;
21
26
  }
27
+ /**
28
+ * Fetches and persists identity keys for `targetJids`. Returns one entry
29
+ * per JID the server resolved; missing/erroring users are skipped.
30
+ */
22
31
  syncIdentityKeys(targetJids, timeoutMs = this.defaultTimeoutMs) {
23
32
  const dedupKey = `${timeoutMs}:${targetJids.join(',')}`;
24
33
  return this.syncDedup.run(dedupKey, () => this.syncIdentityKeysInternal(targetJids, timeoutMs));
@@ -12,6 +12,10 @@ const query_1 = require("../../transport/node/query");
12
12
  function isMissingPreKeysUserResultPreferred(result) {
13
13
  return 'devices' in result;
14
14
  }
15
+ /**
16
+ * Fetches missing prekey bundles for specific (user, device, registration id)
17
+ * triples – used during message encryption when a Signal session is missing.
18
+ */
15
19
  class SignalMissingPreKeysSyncApi {
16
20
  constructor(options) {
17
21
  this.logger = options.logger;
@@ -19,6 +23,10 @@ class SignalMissingPreKeysSyncApi {
19
23
  this.defaultTimeoutMs =
20
24
  options.defaultTimeoutMs ?? constants_1.WA_DEFAULTS.SIGNAL_FETCH_KEY_BUNDLES_TIMEOUT_MS;
21
25
  }
26
+ /**
27
+ * Fetches prekey bundles for the requested `targets` in a single IQ.
28
+ * Returns either a per-device bundle list or an error envelope per user.
29
+ */
22
30
  async fetchMissingPreKeys(targets, timeoutMs = this.defaultTimeoutMs) {
23
31
  if (targets.length === 0) {
24
32
  return [];
@@ -94,69 +102,22 @@ class SignalMissingPreKeysSyncApi {
94
102
  if (!Number.isSafeInteger(deviceId) || deviceId < 0) {
95
103
  throw new Error(`missing prekeys device[${index}].id is invalid`);
96
104
  }
97
- const [registrationNode, identityNode, signedKeyNode, oneTimeNode, deviceIdentityNode] = (0, helpers_1.findNodeChildrenByTags)(deviceNode, [
98
- constants_1.WA_NODE_TAGS.REGISTRATION,
99
- constants_1.WA_NODE_TAGS.IDENTITY,
100
- constants_1.WA_NODE_TAGS.SKEY,
101
- constants_1.WA_NODE_TAGS.KEY,
102
- constants_1.WA_NODE_TAGS.DEVICE_IDENTITY
103
- ]);
104
- if (!registrationNode || !identityNode || !signedKeyNode) {
105
+ const registrationNode = (0, helpers_1.findNodeChild)(deviceNode, constants_1.WA_NODE_TAGS.REGISTRATION);
106
+ if (!registrationNode) {
105
107
  throw new Error(`missing prekeys device payload is incomplete for ${userJid}`);
106
108
  }
107
- const [signedKeyIdNode, signedKeyValueNode, signedKeySignatureNode] = (0, helpers_1.findNodeChildrenByTags)(signedKeyNode, [
108
- constants_1.WA_NODE_TAGS.ID,
109
- constants_1.WA_NODE_TAGS.VALUE,
110
- constants_1.WA_NODE_TAGS.SIGNATURE
111
- ]);
112
- if (!signedKeyIdNode || !signedKeyValueNode || !signedKeySignatureNode) {
113
- throw new Error(`missing prekeys signed pre-key is incomplete for ${userJid}`);
114
- }
115
- let oneTimeIdNode;
116
- let oneTimeValueNode;
117
- if (oneTimeNode) {
118
- const oneTimeNodes = (0, helpers_1.findNodeChildrenByTags)(oneTimeNode, [
119
- constants_1.WA_NODE_TAGS.ID,
120
- constants_1.WA_NODE_TAGS.VALUE
121
- ]);
122
- oneTimeIdNode = oneTimeNodes[0];
123
- oneTimeValueNode = oneTimeNodes[1];
124
- }
125
- if (oneTimeNode && (!oneTimeIdNode || !oneTimeValueNode)) {
126
- throw new Error(`missing prekeys one-time key is incomplete for ${userJid}`);
127
- }
128
- const baseBundle = {
129
- regId: (0, codec_1.parseUint)((0, codec_1.decodeExactLength)(registrationNode.content, 'missing prekeys device registration', constants_2.SIGNAL_REGISTRATION_ID_LENGTH), 'missing prekeys device registration'),
130
- identity: (0, codec_1.decodeExactLength)(identityNode.content, 'missing prekeys device identity', constants_2.SIGNAL_KEY_DATA_LENGTH),
131
- signedKey: {
132
- id: (0, codec_1.parseUint)((0, codec_1.decodeExactLength)(signedKeyIdNode.content, 'missing prekeys device skey.id', constants_2.SIGNAL_KEY_ID_LENGTH), 'missing prekeys device skey.id'),
133
- publicKey: (0, codec_1.decodeExactLength)(signedKeyValueNode.content, 'missing prekeys device skey.value', constants_2.SIGNAL_KEY_DATA_LENGTH),
134
- signature: (0, codec_1.decodeExactLength)(signedKeySignatureNode.content, 'missing prekeys device skey.signature', constants_2.SIGNAL_SIGNATURE_LENGTH)
135
- }
109
+ const regId = (0, codec_1.parseUint)((0, codec_1.decodeExactLength)(registrationNode.content, 'missing prekeys device registration', constants_2.SIGNAL_REGISTRATION_ID_LENGTH), 'missing prekeys device registration');
110
+ const parsed = (0, codec_1.parseSignalKeyBundleFromNode)(deviceNode, 'missing prekeys device');
111
+ const bundle = {
112
+ regId,
113
+ identity: parsed.identity,
114
+ signedKey: parsed.signedKey,
115
+ ...(parsed.oneTimeKey ? { oneTimeKey: parsed.oneTimeKey } : {})
136
116
  };
137
- const bundle = oneTimeIdNode && oneTimeValueNode
138
- ? {
139
- ...baseBundle,
140
- oneTimeKey: {
141
- id: (0, codec_1.parseUint)((0, codec_1.decodeExactLength)(oneTimeIdNode.content, 'missing prekeys device key.id', constants_2.SIGNAL_KEY_ID_LENGTH), 'missing prekeys device key.id'),
142
- publicKey: (0, codec_1.decodeExactLength)(oneTimeValueNode.content, 'missing prekeys device key.value', constants_2.SIGNAL_KEY_DATA_LENGTH)
143
- }
144
- }
145
- : baseBundle;
146
- let deviceIdentity;
147
- if (deviceIdentityNode) {
148
- deviceIdentity = (0, helpers_1.decodeNodeContentBase64OrBytes)(deviceIdentityNode.content, 'missing prekeys device device-identity');
149
- }
150
- bundles[index] = deviceIdentity
151
- ? {
152
- deviceJid: deviceId === 0 ? userJid : `${user}:${deviceId}@${server}`,
153
- bundle,
154
- deviceIdentity
155
- }
156
- : {
157
- deviceJid: deviceId === 0 ? userJid : `${user}:${deviceId}@${server}`,
158
- bundle
159
- };
117
+ const deviceJid = deviceId === 0 ? userJid : `${user}:${deviceId}@${server}`;
118
+ bundles[index] = parsed.deviceIdentity
119
+ ? { deviceJid, bundle, deviceIdentity: parsed.deviceIdentity }
120
+ : { deviceJid, bundle };
160
121
  }
161
122
  return bundles;
162
123
  }
@@ -5,6 +5,11 @@ const constants_1 = require("../../protocol/constants");
5
5
  const prekeys_1 = require("../api/prekeys");
6
6
  const keygen_1 = require("../registration/keygen");
7
7
  const query_1 = require("../../transport/node/query");
8
+ /**
9
+ * Generates a fresh signed prekey and uploads it to the server. Handles the
10
+ * `406`/`409`/`5xx` error codes by signaling whether a digest re-validation
11
+ * is required.
12
+ */
8
13
  class SignalRotateKeyApi {
9
14
  constructor(options) {
10
15
  this.logger = options.logger;
@@ -12,6 +17,11 @@ class SignalRotateKeyApi {
12
17
  this.signalStore = options.signalStore;
13
18
  this.defaultTimeoutMs = options.defaultTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS;
14
19
  }
20
+ /**
21
+ * Rotates the signed prekey by generating a new one (next key id) and
22
+ * uploading it. Returns `shouldDigestKey: true` when the caller should
23
+ * re-run a digest validation after the rotation.
24
+ */
15
25
  async rotateSignedPreKey(timeoutMs = this.defaultTimeoutMs) {
16
26
  const [registrationInfo, currentSignedPreKey] = await Promise.all([
17
27
  this.signalStore.getRegistrationInfo(),