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
@@ -0,0 +1,27 @@
1
+ import type { Logger } from '../../infra/log/types';
2
+ import type { WaGroupMetadataSnapshot, WaGroupMetadataStore } from '../contracts/group-metadata.store';
3
+ export interface WaGroupMetadataMemoryStoreOptions {
4
+ readonly maxGroups?: number;
5
+ /**
6
+ * Logger for capacity-saturation warnings. Emits a single `warn` the
7
+ * first time the bounded map evicts an entry; subsequent evictions are
8
+ * silent to avoid spam.
9
+ */
10
+ readonly logger?: Logger;
11
+ }
12
+ export declare class WaGroupMetadataMemoryStore implements WaGroupMetadataStore {
13
+ private readonly records;
14
+ private readonly ttlMs;
15
+ private readonly maxGroups;
16
+ private readonly cleanup;
17
+ private readonly logger;
18
+ private capacityWarned;
19
+ constructor(ttlMs?: number, options?: WaGroupMetadataMemoryStoreOptions);
20
+ private warnCapacity;
21
+ upsertGroupMetadata(snapshot: WaGroupMetadataSnapshot): Promise<void>;
22
+ getGroupMetadata(groupJid: string, nowMs?: number): Promise<WaGroupMetadataSnapshot | null>;
23
+ deleteGroupMetadata(groupJid: string): Promise<number>;
24
+ cleanupExpired(nowMs: number): Promise<number>;
25
+ clear(): Promise<void>;
26
+ destroy(): Promise<void>;
27
+ }
@@ -0,0 +1,18 @@
1
+ import type { SignalAddress } from '../../signal/types';
2
+ import type { WaIdentityStore as WaIdentityStoreContract } from '../contracts/identity.store';
3
+ export interface WaIdentityMemoryStoreOptions {
4
+ readonly maxRemoteIdentities?: number;
5
+ }
6
+ export declare class WaIdentityMemoryStore implements WaIdentityStoreContract {
7
+ private readonly remoteIdentities;
8
+ private readonly maxRemoteIdentities;
9
+ constructor(options?: WaIdentityMemoryStoreOptions);
10
+ getRemoteIdentity(address: SignalAddress): Promise<Uint8Array | null>;
11
+ getRemoteIdentities(addresses: readonly SignalAddress[]): Promise<readonly (Uint8Array | null)[]>;
12
+ setRemoteIdentity(address: SignalAddress, identityKey: Uint8Array): Promise<void>;
13
+ setRemoteIdentities(entries: readonly {
14
+ readonly address: SignalAddress;
15
+ readonly identityKey: Uint8Array;
16
+ }[]): Promise<void>;
17
+ clear(): Promise<void>;
18
+ }
@@ -0,0 +1,31 @@
1
+ import type { Logger } from '../../infra/log/types';
2
+ import type { WaMessageSecretEntry, WaMessageSecretStore } from '../contracts/message-secret.store';
3
+ export interface WaMessageSecretMemoryStoreOptions {
4
+ readonly maxSecrets?: number;
5
+ /**
6
+ * Logger for capacity-saturation warnings. Emits a single `warn` the
7
+ * first time the bounded map evicts an entry; subsequent evictions are
8
+ * silent to avoid spam.
9
+ */
10
+ readonly logger?: Logger;
11
+ }
12
+ export declare class WaMessageSecretMemoryStore implements WaMessageSecretStore {
13
+ private readonly secrets;
14
+ private readonly ttlMs;
15
+ private readonly maxSecrets;
16
+ private readonly cleanup;
17
+ private readonly logger;
18
+ private capacityWarned;
19
+ constructor(ttlMs?: number, options?: WaMessageSecretMemoryStoreOptions);
20
+ private warnCapacity;
21
+ get(messageId: string, nowMs?: number): Promise<WaMessageSecretEntry | null>;
22
+ getBatch(messageIds: readonly string[], nowMs?: number): Promise<readonly (WaMessageSecretEntry | null)[]>;
23
+ set(messageId: string, entry: WaMessageSecretEntry): Promise<void>;
24
+ setBatch(entries: readonly {
25
+ readonly messageId: string;
26
+ readonly entry: WaMessageSecretEntry;
27
+ }[]): Promise<void>;
28
+ cleanupExpired(nowMs: number): Promise<number>;
29
+ clear(): Promise<void>;
30
+ destroy(): Promise<void>;
31
+ }
@@ -1,4 +1,4 @@
1
- import type { WaMessageStore as Contract, WaStoredMessageRecord } from '../../contracts/message.store';
1
+ import type { WaMessageStore as Contract, WaStoredMessageRecord } from '../contracts/message.store';
2
2
  export interface WaMessageMemoryStoreOptions {
3
3
  readonly maxMessages?: number;
4
4
  }
@@ -0,0 +1,23 @@
1
+ import type { PreKeyRecord } from '../../signal/types';
2
+ import type { WaPreKeyStore as WaPreKeyStoreContract } from '../contracts/pre-key.store';
3
+ export interface WaPreKeyMemoryStoreOptions {
4
+ readonly maxPreKeys?: number;
5
+ }
6
+ export declare class WaPreKeyMemoryStore implements WaPreKeyStoreContract {
7
+ private readonly preKeys;
8
+ private readonly uploadedPreKeys;
9
+ private serverHasPreKeys;
10
+ private nextPreKeyId;
11
+ private readonly maxPreKeys;
12
+ constructor(options?: WaPreKeyMemoryStoreOptions);
13
+ putPreKey(record: PreKeyRecord): Promise<void>;
14
+ getOrGenPreKeys(count: number, generator: (keyId: number) => PreKeyRecord | Promise<PreKeyRecord>): Promise<readonly PreKeyRecord[]>;
15
+ getPreKeyById(keyId: number): Promise<PreKeyRecord | null>;
16
+ getPreKeysById(keyIds: readonly number[]): Promise<readonly (PreKeyRecord | null)[]>;
17
+ consumePreKeyById(keyId: number): Promise<PreKeyRecord | null>;
18
+ getOrGenSinglePreKey(generator: (keyId: number) => PreKeyRecord | Promise<PreKeyRecord>): Promise<PreKeyRecord>;
19
+ markKeyAsUploaded(keyId: number): Promise<void>;
20
+ setServerHasPreKeys(value: boolean): Promise<void>;
21
+ getServerHasPreKeys(): Promise<boolean>;
22
+ clear(): Promise<void>;
23
+ }
@@ -1,4 +1,4 @@
1
- import type { WaPrivacyTokenStore, WaStoredPrivacyTokenRecord } from '../../contracts/privacy-token.store';
1
+ import type { WaPrivacyTokenStore, WaStoredPrivacyTokenRecord } from '../contracts/privacy-token.store';
2
2
  export declare class WaPrivacyTokenMemoryStore implements WaPrivacyTokenStore {
3
3
  private readonly records;
4
4
  private readonly maxEntries;
@@ -1,12 +1,31 @@
1
- import type { WaRetryOutboundMessageRecord, WaRetryOutboundState } from '../../../retry/types';
2
- import type { WaRetryStore } from '../../contracts/retry.store';
1
+ import type { Logger } from '../../infra/log/types';
2
+ import type { WaRetryOutboundMessageRecord, WaRetryOutboundState } from '../../retry/types';
3
+ import type { WaRetryStore } from '../contracts/retry.store';
4
+ export interface WaRetryMemoryStoreOptions {
5
+ readonly maxOutboundMessages?: number;
6
+ readonly maxInboundCounters?: number;
7
+ /**
8
+ * Logger for capacity-saturation warnings. Emits a single `warn` the
9
+ * first time either bounded map evicts an entry (signals you've hit
10
+ * `maxOutboundMessages` / `maxInboundCounters`). Subsequent evictions
11
+ * are silent to avoid spam.
12
+ */
13
+ readonly logger?: Logger;
14
+ }
3
15
  export declare class WaRetryMemoryStore implements WaRetryStore {
4
16
  private readonly outboundMessages;
5
17
  private readonly eligibleSets;
6
18
  private readonly inboundCounters;
7
19
  private readonly ttlMs;
8
- private readonly cleanupTimer;
9
- constructor(ttlMs?: number);
20
+ private readonly maxOutboundMessages;
21
+ private readonly maxInboundCounters;
22
+ private readonly cleanup;
23
+ private readonly logger;
24
+ private outboundCapacityWarned;
25
+ private inboundCapacityWarned;
26
+ constructor(ttlMs?: number, options?: WaRetryMemoryStoreOptions);
27
+ private warnOutboundCapacity;
28
+ private warnInboundCapacity;
10
29
  getTtlMs(): number;
11
30
  supportsRawReplayPayload(): boolean;
12
31
  getOutboundRequesterStatus(messageId: string, requesterDeviceJid: string): Promise<{
@@ -1,5 +1,5 @@
1
- import type { SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress } from '../../../signal/types';
2
- import type { WaSenderKeyStore as WaSenderKeyStoreContract } from '../../contracts/sender-key.store';
1
+ import type { SenderKeyDistributionRecord, SenderKeyRecord, SignalAddress } from '../../signal/types';
2
+ import type { WaSenderKeyStore as WaSenderKeyStoreContract } from '../contracts/sender-key.store';
3
3
  export interface WaSenderKeyMemoryStoreOptions {
4
4
  readonly maxSenderKeys?: number;
5
5
  readonly maxSenderDistributions?: number;
@@ -0,0 +1,21 @@
1
+ import type { SignalAddress, SignalSessionRecord } from '../../signal/types';
2
+ import type { WaSessionStore as WaSessionStoreContract } from '../contracts/session.store';
3
+ export interface WaSessionMemoryStoreOptions {
4
+ readonly maxSessions?: number;
5
+ }
6
+ export declare class WaSessionMemoryStore implements WaSessionStoreContract {
7
+ private readonly signalSessions;
8
+ private readonly maxSessions;
9
+ constructor(options?: WaSessionMemoryStoreOptions);
10
+ hasSession(address: SignalAddress): Promise<boolean>;
11
+ hasSessions(addresses: readonly SignalAddress[]): Promise<readonly boolean[]>;
12
+ getSession(address: SignalAddress): Promise<SignalSessionRecord | null>;
13
+ getSessionsBatch(addresses: readonly SignalAddress[]): Promise<readonly (SignalSessionRecord | null)[]>;
14
+ setSession(address: SignalAddress, session: SignalSessionRecord): Promise<void>;
15
+ setSessionsBatch(entries: readonly {
16
+ readonly address: SignalAddress;
17
+ readonly session: SignalSessionRecord;
18
+ }[]): Promise<void>;
19
+ deleteSession(address: SignalAddress): Promise<void>;
20
+ clear(): Promise<void>;
21
+ }
@@ -0,0 +1,16 @@
1
+ import type { RegistrationInfo, SignedPreKeyRecord } from '../../signal/types';
2
+ import type { WaSignalStore as WaSignalStoreContract } from '../contracts/signal.store';
3
+ export declare class WaSignalMemoryStore implements WaSignalStoreContract {
4
+ private registrationInfo;
5
+ private signedPreKey;
6
+ private signedPreKeyRotationTs;
7
+ constructor();
8
+ getRegistrationInfo(): Promise<RegistrationInfo | null>;
9
+ setRegistrationInfo(info: RegistrationInfo): Promise<void>;
10
+ getSignedPreKey(): Promise<SignedPreKeyRecord | null>;
11
+ setSignedPreKey(record: SignedPreKeyRecord): Promise<void>;
12
+ getSignedPreKeyById(keyId: number): Promise<SignedPreKeyRecord | null>;
13
+ setSignedPreKeyRotationTs(value: number | null): Promise<void>;
14
+ getSignedPreKeyRotationTs(): Promise<number | null>;
15
+ clear(): Promise<void>;
16
+ }
@@ -1,4 +1,4 @@
1
- import type { WaStoredThreadRecord, WaThreadStore as Contract } from '../../contracts/thread.store';
1
+ import type { WaThreadStore as Contract, WaStoredThreadRecord } from '../contracts/thread.store';
2
2
  export interface WaThreadMemoryStoreOptions {
3
3
  readonly maxThreads?: number;
4
4
  }
@@ -1,10 +1,14 @@
1
1
  import type { WaContactStore } from './contracts/contact.store';
2
2
  import type { WaDeviceListStore } from './contracts/device-list.store';
3
+ import type { WaGroupMetadataStore } from './contracts/group-metadata.store';
4
+ import type { WaMessageSecretStore } from './contracts/message-secret.store';
3
5
  import type { WaMessageStore } from './contracts/message.store';
4
- import type { WaParticipantsStore } from './contracts/participants.store';
6
+ import type { WaRetryStore } from './contracts/retry.store';
5
7
  import type { WaThreadStore } from './contracts/thread.store';
8
+ export declare const NOOP_MESSAGE_SECRET_STORE: WaMessageSecretStore;
6
9
  export declare const NOOP_MESSAGE_STORE: WaMessageStore;
7
10
  export declare const NOOP_THREAD_STORE: WaThreadStore;
8
11
  export declare const NOOP_CONTACT_STORE: WaContactStore;
9
- export declare const NOOP_PARTICIPANTS_STORE: WaParticipantsStore;
12
+ export declare const NOOP_RETRY_STORE: WaRetryStore;
13
+ export declare const NOOP_GROUP_METADATA_STORE: WaGroupMetadataStore;
10
14
  export declare const NOOP_DEVICE_LIST_STORE: WaDeviceListStore;
@@ -1,12 +1,17 @@
1
+ import type { Logger } from '../infra/log/types';
1
2
  import type { WaAppStateStore } from './contracts/appstate.store';
2
3
  import type { WaAuthStore } from './contracts/auth.store';
3
4
  import type { WaContactStore } from './contracts/contact.store';
4
5
  import type { WaDeviceListStore } from './contracts/device-list.store';
6
+ import type { WaGroupMetadataStore } from './contracts/group-metadata.store';
7
+ import type { WaIdentityStore } from './contracts/identity.store';
8
+ import type { WaMessageSecretStore } from './contracts/message-secret.store';
5
9
  import type { WaMessageStore } from './contracts/message.store';
6
- import type { WaParticipantsStore } from './contracts/participants.store';
10
+ import type { WaPreKeyStore } from './contracts/pre-key.store';
7
11
  import type { WaPrivacyTokenStore } from './contracts/privacy-token.store';
8
12
  import type { WaRetryStore } from './contracts/retry.store';
9
13
  import type { WaSenderKeyStore } from './contracts/sender-key.store';
14
+ import type { WaSessionStore } from './contracts/session.store';
10
15
  import type { WaSignalStore } from './contracts/signal.store';
11
16
  import type { WaThreadStore } from './contracts/thread.store';
12
17
  export type WithDestroyLifecycle<T> = T & {
@@ -15,12 +20,16 @@ export type WithDestroyLifecycle<T> = T & {
15
20
  export interface WaStoreSession {
16
21
  readonly auth: WaAuthStore;
17
22
  readonly signal: WaSignalStore;
23
+ readonly preKey: WaPreKeyStore;
24
+ readonly session: WaSessionStore;
25
+ readonly identity: WaIdentityStore;
18
26
  readonly senderKey: WaSenderKeyStore;
19
27
  readonly appState: WaAppStateStore;
20
28
  readonly retry: WaRetryStore;
21
- readonly participants: WaParticipantsStore;
29
+ readonly groupMetadata: WaGroupMetadataStore;
22
30
  readonly deviceList: WaDeviceListStore;
23
31
  readonly messages: WaMessageStore;
32
+ readonly messageSecret: WaMessageSecretStore;
24
33
  readonly threads: WaThreadStore;
25
34
  readonly contacts: WaContactStore;
26
35
  readonly privacyToken: WaPrivacyTokenStore;
@@ -36,6 +45,9 @@ export interface WaStoreBackend {
36
45
  readonly stores: {
37
46
  readonly auth: (sessionId: string) => WaAuthStore;
38
47
  readonly signal: (sessionId: string) => WaSignalStore;
48
+ readonly preKey: (sessionId: string) => WaPreKeyStore;
49
+ readonly session: (sessionId: string) => WaSessionStore;
50
+ readonly identity: (sessionId: string) => WaIdentityStore;
39
51
  readonly senderKey: (sessionId: string) => WaSenderKeyStore;
40
52
  readonly appState: (sessionId: string) => WaAppStateStore;
41
53
  readonly messages: (sessionId: string) => WaMessageStore;
@@ -45,38 +57,287 @@ export interface WaStoreBackend {
45
57
  };
46
58
  readonly caches: {
47
59
  readonly retry: (sessionId: string) => WaRetryStore;
48
- readonly participants: (sessionId: string) => WaParticipantsStore;
60
+ readonly groupMetadata: (sessionId: string) => WaGroupMetadataStore;
49
61
  readonly deviceList: (sessionId: string) => WaDeviceListStore;
62
+ readonly messageSecret: (sessionId: string) => WaMessageSecretStore;
50
63
  };
51
64
  }
52
65
  export type WaStoreDomain = keyof WaStoreBackend['stores'];
53
66
  export type WaCacheDomain = keyof WaStoreBackend['caches'];
54
67
  export interface WaCreateStoreOptions<B extends string = string> {
68
+ /**
69
+ * Named persistent backends (e.g. `{ sqlite: createSqliteStore(...) }`).
70
+ * Each key here is a backend id you can reference under {@link providers}
71
+ * and {@link cacheProviders}. The literal strings `'memory'` and `'none'`
72
+ * are reserved and don't need a backend entry.
73
+ */
55
74
  readonly backends?: Readonly<Record<B, WaStoreBackend>>;
75
+ /**
76
+ * Per-domain provider selection for the persistent (non-cache) stores.
77
+ * Every domain falls back to `'memory'` (or `'none'` for the mailbox
78
+ * domains) when omitted.
79
+ */
56
80
  readonly providers?: {
81
+ /**
82
+ * Holds the device's pairing credentials: noise key pair, signed
83
+ * identity, registration info, signed prekey, ADV secret, server
84
+ * static key, routing info, account metadata. **This is what proves
85
+ * "I am this paired device" to WhatsApp.** Lose it and the next
86
+ * connect has to re-pair from scratch (QR/link-code). Default:
87
+ * `'memory'` – fine for tests / one-shot scripts, but persist it
88
+ * (e.g. `@zapo-js/store-sqlite`) in production so the device
89
+ * survives a process restart.
90
+ */
57
91
  readonly auth?: B | 'memory';
92
+ /**
93
+ * Signal protocol identities and the meta row (`server_has_prekeys`,
94
+ * `next_prekey_id`, signed-prekey rotation timestamp). Splits with
95
+ * {@link session}/{@link identity}/{@link preKey} in backends that
96
+ * partition the Signal state; some backends collapse them. Default:
97
+ * `'memory'` – fine for short-lived sessions; persist it in
98
+ * production so re-keying / digest checks survive restarts.
99
+ */
58
100
  readonly signal?: B | 'memory';
101
+ /**
102
+ * Signal one-time prekey pool. The server hands these out to peers
103
+ * starting fresh sessions with you. Losing them forces fallback to
104
+ * the signed-prekey-only flow (slower / less forward-secret per
105
+ * session). Default: `'memory'`.
106
+ */
107
+ readonly preKey?: B | 'memory';
108
+ /**
109
+ * Signal sessions (the per-peer Double Ratchet state). Losing this
110
+ * forces a transparent re-handshake on the next message to/from that
111
+ * peer – your identity key doesn't change, so no "security code
112
+ * changed" notice fires on the peer. Default: `'memory'`.
113
+ */
114
+ readonly session?: B | 'memory';
115
+ /**
116
+ * Remote identity keys per peer device. The library compares the
117
+ * stored key against the server-reported one on every send to detect
118
+ * device-takeover (`identity mismatch`). Default: `'memory'`.
119
+ */
120
+ readonly identity?: B | 'memory';
121
+ /**
122
+ * Sender-key state for group encryption: your own outgoing sender
123
+ * key per group + incoming sender keys from other participants + the
124
+ * delivery bookkeeping. Losing it makes you re-distribute your
125
+ * sender key to every member on the next group send. Default:
126
+ * `'memory'`.
127
+ */
59
128
  readonly senderKey?: B | 'memory';
129
+ /**
130
+ * App-state sync keys + per-collection version/hash/index map
131
+ * (mute, archive, pin, contacts, labels, ...). This is what lets
132
+ * the lib emit `mutation` events and keep parity with the phone.
133
+ * Wiping it triggers a full re-sync on next connect (slow, lots of
134
+ * traffic). Default: `'memory'`.
135
+ */
60
136
  readonly appState?: B | 'memory';
137
+ /**
138
+ * Optional archive of every message you received/sent. Required if
139
+ * you want to call `client.message.send(..., { quote })` later for
140
+ * messages this device never had in RAM, or to look up message
141
+ * secrets for addon decryption after a restart. Default: `'none'`
142
+ * (no archive – events fire but aren't stored).
143
+ */
61
144
  readonly messages?: B | 'memory' | 'none';
145
+ /**
146
+ * Per-chat thread metadata (last message id/time, unread count,
147
+ * disappearing-mode setting). Used by some UIs to render a chat
148
+ * list; not required for messaging. Default: `'none'`.
149
+ */
62
150
  readonly threads?: B | 'memory' | 'none';
151
+ /**
152
+ * Contact book mirror (push names, phone numbers, business labels).
153
+ * Populated by app-state mutations and history sync. Not required
154
+ * for messaging but useful for display names without an extra
155
+ * profile fetch. Default: `'none'`.
156
+ */
63
157
  readonly contacts?: B | 'memory' | 'none';
158
+ /**
159
+ * Trusted-contact-token cache – short-lived tokens the lib issues
160
+ * to peers so they can verify that messages from you are authentic.
161
+ * Persisting avoids re-issuing on every reconnect (saves IQs).
162
+ * Default: `'memory'`.
163
+ */
64
164
  readonly privacyToken?: B | 'memory';
65
165
  };
166
+ /**
167
+ * Provider selection for the bounded cache domains – TTL-evicted state
168
+ * the library re-derives on demand if missing. All default to
169
+ * `'memory'`. Set a domain to `'none'` to disable that cache entirely
170
+ * (the lib will keep working but re-fetch / re-compute every time);
171
+ * point at a `B` backend when you want the cache to survive a process
172
+ * restart (typically only useful for `retry`).
173
+ */
66
174
  readonly cacheProviders?: {
67
- readonly retry?: B | 'memory';
68
- readonly participants?: B | 'memory' | 'none';
175
+ /**
176
+ * Outbound-message replay cache plus inbound retry-counters. When
177
+ * the peer sends a `<receipt type="retry">` asking for a re-send,
178
+ * the lib looks up the stored payload here and replays it without
179
+ * re-encrypting from scratch. Losing this means retry receipts that
180
+ * arrive after restart get dropped (peer falls back to a placeholder
181
+ * message). Default: `'memory'`.
182
+ */
183
+ readonly retry?: B | 'memory' | 'none';
184
+ /**
185
+ * Group metadata (subject, participants, settings) keyed by group
186
+ * JID. Populated by `client.group.queryGroupMetadata`/server pushes
187
+ * and consumed during fan-out so the library knows who to encrypt
188
+ * to. Disabling forces a metadata IQ on every group send – the
189
+ * server **rate-limits** this aggressively and active group accounts
190
+ * will get throttled (or temporarily blocked) without a cache.
191
+ * Default: `'memory'`.
192
+ */
193
+ readonly groupMetadata?: B | 'memory' | 'none';
194
+ /**
195
+ * Per-user device list (which `:device` JIDs each contact has online).
196
+ * Populated by usync queries; consumed on every send to pick the
197
+ * fan-out set. Disabling forces a usync round-trip per recipient on
198
+ * every send. Default: `'memory'`.
199
+ */
69
200
  readonly deviceList?: B | 'memory' | 'none';
201
+ /**
202
+ * Message-secret cache: maps `stanzaId → { senderJid, secret }` so
203
+ * addon decryption (poll votes, reactions, encrypted edits, ...) can
204
+ * find the parent message's 32-byte secret. Falls back to the
205
+ * `messages` store when set. Disable only if `messages` is persistent
206
+ * – otherwise addon auto-decrypt loses parents after restart.
207
+ * Default: `'memory'`.
208
+ */
209
+ readonly messageSecret?: B | 'memory' | 'none';
70
210
  };
211
+ /**
212
+ * Opt-in in-process read-through cache in front of a *persistent* backend
213
+ * for the hot signal domains. Each enabled domain wraps its backend store
214
+ * with a bounded-LRU L1 (the in-tree memory provider) so repeated reads of
215
+ * the same peer on the send/recv path skip the backend round-trip; writes
216
+ * stay write-through (or invalidate-on-write for `privacyToken`) so the
217
+ * backend remains authoritative.
218
+ *
219
+ * A domain flag is a no-op unless that domain resolves to a real backend
220
+ * in {@link providers} - caching a `'memory'`/`'none'` provider in front of
221
+ * itself buys nothing and is skipped.
222
+ *
223
+ * **Single-writer assumption:** the L1 is per-process and has no
224
+ * cross-process invalidation channel. Enable this only when a single
225
+ * process owns a given `sessionId`'s backend rows (the library's
226
+ * connection model). Do **not** enable it when multiple processes share
227
+ * one backend for the *same* session - another process's writes would
228
+ * leave this cache stale. Different sessions sharing one backend are fine.
229
+ * All flags default to `false`.
230
+ *
231
+ * Distinct from {@link cacheProviders}: that selects *where* the bounded
232
+ * cache domains live; this layers an in-memory read cache *in front of*
233
+ * the persistent domains.
234
+ *
235
+ * Only the four domains below are exposed. The other persistent domains
236
+ * are deliberately excluded, each for a verified reason:
237
+ * - `signal`: the per-send `getRegistrationInfo` read is already memoized
238
+ * write-through inside the signal lock (`signal.lock.ts`), and the
239
+ * remaining reads (`getSignedPreKey`/`getSignedPreKeyById`/rotation ts)
240
+ * change only on the rare signed-prekey rotation and fire on inbound
241
+ * session-init, not per message - a second cache would add nothing.
242
+ * - `appState`: the sync client already caches collection state for the
243
+ * sync-context lifetime, the only scope where reads both repeat and stay
244
+ * coherent. Across sync cycles the version is incremented and persisted,
245
+ * so a persistent cache yields ~0 hits, and the version is sent on the
246
+ * wire (server-authoritative) - a stale one forces a refetch loop.
247
+ * - `preKey`: one-time prekeys are read exactly once then consumed
248
+ * (deleted) on the inbound path, so there is nothing to re-read; serving
249
+ * a consumed prekey from a stale cache would reuse a one-time key and
250
+ * break forward secrecy. There is no safe, useful read here.
251
+ * - `auth` is loaded once per connect and kept in memory; the mailbox
252
+ * domains (`messages`/`threads`/`contacts`) are cold, large reads off
253
+ * the crypto path with write-behind already; and the cache domains
254
+ * (retry/groupMetadata/deviceList/messageSecret) default to in-process
255
+ * memory already, so an L1 in front would be a cache over a cache.
256
+ */
257
+ readonly cacheLayer?: {
258
+ /** Cache Signal Double-Ratchet sessions (key→record). Write-through. */
259
+ readonly session?: boolean;
260
+ /** Cache remote identity keys (key→bytes). Write-through. */
261
+ readonly identity?: boolean;
262
+ /** Cache per-(group, sender) sender keys + distributions. Write-through. */
263
+ readonly senderKey?: boolean;
264
+ /** Cache trusted-contact tokens (jid→record). Invalidate-on-write. */
265
+ readonly privacyToken?: boolean;
266
+ /**
267
+ * Per-domain L1 entry caps (LRU eviction once exceeded). Defaults to
268
+ * the matching memory-provider default when unset.
269
+ */
270
+ readonly limits?: {
271
+ readonly session?: number;
272
+ readonly identity?: number;
273
+ readonly senderKey?: number;
274
+ readonly privacyToken?: number;
275
+ };
276
+ };
277
+ /**
278
+ * Memory-store tuning for the built-in `'memory'` providers. `limits`
279
+ * caps per-domain entry counts (LRU eviction once exceeded); `cacheTtlMs`
280
+ * controls how long cache entries live before being evicted. Tune these
281
+ * up for high-traffic accounts (lots of groups / contacts) and down on
282
+ * memory-constrained runtimes.
283
+ */
284
+ /**
285
+ * Logger for store-wide events: provider topology at boot, in-memory
286
+ * capacity saturation warnings, and downstream slow-operation warnings
287
+ * cascaded through backend factories. When unset, the store layer is
288
+ * silent. Backend packages (e.g. `@zapo-js/store-sqlite`,
289
+ * `@zapo-js/store-redis`) receive a `child({ scope: 'store', provider:
290
+ * '<name>' })` if they accept the same convention in their own factory.
291
+ */
292
+ readonly logger?: Logger;
71
293
  readonly memory?: {
72
294
  readonly limits?: WaStoreMemoryLimitSelection;
73
295
  readonly cacheTtlMs?: {
296
+ /**
297
+ * Retry tracker TTL – how long an outbound replay payload stays
298
+ * resendable after the original send. Default: 60 000 (1 min).
299
+ * Match this to your worst-case clock skew + network delay
300
+ * between you and slow peers; longer = more replay coverage at
301
+ * the cost of more memory.
302
+ */
74
303
  readonly retryMs?: number;
75
- readonly participantsMs?: number;
304
+ /**
305
+ * Group metadata cache TTL – how long a cached subject/
306
+ * participant list is trusted before a fresh IQ is issued.
307
+ * Default: 300 000 (5 min). Shorter = fresher participant lists,
308
+ * more IQ traffic; longer = better throughput, slightly stale
309
+ * data between server-pushed group events.
310
+ */
311
+ readonly groupMetadataMs?: number;
312
+ /**
313
+ * Device list cache TTL – how long a cached per-user device set
314
+ * is reused before re-running usync. Default: 300 000 (5 min).
315
+ * Devices changing during this window are still picked up via
316
+ * the push-notification path; the TTL only affects the
317
+ * proactive refresh window.
318
+ */
76
319
  readonly deviceListMs?: number;
320
+ /**
321
+ * Message-secret TTL – how long the addon-decryption cache
322
+ * keeps a parent message's secret around. Default: 1 800 000
323
+ * (30 min). Cover the typical reaction/edit window for active
324
+ * chats; addons arriving after expiry fall back to the
325
+ * `messages` store lookup (or quietly fail when it's `'none'`).
326
+ */
327
+ readonly messageSecretMs?: number;
77
328
  };
78
329
  };
79
330
  }
331
+ /**
332
+ * Strict overload shape for {@link createStore} when at least one backend
333
+ * is registered. Every persistence domain in `providers` is `Required` -
334
+ * the compiler refuses partial coverage and the IDE highlights the missing
335
+ * keys. Cache domains stay opt-in (default `'memory'`).
336
+ */
337
+ export interface WaCreateStoreOptionsStrict<B extends string> extends Omit<WaCreateStoreOptions<B>, 'backends' | 'providers'> {
338
+ readonly backends: Readonly<Record<B, WaStoreBackend>>;
339
+ readonly providers: Required<NonNullable<WaCreateStoreOptions<B>['providers']>>;
340
+ }
80
341
  export interface WaStoreMemoryLimitSelection {
81
342
  readonly appStateSyncKeys?: number;
82
343
  readonly appStateCollectionEntries?: number;
@@ -85,9 +346,12 @@ export interface WaStoreMemoryLimitSelection {
85
346
  readonly signalRemoteIdentities?: number;
86
347
  readonly senderKeys?: number;
87
348
  readonly senderDistributions?: number;
88
- readonly participantsGroups?: number;
349
+ readonly groupMetadataGroups?: number;
89
350
  readonly deviceListUsers?: number;
90
351
  readonly messages?: number;
352
+ readonly messageSecrets?: number;
353
+ readonly retryOutboundMessages?: number;
354
+ readonly retryInboundCounters?: number;
91
355
  readonly threads?: number;
92
356
  readonly contacts?: number;
93
357
  readonly privacyTokens?: number;
@@ -2,6 +2,11 @@ import type { Logger } from '../infra/log/types';
2
2
  import type { WaCommsConfig, WaCommsState } from './types';
3
3
  type StanzaHandler = (payload: Uint8Array) => void | Promise<void>;
4
4
  type InflateFrame = (compressed: Uint8Array) => Uint8Array | Promise<Uint8Array>;
5
+ /**
6
+ * Owns the WebSocket + Noise handshake lifecycle: opens the socket, drives
7
+ * the noise pairing/login exchange, persists routing-info/server-static
8
+ * updates, and delivers post-handshake binary frames to the caller.
9
+ */
5
10
  export declare class WaComms {
6
11
  private readonly config;
7
12
  private readonly logger;
@@ -1,10 +1,16 @@
1
1
  import type { Logger } from '../infra/log/types';
2
2
  import type { SocketCloseInfo, SocketOpenInfo, WaSocketConfig, WaSocketHandlers } from './types';
3
+ /**
4
+ * Thin wrapper around a `RawWebSocket` (or Node `ws` constructor) used by
5
+ * {@link WaComms}. Iterates the configured URL list on failure and applies a
6
+ * connect/idle timeout.
7
+ */
3
8
  export declare class WaWebSocket {
4
9
  private readonly config;
5
10
  private readonly socketUrls;
6
11
  private readonly logger;
7
12
  private readonly webSocketCtor;
13
+ private readonly customWebSocketCtor;
8
14
  private readonly socketRuntime;
9
15
  private readonly connectingSockets;
10
16
  private handlers;
@@ -13,7 +13,13 @@ export declare const BINARY_8 = 252;
13
13
  export declare const BINARY_20 = 253;
14
14
  export declare const BINARY_32 = 254;
15
15
  export declare const NIBBLE_8 = 255;
16
- export declare const NIBBLE_ALPHABET: readonly string[];
17
- export declare const HEX_ALPHABET: readonly string[];
16
+ export declare const JID_U_DOMAIN_TYPE_PN = 0;
17
+ export declare const JID_U_DOMAIN_TYPE_LID = 1;
18
+ export declare const JID_U_DOMAIN_TYPE_HOSTED = 128;
19
+ export declare const JID_U_DOMAIN_TYPE_HOSTED_LID = 129;
20
+ export declare const JID_U_DOMAIN_TYPE_HOSTED_MASK = 128;
21
+ export declare const JID_U_DOMAIN_TYPE_LID_MASK = 1;
22
+ export declare const NIBBLE_ALPHABET: readonly ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-", ".", "�", "�", "�", "�"];
23
+ export declare const HEX_ALPHABET: readonly ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
18
24
  export declare const SINGLE_BYTE_TOKEN_MAP: ReadonlyMap<string, number>;
19
25
  export declare const DICTIONARY_TOKEN_MAPS: readonly ReadonlyMap<string, number>[];
@@ -1,3 +1,8 @@
1
1
  import type { BinaryNode } from '../types';
2
+ /** Decodes raw WhatsApp binary node bytes into a {@link BinaryNode}. */
2
3
  export declare function decodeBinaryNode(data: Uint8Array): BinaryNode;
4
+ /**
5
+ * Decodes a framed stanza: reads the 1-byte flag, inflates the body when the
6
+ * `0x02` compression bit is set, then parses the result as a {@link BinaryNode}.
7
+ */
3
8
  export declare function decodeBinaryNodeStanza(stanza: Uint8Array): Promise<BinaryNode>;
@@ -1,3 +1,8 @@
1
1
  import type { BinaryNode } from '../types';
2
+ /** Encodes a {@link BinaryNode} into its raw WhatsApp binary representation. */
2
3
  export declare function encodeBinaryNode(node: BinaryNode): Uint8Array;
4
+ /**
5
+ * Encodes a {@link BinaryNode} as a transport stanza – prefixes the bytes
6
+ * with the 1-byte flag (`0x00`) the WebSocket framing expects.
7
+ */
3
8
  export declare function encodeBinaryNodeStanza(node: BinaryNode): Uint8Array;