zapo-js 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -177
  3. package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  4. package/dist/appstate/index.js +7 -6
  5. package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
  6. package/dist/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  7. package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -53
  8. package/dist/appstate/utils.js +16 -0
  9. package/dist/appstate-spec.js +89 -0
  10. package/dist/auth/WaAuthClient.js +100 -5
  11. package/dist/auth/credentials-flow.js +19 -7
  12. package/dist/auth/pairing/WaPairingFlow.js +33 -24
  13. package/dist/auth/pairing/pairing-code-crypto.js +16 -18
  14. package/dist/client/WaClient.js +342 -473
  15. package/dist/client/WaClientFactory.js +279 -78
  16. package/dist/client/connection/WaConnectionManager.js +28 -11
  17. package/dist/client/coordinators/WaAbPropsCoordinator.js +1 -2
  18. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +663 -143
  19. package/dist/client/coordinators/WaBotCoordinator.js +345 -0
  20. package/dist/client/coordinators/WaBroadcastListCoordinator.js +20 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +81 -171
  22. package/dist/client/coordinators/WaEmailCoordinator.js +1 -0
  23. package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
  24. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +97 -12
  25. package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
  26. package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
  27. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +682 -204
  28. package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
  29. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +17 -4
  30. package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
  31. package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
  32. package/dist/client/coordinators/WaProfileCoordinator.js +220 -49
  33. package/dist/client/coordinators/WaRetryCoordinator.js +256 -125
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
  36. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  37. package/dist/client/events/appstate-mutation.js +133 -0
  38. package/dist/client/events/business.js +375 -0
  39. package/dist/client/events/call.js +58 -0
  40. package/dist/client/events/chatstate.js +23 -0
  41. package/dist/client/events/devices.js +15 -16
  42. package/dist/client/{dirty.js → events/dirty.js} +33 -19
  43. package/dist/client/events/group.js +13 -24
  44. package/dist/client/events/identity.js +2 -1
  45. package/dist/client/events/incoming.js +502 -0
  46. package/dist/client/events/mex-notification.js +181 -0
  47. package/dist/client/events/picture.js +33 -0
  48. package/dist/client/events/presence.js +44 -0
  49. package/dist/client/events/receipt.js +26 -0
  50. package/dist/client/media.js +161 -4
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +3 -17
  55. package/dist/client/messaging/link-preview.js +159 -0
  56. package/dist/client/messaging/messages.js +671 -0
  57. package/dist/client/newsletter/admin.js +165 -0
  58. package/dist/client/newsletter/content.js +253 -0
  59. package/dist/client/newsletter/discovery.js +115 -0
  60. package/dist/client/newsletter/messaging.js +197 -0
  61. package/dist/client/newsletter/mex.js +41 -0
  62. package/dist/client/newsletter/parse.js +217 -0
  63. package/dist/client/persistence/WriteBehindPersistence.js +31 -4
  64. package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
  65. package/dist/client/persistence/mailbox.js +104 -0
  66. package/dist/client/tokens/cs-token.js +11 -17
  67. package/dist/crypto/core/hkdf.js +12 -12
  68. package/dist/crypto/core/index.js +6 -8
  69. package/dist/crypto/core/keys.js +1 -8
  70. package/dist/crypto/core/nonce.js +12 -12
  71. package/dist/crypto/core/primitives.js +123 -93
  72. package/dist/crypto/core/random.js +6 -0
  73. package/dist/crypto/core/xeddsa.js +11 -9
  74. package/dist/crypto/curves/Ed25519.js +32 -21
  75. package/dist/crypto/curves/X25519.js +70 -34
  76. package/dist/crypto/curves/constants.js +2 -1
  77. package/dist/crypto/math/constants.js +1 -2
  78. package/dist/crypto/math/mod.js +0 -33
  79. package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +58 -49
  80. package/dist/esm/appstate/index.js +5 -5
  81. package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
  82. package/dist/esm/appstate/{response-parser.js → parsers/response-parser.js} +20 -8
  83. package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +174 -52
  84. package/dist/esm/appstate/utils.js +16 -0
  85. package/dist/esm/appstate-spec.js +79 -0
  86. package/dist/esm/auth/WaAuthClient.js +100 -5
  87. package/dist/esm/auth/credentials-flow.js +18 -6
  88. package/dist/esm/auth/pairing/WaPairingFlow.js +34 -25
  89. package/dist/esm/auth/pairing/pairing-code-crypto.js +12 -14
  90. package/dist/esm/client/WaClient.js +345 -476
  91. package/dist/esm/client/WaClientFactory.js +280 -79
  92. package/dist/esm/client/connection/WaConnectionManager.js +28 -11
  93. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +2 -3
  94. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
  95. package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
  96. package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
  97. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +79 -169
  98. package/dist/esm/client/coordinators/WaEmailCoordinator.js +1 -0
  99. package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
  100. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +98 -13
  101. package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
  102. package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
  103. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +686 -208
  104. package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
  105. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +18 -5
  106. package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
  107. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
  108. package/dist/esm/client/coordinators/WaProfileCoordinator.js +223 -52
  109. package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -127
  110. package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
  111. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +6 -6
  112. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +7 -6
  113. package/dist/esm/client/events/appstate-mutation.js +130 -0
  114. package/dist/esm/client/events/business.js +370 -0
  115. package/dist/esm/client/events/call.js +55 -0
  116. package/dist/esm/client/events/chatstate.js +20 -0
  117. package/dist/esm/client/events/devices.js +15 -16
  118. package/dist/esm/client/{dirty.js → events/dirty.js} +33 -19
  119. package/dist/esm/client/events/group.js +14 -25
  120. package/dist/esm/client/events/identity.js +2 -1
  121. package/dist/esm/client/events/incoming.js +487 -0
  122. package/dist/esm/client/events/mex-notification.js +178 -0
  123. package/dist/esm/client/events/picture.js +30 -0
  124. package/dist/esm/client/events/presence.js +41 -0
  125. package/dist/esm/client/events/receipt.js +23 -0
  126. package/dist/esm/client/media.js +156 -6
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
  129. package/dist/esm/client/messaging/ignore-key.js +126 -0
  130. package/dist/esm/client/messaging/key-protocol.js +3 -17
  131. package/dist/esm/client/messaging/link-preview.js +156 -0
  132. package/dist/esm/client/messaging/messages.js +667 -0
  133. package/dist/esm/client/newsletter/admin.js +162 -0
  134. package/dist/esm/client/newsletter/content.js +249 -0
  135. package/dist/esm/client/newsletter/discovery.js +112 -0
  136. package/dist/esm/client/newsletter/messaging.js +194 -0
  137. package/dist/esm/client/newsletter/mex.js +37 -0
  138. package/dist/esm/client/newsletter/parse.js +200 -0
  139. package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
  140. package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
  141. package/dist/esm/client/persistence/mailbox.js +101 -0
  142. package/dist/esm/client/tokens/cs-token.js +12 -18
  143. package/dist/esm/crypto/core/hkdf.js +14 -14
  144. package/dist/esm/crypto/core/index.js +2 -2
  145. package/dist/esm/crypto/core/keys.js +1 -7
  146. package/dist/esm/crypto/core/nonce.js +11 -11
  147. package/dist/esm/crypto/core/primitives.js +121 -88
  148. package/dist/esm/crypto/core/random.js +6 -0
  149. package/dist/esm/crypto/core/xeddsa.js +11 -9
  150. package/dist/esm/crypto/curves/Ed25519.js +35 -24
  151. package/dist/esm/crypto/curves/X25519.js +72 -36
  152. package/dist/esm/crypto/curves/constants.js +1 -0
  153. package/dist/esm/crypto/math/constants.js +1 -2
  154. package/dist/esm/crypto/math/mod.js +0 -32
  155. package/dist/esm/index.js +7 -2
  156. package/dist/esm/infra/log/ConsoleLogger.js +30 -6
  157. package/dist/esm/infra/log/PinoLogger.js +64 -0
  158. package/dist/esm/infra/log/types.js +4 -2
  159. package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
  160. package/dist/esm/media/constants.js +33 -2
  161. package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
  162. package/dist/esm/media/index.js +4 -3
  163. package/dist/esm/media/sticker/sticker-pack.js +133 -0
  164. package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  165. package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
  166. package/dist/esm/message/WaMessageClient.js +46 -15
  167. package/dist/esm/message/addons/link-preview/builder.js +36 -0
  168. package/dist/esm/message/addons/link-preview/detect.js +55 -0
  169. package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
  170. package/dist/esm/message/addons/link-preview/types.js +1 -0
  171. package/dist/esm/message/context-info.js +123 -0
  172. package/dist/esm/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  173. package/dist/esm/message/{icdc.js → crypto/icdc.js} +5 -7
  174. package/dist/esm/message/crypto/phash.js +133 -0
  175. package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  176. package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  177. package/dist/esm/message/{content.js → encode/content.js} +176 -7
  178. package/dist/esm/message/encode/media-payload.js +42 -0
  179. package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
  180. package/dist/esm/message/index.js +2 -2
  181. package/dist/esm/message/kinds/bot.js +111 -0
  182. package/dist/esm/message/kinds/newsletter.js +244 -0
  183. package/dist/esm/message/kinds/sticker-pack.js +29 -0
  184. package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
  185. package/dist/esm/message/{incoming.js → primitives/incoming.js} +215 -31
  186. package/dist/esm/message/primitives/peer-data-operation.js +93 -0
  187. package/dist/esm/mex.js +1 -0
  188. package/dist/esm/protocol/abprops.js +10 -0
  189. package/dist/esm/protocol/appstate.js +6 -30
  190. package/dist/esm/protocol/auth.js +3 -2
  191. package/dist/esm/protocol/bot.js +77 -0
  192. package/dist/esm/protocol/browser.js +8 -0
  193. package/dist/esm/protocol/business.js +19 -0
  194. package/dist/esm/protocol/call.js +48 -0
  195. package/dist/esm/protocol/constants.js +8 -2
  196. package/dist/esm/protocol/defaults.js +3 -0
  197. package/dist/esm/protocol/index.js +1 -1
  198. package/dist/esm/protocol/jid.js +102 -5
  199. package/dist/esm/protocol/media.js +25 -12
  200. package/dist/esm/protocol/message.js +4 -1
  201. package/dist/esm/protocol/newsletter.js +61 -0
  202. package/dist/esm/protocol/nodes.js +22 -2
  203. package/dist/esm/protocol/notification.js +18 -2
  204. package/dist/esm/protocol/presence.js +13 -0
  205. package/dist/esm/protocol/status.js +6 -0
  206. package/dist/esm/retry/codec.js +5 -0
  207. package/dist/esm/retry/parse.js +20 -38
  208. package/dist/esm/retry/reason.js +5 -0
  209. package/dist/esm/retry/replay.js +131 -37
  210. package/dist/esm/retry/tracker.js +4 -8
  211. package/dist/esm/signal/api/SignalDeviceSyncApi.js +66 -19
  212. package/dist/esm/signal/api/SignalDigestSyncApi.js +7 -2
  213. package/dist/esm/signal/api/SignalIdentitySyncApi.js +9 -0
  214. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
  215. package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
  216. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
  217. package/dist/esm/signal/api/codec.js +52 -1
  218. package/dist/esm/signal/api/prekeys.js +4 -0
  219. package/dist/esm/signal/{crypto → attestation}/WaAdvSignature.js +5 -6
  220. package/dist/esm/signal/constants.js +3 -0
  221. package/dist/esm/signal/encoding.js +6 -289
  222. package/dist/esm/signal/group/SenderKeyChain.js +18 -33
  223. package/dist/esm/signal/group/SenderKeyManager.js +25 -8
  224. package/dist/esm/signal/group/encoding.js +96 -0
  225. package/dist/esm/signal/index.js +4 -1
  226. package/dist/esm/signal/registration/encoding.js +34 -0
  227. package/dist/esm/signal/registration/keygen.js +10 -0
  228. package/dist/esm/signal/registration/utils.js +6 -0
  229. package/dist/esm/signal/session/SignalProtocol.js +113 -11
  230. package/dist/esm/signal/session/SignalRatchet.js +29 -58
  231. package/dist/esm/signal/session/SignalSession.js +7 -14
  232. package/dist/esm/signal/session/encoding.js +173 -0
  233. package/dist/esm/signal/session/resolver.js +139 -30
  234. package/dist/esm/store/cache/identity.cache.js +75 -0
  235. package/dist/esm/store/cache/privacy-token.cache.js +57 -0
  236. package/dist/esm/store/cache/sender-key.cache.js +101 -0
  237. package/dist/esm/store/cache/session.cache.js +92 -0
  238. package/dist/esm/store/contracts/group-metadata.store.js +1 -0
  239. package/dist/esm/store/createStore.js +91 -37
  240. package/dist/esm/store/index.js +15 -14
  241. package/dist/esm/store/locks/contact.lock.js +1 -0
  242. package/dist/esm/store/locks/device-list.lock.js +1 -0
  243. package/dist/esm/store/locks/group-metadata.lock.js +20 -0
  244. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  245. package/dist/esm/store/memory/auth.store.js +24 -0
  246. package/dist/esm/store/memory/contact.store.js +79 -0
  247. package/dist/esm/store/memory/device-list.store.js +103 -0
  248. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  249. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  250. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  251. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  252. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  254. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  255. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  256. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  258. package/dist/esm/store/noop.store.js +6 -4
  259. package/dist/esm/transport/WaComms.js +14 -5
  260. package/dist/esm/transport/WaWebSocket.js +32 -8
  261. package/dist/esm/transport/binary/constants.js +10 -4
  262. package/dist/esm/transport/binary/decoder.js +21 -15
  263. package/dist/esm/transport/binary/encoder.js +96 -21
  264. package/dist/esm/transport/binary/tokens.js +12 -12
  265. package/dist/esm/transport/index.js +1 -0
  266. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  267. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  268. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  269. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  270. package/dist/esm/transport/node/builders/abprops.js +2 -2
  271. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  272. package/dist/esm/transport/node/builders/bot.js +38 -0
  273. package/dist/esm/transport/node/builders/business.js +30 -30
  274. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  275. package/dist/esm/transport/node/builders/community.js +53 -0
  276. package/dist/esm/transport/node/builders/device.js +2 -2
  277. package/dist/esm/transport/node/builders/email.js +6 -5
  278. package/dist/esm/transport/node/builders/global.js +1 -1
  279. package/dist/esm/transport/node/builders/group.js +114 -4
  280. package/dist/esm/transport/node/builders/media.js +2 -2
  281. package/dist/esm/transport/node/builders/message.js +83 -49
  282. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  283. package/dist/esm/transport/node/builders/passive.js +7 -0
  284. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  285. package/dist/esm/transport/node/builders/presence.js +27 -1
  286. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  287. package/dist/esm/transport/node/builders/privacy.js +6 -6
  288. package/dist/esm/transport/node/builders/profile.js +28 -8
  289. package/dist/esm/transport/node/builders/tos.js +58 -0
  290. package/dist/esm/transport/node/builders/usync.js +51 -2
  291. package/dist/esm/transport/node/helpers.js +3 -1
  292. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  293. package/dist/esm/transport/node/mex/client.js +22 -0
  294. package/dist/esm/transport/node/query.js +17 -0
  295. package/dist/esm/transport/node/usync.js +12 -0
  296. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  297. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  298. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  300. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  301. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  302. package/dist/esm/transport/noise/constants.js +0 -1
  303. package/dist/esm/transport/proxy.js +5 -0
  304. package/dist/esm/transport/stream/parse.js +3 -7
  305. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  306. package/dist/esm/util/async.js +4 -0
  307. package/dist/esm/util/bytes.js +37 -2
  308. package/dist/esm/util/clock.js +15 -0
  309. package/dist/esm/util/coercion.js +45 -3
  310. package/dist/esm/util/collections.js +11 -0
  311. package/dist/esm/util/index.js +2 -2
  312. package/dist/esm/util/primitives.js +19 -0
  313. package/dist/esm/util/runtime.js +5 -0
  314. package/dist/esm/version-spec.js +1 -0
  315. package/dist/index.js +31 -1
  316. package/dist/infra/log/ConsoleLogger.js +30 -6
  317. package/dist/infra/log/PinoLogger.js +64 -0
  318. package/dist/infra/log/types.js +4 -2
  319. package/dist/infra/perf/BackgroundQueue.js +55 -13
  320. package/dist/media/constants.js +34 -3
  321. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  322. package/dist/media/index.js +9 -4
  323. package/dist/media/sticker/sticker-pack.js +136 -0
  324. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  325. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  326. package/dist/message/WaMessageClient.js +46 -15
  327. package/dist/message/addons/link-preview/builder.js +39 -0
  328. package/dist/message/addons/link-preview/detect.js +58 -0
  329. package/dist/message/addons/link-preview/fetcher.js +394 -0
  330. package/dist/message/addons/link-preview/types.js +2 -0
  331. package/dist/message/context-info.js +129 -0
  332. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  333. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  334. package/dist/message/crypto/phash.js +136 -0
  335. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  336. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  337. package/dist/message/{content.js → encode/content.js} +192 -7
  338. package/dist/message/encode/media-payload.js +45 -0
  339. package/dist/message/{padding.js → encode/padding.js} +9 -3
  340. package/dist/message/index.js +2 -2
  341. package/dist/message/kinds/bot.js +120 -0
  342. package/dist/message/kinds/newsletter.js +248 -0
  343. package/dist/message/kinds/sticker-pack.js +34 -0
  344. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  345. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  346. package/dist/message/primitives/peer-data-operation.js +96 -0
  347. package/dist/mex.js +6 -0
  348. package/dist/proto.js +1 -1
  349. package/dist/protocol/abprops.js +10 -0
  350. package/dist/protocol/appstate.js +7 -31
  351. package/dist/protocol/auth.js +3 -2
  352. package/dist/protocol/bot.js +81 -0
  353. package/dist/protocol/browser.js +8 -0
  354. package/dist/protocol/business.js +22 -0
  355. package/dist/protocol/call.js +51 -0
  356. package/dist/protocol/constants.js +39 -3
  357. package/dist/protocol/defaults.js +3 -0
  358. package/dist/protocol/index.js +12 -3
  359. package/dist/protocol/jid.js +107 -5
  360. package/dist/protocol/media.js +25 -12
  361. package/dist/protocol/message.js +4 -1
  362. package/dist/protocol/newsletter.js +64 -0
  363. package/dist/protocol/nodes.js +22 -2
  364. package/dist/protocol/notification.js +19 -3
  365. package/dist/protocol/presence.js +16 -0
  366. package/dist/protocol/status.js +9 -0
  367. package/dist/retry/codec.js +5 -0
  368. package/dist/retry/parse.js +16 -34
  369. package/dist/retry/reason.js +5 -0
  370. package/dist/retry/replay.js +129 -35
  371. package/dist/retry/tracker.js +3 -7
  372. package/dist/signal/api/SignalDeviceSyncApi.js +64 -17
  373. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  374. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  375. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  376. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  377. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  378. package/dist/signal/api/codec.js +52 -0
  379. package/dist/signal/api/prekeys.js +4 -0
  380. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +5 -7
  381. package/dist/signal/constants.js +4 -1
  382. package/dist/signal/encoding.js +5 -303
  383. package/dist/signal/group/SenderKeyChain.js +17 -32
  384. package/dist/signal/group/SenderKeyManager.js +24 -7
  385. package/dist/signal/group/encoding.js +101 -0
  386. package/dist/signal/index.js +13 -10
  387. package/dist/signal/registration/encoding.js +39 -0
  388. package/dist/signal/registration/keygen.js +10 -0
  389. package/dist/signal/registration/utils.js +6 -0
  390. package/dist/signal/session/SignalProtocol.js +112 -10
  391. package/dist/signal/session/SignalRatchet.js +24 -54
  392. package/dist/signal/session/SignalSession.js +6 -14
  393. package/dist/signal/session/encoding.js +183 -0
  394. package/dist/signal/session/resolver.js +139 -30
  395. package/dist/store/cache/identity.cache.js +78 -0
  396. package/dist/store/cache/privacy-token.cache.js +60 -0
  397. package/dist/store/cache/sender-key.cache.js +104 -0
  398. package/dist/store/cache/session.cache.js +95 -0
  399. package/dist/store/contracts/group-metadata.store.js +2 -0
  400. package/dist/store/createStore.js +90 -36
  401. package/dist/store/index.js +18 -16
  402. package/dist/store/locks/contact.lock.js +1 -0
  403. package/dist/store/locks/device-list.lock.js +1 -0
  404. package/dist/store/locks/group-metadata.lock.js +23 -0
  405. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  406. package/dist/store/memory/auth.store.js +28 -0
  407. package/dist/store/memory/contact.store.js +83 -0
  408. package/dist/store/memory/device-list.store.js +107 -0
  409. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  410. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  411. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  412. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  413. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  414. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  415. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  416. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  417. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  418. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  419. package/dist/store/noop.store.js +7 -5
  420. package/dist/transport/WaComms.js +14 -5
  421. package/dist/transport/WaWebSocket.js +32 -8
  422. package/dist/transport/binary/constants.js +11 -5
  423. package/dist/transport/binary/decoder.js +24 -18
  424. package/dist/transport/binary/encoder.js +109 -34
  425. package/dist/transport/binary/tokens.js +12 -12
  426. package/dist/transport/index.js +3 -1
  427. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  428. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  429. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  430. package/dist/transport/node/WaNodeTransport.js +13 -0
  431. package/dist/transport/node/builders/abprops.js +1 -1
  432. package/dist/transport/node/builders/account-sync.js +7 -16
  433. package/dist/transport/node/builders/bot.js +43 -0
  434. package/dist/transport/node/builders/business.js +31 -31
  435. package/dist/transport/node/builders/chatstate.js +31 -0
  436. package/dist/transport/node/builders/community.js +59 -0
  437. package/dist/transport/node/builders/device.js +1 -1
  438. package/dist/transport/node/builders/email.js +6 -5
  439. package/dist/transport/node/builders/global.js +1 -1
  440. package/dist/transport/node/builders/group.js +121 -3
  441. package/dist/transport/node/builders/media.js +1 -1
  442. package/dist/transport/node/builders/message.js +84 -49
  443. package/dist/transport/node/builders/newsletter.js +183 -0
  444. package/dist/transport/node/builders/passive.js +10 -0
  445. package/dist/transport/node/builders/prekeys.js +3 -3
  446. package/dist/transport/node/builders/presence.js +28 -1
  447. package/dist/transport/node/builders/privacy-token.js +1 -1
  448. package/dist/transport/node/builders/privacy.js +5 -5
  449. package/dist/transport/node/builders/profile.js +30 -7
  450. package/dist/transport/node/builders/tos.js +63 -0
  451. package/dist/transport/node/builders/usync.js +52 -1
  452. package/dist/transport/node/helpers.js +2 -1
  453. package/dist/transport/node/mex/argo-decoder.js +2 -2
  454. package/dist/transport/node/mex/client.js +23 -0
  455. package/dist/transport/node/query.js +17 -0
  456. package/dist/transport/node/usync.js +13 -0
  457. package/dist/transport/noise/WaClientPayload.js +8 -8
  458. package/dist/transport/noise/WaMobileClientPayload.js +5 -0
  459. package/dist/transport/noise/WaNoiseCert.js +5 -0
  460. package/dist/transport/noise/WaNoiseHandshake.js +25 -23
  461. package/dist/transport/noise/WaNoiseSession.js +39 -59
  462. package/dist/transport/noise/WaNoiseSocket.js +18 -12
  463. package/dist/transport/noise/constants.js +1 -2
  464. package/dist/transport/proxy.js +5 -0
  465. package/dist/transport/stream/parse.js +3 -7
  466. package/dist/transport/wa-web-version-fetcher.js +94 -0
  467. package/dist/types/appstate/constants.d.ts +1 -1
  468. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  469. package/dist/types/appstate/index.d.ts +5 -5
  470. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  471. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  472. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  473. package/dist/types/appstate/utils.d.ts +17 -1
  474. package/dist/types/appstate-spec.d.ts +24 -0
  475. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  476. package/dist/types/auth/credentials-flow.d.ts +4 -3
  477. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  478. package/dist/types/auth/types.d.ts +48 -1
  479. package/dist/types/client/WaClient.d.ts +178 -71
  480. package/dist/types/client/WaClientFactory.d.ts +30 -5
  481. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  482. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  483. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  484. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  485. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  486. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  487. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  488. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  489. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  490. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  491. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  492. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +54 -31
  493. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  494. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  495. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  496. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  497. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  498. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  499. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  500. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  501. package/dist/types/client/events/abprops.d.ts +2 -1
  502. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  503. package/dist/types/client/events/business.d.ts +10 -0
  504. package/dist/types/client/events/call.d.ts +31 -0
  505. package/dist/types/client/events/chatstate.d.ts +9 -0
  506. package/dist/types/client/events/devices.d.ts +5 -4
  507. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  508. package/dist/types/client/events/group.d.ts +2 -1
  509. package/dist/types/client/events/identity.d.ts +2 -1
  510. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  511. package/dist/types/client/events/mex-notification.d.ts +6 -0
  512. package/dist/types/client/events/picture.d.ts +8 -0
  513. package/dist/types/client/events/presence.d.ts +28 -0
  514. package/dist/types/client/events/receipt.d.ts +14 -0
  515. package/dist/types/client/events/registration.d.ts +4 -3
  516. package/dist/types/client/index.d.ts +1 -1
  517. package/dist/types/client/media.d.ts +35 -1
  518. package/dist/types/client/messaging/fanout.d.ts +2 -2
  519. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  520. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  521. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  522. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  523. package/dist/types/client/messaging/messages.d.ts +28 -0
  524. package/dist/types/client/newsletter/admin.d.ts +71 -0
  525. package/dist/types/client/newsletter/content.d.ts +42 -0
  526. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  527. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  528. package/dist/types/client/newsletter/mex.d.ts +14 -0
  529. package/dist/types/client/newsletter/parse.d.ts +19 -0
  530. package/dist/types/client/newsletter/types.d.ts +190 -0
  531. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  532. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  533. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  534. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  535. package/dist/types/client/types.d.ts +843 -71
  536. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  537. package/dist/types/crypto/core/index.d.ts +2 -2
  538. package/dist/types/crypto/core/keys.d.ts +0 -4
  539. package/dist/types/crypto/core/nonce.d.ts +4 -5
  540. package/dist/types/crypto/core/primitives.d.ts +31 -20
  541. package/dist/types/crypto/core/random.d.ts +6 -0
  542. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  543. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  544. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  545. package/dist/types/crypto/curves/constants.d.ts +4 -3
  546. package/dist/types/crypto/curves/types.d.ts +0 -5
  547. package/dist/types/crypto/math/constants.d.ts +0 -1
  548. package/dist/types/crypto/math/mod.d.ts +0 -1
  549. package/dist/types/index.d.ts +32 -6
  550. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  551. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  552. package/dist/types/infra/log/types.d.ts +6 -0
  553. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  554. package/dist/types/media/constants.d.ts +7 -2
  555. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  556. package/dist/types/media/index.d.ts +7 -5
  557. package/dist/types/media/processor.d.ts +27 -5
  558. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  559. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  560. package/dist/types/media/transfer/conn.d.ts +7 -0
  561. package/dist/types/media/types.d.ts +1 -2
  562. package/dist/types/message/WaMessageClient.d.ts +14 -0
  563. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  564. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  565. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  566. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  567. package/dist/types/message/context-info.d.ts +66 -0
  568. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  569. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  570. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  571. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  572. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  573. package/dist/types/message/encode/content.d.ts +43 -0
  574. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  575. package/dist/types/message/encode/media-payload.d.ts +12 -0
  576. package/dist/types/message/index.d.ts +2 -2
  577. package/dist/types/message/kinds/bot.d.ts +31 -0
  578. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  579. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  580. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  581. package/dist/types/message/primitives/incoming.d.ts +21 -0
  582. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  583. package/dist/types/message/types.d.ts +208 -10
  584. package/dist/types/mex.d.ts +2 -0
  585. package/dist/types/proto.d.ts +2 -2
  586. package/dist/types/protocol/abprops.d.ts +9 -0
  587. package/dist/types/protocol/appstate.d.ts +4 -49
  588. package/dist/types/protocol/auth.d.ts +2 -2
  589. package/dist/types/protocol/bot.d.ts +45 -0
  590. package/dist/types/protocol/browser.d.ts +8 -0
  591. package/dist/types/protocol/business.d.ts +21 -0
  592. package/dist/types/protocol/call.d.ts +44 -0
  593. package/dist/types/protocol/constants.d.ts +16 -3
  594. package/dist/types/protocol/defaults.d.ts +3 -0
  595. package/dist/types/protocol/group.d.ts +1 -1
  596. package/dist/types/protocol/index.d.ts +2 -1
  597. package/dist/types/protocol/jid.d.ts +78 -0
  598. package/dist/types/protocol/media.d.ts +21 -13
  599. package/dist/types/protocol/message.d.ts +4 -0
  600. package/dist/types/protocol/newsletter.d.ts +65 -0
  601. package/dist/types/protocol/nodes.d.ts +20 -0
  602. package/dist/types/protocol/notification.d.ts +16 -0
  603. package/dist/types/protocol/presence.d.ts +16 -0
  604. package/dist/types/protocol/status.d.ts +7 -0
  605. package/dist/types/retry/codec.d.ts +5 -0
  606. package/dist/types/retry/index.d.ts +1 -1
  607. package/dist/types/retry/parse.d.ts +9 -0
  608. package/dist/types/retry/reason.d.ts +5 -0
  609. package/dist/types/retry/replay.d.ts +19 -5
  610. package/dist/types/retry/tracker.d.ts +10 -3
  611. package/dist/types/retry/types.d.ts +3 -8
  612. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  613. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  614. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  615. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  616. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  617. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  618. package/dist/types/signal/api/codec.d.ts +20 -0
  619. package/dist/types/signal/api/constants.d.ts +1 -1
  620. package/dist/types/signal/api/prekeys.d.ts +4 -0
  621. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  622. package/dist/types/signal/attestation/constants.d.ts +4 -0
  623. package/dist/types/signal/constants.d.ts +7 -4
  624. package/dist/types/signal/encoding.d.ts +6 -68
  625. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  626. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -0
  627. package/dist/types/signal/group/encoding.d.ts +25 -0
  628. package/dist/types/signal/index.d.ts +4 -1
  629. package/dist/types/signal/registration/encoding.d.ts +30 -0
  630. package/dist/types/signal/registration/keygen.d.ts +10 -0
  631. package/dist/types/signal/registration/utils.d.ts +5 -0
  632. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  633. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  634. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  635. package/dist/types/signal/session/encoding.d.ts +28 -0
  636. package/dist/types/signal/session/resolver.d.ts +14 -0
  637. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  638. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  639. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  640. package/dist/types/store/cache/session.cache.d.ts +23 -0
  641. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  642. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  643. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  644. package/dist/types/store/contracts/message.store.d.ts +0 -2
  645. package/dist/types/store/createStore.d.ts +54 -2
  646. package/dist/types/store/index.d.ts +17 -16
  647. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  648. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  649. package/dist/types/store/memory/auth.store.d.ts +18 -0
  650. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  651. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  652. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  653. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  654. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  655. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  656. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  657. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  658. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  659. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  661. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  662. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  663. package/dist/types/store/noop.store.d.ts +2 -2
  664. package/dist/types/store/types.d.ts +250 -6
  665. package/dist/types/transport/WaComms.d.ts +5 -0
  666. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  667. package/dist/types/transport/binary/constants.d.ts +8 -2
  668. package/dist/types/transport/binary/decoder.d.ts +5 -0
  669. package/dist/types/transport/binary/encoder.d.ts +5 -0
  670. package/dist/types/transport/binary/tokens.d.ts +6 -6
  671. package/dist/types/transport/index.d.ts +3 -1
  672. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  673. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  674. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  675. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  676. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  677. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  678. package/dist/types/transport/node/builders/business.d.ts +21 -4
  679. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  680. package/dist/types/transport/node/builders/community.d.ts +17 -0
  681. package/dist/types/transport/node/builders/group.d.ts +44 -2
  682. package/dist/types/transport/node/builders/message.d.ts +11 -6
  683. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  684. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  685. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  686. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  687. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  688. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  689. package/dist/types/transport/node/helpers.d.ts +1 -2
  690. package/dist/types/transport/node/mex/client.d.ts +12 -1
  691. package/dist/types/transport/node/query.d.ts +19 -1
  692. package/dist/types/transport/node/usync.d.ts +3 -0
  693. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +5 -0
  694. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  695. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  696. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  697. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  698. package/dist/types/transport/noise/constants.d.ts +4 -5
  699. package/dist/types/transport/proxy.d.ts +5 -0
  700. package/dist/types/transport/types.d.ts +14 -7
  701. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  702. package/dist/types/util/async.d.ts +4 -0
  703. package/dist/types/util/bytes.d.ts +36 -1
  704. package/dist/types/util/clock.d.ts +6 -0
  705. package/dist/types/util/coercion.d.ts +25 -0
  706. package/dist/types/util/collections.d.ts +8 -0
  707. package/dist/types/util/index.d.ts +2 -2
  708. package/dist/types/util/primitives.d.ts +11 -0
  709. package/dist/types/util/runtime.d.ts +5 -0
  710. package/dist/types/version-spec.d.ts +1 -0
  711. package/dist/util/async.js +4 -0
  712. package/dist/util/bytes.js +37 -2
  713. package/dist/util/clock.js +18 -0
  714. package/dist/util/coercion.js +48 -3
  715. package/dist/util/collections.js +12 -0
  716. package/dist/util/index.js +7 -1
  717. package/dist/util/primitives.js +20 -0
  718. package/dist/util/runtime.js +5 -0
  719. package/dist/version-spec.js +5 -0
  720. package/package.json +32 -8
  721. package/spec/appstate/index.d.ts +188 -0
  722. package/spec/appstate/index.js +850 -0
  723. package/spec/mex/index.d.ts +4172 -0
  724. package/spec/mex/index.js +261 -0
  725. package/spec/proto/index.d.ts +16305 -0
  726. package/spec/proto/index.js +1 -0
  727. package/spec/version/index.d.ts +4 -0
  728. package/spec/version/index.js +9 -0
  729. package/spec/version/version.json +3 -0
  730. package/dist/client/events/chat.js +0 -227
  731. package/dist/client/incoming.js +0 -306
  732. package/dist/client/mailbox.js +0 -66
  733. package/dist/client/messages.js +0 -305
  734. package/dist/esm/client/events/chat.js +0 -224
  735. package/dist/esm/client/incoming.js +0 -296
  736. package/dist/esm/client/mailbox.js +0 -63
  737. package/dist/esm/client/messages.js +0 -301
  738. package/dist/esm/media/WaMediaCrypto.js +0 -499
  739. package/dist/esm/message/phash.js +0 -47
  740. package/dist/esm/store/locks/participants.lock.js +0 -20
  741. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  742. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  743. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  744. package/dist/media/WaMediaCrypto.js +0 -503
  745. package/dist/message/phash.js +0 -50
  746. package/dist/store/locks/participants.lock.js +0 -23
  747. package/dist/store/providers/memory/contact.store.js +0 -32
  748. package/dist/store/providers/memory/device-list.store.js +0 -71
  749. package/dist/transport/node/mex/persist-ids.js +0 -13
  750. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  751. package/dist/types/client/events/chat.d.ts +0 -3
  752. package/dist/types/client/history-sync.d.ts +0 -20
  753. package/dist/types/client/messages.d.ts +0 -18
  754. package/dist/types/client/messaging/participants.d.ts +0 -13
  755. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  756. package/dist/types/media/conn.d.ts +0 -3
  757. package/dist/types/message/content.d.ts +0 -14
  758. package/dist/types/message/incoming.d.ts +0 -18
  759. package/dist/types/signal/crypto/constants.d.ts +0 -4
  760. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  761. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  762. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  763. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  764. package/proto/index.d.ts +0 -10903
  765. package/proto/index.js +0 -1
  766. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  767. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  768. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  769. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  770. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  771. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  772. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  773. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  774. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -1,14 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createStore = createStore;
4
+ const identity_cache_1 = require("./cache/identity.cache");
5
+ const privacy_token_cache_1 = require("./cache/privacy-token.cache");
6
+ const sender_key_cache_1 = require("./cache/sender-key.cache");
7
+ const session_cache_1 = require("./cache/session.cache");
4
8
  const appstate_lock_1 = require("./locks/appstate.lock");
5
9
  const auth_lock_1 = require("./locks/auth.lock");
6
10
  const contact_lock_1 = require("./locks/contact.lock");
7
11
  const device_list_lock_1 = require("./locks/device-list.lock");
12
+ const group_metadata_lock_1 = require("./locks/group-metadata.lock");
8
13
  const identity_lock_1 = require("./locks/identity.lock");
9
14
  const message_secret_lock_1 = require("./locks/message-secret.lock");
10
15
  const message_lock_1 = require("./locks/message.lock");
11
- const participants_lock_1 = require("./locks/participants.lock");
12
16
  const pre_key_lock_1 = require("./locks/pre-key.lock");
13
17
  const privacy_token_lock_1 = require("./locks/privacy-token.lock");
14
18
  const retry_lock_1 = require("./locks/retry.lock");
@@ -16,28 +20,42 @@ const sender_key_lock_1 = require("./locks/sender-key.lock");
16
20
  const session_lock_1 = require("./locks/session.lock");
17
21
  const signal_lock_1 = require("./locks/signal.lock");
18
22
  const thread_lock_1 = require("./locks/thread.lock");
23
+ const appstate_store_1 = require("./memory/appstate.store");
24
+ const auth_store_1 = require("./memory/auth.store");
25
+ const contact_store_1 = require("./memory/contact.store");
26
+ const device_list_store_1 = require("./memory/device-list.store");
27
+ const group_metadata_store_1 = require("./memory/group-metadata.store");
28
+ const identity_store_1 = require("./memory/identity.store");
29
+ const message_secret_store_1 = require("./memory/message-secret.store");
30
+ const message_store_1 = require("./memory/message.store");
31
+ const pre_key_store_1 = require("./memory/pre-key.store");
32
+ const privacy_token_store_1 = require("./memory/privacy-token.store");
33
+ const retry_store_1 = require("./memory/retry.store");
34
+ const sender_key_store_1 = require("./memory/sender-key.store");
35
+ const session_store_1 = require("./memory/session.store");
36
+ const signal_store_1 = require("./memory/signal.store");
37
+ const thread_store_1 = require("./memory/thread.store");
19
38
  const noop_store_1 = require("./noop.store");
20
- const appstate_store_1 = require("./providers/memory/appstate.store");
21
- const contact_store_1 = require("./providers/memory/contact.store");
22
- const device_list_store_1 = require("./providers/memory/device-list.store");
23
- const identity_store_1 = require("./providers/memory/identity.store");
24
- const message_secret_store_1 = require("./providers/memory/message-secret.store");
25
- const message_store_1 = require("./providers/memory/message.store");
26
- const participants_store_1 = require("./providers/memory/participants.store");
27
- const pre_key_store_1 = require("./providers/memory/pre-key.store");
28
- const privacy_token_store_1 = require("./providers/memory/privacy-token.store");
29
- const retry_store_1 = require("./providers/memory/retry.store");
30
- const sender_key_store_1 = require("./providers/memory/sender-key.store");
31
- const session_store_1 = require("./providers/memory/session.store");
32
- const signal_store_1 = require("./providers/memory/signal.store");
33
- const thread_store_1 = require("./providers/memory/thread.store");
34
39
  const coercion_1 = require("../util/coercion");
35
40
  const DEFAULT_CACHE_TTLS_MS = Object.freeze({
36
41
  retryMs: 60 * 1000,
37
- participantsMs: 5 * 60 * 1000,
42
+ groupMetadataMs: 5 * 60 * 1000,
38
43
  deviceListMs: 5 * 60 * 1000,
39
44
  messageSecretMs: 30 * 60 * 1000
40
45
  });
46
+ const REQUIRED_PROVIDER_DOMAINS = [
47
+ 'auth',
48
+ 'signal',
49
+ 'preKey',
50
+ 'session',
51
+ 'identity',
52
+ 'senderKey',
53
+ 'appState',
54
+ 'messages',
55
+ 'threads',
56
+ 'contacts',
57
+ 'privacyToken'
58
+ ];
41
59
  function hasDestroy(value) {
42
60
  return (!!value &&
43
61
  typeof value === 'object' &&
@@ -49,6 +67,9 @@ async function destroyIfSupported(value) {
49
67
  return;
50
68
  await value.destroy();
51
69
  }
70
+ function usesBackend(provider) {
71
+ return !!provider && provider !== 'memory' && provider !== 'none';
72
+ }
52
73
  function resolveStore(sessionId, backends, provider, domain, kind, fallback) {
53
74
  if (!provider || provider === 'memory' || provider === 'none') {
54
75
  return fallback();
@@ -64,12 +85,29 @@ function resolveStore(sessionId, backends, provider, domain, kind, fallback) {
64
85
  return factory(sessionId);
65
86
  }
66
87
  function createStore(options) {
88
+ options = options ?? {};
67
89
  const backends = (options.backends ?? {});
68
90
  const providers = options.providers ?? {};
69
91
  const cacheProviders = options.cacheProviders ?? {};
92
+ const cacheLayer = options.cacheLayer ?? {};
93
+ const storeLogger = options.logger?.child({ scope: 'store' });
94
+ const memoryLogger = storeLogger?.child({ provider: 'memory' });
95
+ if (Object.keys(backends).length > 0) {
96
+ const missingProviders = REQUIRED_PROVIDER_DOMAINS.filter((domain) => providers[domain] === undefined);
97
+ if (missingProviders.length > 0) {
98
+ throw new Error(`createStore: when backends is set, every persistence domain must be assigned ` +
99
+ `explicitly via providers. Missing: ${missingProviders
100
+ .map((d) => `providers.${d}`)
101
+ .join(', ')}. Pass a backend name (e.g. 'sqlite') to persist, or ` +
102
+ `'memory' to use the in-tree memory provider. For the mailbox domains ` +
103
+ `(messages/threads/contacts) 'none' skips the domain entirely; for the ` +
104
+ `other domains 'none' falls back to memory. Cache providers ` +
105
+ `(retry/groupMetadata/deviceList/messageSecret) stay opt-in and default to memory.`);
106
+ }
107
+ }
70
108
  const cacheTtlsMs = Object.freeze({
71
109
  retry: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.retryMs, DEFAULT_CACHE_TTLS_MS.retryMs, 'memory.cacheTtlMs.retryMs'),
72
- participants: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.participantsMs, DEFAULT_CACHE_TTLS_MS.participantsMs, 'memory.cacheTtlMs.participantsMs'),
110
+ groupMetadata: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.groupMetadataMs, DEFAULT_CACHE_TTLS_MS.groupMetadataMs, 'memory.cacheTtlMs.groupMetadataMs'),
73
111
  deviceList: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.deviceListMs, DEFAULT_CACHE_TTLS_MS.deviceListMs, 'memory.cacheTtlMs.deviceListMs'),
74
112
  messageSecret: (0, coercion_1.resolvePositive)(options.memory?.cacheTtlMs?.messageSecretMs, DEFAULT_CACHE_TTLS_MS.messageSecretMs, 'memory.cacheTtlMs.messageSecretMs')
75
113
  });
@@ -88,9 +126,7 @@ function createStore(options) {
88
126
  if (cached)
89
127
  return cached;
90
128
  const ml = options.memory?.limits ?? {};
91
- const rawAuth = resolveStore(id, backends, providers.auth, 'auth', 'stores', () => {
92
- throw new Error('providers.auth is required — register a backend or set providers.auth');
93
- });
129
+ const rawAuth = resolveStore(id, backends, providers.auth ?? 'memory', 'auth', 'stores', () => new auth_store_1.WaAuthMemoryStore());
94
130
  const rawSignal = resolveStore(id, backends, providers.signal ?? 'memory', 'signal', 'stores', () => new signal_store_1.WaSignalMemoryStore());
95
131
  const rawPreKey = resolveStore(id, backends, providers.preKey ?? 'memory', 'preKey', 'stores', () => new pre_key_store_1.WaPreKeyMemoryStore({ maxPreKeys: ml.signalPreKeys }));
96
132
  const rawSession = resolveStore(id, backends, providers.session ?? 'memory', 'session', 'stores', () => new session_store_1.WaSessionMemoryStore({ maxSessions: ml.signalSessions }));
@@ -118,39 +154,57 @@ function createStore(options) {
118
154
  const rawRetry = resolveStore(id, backends, cacheProviders.retry ?? 'memory', 'retry', 'caches', () => cacheProviders.retry === 'memory' || !cacheProviders.retry
119
155
  ? new retry_store_1.WaRetryMemoryStore(cacheTtlsMs.retry, {
120
156
  maxOutboundMessages: ml.retryOutboundMessages,
121
- maxInboundCounters: ml.retryInboundCounters
157
+ maxInboundCounters: ml.retryInboundCounters,
158
+ logger: memoryLogger?.child({ domain: 'retry', sessionId: id })
122
159
  })
123
160
  : noop_store_1.NOOP_RETRY_STORE);
124
- const rawParticipants = resolveStore(id, backends, cacheProviders.participants ?? 'memory', 'participants', 'caches', () => cacheProviders.participants === 'memory'
125
- ? new participants_store_1.WaParticipantsMemoryStore(cacheTtlsMs.participants, {
126
- maxGroups: ml.participantsGroups
161
+ const rawGroupMetadata = resolveStore(id, backends, cacheProviders.groupMetadata ?? 'memory', 'groupMetadata', 'caches', () => cacheProviders.groupMetadata === 'memory' || !cacheProviders.groupMetadata
162
+ ? new group_metadata_store_1.WaGroupMetadataMemoryStore(cacheTtlsMs.groupMetadata, {
163
+ maxGroups: ml.groupMetadataGroups,
164
+ logger: memoryLogger?.child({
165
+ domain: 'groupMetadata',
166
+ sessionId: id
167
+ })
127
168
  })
128
- : noop_store_1.NOOP_PARTICIPANTS_STORE);
169
+ : noop_store_1.NOOP_GROUP_METADATA_STORE);
129
170
  const rawDeviceList = resolveStore(id, backends, cacheProviders.deviceList ?? 'memory', 'deviceList', 'caches', () => cacheProviders.deviceList === 'memory'
130
171
  ? new device_list_store_1.WaDeviceListMemoryStore(cacheTtlsMs.deviceList, {
131
- maxUsers: ml.deviceListUsers
172
+ maxUsers: ml.deviceListUsers,
173
+ logger: memoryLogger?.child({ domain: 'deviceList', sessionId: id })
132
174
  })
133
175
  : noop_store_1.NOOP_DEVICE_LIST_STORE);
134
- const rawMessageSecret = resolveStore(id, backends, cacheProviders.messageSecret ?? 'none', 'messageSecret', 'caches', () => cacheProviders.messageSecret === 'memory'
176
+ const rawMessageSecret = resolveStore(id, backends, cacheProviders.messageSecret ?? 'memory', 'messageSecret', 'caches', () => cacheProviders.messageSecret === 'memory' || !cacheProviders.messageSecret
135
177
  ? new message_secret_store_1.WaMessageSecretMemoryStore(cacheTtlsMs.messageSecret, {
136
- maxSecrets: ml.messageSecrets
178
+ maxSecrets: ml.messageSecrets,
179
+ logger: memoryLogger?.child({
180
+ domain: 'messageSecret',
181
+ sessionId: id
182
+ })
137
183
  })
138
184
  : noop_store_1.NOOP_MESSAGE_SECRET_STORE);
139
185
  const authStore = (0, auth_lock_1.withAuthLock)(rawAuth);
140
186
  const signalStore = (0, signal_lock_1.withSignalLock)(rawSignal);
141
187
  const preKeyStore = (0, pre_key_lock_1.withPreKeyLock)(rawPreKey);
142
- const sessionStore = (0, session_lock_1.withSessionLock)(rawSession);
143
- const identityStore = (0, identity_lock_1.withIdentityLock)(rawIdentity);
144
- const senderKeyStore = (0, sender_key_lock_1.withSenderKeyLock)(rawSenderKey);
188
+ const sessionStore = (0, session_lock_1.withSessionLock)(cacheLayer.session && usesBackend(providers.session)
189
+ ? (0, session_cache_1.withSessionCache)(rawSession, cacheLayer.limits?.session)
190
+ : rawSession);
191
+ const identityStore = (0, identity_lock_1.withIdentityLock)(cacheLayer.identity && usesBackend(providers.identity)
192
+ ? (0, identity_cache_1.withIdentityCache)(rawIdentity, cacheLayer.limits?.identity)
193
+ : rawIdentity);
194
+ const senderKeyStore = (0, sender_key_lock_1.withSenderKeyLock)(cacheLayer.senderKey && usesBackend(providers.senderKey)
195
+ ? (0, sender_key_cache_1.withSenderKeyCache)(rawSenderKey, cacheLayer.limits?.senderKey)
196
+ : rawSenderKey);
145
197
  const appStateStore = (0, appstate_lock_1.withAppStateLock)(rawAppState);
146
198
  const retryStore = (0, retry_lock_1.withRetryLock)(rawRetry);
147
- const participantsStore = (0, participants_lock_1.withParticipantsLock)(rawParticipants);
199
+ const groupMetadataStore = (0, group_metadata_lock_1.withGroupMetadataLock)(rawGroupMetadata);
148
200
  const deviceListStore = (0, device_list_lock_1.withDeviceListLock)(rawDeviceList);
149
201
  const messageStore = (0, message_lock_1.withMessageLock)(rawMessages);
150
202
  const messageSecretStore = (0, message_secret_lock_1.withMessageSecretLock)(rawMessageSecret);
151
203
  const threadStore = (0, thread_lock_1.withThreadLock)(rawThreads);
152
204
  const contactStore = (0, contact_lock_1.withContactLock)(rawContacts);
153
- const privacyTokenStore = (0, privacy_token_lock_1.withPrivacyTokenLock)(rawPrivacyToken);
205
+ const privacyTokenStore = (0, privacy_token_lock_1.withPrivacyTokenLock)(cacheLayer.privacyToken && usesBackend(providers.privacyToken)
206
+ ? (0, privacy_token_cache_1.withPrivacyTokenCache)(rawPrivacyToken, cacheLayer.limits?.privacyToken)
207
+ : rawPrivacyToken);
154
208
  let cachesDestroyed = false;
155
209
  let sessionDestroyed = false;
156
210
  const destroyCaches = async () => {
@@ -159,13 +213,13 @@ function createStore(options) {
159
213
  cachesDestroyed = true;
160
214
  await Promise.all([
161
215
  retryStore.clear(),
162
- participantsStore.clear(),
216
+ groupMetadataStore.clear(),
163
217
  deviceListStore.clear(),
164
218
  messageSecretStore.clear()
165
219
  ]);
166
220
  await Promise.all([
167
221
  destroyIfSupported(retryStore),
168
- destroyIfSupported(participantsStore),
222
+ destroyIfSupported(groupMetadataStore),
169
223
  destroyIfSupported(deviceListStore),
170
224
  destroyIfSupported(messageSecretStore)
171
225
  ]);
@@ -198,7 +252,7 @@ function createStore(options) {
198
252
  senderKey: senderKeyStore,
199
253
  appState: appStateStore,
200
254
  retry: retryStore,
201
- participants: participantsStore,
255
+ groupMetadata: groupMetadataStore,
202
256
  deviceList: deviceListStore,
203
257
  messages: messageStore,
204
258
  messageSecret: messageSecretStore,
@@ -1,33 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaPrivacyTokenMemoryStore = exports.WaThreadMemoryStore = exports.WaMessageMemoryStore = exports.WaMessageSecretMemoryStore = exports.WaContactMemoryStore = exports.WaDeviceListMemoryStore = exports.WaParticipantsMemoryStore = exports.WaRetryMemoryStore = exports.SenderKeyMemoryStore = exports.WaIdentityMemoryStore = exports.WaSessionMemoryStore = exports.WaPreKeyMemoryStore = exports.WaSignalMemoryStore = exports.WaAppStateMemoryStore = exports.createStore = void 0;
3
+ exports.WaPrivacyTokenMemoryStore = exports.WaThreadMemoryStore = exports.WaMessageMemoryStore = exports.WaMessageSecretMemoryStore = exports.WaContactMemoryStore = exports.WaDeviceListMemoryStore = exports.WaGroupMetadataMemoryStore = exports.WaRetryMemoryStore = exports.SenderKeyMemoryStore = exports.WaIdentityMemoryStore = exports.WaSessionMemoryStore = exports.WaPreKeyMemoryStore = exports.WaSignalMemoryStore = exports.WaAuthMemoryStore = exports.WaAppStateMemoryStore = exports.createStore = void 0;
4
4
  var createStore_1 = require("./createStore");
5
5
  Object.defineProperty(exports, "createStore", { enumerable: true, get: function () { return createStore_1.createStore; } });
6
- var appstate_store_1 = require("./providers/memory/appstate.store");
6
+ var appstate_store_1 = require("./memory/appstate.store");
7
7
  Object.defineProperty(exports, "WaAppStateMemoryStore", { enumerable: true, get: function () { return appstate_store_1.WaAppStateMemoryStore; } });
8
- var signal_store_1 = require("./providers/memory/signal.store");
8
+ var auth_store_1 = require("./memory/auth.store");
9
+ Object.defineProperty(exports, "WaAuthMemoryStore", { enumerable: true, get: function () { return auth_store_1.WaAuthMemoryStore; } });
10
+ var signal_store_1 = require("./memory/signal.store");
9
11
  Object.defineProperty(exports, "WaSignalMemoryStore", { enumerable: true, get: function () { return signal_store_1.WaSignalMemoryStore; } });
10
- var pre_key_store_1 = require("./providers/memory/pre-key.store");
12
+ var pre_key_store_1 = require("./memory/pre-key.store");
11
13
  Object.defineProperty(exports, "WaPreKeyMemoryStore", { enumerable: true, get: function () { return pre_key_store_1.WaPreKeyMemoryStore; } });
12
- var session_store_1 = require("./providers/memory/session.store");
14
+ var session_store_1 = require("./memory/session.store");
13
15
  Object.defineProperty(exports, "WaSessionMemoryStore", { enumerable: true, get: function () { return session_store_1.WaSessionMemoryStore; } });
14
- var identity_store_1 = require("./providers/memory/identity.store");
16
+ var identity_store_1 = require("./memory/identity.store");
15
17
  Object.defineProperty(exports, "WaIdentityMemoryStore", { enumerable: true, get: function () { return identity_store_1.WaIdentityMemoryStore; } });
16
- var sender_key_store_1 = require("./providers/memory/sender-key.store");
18
+ var sender_key_store_1 = require("./memory/sender-key.store");
17
19
  Object.defineProperty(exports, "SenderKeyMemoryStore", { enumerable: true, get: function () { return sender_key_store_1.SenderKeyMemoryStore; } });
18
- var retry_store_1 = require("./providers/memory/retry.store");
20
+ var retry_store_1 = require("./memory/retry.store");
19
21
  Object.defineProperty(exports, "WaRetryMemoryStore", { enumerable: true, get: function () { return retry_store_1.WaRetryMemoryStore; } });
20
- var participants_store_1 = require("./providers/memory/participants.store");
21
- Object.defineProperty(exports, "WaParticipantsMemoryStore", { enumerable: true, get: function () { return participants_store_1.WaParticipantsMemoryStore; } });
22
- var device_list_store_1 = require("./providers/memory/device-list.store");
22
+ var group_metadata_store_1 = require("./memory/group-metadata.store");
23
+ Object.defineProperty(exports, "WaGroupMetadataMemoryStore", { enumerable: true, get: function () { return group_metadata_store_1.WaGroupMetadataMemoryStore; } });
24
+ var device_list_store_1 = require("./memory/device-list.store");
23
25
  Object.defineProperty(exports, "WaDeviceListMemoryStore", { enumerable: true, get: function () { return device_list_store_1.WaDeviceListMemoryStore; } });
24
- var contact_store_1 = require("./providers/memory/contact.store");
26
+ var contact_store_1 = require("./memory/contact.store");
25
27
  Object.defineProperty(exports, "WaContactMemoryStore", { enumerable: true, get: function () { return contact_store_1.WaContactMemoryStore; } });
26
- var message_secret_store_1 = require("./providers/memory/message-secret.store");
28
+ var message_secret_store_1 = require("./memory/message-secret.store");
27
29
  Object.defineProperty(exports, "WaMessageSecretMemoryStore", { enumerable: true, get: function () { return message_secret_store_1.WaMessageSecretMemoryStore; } });
28
- var message_store_1 = require("./providers/memory/message.store");
30
+ var message_store_1 = require("./memory/message.store");
29
31
  Object.defineProperty(exports, "WaMessageMemoryStore", { enumerable: true, get: function () { return message_store_1.WaMessageMemoryStore; } });
30
- var thread_store_1 = require("./providers/memory/thread.store");
32
+ var thread_store_1 = require("./memory/thread.store");
31
33
  Object.defineProperty(exports, "WaThreadMemoryStore", { enumerable: true, get: function () { return thread_store_1.WaThreadMemoryStore; } });
32
- var privacy_token_store_1 = require("./providers/memory/privacy-token.store");
34
+ var privacy_token_store_1 = require("./memory/privacy-token.store");
33
35
  Object.defineProperty(exports, "WaPrivacyTokenMemoryStore", { enumerable: true, get: function () { return privacy_token_store_1.WaPrivacyTokenMemoryStore; } });
@@ -12,6 +12,7 @@ function withContactLock(store) {
12
12
  upsert: (record) => gate.runShared(() => lock.run(`contact:${record.jid}`, () => store.upsert(record))),
13
13
  upsertBatch: (records) => gate.runShared(() => lock.runMany(records.map((record) => `contact:${record.jid}`), () => store.upsertBatch(records))),
14
14
  getByJid: (jid) => gate.runShared(() => store.getByJid(jid)),
15
+ getByPhoneNumber: (pn) => gate.runShared(() => store.getByPhoneNumber(pn)),
15
16
  deleteByJid: (jid) => gate.runShared(() => lock.run(`contact:${jid}`, () => store.deleteByJid(jid))),
16
17
  clear: () => gate.runExclusive(() => lock.run(WA_CONTACT_CLEAR_KEY, () => store.clear())),
17
18
  destroy: async () => {
@@ -16,6 +16,7 @@ function withDeviceListLock(store) {
16
16
  },
17
17
  upsertUserDevicesBatch: (snapshots) => gate.runShared(() => lock.runMany(snapshots.map((snapshot) => `deviceList:user:${snapshot.userJid}`), () => store.upsertUserDevicesBatch(snapshots))),
18
18
  getUserDevicesBatch: (userJids, nowMs) => gate.runShared(() => store.getUserDevicesBatch(userJids, nowMs)),
19
+ findByAnyUserJid: (jid, nowMs) => gate.runShared(() => store.findByAnyUserJid(jid, nowMs)),
19
20
  deleteUserDevices: (userJid) => gate.runShared(() => lock.run(`deviceList:user:${userJid}`, () => store.deleteUserDevices(userJid))),
20
21
  cleanupExpired: (nowMs) => gate.runExclusive(() => lock.run(WA_DEVICE_LIST_CLEANUP_KEY, () => store.cleanupExpired(nowMs))),
21
22
  clear: () => gate.runExclusive(() => lock.run(WA_DEVICE_LIST_CLEAR_KEY, () => store.clear()))
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withGroupMetadataLock = withGroupMetadataLock;
4
+ const SharedExclusiveGate_1 = require("../../infra/perf/SharedExclusiveGate");
5
+ const StoreLock_1 = require("../../infra/perf/StoreLock");
6
+ const WA_GROUP_METADATA_CLEAR_KEY = 'group-metadata:clear';
7
+ const WA_GROUP_METADATA_CLEANUP_KEY = 'group-metadata:cleanup';
8
+ function withGroupMetadataLock(store) {
9
+ const lock = new StoreLock_1.StoreLock();
10
+ const gate = new SharedExclusiveGate_1.SharedExclusiveGate();
11
+ return {
12
+ destroy: async () => {
13
+ await gate.close();
14
+ await lock.shutdown();
15
+ await store.destroy?.();
16
+ },
17
+ upsertGroupMetadata: (snapshot) => gate.runShared(() => lock.run(`group-metadata:group:${snapshot.groupJid}`, () => store.upsertGroupMetadata(snapshot))),
18
+ getGroupMetadata: (groupJid, nowMs) => gate.runShared(() => store.getGroupMetadata(groupJid, nowMs)),
19
+ deleteGroupMetadata: (groupJid) => gate.runShared(() => lock.run(`group-metadata:group:${groupJid}`, () => store.deleteGroupMetadata(groupJid))),
20
+ cleanupExpired: (nowMs) => gate.runExclusive(() => lock.run(WA_GROUP_METADATA_CLEANUP_KEY, () => store.cleanupExpired(nowMs))),
21
+ clear: () => gate.runExclusive(() => lock.run(WA_GROUP_METADATA_CLEAR_KEY, () => store.clear()))
22
+ };
23
+ }
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaAppStateMemoryStore = void 0;
4
- const constants_1 = require("../../../appstate/constants");
5
- const utils_1 = require("../../../appstate/utils");
6
- const bytes_1 = require("../../../util/bytes");
7
- const coercion_1 = require("../../../util/coercion");
8
- const collections_1 = require("../../../util/collections");
4
+ const constants_1 = require("../../appstate/constants");
5
+ const utils_1 = require("../../appstate/utils");
6
+ const bytes_1 = require("../../util/bytes");
7
+ const coercion_1 = require("../../util/coercion");
8
+ const collections_1 = require("../../util/collections");
9
9
  const DEFAULT_APPSTATE_MEMORY_STORE_LIMITS = Object.freeze({
10
10
  syncKeys: 4096,
11
11
  collectionEntries: 50000
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaAuthMemoryStore = void 0;
4
+ /**
5
+ * In-memory {@link WaAuthStore} implementation. Holds a single
6
+ * {@link WaAuthCredentials} per instance in a field – nothing is persisted.
7
+ *
8
+ * @sensitive Holds private key material from {@link WaAuthCredentials} in
9
+ * RAM. Never log instances, never `JSON.stringify`. Pairing credentials are
10
+ * lost when the process exits, so the next connect will re-pair from scratch
11
+ * (QR/link-code). Prefer a persistent backend (e.g. `@zapo-js/store-sqlite`)
12
+ * for production.
13
+ */
14
+ class WaAuthMemoryStore {
15
+ constructor() {
16
+ this.credentials = null;
17
+ }
18
+ async load() {
19
+ return this.credentials;
20
+ }
21
+ async save(credentials) {
22
+ this.credentials = credentials;
23
+ }
24
+ async clear() {
25
+ this.credentials = null;
26
+ }
27
+ }
28
+ exports.WaAuthMemoryStore = WaAuthMemoryStore;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaContactMemoryStore = void 0;
4
+ const jid_1 = require("../../protocol/jid");
5
+ const coercion_1 = require("../../util/coercion");
6
+ const collections_1 = require("../../util/collections");
7
+ const DEFAULT_CONTACT_MEMORY_STORE_LIMITS = Object.freeze({
8
+ contacts: 20000
9
+ });
10
+ function mergeContactRecords(previous, incoming) {
11
+ if (!previous)
12
+ return incoming;
13
+ return {
14
+ jid: incoming.jid,
15
+ displayName: incoming.displayName ?? previous.displayName,
16
+ pushName: incoming.pushName ?? previous.pushName,
17
+ lid: incoming.lid ?? previous.lid,
18
+ phoneNumber: incoming.phoneNumber ?? previous.phoneNumber,
19
+ lastUpdatedMs: Math.max(previous.lastUpdatedMs, incoming.lastUpdatedMs)
20
+ };
21
+ }
22
+ class WaContactMemoryStore {
23
+ constructor(options = {}) {
24
+ this.contacts = new Map();
25
+ /** Secondary index: phone_number -> primary jid (typically the LID form). */
26
+ this.phoneIndex = new Map();
27
+ this.maxContacts = (0, coercion_1.resolvePositive)(options.maxContacts, DEFAULT_CONTACT_MEMORY_STORE_LIMITS.contacts, 'WaContactMemoryStoreOptions.maxContacts');
28
+ }
29
+ writeRecord(record) {
30
+ const previous = this.contacts.get(record.jid);
31
+ const merged = mergeContactRecords(previous, record);
32
+ (0, collections_1.setBoundedMapEntry)(this.contacts, merged.jid, merged, this.maxContacts);
33
+ if (previous?.phoneNumber &&
34
+ previous.phoneNumber !== merged.phoneNumber &&
35
+ this.phoneIndex.get(previous.phoneNumber) === merged.jid) {
36
+ this.phoneIndex.delete(previous.phoneNumber);
37
+ }
38
+ if (merged.phoneNumber) {
39
+ this.phoneIndex.set(merged.phoneNumber, merged.jid);
40
+ }
41
+ }
42
+ async upsert(record) {
43
+ this.writeRecord(record);
44
+ }
45
+ async upsertBatch(records) {
46
+ for (const record of records) {
47
+ this.writeRecord(record);
48
+ }
49
+ }
50
+ async getByJid(jid) {
51
+ const direct = this.contacts.get(jid);
52
+ if (direct)
53
+ return direct;
54
+ if ((0, jid_1.isUserJid)(jid)) {
55
+ return this.getByPhoneNumberSync(jid);
56
+ }
57
+ return null;
58
+ }
59
+ async getByPhoneNumber(pn) {
60
+ return this.getByPhoneNumberSync(pn);
61
+ }
62
+ getByPhoneNumberSync(pn) {
63
+ const jid = this.phoneIndex.get(pn);
64
+ if (!jid)
65
+ return null;
66
+ return this.contacts.get(jid) ?? null;
67
+ }
68
+ async deleteByJid(jid) {
69
+ const existing = this.contacts.get(jid);
70
+ if (!existing)
71
+ return 0;
72
+ this.contacts.delete(jid);
73
+ if (existing.phoneNumber && this.phoneIndex.get(existing.phoneNumber) === jid) {
74
+ this.phoneIndex.delete(existing.phoneNumber);
75
+ }
76
+ return 1;
77
+ }
78
+ async clear() {
79
+ this.contacts.clear();
80
+ this.phoneIndex.clear();
81
+ }
82
+ }
83
+ exports.WaContactMemoryStore = WaContactMemoryStore;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaDeviceListMemoryStore = void 0;
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
+ const DEFAULTS = Object.freeze({
7
+ ttlMs: 5 * 60 * 1000,
8
+ maxUsers: 16384
9
+ });
10
+ class WaDeviceListMemoryStore {
11
+ constructor(ttlMs = DEFAULTS.ttlMs, options = {}) {
12
+ if (!Number.isFinite(ttlMs) || ttlMs <= 0) {
13
+ throw new Error('device-list ttlMs must be a positive finite number');
14
+ }
15
+ this.records = new Map();
16
+ this.altIndex = new Map();
17
+ this.ttlMs = ttlMs;
18
+ this.maxUsers = (0, coercion_1.resolvePositive)(options.maxUsers, DEFAULTS.maxUsers, 'WaDeviceListMemoryStoreOptions.maxUsers');
19
+ this.logger = options.logger;
20
+ this.capacityWarned = false;
21
+ this.cleanup = (0, collections_1.createPeriodicCleanup)(ttlMs, () => {
22
+ void this.cleanupExpired(Date.now());
23
+ });
24
+ }
25
+ warnCapacity() {
26
+ if (this.capacityWarned || !this.logger)
27
+ return;
28
+ this.capacityWarned = true;
29
+ this.logger.warn('device list store at capacity, evicting oldest', {
30
+ max: this.maxUsers
31
+ });
32
+ }
33
+ async upsertUserDevicesBatch(snapshots) {
34
+ for (let index = 0; index < snapshots.length; index += 1) {
35
+ const snapshot = snapshots[index];
36
+ const previous = this.records.get(snapshot.userJid);
37
+ if (previous?.altUserJid && previous.altUserJid !== snapshot.altUserJid) {
38
+ this.altIndex.delete(previous.altUserJid);
39
+ }
40
+ (0, collections_1.setBoundedMapEntry)(this.records, snapshot.userJid, {
41
+ ...snapshot,
42
+ expiresAtMs: snapshot.updatedAtMs + this.ttlMs
43
+ }, this.maxUsers, () => this.warnCapacity());
44
+ if (snapshot.altUserJid) {
45
+ this.altIndex.set(snapshot.altUserJid, snapshot.userJid);
46
+ }
47
+ }
48
+ }
49
+ async getUserDevicesBatch(userJids, nowMs = Date.now()) {
50
+ const snapshots = new Array(userJids.length);
51
+ for (let index = 0; index < userJids.length; index += 1) {
52
+ snapshots[index] = this.readLive(userJids[index], nowMs);
53
+ }
54
+ return snapshots;
55
+ }
56
+ async findByAnyUserJid(jid, nowMs = Date.now()) {
57
+ const direct = this.readLive(jid, nowMs);
58
+ if (direct)
59
+ return direct;
60
+ const primary = this.altIndex.get(jid);
61
+ if (!primary)
62
+ return null;
63
+ return this.readLive(primary, nowMs);
64
+ }
65
+ async deleteUserDevices(userJid) {
66
+ const record = this.records.get(userJid);
67
+ if (!record)
68
+ return 0;
69
+ if (record.altUserJid)
70
+ this.altIndex.delete(record.altUserJid);
71
+ this.records.delete(userJid);
72
+ return 1;
73
+ }
74
+ async cleanupExpired(nowMs) {
75
+ let removed = 0;
76
+ for (const [userJid, record] of this.records) {
77
+ if (record.expiresAtMs > nowMs)
78
+ continue;
79
+ if (record.altUserJid)
80
+ this.altIndex.delete(record.altUserJid);
81
+ this.records.delete(userJid);
82
+ removed += 1;
83
+ }
84
+ return removed;
85
+ }
86
+ async clear() {
87
+ this.records.clear();
88
+ this.altIndex.clear();
89
+ }
90
+ async destroy() {
91
+ this.cleanup.destroy();
92
+ await this.clear();
93
+ }
94
+ readLive(userJid, nowMs) {
95
+ const record = this.records.get(userJid);
96
+ if (!record)
97
+ return null;
98
+ if (record.expiresAtMs <= nowMs) {
99
+ if (record.altUserJid)
100
+ this.altIndex.delete(record.altUserJid);
101
+ this.records.delete(userJid);
102
+ return null;
103
+ }
104
+ return record;
105
+ }
106
+ }
107
+ exports.WaDeviceListMemoryStore = WaDeviceListMemoryStore;
@@ -1,32 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WaParticipantsMemoryStore = void 0;
4
- const coercion_1 = require("../../../util/coercion");
5
- const collections_1 = require("../../../util/collections");
3
+ exports.WaGroupMetadataMemoryStore = void 0;
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
6
  const DEFAULTS = Object.freeze({
7
7
  ttlMs: 5 * 60 * 1000,
8
8
  maxGroups: 4096
9
9
  });
10
- class WaParticipantsMemoryStore {
10
+ class WaGroupMetadataMemoryStore {
11
11
  constructor(ttlMs = DEFAULTS.ttlMs, options = {}) {
12
12
  if (!Number.isFinite(ttlMs) || ttlMs <= 0) {
13
- throw new Error('participants ttlMs must be a positive finite number');
13
+ throw new Error('groupMetadata ttlMs must be a positive finite number');
14
14
  }
15
15
  this.records = new Map();
16
16
  this.ttlMs = ttlMs;
17
- this.maxGroups = (0, coercion_1.resolvePositive)(options.maxGroups, DEFAULTS.maxGroups, 'WaParticipantsMemoryStoreOptions.maxGroups');
18
- this.cleanupTimer = setInterval(() => {
17
+ this.maxGroups = (0, coercion_1.resolvePositive)(options.maxGroups, DEFAULTS.maxGroups, 'WaGroupMetadataMemoryStoreOptions.maxGroups');
18
+ this.logger = options.logger;
19
+ this.capacityWarned = false;
20
+ this.cleanup = (0, collections_1.createPeriodicCleanup)(ttlMs, () => {
19
21
  void this.cleanupExpired(Date.now());
20
- }, (0, collections_1.resolveCleanupIntervalMs)(ttlMs));
21
- this.cleanupTimer.unref();
22
+ });
22
23
  }
23
- async upsertGroupParticipants(snapshot) {
24
+ warnCapacity() {
25
+ if (this.capacityWarned || !this.logger)
26
+ return;
27
+ this.capacityWarned = true;
28
+ this.logger.warn('group metadata store at capacity, evicting oldest', {
29
+ max: this.maxGroups
30
+ });
31
+ }
32
+ async upsertGroupMetadata(snapshot) {
24
33
  (0, collections_1.setBoundedMapEntry)(this.records, snapshot.groupJid, {
25
34
  ...snapshot,
26
35
  expiresAtMs: snapshot.updatedAtMs + this.ttlMs
27
- }, this.maxGroups);
36
+ }, this.maxGroups, () => this.warnCapacity());
28
37
  }
29
- async getGroupParticipants(groupJid, nowMs = Date.now()) {
38
+ async getGroupMetadata(groupJid, nowMs = Date.now()) {
30
39
  const record = this.records.get(groupJid);
31
40
  if (!record) {
32
41
  return null;
@@ -37,7 +46,7 @@ class WaParticipantsMemoryStore {
37
46
  }
38
47
  return record;
39
48
  }
40
- async deleteGroupParticipants(groupJid) {
49
+ async deleteGroupMetadata(groupJid) {
41
50
  return this.records.delete(groupJid) ? 1 : 0;
42
51
  }
43
52
  async cleanupExpired(nowMs) {
@@ -54,8 +63,8 @@ class WaParticipantsMemoryStore {
54
63
  this.records.clear();
55
64
  }
56
65
  async destroy() {
57
- clearInterval(this.cleanupTimer);
66
+ this.cleanup.destroy();
58
67
  await this.clear();
59
68
  }
60
69
  }
61
- exports.WaParticipantsMemoryStore = WaParticipantsMemoryStore;
70
+ exports.WaGroupMetadataMemoryStore = WaGroupMetadataMemoryStore;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaIdentityMemoryStore = void 0;
4
- const jid_1 = require("../../../protocol/jid");
5
- const coercion_1 = require("../../../util/coercion");
6
- const collections_1 = require("../../../util/collections");
4
+ const jid_1 = require("../../protocol/jid");
5
+ const coercion_1 = require("../../util/coercion");
6
+ const collections_1 = require("../../util/collections");
7
7
  const DEFAULT_MAX_REMOTE_IDENTITIES = 8192;
8
8
  class WaIdentityMemoryStore {
9
9
  constructor(options = {}) {