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
@@ -0,0 +1,93 @@
1
+ import { proto } from '../../proto.js';
2
+ import { toUserJid } from '../../protocol/jid.js';
3
+ import { setBoundedMapEntry } from '../../util/collections.js';
4
+ const DEFAULT_TIMEOUT_MS = 30000;
5
+ const DEFAULT_MAX_PENDING = 256;
6
+ function buildRequestProtocolMessage(type, body) {
7
+ return {
8
+ type: proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE,
9
+ peerDataOperationRequestMessage: {
10
+ ...body,
11
+ peerDataOperationRequestType: type
12
+ }
13
+ };
14
+ }
15
+ export function createPeerDataOperationRequester(options) {
16
+ const { logger, publishProtocolMessageToDevice, getCurrentCredentials, generateOutgoingMessageId, subscribeToProtocolMessage } = options;
17
+ const defaultTimeoutMs = options.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS;
18
+ const maxPending = options.maxPending ?? DEFAULT_MAX_PENDING;
19
+ const pending = new Map();
20
+ subscribeToProtocolMessage((event) => {
21
+ const protocolMessage = event.protocolMessage;
22
+ if (protocolMessage.type !==
23
+ proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE) {
24
+ return;
25
+ }
26
+ const response = protocolMessage.peerDataOperationRequestResponseMessage;
27
+ if (!response) {
28
+ return;
29
+ }
30
+ const stanzaId = response.stanzaId;
31
+ const results = response.peerDataOperationResult ?? [];
32
+ if (!stanzaId) {
33
+ logger.debug('pdo response without stanzaId', {
34
+ from: event.key.remoteJid,
35
+ resultCount: results.length
36
+ });
37
+ return;
38
+ }
39
+ const entry = pending.get(stanzaId);
40
+ if (!entry) {
41
+ logger.debug('pdo response for unknown stanzaId', {
42
+ stanzaId,
43
+ resultCount: results.length
44
+ });
45
+ return;
46
+ }
47
+ clearTimeout(entry.timeout);
48
+ pending.delete(stanzaId);
49
+ entry.resolve(results);
50
+ });
51
+ const publish = async (type, body, id) => {
52
+ const meJid = getCurrentCredentials()?.meJid;
53
+ if (!meJid) {
54
+ throw new Error('peer data operation requires current me jid');
55
+ }
56
+ const result = await publishProtocolMessageToDevice(toUserJid(meJid), buildRequestProtocolMessage(type, body), { id, pushPriority: 'high_force' });
57
+ return result.id;
58
+ };
59
+ return {
60
+ request: async (type, body, requestOptions) => {
61
+ const messageId = await generateOutgoingMessageId();
62
+ const timeoutMs = requestOptions?.timeoutMs ?? defaultTimeoutMs;
63
+ return new Promise((resolve, reject) => {
64
+ const timeout = setTimeout(() => {
65
+ if (!pending.delete(messageId)) {
66
+ return;
67
+ }
68
+ logger.debug('pdo request timed out', { messageId, timeoutMs, type });
69
+ reject(new Error(`peer data operation timed out after ${timeoutMs}ms (id=${messageId})`));
70
+ }, timeoutMs);
71
+ const entry = { resolve, reject, timeout };
72
+ setBoundedMapEntry(pending, messageId, entry, maxPending, (evictedKey, evicted) => {
73
+ clearTimeout(evicted.timeout);
74
+ logger.warn('pdo pending entry evicted: capacity reached', {
75
+ evictedId: evictedKey,
76
+ maxPending
77
+ });
78
+ evicted.reject(new Error(`peer data operation evicted from pending map (id=${String(evictedKey)})`));
79
+ });
80
+ publish(type, body, messageId).catch((error) => {
81
+ clearTimeout(timeout);
82
+ if (pending.delete(messageId)) {
83
+ reject(error instanceof Error ? error : new Error(String(error)));
84
+ }
85
+ });
86
+ });
87
+ },
88
+ send: async (type, body) => {
89
+ const messageId = await generateOutgoingMessageId();
90
+ return { messageId: await publish(type, body, messageId) };
91
+ }
92
+ };
93
+ }
@@ -0,0 +1 @@
1
+ export { WA_MEX_PERSIST_IDS, WA_MEX_OPERATION_SCHEMAS } from '../spec/mex';
@@ -28,6 +28,16 @@ export const AB_PROP_CONFIGS = Object.freeze({
28
28
  enable_syncd_debug_data_in_patch: prop(6614, 'bool', false),
29
29
  enable_mention_everyone_syncd_sender: prop(24244, 'bool', false),
30
30
  username_contact_syncd_support_enable: prop(17614, 'bool', false),
31
+ // --- newsletter ToS / NUX notice ids ---
32
+ newsletter_tos_notice_id: prop(3810, 'string', '20601216'),
33
+ newsletter_tos_notice_id_smb_web: prop(5597, 'string', '20601216'),
34
+ newsletter_creation_tos_id: prop(3834, 'string', '20601217'),
35
+ newsletter_creation_tos_id_smb_web: prop(5598, 'string', '20601217'),
36
+ newsletter_admin_invite_tos_id: prop(6498, 'string', '20610101'),
37
+ newsletter_admin_invite_tos_id_smb_web: prop(6536, 'string', '20610104'),
38
+ newsletter_creation_nux_id: prop(3835, 'string', '20601218'),
39
+ newsletter_nux_notice_id: prop(15255, 'string', '20610210'),
40
+ newsletter_admin_invite_nux_id: prop(15256, 'string', '20610220'),
31
41
  // --- message sending / encryption ---
32
42
  after_read_sending_enabled: prop(7293, 'bool', false),
33
43
  after_read_fallback_duration: prop(7294, 'int', 86400),
@@ -1,3 +1,4 @@
1
+ import { TEXT_ENCODER } from '../util/bytes.js';
1
2
  export const WA_APP_STATE_COLLECTIONS = Object.freeze({
2
3
  REGULAR: 'regular',
3
4
  REGULAR_LOW: 'regular_low',
@@ -17,7 +18,9 @@ export const WA_APP_STATE_COLLECTION_STATES = Object.freeze({
17
18
  export const WA_APP_STATE_ERROR_CODES = Object.freeze({
18
19
  CONFLICT: '409',
19
20
  BAD_REQUEST: '400',
20
- NOT_FOUND: '404'
21
+ NOT_FOUND: '404',
22
+ NOT_ALLOWED: '405',
23
+ NOT_ACCEPTABLE: '406'
21
24
  });
22
25
  export const WA_APP_STATE_SYNC_DATA_TYPE = Object.freeze({
23
26
  PATCH: 'Patch',
@@ -29,33 +32,6 @@ export const WA_APP_STATE_KEY_TYPES = Object.freeze({
29
32
  MD_MSG_HIST: 'md-msg-hist'
30
33
  });
31
34
  export const WA_APP_STATE_KDF_INFO = Object.freeze({
32
- MUTATION_KEYS: 'WhatsApp Mutation Keys',
33
- PATCH_INTEGRITY: 'WhatsApp Patch Integrity'
34
- });
35
- export const WA_APP_STATE_CHAT_MUTATION_SPECS = Object.freeze({
36
- STAR: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH, action: 'star', version: 2 },
37
- MUTE: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH, action: 'mute', version: 2 },
38
- PIN: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW, action: 'pin_v1', version: 5 },
39
- ARCHIVE: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW, action: 'archive', version: 3 },
40
- DELETE_MESSAGE_FOR_ME: {
41
- collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
42
- action: 'deleteMessageForMe',
43
- version: 3
44
- },
45
- MARK_CHAT_AS_READ: {
46
- collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
47
- action: 'markChatAsRead',
48
- version: 3
49
- },
50
- CLEAR_CHAT: {
51
- collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
52
- action: 'clearChat',
53
- version: 6
54
- },
55
- DELETE_CHAT: {
56
- collection: WA_APP_STATE_COLLECTIONS.REGULAR_HIGH,
57
- action: 'deleteChat',
58
- version: 6
59
- },
60
- LOCK_CHAT: { collection: WA_APP_STATE_COLLECTIONS.REGULAR_LOW, action: 'lock', version: 7 }
35
+ MUTATION_KEYS: TEXT_ENCODER.encode('WhatsApp Mutation Keys'),
36
+ PATCH_INTEGRITY: TEXT_ENCODER.encode('WhatsApp Patch Integrity')
61
37
  });
@@ -1,3 +1,4 @@
1
+ import { TEXT_ENCODER } from '../util/bytes.js';
1
2
  export const WA_SIGNALING = Object.freeze({
2
3
  LINK_CODE_STAGE_COMPANION_HELLO: 'companion_hello',
3
4
  LINK_CODE_STAGE_GET_COUNTRY_CODE: 'get_country_code',
@@ -7,6 +8,6 @@ export const WA_SIGNALING = Object.freeze({
7
8
  COMPANION_REG_REFRESH_NOTIFICATION: 'companion_reg_refresh'
8
9
  });
9
10
  export const WA_PAIRING_KDF_INFO = Object.freeze({
10
- LINK_CODE_BUNDLE: 'link_code_pairing_key_bundle_encryption_key',
11
- ADV_SECRET: 'adv_secret'
11
+ LINK_CODE_BUNDLE: TEXT_ENCODER.encode('link_code_pairing_key_bundle_encryption_key'),
12
+ ADV_SECRET: TEXT_ENCODER.encode('adv_secret')
12
13
  });
@@ -0,0 +1,77 @@
1
+ import { proto } from '../proto.js';
2
+ import { WA_DEFAULTS } from './defaults.js';
3
+ import { isBotJid } from './jid.js';
4
+ import { TEXT_ENCODER } from '../util/bytes.js';
5
+ export const WA_BOT_MSG_EDIT_TYPES = Object.freeze({
6
+ FIRST: 'first',
7
+ INNER: 'inner',
8
+ LAST: 'last',
9
+ FULL: 'full'
10
+ });
11
+ export const WA_BOT_MSG_BODY_TYPES = Object.freeze({
12
+ PROMPT: 'prompt',
13
+ COMMAND: 'command',
14
+ VOICE: 'voice'
15
+ });
16
+ export const WA_BIZ_BOT_TYPES = Object.freeze({
17
+ ONE_P: '1',
18
+ THREE_P: '3'
19
+ });
20
+ const META_AI_PN_USER = '13135550002';
21
+ const META_AI_FBID_USER = '867051314767696';
22
+ const META_AI_TEE_FBID_USER = '1273596044787272';
23
+ const META_AI_SIDECHAT_FBID_USER = '867051314767696555';
24
+ const MANUS_FBID_USER = '1807055946647696';
25
+ const HATCH_FBID_USER = '1807055946647697';
26
+ export const WA_BOT_KNOWN_JIDS = Object.freeze({
27
+ META_AI_PN: `${META_AI_PN_USER}@${WA_DEFAULTS.HOST_DOMAIN}`,
28
+ META_AI_FBID: `${META_AI_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
29
+ META_AI_TEE_FBID: `${META_AI_TEE_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
30
+ META_AI_SIDECHAT_FBID: `${META_AI_SIDECHAT_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
31
+ MANUS_FBID: `${MANUS_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`,
32
+ HATCH_FBID: `${HATCH_FBID_USER}@${WA_DEFAULTS.BOT_SERVER}`
33
+ });
34
+ const PN_TO_FBID_BOT = Object.freeze({
35
+ [WA_BOT_KNOWN_JIDS.META_AI_PN]: WA_BOT_KNOWN_JIDS.META_AI_FBID
36
+ });
37
+ export function resolveBotFbidJid(jid) {
38
+ if (isBotJid(jid))
39
+ return jid;
40
+ return PN_TO_FBID_BOT[jid] ?? null;
41
+ }
42
+ export const WA_BOT_NODE_ATTRS = Object.freeze({
43
+ EDIT: 'edit',
44
+ EDIT_TARGET_ID: 'edit_target_id',
45
+ SENDER_TIMESTAMP_MS: 'sender_timestamp_ms',
46
+ BIZ_BOT: 'biz_bot',
47
+ TYPE: 'type'
48
+ });
49
+ export const WA_META_NODE_ATTRS_BOT = Object.freeze({
50
+ TARGET_ID: 'target_id',
51
+ TARGET_SENDER_JID: 'target_sender_jid',
52
+ TARGET_CHAT_JID: 'target_chat_jid'
53
+ });
54
+ export const WA_BOT_HKDF_INFO = TEXT_ENCODER.encode('Bot Message');
55
+ export const WA_BOT_MSG_SECRET_BYTES = 32;
56
+ // Without a matching Bloks hash, Meta AI silently drops invoke mentions.
57
+ // Bump alongside the Bloks bundle versions shipped by WA Web.
58
+ export const WA_BLOKS_VERSIONING_ID = '98153664e5d904059a94ea08a59fc7eeaf977544cec64ab3ab793c0ce001eb92';
59
+ export const WA_BOT_RENDERING_PIXEL_DENSITY = 2.8125;
60
+ // Default rich-response capability set; bots may reject prompts without one.
61
+ export const WA_BOT_DEFAULT_CAPABILITIES = Object.freeze([
62
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_HEADING,
63
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_NESTED_LIST,
64
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_TABLE,
65
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_CODE,
66
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_STRUCTURED_RESPONSE,
67
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_SUB_HEADING,
68
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_LATEX,
69
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_INLINE_REELS,
70
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_LATEX_INLINE,
71
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_RESPONSE,
72
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_SOURCES_IN_MESSAGE,
73
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_TEXT_COMPONENT,
74
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_SOURCES,
75
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS,
76
+ proto.BotCapabilityMetadata.BotCapabilityType.RICH_RESPONSE_UR_INLINE_REELS_ENABLED
77
+ ]);
@@ -38,10 +38,18 @@ const BROWSER_TO_DISPLAY_NAME = {
38
38
  [WA_BROWSERS.SAFARI]: 'Safari',
39
39
  [WA_BROWSERS.EDGE]: 'Edge'
40
40
  };
41
+ /**
42
+ * Maps a {@link WA_BROWSERS} value to the companion platform id sent in the
43
+ * pairing `link_code` stanza. Unknown inputs fall back to `OTHER_WEB_CLIENT`.
44
+ */
41
45
  export function getWaCompanionPlatformId(browser) {
42
46
  return (BROWSER_TO_PLATFORM_ID[browser.trim().toLowerCase()] ??
43
47
  WA_COMPANION_PLATFORM_IDS.OTHER_WEB_CLIENT);
44
48
  }
49
+ /**
50
+ * Returns the human-readable browser name advertised during pairing.
51
+ * Unknown inputs are echoed back unchanged.
52
+ */
45
53
  export function getWaBrowserDisplayName(browser) {
46
54
  return BROWSER_TO_DISPLAY_NAME[browser.trim().toLowerCase()] ?? browser;
47
55
  }
@@ -0,0 +1,19 @@
1
+ export const WA_BUSINESS_HOURS_DAYS = Object.freeze({
2
+ SUN: 'sun',
3
+ MON: 'mon',
4
+ TUE: 'tue',
5
+ WED: 'wed',
6
+ THU: 'thu',
7
+ FRI: 'fri',
8
+ SAT: 'sat'
9
+ });
10
+ /**
11
+ * Per-day open mode accepted by the `business_profile` edit IQ. A closed day is
12
+ * expressed by omitting it from the config entirely, not by a dedicated mode.
13
+ * `open_time` / `close_time` are only meaningful for `specific_hours`.
14
+ */
15
+ export const WA_BUSINESS_HOURS_MODES = Object.freeze({
16
+ OPEN_24H: 'open_24h',
17
+ SPECIFIC_HOURS: 'specific_hours',
18
+ APPOINTMENT_ONLY: 'appointment_only'
19
+ });
@@ -0,0 +1,48 @@
1
+ export const WA_CALL_PAYLOAD_TAGS = Object.freeze({
2
+ OFFER: 'offer',
3
+ OFFER_NOTICE: 'offer_notice',
4
+ ACCEPT: 'accept',
5
+ PREACCEPT: 'preaccept',
6
+ REJECT: 'reject',
7
+ TERMINATE: 'terminate',
8
+ TRANSPORT: 'transport',
9
+ MUTE: 'mute',
10
+ VIDEO_STATE: 'video_state',
11
+ GROUP_INFO: 'group_info',
12
+ GROUP_UPDATE: 'group_update',
13
+ ENC_REKEY: 'enc_rekey',
14
+ PEER_STATE: 'peer_state',
15
+ FLOW_CONTROL: 'flow_control',
16
+ WEB_CLIENT: 'web_client'
17
+ });
18
+ /**
19
+ * Payload tags that wa-web responds to with a `<receipt>` carrying a typed
20
+ * child node (`<offer call-id call-creator/>`, etc.) instead of a plain
21
+ * `<ack class="call"/>`. Source: `WAWebHandleVoipCall.js`.
22
+ */
23
+ export const WA_CALL_RECEIPT_PAYLOAD_TAGS = new Set([
24
+ WA_CALL_PAYLOAD_TAGS.OFFER,
25
+ WA_CALL_PAYLOAD_TAGS.ACCEPT,
26
+ WA_CALL_PAYLOAD_TAGS.REJECT,
27
+ WA_CALL_PAYLOAD_TAGS.ENC_REKEY
28
+ ]);
29
+ export const WA_CALL_NODE_ATTRS = Object.freeze({
30
+ CALL_ID: 'call-id',
31
+ CALL_CREATOR: 'call-creator',
32
+ GROUP_JID: 'group-jid',
33
+ CALLER_PN: 'caller_pn',
34
+ CALLER_COUNTRY_CODE: 'caller_country_code',
35
+ USERNAME: 'username',
36
+ NOTIFY: 'notify',
37
+ SENDER_LID: 'sender_lid',
38
+ PLATFORM: 'platform',
39
+ VERSION: 'version',
40
+ REASON: 'reason',
41
+ USER_PN: 'user_pn',
42
+ GUEST_NAME: 'guest_name'
43
+ });
44
+ export const WA_CALL_CHILD_TAGS = Object.freeze({
45
+ VIDEO: 'video',
46
+ SILENCE: 'silence',
47
+ GROUP_INFO: 'group_info'
48
+ });
@@ -2,15 +2,21 @@ export { getWaCompanionPlatformId, WA_BROWSERS, WA_COMPANION_PLATFORM_IDS } from
2
2
  export { WA_SIGNALING, WA_PAIRING_KDF_INFO } from './auth.js';
3
3
  export { WA_CONNECTION_REASONS, WA_DISCONNECT_REASONS, WA_FAILURE_REASONS, WA_LOGOUT_REASONS, WA_READY_STATES, WA_STREAM_SIGNALING } from './stream.js';
4
4
  export { WA_IQ_TYPES, WA_NODE_TAGS, WA_XMLNS } from './nodes.js';
5
+ export { WA_CALL_CHILD_TAGS, WA_CALL_NODE_ATTRS, WA_CALL_PAYLOAD_TAGS, WA_CALL_RECEIPT_PAYLOAD_TAGS } from './call.js';
5
6
  export { WA_EDIT_ATTRS, WA_ENC_MEDIA_TYPES, WA_EVENT_META_TYPES, WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_POLL_META_TYPES, WA_RETRYABLE_ACK_CODES, WA_STANZA_MSG_TYPES } from './message.js';
6
- export { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_CHAT_MUTATION_SPECS, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE } from './appstate.js';
7
+ export { WA_APP_STATE_COLLECTIONS, WA_APP_STATE_COLLECTION_STATES, WA_APP_STATE_ERROR_CODES, WA_APP_STATE_KDF_INFO, WA_APP_STATE_KEY_TYPES, WA_APP_STATE_SYNC_DATA_TYPE } from './appstate.js';
7
8
  export { getWaMediaHkdfInfo, WA_MEDIA_HKDF_INFO, WA_PREVIEW_MEDIA_HKDF_INFO } from './media.js';
8
9
  export { WA_ACCOUNT_SYNC_PROTOCOLS, WA_DIRTY_PROTOCOLS, WA_DIRTY_TYPES, WA_SUPPORTED_DIRTY_TYPES } from './dirty.js';
9
- export { WA_GROUP_NOTIFICATION_TAGS, WA_NOTIFICATION_TYPES, WA_REGISTRATION_NOTIFICATION_TAGS } from './notification.js';
10
+ export { WA_BUSINESS_NOTIFICATION_TAGS, WA_GROUP_NOTIFICATION_TAGS, WA_NEWSLETTER_NOTIFICATION_TAGS, WA_NOTIFICATION_TYPES, WA_REGISTRATION_NOTIFICATION_TAGS } from './notification.js';
11
+ export { WA_BUSINESS_HOURS_DAYS, WA_BUSINESS_HOURS_MODES } from './business.js';
12
+ export { WA_CHATSTATE_MEDIA, WA_PRESENCE_LAST_SENTINELS, WA_PRESENCE_TYPES } from './presence.js';
10
13
  export { WA_PRIVACY_TOKEN_NOTIFICATION_TYPE, WA_PRIVACY_TOKEN_TAGS, WA_PRIVACY_TOKEN_TYPES, WA_TC_TOKEN_DEFAULTS } from './privacy-token.js';
11
14
  export { WA_PRIVACY_CATEGORIES, WA_PRIVACY_CATEGORY_TO_SETTING, WA_PRIVACY_DISALLOWED_LIST_CATEGORIES, WA_PRIVACY_SETTING_TO_CATEGORY, WA_PRIVACY_TAGS, WA_PRIVACY_VALUES } from './privacy.js';
12
15
  export { WA_DEFAULTS } from './defaults.js';
16
+ export { WA_BIZ_BOT_TYPES, WA_BOT_DEFAULT_CAPABILITIES, WA_BOT_HKDF_INFO, WA_BOT_KNOWN_JIDS, WA_BOT_MSG_BODY_TYPES, WA_BOT_MSG_EDIT_TYPES, WA_BOT_MSG_SECRET_BYTES, WA_BOT_NODE_ATTRS, WA_META_NODE_ATTRS_BOT } from './bot.js';
17
+ export { WA_STATUS_DISTRIBUTION_SETTINGS } from './status.js';
13
18
  export { WA_EMAIL_CONTEXTS, WA_EMAIL_ERROR_CODES, WA_EMAIL_LIMITS, WA_EMAIL_TAGS, WA_EMAIL_XMLNS } from './email.js';
14
19
  export { AB_PROP_CONFIGS, resolveAbPropNameByCode, WA_ABPROPS_PROTOCOL_VERSION, WA_ABPROPS_REFRESH_BOUNDS } from './abprops.js';
15
20
  export { WA_GROUP_PARTICIPANT_TYPES } from './group.js';
16
21
  export { WA_USYNC_CONTEXTS, WA_USYNC_DEFAULTS, WA_USYNC_MODES } from './usync.js';
22
+ export { WA_NEWSLETTER_FETCH_KEY_TYPES, WA_NEWSLETTER_MUTE_TYPES, WA_NEWSLETTER_MUTE_VALUES, WA_NEWSLETTER_PICTURE_TYPES, WA_NEWSLETTER_RECEIVE_TYPES, WA_NEWSLETTER_ROLES, WA_NEWSLETTER_SEND_TYPES, WA_NEWSLETTER_STATE_TYPES, WA_NEWSLETTER_VERIFICATION_STATES, WA_NEWSLETTER_VIEW_ROLES } from './newsletter.js';
@@ -9,6 +9,9 @@ export const WA_DEFAULTS = Object.freeze({
9
9
  HOSTED_DEVICE_ID: 99,
10
10
  MSGR_SERVER: 'msgr',
11
11
  INTEROP_SERVER: 'interop',
12
+ NEWSLETTER_SERVER: 'newsletter',
13
+ BOT_SERVER: 'bot',
14
+ STATUS_BROADCAST_JID: 'status@broadcast',
12
15
  DEVICE_BROWSER: WA_BROWSERS.FIREFOX,
13
16
  DEVICE_PLATFORM: getWaCompanionPlatformId(WA_BROWSERS.FIREFOX),
14
17
  CHAT_SOCKET_URLS: ['wss://web.whatsapp.com/ws/chat', 'wss://web.whatsapp.com:5222/ws/chat'],
@@ -1,2 +1,2 @@
1
1
  export * from './constants.js';
2
- export { buildDeviceJid, canonicalizeSignalJid, canonicalizeSignalServer, getLoginIdentity, isHostedDeviceId, isHostedDeviceJid, isHostedServer, isGroupJid, normalizeDeviceJid, normalizeRecipientJid, parsePhoneJid, parseSignalAddressFromJid, splitJid, signalAddressKey, toUserJid } from './jid.js';
2
+ export { applyDeviceToJid, buildDeviceJid, canonicalizeSignalJid, canonicalizeSignalServer, getLoginIdentity, isBotJid, isBroadcastJid, isGroupJid, isGroupOrBroadcastJid, isHostedDeviceId, isHostedDeviceJid, isHostedServer, isLidJid, isNewsletterJid, isStatusBroadcastJid, isUserJid, normalizeDeviceJid, normalizeRecipientJid, parseJidFull, parsePhoneJid, parseSignalAddressFromJid, signalAddressKey, splitJid, toUserJid } from './jid.js';
@@ -7,7 +7,9 @@ const KNOWN_SERVERS = {
7
7
  [WA_DEFAULTS.HOSTED_SERVER]: WA_DEFAULTS.HOSTED_SERVER,
8
8
  [WA_DEFAULTS.HOSTED_LID_SERVER]: WA_DEFAULTS.HOSTED_LID_SERVER,
9
9
  [WA_DEFAULTS.MSGR_SERVER]: WA_DEFAULTS.MSGR_SERVER,
10
- [WA_DEFAULTS.INTEROP_SERVER]: WA_DEFAULTS.INTEROP_SERVER
10
+ [WA_DEFAULTS.INTEROP_SERVER]: WA_DEFAULTS.INTEROP_SERVER,
11
+ [WA_DEFAULTS.NEWSLETTER_SERVER]: WA_DEFAULTS.NEWSLETTER_SERVER,
12
+ [WA_DEFAULTS.BOT_SERVER]: WA_DEFAULTS.BOT_SERVER
11
13
  };
12
14
  /**
13
15
  * Returns the canonical reference for known server strings, avoiding
@@ -32,10 +34,20 @@ function findAtIndex(jid) {
32
34
  throw new Error(`invalid jid: ${jid}`);
33
35
  return atIndex;
34
36
  }
37
+ /**
38
+ * Splits a JID into `user` and `server` parts at the `@` separator.
39
+ * Throws if the input does not contain a valid `user@server` shape.
40
+ */
35
41
  export function splitJid(jid) {
36
42
  const atIndex = findAtIndex(jid);
37
43
  return { user: jid.slice(0, atIndex), server: internServer(jid.slice(atIndex + 1)) };
38
44
  }
45
+ /**
46
+ * Normalizes a user-supplied recipient (phone number, group id, or full JID)
47
+ * into a canonical JID. Strings already containing `@` are returned as-is;
48
+ * dashed inputs map to `<input>@g.us` (group); pure-digit inputs map to
49
+ * `<digits>@s.whatsapp.net`.
50
+ */
39
51
  export function normalizeRecipientJid(to) {
40
52
  const input = to.trim();
41
53
  if (input.length === 0)
@@ -58,23 +70,51 @@ export function normalizeRecipientJid(to) {
58
70
  }
59
71
  function isJidType(jid, type) {
60
72
  const atIndex = jid.length - type.length - 1;
61
- return (atIndex >= 1 &&
62
- jid.charCodeAt(atIndex) === 64 &&
63
- jid.indexOf('@') === atIndex &&
64
- jid.endsWith(type));
73
+ if (atIndex < 1 || jid.charCodeAt(atIndex) !== 64 || !jid.endsWith(type))
74
+ return false;
75
+ // Reject multi-@ JIDs (consistency with splitJid). Manual loop beats indexOf.
76
+ for (let i = 0; i < atIndex; i += 1) {
77
+ if (jid.charCodeAt(i) === 64)
78
+ return false;
79
+ }
80
+ return true;
65
81
  }
82
+ /** Returns `true` for JIDs in the `@lid` server (linked-device identity). */
66
83
  export function isLidJid(jid) {
67
84
  return isJidType(jid, WA_DEFAULTS.LID_SERVER);
68
85
  }
86
+ /** Returns `true` for JIDs in the `@s.whatsapp.net` server (phone-number user JIDs). */
87
+ export function isUserJid(jid) {
88
+ return isJidType(jid, WA_DEFAULTS.HOST_DOMAIN);
89
+ }
90
+ /** Returns `true` for JIDs in the `@bot` server. */
91
+ export function isBotJid(jid) {
92
+ return isJidType(jid, WA_DEFAULTS.BOT_SERVER);
93
+ }
94
+ /** Returns `true` for JIDs in the `@g.us` server (groups). */
69
95
  export function isGroupJid(jid) {
70
96
  return isJidType(jid, WA_DEFAULTS.GROUP_SERVER);
71
97
  }
98
+ /** Returns `true` for JIDs in the `@broadcast` server (broadcast lists). */
72
99
  export function isBroadcastJid(jid) {
73
100
  return isJidType(jid, WA_DEFAULTS.BROADCAST_SERVER);
74
101
  }
102
+ /** Returns `true` for the special `status@broadcast` JID. */
103
+ export function isStatusBroadcastJid(jid) {
104
+ return jid === WA_DEFAULTS.STATUS_BROADCAST_JID;
105
+ }
106
+ /** Returns `true` for JIDs in the `@newsletter` server. */
107
+ export function isNewsletterJid(jid) {
108
+ return isJidType(jid, WA_DEFAULTS.NEWSLETTER_SERVER);
109
+ }
110
+ /** Returns `true` for any group or broadcast JID. */
75
111
  export function isGroupOrBroadcastJid(jid) {
76
112
  return isGroupJid(jid) || isBroadcastJid(jid);
77
113
  }
114
+ /**
115
+ * Parses a JID into a Signal-style `{ user, server, device }` address.
116
+ * `device` is `0` when the JID has no `:device` segment.
117
+ */
78
118
  export function parseSignalAddressFromJid(jid) {
79
119
  const atIndex = findAtIndex(jid);
80
120
  const colonIndex = jid.indexOf(':', 0);
@@ -95,12 +135,21 @@ export function parseSignalAddressFromJid(jid) {
95
135
  }
96
136
  return { user: jid.slice(0, colonIndex), server, device };
97
137
  }
138
+ /**
139
+ * Parses a JID and returns the Signal address plus the user-only and
140
+ * fully-normalized device JID forms in a single pass.
141
+ */
98
142
  export function parseJidFull(jid) {
99
143
  const address = parseSignalAddressFromJid(jid);
100
144
  const userJid = `${address.user}@${address.server}`;
101
145
  const normalizedJid = address.device === 0 ? userJid : `${address.user}:${address.device}@${address.server}`;
102
146
  return { address, userJid, normalizedJid };
103
147
  }
148
+ /**
149
+ * Maps the hosted-account server variants (`hosted` / `hosted.lid`) back to
150
+ * their canonical Signal server (`hostDomain` / `lid`). Other servers are
151
+ * returned unchanged.
152
+ */
104
153
  export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
105
154
  if (server === WA_DEFAULTS.HOSTED_SERVER)
106
155
  return hostDomain;
@@ -108,6 +157,11 @@ export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_D
108
157
  return WA_DEFAULTS.LID_SERVER;
109
158
  return server;
110
159
  }
160
+ /**
161
+ * Returns the JID rewritten with its server canonicalized via
162
+ * {@link canonicalizeSignalServer} – used to derive the address Signal
163
+ * sessions are keyed by.
164
+ */
111
165
  export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
112
166
  const address = parseSignalAddressFromJid(jid);
113
167
  const server = canonicalizeSignalServer(address.server ?? WA_DEFAULTS.HOST_DOMAIN, hostDomain);
@@ -115,6 +169,11 @@ export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN)
115
169
  return `${address.user}@${server}`;
116
170
  return `${address.user}:${address.device}@${server}`;
117
171
  }
172
+ /**
173
+ * Strips the `:device` segment from a JID, returning the bare `user@server`
174
+ * form. Set `options.canonicalizeSignalServer` to also rewrite hosted servers
175
+ * via {@link canonicalizeSignalServer}.
176
+ */
118
177
  export function toUserJid(jid, options = {}) {
119
178
  const canonicalize = options.canonicalizeSignalServer === true;
120
179
  if (!canonicalize) {
@@ -132,18 +191,38 @@ export function toUserJid(jid, options = {}) {
132
191
  : address.server;
133
192
  return `${address.user}@${server}`;
134
193
  }
194
+ /**
195
+ * Returns the JID in its full device form. JIDs with `device === 0` lose the
196
+ * device segment (`user@server`); all others keep `user:device@server`.
197
+ */
135
198
  export function normalizeDeviceJid(jid) {
136
199
  const address = parseSignalAddressFromJid(jid);
137
200
  if (address.device === 0)
138
201
  return `${address.user}@${address.server}`;
139
202
  return `${address.user}:${address.device}@${address.server}`;
140
203
  }
204
+ /**
205
+ * Appends `:device` to a bare user JID. A falsy `device` returns the input
206
+ * unchanged.
207
+ */
208
+ export function applyDeviceToJid(userJid, device) {
209
+ if (!device)
210
+ return userJid;
211
+ const address = parseSignalAddressFromJid(userJid);
212
+ return buildDeviceJid(address.user, address.server ?? WA_DEFAULTS.HOST_DOMAIN, device);
213
+ }
214
+ /** Returns `true` when `deviceId` matches the WhatsApp hosted-device id. */
141
215
  export function isHostedDeviceId(deviceId) {
142
216
  return deviceId === WA_DEFAULTS.HOSTED_DEVICE_ID;
143
217
  }
218
+ /** Returns `true` for the hosted server variants (`hosted` and `hosted.lid`). */
144
219
  export function isHostedServer(server) {
145
220
  return server === WA_DEFAULTS.HOSTED_SERVER || server === WA_DEFAULTS.HOSTED_LID_SERVER;
146
221
  }
222
+ /**
223
+ * Returns `true` when the JID refers to a hosted device – either by server
224
+ * (`@hosted` / `@hosted.lid`) or by a `:HOSTED_DEVICE_ID@…` device segment.
225
+ */
147
226
  export function isHostedDeviceJid(jid) {
148
227
  if (isJidType(jid, WA_DEFAULTS.HOSTED_SERVER) ||
149
228
  isJidType(jid, WA_DEFAULTS.HOSTED_LID_SERVER)) {
@@ -166,6 +245,11 @@ export function isHostedDeviceJid(jid) {
166
245
  }
167
246
  return isHostedDeviceId(deviceId);
168
247
  }
248
+ /**
249
+ * Builds a device JID from its parts. When `options.isHosted` is set, the
250
+ * hosted-server variant is selected (preserving LID vs phone) and the canonical
251
+ * hosted device id is used.
252
+ */
169
253
  export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
170
254
  if (options.isHosted === true) {
171
255
  if (!isHostedDeviceId(deviceId)) {
@@ -182,6 +266,11 @@ export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
182
266
  }
183
267
  return `${user}:${deviceId}@${normalizedServer}`;
184
268
  }
269
+ /**
270
+ * Extracts the numeric username and device id from the authenticated user's
271
+ * own JID. Throws when either segment is missing, non-numeric, or out of the
272
+ * safe-integer range.
273
+ */
185
274
  export function getLoginIdentity(meJid) {
186
275
  const atIndex = findAtIndex(meJid);
187
276
  const colonIndex = meJid.indexOf(':', 0);
@@ -197,12 +286,20 @@ export function getLoginIdentity(meJid) {
197
286
  throw new Error(`invalid device from ${meJid}`);
198
287
  return { username, device };
199
288
  }
289
+ /**
290
+ * Builds a `<digits>@s.whatsapp.net` JID from a free-form phone number,
291
+ * stripping non-digit characters. Throws when no digits are found.
292
+ */
200
293
  export function parsePhoneJid(input) {
201
294
  const digits = extractDigits(input);
202
295
  if (!digits)
203
296
  throw new Error('phone number is empty after normalization');
204
297
  return `${digits}@${WA_DEFAULTS.HOST_DOMAIN}`;
205
298
  }
299
+ /**
300
+ * Returns a stable `user|server|device` key for a Signal address, suitable
301
+ * as a Map/Set key.
302
+ */
206
303
  export function signalAddressKey(address) {
207
304
  const server = address.server ?? WA_DEFAULTS.HOST_DOMAIN;
208
305
  return `${address.user}|${server}|${address.device}`;
@@ -1,17 +1,30 @@
1
+ import { TEXT_ENCODER } from '../util/bytes.js';
2
+ const IMAGE_KEYS = TEXT_ENCODER.encode('WhatsApp Image Keys');
3
+ const VIDEO_KEYS = TEXT_ENCODER.encode('WhatsApp Video Keys');
4
+ const AUDIO_KEYS = TEXT_ENCODER.encode('WhatsApp Audio Keys');
5
+ const HISTORY_KEYS = TEXT_ENCODER.encode('WhatsApp History Keys');
1
6
  export const WA_MEDIA_HKDF_INFO = Object.freeze({
2
- document: 'WhatsApp Document Keys',
3
- image: 'WhatsApp Image Keys',
4
- sticker: 'WhatsApp Image Keys',
5
- 'xma-image': 'WhatsApp Image Keys',
6
- video: 'WhatsApp Video Keys',
7
- gif: 'WhatsApp Video Keys',
8
- audio: 'WhatsApp Audio Keys',
9
- ptt: 'WhatsApp Audio Keys',
10
- 'md-app-state': 'WhatsApp App State Keys',
11
- 'md-msg-hist': 'WhatsApp History Keys',
12
- history: 'WhatsApp History Keys'
7
+ document: TEXT_ENCODER.encode('WhatsApp Document Keys'),
8
+ image: IMAGE_KEYS,
9
+ sticker: IMAGE_KEYS,
10
+ 'xma-image': IMAGE_KEYS,
11
+ video: VIDEO_KEYS,
12
+ gif: VIDEO_KEYS,
13
+ audio: AUDIO_KEYS,
14
+ ptt: AUDIO_KEYS,
15
+ 'md-app-state': TEXT_ENCODER.encode('WhatsApp App State Keys'),
16
+ 'md-msg-hist': HISTORY_KEYS,
17
+ history: HISTORY_KEYS,
18
+ 'sticker-pack': TEXT_ENCODER.encode('WhatsApp Sticker Pack Keys'),
19
+ 'thumbnail-sticker-pack': TEXT_ENCODER.encode('WhatsApp Sticker Pack Thumbnail Keys'),
20
+ 'thumbnail-link': TEXT_ENCODER.encode('WhatsApp Link Thumbnail Keys')
13
21
  });
14
- export const WA_PREVIEW_MEDIA_HKDF_INFO = 'Messenger Preview Keys';
22
+ export const WA_PREVIEW_MEDIA_HKDF_INFO = TEXT_ENCODER.encode('Messenger Preview Keys');
23
+ /**
24
+ * Returns the HKDF `info` bytes used to derive per-media keys for a given
25
+ * media type. Throws for unsupported types – see {@link WA_MEDIA_HKDF_INFO}
26
+ * for the supported set.
27
+ */
15
28
  export function getWaMediaHkdfInfo(mediaType) {
16
29
  const info = WA_MEDIA_HKDF_INFO[mediaType];
17
30
  if (info !== undefined)