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
@@ -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 = {}) {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaMessageSecretMemoryStore = void 0;
4
- const coercion_1 = require("../../../util/coercion");
5
- const collections_1 = require("../../../util/collections");
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
6
  const DEFAULTS = Object.freeze({
7
7
  ttlMs: 30 * 60 * 1000,
8
8
  maxSecrets: 10000
@@ -15,10 +15,19 @@ class WaMessageSecretMemoryStore {
15
15
  this.secrets = new Map();
16
16
  this.ttlMs = ttlMs;
17
17
  this.maxSecrets = (0, coercion_1.resolvePositive)(options.maxSecrets, DEFAULTS.maxSecrets, 'WaMessageSecretMemoryStoreOptions.maxSecrets');
18
- this.cleanupTimer = setInterval(() => {
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
+ });
23
+ }
24
+ warnCapacity() {
25
+ if (this.capacityWarned || !this.logger)
26
+ return;
27
+ this.capacityWarned = true;
28
+ this.logger.warn('message secret store at capacity, evicting oldest', {
29
+ max: this.maxSecrets
30
+ });
22
31
  }
23
32
  async get(messageId, nowMs = Date.now()) {
24
33
  const cached = this.secrets.get(messageId);
@@ -52,7 +61,7 @@ class WaMessageSecretMemoryStore {
52
61
  secret: entry.secret,
53
62
  senderJid: entry.senderJid,
54
63
  expiresAtMs: Date.now() + this.ttlMs
55
- }, this.maxSecrets);
64
+ }, this.maxSecrets, () => this.warnCapacity());
56
65
  }
57
66
  async setBatch(entries) {
58
67
  const nowMs = Date.now();
@@ -61,7 +70,7 @@ class WaMessageSecretMemoryStore {
61
70
  secret: entries[i].entry.secret,
62
71
  senderJid: entries[i].entry.senderJid,
63
72
  expiresAtMs: nowMs + this.ttlMs
64
- }, this.maxSecrets);
73
+ }, this.maxSecrets, () => this.warnCapacity());
65
74
  }
66
75
  }
67
76
  async cleanupExpired(nowMs) {
@@ -78,7 +87,7 @@ class WaMessageSecretMemoryStore {
78
87
  this.secrets.clear();
79
88
  }
80
89
  async destroy() {
81
- clearInterval(this.cleanupTimer);
90
+ this.cleanup.destroy();
82
91
  this.secrets.clear();
83
92
  }
84
93
  }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaMessageMemoryStore = void 0;
4
- const coercion_1 = require("../../../util/coercion");
5
- const collections_1 = require("../../../util/collections");
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
6
  const DEFAULT_MESSAGE_MEMORY_STORE_LIMITS = Object.freeze({
7
7
  messages: 50000
8
8
  });
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaPreKeyMemoryStore = void 0;
4
- const coercion_1 = require("../../../util/coercion");
5
- const collections_1 = require("../../../util/collections");
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
6
  const DEFAULT_MAX_PRE_KEYS = 4096;
7
7
  class WaPreKeyMemoryStore {
8
8
  constructor(options = {}) {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaPrivacyTokenMemoryStore = void 0;
4
- const collections_1 = require("../../../util/collections");
4
+ const collections_1 = require("../../util/collections");
5
5
  const DEFAULT_MAX_ENTRIES = 10000;
6
6
  class WaPrivacyTokenMemoryStore {
7
7
  constructor(maxEntries = DEFAULT_MAX_ENTRIES) {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaRetryMemoryStore = void 0;
4
- const coercion_1 = require("../../../util/coercion");
5
- const collections_1 = require("../../../util/collections");
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
6
  const DEFAULTS = Object.freeze({
7
7
  ttlMs: 60 * 1000,
8
8
  maxOutboundMessages: 10000,
@@ -19,10 +19,28 @@ class WaRetryMemoryStore {
19
19
  this.ttlMs = ttlMs;
20
20
  this.maxOutboundMessages = (0, coercion_1.resolvePositive)(options.maxOutboundMessages, DEFAULTS.maxOutboundMessages, 'WaRetryMemoryStoreOptions.maxOutboundMessages');
21
21
  this.maxInboundCounters = (0, coercion_1.resolvePositive)(options.maxInboundCounters, DEFAULTS.maxInboundCounters, 'WaRetryMemoryStoreOptions.maxInboundCounters');
22
- this.cleanupTimer = setInterval(() => {
22
+ this.logger = options.logger;
23
+ this.outboundCapacityWarned = false;
24
+ this.inboundCapacityWarned = false;
25
+ this.cleanup = (0, collections_1.createPeriodicCleanup)(this.ttlMs, () => {
23
26
  void this.cleanupExpired(Date.now());
24
- }, (0, collections_1.resolveCleanupIntervalMs)(this.ttlMs));
25
- this.cleanupTimer.unref();
27
+ });
28
+ }
29
+ warnOutboundCapacity() {
30
+ if (this.outboundCapacityWarned || !this.logger)
31
+ return;
32
+ this.outboundCapacityWarned = true;
33
+ this.logger.warn('retry outbound store at capacity, evicting oldest', {
34
+ max: this.maxOutboundMessages
35
+ });
36
+ }
37
+ warnInboundCapacity() {
38
+ if (this.inboundCapacityWarned || !this.logger)
39
+ return;
40
+ this.inboundCapacityWarned = true;
41
+ this.logger.warn('retry inbound counters at capacity, evicting oldest', {
42
+ max: this.maxInboundCounters
43
+ });
26
44
  }
27
45
  getTtlMs() {
28
46
  return this.ttlMs;
@@ -78,6 +96,7 @@ class WaRetryMemoryStore {
78
96
  };
79
97
  (0, collections_1.setBoundedMapEntry)(this.outboundMessages, record.messageId, storedRecord, this.maxOutboundMessages, (messageId) => {
80
98
  this.eligibleSets.delete(messageId);
99
+ this.warnOutboundCapacity();
81
100
  });
82
101
  if (record.eligibleRequesterDeviceJids && record.eligibleRequesterDeviceJids.length > 0) {
83
102
  this.eligibleSets.set(record.messageId, new Set(record.eligibleRequesterDeviceJids));
@@ -106,6 +125,7 @@ class WaRetryMemoryStore {
106
125
  expiresAtMs
107
126
  }, this.maxOutboundMessages, (evictedMessageId) => {
108
127
  this.eligibleSets.delete(evictedMessageId);
128
+ this.warnOutboundCapacity();
109
129
  });
110
130
  }
111
131
  async markOutboundRequesterDelivered(messageId, requesterDeviceJid, updatedAtMs, expiresAtMs) {
@@ -122,13 +142,14 @@ class WaRetryMemoryStore {
122
142
  expiresAtMs
123
143
  }, this.maxOutboundMessages, (evictedMessageId) => {
124
144
  this.eligibleSets.delete(evictedMessageId);
145
+ this.warnOutboundCapacity();
125
146
  });
126
147
  }
127
148
  async incrementInboundCounter(messageId, requesterJid, _updatedAtMs, expiresAtMs) {
128
149
  const key = this.counterKey(messageId, requesterJid);
129
150
  const current = this.inboundCounters.get(key);
130
151
  const count = current ? current.count + 1 : 1;
131
- (0, collections_1.setBoundedMapEntry)(this.inboundCounters, key, { count, expiresAtMs }, this.maxInboundCounters);
152
+ (0, collections_1.setBoundedMapEntry)(this.inboundCounters, key, { count, expiresAtMs }, this.maxInboundCounters, () => this.warnInboundCapacity());
132
153
  return count;
133
154
  }
134
155
  async cleanupExpired(nowMs) {
@@ -154,7 +175,7 @@ class WaRetryMemoryStore {
154
175
  this.inboundCounters.clear();
155
176
  }
156
177
  async destroy() {
157
- clearInterval(this.cleanupTimer);
178
+ this.cleanup.destroy();
158
179
  await this.clear();
159
180
  }
160
181
  counterKey(messageId, requesterJid) {
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SenderKeyMemoryStore = 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_SENDER_KEY_STORE_LIMITS = Object.freeze({
8
8
  senderKeys: 8192,
9
9
  senderDistributions: 8192
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaSessionMemoryStore = 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_SESSIONS = 8192;
8
8
  class WaSessionMemoryStore {
9
9
  constructor(options = {}) {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WaThreadMemoryStore = void 0;
4
- const coercion_1 = require("../../../util/coercion");
5
- const collections_1 = require("../../../util/collections");
4
+ const coercion_1 = require("../../util/coercion");
5
+ const collections_1 = require("../../util/collections");
6
6
  const DEFAULT_THREAD_MEMORY_STORE_LIMITS = Object.freeze({
7
7
  threads: 10000
8
8
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NOOP_DEVICE_LIST_STORE = exports.NOOP_PARTICIPANTS_STORE = exports.NOOP_RETRY_STORE = exports.NOOP_CONTACT_STORE = exports.NOOP_THREAD_STORE = exports.NOOP_MESSAGE_STORE = exports.NOOP_MESSAGE_SECRET_STORE = void 0;
3
+ exports.NOOP_DEVICE_LIST_STORE = exports.NOOP_GROUP_METADATA_STORE = exports.NOOP_RETRY_STORE = exports.NOOP_CONTACT_STORE = exports.NOOP_THREAD_STORE = exports.NOOP_MESSAGE_STORE = exports.NOOP_MESSAGE_SECRET_STORE = void 0;
4
4
  const EMPTY_STORE_LIST = Object.freeze([]);
5
5
  exports.NOOP_MESSAGE_SECRET_STORE = Object.freeze({
6
6
  get: async (_messageId) => null,
@@ -30,6 +30,7 @@ exports.NOOP_CONTACT_STORE = Object.freeze({
30
30
  upsert: async (_record) => { },
31
31
  upsertBatch: async (_records) => { },
32
32
  getByJid: async (_jid) => null,
33
+ getByPhoneNumber: async (_pn) => null,
33
34
  deleteByJid: async (_jid) => 0,
34
35
  clear: async () => { }
35
36
  });
@@ -45,10 +46,10 @@ exports.NOOP_RETRY_STORE = Object.freeze({
45
46
  clear: async () => { },
46
47
  destroy: async () => { }
47
48
  });
48
- exports.NOOP_PARTICIPANTS_STORE = Object.freeze({
49
- upsertGroupParticipants: async (_snapshot) => { },
50
- getGroupParticipants: async (_groupJid, _nowMs) => null,
51
- deleteGroupParticipants: async (_groupJid) => 0,
49
+ exports.NOOP_GROUP_METADATA_STORE = Object.freeze({
50
+ upsertGroupMetadata: async (_snapshot) => { },
51
+ getGroupMetadata: async (_groupJid, _nowMs) => null,
52
+ deleteGroupMetadata: async (_groupJid) => 0,
52
53
  cleanupExpired: async (_nowMs) => 0,
53
54
  clear: async () => { },
54
55
  destroy: async () => { }
@@ -56,6 +57,7 @@ exports.NOOP_PARTICIPANTS_STORE = Object.freeze({
56
57
  exports.NOOP_DEVICE_LIST_STORE = Object.freeze({
57
58
  upsertUserDevicesBatch: async (_snapshots) => { },
58
59
  getUserDevicesBatch: async (userJids, _nowMs) => new Array(userJids.length).fill(null),
60
+ findByAnyUserJid: async (_jid, _nowMs) => null,
59
61
  deleteUserDevices: async (_userJid) => 0,
60
62
  cleanupExpired: async (_nowMs) => 0,
61
63
  clear: async () => { },
@@ -12,6 +12,11 @@ const WA_FRAME_HANDLER_QUEUE_MAX_SIZE = 4096;
12
12
  const WA_FRAME_HANDLER_MAX_CONCURRENCY = 8;
13
13
  const WA_PENDING_FRAMES_MAX_COUNT = 2048;
14
14
  const WA_PENDING_FRAMES_MAX_BYTES = 16 * 1024 * 1024;
15
+ /**
16
+ * Owns the WebSocket + Noise handshake lifecycle: opens the socket, drives
17
+ * the noise pairing/login exchange, persists routing-info/server-static
18
+ * updates, and delivers post-handshake binary frames to the caller.
19
+ */
15
20
  class WaComms {
16
21
  constructor(config, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
17
22
  if (!config.noise) {
@@ -49,6 +54,7 @@ class WaComms {
49
54
  onClose: async (info) => {
50
55
  await this.onSocketClosed(info);
51
56
  },
57
+ // eslint-disable-next-line @typescript-eslint/require-await
52
58
  onError: async (error) => {
53
59
  this.logger.warn('socket runtime error', { message: error.message });
54
60
  },
@@ -113,7 +119,7 @@ class WaComms {
113
119
  };
114
120
  }
115
121
  startComms(handleStanza, inflateFrame) {
116
- this.logger.info('comms start requested');
122
+ this.logger.debug('comms start requested');
117
123
  this.stanzaHandler = handleStanza;
118
124
  this.inflateFrame = inflateFrame ?? null;
119
125
  this.clearPendingFrames();
@@ -153,7 +159,7 @@ class WaComms {
153
159
  this.frameProcessingQueue = this.frameProcessingQueue.then(() => this.flushPendingFrames(), () => this.flushPendingFrames());
154
160
  }
155
161
  async stopComms() {
156
- this.logger.info('comms stop requested');
162
+ this.logger.debug('comms stop requested');
157
163
  this.resetConnectionState({
158
164
  started: false,
159
165
  connected: false,
@@ -166,7 +172,7 @@ class WaComms {
166
172
  await this.socket.close(1000, 'stop_comms');
167
173
  }
168
174
  async closeSocketAndResume() {
169
- this.logger.info('comms close socket and resume requested');
175
+ this.logger.debug('comms close socket and resume requested');
170
176
  this.resetConnectionState({
171
177
  started: true,
172
178
  connected: false,
@@ -251,6 +257,7 @@ class WaComms {
251
257
  this.logger.warn('socket open failed', { message: (0, primitives_1.toError)(error).message });
252
258
  }
253
259
  }
260
+ // eslint-disable-next-line @typescript-eslint/require-await
254
261
  async onSocketClosed(info) {
255
262
  this.connected = false;
256
263
  this.noiseSession?.onSocketClosed(new Error(`socket closed (${info.code}:${info.reason})`));
@@ -272,7 +279,8 @@ class WaComms {
272
279
  this.logger.info('socket closed, scheduling reconnect', {
273
280
  code: info.code,
274
281
  reason: info.reason,
275
- reconnectAfterMs: this.config.reconnectIntervalMs
282
+ reconnectAfterMs: this.config.reconnectIntervalMs,
283
+ reconnectAttempts: this.reconnectAttempts
276
284
  });
277
285
  }
278
286
  onSocketMessage(payload) {
@@ -347,9 +355,10 @@ class WaComms {
347
355
  this.lastServerStaticKey = session.getServerStaticKey();
348
356
  this.connected = true;
349
357
  this.reconnectAttempts = 0;
350
- this.logger.info('comms connected and noise session established');
358
+ this.logger.debug('comms connected and noise session established');
351
359
  this.drainWaiters((waiter) => waiter.resolve());
352
360
  }
361
+ // eslint-disable-next-line @typescript-eslint/require-await
353
362
  async flushPendingFrames() {
354
363
  if (!this.handlingRequests || !this.stanzaHandler || this.pendingFrames.length === 0) {
355
364
  return;
@@ -103,6 +103,11 @@ function resolveSocketRuntime() {
103
103
  }
104
104
  return 'browser';
105
105
  }
106
+ /**
107
+ * Thin wrapper around a `RawWebSocket` (or Node `ws` constructor) used by
108
+ * {@link WaComms}. Iterates the configured URL list on failure and applies a
109
+ * connect/idle timeout.
110
+ */
106
111
  class WaWebSocket {
107
112
  constructor(config, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
108
113
  this.config = Object.freeze({
@@ -208,6 +213,7 @@ class WaWebSocket {
208
213
  }
209
214
  });
210
215
  }
216
+ // eslint-disable-next-line @typescript-eslint/require-await
211
217
  async send(data) {
212
218
  const socket = this.socket;
213
219
  if (!socket || socket.readyState !== constants_1.WA_READY_STATES.OPEN) {
@@ -371,16 +377,30 @@ class WaWebSocket {
371
377
  handlers.onOpen();
372
378
  };
373
379
  entry.socket.onerror = () => {
374
- this.logger.warn('socket open error', { url: entry.url });
380
+ if (entry.settled) {
381
+ this.logger.trace('settled pending socket error', { url: entry.url });
382
+ }
383
+ else {
384
+ this.logger.warn('socket open error', { url: entry.url });
385
+ }
375
386
  handlers.onFail(new Error(`websocket connect error for ${entry.url}`));
376
387
  };
377
388
  entry.socket.onclose = (event) => {
378
389
  const info = this.toCloseInfo(event);
379
- this.logger.warn('socket closed before open', {
380
- url: entry.url,
381
- code: info.code,
382
- reason: info.reason
383
- });
390
+ if (entry.settled) {
391
+ this.logger.trace('settled pending socket closed', {
392
+ url: entry.url,
393
+ code: info.code,
394
+ reason: info.reason
395
+ });
396
+ }
397
+ else {
398
+ this.logger.warn('socket closed before open', {
399
+ url: entry.url,
400
+ code: info.code,
401
+ reason: info.reason
402
+ });
403
+ }
384
404
  handlers.onFail(new Error(`websocket closed before open (${info.code}:${info.reason}) for ${entry.url}`));
385
405
  };
386
406
  }
@@ -440,8 +460,12 @@ class WaWebSocket {
440
460
  try {
441
461
  socket.close(code, reason);
442
462
  }
443
- catch {
444
- // no-op
463
+ catch (error) {
464
+ this.logger.trace('socket close ignored', {
465
+ code,
466
+ reason,
467
+ message: (0, primitives_1.toError)(error).message
468
+ });
445
469
  }
446
470
  }
447
471
  async createRawSocket(url) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DICTIONARY_TOKEN_MAPS = exports.SINGLE_BYTE_TOKEN_MAP = exports.HEX_ALPHABET = exports.NIBBLE_ALPHABET = exports.NIBBLE_8 = exports.BINARY_32 = exports.BINARY_20 = exports.BINARY_8 = exports.HEX_8 = exports.JID_PAIR = exports.LIST_16 = exports.LIST_8 = exports.JID_U = exports.JID_FB = exports.JID_INTEROP = exports.DICTIONARY_3 = exports.DICTIONARY_0 = exports.STREAM_END = exports.LIST_EMPTY = void 0;
3
+ exports.DICTIONARY_TOKEN_MAPS = exports.SINGLE_BYTE_TOKEN_MAP = exports.HEX_ALPHABET = exports.NIBBLE_ALPHABET = exports.JID_U_DOMAIN_TYPE_LID_MASK = exports.JID_U_DOMAIN_TYPE_HOSTED_MASK = exports.JID_U_DOMAIN_TYPE_HOSTED_LID = exports.JID_U_DOMAIN_TYPE_HOSTED = exports.JID_U_DOMAIN_TYPE_LID = exports.JID_U_DOMAIN_TYPE_PN = exports.NIBBLE_8 = exports.BINARY_32 = exports.BINARY_20 = exports.BINARY_8 = exports.HEX_8 = exports.JID_PAIR = exports.LIST_16 = exports.LIST_8 = exports.JID_U = exports.JID_FB = exports.JID_INTEROP = exports.DICTIONARY_3 = exports.DICTIONARY_0 = exports.STREAM_END = exports.LIST_EMPTY = void 0;
4
4
  const tokens_1 = require("../binary/tokens");
5
5
  exports.LIST_EMPTY = 0;
6
6
  exports.STREAM_END = 2;
@@ -17,7 +17,13 @@ exports.BINARY_8 = 252;
17
17
  exports.BINARY_20 = 253;
18
18
  exports.BINARY_32 = 254;
19
19
  exports.NIBBLE_8 = 255;
20
- exports.NIBBLE_ALPHABET = [
20
+ exports.JID_U_DOMAIN_TYPE_PN = 0x00;
21
+ exports.JID_U_DOMAIN_TYPE_LID = 0x01;
22
+ exports.JID_U_DOMAIN_TYPE_HOSTED = 0x80;
23
+ exports.JID_U_DOMAIN_TYPE_HOSTED_LID = 0x81;
24
+ exports.JID_U_DOMAIN_TYPE_HOSTED_MASK = 0x80;
25
+ exports.JID_U_DOMAIN_TYPE_LID_MASK = 0x01;
26
+ exports.NIBBLE_ALPHABET = Object.freeze([
21
27
  '0',
22
28
  '1',
23
29
  '2',
@@ -34,8 +40,8 @@ exports.NIBBLE_ALPHABET = [
34
40
  '\uFFFD',
35
41
  '\uFFFD',
36
42
  '\uFFFD'
37
- ];
38
- exports.HEX_ALPHABET = [
43
+ ]);
44
+ exports.HEX_ALPHABET = Object.freeze([
39
45
  '0',
40
46
  '1',
41
47
  '2',
@@ -52,7 +58,7 @@ exports.HEX_ALPHABET = [
52
58
  'D',
53
59
  'E',
54
60
  'F'
55
- ];
61
+ ]);
56
62
  exports.SINGLE_BYTE_TOKEN_MAP = (() => {
57
63
  const map = new Map();
58
64
  for (let i = 0; i < tokens_1.SINGLE_BYTE_TOKENS.length; i += 1) {
@@ -10,13 +10,6 @@ const tokens_1 = require("../binary/tokens");
10
10
  const bytes_1 = require("../../util/bytes");
11
11
  const unzipAsync = (0, node_util_1.promisify)(node_zlib_1.unzip);
12
12
  const inflateRawAsync = (0, node_util_1.promisify)(node_zlib_1.inflateRaw);
13
- const JID_U_DOMAIN_TYPE_LID = 0x01;
14
- const JID_U_DOMAIN_TYPE_HOSTED_LID = 0x81;
15
- const JID_U_DOMAIN_TYPE_HOSTED_MASK = 0x80;
16
- const JID_U_DOMAIN_TYPE_LID_MASK = 0x01;
17
- const JID_U_DOMAIN_LID = 'lid';
18
- const JID_U_DOMAIN_HOSTED = 'hosted';
19
- const JID_U_DOMAIN_HOSTED_LID = 'hosted.lid';
20
13
  class ByteReader {
21
14
  constructor(data) {
22
15
  this.data = data;
@@ -58,27 +51,35 @@ class ByteReader {
58
51
  }
59
52
  }
60
53
  }
54
+ // Reusable scratch buffer for nibble/hex unpack. Max output is
55
+ // `(0x7f) * 2 = 254` bytes (length byte holds the packed-byte count in
56
+ // its low 7 bits, each byte unpacks to ≤2 chars). Single-threaded JS +
57
+ // non-reentrant decoder makes module-level reuse safe – `TextDecoder`
58
+ // copies into the returned string before we touch the buffer again.
59
+ const PACKED_SCRATCH = new Uint8Array(256);
61
60
  function parsePacked(reader, alphabet) {
62
61
  const lengthByte = reader.readUint8();
63
62
  const odd = (lengthByte & 0x80) !== 0;
64
63
  const byteCount = lengthByte & 0x7f;
65
64
  const outLength = byteCount * 2 - (odd ? 1 : 0);
66
- const buf = new Uint8Array(outLength);
65
+ if (outLength < 0) {
66
+ throw new Error(`invalid packed length byte 0x${lengthByte.toString(16)}`);
67
+ }
67
68
  let outIndex = 0;
68
69
  for (let i = 0; i < byteCount; i += 1) {
69
70
  const packed = reader.readUint8();
70
71
  const high = (packed >>> 4) & 0x0f;
71
72
  const low = packed & 0x0f;
72
73
  if (outIndex < outLength) {
73
- buf[outIndex] = alphabet[high].charCodeAt(0);
74
+ PACKED_SCRATCH[outIndex] = alphabet[high].charCodeAt(0);
74
75
  outIndex += 1;
75
76
  }
76
77
  if (outIndex < outLength) {
77
- buf[outIndex] = alphabet[low].charCodeAt(0);
78
+ PACKED_SCRATCH[outIndex] = alphabet[low].charCodeAt(0);
78
79
  outIndex += 1;
79
80
  }
80
81
  }
81
- return bytes_1.TEXT_DECODER.decode(buf);
82
+ return bytes_1.TEXT_DECODER.decode(PACKED_SCRATCH.subarray(0, outLength));
82
83
  }
83
84
  function readBinary(reader, token) {
84
85
  if (token === constants_2.BINARY_8) {
@@ -131,15 +132,15 @@ function decodeJidU(reader) {
131
132
  const device = reader.readUint8();
132
133
  const user = decodeTokenString(reader.readUint8(), reader);
133
134
  let domain = constants_1.WA_DEFAULTS.HOST_DOMAIN;
134
- if (domainType === JID_U_DOMAIN_TYPE_LID) {
135
- domain = JID_U_DOMAIN_LID;
135
+ if (domainType === constants_2.JID_U_DOMAIN_TYPE_LID) {
136
+ domain = constants_1.WA_DEFAULTS.LID_SERVER;
136
137
  }
137
- else if (domainType === JID_U_DOMAIN_TYPE_HOSTED_LID) {
138
- domain = JID_U_DOMAIN_HOSTED_LID;
138
+ else if (domainType === constants_2.JID_U_DOMAIN_TYPE_HOSTED_LID) {
139
+ domain = constants_1.WA_DEFAULTS.HOSTED_LID_SERVER;
139
140
  }
140
- else if ((domainType & JID_U_DOMAIN_TYPE_HOSTED_MASK) !== 0 &&
141
- (domainType & JID_U_DOMAIN_TYPE_LID_MASK) === 0) {
142
- domain = JID_U_DOMAIN_HOSTED;
141
+ else if ((domainType & constants_2.JID_U_DOMAIN_TYPE_HOSTED_MASK) !== 0 &&
142
+ (domainType & constants_2.JID_U_DOMAIN_TYPE_LID_MASK) === 0) {
143
+ domain = constants_1.WA_DEFAULTS.HOSTED_SERVER;
143
144
  }
144
145
  if (device > 0) {
145
146
  return `${user}:${device}@${domain}`;
@@ -247,6 +248,7 @@ function decodeNodeInternal(reader) {
247
248
  : { tag: tagValue, attrs, content };
248
249
  return node;
249
250
  }
251
+ /** Decodes raw WhatsApp binary node bytes into a {@link BinaryNode}. */
250
252
  function decodeBinaryNode(data) {
251
253
  const reader = new ByteReader(data);
252
254
  return decodeNodeInternal(reader);
@@ -265,6 +267,10 @@ async function inflateCompressedStanza(data) {
265
267
  }
266
268
  }
267
269
  }
270
+ /**
271
+ * Decodes a framed stanza: reads the 1-byte flag, inflates the body when the
272
+ * `0x02` compression bit is set, then parses the result as a {@link BinaryNode}.
273
+ */
268
274
  async function decodeBinaryNodeStanza(stanza) {
269
275
  const reader = new ByteReader(stanza);
270
276
  const flag = reader.readUint8();