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
@@ -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,17 +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 && jid.charCodeAt(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;
62
81
  }
82
+ /** Returns `true` for JIDs in the `@lid` server (linked-device identity). */
83
+ export function isLidJid(jid) {
84
+ return isJidType(jid, WA_DEFAULTS.LID_SERVER);
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). */
63
95
  export function isGroupJid(jid) {
64
96
  return isJidType(jid, WA_DEFAULTS.GROUP_SERVER);
65
97
  }
98
+ /** Returns `true` for JIDs in the `@broadcast` server (broadcast lists). */
66
99
  export function isBroadcastJid(jid) {
67
100
  return isJidType(jid, WA_DEFAULTS.BROADCAST_SERVER);
68
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. */
69
111
  export function isGroupOrBroadcastJid(jid) {
70
112
  return isGroupJid(jid) || isBroadcastJid(jid);
71
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
+ */
72
118
  export function parseSignalAddressFromJid(jid) {
73
119
  const atIndex = findAtIndex(jid);
74
120
  const colonIndex = jid.indexOf(':', 0);
@@ -76,17 +122,34 @@ export function parseSignalAddressFromJid(jid) {
76
122
  if (colonIndex === -1 || colonIndex > atIndex) {
77
123
  return { user: jid.slice(0, atIndex), server, device: 0 };
78
124
  }
79
- const device = Number.parseInt(jid.slice(colonIndex + 1, atIndex), 10);
80
- if (!Number.isFinite(device) || device < 0)
125
+ if (colonIndex >= atIndex - 1)
81
126
  throw new Error(`invalid jid device: ${jid}`);
127
+ let device = 0;
128
+ for (let i = colonIndex + 1; i < atIndex; i += 1) {
129
+ const digit = jid.charCodeAt(i) - 48;
130
+ if (digit < 0 || digit > 9)
131
+ throw new Error(`invalid jid device: ${jid}`);
132
+ device = device * 10 + digit;
133
+ if (device > Number.MAX_SAFE_INTEGER)
134
+ throw new Error(`invalid jid device: ${jid}`);
135
+ }
82
136
  return { user: jid.slice(0, colonIndex), server, device };
83
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
+ */
84
142
  export function parseJidFull(jid) {
85
143
  const address = parseSignalAddressFromJid(jid);
86
144
  const userJid = `${address.user}@${address.server}`;
87
145
  const normalizedJid = address.device === 0 ? userJid : `${address.user}:${address.device}@${address.server}`;
88
146
  return { address, userJid, normalizedJid };
89
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
+ */
90
153
  export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
91
154
  if (server === WA_DEFAULTS.HOSTED_SERVER)
92
155
  return hostDomain;
@@ -94,6 +157,11 @@ export function canonicalizeSignalServer(server, hostDomain = WA_DEFAULTS.HOST_D
94
157
  return WA_DEFAULTS.LID_SERVER;
95
158
  return server;
96
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
+ */
97
165
  export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN) {
98
166
  const address = parseSignalAddressFromJid(jid);
99
167
  const server = canonicalizeSignalServer(address.server ?? WA_DEFAULTS.HOST_DOMAIN, hostDomain);
@@ -101,37 +169,87 @@ export function canonicalizeSignalJid(jid, hostDomain = WA_DEFAULTS.HOST_DOMAIN)
101
169
  return `${address.user}@${server}`;
102
170
  return `${address.user}:${address.device}@${server}`;
103
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
+ */
104
177
  export function toUserJid(jid, options = {}) {
178
+ const canonicalize = options.canonicalizeSignalServer === true;
179
+ if (!canonicalize) {
180
+ const atIndex = jid.indexOf('@');
181
+ if (atIndex >= 1 && atIndex < jid.length - 1) {
182
+ const colonIndex = jid.indexOf(':', 0);
183
+ if (colonIndex === -1 || colonIndex > atIndex) {
184
+ return jid;
185
+ }
186
+ }
187
+ }
105
188
  const address = parseSignalAddressFromJid(jid);
106
- const server = options.canonicalizeSignalServer === true
189
+ const server = canonicalize
107
190
  ? canonicalizeSignalServer(address.server ?? WA_DEFAULTS.HOST_DOMAIN, options.hostDomain ?? WA_DEFAULTS.HOST_DOMAIN)
108
191
  : address.server;
109
192
  return `${address.user}@${server}`;
110
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
+ */
111
198
  export function normalizeDeviceJid(jid) {
112
199
  const address = parseSignalAddressFromJid(jid);
113
200
  if (address.device === 0)
114
201
  return `${address.user}@${address.server}`;
115
202
  return `${address.user}:${address.device}@${address.server}`;
116
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. */
117
215
  export function isHostedDeviceId(deviceId) {
118
216
  return deviceId === WA_DEFAULTS.HOSTED_DEVICE_ID;
119
217
  }
218
+ /** Returns `true` for the hosted server variants (`hosted` and `hosted.lid`). */
120
219
  export function isHostedServer(server) {
121
220
  return server === WA_DEFAULTS.HOSTED_SERVER || server === WA_DEFAULTS.HOSTED_LID_SERVER;
122
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
+ */
123
226
  export function isHostedDeviceJid(jid) {
124
- const { user, server } = splitJid(jid);
125
- if (isHostedServer(server)) {
227
+ if (isJidType(jid, WA_DEFAULTS.HOSTED_SERVER) ||
228
+ isJidType(jid, WA_DEFAULTS.HOSTED_LID_SERVER)) {
126
229
  return true;
127
230
  }
128
- const colonIndex = user.indexOf(':');
129
- if (colonIndex < 0) {
231
+ const atIndex = jid.indexOf('@');
232
+ if (atIndex < 1 || atIndex >= jid.length - 1)
233
+ return false;
234
+ const colonIndex = jid.indexOf(':');
235
+ if (colonIndex < 0 || colonIndex >= atIndex - 1)
130
236
  return false;
237
+ let deviceId = 0;
238
+ for (let i = colonIndex + 1; i < atIndex; i += 1) {
239
+ const digit = jid.charCodeAt(i) - 48;
240
+ if (digit < 0 || digit > 9)
241
+ return false;
242
+ deviceId = deviceId * 10 + digit;
243
+ if (deviceId > Number.MAX_SAFE_INTEGER)
244
+ return false;
131
245
  }
132
- const deviceId = Number.parseInt(user.slice(colonIndex + 1), 10);
133
- return Number.isSafeInteger(deviceId) && isHostedDeviceId(deviceId);
246
+ return isHostedDeviceId(deviceId);
134
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
+ */
135
253
  export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
136
254
  if (options.isHosted === true) {
137
255
  if (!isHostedDeviceId(deviceId)) {
@@ -148,6 +266,11 @@ export function buildDeviceJid(user, normalizedServer, deviceId, options = {}) {
148
266
  }
149
267
  return `${user}:${deviceId}@${normalizedServer}`;
150
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
+ */
151
274
  export function getLoginIdentity(meJid) {
152
275
  const atIndex = findAtIndex(meJid);
153
276
  const colonIndex = meJid.indexOf(':', 0);
@@ -163,12 +286,20 @@ export function getLoginIdentity(meJid) {
163
286
  throw new Error(`invalid device from ${meJid}`);
164
287
  return { username, device };
165
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
+ */
166
293
  export function parsePhoneJid(input) {
167
294
  const digits = extractDigits(input);
168
295
  if (!digits)
169
296
  throw new Error('phone number is empty after normalization');
170
297
  return `${digits}@${WA_DEFAULTS.HOST_DOMAIN}`;
171
298
  }
299
+ /**
300
+ * Returns a stable `user|server|device` key for a Signal address, suitable
301
+ * as a Map/Set key.
302
+ */
172
303
  export function signalAddressKey(address) {
173
304
  const server = address.server ?? WA_DEFAULTS.HOST_DOMAIN;
174
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)
@@ -11,6 +11,7 @@ export const WA_MESSAGE_TYPES = Object.freeze({
11
11
  ACK_TYPE_ERROR: 'error',
12
12
  ACK_CLASS_ERROR: 'error',
13
13
  ACK_CLASS_MESSAGE: 'message',
14
+ ACK_CLASS_CALL: 'call',
14
15
  RECEIPT_TYPE_DELIVERY: 'delivery',
15
16
  RECEIPT_TYPE_SENDER: 'sender',
16
17
  RECEIPT_TYPE_INACTIVE: 'inactive',
@@ -21,7 +22,8 @@ export const WA_MESSAGE_TYPES = Object.freeze({
21
22
  RECEIPT_TYPE_HISTORY_SYNC: 'hist_sync',
22
23
  RECEIPT_TYPE_PEER: 'peer_msg',
23
24
  RECEIPT_TYPE_SERVER_ERROR: 'server-error',
24
- RECEIPT_TYPE_RETRY: 'retry'
25
+ RECEIPT_TYPE_RETRY: 'retry',
26
+ RECEIPT_TYPE_ENC_REKEY_RETRY: 'enc_rekey_retry'
25
27
  });
26
28
  export const WA_RETRYABLE_ACK_CODES = Object.freeze(['408', '429', '500', '503']);
27
29
  export const WA_STANZA_MSG_TYPES = Object.freeze({
@@ -36,6 +38,7 @@ export const WA_STANZA_MSG_TYPES = Object.freeze({
36
38
  export const WA_EDIT_ATTRS = Object.freeze({
37
39
  MESSAGE_EDIT: '1',
38
40
  PIN_IN_CHAT: '2',
41
+ NEWSLETTER_EDIT: '3',
39
42
  SENDER_REVOKE: '7',
40
43
  ADMIN_REVOKE: '8'
41
44
  });
@@ -0,0 +1,61 @@
1
+ export const WA_NEWSLETTER_ROLES = Object.freeze({
2
+ SUBSCRIBER: 'SUBSCRIBER',
3
+ GUEST: 'GUEST',
4
+ ADMIN: 'ADMIN',
5
+ OWNER: 'OWNER'
6
+ });
7
+ export const WA_NEWSLETTER_STATE_TYPES = Object.freeze({
8
+ ACTIVE: 'ACTIVE',
9
+ SUSPENDED: 'SUSPENDED',
10
+ GEOSUSPENDED: 'GEOSUSPENDED',
11
+ DELETED: 'DELETED',
12
+ NON_EXISTING: 'NON_EXISTING'
13
+ });
14
+ export const WA_NEWSLETTER_PICTURE_TYPES = Object.freeze({
15
+ IMAGE: 'IMAGE',
16
+ PREVIEW: 'PREVIEW'
17
+ });
18
+ export const WA_NEWSLETTER_FETCH_KEY_TYPES = Object.freeze({
19
+ JID: 'JID',
20
+ INVITE: 'INVITE'
21
+ });
22
+ export const WA_NEWSLETTER_VIEW_ROLES = Object.freeze({
23
+ GUEST: 'GUEST',
24
+ SUBSCRIBER: 'SUBSCRIBER',
25
+ ADMIN: 'ADMIN',
26
+ OWNER: 'OWNER'
27
+ });
28
+ export const WA_NEWSLETTER_MUTE_TYPES = Object.freeze({
29
+ ADMIN_ACTIVITY: 'MUTE_ADMIN_ACTIVITY',
30
+ FOLLOWER_ACTIVITY: 'MUTE_FOLLOWER_ACTIVITY'
31
+ });
32
+ export const WA_NEWSLETTER_MUTE_VALUES = Object.freeze({
33
+ ON: 'ON',
34
+ OFF: 'OFF'
35
+ });
36
+ export const WA_NEWSLETTER_SEND_TYPES = Object.freeze({
37
+ TEXT: 'text',
38
+ MEDIA: 'media',
39
+ REACTION: 'reaction',
40
+ REVOKE: 'revoke'
41
+ });
42
+ export const WA_NEWSLETTER_RECEIVE_TYPES = Object.freeze({
43
+ TEXT: 'NewsletterText',
44
+ MEDIA: 'NewsletterMedia',
45
+ REACTION: 'NewsletterReaction',
46
+ REACTION_REVOKE: 'NewsletterReactionRevoke',
47
+ REVOKE: 'NewsletterRevoke',
48
+ EDIT: 'NewsletterEdit',
49
+ POLL_CREATION: 'NewsletterPollCreation',
50
+ POLL_VOTE: 'NewsletterPollVote',
51
+ POLL_RESULT_SNAPSHOT: 'NewsletterPollResultSnapshot',
52
+ QUIZ_CREATION: 'NewsletterQuizCreation',
53
+ QUESTION: 'NewsletterQuestion',
54
+ QUESTION_REPLY: 'NewsletterQuestionReply',
55
+ QUESTION_RESPONSE: 'NewsletterQuestionResponse',
56
+ WAMO_EMPTY: 'NewsletterWAMOEmpty'
57
+ });
58
+ export const WA_NEWSLETTER_VERIFICATION_STATES = Object.freeze({
59
+ VERIFIED: 'VERIFIED',
60
+ UNVERIFIED: 'UNVERIFIED'
61
+ });
@@ -32,6 +32,7 @@ export const WA_NODE_TAGS = Object.freeze({
32
32
  DESCRIPTION: 'description',
33
33
  MY_ADDONS: 'my_addons',
34
34
  KEY: 'key',
35
+ OP: 'op',
35
36
  REGISTRATION: 'registration',
36
37
  TYPE: 'type',
37
38
  IDENTITY: 'identity',
@@ -60,7 +61,24 @@ export const WA_NODE_TAGS = Object.freeze({
60
61
  ANNOUNCEMENT: 'announcement',
61
62
  EPHEMERAL: 'ephemeral',
62
63
  MEMBERSHIP_APPROVAL_MODE: 'membership_approval_mode',
63
- GROUP_JOIN: 'group_join'
64
+ GROUP_JOIN: 'group_join',
65
+ ABPROPS: 'abprops',
66
+ PLAINTEXT: 'plaintext',
67
+ PRESENCE: 'presence',
68
+ CHATSTATE: 'chatstate',
69
+ CALL: 'call',
70
+ COMPOSING: 'composing',
71
+ PAUSED: 'paused',
72
+ BIZ: 'biz',
73
+ INTERACTIVE: 'interactive',
74
+ NATIVE_FLOW: 'native_flow',
75
+ BOT: 'bot',
76
+ META: 'meta',
77
+ STATUS: 'status',
78
+ USERNAME: 'username',
79
+ TEXT_STATUS: 'text_status',
80
+ DISAPPEARING_MODE: 'disappearing_mode',
81
+ BUSINESS: 'business'
64
82
  });
65
83
  export const WA_IQ_TYPES = Object.freeze({
66
84
  GET: 'get',
@@ -82,6 +100,12 @@ export const WA_XMLNS = Object.freeze({
82
100
  STATUS: 'status',
83
101
  GROUPS: 'w:g2',
84
102
  NEWSLETTER: 'newsletter',
103
+ TOS: 'tos',
85
104
  XMPP_PING: 'urn:xmpp:ping',
86
- WHATSAPP_PING: 'w:p'
105
+ WHATSAPP_PING: 'w:p',
106
+ ABPROPS: 'abt',
107
+ MEX: 'w:mex',
108
+ BOT: 'bot',
109
+ DISAPPEARING_MODE: 'disappearing_mode',
110
+ PASSIVE: 'passive'
87
111
  });
@@ -1,7 +1,27 @@
1
1
  export const WA_NOTIFICATION_TYPES = Object.freeze({
2
2
  GROUP: 'w:gp2',
3
3
  ENCRYPT: 'encrypt',
4
- DEVICES: 'devices'
4
+ DEVICES: 'devices',
5
+ SERVER: 'server',
6
+ REGISTRATION: 'registration',
7
+ NEWSLETTER: 'newsletter',
8
+ BUSINESS: 'business',
9
+ PICTURE: 'picture'
10
+ });
11
+ export const WA_BUSINESS_NOTIFICATION_TAGS = Object.freeze({
12
+ VERIFIED_NAME: 'verified_name',
13
+ REMOVE: 'remove',
14
+ PROFILE: 'profile',
15
+ PRODUCT_CATALOG: 'product_catalog',
16
+ SUBSCRIPTIONS: 'subscriptions',
17
+ FEATURE_FLAGS: 'feature_flags'
18
+ });
19
+ export const WA_NEWSLETTER_NOTIFICATION_TAGS = Object.freeze({
20
+ LIVE_UPDATES: 'live_updates'
21
+ });
22
+ export const WA_REGISTRATION_NOTIFICATION_TAGS = Object.freeze({
23
+ WA_OLD_REGISTRATION: 'wa_old_registration',
24
+ DEVICE_LOGOUT: 'device_logout'
5
25
  });
6
26
  export const WA_GROUP_NOTIFICATION_TAGS = Object.freeze({
7
27
  REMOVE: 'remove',
@@ -48,5 +68,7 @@ export const WA_GROUP_NOTIFICATION_TAGS = Object.freeze({
48
68
  IS_CAPI_HOSTED_GROUP: 'is_capi_hosted_group',
49
69
  GROUP_SAFETY_CHECK: 'group_safety_check',
50
70
  LIMIT_SHARING_ENABLED: 'limit_sharing_enabled',
51
- MISSING_PARTICIPANT_IDENTIFICATION: 'missing_participant_identification'
71
+ MISSING_PARTICIPANT_IDENTIFICATION: 'missing_participant_identification',
72
+ GROUP_HISTORY: 'group_history',
73
+ NO_GROUP_HISTORY: 'no_group_history'
52
74
  });
@@ -0,0 +1,13 @@
1
+ export const WA_PRESENCE_TYPES = Object.freeze({
2
+ AVAILABLE: 'available',
3
+ UNAVAILABLE: 'unavailable',
4
+ SUBSCRIBE: 'subscribe'
5
+ });
6
+ export const WA_PRESENCE_LAST_SENTINELS = Object.freeze({
7
+ DENY: 'deny',
8
+ NONE: 'none',
9
+ ERROR: 'error'
10
+ });
11
+ export const WA_CHATSTATE_MEDIA = Object.freeze({
12
+ AUDIO: 'audio'
13
+ });
@@ -0,0 +1,6 @@
1
+ export const WA_STATUS_DISTRIBUTION_SETTINGS = Object.freeze({
2
+ CONTACTS: 'contacts',
3
+ ALLOWLIST: 'allowlist',
4
+ DENYLIST: 'denylist',
5
+ CLOSE_FRIENDS: 'close_friends'
6
+ });
@@ -16,6 +16,10 @@ const RETRY_PAYLOAD_ENC_TYPE_REVERSE = Object.freeze({
16
16
  2: 'pkmsg',
17
17
  3: 'skmsg'
18
18
  });
19
+ /**
20
+ * Encodes a {@link WaRetryReplayPayload} into the on-disk codec format used
21
+ * by the retry store. Supports the `plaintext`/`encrypted`/`opaque_node` modes.
22
+ */
19
23
  export function encodeRetryReplayPayload(payload) {
20
24
  const chunks = [];
21
25
  if (payload.mode === 'plaintext') {
@@ -56,6 +60,7 @@ export function encodeRetryReplayPayload(payload) {
56
60
  pushBytesField(chunks, payload.node, 'node');
57
61
  return concatBytes(chunks);
58
62
  }
63
+ /** Inverse of {@link encodeRetryReplayPayload}. Throws on bad magic/version. */
59
64
  export function decodeRetryReplayPayload(raw) {
60
65
  if (raw.byteLength < 3) {
61
66
  throw new Error('invalid retry replay payload: unsupported codec version');
@@ -1,8 +1,8 @@
1
- import { WA_MESSAGE_TAGS, WA_NODE_TAGS } from '../protocol/constants.js';
1
+ import { WA_MESSAGE_TAGS, WA_MESSAGE_TYPES, WA_NODE_TAGS } from '../protocol/constants.js';
2
2
  import { normalizeDeviceJid } from '../protocol/jid.js';
3
- import { decodeExactLength, parseUint } from '../signal/api/codec.js';
4
- import { SIGNAL_KEY_DATA_LENGTH, SIGNAL_KEY_ID_LENGTH, SIGNAL_REGISTRATION_ID_LENGTH, SIGNAL_SIGNATURE_LENGTH } from '../signal/api/constants.js';
5
- import { decodeNodeContentBase64OrBytes, findNodeChildrenByTags } from '../transport/node/helpers.js';
3
+ import { decodeExactLength, parseSignalKeyBundleFromNode, parseUint } from '../signal/api/codec.js';
4
+ import { SIGNAL_REGISTRATION_ID_LENGTH } from '../signal/api/constants.js';
5
+ import { findNodeChildrenByTags } from '../transport/node/helpers.js';
6
6
  import { parseOptionalInt } from '../util/primitives.js';
7
7
  const RETRY_STATE_RANK = {
8
8
  pending: 0,
@@ -47,47 +47,25 @@ function parseRetryKeyBundle(node) {
47
47
  if (!node) {
48
48
  return undefined;
49
49
  }
50
- const [identityNode, signedKeyNode, keyNode, deviceIdentityNode] = findNodeChildrenByTags(node, [WA_NODE_TAGS.IDENTITY, WA_NODE_TAGS.SKEY, WA_NODE_TAGS.KEY, WA_NODE_TAGS.DEVICE_IDENTITY]);
51
- const identity = requireNode(identityNode, 'retry keys section missing identity or skey');
52
- const signedKey = requireNode(signedKeyNode, 'retry keys section missing identity or skey');
53
- const [signedKeyIdNode, signedKeyValueNode, signedKeySignatureNode] = findNodeChildrenByTags(signedKey, [WA_NODE_TAGS.ID, WA_NODE_TAGS.VALUE, WA_NODE_TAGS.SIGNATURE]);
54
- const signedKeyId = requireNode(signedKeyIdNode, 'retry keys section has incomplete skey');
55
- const signedKeyValue = requireNode(signedKeyValueNode, 'retry keys section has incomplete skey');
56
- const signedKeySignature = requireNode(signedKeySignatureNode, 'retry keys section has incomplete skey');
57
- let keyIdNode;
58
- let keyValueNode;
59
- if (keyNode) {
60
- const keyNodes = findNodeChildrenByTags(keyNode, [WA_NODE_TAGS.ID, WA_NODE_TAGS.VALUE]);
61
- keyIdNode = keyNodes[0];
62
- keyValueNode = keyNodes[1];
63
- }
64
- const keyId = keyNode ? requireNode(keyIdNode, 'retry keys section has incomplete key') : null;
65
- const keyValue = keyNode
66
- ? requireNode(keyValueNode, 'retry keys section has incomplete key')
67
- : null;
50
+ const parsed = parseSignalKeyBundleFromNode(node, 'retry.keys');
68
51
  return {
69
- identity: decodeExactLength(identity.content, 'retry.keys.identity', SIGNAL_KEY_DATA_LENGTH),
70
- deviceIdentity: deviceIdentityNode
71
- ? decodeNodeContentBase64OrBytes(deviceIdentityNode.content, 'retry.keys.device-identity')
72
- : undefined,
73
- key: keyId && keyValue
74
- ? {
75
- id: parseUint(decodeExactLength(keyId.content, 'retry.keys.key.id', SIGNAL_KEY_ID_LENGTH), 'retry.keys.key.id'),
76
- publicKey: decodeExactLength(keyValue.content, 'retry.keys.key.value', SIGNAL_KEY_DATA_LENGTH)
77
- }
78
- : undefined,
79
- skey: {
80
- id: parseUint(decodeExactLength(signedKeyId.content, 'retry.keys.skey.id', SIGNAL_KEY_ID_LENGTH), 'retry.keys.skey.id'),
81
- publicKey: decodeExactLength(signedKeyValue.content, 'retry.keys.skey.value', SIGNAL_KEY_DATA_LENGTH),
82
- signature: decodeExactLength(signedKeySignature.content, 'retry.keys.skey.signature', SIGNAL_SIGNATURE_LENGTH)
83
- }
52
+ identity: parsed.identity,
53
+ ...(parsed.deviceIdentity ? { deviceIdentity: parsed.deviceIdentity } : {}),
54
+ ...(parsed.oneTimeKey ? { key: parsed.oneTimeKey } : {}),
55
+ skey: parsed.signedKey
84
56
  };
85
57
  }
58
+ /**
59
+ * Parses an incoming `receipt` stanza into a {@link WaParsedRetryRequest}.
60
+ * Returns `null` when the stanza is not a retry/rekey-retry receipt; throws
61
+ * when required attrs/children are missing.
62
+ */
86
63
  export function parseRetryReceiptRequest(node, options) {
87
64
  if (node.tag !== WA_MESSAGE_TAGS.RECEIPT) {
88
65
  return null;
89
66
  }
90
- const receiptType = node.attrs.type === 'retry' || node.attrs.type === 'enc_rekey_retry'
67
+ const receiptType = node.attrs.type === WA_MESSAGE_TYPES.RECEIPT_TYPE_RETRY ||
68
+ node.attrs.type === WA_MESSAGE_TYPES.RECEIPT_TYPE_ENC_REKEY_RETRY
91
69
  ? node.attrs.type
92
70
  : null;
93
71
  if (!receiptType) {
@@ -127,6 +105,10 @@ export function parseRetryReceiptRequest(node, options) {
127
105
  keyBundle: parseRetryKeyBundle(keysNode)
128
106
  };
129
107
  }
108
+ /**
109
+ * Returns whichever of `left`/`right` represents the more advanced retry
110
+ * state (according to the internal precedence rank).
111
+ */
130
112
  export function pickRetryStateMax(left, right) {
131
113
  return RETRY_STATE_RANK[left] >= RETRY_STATE_RANK[right] ? left : right;
132
114
  }
@@ -37,6 +37,11 @@ const RETRY_REASON_MATCHERS = [
37
37
  code: RETRY_REASON.StatusRevokeDelay
38
38
  }
39
39
  ];
40
+ /**
41
+ * Maps a decryption/Signal error to the appropriate {@link WaRetryReasonCode}
42
+ * so an outbound retry receipt carries the correct `error` attribute.
43
+ * Returns `undefined` when no known reason matches.
44
+ */
40
45
  export function mapRetryReasonFromError(error) {
41
46
  const message = toError(error).message.toLowerCase();
42
47
  for (const matcher of RETRY_REASON_MATCHERS) {
@@ -46,5 +51,5 @@ export function mapRetryReasonFromError(error) {
46
51
  return matcher.code;
47
52
  }
48
53
  }
49
- return RETRY_REASON.UnknownError;
54
+ return undefined;
50
55
  }