zapo-js 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -179
  3. package/dist/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +79 -62
  4. package/dist/appstate/index.js +8 -7
  5. package/dist/appstate/{encoding.js → parsers/encoding.js} +11 -4
  6. package/dist/appstate/{WaAppStateSyncResponseParser.js → parsers/response-parser.js} +20 -8
  7. package/dist/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +246 -88
  8. package/dist/appstate/utils.js +16 -0
  9. package/dist/appstate-spec.js +89 -0
  10. package/dist/auth/WaAuthClient.js +117 -13
  11. package/dist/auth/credentials-flow.js +207 -0
  12. package/dist/auth/pairing/WaPairingFlow.js +53 -47
  13. package/dist/auth/pairing/pairing-code-crypto.js +91 -0
  14. package/dist/client/WaClient.js +369 -460
  15. package/dist/client/WaClientFactory.js +377 -93
  16. package/dist/client/connection/WaConnectionManager.js +31 -11
  17. package/dist/client/coordinators/WaAbPropsCoordinator.js +140 -0
  18. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +663 -143
  19. package/dist/client/coordinators/WaBotCoordinator.js +345 -0
  20. package/dist/client/coordinators/WaBroadcastListCoordinator.js +20 -0
  21. package/dist/client/coordinators/WaBusinessCoordinator.js +81 -180
  22. package/dist/client/coordinators/WaEmailCoordinator.js +64 -0
  23. package/dist/client/coordinators/WaGroupCoordinator.js +529 -52
  24. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +130 -20
  25. package/dist/client/coordinators/WaLowLevelCoordinator.js +41 -0
  26. package/dist/client/coordinators/WaMessageCoordinator.js +365 -0
  27. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +724 -216
  28. package/dist/client/coordinators/WaNewsletterCoordinator.js +18 -0
  29. package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
  30. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +53 -22
  31. package/dist/client/coordinators/WaPresenceCoordinator.js +21 -0
  32. package/dist/client/coordinators/WaPrivacyCoordinator.js +7 -5
  33. package/dist/client/coordinators/WaProfileCoordinator.js +223 -50
  34. package/dist/client/coordinators/WaRetryCoordinator.js +256 -123
  35. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  36. package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
  37. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +29 -10
  38. package/dist/client/events/abprops.js +43 -0
  39. package/dist/client/events/appstate-mutation.js +133 -0
  40. package/dist/client/events/business.js +375 -0
  41. package/dist/client/events/call.js +58 -0
  42. package/dist/client/events/chatstate.js +23 -0
  43. package/dist/client/events/devices.js +15 -16
  44. package/dist/client/{dirty.js → events/dirty.js} +34 -20
  45. package/dist/client/events/group.js +13 -24
  46. package/dist/client/events/identity.js +2 -1
  47. package/dist/client/events/incoming.js +502 -0
  48. package/dist/client/events/mex-notification.js +181 -0
  49. package/dist/client/events/picture.js +33 -0
  50. package/dist/client/events/presence.js +44 -0
  51. package/dist/client/events/privacy-token.js +1 -2
  52. package/dist/client/events/receipt.js +26 -0
  53. package/dist/client/events/registration.js +42 -0
  54. package/dist/client/media.js +400 -0
  55. package/dist/client/messaging/fanout.js +9 -10
  56. package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
  57. package/dist/client/messaging/ignore-key.js +132 -0
  58. package/dist/client/messaging/key-protocol.js +3 -17
  59. package/dist/client/messaging/link-preview.js +159 -0
  60. package/dist/client/messaging/messages.js +671 -0
  61. package/dist/client/newsletter/admin.js +165 -0
  62. package/dist/client/newsletter/content.js +253 -0
  63. package/dist/client/newsletter/discovery.js +115 -0
  64. package/dist/client/newsletter/messaging.js +197 -0
  65. package/dist/client/newsletter/mex.js +41 -0
  66. package/dist/client/newsletter/parse.js +217 -0
  67. package/dist/client/persistence/WriteBehindPersistence.js +31 -4
  68. package/dist/client/{history-sync.js → persistence/history-sync.js} +125 -18
  69. package/dist/client/persistence/mailbox.js +104 -0
  70. package/dist/client/tokens/cs-token.js +11 -17
  71. package/dist/crypto/core/hkdf.js +12 -12
  72. package/dist/crypto/core/index.js +9 -8
  73. package/dist/crypto/core/keys.js +1 -8
  74. package/dist/crypto/core/nonce.js +12 -12
  75. package/dist/crypto/core/primitives.js +123 -93
  76. package/dist/crypto/core/random.js +9 -9
  77. package/dist/crypto/core/xeddsa.js +59 -0
  78. package/dist/crypto/curves/Ed25519.js +32 -21
  79. package/dist/crypto/curves/X25519.js +71 -17
  80. package/dist/crypto/curves/constants.js +3 -1
  81. package/dist/crypto/math/constants.js +1 -2
  82. package/dist/crypto/math/mod.js +0 -33
  83. package/dist/esm/appstate/{WaAppStateCrypto.js → crypto/WaAppStateCrypto.js} +72 -55
  84. package/dist/esm/appstate/index.js +5 -5
  85. package/dist/esm/appstate/{encoding.js → parsers/encoding.js} +11 -4
  86. package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → parsers/response-parser.js} +20 -8
  87. package/dist/esm/appstate/{WaAppStateSyncClient.js → sync/WaAppStateSyncClient.js} +235 -76
  88. package/dist/esm/appstate/utils.js +16 -0
  89. package/dist/esm/appstate-spec.js +79 -0
  90. package/dist/esm/auth/WaAuthClient.js +114 -10
  91. package/dist/esm/auth/credentials-flow.js +202 -0
  92. package/dist/esm/auth/pairing/WaPairingFlow.js +52 -46
  93. package/dist/esm/auth/pairing/pairing-code-crypto.js +85 -0
  94. package/dist/esm/client/WaClient.js +372 -463
  95. package/dist/esm/client/WaClientFactory.js +380 -96
  96. package/dist/esm/client/connection/WaConnectionManager.js +31 -11
  97. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +136 -0
  98. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +665 -145
  99. package/dist/esm/client/coordinators/WaBotCoordinator.js +342 -0
  100. package/dist/esm/client/coordinators/WaBroadcastListCoordinator.js +17 -0
  101. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +78 -177
  102. package/dist/esm/client/coordinators/WaEmailCoordinator.js +61 -0
  103. package/dist/esm/client/coordinators/WaGroupCoordinator.js +532 -55
  104. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +132 -22
  105. package/dist/esm/client/coordinators/WaLowLevelCoordinator.js +38 -0
  106. package/dist/esm/client/coordinators/WaMessageCoordinator.js +361 -0
  107. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +719 -211
  108. package/dist/esm/client/coordinators/WaNewsletterCoordinator.js +13 -0
  109. package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
  110. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +54 -23
  111. package/dist/esm/client/coordinators/WaPresenceCoordinator.js +18 -0
  112. package/dist/esm/client/coordinators/WaPrivacyCoordinator.js +7 -5
  113. package/dist/esm/client/coordinators/WaProfileCoordinator.js +226 -53
  114. package/dist/esm/client/coordinators/WaRetryCoordinator.js +258 -125
  115. package/dist/esm/client/coordinators/WaStatusCoordinator.js +46 -0
  116. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +6 -6
  117. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +31 -12
  118. package/dist/esm/client/events/abprops.js +40 -0
  119. package/dist/esm/client/events/appstate-mutation.js +130 -0
  120. package/dist/esm/client/events/business.js +370 -0
  121. package/dist/esm/client/events/call.js +55 -0
  122. package/dist/esm/client/events/chatstate.js +20 -0
  123. package/dist/esm/client/events/devices.js +15 -16
  124. package/dist/esm/client/{dirty.js → events/dirty.js} +34 -20
  125. package/dist/esm/client/events/group.js +14 -25
  126. package/dist/esm/client/events/identity.js +2 -1
  127. package/dist/esm/client/events/incoming.js +487 -0
  128. package/dist/esm/client/events/mex-notification.js +178 -0
  129. package/dist/esm/client/events/picture.js +30 -0
  130. package/dist/esm/client/events/presence.js +41 -0
  131. package/dist/esm/client/events/privacy-token.js +1 -2
  132. package/dist/esm/client/events/receipt.js +23 -0
  133. package/dist/esm/client/events/registration.js +39 -0
  134. package/dist/esm/client/media.js +384 -0
  135. package/dist/esm/client/messaging/fanout.js +10 -11
  136. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
  137. package/dist/esm/client/messaging/ignore-key.js +126 -0
  138. package/dist/esm/client/messaging/key-protocol.js +3 -17
  139. package/dist/esm/client/messaging/link-preview.js +156 -0
  140. package/dist/esm/client/messaging/messages.js +667 -0
  141. package/dist/esm/client/newsletter/admin.js +162 -0
  142. package/dist/esm/client/newsletter/content.js +249 -0
  143. package/dist/esm/client/newsletter/discovery.js +112 -0
  144. package/dist/esm/client/newsletter/messaging.js +194 -0
  145. package/dist/esm/client/newsletter/mex.js +37 -0
  146. package/dist/esm/client/newsletter/parse.js +200 -0
  147. package/dist/esm/client/persistence/WriteBehindPersistence.js +31 -4
  148. package/dist/esm/client/{history-sync.js → persistence/history-sync.js} +124 -18
  149. package/dist/esm/client/persistence/mailbox.js +101 -0
  150. package/dist/esm/client/tokens/cs-token.js +12 -18
  151. package/dist/esm/crypto/core/hkdf.js +14 -14
  152. package/dist/esm/crypto/core/index.js +3 -2
  153. package/dist/esm/crypto/core/keys.js +1 -7
  154. package/dist/esm/crypto/core/nonce.js +11 -11
  155. package/dist/esm/crypto/core/primitives.js +121 -88
  156. package/dist/esm/crypto/core/random.js +8 -7
  157. package/dist/esm/crypto/core/xeddsa.js +55 -0
  158. package/dist/esm/crypto/curves/Ed25519.js +35 -24
  159. package/dist/esm/crypto/curves/X25519.js +74 -20
  160. package/dist/esm/crypto/curves/constants.js +2 -0
  161. package/dist/esm/crypto/math/constants.js +1 -2
  162. package/dist/esm/crypto/math/mod.js +0 -32
  163. package/dist/esm/index.js +7 -2
  164. package/dist/esm/infra/log/ConsoleLogger.js +30 -6
  165. package/dist/esm/infra/log/PinoLogger.js +64 -0
  166. package/dist/esm/infra/log/types.js +4 -2
  167. package/dist/esm/infra/perf/BackgroundQueue.js +55 -13
  168. package/dist/esm/infra/perf/StoreLock.js +7 -4
  169. package/dist/esm/media/constants.js +35 -2
  170. package/dist/esm/media/crypto/WaMediaCrypto.js +374 -0
  171. package/dist/esm/media/index.js +4 -3
  172. package/dist/esm/media/processor.js +1 -0
  173. package/dist/esm/media/sticker/sticker-pack.js +133 -0
  174. package/dist/esm/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +84 -196
  175. package/dist/esm/media/{conn.js → transfer/conn.js} +10 -5
  176. package/dist/esm/message/WaMessageClient.js +46 -15
  177. package/dist/esm/message/addons/link-preview/builder.js +36 -0
  178. package/dist/esm/message/addons/link-preview/detect.js +55 -0
  179. package/dist/esm/message/addons/link-preview/fetcher.js +391 -0
  180. package/dist/esm/message/addons/link-preview/types.js +1 -0
  181. package/dist/esm/message/context-info.js +123 -0
  182. package/dist/esm/message/crypto/addon-crypto.js +244 -0
  183. package/dist/esm/message/{icdc.js → crypto/icdc.js} +11 -13
  184. package/dist/esm/message/crypto/phash.js +133 -0
  185. package/dist/esm/message/{reporting-token.js → crypto/reporting-token.js} +7 -7
  186. package/dist/esm/message/{use-case-secret.js → crypto/use-case-secret.js} +21 -4
  187. package/dist/esm/message/{content.js → encode/content.js} +183 -8
  188. package/dist/esm/message/encode/media-payload.js +42 -0
  189. package/dist/esm/message/{padding.js → encode/padding.js} +9 -3
  190. package/dist/esm/message/index.js +2 -2
  191. package/dist/esm/message/kinds/bot.js +111 -0
  192. package/dist/esm/message/kinds/newsletter.js +244 -0
  193. package/dist/esm/message/kinds/sticker-pack.js +29 -0
  194. package/dist/esm/message/{ack.js → primitives/ack.js} +8 -1
  195. package/dist/esm/message/primitives/incoming.js +511 -0
  196. package/dist/esm/message/primitives/peer-data-operation.js +93 -0
  197. package/dist/esm/mex.js +1 -0
  198. package/dist/esm/protocol/abprops.js +169 -0
  199. package/dist/esm/protocol/appstate.js +6 -30
  200. package/dist/esm/protocol/auth.js +3 -2
  201. package/dist/esm/protocol/bot.js +77 -0
  202. package/dist/esm/protocol/browser.js +22 -0
  203. package/dist/esm/protocol/business.js +19 -0
  204. package/dist/esm/protocol/call.js +48 -0
  205. package/dist/esm/protocol/constants.js +10 -2
  206. package/dist/esm/protocol/defaults.js +3 -0
  207. package/dist/esm/protocol/email.js +30 -0
  208. package/dist/esm/protocol/index.js +1 -1
  209. package/dist/esm/protocol/jid.js +142 -11
  210. package/dist/esm/protocol/media.js +25 -12
  211. package/dist/esm/protocol/message.js +4 -1
  212. package/dist/esm/protocol/newsletter.js +61 -0
  213. package/dist/esm/protocol/nodes.js +26 -2
  214. package/dist/esm/protocol/notification.js +24 -2
  215. package/dist/esm/protocol/presence.js +13 -0
  216. package/dist/esm/protocol/status.js +6 -0
  217. package/dist/esm/retry/codec.js +5 -0
  218. package/dist/esm/retry/parse.js +20 -38
  219. package/dist/esm/retry/reason.js +6 -1
  220. package/dist/esm/retry/replay.js +131 -37
  221. package/dist/esm/retry/tracker.js +4 -8
  222. package/dist/esm/signal/api/SignalDeviceSyncApi.js +71 -21
  223. package/dist/esm/signal/api/SignalDigestSyncApi.js +15 -8
  224. package/dist/esm/signal/api/SignalIdentitySyncApi.js +13 -4
  225. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +24 -63
  226. package/dist/esm/signal/api/SignalRotateKeyApi.js +10 -0
  227. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -51
  228. package/dist/esm/signal/api/codec.js +52 -1
  229. package/dist/esm/signal/api/prekeys.js +4 -0
  230. package/dist/esm/signal/attestation/WaAdvSignature.js +17 -0
  231. package/dist/esm/signal/{crypto → attestation}/constants.js +0 -4
  232. package/dist/esm/signal/constants.js +3 -0
  233. package/dist/esm/signal/encoding.js +6 -332
  234. package/dist/esm/signal/group/SenderKeyChain.js +20 -35
  235. package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
  236. package/dist/esm/signal/group/SenderKeyManager.js +37 -17
  237. package/dist/esm/signal/group/encoding.js +96 -0
  238. package/dist/esm/signal/index.js +4 -1
  239. package/dist/esm/signal/registration/encoding.js +34 -0
  240. package/dist/esm/signal/registration/keygen.js +12 -3
  241. package/dist/esm/signal/registration/utils.js +8 -2
  242. package/dist/esm/signal/session/SignalProtocol.js +129 -26
  243. package/dist/esm/signal/session/SignalRatchet.js +46 -64
  244. package/dist/esm/signal/session/SignalSerializer.js +5 -6
  245. package/dist/esm/signal/session/SignalSession.js +14 -19
  246. package/dist/esm/signal/session/encoding.js +173 -0
  247. package/dist/esm/signal/session/resolver.js +144 -35
  248. package/dist/esm/store/cache/identity.cache.js +75 -0
  249. package/dist/esm/store/cache/privacy-token.cache.js +57 -0
  250. package/dist/esm/store/cache/sender-key.cache.js +101 -0
  251. package/dist/esm/store/cache/session.cache.js +92 -0
  252. package/dist/esm/store/contracts/group-metadata.store.js +1 -0
  253. package/dist/esm/store/contracts/identity.store.js +1 -0
  254. package/dist/esm/store/contracts/message-secret.store.js +1 -0
  255. package/dist/esm/store/contracts/pre-key.store.js +1 -0
  256. package/dist/esm/store/contracts/session.store.js +1 -0
  257. package/dist/esm/store/createStore.js +129 -39
  258. package/dist/esm/store/index.js +15 -10
  259. package/dist/esm/store/locks/contact.lock.js +1 -0
  260. package/dist/esm/store/locks/device-list.lock.js +1 -0
  261. package/dist/esm/store/locks/group-metadata.lock.js +20 -0
  262. package/dist/esm/store/locks/identity.lock.js +16 -0
  263. package/dist/esm/store/locks/message-secret.lock.js +17 -0
  264. package/dist/esm/store/locks/pre-key.lock.js +27 -0
  265. package/dist/esm/store/locks/session.lock.js +19 -0
  266. package/dist/esm/store/locks/signal.lock.js +0 -24
  267. package/dist/esm/store/{providers/memory → memory}/appstate.store.js +5 -5
  268. package/dist/esm/store/memory/auth.store.js +24 -0
  269. package/dist/esm/store/memory/contact.store.js +79 -0
  270. package/dist/esm/store/memory/device-list.store.js +103 -0
  271. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -12
  272. package/dist/esm/store/memory/identity.store.js +31 -0
  273. package/dist/esm/store/memory/message-secret.store.js +90 -0
  274. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  275. package/dist/esm/store/memory/pre-key.store.js +97 -0
  276. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  277. package/dist/esm/store/{providers/memory → memory}/retry.store.js +49 -14
  278. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  279. package/dist/esm/store/memory/session.store.js +45 -0
  280. package/dist/esm/store/memory/signal.store.js +36 -0
  281. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  282. package/dist/esm/store/noop.store.js +26 -4
  283. package/dist/esm/transport/WaComms.js +18 -8
  284. package/dist/esm/transport/WaWebSocket.js +41 -9
  285. package/dist/esm/transport/binary/constants.js +10 -4
  286. package/dist/esm/transport/binary/decoder.js +21 -15
  287. package/dist/esm/transport/binary/encoder.js +96 -21
  288. package/dist/esm/transport/binary/tokens.js +12 -12
  289. package/dist/esm/transport/index.js +7 -0
  290. package/dist/esm/transport/keepalive/WaKeepAlive.js +35 -12
  291. package/dist/esm/transport/node/WaMobileTcpSocket.js +120 -0
  292. package/dist/esm/transport/node/WaNodeOrchestrator.js +26 -13
  293. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  294. package/dist/esm/transport/node/builders/abprops.js +20 -0
  295. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  296. package/dist/esm/transport/node/builders/bot.js +38 -0
  297. package/dist/esm/transport/node/builders/business.js +30 -30
  298. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  299. package/dist/esm/transport/node/builders/community.js +53 -0
  300. package/dist/esm/transport/node/builders/device.js +11 -0
  301. package/dist/esm/transport/node/builders/email.js +66 -0
  302. package/dist/esm/transport/node/builders/global.js +1 -1
  303. package/dist/esm/transport/node/builders/group.js +114 -4
  304. package/dist/esm/transport/node/builders/media.js +2 -2
  305. package/dist/esm/transport/node/builders/message.js +83 -49
  306. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  307. package/dist/esm/transport/node/builders/offline.js +14 -0
  308. package/dist/esm/transport/node/builders/passive.js +7 -0
  309. package/dist/esm/transport/node/builders/prekeys.js +40 -43
  310. package/dist/esm/transport/node/builders/presence.js +39 -0
  311. package/dist/esm/transport/node/builders/privacy-token.js +19 -23
  312. package/dist/esm/transport/node/builders/privacy.js +6 -6
  313. package/dist/esm/transport/node/builders/profile.js +28 -8
  314. package/dist/esm/transport/node/builders/retry.js +1 -1
  315. package/dist/esm/transport/node/builders/tos.js +58 -0
  316. package/dist/esm/transport/node/builders/usync.js +51 -2
  317. package/dist/esm/transport/node/helpers.js +27 -1
  318. package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
  319. package/dist/esm/transport/node/mex/client.js +105 -0
  320. package/dist/esm/transport/node/query.js +17 -0
  321. package/dist/esm/transport/node/usync.js +12 -0
  322. package/dist/esm/transport/noise/WaClientPayload.js +23 -18
  323. package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
  324. package/dist/esm/transport/noise/WaMobileClientPayload.js +58 -0
  325. package/dist/esm/transport/noise/WaNoiseCert.js +14 -27
  326. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  327. package/dist/esm/transport/noise/WaNoiseSession.js +48 -67
  328. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  329. package/dist/esm/transport/noise/constants.js +0 -1
  330. package/dist/esm/transport/proxy.js +5 -0
  331. package/dist/esm/transport/stream/parse.js +3 -7
  332. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  333. package/dist/esm/util/async.js +4 -0
  334. package/dist/esm/util/bytes.js +37 -2
  335. package/dist/esm/util/clock.js +15 -0
  336. package/dist/esm/util/coercion.js +45 -3
  337. package/dist/esm/util/collections.js +11 -0
  338. package/dist/esm/util/index.js +2 -2
  339. package/dist/esm/util/primitives.js +19 -0
  340. package/dist/esm/util/runtime.js +5 -0
  341. package/dist/esm/version-spec.js +1 -0
  342. package/dist/index.js +31 -1
  343. package/dist/infra/log/ConsoleLogger.js +30 -6
  344. package/dist/infra/log/PinoLogger.js +64 -0
  345. package/dist/infra/log/types.js +4 -2
  346. package/dist/infra/perf/BackgroundQueue.js +55 -13
  347. package/dist/infra/perf/StoreLock.js +7 -4
  348. package/dist/media/constants.js +36 -3
  349. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  350. package/dist/media/index.js +9 -4
  351. package/dist/media/processor.js +2 -0
  352. package/dist/media/sticker/sticker-pack.js +136 -0
  353. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +87 -229
  354. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  355. package/dist/message/WaMessageClient.js +46 -15
  356. package/dist/message/addons/link-preview/builder.js +39 -0
  357. package/dist/message/addons/link-preview/detect.js +58 -0
  358. package/dist/message/addons/link-preview/fetcher.js +394 -0
  359. package/dist/message/addons/link-preview/types.js +2 -0
  360. package/dist/message/context-info.js +129 -0
  361. package/dist/message/crypto/addon-crypto.js +254 -0
  362. package/dist/message/{icdc.js → crypto/icdc.js} +11 -13
  363. package/dist/message/crypto/phash.js +136 -0
  364. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +7 -7
  365. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +21 -4
  366. package/dist/message/{content.js → encode/content.js} +200 -7
  367. package/dist/message/encode/media-payload.js +45 -0
  368. package/dist/message/{padding.js → encode/padding.js} +9 -3
  369. package/dist/message/index.js +2 -2
  370. package/dist/message/kinds/bot.js +120 -0
  371. package/dist/message/kinds/newsletter.js +248 -0
  372. package/dist/message/kinds/sticker-pack.js +34 -0
  373. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  374. package/dist/message/{incoming.js → primitives/incoming.js} +225 -38
  375. package/dist/message/primitives/peer-data-operation.js +96 -0
  376. package/dist/mex.js +6 -0
  377. package/dist/proto.js +1 -1
  378. package/dist/protocol/abprops.js +173 -0
  379. package/dist/protocol/appstate.js +7 -31
  380. package/dist/protocol/auth.js +3 -2
  381. package/dist/protocol/bot.js +81 -0
  382. package/dist/protocol/browser.js +23 -0
  383. package/dist/protocol/business.js +22 -0
  384. package/dist/protocol/call.js +51 -0
  385. package/dist/protocol/constants.js +51 -3
  386. package/dist/protocol/defaults.js +3 -0
  387. package/dist/protocol/email.js +33 -0
  388. package/dist/protocol/index.js +12 -3
  389. package/dist/protocol/jid.js +148 -11
  390. package/dist/protocol/media.js +25 -12
  391. package/dist/protocol/message.js +4 -1
  392. package/dist/protocol/newsletter.js +64 -0
  393. package/dist/protocol/nodes.js +26 -2
  394. package/dist/protocol/notification.js +25 -3
  395. package/dist/protocol/presence.js +16 -0
  396. package/dist/protocol/status.js +9 -0
  397. package/dist/retry/codec.js +5 -0
  398. package/dist/retry/parse.js +16 -34
  399. package/dist/retry/reason.js +6 -1
  400. package/dist/retry/replay.js +129 -35
  401. package/dist/retry/tracker.js +3 -7
  402. package/dist/signal/api/SignalDeviceSyncApi.js +69 -19
  403. package/dist/signal/api/SignalDigestSyncApi.js +14 -7
  404. package/dist/signal/api/SignalIdentitySyncApi.js +13 -4
  405. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  406. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  407. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  408. package/dist/signal/api/codec.js +52 -0
  409. package/dist/signal/api/prekeys.js +4 -0
  410. package/dist/signal/attestation/WaAdvSignature.js +26 -0
  411. package/dist/signal/{crypto → attestation}/constants.js +1 -5
  412. package/dist/signal/constants.js +4 -1
  413. package/dist/signal/encoding.js +5 -341
  414. package/dist/signal/group/SenderKeyChain.js +19 -34
  415. package/dist/signal/group/SenderKeyCodec.js +4 -5
  416. package/dist/signal/group/SenderKeyManager.js +36 -16
  417. package/dist/signal/group/encoding.js +101 -0
  418. package/dist/signal/index.js +13 -10
  419. package/dist/signal/registration/encoding.js +39 -0
  420. package/dist/signal/registration/keygen.js +11 -2
  421. package/dist/signal/registration/utils.js +8 -2
  422. package/dist/signal/session/SignalProtocol.js +128 -25
  423. package/dist/signal/session/SignalRatchet.js +41 -60
  424. package/dist/signal/session/SignalSerializer.js +5 -6
  425. package/dist/signal/session/SignalSession.js +13 -19
  426. package/dist/signal/session/encoding.js +183 -0
  427. package/dist/signal/session/resolver.js +144 -35
  428. package/dist/store/cache/identity.cache.js +78 -0
  429. package/dist/store/cache/privacy-token.cache.js +60 -0
  430. package/dist/store/cache/sender-key.cache.js +104 -0
  431. package/dist/store/cache/session.cache.js +95 -0
  432. package/dist/store/contracts/group-metadata.store.js +2 -0
  433. package/dist/store/contracts/identity.store.js +2 -0
  434. package/dist/store/contracts/message-secret.store.js +2 -0
  435. package/dist/store/contracts/pre-key.store.js +2 -0
  436. package/dist/store/contracts/session.store.js +2 -0
  437. package/dist/store/createStore.js +128 -38
  438. package/dist/store/index.js +22 -12
  439. package/dist/store/locks/contact.lock.js +1 -0
  440. package/dist/store/locks/device-list.lock.js +1 -0
  441. package/dist/store/locks/group-metadata.lock.js +23 -0
  442. package/dist/store/locks/identity.lock.js +19 -0
  443. package/dist/store/locks/message-secret.lock.js +20 -0
  444. package/dist/store/locks/pre-key.lock.js +30 -0
  445. package/dist/store/locks/session.lock.js +22 -0
  446. package/dist/store/locks/signal.lock.js +0 -24
  447. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  448. package/dist/store/memory/auth.store.js +28 -0
  449. package/dist/store/memory/contact.store.js +83 -0
  450. package/dist/store/memory/device-list.store.js +107 -0
  451. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +26 -14
  452. package/dist/store/memory/identity.store.js +35 -0
  453. package/dist/store/memory/message-secret.store.js +94 -0
  454. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  455. package/dist/store/memory/pre-key.store.js +101 -0
  456. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  457. package/dist/store/{providers/memory → memory}/retry.store.js +49 -14
  458. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  459. package/dist/store/memory/session.store.js +49 -0
  460. package/dist/store/memory/signal.store.js +40 -0
  461. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  462. package/dist/store/noop.store.js +27 -5
  463. package/dist/transport/WaComms.js +18 -8
  464. package/dist/transport/WaWebSocket.js +41 -9
  465. package/dist/transport/binary/constants.js +11 -5
  466. package/dist/transport/binary/decoder.js +24 -18
  467. package/dist/transport/binary/encoder.js +109 -34
  468. package/dist/transport/binary/tokens.js +12 -12
  469. package/dist/transport/index.js +19 -1
  470. package/dist/transport/keepalive/WaKeepAlive.js +35 -12
  471. package/dist/transport/node/WaMobileTcpSocket.js +124 -0
  472. package/dist/transport/node/WaNodeOrchestrator.js +25 -12
  473. package/dist/transport/node/WaNodeTransport.js +13 -0
  474. package/dist/transport/node/builders/abprops.js +23 -0
  475. package/dist/transport/node/builders/account-sync.js +7 -16
  476. package/dist/transport/node/builders/bot.js +43 -0
  477. package/dist/transport/node/builders/business.js +31 -31
  478. package/dist/transport/node/builders/chatstate.js +31 -0
  479. package/dist/transport/node/builders/community.js +59 -0
  480. package/dist/transport/node/builders/device.js +14 -0
  481. package/dist/transport/node/builders/email.js +73 -0
  482. package/dist/transport/node/builders/global.js +1 -1
  483. package/dist/transport/node/builders/group.js +121 -3
  484. package/dist/transport/node/builders/media.js +1 -1
  485. package/dist/transport/node/builders/message.js +84 -49
  486. package/dist/transport/node/builders/newsletter.js +183 -0
  487. package/dist/transport/node/builders/offline.js +17 -0
  488. package/dist/transport/node/builders/passive.js +10 -0
  489. package/dist/transport/node/builders/prekeys.js +38 -41
  490. package/dist/transport/node/builders/presence.js +43 -0
  491. package/dist/transport/node/builders/privacy-token.js +18 -22
  492. package/dist/transport/node/builders/privacy.js +5 -5
  493. package/dist/transport/node/builders/profile.js +30 -7
  494. package/dist/transport/node/builders/retry.js +1 -1
  495. package/dist/transport/node/builders/tos.js +63 -0
  496. package/dist/transport/node/builders/usync.js +52 -1
  497. package/dist/transport/node/helpers.js +28 -1
  498. package/dist/transport/node/mex/argo-decoder.js +189 -0
  499. package/dist/transport/node/mex/client.js +109 -0
  500. package/dist/transport/node/query.js +17 -0
  501. package/dist/transport/node/usync.js +13 -0
  502. package/dist/transport/noise/WaClientPayload.js +22 -17
  503. package/dist/transport/noise/WaFrameCodec.js +1 -1
  504. package/dist/transport/noise/WaMobileClientPayload.js +61 -0
  505. package/dist/transport/noise/WaNoiseCert.js +13 -26
  506. package/dist/transport/noise/WaNoiseHandshake.js +25 -23
  507. package/dist/transport/noise/WaNoiseSession.js +47 -66
  508. package/dist/transport/noise/WaNoiseSocket.js +18 -12
  509. package/dist/transport/noise/constants.js +1 -2
  510. package/dist/transport/proxy.js +5 -0
  511. package/dist/transport/stream/parse.js +3 -7
  512. package/dist/transport/wa-web-version-fetcher.js +94 -0
  513. package/dist/types/appstate/constants.d.ts +1 -1
  514. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +29 -9
  515. package/dist/types/appstate/index.d.ts +5 -5
  516. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  517. package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → parsers/response-parser.d.ts} +13 -3
  518. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  519. package/dist/types/appstate/types.d.ts +1 -1
  520. package/dist/types/appstate/utils.d.ts +17 -1
  521. package/dist/types/appstate-spec.d.ts +24 -0
  522. package/dist/types/auth/WaAuthClient.d.ts +95 -3
  523. package/dist/types/auth/credentials-flow.d.ts +21 -0
  524. package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
  525. package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +5 -1
  526. package/dist/types/auth/types.d.ts +88 -1
  527. package/dist/types/client/WaClient.d.ts +183 -65
  528. package/dist/types/client/WaClientFactory.d.ts +40 -9
  529. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  530. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  531. package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
  532. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  533. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  534. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  535. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +45 -44
  536. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +40 -0
  537. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  538. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +16 -4
  539. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  540. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  541. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +65 -29
  542. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  543. package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
  544. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +15 -3
  545. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  546. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +28 -1
  547. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +117 -2
  548. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +23 -15
  549. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  550. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +16 -2
  551. package/dist/types/client/events/abprops.d.ts +15 -0
  552. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  553. package/dist/types/client/events/business.d.ts +10 -0
  554. package/dist/types/client/events/call.d.ts +31 -0
  555. package/dist/types/client/events/chatstate.d.ts +9 -0
  556. package/dist/types/client/events/devices.d.ts +5 -4
  557. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +7 -4
  558. package/dist/types/client/events/group.d.ts +2 -1
  559. package/dist/types/client/events/identity.d.ts +2 -1
  560. package/dist/types/client/events/incoming.d.ts +65 -0
  561. package/dist/types/client/events/mex-notification.d.ts +6 -0
  562. package/dist/types/client/events/picture.d.ts +8 -0
  563. package/dist/types/client/events/presence.d.ts +28 -0
  564. package/dist/types/client/events/receipt.d.ts +14 -0
  565. package/dist/types/client/events/registration.d.ts +18 -0
  566. package/dist/types/client/index.d.ts +1 -1
  567. package/dist/types/client/media.d.ts +65 -0
  568. package/dist/types/client/messaging/fanout.d.ts +2 -2
  569. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  570. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  571. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  572. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  573. package/dist/types/client/messaging/messages.d.ts +28 -0
  574. package/dist/types/client/newsletter/admin.d.ts +71 -0
  575. package/dist/types/client/newsletter/content.d.ts +42 -0
  576. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  577. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  578. package/dist/types/client/newsletter/mex.d.ts +14 -0
  579. package/dist/types/client/newsletter/parse.d.ts +19 -0
  580. package/dist/types/client/newsletter/types.d.ts +190 -0
  581. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +13 -2
  582. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  583. package/dist/types/client/persistence/mailbox.d.ts +12 -0
  584. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  585. package/dist/types/client/types.d.ts +926 -55
  586. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  587. package/dist/types/crypto/core/index.d.ts +3 -2
  588. package/dist/types/crypto/core/keys.d.ts +0 -4
  589. package/dist/types/crypto/core/nonce.d.ts +4 -5
  590. package/dist/types/crypto/core/primitives.d.ts +31 -20
  591. package/dist/types/crypto/core/random.d.ts +7 -1
  592. package/dist/types/crypto/core/xeddsa.d.ts +11 -0
  593. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  594. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  595. package/dist/types/crypto/curves/constants.d.ts +4 -2
  596. package/dist/types/crypto/curves/types.d.ts +0 -5
  597. package/dist/types/crypto/index.d.ts +1 -0
  598. package/dist/types/crypto/math/constants.d.ts +0 -1
  599. package/dist/types/crypto/math/mod.d.ts +0 -1
  600. package/dist/types/index.d.ts +32 -5
  601. package/dist/types/infra/log/ConsoleLogger.d.ts +19 -2
  602. package/dist/types/infra/log/PinoLogger.d.ts +56 -2
  603. package/dist/types/infra/log/types.d.ts +6 -0
  604. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  605. package/dist/types/infra/perf/StoreLock.d.ts +1 -0
  606. package/dist/types/media/constants.d.ts +9 -2
  607. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  608. package/dist/types/media/index.d.ts +7 -4
  609. package/dist/types/media/processor.d.ts +50 -0
  610. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  611. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +33 -12
  612. package/dist/types/media/transfer/conn.d.ts +7 -0
  613. package/dist/types/media/types.d.ts +10 -5
  614. package/dist/types/message/WaMessageClient.d.ts +14 -0
  615. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  616. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  617. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  618. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  619. package/dist/types/message/context-info.d.ts +66 -0
  620. package/dist/types/message/crypto/addon-crypto.d.ts +78 -0
  621. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +6 -6
  622. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  623. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  624. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  625. package/dist/types/message/encode/content.d.ts +43 -0
  626. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  627. package/dist/types/message/encode/media-payload.d.ts +12 -0
  628. package/dist/types/message/index.d.ts +2 -2
  629. package/dist/types/message/kinds/bot.d.ts +31 -0
  630. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  631. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  632. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  633. package/dist/types/message/primitives/incoming.d.ts +21 -0
  634. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  635. package/dist/types/message/types.d.ts +218 -28
  636. package/dist/types/mex.d.ts +2 -0
  637. package/dist/types/proto.d.ts +2 -2
  638. package/dist/types/protocol/abprops.d.ts +151 -0
  639. package/dist/types/protocol/appstate.d.ts +4 -49
  640. package/dist/types/protocol/auth.d.ts +2 -2
  641. package/dist/types/protocol/bot.d.ts +45 -0
  642. package/dist/types/protocol/browser.d.ts +9 -0
  643. package/dist/types/protocol/business.d.ts +21 -0
  644. package/dist/types/protocol/call.d.ts +44 -0
  645. package/dist/types/protocol/constants.d.ts +20 -3
  646. package/dist/types/protocol/defaults.d.ts +3 -0
  647. package/dist/types/protocol/email.d.ts +32 -0
  648. package/dist/types/protocol/group.d.ts +1 -1
  649. package/dist/types/protocol/index.d.ts +2 -1
  650. package/dist/types/protocol/jid.d.ts +79 -0
  651. package/dist/types/protocol/media.d.ts +21 -13
  652. package/dist/types/protocol/message.d.ts +4 -0
  653. package/dist/types/protocol/newsletter.d.ts +65 -0
  654. package/dist/types/protocol/nodes.d.ts +24 -0
  655. package/dist/types/protocol/notification.d.ts +22 -0
  656. package/dist/types/protocol/presence.d.ts +16 -0
  657. package/dist/types/protocol/status.d.ts +7 -0
  658. package/dist/types/protocol/stream.d.ts +1 -0
  659. package/dist/types/retry/codec.d.ts +5 -0
  660. package/dist/types/retry/index.d.ts +1 -1
  661. package/dist/types/retry/parse.d.ts +9 -0
  662. package/dist/types/retry/reason.d.ts +6 -1
  663. package/dist/types/retry/replay.d.ts +19 -5
  664. package/dist/types/retry/tracker.d.ts +10 -3
  665. package/dist/types/retry/types.d.ts +3 -8
  666. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  667. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +13 -0
  668. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +12 -3
  669. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  670. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  671. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  672. package/dist/types/signal/api/codec.d.ts +20 -0
  673. package/dist/types/signal/api/constants.d.ts +1 -1
  674. package/dist/types/signal/api/prekeys.d.ts +4 -0
  675. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -4
  676. package/dist/types/signal/attestation/constants.d.ts +4 -0
  677. package/dist/types/signal/constants.d.ts +7 -4
  678. package/dist/types/signal/encoding.d.ts +6 -62
  679. package/dist/types/signal/group/SenderKeyChain.d.ts +2 -2
  680. package/dist/types/signal/group/SenderKeyManager.d.ts +24 -2
  681. package/dist/types/signal/group/encoding.d.ts +25 -0
  682. package/dist/types/signal/index.d.ts +4 -1
  683. package/dist/types/signal/registration/encoding.d.ts +30 -0
  684. package/dist/types/signal/registration/keygen.d.ts +10 -0
  685. package/dist/types/signal/registration/utils.d.ts +7 -1
  686. package/dist/types/signal/session/SignalProtocol.d.ts +66 -2
  687. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  688. package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
  689. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  690. package/dist/types/signal/session/encoding.d.ts +28 -0
  691. package/dist/types/signal/session/resolver.d.ts +18 -2
  692. package/dist/types/signal/types.d.ts +16 -4
  693. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  694. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  695. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  696. package/dist/types/store/cache/session.cache.d.ts +23 -0
  697. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  698. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  699. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  700. package/dist/types/store/contracts/identity.store.d.ts +11 -0
  701. package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
  702. package/dist/types/store/contracts/message.store.d.ts +0 -2
  703. package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
  704. package/dist/types/store/contracts/session.store.d.ts +14 -0
  705. package/dist/types/store/contracts/signal.store.d.ts +1 -34
  706. package/dist/types/store/createStore.d.ts +54 -2
  707. package/dist/types/store/index.d.ts +22 -13
  708. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  709. package/dist/types/store/locks/identity.lock.d.ts +3 -0
  710. package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
  711. package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
  712. package/dist/types/store/locks/session.lock.d.ts +3 -0
  713. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  714. package/dist/types/store/memory/auth.store.d.ts +18 -0
  715. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  716. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  717. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  718. package/dist/types/store/memory/identity.store.d.ts +18 -0
  719. package/dist/types/store/memory/message-secret.store.d.ts +31 -0
  720. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  721. package/dist/types/store/memory/pre-key.store.d.ts +23 -0
  722. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  723. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +23 -4
  724. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  725. package/dist/types/store/memory/session.store.d.ts +21 -0
  726. package/dist/types/store/memory/signal.store.d.ts +16 -0
  727. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  728. package/dist/types/store/noop.store.d.ts +6 -2
  729. package/dist/types/store/types.d.ts +271 -7
  730. package/dist/types/transport/WaComms.d.ts +5 -0
  731. package/dist/types/transport/WaWebSocket.d.ts +6 -0
  732. package/dist/types/transport/binary/constants.d.ts +8 -2
  733. package/dist/types/transport/binary/decoder.d.ts +5 -0
  734. package/dist/types/transport/binary/encoder.d.ts +5 -0
  735. package/dist/types/transport/binary/tokens.d.ts +6 -6
  736. package/dist/types/transport/index.d.ts +9 -0
  737. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +11 -1
  738. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +24 -0
  739. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +11 -2
  740. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  741. package/dist/types/transport/node/builders/abprops.d.ts +5 -0
  742. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  743. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  744. package/dist/types/transport/node/builders/business.d.ts +21 -4
  745. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  746. package/dist/types/transport/node/builders/community.d.ts +17 -0
  747. package/dist/types/transport/node/builders/device.d.ts +2 -0
  748. package/dist/types/transport/node/builders/email.d.ts +11 -0
  749. package/dist/types/transport/node/builders/group.d.ts +44 -2
  750. package/dist/types/transport/node/builders/message.d.ts +11 -6
  751. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  752. package/dist/types/transport/node/builders/offline.d.ts +2 -0
  753. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  754. package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
  755. package/dist/types/transport/node/builders/presence.d.ts +13 -0
  756. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  757. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  758. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  759. package/dist/types/transport/node/helpers.d.ts +3 -1
  760. package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
  761. package/dist/types/transport/node/mex/client.d.ts +29 -0
  762. package/dist/types/transport/node/query.d.ts +19 -1
  763. package/dist/types/transport/node/usync.d.ts +3 -0
  764. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +34 -0
  765. package/dist/types/transport/noise/WaNoiseCert.d.ts +12 -1
  766. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  767. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -1
  768. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  769. package/dist/types/transport/noise/constants.d.ts +4 -5
  770. package/dist/types/transport/proxy.d.ts +5 -0
  771. package/dist/types/transport/types.d.ts +15 -0
  772. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  773. package/dist/types/util/async.d.ts +4 -0
  774. package/dist/types/util/bytes.d.ts +36 -1
  775. package/dist/types/util/clock.d.ts +6 -0
  776. package/dist/types/util/coercion.d.ts +25 -0
  777. package/dist/types/util/collections.d.ts +8 -0
  778. package/dist/types/util/index.d.ts +2 -2
  779. package/dist/types/util/primitives.d.ts +11 -0
  780. package/dist/types/util/runtime.d.ts +5 -0
  781. package/dist/types/version-spec.d.ts +1 -0
  782. package/dist/util/async.js +4 -0
  783. package/dist/util/bytes.js +37 -2
  784. package/dist/util/clock.js +18 -0
  785. package/dist/util/coercion.js +48 -3
  786. package/dist/util/collections.js +12 -0
  787. package/dist/util/index.js +7 -1
  788. package/dist/util/primitives.js +20 -0
  789. package/dist/util/runtime.js +5 -0
  790. package/dist/version-spec.js +5 -0
  791. package/package.json +37 -11
  792. package/spec/appstate/index.d.ts +188 -0
  793. package/spec/appstate/index.js +850 -0
  794. package/spec/mex/index.d.ts +4172 -0
  795. package/spec/mex/index.js +261 -0
  796. package/spec/proto/index.d.ts +16305 -0
  797. package/spec/proto/index.js +1 -0
  798. package/spec/version/index.d.ts +4 -0
  799. package/spec/version/index.js +9 -0
  800. package/spec/version/version.json +3 -0
  801. package/dist/auth/flow/WaAuthCredentialsFlow.js +0 -130
  802. package/dist/auth/pairing/WaPairingCodeCrypto.js +0 -77
  803. package/dist/auth/pairing/constants.js +0 -5
  804. package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
  805. package/dist/client/events/chat.js +0 -227
  806. package/dist/client/incoming.js +0 -269
  807. package/dist/client/mailbox.js +0 -50
  808. package/dist/client/messages.js +0 -228
  809. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +0 -125
  810. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +0 -73
  811. package/dist/esm/auth/pairing/constants.js +0 -2
  812. package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
  813. package/dist/esm/client/events/chat.js +0 -224
  814. package/dist/esm/client/incoming.js +0 -260
  815. package/dist/esm/client/mailbox.js +0 -47
  816. package/dist/esm/client/messages.js +0 -224
  817. package/dist/esm/media/WaMediaCrypto.js +0 -304
  818. package/dist/esm/message/addon-crypto.js +0 -59
  819. package/dist/esm/message/incoming.js +0 -325
  820. package/dist/esm/message/phash.js +0 -27
  821. package/dist/esm/signal/crypto/WaAdvSignature.js +0 -64
  822. package/dist/esm/store/locks/participants.lock.js +0 -20
  823. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  824. package/dist/esm/store/providers/memory/device-list.store.js +0 -64
  825. package/dist/esm/store/providers/memory/signal.store.js +0 -199
  826. package/dist/esm/transport/node/builders/index.js +0 -11
  827. package/dist/media/WaMediaCrypto.js +0 -308
  828. package/dist/message/addon-crypto.js +0 -65
  829. package/dist/message/phash.js +0 -30
  830. package/dist/signal/crypto/WaAdvSignature.js +0 -76
  831. package/dist/store/locks/participants.lock.js +0 -23
  832. package/dist/store/providers/memory/contact.store.js +0 -32
  833. package/dist/store/providers/memory/device-list.store.js +0 -68
  834. package/dist/store/providers/memory/signal.store.js +0 -203
  835. package/dist/transport/node/builders/index.js +0 -51
  836. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -66
  837. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
  838. package/dist/types/auth/pairing/constants.d.ts +0 -2
  839. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
  840. package/dist/types/client/events/chat.d.ts +0 -3
  841. package/dist/types/client/history-sync.d.ts +0 -20
  842. package/dist/types/client/incoming.d.ts +0 -37
  843. package/dist/types/client/mailbox.d.ts +0 -10
  844. package/dist/types/client/messages.d.ts +0 -16
  845. package/dist/types/client/messaging/participants.d.ts +0 -13
  846. package/dist/types/media/WaMediaCrypto.d.ts +0 -13
  847. package/dist/types/media/conn.d.ts +0 -3
  848. package/dist/types/message/addon-crypto.d.ts +0 -25
  849. package/dist/types/message/content.d.ts +0 -12
  850. package/dist/types/message/incoming.d.ts +0 -18
  851. package/dist/types/signal/crypto/constants.d.ts +0 -5
  852. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  853. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  854. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  855. package/dist/types/store/providers/memory/signal.store.d.ts +0 -58
  856. package/dist/types/transport/node/builders/index.d.ts +0 -11
  857. package/proto/index.d.ts +0 -10903
  858. package/proto/index.js +0 -1
  859. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  860. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  861. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  862. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  863. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -1,4 +1,12 @@
1
1
  const EMPTY_STORE_LIST = Object.freeze([]);
2
+ export const NOOP_MESSAGE_SECRET_STORE = Object.freeze({
3
+ get: async (_messageId) => null,
4
+ getBatch: async (messageIds) => new Array(messageIds.length).fill(null),
5
+ set: async (_messageId, _entry) => { },
6
+ setBatch: async (_entries) => { },
7
+ cleanupExpired: async (_nowMs) => 0,
8
+ clear: async () => { }
9
+ });
2
10
  export const NOOP_MESSAGE_STORE = Object.freeze({
3
11
  upsert: async (_record) => { },
4
12
  upsertBatch: async (_records) => { },
@@ -19,13 +27,26 @@ export const NOOP_CONTACT_STORE = Object.freeze({
19
27
  upsert: async (_record) => { },
20
28
  upsertBatch: async (_records) => { },
21
29
  getByJid: async (_jid) => null,
30
+ getByPhoneNumber: async (_pn) => null,
22
31
  deleteByJid: async (_jid) => 0,
23
32
  clear: async () => { }
24
33
  });
25
- export const NOOP_PARTICIPANTS_STORE = Object.freeze({
26
- upsertGroupParticipants: async (_snapshot) => { },
27
- getGroupParticipants: async (_groupJid, _nowMs) => null,
28
- deleteGroupParticipants: async (_groupJid) => 0,
34
+ export const NOOP_RETRY_STORE = Object.freeze({
35
+ getOutboundRequesterStatus: async () => null,
36
+ upsertOutboundMessage: async (_record) => { },
37
+ deleteOutboundMessage: async (_messageId) => 0,
38
+ getOutboundMessage: async (_messageId) => null,
39
+ updateOutboundMessageState: async () => { },
40
+ markOutboundRequesterDelivered: async () => { },
41
+ incrementInboundCounter: async () => 0,
42
+ cleanupExpired: async (_nowMs) => 0,
43
+ clear: async () => { },
44
+ destroy: async () => { }
45
+ });
46
+ export const NOOP_GROUP_METADATA_STORE = Object.freeze({
47
+ upsertGroupMetadata: async (_snapshot) => { },
48
+ getGroupMetadata: async (_groupJid, _nowMs) => null,
49
+ deleteGroupMetadata: async (_groupJid) => 0,
29
50
  cleanupExpired: async (_nowMs) => 0,
30
51
  clear: async () => { },
31
52
  destroy: async () => { }
@@ -33,6 +54,7 @@ export const NOOP_PARTICIPANTS_STORE = Object.freeze({
33
54
  export const NOOP_DEVICE_LIST_STORE = Object.freeze({
34
55
  upsertUserDevicesBatch: async (_snapshots) => { },
35
56
  getUserDevicesBatch: async (userJids, _nowMs) => new Array(userJids.length).fill(null),
57
+ findByAnyUserJid: async (_jid, _nowMs) => null,
36
58
  deleteUserDevices: async (_userJid) => 0,
37
59
  cleanupExpired: async (_nowMs) => 0,
38
60
  clear: async () => { },
@@ -3,13 +3,17 @@ import { BoundedTaskQueue, BoundedTaskQueueFullError } from '../infra/perf/Bound
3
3
  import { WA_DEFAULTS } from '../protocol/constants.js';
4
4
  import { WaNoiseSession } from './noise/WaNoiseSession.js';
5
5
  import { WaWebSocket } from './WaWebSocket.js';
6
- import { bytesToBase64UrlSafe } from '../util/bytes.js';
7
- import { EMPTY_BYTES } from '../util/bytes.js';
6
+ import { bytesToBase64UrlSafe, EMPTY_BYTES } from '../util/bytes.js';
8
7
  import { toError } from '../util/primitives.js';
9
8
  const WA_FRAME_HANDLER_QUEUE_MAX_SIZE = 4096;
10
9
  const WA_FRAME_HANDLER_MAX_CONCURRENCY = 8;
11
10
  const WA_PENDING_FRAMES_MAX_COUNT = 2048;
12
11
  const WA_PENDING_FRAMES_MAX_BYTES = 16 * 1024 * 1024;
12
+ /**
13
+ * Owns the WebSocket + Noise handshake lifecycle: opens the socket, drives
14
+ * the noise pairing/login exchange, persists routing-info/server-static
15
+ * updates, and delivers post-handshake binary frames to the caller.
16
+ */
13
17
  export class WaComms {
14
18
  constructor(config, logger = new ConsoleLogger('info')) {
15
19
  if (!config.noise) {
@@ -29,7 +33,9 @@ export class WaComms {
29
33
  protocols: this.config.protocols,
30
34
  dispatcher: this.config.dispatcher,
31
35
  agent: this.config.agent,
32
- timeoutIntervalMs: this.config.timeoutIntervalMs
36
+ headers: this.config.headers,
37
+ timeoutIntervalMs: this.config.timeoutIntervalMs,
38
+ rawWebSocketConstructor: this.config.rawWebSocketConstructor
33
39
  }, logger);
34
40
  this.socket.setHandlers({
35
41
  onOpen: async () => {
@@ -45,6 +51,7 @@ export class WaComms {
45
51
  onClose: async (info) => {
46
52
  await this.onSocketClosed(info);
47
53
  },
54
+ // eslint-disable-next-line @typescript-eslint/require-await
48
55
  onError: async (error) => {
49
56
  this.logger.warn('socket runtime error', { message: error.message });
50
57
  },
@@ -109,7 +116,7 @@ export class WaComms {
109
116
  };
110
117
  }
111
118
  startComms(handleStanza, inflateFrame) {
112
- this.logger.info('comms start requested');
119
+ this.logger.debug('comms start requested');
113
120
  this.stanzaHandler = handleStanza;
114
121
  this.inflateFrame = inflateFrame ?? null;
115
122
  this.clearPendingFrames();
@@ -149,7 +156,7 @@ export class WaComms {
149
156
  this.frameProcessingQueue = this.frameProcessingQueue.then(() => this.flushPendingFrames(), () => this.flushPendingFrames());
150
157
  }
151
158
  async stopComms() {
152
- this.logger.info('comms stop requested');
159
+ this.logger.debug('comms stop requested');
153
160
  this.resetConnectionState({
154
161
  started: false,
155
162
  connected: false,
@@ -162,7 +169,7 @@ export class WaComms {
162
169
  await this.socket.close(1000, 'stop_comms');
163
170
  }
164
171
  async closeSocketAndResume() {
165
- this.logger.info('comms close socket and resume requested');
172
+ this.logger.debug('comms close socket and resume requested');
166
173
  this.resetConnectionState({
167
174
  started: true,
168
175
  connected: false,
@@ -247,6 +254,7 @@ export class WaComms {
247
254
  this.logger.warn('socket open failed', { message: toError(error).message });
248
255
  }
249
256
  }
257
+ // eslint-disable-next-line @typescript-eslint/require-await
250
258
  async onSocketClosed(info) {
251
259
  this.connected = false;
252
260
  this.noiseSession?.onSocketClosed(new Error(`socket closed (${info.code}:${info.reason})`));
@@ -268,7 +276,8 @@ export class WaComms {
268
276
  this.logger.info('socket closed, scheduling reconnect', {
269
277
  code: info.code,
270
278
  reason: info.reason,
271
- reconnectAfterMs: this.config.reconnectIntervalMs
279
+ reconnectAfterMs: this.config.reconnectIntervalMs,
280
+ reconnectAttempts: this.reconnectAttempts
272
281
  });
273
282
  }
274
283
  onSocketMessage(payload) {
@@ -343,9 +352,10 @@ export class WaComms {
343
352
  this.lastServerStaticKey = session.getServerStaticKey();
344
353
  this.connected = true;
345
354
  this.reconnectAttempts = 0;
346
- this.logger.info('comms connected and noise session established');
355
+ this.logger.debug('comms connected and noise session established');
347
356
  this.drainWaiters((waiter) => waiter.resolve());
348
357
  }
358
+ // eslint-disable-next-line @typescript-eslint/require-await
349
359
  async flushPendingFrames() {
350
360
  if (!this.handlingRequests || !this.stanzaHandler || this.pendingFrames.length === 0) {
351
361
  return;
@@ -67,6 +67,11 @@ function resolveSocketRuntime() {
67
67
  }
68
68
  return 'browser';
69
69
  }
70
+ /**
71
+ * Thin wrapper around a `RawWebSocket` (or Node `ws` constructor) used by
72
+ * {@link WaComms}. Iterates the configured URL list on failure and applies a
73
+ * connect/idle timeout.
74
+ */
70
75
  export class WaWebSocket {
71
76
  constructor(config, logger = new ConsoleLogger('info')) {
72
77
  this.config = Object.freeze({
@@ -75,7 +80,8 @@ export class WaWebSocket {
75
80
  });
76
81
  this.socketUrls = resolveSocketUrls(config);
77
82
  this.logger = logger;
78
- this.webSocketCtor = resolveWebSocketConstructor();
83
+ this.webSocketCtor = config.rawWebSocketConstructor ?? resolveWebSocketConstructor();
84
+ this.customWebSocketCtor = Boolean(config.rawWebSocketConstructor);
79
85
  this.socketRuntime = resolveSocketRuntime();
80
86
  this.connectingSockets = new Set();
81
87
  this.handlers = {};
@@ -171,6 +177,7 @@ export class WaWebSocket {
171
177
  }
172
178
  });
173
179
  }
180
+ // eslint-disable-next-line @typescript-eslint/require-await
174
181
  async send(data) {
175
182
  const socket = this.socket;
176
183
  if (!socket || socket.readyState !== WA_READY_STATES.OPEN) {
@@ -334,16 +341,30 @@ export class WaWebSocket {
334
341
  handlers.onOpen();
335
342
  };
336
343
  entry.socket.onerror = () => {
337
- this.logger.warn('socket open error', { url: entry.url });
344
+ if (entry.settled) {
345
+ this.logger.trace('settled pending socket error', { url: entry.url });
346
+ }
347
+ else {
348
+ this.logger.warn('socket open error', { url: entry.url });
349
+ }
338
350
  handlers.onFail(new Error(`websocket connect error for ${entry.url}`));
339
351
  };
340
352
  entry.socket.onclose = (event) => {
341
353
  const info = this.toCloseInfo(event);
342
- this.logger.warn('socket closed before open', {
343
- url: entry.url,
344
- code: info.code,
345
- reason: info.reason
346
- });
354
+ if (entry.settled) {
355
+ this.logger.trace('settled pending socket closed', {
356
+ url: entry.url,
357
+ code: info.code,
358
+ reason: info.reason
359
+ });
360
+ }
361
+ else {
362
+ this.logger.warn('socket closed before open', {
363
+ url: entry.url,
364
+ code: info.code,
365
+ reason: info.reason
366
+ });
367
+ }
347
368
  handlers.onFail(new Error(`websocket closed before open (${info.code}:${info.reason}) for ${entry.url}`));
348
369
  };
349
370
  }
@@ -403,14 +424,25 @@ export class WaWebSocket {
403
424
  try {
404
425
  socket.close(code, reason);
405
426
  }
406
- catch {
407
- // no-op
427
+ catch (error) {
428
+ this.logger.trace('socket close ignored', {
429
+ code,
430
+ reason,
431
+ message: toError(error).message
432
+ });
408
433
  }
409
434
  }
410
435
  async createRawSocket(url) {
411
436
  const headers = this.config.headers;
412
437
  const dispatcher = this.config.dispatcher;
413
438
  const agent = this.config.agent;
439
+ if (this.customWebSocketCtor) {
440
+ return new this.webSocketCtor(url, this.config.protocols, {
441
+ headers,
442
+ dispatcher,
443
+ agent
444
+ });
445
+ }
414
446
  let hasHeaders = false;
415
447
  if (headers) {
416
448
  for (const key in headers) {
@@ -14,7 +14,13 @@ export const BINARY_8 = 252;
14
14
  export const BINARY_20 = 253;
15
15
  export const BINARY_32 = 254;
16
16
  export const NIBBLE_8 = 255;
17
- export const NIBBLE_ALPHABET = [
17
+ export const JID_U_DOMAIN_TYPE_PN = 0x00;
18
+ export const JID_U_DOMAIN_TYPE_LID = 0x01;
19
+ export const JID_U_DOMAIN_TYPE_HOSTED = 0x80;
20
+ export const JID_U_DOMAIN_TYPE_HOSTED_LID = 0x81;
21
+ export const JID_U_DOMAIN_TYPE_HOSTED_MASK = 0x80;
22
+ export const JID_U_DOMAIN_TYPE_LID_MASK = 0x01;
23
+ export const NIBBLE_ALPHABET = Object.freeze([
18
24
  '0',
19
25
  '1',
20
26
  '2',
@@ -31,8 +37,8 @@ export const NIBBLE_ALPHABET = [
31
37
  '\uFFFD',
32
38
  '\uFFFD',
33
39
  '\uFFFD'
34
- ];
35
- export const HEX_ALPHABET = [
40
+ ]);
41
+ export const HEX_ALPHABET = Object.freeze([
36
42
  '0',
37
43
  '1',
38
44
  '2',
@@ -49,7 +55,7 @@ export const HEX_ALPHABET = [
49
55
  'D',
50
56
  'E',
51
57
  'F'
52
- ];
58
+ ]);
53
59
  export const SINGLE_BYTE_TOKEN_MAP = (() => {
54
60
  const map = new Map();
55
61
  for (let i = 0; i < SINGLE_BYTE_TOKENS.length; i += 1) {
@@ -1,18 +1,11 @@
1
1
  import { promisify } from 'node:util';
2
2
  import { inflateRaw, unzip } from 'node:zlib';
3
3
  import { WA_DEFAULTS } from '../../protocol/constants.js';
4
- import { BINARY_20, BINARY_32, BINARY_8, DICTIONARY_0, DICTIONARY_3, HEX_8, HEX_ALPHABET, JID_FB, JID_INTEROP, JID_PAIR, JID_U, LIST_16, LIST_8, LIST_EMPTY, NIBBLE_8, NIBBLE_ALPHABET, STREAM_END } from '../binary/constants.js';
4
+ import { BINARY_20, BINARY_32, BINARY_8, DICTIONARY_0, DICTIONARY_3, HEX_8, HEX_ALPHABET, JID_FB, JID_INTEROP, JID_PAIR, JID_U, JID_U_DOMAIN_TYPE_HOSTED_LID, JID_U_DOMAIN_TYPE_HOSTED_MASK, JID_U_DOMAIN_TYPE_LID, JID_U_DOMAIN_TYPE_LID_MASK, LIST_16, LIST_8, LIST_EMPTY, NIBBLE_8, NIBBLE_ALPHABET, STREAM_END } from '../binary/constants.js';
5
5
  import { DICTIONARIES, SINGLE_BYTE_TOKENS } from '../binary/tokens.js';
6
6
  import { TEXT_DECODER, TEXT_ENCODER, toBytesView } from '../../util/bytes.js';
7
7
  const unzipAsync = promisify(unzip);
8
8
  const inflateRawAsync = promisify(inflateRaw);
9
- const JID_U_DOMAIN_TYPE_LID = 0x01;
10
- const JID_U_DOMAIN_TYPE_HOSTED_LID = 0x81;
11
- const JID_U_DOMAIN_TYPE_HOSTED_MASK = 0x80;
12
- const JID_U_DOMAIN_TYPE_LID_MASK = 0x01;
13
- const JID_U_DOMAIN_LID = 'lid';
14
- const JID_U_DOMAIN_HOSTED = 'hosted';
15
- const JID_U_DOMAIN_HOSTED_LID = 'hosted.lid';
16
9
  class ByteReader {
17
10
  constructor(data) {
18
11
  this.data = data;
@@ -54,27 +47,35 @@ class ByteReader {
54
47
  }
55
48
  }
56
49
  }
50
+ // Reusable scratch buffer for nibble/hex unpack. Max output is
51
+ // `(0x7f) * 2 = 254` bytes (length byte holds the packed-byte count in
52
+ // its low 7 bits, each byte unpacks to ≤2 chars). Single-threaded JS +
53
+ // non-reentrant decoder makes module-level reuse safe – `TextDecoder`
54
+ // copies into the returned string before we touch the buffer again.
55
+ const PACKED_SCRATCH = new Uint8Array(256);
57
56
  function parsePacked(reader, alphabet) {
58
57
  const lengthByte = reader.readUint8();
59
58
  const odd = (lengthByte & 0x80) !== 0;
60
59
  const byteCount = lengthByte & 0x7f;
61
60
  const outLength = byteCount * 2 - (odd ? 1 : 0);
62
- const buf = new Uint8Array(outLength);
61
+ if (outLength < 0) {
62
+ throw new Error(`invalid packed length byte 0x${lengthByte.toString(16)}`);
63
+ }
63
64
  let outIndex = 0;
64
65
  for (let i = 0; i < byteCount; i += 1) {
65
66
  const packed = reader.readUint8();
66
67
  const high = (packed >>> 4) & 0x0f;
67
68
  const low = packed & 0x0f;
68
69
  if (outIndex < outLength) {
69
- buf[outIndex] = alphabet[high].charCodeAt(0);
70
+ PACKED_SCRATCH[outIndex] = alphabet[high].charCodeAt(0);
70
71
  outIndex += 1;
71
72
  }
72
73
  if (outIndex < outLength) {
73
- buf[outIndex] = alphabet[low].charCodeAt(0);
74
+ PACKED_SCRATCH[outIndex] = alphabet[low].charCodeAt(0);
74
75
  outIndex += 1;
75
76
  }
76
77
  }
77
- return TEXT_DECODER.decode(buf);
78
+ return TEXT_DECODER.decode(PACKED_SCRATCH.subarray(0, outLength));
78
79
  }
79
80
  function readBinary(reader, token) {
80
81
  if (token === BINARY_8) {
@@ -128,14 +129,14 @@ function decodeJidU(reader) {
128
129
  const user = decodeTokenString(reader.readUint8(), reader);
129
130
  let domain = WA_DEFAULTS.HOST_DOMAIN;
130
131
  if (domainType === JID_U_DOMAIN_TYPE_LID) {
131
- domain = JID_U_DOMAIN_LID;
132
+ domain = WA_DEFAULTS.LID_SERVER;
132
133
  }
133
134
  else if (domainType === JID_U_DOMAIN_TYPE_HOSTED_LID) {
134
- domain = JID_U_DOMAIN_HOSTED_LID;
135
+ domain = WA_DEFAULTS.HOSTED_LID_SERVER;
135
136
  }
136
137
  else if ((domainType & JID_U_DOMAIN_TYPE_HOSTED_MASK) !== 0 &&
137
138
  (domainType & JID_U_DOMAIN_TYPE_LID_MASK) === 0) {
138
- domain = JID_U_DOMAIN_HOSTED;
139
+ domain = WA_DEFAULTS.HOSTED_SERVER;
139
140
  }
140
141
  if (device > 0) {
141
142
  return `${user}:${device}@${domain}`;
@@ -243,6 +244,7 @@ function decodeNodeInternal(reader) {
243
244
  : { tag: tagValue, attrs, content };
244
245
  return node;
245
246
  }
247
+ /** Decodes raw WhatsApp binary node bytes into a {@link BinaryNode}. */
246
248
  export function decodeBinaryNode(data) {
247
249
  const reader = new ByteReader(data);
248
250
  return decodeNodeInternal(reader);
@@ -261,6 +263,10 @@ async function inflateCompressedStanza(data) {
261
263
  }
262
264
  }
263
265
  }
266
+ /**
267
+ * Decodes a framed stanza: reads the 1-byte flag, inflates the body when the
268
+ * `0x02` compression bit is set, then parses the result as a {@link BinaryNode}.
269
+ */
264
270
  export async function decodeBinaryNodeStanza(stanza) {
265
271
  const reader = new ByteReader(stanza);
266
272
  const flag = reader.readUint8();
@@ -1,4 +1,5 @@
1
- import { BINARY_20, BINARY_32, BINARY_8, DICTIONARY_0, DICTIONARY_TOKEN_MAPS, HEX_8, LIST_16, LIST_8, NIBBLE_8, SINGLE_BYTE_TOKEN_MAP } from '../binary/constants.js';
1
+ import { WA_DEFAULTS } from '../../protocol/constants.js';
2
+ import { BINARY_20, BINARY_32, BINARY_8, DICTIONARY_0, DICTIONARY_TOKEN_MAPS, HEX_8, JID_PAIR, JID_U, JID_U_DOMAIN_TYPE_HOSTED, JID_U_DOMAIN_TYPE_HOSTED_LID, JID_U_DOMAIN_TYPE_LID, JID_U_DOMAIN_TYPE_PN, LIST_16, LIST_8, LIST_EMPTY, NIBBLE_8, SINGLE_BYTE_TOKEN_MAP } from '../binary/constants.js';
2
3
  import { TEXT_ENCODER } from '../../util/bytes.js';
3
4
  class ByteWriter {
4
5
  constructor(initialCapacity = 256) {
@@ -46,27 +47,34 @@ class ByteWriter {
46
47
  this.buffer = next;
47
48
  }
48
49
  }
49
- function isNibbleString(value) {
50
- for (let i = 0; i < value.length; i += 1) {
50
+ const PACKED_NONE = 0;
51
+ const PACKED_NIBBLE = 1;
52
+ const PACKED_HEX = 2;
53
+ function classifyPackedString(value) {
54
+ const n = value.length;
55
+ if (n === 0 || n >= 128)
56
+ return PACKED_NONE;
57
+ let nibbleOk = true;
58
+ let hexOk = true;
59
+ for (let i = 0; i < n; i += 1) {
51
60
  const code = value.charCodeAt(i);
52
- const isDigit = code >= 48 && code <= 57;
53
- const isSpecial = code === 45 || code === 46;
54
- if (!isDigit && !isSpecial) {
55
- return false;
61
+ if (code >= 48 && code <= 57)
62
+ continue;
63
+ if (code === 45 || code === 46) {
64
+ hexOk = false;
65
+ if (!nibbleOk)
66
+ return PACKED_NONE;
67
+ continue;
56
68
  }
57
- }
58
- return value.length > 0;
59
- }
60
- function isHexString(value) {
61
- for (let i = 0; i < value.length; i += 1) {
62
- const code = value.charCodeAt(i);
63
- const isDigit = code >= 48 && code <= 57;
64
- const isHex = code >= 65 && code <= 70;
65
- if (!isDigit && !isHex) {
66
- return false;
69
+ if (code >= 65 && code <= 70) {
70
+ nibbleOk = false;
71
+ if (!hexOk)
72
+ return PACKED_NONE;
73
+ continue;
67
74
  }
75
+ return PACKED_NONE;
68
76
  }
69
- return value.length > 0;
77
+ return nibbleOk ? PACKED_NIBBLE : PACKED_HEX;
70
78
  }
71
79
  function toNibble(value, index, packedType) {
72
80
  const code = value.charCodeAt(index);
@@ -139,11 +147,12 @@ function writeString(value, writer) {
139
147
  return;
140
148
  }
141
149
  }
142
- if (value.length < 128 && isNibbleString(value)) {
150
+ const packed = classifyPackedString(value);
151
+ if (packed === PACKED_NIBBLE) {
143
152
  writePackedString(value, NIBBLE_8, writer);
144
153
  return;
145
154
  }
146
- if (value.length < 128 && isHexString(value)) {
155
+ if (packed === PACKED_HEX) {
147
156
  writePackedString(value, HEX_8, writer);
148
157
  return;
149
158
  }
@@ -151,6 +160,64 @@ function writeString(value, writer) {
151
160
  writeBinaryLength(encoded.length, writer);
152
161
  writer.writeBytes(encoded);
153
162
  }
163
+ function tryWriteJid(value, writer) {
164
+ const atIndex = value.indexOf('@');
165
+ if (atIndex <= 0 || atIndex === value.length - 1) {
166
+ return false;
167
+ }
168
+ if (value.indexOf('@', atIndex + 1) !== -1) {
169
+ return false;
170
+ }
171
+ let userEnd = atIndex;
172
+ let device = 0;
173
+ const colonIndex = value.indexOf(':');
174
+ if (colonIndex !== -1 && colonIndex < atIndex) {
175
+ if (colonIndex === atIndex - 1) {
176
+ return false;
177
+ }
178
+ for (let i = colonIndex + 1; i < atIndex; i += 1) {
179
+ const digit = value.charCodeAt(i) - 48;
180
+ if (digit < 0 || digit > 9) {
181
+ return false;
182
+ }
183
+ device = device * 10 + digit;
184
+ if (device > 255) {
185
+ return false;
186
+ }
187
+ }
188
+ userEnd = colonIndex;
189
+ }
190
+ const server = value.slice(atIndex + 1);
191
+ let domainType = -1;
192
+ if (server === WA_DEFAULTS.LID_SERVER) {
193
+ domainType = JID_U_DOMAIN_TYPE_LID;
194
+ }
195
+ else if (server === WA_DEFAULTS.HOSTED_LID_SERVER) {
196
+ domainType = JID_U_DOMAIN_TYPE_HOSTED_LID;
197
+ }
198
+ else if (server === WA_DEFAULTS.HOST_DOMAIN) {
199
+ domainType = JID_U_DOMAIN_TYPE_PN;
200
+ }
201
+ else if (server === WA_DEFAULTS.HOSTED_SERVER) {
202
+ domainType = JID_U_DOMAIN_TYPE_HOSTED;
203
+ }
204
+ if (domainType !== -1 && device !== 0 && userEnd > 0) {
205
+ writer.writeUint8(JID_U);
206
+ writer.writeUint8(domainType);
207
+ writer.writeUint8(device);
208
+ writeString(value.slice(0, userEnd), writer);
209
+ return true;
210
+ }
211
+ writer.writeUint8(JID_PAIR);
212
+ if (userEnd === 0) {
213
+ writer.writeUint8(LIST_EMPTY);
214
+ }
215
+ else {
216
+ writeString(value.slice(0, userEnd), writer);
217
+ }
218
+ writeString(server, writer);
219
+ return true;
220
+ }
154
221
  function writeListSize(size, writer) {
155
222
  if (!Number.isSafeInteger(size) || size < 0) {
156
223
  throw new Error(`invalid list size ${size}`);
@@ -176,7 +243,10 @@ function writeNodeInternal(node, writer) {
176
243
  for (let i = 0; i < keys.length; i += 1) {
177
244
  const key = keys[i];
178
245
  writeString(key, writer);
179
- writeString(node.attrs[key], writer);
246
+ const value = node.attrs[key];
247
+ if (!tryWriteJid(value, writer)) {
248
+ writeString(value, writer);
249
+ }
180
250
  }
181
251
  if (!hasContent) {
182
252
  return;
@@ -198,11 +268,16 @@ function writeNodeInternal(node, writer) {
198
268
  writeNodeInternal(child, writer);
199
269
  }
200
270
  }
271
+ /** Encodes a {@link BinaryNode} into its raw WhatsApp binary representation. */
201
272
  export function encodeBinaryNode(node) {
202
273
  const writer = new ByteWriter();
203
274
  writeNodeInternal(node, writer);
204
275
  return writer.toUint8Array();
205
276
  }
277
+ /**
278
+ * Encodes a {@link BinaryNode} as a transport stanza – prefixes the bytes
279
+ * with the 1-byte flag (`0x00`) the WebSocket framing expects.
280
+ */
206
281
  export function encodeBinaryNodeStanza(node) {
207
282
  const writer = new ByteWriter();
208
283
  writer.writeUint8(0x00);
@@ -3,7 +3,7 @@
3
3
  * Source: WAWeb deobfuscated WAWapDict.js
4
4
  */
5
5
  export const DICT_VERSION = 3;
6
- export const SINGLE_BYTE_TOKENS = [
6
+ export const SINGLE_BYTE_TOKENS = Object.freeze([
7
7
  'xmlstreamstart',
8
8
  'xmlstreamend',
9
9
  's.whatsapp.net',
@@ -239,8 +239,8 @@ export const SINGLE_BYTE_TOKENS = [
239
239
  '1080',
240
240
  '03',
241
241
  'screen_height'
242
- ];
243
- export const DICTIONARY_0_TOKENS = [
242
+ ]);
243
+ export const DICTIONARY_0_TOKENS = Object.freeze([
244
244
  'read-self',
245
245
  'active',
246
246
  'fbns',
@@ -497,8 +497,8 @@ export const DICTIONARY_0_TOKENS = [
497
497
  'catalog_exists',
498
498
  '01f',
499
499
  'mute_v2'
500
- ];
501
- export const DICTIONARY_1_TOKENS = [
500
+ ]);
501
+ export const DICTIONARY_1_TOKENS = Object.freeze([
502
502
  'reject',
503
503
  'dirty',
504
504
  'announcement',
@@ -755,8 +755,8 @@ export const DICTIONARY_1_TOKENS = [
755
755
  'web_md_migration_experience',
756
756
  'ptt_conversation_waveform',
757
757
  'u_aud_limit_sil_restarts_test1'
758
- ];
759
- export const DICTIONARY_2_TOKENS = [
758
+ ]);
759
+ export const DICTIONARY_2_TOKENS = Object.freeze([
760
760
  '64',
761
761
  'ptt_playback_speed_enabled',
762
762
  'web_product_list_message_enabled',
@@ -1013,8 +1013,8 @@ export const DICTIONARY_2_TOKENS = [
1013
1013
  '1213',
1014
1014
  '1304',
1015
1015
  '1537'
1016
- ];
1017
- export const DICTIONARY_3_TOKENS = [
1016
+ ]);
1017
+ export const DICTIONARY_3_TOKENS = Object.freeze([
1018
1018
  '1724',
1019
1019
  'profile_picture',
1020
1020
  '1071',
@@ -1271,10 +1271,10 @@ export const DICTIONARY_3_TOKENS = [
1271
1271
  '1147',
1272
1272
  '1372',
1273
1273
  '1961'
1274
- ];
1275
- export const DICTIONARIES = [
1274
+ ]);
1275
+ export const DICTIONARIES = Object.freeze([
1276
1276
  DICTIONARY_0_TOKENS,
1277
1277
  DICTIONARY_1_TOKENS,
1278
1278
  DICTIONARY_2_TOKENS,
1279
1279
  DICTIONARY_3_TOKENS
1280
- ];
1280
+ ]);
@@ -1,7 +1,14 @@
1
+ export { decodeBinaryNode, decodeBinaryNodeStanza, encodeBinaryNode, encodeBinaryNodeStanza } from './binary/index.js';
1
2
  export { isProxyAgent, isProxyDispatcher, isProxyTransport, toProxyAgent, toProxyDispatcher } from './proxy.js';
3
+ export { fetchLatestWaWebVersion } from './wa-web-version-fetcher.js';
2
4
  export { WaComms } from './WaComms.js';
5
+ export { verifyNoiseCertificateChain } from './noise/WaNoiseCert.js';
6
+ export { WaNoiseHandshake } from './noise/WaNoiseHandshake.js';
7
+ export { WaNoiseSocket } from './noise/WaNoiseSocket.js';
3
8
  export { WaWebSocket } from './WaWebSocket.js';
4
9
  export { WaKeepAlive } from './keepalive/WaKeepAlive.js';
5
10
  export { WaNodeOrchestrator } from './node/WaNodeOrchestrator.js';
6
11
  export { WaNodeTransport } from './node/WaNodeTransport.js';
12
+ export { WaMobileTcpSocket, WaMobileTcpSocketCtor } from './node/WaMobileTcpSocket.js';
13
+ export { buildMobileLoginPayload } from './noise/WaMobileClientPayload.js';
7
14
  export { assertIqResult, buildIqNode, parseIqError, queryWithContext } from './node/query.js';