zapo-js 0.3.0 → 1.0.1

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 (781) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -178
  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 +20 -8
  12. package/dist/auth/pairing/WaPairingFlow.js +35 -26
  13. package/dist/auth/pairing/pairing-code-crypto.js +17 -19
  14. package/dist/client/WaClient.js +343 -474
  15. package/dist/client/WaClientFactory.js +281 -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 +685 -207
  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 +257 -126
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +8 -9
  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 +163 -6
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +93 -44
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +4 -18
  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 +282 -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 +8 -9
  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 +158 -8
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +92 -43
  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 +69 -20
  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 +8 -1
  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/locks/pre-key.lock.js +4 -1
  245. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  246. package/dist/esm/store/memory/auth.store.js +24 -0
  247. package/dist/esm/store/memory/contact.store.js +79 -0
  248. package/dist/esm/store/memory/device-list.store.js +103 -0
  249. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  250. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  251. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  252. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  254. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  255. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  256. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  258. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  259. package/dist/esm/store/noop.store.js +6 -4
  260. package/dist/esm/transport/WaComms.js +14 -5
  261. package/dist/esm/transport/WaWebSocket.js +32 -8
  262. package/dist/esm/transport/binary/constants.js +10 -4
  263. package/dist/esm/transport/binary/decoder.js +21 -15
  264. package/dist/esm/transport/binary/encoder.js +96 -21
  265. package/dist/esm/transport/binary/tokens.js +12 -12
  266. package/dist/esm/transport/index.js +1 -0
  267. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  268. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  269. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  270. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  271. package/dist/esm/transport/node/builders/abprops.js +2 -2
  272. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  273. package/dist/esm/transport/node/builders/bot.js +38 -0
  274. package/dist/esm/transport/node/builders/business.js +30 -30
  275. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  276. package/dist/esm/transport/node/builders/community.js +53 -0
  277. package/dist/esm/transport/node/builders/device.js +2 -2
  278. package/dist/esm/transport/node/builders/email.js +6 -5
  279. package/dist/esm/transport/node/builders/global.js +1 -1
  280. package/dist/esm/transport/node/builders/group.js +114 -4
  281. package/dist/esm/transport/node/builders/media.js +2 -2
  282. package/dist/esm/transport/node/builders/message.js +83 -49
  283. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  284. package/dist/esm/transport/node/builders/passive.js +7 -0
  285. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  286. package/dist/esm/transport/node/builders/presence.js +27 -1
  287. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  288. package/dist/esm/transport/node/builders/privacy.js +6 -6
  289. package/dist/esm/transport/node/builders/profile.js +28 -8
  290. package/dist/esm/transport/node/builders/tos.js +58 -0
  291. package/dist/esm/transport/node/builders/usync.js +51 -2
  292. package/dist/esm/transport/node/helpers.js +3 -1
  293. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  294. package/dist/esm/transport/node/mex/client.js +22 -0
  295. package/dist/esm/transport/node/query.js +17 -0
  296. package/dist/esm/transport/node/usync.js +12 -0
  297. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  298. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  300. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  301. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  302. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  303. package/dist/esm/transport/noise/constants.js +0 -1
  304. package/dist/esm/transport/proxy.js +5 -0
  305. package/dist/esm/transport/stream/parse.js +3 -7
  306. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  307. package/dist/esm/util/async.js +4 -0
  308. package/dist/esm/util/bytes.js +37 -2
  309. package/dist/esm/util/clock.js +15 -0
  310. package/dist/esm/util/coercion.js +45 -3
  311. package/dist/esm/util/collections.js +11 -0
  312. package/dist/esm/util/index.js +2 -2
  313. package/dist/esm/util/primitives.js +19 -0
  314. package/dist/esm/util/runtime.js +5 -0
  315. package/dist/esm/version-spec.js +1 -0
  316. package/dist/index.js +35 -5
  317. package/dist/infra/log/ConsoleLogger.js +30 -6
  318. package/dist/infra/log/PinoLogger.js +64 -0
  319. package/dist/infra/log/types.js +4 -2
  320. package/dist/infra/perf/BackgroundQueue.js +55 -13
  321. package/dist/media/constants.js +34 -3
  322. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  323. package/dist/media/index.js +9 -4
  324. package/dist/media/sticker/sticker-pack.js +136 -0
  325. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  326. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  327. package/dist/message/WaMessageClient.js +46 -15
  328. package/dist/message/addons/link-preview/builder.js +39 -0
  329. package/dist/message/addons/link-preview/detect.js +58 -0
  330. package/dist/message/addons/link-preview/fetcher.js +394 -0
  331. package/dist/message/addons/link-preview/types.js +2 -0
  332. package/dist/message/context-info.js +129 -0
  333. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  334. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  335. package/dist/message/crypto/phash.js +136 -0
  336. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  337. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  338. package/dist/message/{content.js → encode/content.js} +192 -7
  339. package/dist/message/encode/media-payload.js +45 -0
  340. package/dist/message/{padding.js → encode/padding.js} +9 -3
  341. package/dist/message/index.js +2 -2
  342. package/dist/message/kinds/bot.js +120 -0
  343. package/dist/message/kinds/newsletter.js +248 -0
  344. package/dist/message/kinds/sticker-pack.js +34 -0
  345. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  346. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  347. package/dist/message/primitives/peer-data-operation.js +96 -0
  348. package/dist/mex.js +6 -0
  349. package/dist/proto.js +1 -1
  350. package/dist/protocol/abprops.js +10 -0
  351. package/dist/protocol/appstate.js +7 -31
  352. package/dist/protocol/auth.js +3 -2
  353. package/dist/protocol/bot.js +81 -0
  354. package/dist/protocol/browser.js +8 -0
  355. package/dist/protocol/business.js +22 -0
  356. package/dist/protocol/call.js +51 -0
  357. package/dist/protocol/constants.js +39 -3
  358. package/dist/protocol/defaults.js +3 -0
  359. package/dist/protocol/index.js +12 -3
  360. package/dist/protocol/jid.js +107 -5
  361. package/dist/protocol/media.js +25 -12
  362. package/dist/protocol/message.js +4 -1
  363. package/dist/protocol/newsletter.js +64 -0
  364. package/dist/protocol/nodes.js +22 -2
  365. package/dist/protocol/notification.js +19 -3
  366. package/dist/protocol/presence.js +16 -0
  367. package/dist/protocol/status.js +9 -0
  368. package/dist/retry/codec.js +5 -0
  369. package/dist/retry/parse.js +16 -34
  370. package/dist/retry/reason.js +5 -0
  371. package/dist/retry/replay.js +130 -36
  372. package/dist/retry/tracker.js +3 -7
  373. package/dist/signal/api/SignalDeviceSyncApi.js +67 -18
  374. package/dist/signal/api/SignalDigestSyncApi.js +7 -2
  375. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  376. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  377. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  378. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  379. package/dist/signal/api/codec.js +52 -0
  380. package/dist/signal/api/prekeys.js +4 -0
  381. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +6 -8
  382. package/dist/signal/constants.js +4 -1
  383. package/dist/signal/encoding.js +5 -303
  384. package/dist/signal/group/SenderKeyChain.js +18 -33
  385. package/dist/signal/group/SenderKeyCodec.js +2 -2
  386. package/dist/signal/group/SenderKeyManager.js +26 -9
  387. package/dist/signal/group/encoding.js +101 -0
  388. package/dist/signal/index.js +13 -10
  389. package/dist/signal/registration/encoding.js +39 -0
  390. package/dist/signal/registration/keygen.js +11 -1
  391. package/dist/signal/registration/utils.js +8 -1
  392. package/dist/signal/session/SignalProtocol.js +113 -11
  393. package/dist/signal/session/SignalRatchet.js +26 -56
  394. package/dist/signal/session/SignalSerializer.js +2 -2
  395. package/dist/signal/session/SignalSession.js +7 -15
  396. package/dist/signal/session/encoding.js +183 -0
  397. package/dist/signal/session/resolver.js +139 -30
  398. package/dist/store/cache/identity.cache.js +78 -0
  399. package/dist/store/cache/privacy-token.cache.js +60 -0
  400. package/dist/store/cache/sender-key.cache.js +104 -0
  401. package/dist/store/cache/session.cache.js +95 -0
  402. package/dist/store/contracts/group-metadata.store.js +2 -0
  403. package/dist/store/createStore.js +90 -36
  404. package/dist/store/index.js +18 -16
  405. package/dist/store/locks/contact.lock.js +1 -0
  406. package/dist/store/locks/device-list.lock.js +1 -0
  407. package/dist/store/locks/group-metadata.lock.js +23 -0
  408. package/dist/store/locks/pre-key.lock.js +4 -1
  409. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  410. package/dist/store/memory/auth.store.js +28 -0
  411. package/dist/store/memory/contact.store.js +83 -0
  412. package/dist/store/memory/device-list.store.js +107 -0
  413. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  414. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  415. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  416. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  417. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  418. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  419. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  420. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  421. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  422. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  423. package/dist/store/noop.store.js +7 -5
  424. package/dist/transport/WaComms.js +14 -5
  425. package/dist/transport/WaWebSocket.js +32 -8
  426. package/dist/transport/binary/constants.js +11 -5
  427. package/dist/transport/binary/decoder.js +24 -18
  428. package/dist/transport/binary/encoder.js +109 -34
  429. package/dist/transport/binary/tokens.js +12 -12
  430. package/dist/transport/index.js +3 -1
  431. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  432. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  433. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  434. package/dist/transport/node/WaNodeTransport.js +13 -0
  435. package/dist/transport/node/builders/abprops.js +1 -1
  436. package/dist/transport/node/builders/account-sync.js +7 -16
  437. package/dist/transport/node/builders/bot.js +43 -0
  438. package/dist/transport/node/builders/business.js +31 -31
  439. package/dist/transport/node/builders/chatstate.js +31 -0
  440. package/dist/transport/node/builders/community.js +59 -0
  441. package/dist/transport/node/builders/device.js +1 -1
  442. package/dist/transport/node/builders/email.js +6 -5
  443. package/dist/transport/node/builders/global.js +2 -2
  444. package/dist/transport/node/builders/group.js +121 -3
  445. package/dist/transport/node/builders/media.js +1 -1
  446. package/dist/transport/node/builders/message.js +84 -49
  447. package/dist/transport/node/builders/newsletter.js +183 -0
  448. package/dist/transport/node/builders/passive.js +10 -0
  449. package/dist/transport/node/builders/prekeys.js +3 -3
  450. package/dist/transport/node/builders/presence.js +28 -1
  451. package/dist/transport/node/builders/privacy-token.js +1 -1
  452. package/dist/transport/node/builders/privacy.js +5 -5
  453. package/dist/transport/node/builders/profile.js +30 -7
  454. package/dist/transport/node/builders/tos.js +63 -0
  455. package/dist/transport/node/builders/usync.js +52 -1
  456. package/dist/transport/node/helpers.js +3 -2
  457. package/dist/transport/node/mex/argo-decoder.js +2 -2
  458. package/dist/transport/node/mex/client.js +23 -0
  459. package/dist/transport/node/query.js +17 -0
  460. package/dist/transport/node/usync.js +13 -0
  461. package/dist/transport/noise/WaClientPayload.js +9 -9
  462. package/dist/transport/noise/WaMobileClientPayload.js +6 -1
  463. package/dist/transport/noise/WaNoiseCert.js +7 -2
  464. package/dist/transport/noise/WaNoiseHandshake.js +26 -24
  465. package/dist/transport/noise/WaNoiseSession.js +41 -61
  466. package/dist/transport/noise/WaNoiseSocket.js +19 -13
  467. package/dist/transport/noise/constants.js +1 -2
  468. package/dist/transport/proxy.js +5 -0
  469. package/dist/transport/stream/parse.js +3 -7
  470. package/dist/transport/wa-web-version-fetcher.js +94 -0
  471. package/dist/types/appstate/constants.d.ts +1 -1
  472. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  473. package/dist/types/appstate/index.d.ts +5 -5
  474. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  475. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  476. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  477. package/dist/types/appstate/types.d.ts +1 -1
  478. package/dist/types/appstate/utils.d.ts +18 -2
  479. package/dist/types/appstate-spec.d.ts +24 -0
  480. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  481. package/dist/types/auth/credentials-flow.d.ts +4 -3
  482. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  483. package/dist/types/auth/types.d.ts +49 -2
  484. package/dist/types/client/WaClient.d.ts +178 -71
  485. package/dist/types/client/WaClientFactory.d.ts +30 -5
  486. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  487. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  488. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  489. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  490. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  491. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  492. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  493. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  494. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  495. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  496. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  497. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +55 -32
  498. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  499. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  500. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  501. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  502. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  503. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  504. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  505. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  506. package/dist/types/client/events/abprops.d.ts +2 -1
  507. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  508. package/dist/types/client/events/business.d.ts +10 -0
  509. package/dist/types/client/events/call.d.ts +31 -0
  510. package/dist/types/client/events/chatstate.d.ts +9 -0
  511. package/dist/types/client/events/devices.d.ts +5 -4
  512. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  513. package/dist/types/client/events/group.d.ts +2 -1
  514. package/dist/types/client/events/identity.d.ts +2 -1
  515. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  516. package/dist/types/client/events/mex-notification.d.ts +6 -0
  517. package/dist/types/client/events/picture.d.ts +8 -0
  518. package/dist/types/client/events/presence.d.ts +28 -0
  519. package/dist/types/client/events/receipt.d.ts +14 -0
  520. package/dist/types/client/events/registration.d.ts +4 -3
  521. package/dist/types/client/index.d.ts +1 -1
  522. package/dist/types/client/media.d.ts +35 -1
  523. package/dist/types/client/messaging/fanout.d.ts +2 -2
  524. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  525. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  526. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  527. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  528. package/dist/types/client/messaging/messages.d.ts +28 -0
  529. package/dist/types/client/newsletter/admin.d.ts +71 -0
  530. package/dist/types/client/newsletter/content.d.ts +42 -0
  531. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  532. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  533. package/dist/types/client/newsletter/mex.d.ts +14 -0
  534. package/dist/types/client/newsletter/parse.d.ts +19 -0
  535. package/dist/types/client/newsletter/types.d.ts +190 -0
  536. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  537. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  538. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  539. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  540. package/dist/types/client/types.d.ts +844 -72
  541. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  542. package/dist/types/crypto/core/index.d.ts +2 -2
  543. package/dist/types/crypto/core/keys.d.ts +0 -4
  544. package/dist/types/crypto/core/nonce.d.ts +4 -5
  545. package/dist/types/crypto/core/primitives.d.ts +31 -20
  546. package/dist/types/crypto/core/random.d.ts +6 -0
  547. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  548. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  549. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  550. package/dist/types/crypto/curves/constants.d.ts +4 -3
  551. package/dist/types/crypto/curves/types.d.ts +0 -5
  552. package/dist/types/crypto/math/constants.d.ts +0 -1
  553. package/dist/types/crypto/math/mod.d.ts +0 -1
  554. package/dist/types/index.d.ts +34 -8
  555. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  556. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  557. package/dist/types/infra/log/types.d.ts +6 -0
  558. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  559. package/dist/types/media/constants.d.ts +7 -2
  560. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  561. package/dist/types/media/index.d.ts +7 -5
  562. package/dist/types/media/processor.d.ts +27 -5
  563. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  564. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  565. package/dist/types/media/transfer/conn.d.ts +7 -0
  566. package/dist/types/media/types.d.ts +1 -2
  567. package/dist/types/message/WaMessageClient.d.ts +14 -0
  568. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  569. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  570. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  571. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  572. package/dist/types/message/context-info.d.ts +66 -0
  573. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  574. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  575. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  576. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  577. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  578. package/dist/types/message/encode/content.d.ts +43 -0
  579. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  580. package/dist/types/message/encode/media-payload.d.ts +12 -0
  581. package/dist/types/message/index.d.ts +2 -2
  582. package/dist/types/message/kinds/bot.d.ts +31 -0
  583. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  584. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  585. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  586. package/dist/types/message/primitives/incoming.d.ts +21 -0
  587. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  588. package/dist/types/message/types.d.ts +209 -11
  589. package/dist/types/mex.d.ts +2 -0
  590. package/dist/types/proto.d.ts +2 -2
  591. package/dist/types/protocol/abprops.d.ts +9 -0
  592. package/dist/types/protocol/appstate.d.ts +4 -49
  593. package/dist/types/protocol/auth.d.ts +2 -2
  594. package/dist/types/protocol/bot.d.ts +45 -0
  595. package/dist/types/protocol/browser.d.ts +8 -0
  596. package/dist/types/protocol/business.d.ts +21 -0
  597. package/dist/types/protocol/call.d.ts +44 -0
  598. package/dist/types/protocol/constants.d.ts +16 -3
  599. package/dist/types/protocol/defaults.d.ts +3 -0
  600. package/dist/types/protocol/group.d.ts +1 -1
  601. package/dist/types/protocol/index.d.ts +2 -1
  602. package/dist/types/protocol/jid.d.ts +78 -0
  603. package/dist/types/protocol/media.d.ts +21 -13
  604. package/dist/types/protocol/message.d.ts +4 -0
  605. package/dist/types/protocol/newsletter.d.ts +65 -0
  606. package/dist/types/protocol/nodes.d.ts +20 -0
  607. package/dist/types/protocol/notification.d.ts +16 -0
  608. package/dist/types/protocol/presence.d.ts +16 -0
  609. package/dist/types/protocol/status.d.ts +7 -0
  610. package/dist/types/retry/codec.d.ts +5 -0
  611. package/dist/types/retry/index.d.ts +1 -1
  612. package/dist/types/retry/parse.d.ts +9 -0
  613. package/dist/types/retry/reason.d.ts +5 -0
  614. package/dist/types/retry/replay.d.ts +19 -5
  615. package/dist/types/retry/tracker.d.ts +10 -3
  616. package/dist/types/retry/types.d.ts +3 -8
  617. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  618. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  619. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  620. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  621. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  622. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  623. package/dist/types/signal/api/codec.d.ts +20 -0
  624. package/dist/types/signal/api/constants.d.ts +1 -1
  625. package/dist/types/signal/api/prekeys.d.ts +4 -0
  626. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  627. package/dist/types/signal/attestation/constants.d.ts +4 -0
  628. package/dist/types/signal/constants.d.ts +7 -4
  629. package/dist/types/signal/encoding.d.ts +6 -68
  630. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  631. package/dist/types/signal/group/SenderKeyManager.d.ts +18 -1
  632. package/dist/types/signal/group/encoding.d.ts +25 -0
  633. package/dist/types/signal/index.d.ts +4 -1
  634. package/dist/types/signal/registration/encoding.d.ts +30 -0
  635. package/dist/types/signal/registration/keygen.d.ts +10 -0
  636. package/dist/types/signal/registration/utils.d.ts +5 -0
  637. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  638. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  639. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  640. package/dist/types/signal/session/encoding.d.ts +28 -0
  641. package/dist/types/signal/session/resolver.d.ts +14 -0
  642. package/dist/types/signal/types.d.ts +1 -1
  643. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  644. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  645. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  646. package/dist/types/store/cache/session.cache.d.ts +23 -0
  647. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  648. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  649. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  650. package/dist/types/store/contracts/message.store.d.ts +0 -2
  651. package/dist/types/store/createStore.d.ts +54 -2
  652. package/dist/types/store/index.d.ts +17 -16
  653. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  654. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  655. package/dist/types/store/memory/auth.store.d.ts +18 -0
  656. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  657. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  658. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  659. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  661. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  662. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  663. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  664. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  665. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  666. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  667. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  668. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  669. package/dist/types/store/noop.store.d.ts +2 -2
  670. package/dist/types/store/types.d.ts +250 -6
  671. package/dist/types/transport/WaComms.d.ts +5 -0
  672. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  673. package/dist/types/transport/binary/constants.d.ts +8 -2
  674. package/dist/types/transport/binary/decoder.d.ts +5 -0
  675. package/dist/types/transport/binary/encoder.d.ts +5 -0
  676. package/dist/types/transport/binary/tokens.d.ts +6 -6
  677. package/dist/types/transport/index.d.ts +3 -1
  678. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  679. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  680. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  681. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  682. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  683. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  684. package/dist/types/transport/node/builders/business.d.ts +21 -4
  685. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  686. package/dist/types/transport/node/builders/community.d.ts +17 -0
  687. package/dist/types/transport/node/builders/group.d.ts +44 -2
  688. package/dist/types/transport/node/builders/message.d.ts +11 -6
  689. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  690. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  691. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  692. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  693. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  694. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  695. package/dist/types/transport/node/helpers.d.ts +1 -2
  696. package/dist/types/transport/node/mex/client.d.ts +12 -1
  697. package/dist/types/transport/node/query.d.ts +19 -1
  698. package/dist/types/transport/node/usync.d.ts +3 -0
  699. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +6 -1
  700. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  701. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  702. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  703. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  704. package/dist/types/transport/noise/constants.d.ts +4 -5
  705. package/dist/types/transport/noise/types.d.ts +1 -1
  706. package/dist/types/transport/proxy.d.ts +5 -0
  707. package/dist/types/transport/types.d.ts +14 -7
  708. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  709. package/dist/types/util/async.d.ts +4 -0
  710. package/dist/types/util/bytes.d.ts +36 -1
  711. package/dist/types/util/clock.d.ts +6 -0
  712. package/dist/types/util/coercion.d.ts +25 -0
  713. package/dist/types/util/collections.d.ts +8 -0
  714. package/dist/types/util/index.d.ts +2 -2
  715. package/dist/types/util/primitives.d.ts +11 -0
  716. package/dist/types/util/runtime.d.ts +5 -0
  717. package/dist/types/version-spec.d.ts +1 -0
  718. package/dist/util/async.js +4 -0
  719. package/dist/util/bytes.js +37 -2
  720. package/dist/util/clock.js +18 -0
  721. package/dist/util/coercion.js +48 -3
  722. package/dist/util/collections.js +12 -0
  723. package/dist/util/index.js +7 -1
  724. package/dist/util/primitives.js +20 -0
  725. package/dist/util/runtime.js +5 -0
  726. package/dist/version-spec.js +5 -0
  727. package/package.json +32 -8
  728. package/spec/appstate/index.d.ts +188 -0
  729. package/spec/appstate/index.js +850 -0
  730. package/spec/mex/index.d.ts +4172 -0
  731. package/spec/mex/index.js +261 -0
  732. package/spec/proto/index.d.ts +16305 -0
  733. package/spec/proto/index.js +1 -0
  734. package/spec/version/index.d.ts +4 -0
  735. package/spec/version/index.js +9 -0
  736. package/spec/version/version.json +3 -0
  737. package/dist/client/events/chat.js +0 -227
  738. package/dist/client/incoming.js +0 -306
  739. package/dist/client/mailbox.js +0 -66
  740. package/dist/client/messages.js +0 -305
  741. package/dist/esm/client/events/chat.js +0 -224
  742. package/dist/esm/client/incoming.js +0 -296
  743. package/dist/esm/client/mailbox.js +0 -63
  744. package/dist/esm/client/messages.js +0 -301
  745. package/dist/esm/media/WaMediaCrypto.js +0 -499
  746. package/dist/esm/message/phash.js +0 -47
  747. package/dist/esm/store/locks/participants.lock.js +0 -20
  748. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  749. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  750. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  751. package/dist/media/WaMediaCrypto.js +0 -503
  752. package/dist/message/phash.js +0 -50
  753. package/dist/store/locks/participants.lock.js +0 -23
  754. package/dist/store/providers/memory/contact.store.js +0 -32
  755. package/dist/store/providers/memory/device-list.store.js +0 -71
  756. package/dist/transport/node/mex/persist-ids.js +0 -13
  757. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  758. package/dist/types/client/events/chat.d.ts +0 -3
  759. package/dist/types/client/history-sync.d.ts +0 -20
  760. package/dist/types/client/messages.d.ts +0 -18
  761. package/dist/types/client/messaging/participants.d.ts +0 -13
  762. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  763. package/dist/types/media/conn.d.ts +0 -3
  764. package/dist/types/message/content.d.ts +0 -14
  765. package/dist/types/message/incoming.d.ts +0 -18
  766. package/dist/types/signal/crypto/constants.d.ts +0 -4
  767. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  768. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  769. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  770. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  771. package/proto/index.d.ts +0 -10903
  772. package/proto/index.js +0 -1
  773. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  774. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  775. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  776. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  777. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  778. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  779. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  780. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  781. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -6,20 +6,27 @@ const PromiseDedup_1 = require("../../infra/perf/PromiseDedup");
6
6
  const jid_1 = require("../../protocol/jid");
7
7
  const bytes_1 = require("../../util/bytes");
8
8
  const primitives_1 = require("../../util/primitives");
9
+ /** Builds a {@link SignalSessionResolver} backed by the given Signal APIs and stores. */
9
10
  function createSignalSessionResolver(options) {
10
11
  const { signalProtocol, sessionStore, identityStore, signalIdentitySync, signalSessionSync, logger } = options;
11
12
  const dedup = new PromiseDedup_1.PromiseDedup();
12
- const ensureSessionInternal = async (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle) => {
13
+ const ensureSessionInternal = async (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle, knownAbsent = false) => {
14
+ const jidLogger = logger.child({ jid });
13
15
  const expectedSerializedIdentity = expectedIdentity
14
16
  ? (0, keys_1.toSerializedPubKey)(expectedIdentity)
15
17
  : null;
16
18
  if (reasonIdentity) {
17
19
  await signalIdentitySync.syncIdentityKeys([jid]);
18
20
  }
19
- if (await sessionStore.hasSession(address)) {
21
+ if (!knownAbsent && (await sessionStore.hasSession(address))) {
20
22
  if (expectedSerializedIdentity) {
21
23
  const storedIdentity = await identityStore.getRemoteIdentity(address);
22
24
  if (!storedIdentity || !(0, bytes_1.uint8Equal)(storedIdentity, expectedSerializedIdentity)) {
25
+ jidLogger.warn('signal identity mismatch on stored identity', {
26
+ source: 'stored_vs_expected',
27
+ expected: (0, bytes_1.bytesToHex)(expectedSerializedIdentity),
28
+ stored: storedIdentity ? (0, bytes_1.bytesToHex)(storedIdentity) : null
29
+ });
23
30
  throw new Error('identity mismatch');
24
31
  }
25
32
  }
@@ -33,7 +40,7 @@ function createSignalSessionResolver(options) {
33
40
  };
34
41
  }
35
42
  else {
36
- logger.info('signal session missing, fetching remote key bundle', { jid });
43
+ jidLogger.debug('signal session missing, fetching remote key bundle');
37
44
  fetched = await signalSessionSync.fetchKeyBundle({
38
45
  jid,
39
46
  reasonIdentity
@@ -43,26 +50,40 @@ function createSignalSessionResolver(options) {
43
50
  if (reasonIdentity) {
44
51
  const storedIdentity = await identityStore.getRemoteIdentity(address);
45
52
  if (storedIdentity && !(0, bytes_1.uint8Equal)(remoteIdentity, storedIdentity)) {
53
+ jidLogger.warn('signal identity mismatch on fetched bundle vs stored', {
54
+ source: 'remote_vs_stored',
55
+ remote: (0, bytes_1.bytesToHex)(remoteIdentity),
56
+ stored: (0, bytes_1.bytesToHex)(storedIdentity)
57
+ });
46
58
  throw new Error('identity mismatch');
47
59
  }
48
60
  }
49
61
  if (expectedSerializedIdentity && !(0, bytes_1.uint8Equal)(remoteIdentity, expectedSerializedIdentity)) {
62
+ jidLogger.warn('signal identity mismatch on fetched bundle vs expected', {
63
+ source: 'remote_vs_expected',
64
+ remote: (0, bytes_1.bytesToHex)(remoteIdentity),
65
+ expected: (0, bytes_1.bytesToHex)(expectedSerializedIdentity)
66
+ });
50
67
  throw new Error('identity mismatch');
51
68
  }
52
69
  const session = await signalProtocol.establishOutgoingSession(address, fetched.bundle, {
53
- reuseExisting: true
70
+ reuseExisting: true,
71
+ knownAbsent
54
72
  });
55
- logger.info('signal session synchronized', {
56
- jid,
73
+ jidLogger.debug('signal session synchronized', {
57
74
  regId: fetched.bundle.regId,
58
75
  hasOneTimeKey: fetched.bundle.oneTimeKey !== undefined
59
76
  });
60
77
  return session;
61
78
  };
62
- const ensureSessionWithDedup = (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle) => {
79
+ const ensureSessionWithDedup = (address, jid, expectedIdentity, reasonIdentity = false, prefetchedBundle, knownAbsent = false) => {
63
80
  const expectedIdentityKey = expectedIdentity ? (0, bytes_1.bytesToHex)(expectedIdentity) : 'none';
64
- const dedupKey = `signalSession:${(0, jid_1.signalAddressKey)(address)}:${reasonIdentity ? '1' : '0'}:${expectedIdentityKey}`;
65
- return dedup.run(dedupKey, () => ensureSessionInternal(address, jid, expectedIdentity, reasonIdentity, prefetchedBundle));
81
+ // knownAbsent is part of the dedup key: single-caller (false) and
82
+ // batch (true) must NOT share a Promise, or the unsafe variant
83
+ // could leak to the safe caller. Per-address lock + the recheck
84
+ // inside persistOutgoingSessionsBatch resolves any race.
85
+ const dedupKey = `signalSession:${(0, jid_1.signalAddressKey)(address)}:${reasonIdentity ? '1' : '0'}:${expectedIdentityKey}:${knownAbsent ? '1' : '0'}`;
86
+ return dedup.run(dedupKey, () => ensureSessionInternal(address, jid, expectedIdentity, reasonIdentity, prefetchedBundle, knownAbsent));
66
87
  };
67
88
  const ensureSession = (address, jid, expectedIdentity, reasonIdentity = false) => ensureSessionWithDedup(address, jid, expectedIdentity, reasonIdentity).then(() => { });
68
89
  const ensureSessionsBatch = async (targetJids, expectedIdentityByJid) => {
@@ -123,7 +144,14 @@ function createSignalSessionResolver(options) {
123
144
  const session = resolvedByIndex[index];
124
145
  const expectedIdentity = normalizedExpectedIdentityByJid?.get(normalizedTargetJids[index]);
125
146
  if (session && expectedIdentity) {
126
- if (!(0, bytes_1.uint8Equal)(session.remote.pubKey, (0, keys_1.toSerializedPubKey)(expectedIdentity))) {
147
+ const expectedSerialized = (0, keys_1.toSerializedPubKey)(expectedIdentity);
148
+ if (!(0, bytes_1.uint8Equal)(session.remote.pubKey, expectedSerialized)) {
149
+ logger.warn('signal identity mismatch on existing session vs expected', {
150
+ jid: normalizedTargetJids[index],
151
+ source: 'session_vs_expected',
152
+ session: (0, bytes_1.bytesToHex)(session.remote.pubKey),
153
+ expected: (0, bytes_1.bytesToHex)(expectedSerialized)
154
+ });
127
155
  throw new Error('identity mismatch');
128
156
  }
129
157
  }
@@ -149,51 +177,132 @@ function createSignalSessionResolver(options) {
149
177
  });
150
178
  return collectResolvedTargets();
151
179
  }
152
- const ensuredTargetIndices = new Array(missingIndices.length);
153
- const ensurePromises = new Array(missingIndices.length);
154
- let ensureCount = 0;
180
+ // Prepare under per-address locks (no persist). Bulk persist below
181
+ // holds every per-address lock at once via persistOutgoingSessionsBatch.
182
+ const prepareTargetIndices = new Array(missingIndices.length);
183
+ const preparePromises = new Array(missingIndices.length);
184
+ let prepareCount = 0;
185
+ const missingBundleTargets = [];
155
186
  for (let index = 0; index < missingIndices.length; index += 1) {
156
187
  const targetIndex = missingIndices[index];
157
188
  const targetJid = normalizedTargetJids[targetIndex];
158
189
  const batchResult = batchResults[index];
159
190
  if (!batchResult?.bundle) {
160
- logger.warn('signal batch key fetch returned target without bundle', {
191
+ missingBundleTargets.push({
161
192
  jid: targetJid,
162
- message: batchResult?.errorText ?? 'missing key bundle user in response'
193
+ reason: batchResult?.errorText ?? 'missing key bundle user in response'
163
194
  });
164
195
  continue;
165
196
  }
166
197
  const expectedIdentity = normalizedExpectedIdentityByJid?.get(targetJid);
167
- ensuredTargetIndices[ensureCount] = targetIndex;
168
- ensurePromises[ensureCount] = ensureSessionWithDedup(normalizedTargetAddresses[targetIndex], targetJid, expectedIdentity, false, batchResult.bundle);
169
- ensureCount += 1;
198
+ const expectedSerializedIdentity = expectedIdentity
199
+ ? (0, keys_1.toSerializedPubKey)(expectedIdentity)
200
+ : null;
201
+ const bundleIdentity = (0, keys_1.toSerializedPubKey)(batchResult.bundle.identity);
202
+ if (expectedSerializedIdentity &&
203
+ !(0, bytes_1.uint8Equal)(bundleIdentity, expectedSerializedIdentity)) {
204
+ logger.warn('signal identity mismatch on fetched batch bundle vs expected', {
205
+ jid: targetJid,
206
+ source: 'bundle_vs_expected',
207
+ bundle: (0, bytes_1.bytesToHex)(bundleIdentity),
208
+ expected: (0, bytes_1.bytesToHex)(expectedSerializedIdentity)
209
+ });
210
+ throw new Error('identity mismatch');
211
+ }
212
+ const targetAddress = normalizedTargetAddresses[targetIndex];
213
+ const bundle = batchResult.bundle;
214
+ prepareTargetIndices[prepareCount] = targetIndex;
215
+ preparePromises[prepareCount] = signalProtocol
216
+ .prepareOutgoingSession(targetAddress, bundle, {
217
+ reuseExisting: true,
218
+ knownAbsent: true
219
+ })
220
+ .then((prep) => ({
221
+ session: prep.session,
222
+ remoteIdentity: prep.remoteIdentity
223
+ }));
224
+ prepareCount += 1;
225
+ }
226
+ if (missingBundleTargets.length > 0) {
227
+ logger.warn('signal batch key fetch returned targets without bundle', {
228
+ droppedCount: missingBundleTargets.length,
229
+ totalRequested: missingIndices.length,
230
+ sample: missingBundleTargets.slice(0, 3)
231
+ });
170
232
  }
171
- if (ensureCount === 0) {
233
+ if (prepareCount === 0) {
172
234
  return collectResolvedTargets();
173
235
  }
174
- ensuredTargetIndices.length = ensureCount;
175
- ensurePromises.length = ensureCount;
176
- const ensureResults = await Promise.allSettled(ensurePromises);
236
+ prepareTargetIndices.length = prepareCount;
237
+ preparePromises.length = prepareCount;
238
+ const prepareResults = await Promise.allSettled(preparePromises);
239
+ const batchEntries = [];
240
+ const entryToTargetIndex = [];
177
241
  const fallbackIndices = [];
178
- for (let index = 0; index < ensuredTargetIndices.length; index += 1) {
179
- const targetIndex = ensuredTargetIndices[index];
180
- const ensureResult = ensureResults[index];
181
- if (ensureResult.status === 'rejected') {
182
- const normalized = (0, primitives_1.toError)(ensureResult.reason);
242
+ for (let i = 0; i < prepareTargetIndices.length; i += 1) {
243
+ const targetIndex = prepareTargetIndices[i];
244
+ const result = prepareResults[i];
245
+ if (result.status === 'rejected') {
246
+ const normalized = (0, primitives_1.toError)(result.reason);
183
247
  if (normalized.message === 'identity mismatch') {
184
248
  throw normalized;
185
249
  }
186
- logger.warn('signal session ensure failed during batch resolution', {
250
+ logger.warn('signal session prepare failed during batch resolution', {
187
251
  jid: normalizedTargetJids[targetIndex],
188
252
  message: normalized.message
189
253
  });
190
254
  continue;
191
255
  }
192
- const session = ensureResult.value;
256
+ batchEntries.push({
257
+ address: normalizedTargetAddresses[targetIndex],
258
+ session: result.value.session,
259
+ remoteIdentity: result.value.remoteIdentity
260
+ });
261
+ entryToTargetIndex.push(targetIndex);
262
+ }
263
+ if (batchEntries.length === 0) {
264
+ return collectResolvedTargets();
265
+ }
266
+ let persistResult;
267
+ try {
268
+ persistResult = await signalProtocol.persistOutgoingSessionsBatch(batchEntries);
269
+ }
270
+ catch (error) {
271
+ const normalized = (0, primitives_1.toError)(error);
272
+ logger.warn('signal batched session persist failed', {
273
+ requested: batchEntries.length,
274
+ message: normalized.message
275
+ });
276
+ for (let i = 0; i < entryToTargetIndex.length; i += 1) {
277
+ fallbackIndices.push(entryToTargetIndex[i]);
278
+ }
279
+ persistResult = { resolved: [], skipped: [] };
280
+ }
281
+ const sessionByAddressKey = new Map();
282
+ for (const r of persistResult.resolved) {
283
+ sessionByAddressKey.set((0, jid_1.signalAddressKey)(r.address), r.session);
284
+ }
285
+ const skippedByAddressKey = new Set();
286
+ for (const s of persistResult.skipped) {
287
+ skippedByAddressKey.add((0, jid_1.signalAddressKey)(s.address));
288
+ logger.warn('signal session persist skipped due to identity conflict', {
289
+ user: s.address.user,
290
+ server: s.address.server,
291
+ device: s.address.device
292
+ });
293
+ }
294
+ for (let i = 0; i < entryToTargetIndex.length; i += 1) {
295
+ const targetIndex = entryToTargetIndex[i];
296
+ const addrKey = (0, jid_1.signalAddressKey)(normalizedTargetAddresses[targetIndex]);
297
+ const session = sessionByAddressKey.get(addrKey);
193
298
  if (session) {
194
299
  resolvedByIndex[targetIndex] = session;
300
+ continue;
301
+ }
302
+ if (skippedByAddressKey.has(addrKey)) {
303
+ continue;
195
304
  }
196
- else {
305
+ if (!fallbackIndices.includes(targetIndex)) {
197
306
  fallbackIndices.push(targetIndex);
198
307
  }
199
308
  }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withIdentityCache = withIdentityCache;
4
+ const identity_store_1 = require("../memory/identity.store");
5
+ /**
6
+ * Read-through / write-through in-process cache for a persistent remote
7
+ * identity backend. Reuses {@link WaIdentityMemoryStore} as the bounded-LRU
8
+ * L1. Remote identities are read alongside sessions on the send path (the
9
+ * identity-mismatch guard), so caching them complements
10
+ * {@link withSessionCache}.
11
+ *
12
+ * The identity store has no per-key delete: identities are overwritten on
13
+ * re-establishment, so a peer's key change propagates through the
14
+ * write-through `setRemoteIdentity`. See {@link withSessionCache} for the
15
+ * shared coherence model and the single-writer-per-session assumption.
16
+ */
17
+ function withIdentityCache(backend, maxEntries) {
18
+ const l1 = new identity_store_1.WaIdentityMemoryStore({ maxRemoteIdentities: maxEntries });
19
+ let generation = 0;
20
+ return {
21
+ getRemoteIdentity: async (address) => {
22
+ const cached = await l1.getRemoteIdentity(address);
23
+ if (cached !== null)
24
+ return cached;
25
+ const gen = generation;
26
+ const fetched = await backend.getRemoteIdentity(address);
27
+ if (fetched !== null &&
28
+ gen === generation &&
29
+ (await l1.getRemoteIdentity(address)) === null) {
30
+ await l1.setRemoteIdentity(address, fetched);
31
+ }
32
+ return fetched;
33
+ },
34
+ getRemoteIdentities: async (addresses) => {
35
+ const cached = await l1.getRemoteIdentities(addresses);
36
+ const missing = [];
37
+ for (let i = 0; i < addresses.length; i += 1) {
38
+ if (cached[i] === null)
39
+ missing.push(i);
40
+ }
41
+ if (missing.length === 0)
42
+ return cached;
43
+ const gen = generation;
44
+ const fetched = await backend.getRemoteIdentities(missing.map((i) => addresses[i]));
45
+ const coherent = gen === generation;
46
+ const result = cached.slice();
47
+ for (let j = 0; j < missing.length; j += 1) {
48
+ const key = fetched[j];
49
+ result[missing[j]] = key;
50
+ if (key !== null &&
51
+ coherent &&
52
+ (await l1.getRemoteIdentity(addresses[missing[j]])) === null) {
53
+ await l1.setRemoteIdentity(addresses[missing[j]], key);
54
+ }
55
+ }
56
+ return result;
57
+ },
58
+ setRemoteIdentity: async (address, identityKey) => {
59
+ generation += 1;
60
+ await backend.setRemoteIdentity(address, identityKey);
61
+ await l1.setRemoteIdentity(address, identityKey);
62
+ },
63
+ setRemoteIdentities: async (entries) => {
64
+ generation += 1;
65
+ await backend.setRemoteIdentities(entries);
66
+ await l1.setRemoteIdentities(entries);
67
+ },
68
+ clear: async () => {
69
+ generation += 1;
70
+ await backend.clear();
71
+ await l1.clear();
72
+ },
73
+ destroy: async () => {
74
+ await l1.clear();
75
+ await backend.destroy?.();
76
+ }
77
+ };
78
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withPrivacyTokenCache = withPrivacyTokenCache;
4
+ const privacy_token_store_1 = require("../memory/privacy-token.store");
5
+ /**
6
+ * Read-through cache for a persistent privacy-token backend. Reuses
7
+ * {@link WaPrivacyTokenMemoryStore} as the bounded-LRU L1.
8
+ *
9
+ * Unlike the signal caches this is **invalidate-on-write, not
10
+ * write-through**: `upsert` merges partial fields into the existing row on
11
+ * the backend, so caching the partial incoming record would diverge from the
12
+ * backend's merged result. Instead each upsert drops the L1 entry and the
13
+ * next read re-populates from the merged backend truth. See
14
+ * {@link withSessionCache} for the shared coherence model and the
15
+ * single-writer-per-session assumption.
16
+ */
17
+ function withPrivacyTokenCache(backend, maxEntries) {
18
+ const l1 = new privacy_token_store_1.WaPrivacyTokenMemoryStore(maxEntries);
19
+ let generation = 0;
20
+ return {
21
+ upsert: async (record) => {
22
+ generation += 1;
23
+ await backend.upsert(record);
24
+ await l1.deleteByJid(record.jid);
25
+ },
26
+ upsertBatch: async (records) => {
27
+ generation += 1;
28
+ await backend.upsertBatch(records);
29
+ for (let i = 0; i < records.length; i += 1) {
30
+ await l1.deleteByJid(records[i].jid);
31
+ }
32
+ },
33
+ getByJid: async (jid) => {
34
+ const cached = await l1.getByJid(jid);
35
+ if (cached !== null)
36
+ return cached;
37
+ const gen = generation;
38
+ const fetched = await backend.getByJid(jid);
39
+ if (fetched !== null && gen === generation && (await l1.getByJid(jid)) === null) {
40
+ await l1.upsert(fetched);
41
+ }
42
+ return fetched;
43
+ },
44
+ deleteByJid: async (jid) => {
45
+ generation += 1;
46
+ const deleted = await backend.deleteByJid(jid);
47
+ await l1.deleteByJid(jid);
48
+ return deleted;
49
+ },
50
+ clear: async () => {
51
+ generation += 1;
52
+ await backend.clear();
53
+ await l1.clear();
54
+ },
55
+ destroy: async () => {
56
+ await l1.clear();
57
+ await backend.destroy?.();
58
+ }
59
+ };
60
+ }
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSenderKeyCache = withSenderKeyCache;
4
+ const sender_key_store_1 = require("../memory/sender-key.store");
5
+ /**
6
+ * Read-through / write-through in-process cache for a persistent sender-key
7
+ * backend. Reuses {@link SenderKeyMemoryStore} as the bounded-LRU L1 so the
8
+ * per-(group, sender) lookups repeated across a group fan-out skip the
9
+ * backend round-trip.
10
+ *
11
+ * Only the point reads are cached. `getGroupSenderKeyList` returns the
12
+ * *complete* set for a group, which a partial point cache would under-report,
13
+ * so it goes straight to the backend. Upserts replace the whole record (no
14
+ * merge), so they are write-through; the sweep deletes
15
+ * (`deleteDeviceSenderKey`/`markForgetSenderKey`) run on the backend for the
16
+ * authoritative count and then invalidate the matching L1 entries via the
17
+ * memory store's own sweep. See {@link withSessionCache} for the shared
18
+ * coherence model and the single-writer-per-session assumption.
19
+ */
20
+ function withSenderKeyCache(backend, maxEntries) {
21
+ const l1 = new sender_key_store_1.SenderKeyMemoryStore({
22
+ maxSenderKeys: maxEntries,
23
+ maxSenderDistributions: maxEntries
24
+ });
25
+ let generation = 0;
26
+ return {
27
+ upsertSenderKey: async (record) => {
28
+ generation += 1;
29
+ await backend.upsertSenderKey(record);
30
+ await l1.upsertSenderKey(record);
31
+ },
32
+ upsertSenderKeyDistribution: async (record) => {
33
+ generation += 1;
34
+ await backend.upsertSenderKeyDistribution(record);
35
+ await l1.upsertSenderKeyDistribution(record);
36
+ },
37
+ upsertSenderKeyDistributions: async (records) => {
38
+ generation += 1;
39
+ await backend.upsertSenderKeyDistributions(records);
40
+ await l1.upsertSenderKeyDistributions(records);
41
+ },
42
+ getGroupSenderKeyList: (groupId) => backend.getGroupSenderKeyList(groupId),
43
+ getDeviceSenderKey: async (groupId, sender) => {
44
+ const cached = await l1.getDeviceSenderKey(groupId, sender);
45
+ if (cached !== null)
46
+ return cached;
47
+ const gen = generation;
48
+ const fetched = await backend.getDeviceSenderKey(groupId, sender);
49
+ if (fetched !== null &&
50
+ gen === generation &&
51
+ (await l1.getDeviceSenderKey(groupId, sender)) === null) {
52
+ await l1.upsertSenderKey(fetched);
53
+ }
54
+ return fetched;
55
+ },
56
+ getDeviceSenderKeyDistributions: async (groupId, senders) => {
57
+ const cached = await l1.getDeviceSenderKeyDistributions(groupId, senders);
58
+ const missing = [];
59
+ for (let i = 0; i < senders.length; i += 1) {
60
+ if (cached[i] === null)
61
+ missing.push(i);
62
+ }
63
+ if (missing.length === 0)
64
+ return cached;
65
+ const gen = generation;
66
+ const fetched = await backend.getDeviceSenderKeyDistributions(groupId, missing.map((i) => senders[i]));
67
+ const coherent = gen === generation;
68
+ const result = cached.slice();
69
+ for (let j = 0; j < missing.length; j += 1) {
70
+ const record = fetched[j];
71
+ result[missing[j]] = record;
72
+ if (record !== null && coherent) {
73
+ const [current] = await l1.getDeviceSenderKeyDistributions(groupId, [
74
+ senders[missing[j]]
75
+ ]);
76
+ if (current === null)
77
+ await l1.upsertSenderKeyDistribution(record);
78
+ }
79
+ }
80
+ return result;
81
+ },
82
+ deleteDeviceSenderKey: async (target, groupId) => {
83
+ generation += 1;
84
+ const deleted = await backend.deleteDeviceSenderKey(target, groupId);
85
+ await l1.deleteDeviceSenderKey(target, groupId);
86
+ return deleted;
87
+ },
88
+ markForgetSenderKey: async (groupId, participants) => {
89
+ generation += 1;
90
+ const deleted = await backend.markForgetSenderKey(groupId, participants);
91
+ await l1.markForgetSenderKey(groupId, participants);
92
+ return deleted;
93
+ },
94
+ clear: async () => {
95
+ generation += 1;
96
+ await backend.clear();
97
+ await l1.clear();
98
+ },
99
+ destroy: async () => {
100
+ await l1.clear();
101
+ await backend.destroy?.();
102
+ }
103
+ };
104
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withSessionCache = withSessionCache;
4
+ const session_store_1 = require("../memory/session.store");
5
+ /**
6
+ * Read-through / write-through in-process cache for a persistent session
7
+ * backend. Reuses {@link WaSessionMemoryStore} as the bounded-LRU L1 so that
8
+ * repeated reads of the same peer on the send/recv path skip the backend
9
+ * round-trip.
10
+ *
11
+ * Coherence model (single process):
12
+ * - every mutation (set/delete/clear) writes the backend then the L1 in
13
+ * lock-step and bumps a generation counter;
14
+ * - a read only populates the L1 when no mutation interleaved its backend
15
+ * fetch (generation unchanged) and the slot is still empty, so an in-flight
16
+ * read can never resurrect a concurrently deleted entry nor overwrite a
17
+ * fresher concurrent write;
18
+ * - there is no negative caching: a miss always re-hits the backend.
19
+ *
20
+ * This cache assumes a single writer per `sessionId` (the library's
21
+ * connection model). Do not share one backend across processes for the same
22
+ * session with the cache enabled - there is no cross-process invalidation
23
+ * channel, so another process's writes would leave this L1 stale.
24
+ */
25
+ function withSessionCache(backend, maxEntries) {
26
+ const l1 = new session_store_1.WaSessionMemoryStore({ maxSessions: maxEntries });
27
+ let generation = 0;
28
+ return {
29
+ hasSession: async (address) => {
30
+ if (await l1.hasSession(address))
31
+ return true;
32
+ return backend.hasSession(address);
33
+ },
34
+ hasSessions: (addresses) => backend.hasSessions(addresses),
35
+ getSession: async (address) => {
36
+ const cached = await l1.getSession(address);
37
+ if (cached !== null)
38
+ return cached;
39
+ const gen = generation;
40
+ const fetched = await backend.getSession(address);
41
+ if (fetched !== null && gen === generation && (await l1.getSession(address)) === null) {
42
+ await l1.setSession(address, fetched);
43
+ }
44
+ return fetched;
45
+ },
46
+ getSessionsBatch: async (addresses) => {
47
+ const cached = await l1.getSessionsBatch(addresses);
48
+ const missing = [];
49
+ for (let i = 0; i < addresses.length; i += 1) {
50
+ if (cached[i] === null)
51
+ missing.push(i);
52
+ }
53
+ if (missing.length === 0)
54
+ return cached;
55
+ const gen = generation;
56
+ const fetched = await backend.getSessionsBatch(missing.map((i) => addresses[i]));
57
+ const coherent = gen === generation;
58
+ const result = cached.slice();
59
+ for (let j = 0; j < missing.length; j += 1) {
60
+ const record = fetched[j];
61
+ result[missing[j]] = record;
62
+ if (record !== null &&
63
+ coherent &&
64
+ (await l1.getSession(addresses[missing[j]])) === null) {
65
+ await l1.setSession(addresses[missing[j]], record);
66
+ }
67
+ }
68
+ return result;
69
+ },
70
+ setSession: async (address, session) => {
71
+ generation += 1;
72
+ await backend.setSession(address, session);
73
+ await l1.setSession(address, session);
74
+ },
75
+ setSessionsBatch: async (entries) => {
76
+ generation += 1;
77
+ await backend.setSessionsBatch(entries);
78
+ await l1.setSessionsBatch(entries);
79
+ },
80
+ deleteSession: async (address) => {
81
+ generation += 1;
82
+ await backend.deleteSession(address);
83
+ await l1.deleteSession(address);
84
+ },
85
+ clear: async () => {
86
+ generation += 1;
87
+ await backend.clear();
88
+ await l1.clear();
89
+ },
90
+ destroy: async () => {
91
+ await l1.clear();
92
+ await backend.destroy?.();
93
+ }
94
+ };
95
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });