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
@@ -1,10 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WA_GROUP_NOTIFICATION_TAGS = exports.WA_NOTIFICATION_TYPES = void 0;
3
+ exports.WA_GROUP_NOTIFICATION_TAGS = exports.WA_REGISTRATION_NOTIFICATION_TAGS = exports.WA_NEWSLETTER_NOTIFICATION_TAGS = exports.WA_BUSINESS_NOTIFICATION_TAGS = exports.WA_NOTIFICATION_TYPES = void 0;
4
4
  exports.WA_NOTIFICATION_TYPES = Object.freeze({
5
5
  GROUP: 'w:gp2',
6
6
  ENCRYPT: 'encrypt',
7
- DEVICES: 'devices'
7
+ DEVICES: 'devices',
8
+ SERVER: 'server',
9
+ REGISTRATION: 'registration',
10
+ NEWSLETTER: 'newsletter',
11
+ BUSINESS: 'business',
12
+ PICTURE: 'picture'
13
+ });
14
+ exports.WA_BUSINESS_NOTIFICATION_TAGS = Object.freeze({
15
+ VERIFIED_NAME: 'verified_name',
16
+ REMOVE: 'remove',
17
+ PROFILE: 'profile',
18
+ PRODUCT_CATALOG: 'product_catalog',
19
+ SUBSCRIPTIONS: 'subscriptions',
20
+ FEATURE_FLAGS: 'feature_flags'
21
+ });
22
+ exports.WA_NEWSLETTER_NOTIFICATION_TAGS = Object.freeze({
23
+ LIVE_UPDATES: 'live_updates'
24
+ });
25
+ exports.WA_REGISTRATION_NOTIFICATION_TAGS = Object.freeze({
26
+ WA_OLD_REGISTRATION: 'wa_old_registration',
27
+ DEVICE_LOGOUT: 'device_logout'
8
28
  });
9
29
  exports.WA_GROUP_NOTIFICATION_TAGS = Object.freeze({
10
30
  REMOVE: 'remove',
@@ -51,5 +71,7 @@ exports.WA_GROUP_NOTIFICATION_TAGS = Object.freeze({
51
71
  IS_CAPI_HOSTED_GROUP: 'is_capi_hosted_group',
52
72
  GROUP_SAFETY_CHECK: 'group_safety_check',
53
73
  LIMIT_SHARING_ENABLED: 'limit_sharing_enabled',
54
- MISSING_PARTICIPANT_IDENTIFICATION: 'missing_participant_identification'
74
+ MISSING_PARTICIPANT_IDENTIFICATION: 'missing_participant_identification',
75
+ GROUP_HISTORY: 'group_history',
76
+ NO_GROUP_HISTORY: 'no_group_history'
55
77
  });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WA_CHATSTATE_MEDIA = exports.WA_PRESENCE_LAST_SENTINELS = exports.WA_PRESENCE_TYPES = void 0;
4
+ exports.WA_PRESENCE_TYPES = Object.freeze({
5
+ AVAILABLE: 'available',
6
+ UNAVAILABLE: 'unavailable',
7
+ SUBSCRIBE: 'subscribe'
8
+ });
9
+ exports.WA_PRESENCE_LAST_SENTINELS = Object.freeze({
10
+ DENY: 'deny',
11
+ NONE: 'none',
12
+ ERROR: 'error'
13
+ });
14
+ exports.WA_CHATSTATE_MEDIA = Object.freeze({
15
+ AUDIO: 'audio'
16
+ });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WA_STATUS_DISTRIBUTION_SETTINGS = void 0;
4
+ exports.WA_STATUS_DISTRIBUTION_SETTINGS = Object.freeze({
5
+ CONTACTS: 'contacts',
6
+ ALLOWLIST: 'allowlist',
7
+ DENYLIST: 'denylist',
8
+ CLOSE_FRIENDS: 'close_friends'
9
+ });
@@ -20,6 +20,10 @@ const RETRY_PAYLOAD_ENC_TYPE_REVERSE = Object.freeze({
20
20
  2: 'pkmsg',
21
21
  3: 'skmsg'
22
22
  });
23
+ /**
24
+ * Encodes a {@link WaRetryReplayPayload} into the on-disk codec format used
25
+ * by the retry store. Supports the `plaintext`/`encrypted`/`opaque_node` modes.
26
+ */
23
27
  function encodeRetryReplayPayload(payload) {
24
28
  const chunks = [];
25
29
  if (payload.mode === 'plaintext') {
@@ -60,6 +64,7 @@ function encodeRetryReplayPayload(payload) {
60
64
  pushBytesField(chunks, payload.node, 'node');
61
65
  return (0, bytes_1.concatBytes)(chunks);
62
66
  }
67
+ /** Inverse of {@link encodeRetryReplayPayload}. Throws on bad magic/version. */
63
68
  function decodeRetryReplayPayload(raw) {
64
69
  if (raw.byteLength < 3) {
65
70
  throw new Error('invalid retry replay payload: unsupported codec version');
@@ -51,47 +51,25 @@ function parseRetryKeyBundle(node) {
51
51
  if (!node) {
52
52
  return undefined;
53
53
  }
54
- const [identityNode, signedKeyNode, keyNode, deviceIdentityNode] = (0, helpers_1.findNodeChildrenByTags)(node, [constants_1.WA_NODE_TAGS.IDENTITY, constants_1.WA_NODE_TAGS.SKEY, constants_1.WA_NODE_TAGS.KEY, constants_1.WA_NODE_TAGS.DEVICE_IDENTITY]);
55
- const identity = requireNode(identityNode, 'retry keys section missing identity or skey');
56
- const signedKey = requireNode(signedKeyNode, 'retry keys section missing identity or skey');
57
- const [signedKeyIdNode, signedKeyValueNode, signedKeySignatureNode] = (0, helpers_1.findNodeChildrenByTags)(signedKey, [constants_1.WA_NODE_TAGS.ID, constants_1.WA_NODE_TAGS.VALUE, constants_1.WA_NODE_TAGS.SIGNATURE]);
58
- const signedKeyId = requireNode(signedKeyIdNode, 'retry keys section has incomplete skey');
59
- const signedKeyValue = requireNode(signedKeyValueNode, 'retry keys section has incomplete skey');
60
- const signedKeySignature = requireNode(signedKeySignatureNode, 'retry keys section has incomplete skey');
61
- let keyIdNode;
62
- let keyValueNode;
63
- if (keyNode) {
64
- const keyNodes = (0, helpers_1.findNodeChildrenByTags)(keyNode, [constants_1.WA_NODE_TAGS.ID, constants_1.WA_NODE_TAGS.VALUE]);
65
- keyIdNode = keyNodes[0];
66
- keyValueNode = keyNodes[1];
67
- }
68
- const keyId = keyNode ? requireNode(keyIdNode, 'retry keys section has incomplete key') : null;
69
- const keyValue = keyNode
70
- ? requireNode(keyValueNode, 'retry keys section has incomplete key')
71
- : null;
54
+ const parsed = (0, codec_1.parseSignalKeyBundleFromNode)(node, 'retry.keys');
72
55
  return {
73
- identity: (0, codec_1.decodeExactLength)(identity.content, 'retry.keys.identity', constants_2.SIGNAL_KEY_DATA_LENGTH),
74
- deviceIdentity: deviceIdentityNode
75
- ? (0, helpers_1.decodeNodeContentBase64OrBytes)(deviceIdentityNode.content, 'retry.keys.device-identity')
76
- : undefined,
77
- key: keyId && keyValue
78
- ? {
79
- id: (0, codec_1.parseUint)((0, codec_1.decodeExactLength)(keyId.content, 'retry.keys.key.id', constants_2.SIGNAL_KEY_ID_LENGTH), 'retry.keys.key.id'),
80
- publicKey: (0, codec_1.decodeExactLength)(keyValue.content, 'retry.keys.key.value', constants_2.SIGNAL_KEY_DATA_LENGTH)
81
- }
82
- : undefined,
83
- skey: {
84
- id: (0, codec_1.parseUint)((0, codec_1.decodeExactLength)(signedKeyId.content, 'retry.keys.skey.id', constants_2.SIGNAL_KEY_ID_LENGTH), 'retry.keys.skey.id'),
85
- publicKey: (0, codec_1.decodeExactLength)(signedKeyValue.content, 'retry.keys.skey.value', constants_2.SIGNAL_KEY_DATA_LENGTH),
86
- signature: (0, codec_1.decodeExactLength)(signedKeySignature.content, 'retry.keys.skey.signature', constants_2.SIGNAL_SIGNATURE_LENGTH)
87
- }
56
+ identity: parsed.identity,
57
+ ...(parsed.deviceIdentity ? { deviceIdentity: parsed.deviceIdentity } : {}),
58
+ ...(parsed.oneTimeKey ? { key: parsed.oneTimeKey } : {}),
59
+ skey: parsed.signedKey
88
60
  };
89
61
  }
62
+ /**
63
+ * Parses an incoming `receipt` stanza into a {@link WaParsedRetryRequest}.
64
+ * Returns `null` when the stanza is not a retry/rekey-retry receipt; throws
65
+ * when required attrs/children are missing.
66
+ */
90
67
  function parseRetryReceiptRequest(node, options) {
91
68
  if (node.tag !== constants_1.WA_MESSAGE_TAGS.RECEIPT) {
92
69
  return null;
93
70
  }
94
- const receiptType = node.attrs.type === 'retry' || node.attrs.type === 'enc_rekey_retry'
71
+ const receiptType = node.attrs.type === constants_1.WA_MESSAGE_TYPES.RECEIPT_TYPE_RETRY ||
72
+ node.attrs.type === constants_1.WA_MESSAGE_TYPES.RECEIPT_TYPE_ENC_REKEY_RETRY
95
73
  ? node.attrs.type
96
74
  : null;
97
75
  if (!receiptType) {
@@ -131,6 +109,10 @@ function parseRetryReceiptRequest(node, options) {
131
109
  keyBundle: parseRetryKeyBundle(keysNode)
132
110
  };
133
111
  }
112
+ /**
113
+ * Returns whichever of `left`/`right` represents the more advanced retry
114
+ * state (according to the internal precedence rank).
115
+ */
134
116
  function pickRetryStateMax(left, right) {
135
117
  return RETRY_STATE_RANK[left] >= RETRY_STATE_RANK[right] ? left : right;
136
118
  }
@@ -40,6 +40,11 @@ const RETRY_REASON_MATCHERS = [
40
40
  code: constants_1.RETRY_REASON.StatusRevokeDelay
41
41
  }
42
42
  ];
43
+ /**
44
+ * Maps a decryption/Signal error to the appropriate {@link WaRetryReasonCode}
45
+ * so an outbound retry receipt carries the correct `error` attribute.
46
+ * Returns `undefined` when no known reason matches.
47
+ */
43
48
  function mapRetryReasonFromError(error) {
44
49
  const message = (0, primitives_1.toError)(error).message.toLowerCase();
45
50
  for (const matcher of RETRY_REASON_MATCHERS) {
@@ -49,5 +54,5 @@ function mapRetryReasonFromError(error) {
49
54
  return matcher.code;
50
55
  }
51
56
  }
52
- return constants_1.RETRY_REASON.UnknownError;
57
+ return undefined;
53
58
  }
@@ -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) {
@@ -330,9 +377,12 @@ class SignalDeviceSyncApi {
330
377
  return [];
331
378
  }
332
379
  const parsedNormalizedUser = (0, jid_1.splitJid)(normalizedUserJid);
333
- const parsedRawUser = (0, jid_1.splitJid)(rawUserJid);
380
+ const rawAtIndex = rawUserJid.indexOf('@');
381
+ const rawServer = rawAtIndex >= 1 && rawAtIndex < rawUserJid.length - 1
382
+ ? rawUserJid.slice(rawAtIndex + 1)
383
+ : parsedNormalizedUser.server;
334
384
  const dedup = new Set();
335
- 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)) {
336
386
  const parsedId = deviceNode.attrs.id
337
387
  ? Number.parseInt(deviceNode.attrs.id, 10)
338
388
  : Number.NaN;
@@ -341,7 +391,7 @@ class SignalDeviceSyncApi {
341
391
  }
342
392
  const isHostedDevice = (0, jid_1.isHostedDeviceId)(parsedId) || deviceNode.attrs.is_hosted === 'true';
343
393
  dedup.add((0, jid_1.buildDeviceJid)(parsedNormalizedUser.user, parsedNormalizedUser.server, parsedId, {
344
- rawServer: parsedRawUser.server,
394
+ rawServer,
345
395
  isHosted: isHostedDevice
346
396
  }));
347
397
  }