zapo-js 0.3.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 (774) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -177
  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 +19 -7
  12. package/dist/auth/pairing/WaPairingFlow.js +33 -24
  13. package/dist/auth/pairing/pairing-code-crypto.js +16 -18
  14. package/dist/client/WaClient.js +342 -473
  15. package/dist/client/WaClientFactory.js +279 -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 +682 -204
  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 +256 -125
  34. package/dist/client/coordinators/WaStatusCoordinator.js +49 -0
  35. package/dist/client/coordinators/WaStreamControlCoordinator.js +6 -6
  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 +161 -4
  51. package/dist/client/messaging/fanout.js +9 -10
  52. package/dist/client/messaging/{participants.js → group-metadata.js} +73 -35
  53. package/dist/client/messaging/ignore-key.js +132 -0
  54. package/dist/client/messaging/key-protocol.js +3 -17
  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 +280 -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 +6 -6
  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 +156 -6
  127. package/dist/esm/client/messaging/fanout.js +10 -11
  128. package/dist/esm/client/messaging/{participants.js → group-metadata.js} +72 -34
  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 +66 -19
  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 +6 -0
  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/{providers/memory → memory}/appstate.store.js +5 -5
  245. package/dist/esm/store/memory/auth.store.js +24 -0
  246. package/dist/esm/store/memory/contact.store.js +79 -0
  247. package/dist/esm/store/memory/device-list.store.js +103 -0
  248. package/dist/esm/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +22 -13
  249. package/dist/esm/store/{providers/memory → memory}/identity.store.js +3 -3
  250. package/dist/esm/store/{providers/memory → memory}/message-secret.store.js +17 -8
  251. package/dist/esm/store/{providers/memory → memory}/message.store.js +2 -2
  252. package/dist/esm/store/{providers/memory → memory}/pre-key.store.js +2 -2
  253. package/dist/esm/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  254. package/dist/esm/store/{providers/memory → memory}/retry.store.js +28 -7
  255. package/dist/esm/store/{providers/memory → memory}/sender-key.store.js +3 -3
  256. package/dist/esm/store/{providers/memory → memory}/session.store.js +3 -3
  257. package/dist/esm/store/{providers/memory → memory}/thread.store.js +2 -2
  258. package/dist/esm/store/noop.store.js +6 -4
  259. package/dist/esm/transport/WaComms.js +14 -5
  260. package/dist/esm/transport/WaWebSocket.js +32 -8
  261. package/dist/esm/transport/binary/constants.js +10 -4
  262. package/dist/esm/transport/binary/decoder.js +21 -15
  263. package/dist/esm/transport/binary/encoder.js +96 -21
  264. package/dist/esm/transport/binary/tokens.js +12 -12
  265. package/dist/esm/transport/index.js +1 -0
  266. package/dist/esm/transport/keepalive/WaKeepAlive.js +18 -4
  267. package/dist/esm/transport/node/WaMobileTcpSocket.js +6 -0
  268. package/dist/esm/transport/node/WaNodeOrchestrator.js +9 -5
  269. package/dist/esm/transport/node/WaNodeTransport.js +13 -0
  270. package/dist/esm/transport/node/builders/abprops.js +2 -2
  271. package/dist/esm/transport/node/builders/account-sync.js +7 -15
  272. package/dist/esm/transport/node/builders/bot.js +38 -0
  273. package/dist/esm/transport/node/builders/business.js +30 -30
  274. package/dist/esm/transport/node/builders/chatstate.js +28 -0
  275. package/dist/esm/transport/node/builders/community.js +53 -0
  276. package/dist/esm/transport/node/builders/device.js +2 -2
  277. package/dist/esm/transport/node/builders/email.js +6 -5
  278. package/dist/esm/transport/node/builders/global.js +1 -1
  279. package/dist/esm/transport/node/builders/group.js +114 -4
  280. package/dist/esm/transport/node/builders/media.js +2 -2
  281. package/dist/esm/transport/node/builders/message.js +83 -49
  282. package/dist/esm/transport/node/builders/newsletter.js +176 -0
  283. package/dist/esm/transport/node/builders/passive.js +7 -0
  284. package/dist/esm/transport/node/builders/prekeys.js +4 -4
  285. package/dist/esm/transport/node/builders/presence.js +27 -1
  286. package/dist/esm/transport/node/builders/privacy-token.js +2 -2
  287. package/dist/esm/transport/node/builders/privacy.js +6 -6
  288. package/dist/esm/transport/node/builders/profile.js +28 -8
  289. package/dist/esm/transport/node/builders/tos.js +58 -0
  290. package/dist/esm/transport/node/builders/usync.js +51 -2
  291. package/dist/esm/transport/node/helpers.js +3 -1
  292. package/dist/esm/transport/node/mex/argo-decoder.js +2 -2
  293. package/dist/esm/transport/node/mex/client.js +22 -0
  294. package/dist/esm/transport/node/query.js +17 -0
  295. package/dist/esm/transport/node/usync.js +12 -0
  296. package/dist/esm/transport/noise/WaClientPayload.js +8 -8
  297. package/dist/esm/transport/noise/WaMobileClientPayload.js +5 -0
  298. package/dist/esm/transport/noise/WaNoiseCert.js +5 -0
  299. package/dist/esm/transport/noise/WaNoiseHandshake.js +27 -25
  300. package/dist/esm/transport/noise/WaNoiseSession.js +39 -59
  301. package/dist/esm/transport/noise/WaNoiseSocket.js +19 -13
  302. package/dist/esm/transport/noise/constants.js +0 -1
  303. package/dist/esm/transport/proxy.js +5 -0
  304. package/dist/esm/transport/stream/parse.js +3 -7
  305. package/dist/esm/transport/wa-web-version-fetcher.js +91 -0
  306. package/dist/esm/util/async.js +4 -0
  307. package/dist/esm/util/bytes.js +37 -2
  308. package/dist/esm/util/clock.js +15 -0
  309. package/dist/esm/util/coercion.js +45 -3
  310. package/dist/esm/util/collections.js +11 -0
  311. package/dist/esm/util/index.js +2 -2
  312. package/dist/esm/util/primitives.js +19 -0
  313. package/dist/esm/util/runtime.js +5 -0
  314. package/dist/esm/version-spec.js +1 -0
  315. package/dist/index.js +31 -1
  316. package/dist/infra/log/ConsoleLogger.js +30 -6
  317. package/dist/infra/log/PinoLogger.js +64 -0
  318. package/dist/infra/log/types.js +4 -2
  319. package/dist/infra/perf/BackgroundQueue.js +55 -13
  320. package/dist/media/constants.js +34 -3
  321. package/dist/media/crypto/WaMediaCrypto.js +378 -0
  322. package/dist/media/index.js +9 -4
  323. package/dist/media/sticker/sticker-pack.js +136 -0
  324. package/dist/media/{WaMediaTransferClient.js → transfer/WaMediaTransferClient.js} +37 -6
  325. package/dist/media/{conn.js → transfer/conn.js} +10 -5
  326. package/dist/message/WaMessageClient.js +46 -15
  327. package/dist/message/addons/link-preview/builder.js +39 -0
  328. package/dist/message/addons/link-preview/detect.js +58 -0
  329. package/dist/message/addons/link-preview/fetcher.js +394 -0
  330. package/dist/message/addons/link-preview/types.js +2 -0
  331. package/dist/message/context-info.js +129 -0
  332. package/dist/message/{addon-crypto.js → crypto/addon-crypto.js} +68 -10
  333. package/dist/message/{icdc.js → crypto/icdc.js} +5 -7
  334. package/dist/message/crypto/phash.js +136 -0
  335. package/dist/message/{reporting-token.js → crypto/reporting-token.js} +6 -6
  336. package/dist/message/{use-case-secret.js → crypto/use-case-secret.js} +20 -3
  337. package/dist/message/{content.js → encode/content.js} +192 -7
  338. package/dist/message/encode/media-payload.js +45 -0
  339. package/dist/message/{padding.js → encode/padding.js} +9 -3
  340. package/dist/message/index.js +2 -2
  341. package/dist/message/kinds/bot.js +120 -0
  342. package/dist/message/kinds/newsletter.js +248 -0
  343. package/dist/message/kinds/sticker-pack.js +34 -0
  344. package/dist/message/{ack.js → primitives/ack.js} +8 -1
  345. package/dist/message/{incoming.js → primitives/incoming.js} +216 -31
  346. package/dist/message/primitives/peer-data-operation.js +96 -0
  347. package/dist/mex.js +6 -0
  348. package/dist/proto.js +1 -1
  349. package/dist/protocol/abprops.js +10 -0
  350. package/dist/protocol/appstate.js +7 -31
  351. package/dist/protocol/auth.js +3 -2
  352. package/dist/protocol/bot.js +81 -0
  353. package/dist/protocol/browser.js +8 -0
  354. package/dist/protocol/business.js +22 -0
  355. package/dist/protocol/call.js +51 -0
  356. package/dist/protocol/constants.js +39 -3
  357. package/dist/protocol/defaults.js +3 -0
  358. package/dist/protocol/index.js +12 -3
  359. package/dist/protocol/jid.js +107 -5
  360. package/dist/protocol/media.js +25 -12
  361. package/dist/protocol/message.js +4 -1
  362. package/dist/protocol/newsletter.js +64 -0
  363. package/dist/protocol/nodes.js +22 -2
  364. package/dist/protocol/notification.js +19 -3
  365. package/dist/protocol/presence.js +16 -0
  366. package/dist/protocol/status.js +9 -0
  367. package/dist/retry/codec.js +5 -0
  368. package/dist/retry/parse.js +16 -34
  369. package/dist/retry/reason.js +5 -0
  370. package/dist/retry/replay.js +129 -35
  371. package/dist/retry/tracker.js +3 -7
  372. package/dist/signal/api/SignalDeviceSyncApi.js +64 -17
  373. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  374. package/dist/signal/api/SignalIdentitySyncApi.js +9 -0
  375. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +21 -60
  376. package/dist/signal/api/SignalRotateKeyApi.js +10 -0
  377. package/dist/signal/api/SignalSessionSyncApi.js +20 -48
  378. package/dist/signal/api/codec.js +52 -0
  379. package/dist/signal/api/prekeys.js +4 -0
  380. package/dist/signal/{crypto → attestation}/WaAdvSignature.js +5 -7
  381. package/dist/signal/constants.js +4 -1
  382. package/dist/signal/encoding.js +5 -303
  383. package/dist/signal/group/SenderKeyChain.js +17 -32
  384. package/dist/signal/group/SenderKeyManager.js +24 -7
  385. package/dist/signal/group/encoding.js +101 -0
  386. package/dist/signal/index.js +13 -10
  387. package/dist/signal/registration/encoding.js +39 -0
  388. package/dist/signal/registration/keygen.js +10 -0
  389. package/dist/signal/registration/utils.js +6 -0
  390. package/dist/signal/session/SignalProtocol.js +112 -10
  391. package/dist/signal/session/SignalRatchet.js +24 -54
  392. package/dist/signal/session/SignalSession.js +6 -14
  393. package/dist/signal/session/encoding.js +183 -0
  394. package/dist/signal/session/resolver.js +139 -30
  395. package/dist/store/cache/identity.cache.js +78 -0
  396. package/dist/store/cache/privacy-token.cache.js +60 -0
  397. package/dist/store/cache/sender-key.cache.js +104 -0
  398. package/dist/store/cache/session.cache.js +95 -0
  399. package/dist/store/contracts/group-metadata.store.js +2 -0
  400. package/dist/store/createStore.js +90 -36
  401. package/dist/store/index.js +18 -16
  402. package/dist/store/locks/contact.lock.js +1 -0
  403. package/dist/store/locks/device-list.lock.js +1 -0
  404. package/dist/store/locks/group-metadata.lock.js +23 -0
  405. package/dist/store/{providers/memory → memory}/appstate.store.js +5 -5
  406. package/dist/store/memory/auth.store.js +28 -0
  407. package/dist/store/memory/contact.store.js +83 -0
  408. package/dist/store/memory/device-list.store.js +107 -0
  409. package/dist/store/{providers/memory/participants.store.js → memory/group-metadata.store.js} +24 -15
  410. package/dist/store/{providers/memory → memory}/identity.store.js +3 -3
  411. package/dist/store/{providers/memory → memory}/message-secret.store.js +17 -8
  412. package/dist/store/{providers/memory → memory}/message.store.js +2 -2
  413. package/dist/store/{providers/memory → memory}/pre-key.store.js +2 -2
  414. package/dist/store/{providers/memory → memory}/privacy-token.store.js +1 -1
  415. package/dist/store/{providers/memory → memory}/retry.store.js +28 -7
  416. package/dist/store/{providers/memory → memory}/sender-key.store.js +3 -3
  417. package/dist/store/{providers/memory → memory}/session.store.js +3 -3
  418. package/dist/store/{providers/memory → memory}/thread.store.js +2 -2
  419. package/dist/store/noop.store.js +7 -5
  420. package/dist/transport/WaComms.js +14 -5
  421. package/dist/transport/WaWebSocket.js +32 -8
  422. package/dist/transport/binary/constants.js +11 -5
  423. package/dist/transport/binary/decoder.js +24 -18
  424. package/dist/transport/binary/encoder.js +109 -34
  425. package/dist/transport/binary/tokens.js +12 -12
  426. package/dist/transport/index.js +3 -1
  427. package/dist/transport/keepalive/WaKeepAlive.js +18 -4
  428. package/dist/transport/node/WaMobileTcpSocket.js +6 -0
  429. package/dist/transport/node/WaNodeOrchestrator.js +9 -5
  430. package/dist/transport/node/WaNodeTransport.js +13 -0
  431. package/dist/transport/node/builders/abprops.js +1 -1
  432. package/dist/transport/node/builders/account-sync.js +7 -16
  433. package/dist/transport/node/builders/bot.js +43 -0
  434. package/dist/transport/node/builders/business.js +31 -31
  435. package/dist/transport/node/builders/chatstate.js +31 -0
  436. package/dist/transport/node/builders/community.js +59 -0
  437. package/dist/transport/node/builders/device.js +1 -1
  438. package/dist/transport/node/builders/email.js +6 -5
  439. package/dist/transport/node/builders/global.js +1 -1
  440. package/dist/transport/node/builders/group.js +121 -3
  441. package/dist/transport/node/builders/media.js +1 -1
  442. package/dist/transport/node/builders/message.js +84 -49
  443. package/dist/transport/node/builders/newsletter.js +183 -0
  444. package/dist/transport/node/builders/passive.js +10 -0
  445. package/dist/transport/node/builders/prekeys.js +3 -3
  446. package/dist/transport/node/builders/presence.js +28 -1
  447. package/dist/transport/node/builders/privacy-token.js +1 -1
  448. package/dist/transport/node/builders/privacy.js +5 -5
  449. package/dist/transport/node/builders/profile.js +30 -7
  450. package/dist/transport/node/builders/tos.js +63 -0
  451. package/dist/transport/node/builders/usync.js +52 -1
  452. package/dist/transport/node/helpers.js +2 -1
  453. package/dist/transport/node/mex/argo-decoder.js +2 -2
  454. package/dist/transport/node/mex/client.js +23 -0
  455. package/dist/transport/node/query.js +17 -0
  456. package/dist/transport/node/usync.js +13 -0
  457. package/dist/transport/noise/WaClientPayload.js +8 -8
  458. package/dist/transport/noise/WaMobileClientPayload.js +5 -0
  459. package/dist/transport/noise/WaNoiseCert.js +5 -0
  460. package/dist/transport/noise/WaNoiseHandshake.js +25 -23
  461. package/dist/transport/noise/WaNoiseSession.js +39 -59
  462. package/dist/transport/noise/WaNoiseSocket.js +18 -12
  463. package/dist/transport/noise/constants.js +1 -2
  464. package/dist/transport/proxy.js +5 -0
  465. package/dist/transport/stream/parse.js +3 -7
  466. package/dist/transport/wa-web-version-fetcher.js +94 -0
  467. package/dist/types/appstate/constants.d.ts +1 -1
  468. package/dist/types/appstate/{WaAppStateCrypto.d.ts → crypto/WaAppStateCrypto.d.ts} +26 -9
  469. package/dist/types/appstate/index.d.ts +5 -5
  470. package/dist/types/appstate/{encoding.d.ts → parsers/encoding.d.ts} +8 -1
  471. package/dist/types/appstate/{response-parser.d.ts → parsers/response-parser.d.ts} +13 -3
  472. package/dist/types/appstate/sync/WaAppStateSyncClient.d.ts +105 -0
  473. package/dist/types/appstate/utils.d.ts +17 -1
  474. package/dist/types/appstate-spec.d.ts +24 -0
  475. package/dist/types/auth/WaAuthClient.d.ts +89 -3
  476. package/dist/types/auth/credentials-flow.d.ts +4 -3
  477. package/dist/types/auth/pairing/pairing-code-crypto.d.ts +0 -1
  478. package/dist/types/auth/types.d.ts +48 -1
  479. package/dist/types/client/WaClient.d.ts +178 -71
  480. package/dist/types/client/WaClientFactory.d.ts +30 -5
  481. package/dist/types/client/connection/WaConnectionManager.d.ts +4 -2
  482. package/dist/types/client/connection/WaReceiptQueue.d.ts +1 -1
  483. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +215 -5
  484. package/dist/types/client/coordinators/WaBotCoordinator.d.ts +117 -0
  485. package/dist/types/client/coordinators/WaBroadcastListCoordinator.d.ts +39 -0
  486. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +44 -43
  487. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +16 -0
  488. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +311 -9
  489. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +11 -4
  490. package/dist/types/client/coordinators/WaLowLevelCoordinator.d.ts +47 -0
  491. package/dist/types/client/coordinators/WaMessageCoordinator.d.ts +232 -0
  492. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +54 -31
  493. package/dist/types/client/coordinators/WaNewsletterCoordinator.d.ts +13 -0
  494. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +4 -3
  495. package/dist/types/client/coordinators/WaPresenceCoordinator.d.ts +27 -0
  496. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +27 -0
  497. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +113 -0
  498. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +19 -17
  499. package/dist/types/client/coordinators/WaStatusCoordinator.d.ts +42 -0
  500. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +5 -1
  501. package/dist/types/client/events/abprops.d.ts +2 -1
  502. package/dist/types/client/events/appstate-mutation.d.ts +3 -0
  503. package/dist/types/client/events/business.d.ts +10 -0
  504. package/dist/types/client/events/call.d.ts +31 -0
  505. package/dist/types/client/events/chatstate.d.ts +9 -0
  506. package/dist/types/client/events/devices.d.ts +5 -4
  507. package/dist/types/client/{dirty.d.ts → events/dirty.d.ts} +4 -3
  508. package/dist/types/client/events/group.d.ts +2 -1
  509. package/dist/types/client/events/identity.d.ts +2 -1
  510. package/dist/types/client/{incoming.d.ts → events/incoming.d.ts} +27 -4
  511. package/dist/types/client/events/mex-notification.d.ts +6 -0
  512. package/dist/types/client/events/picture.d.ts +8 -0
  513. package/dist/types/client/events/presence.d.ts +28 -0
  514. package/dist/types/client/events/receipt.d.ts +14 -0
  515. package/dist/types/client/events/registration.d.ts +4 -3
  516. package/dist/types/client/index.d.ts +1 -1
  517. package/dist/types/client/media.d.ts +35 -1
  518. package/dist/types/client/messaging/fanout.d.ts +2 -2
  519. package/dist/types/client/messaging/group-metadata.d.ts +19 -0
  520. package/dist/types/client/messaging/ignore-key.d.ts +11 -0
  521. package/dist/types/client/messaging/key-protocol.d.ts +9 -7
  522. package/dist/types/client/messaging/link-preview.d.ts +19 -0
  523. package/dist/types/client/messaging/messages.d.ts +28 -0
  524. package/dist/types/client/newsletter/admin.d.ts +71 -0
  525. package/dist/types/client/newsletter/content.d.ts +42 -0
  526. package/dist/types/client/newsletter/discovery.d.ts +33 -0
  527. package/dist/types/client/newsletter/messaging.d.ts +66 -0
  528. package/dist/types/client/newsletter/mex.d.ts +14 -0
  529. package/dist/types/client/newsletter/parse.d.ts +19 -0
  530. package/dist/types/client/newsletter/types.d.ts +190 -0
  531. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +12 -1
  532. package/dist/types/client/persistence/history-sync.d.ts +29 -0
  533. package/dist/types/client/{mailbox.d.ts → persistence/mailbox.d.ts} +4 -4
  534. package/dist/types/client/tokens/cs-token.d.ts +1 -3
  535. package/dist/types/client/types.d.ts +843 -71
  536. package/dist/types/crypto/core/hkdf.d.ts +10 -2
  537. package/dist/types/crypto/core/index.d.ts +2 -2
  538. package/dist/types/crypto/core/keys.d.ts +0 -4
  539. package/dist/types/crypto/core/nonce.d.ts +4 -5
  540. package/dist/types/crypto/core/primitives.d.ts +31 -20
  541. package/dist/types/crypto/core/random.d.ts +6 -0
  542. package/dist/types/crypto/core/xeddsa.d.ts +9 -0
  543. package/dist/types/crypto/curves/Ed25519.d.ts +7 -1
  544. package/dist/types/crypto/curves/X25519.d.ts +20 -1
  545. package/dist/types/crypto/curves/constants.d.ts +4 -3
  546. package/dist/types/crypto/curves/types.d.ts +0 -5
  547. package/dist/types/crypto/math/constants.d.ts +0 -1
  548. package/dist/types/crypto/math/mod.d.ts +0 -1
  549. package/dist/types/index.d.ts +32 -6
  550. package/dist/types/infra/log/ConsoleLogger.d.ts +18 -1
  551. package/dist/types/infra/log/PinoLogger.d.ts +55 -1
  552. package/dist/types/infra/log/types.d.ts +6 -0
  553. package/dist/types/infra/perf/BackgroundQueue.d.ts +19 -0
  554. package/dist/types/media/constants.d.ts +7 -2
  555. package/dist/types/media/crypto/WaMediaCrypto.d.ts +59 -0
  556. package/dist/types/media/index.d.ts +7 -5
  557. package/dist/types/media/processor.d.ts +27 -5
  558. package/dist/types/media/sticker/sticker-pack.d.ts +6 -0
  559. package/dist/types/media/{WaMediaTransferClient.d.ts → transfer/WaMediaTransferClient.d.ts} +30 -1
  560. package/dist/types/media/transfer/conn.d.ts +7 -0
  561. package/dist/types/media/types.d.ts +1 -2
  562. package/dist/types/message/WaMessageClient.d.ts +14 -0
  563. package/dist/types/message/addons/link-preview/builder.d.ts +13 -0
  564. package/dist/types/message/addons/link-preview/detect.d.ts +5 -0
  565. package/dist/types/message/addons/link-preview/fetcher.d.ts +13 -0
  566. package/dist/types/message/addons/link-preview/types.d.ts +51 -0
  567. package/dist/types/message/context-info.d.ts +66 -0
  568. package/dist/types/message/{addon-crypto.d.ts → crypto/addon-crypto.d.ts} +27 -5
  569. package/dist/types/message/{icdc.d.ts → crypto/icdc.d.ts} +4 -4
  570. package/dist/types/message/{phash.d.ts → crypto/phash.d.ts} +1 -1
  571. package/dist/types/message/{reporting-token.d.ts → crypto/reporting-token.d.ts} +2 -2
  572. package/dist/types/message/{use-case-secret.d.ts → crypto/use-case-secret.d.ts} +17 -1
  573. package/dist/types/message/encode/content.d.ts +43 -0
  574. package/dist/types/message/{device-sent.d.ts → encode/device-sent.d.ts} +1 -1
  575. package/dist/types/message/encode/media-payload.d.ts +12 -0
  576. package/dist/types/message/index.d.ts +2 -2
  577. package/dist/types/message/kinds/bot.d.ts +31 -0
  578. package/dist/types/message/kinds/newsletter.d.ts +12 -0
  579. package/dist/types/message/kinds/sticker-pack.d.ts +6 -0
  580. package/dist/types/message/{ack.d.ts → primitives/ack.d.ts} +1 -1
  581. package/dist/types/message/primitives/incoming.d.ts +21 -0
  582. package/dist/types/message/primitives/peer-data-operation.d.ts +23 -0
  583. package/dist/types/message/types.d.ts +208 -10
  584. package/dist/types/mex.d.ts +2 -0
  585. package/dist/types/proto.d.ts +2 -2
  586. package/dist/types/protocol/abprops.d.ts +9 -0
  587. package/dist/types/protocol/appstate.d.ts +4 -49
  588. package/dist/types/protocol/auth.d.ts +2 -2
  589. package/dist/types/protocol/bot.d.ts +45 -0
  590. package/dist/types/protocol/browser.d.ts +8 -0
  591. package/dist/types/protocol/business.d.ts +21 -0
  592. package/dist/types/protocol/call.d.ts +44 -0
  593. package/dist/types/protocol/constants.d.ts +16 -3
  594. package/dist/types/protocol/defaults.d.ts +3 -0
  595. package/dist/types/protocol/group.d.ts +1 -1
  596. package/dist/types/protocol/index.d.ts +2 -1
  597. package/dist/types/protocol/jid.d.ts +78 -0
  598. package/dist/types/protocol/media.d.ts +21 -13
  599. package/dist/types/protocol/message.d.ts +4 -0
  600. package/dist/types/protocol/newsletter.d.ts +65 -0
  601. package/dist/types/protocol/nodes.d.ts +20 -0
  602. package/dist/types/protocol/notification.d.ts +16 -0
  603. package/dist/types/protocol/presence.d.ts +16 -0
  604. package/dist/types/protocol/status.d.ts +7 -0
  605. package/dist/types/retry/codec.d.ts +5 -0
  606. package/dist/types/retry/index.d.ts +1 -1
  607. package/dist/types/retry/parse.d.ts +9 -0
  608. package/dist/types/retry/reason.d.ts +5 -0
  609. package/dist/types/retry/replay.d.ts +19 -5
  610. package/dist/types/retry/tracker.d.ts +10 -3
  611. package/dist/types/retry/types.d.ts +3 -8
  612. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +20 -0
  613. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +10 -0
  614. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +9 -0
  615. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +8 -0
  616. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +10 -0
  617. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +13 -0
  618. package/dist/types/signal/api/codec.d.ts +20 -0
  619. package/dist/types/signal/api/constants.d.ts +1 -1
  620. package/dist/types/signal/api/prekeys.d.ts +4 -0
  621. package/dist/types/signal/{crypto → attestation}/WaAdvSignature.d.ts +2 -2
  622. package/dist/types/signal/attestation/constants.d.ts +4 -0
  623. package/dist/types/signal/constants.d.ts +7 -4
  624. package/dist/types/signal/encoding.d.ts +6 -68
  625. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  626. package/dist/types/signal/group/SenderKeyManager.d.ts +17 -0
  627. package/dist/types/signal/group/encoding.d.ts +25 -0
  628. package/dist/types/signal/index.d.ts +4 -1
  629. package/dist/types/signal/registration/encoding.d.ts +30 -0
  630. package/dist/types/signal/registration/keygen.d.ts +10 -0
  631. package/dist/types/signal/registration/utils.d.ts +5 -0
  632. package/dist/types/signal/session/SignalProtocol.d.ts +55 -0
  633. package/dist/types/signal/session/SignalRatchet.d.ts +2 -3
  634. package/dist/types/signal/session/SignalSession.d.ts +0 -1
  635. package/dist/types/signal/session/encoding.d.ts +28 -0
  636. package/dist/types/signal/session/resolver.d.ts +14 -0
  637. package/dist/types/store/cache/identity.cache.d.ts +15 -0
  638. package/dist/types/store/cache/privacy-token.cache.d.ts +15 -0
  639. package/dist/types/store/cache/sender-key.cache.d.ts +18 -0
  640. package/dist/types/store/cache/session.cache.d.ts +23 -0
  641. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  642. package/dist/types/store/contracts/device-list.store.d.ts +13 -0
  643. package/dist/types/store/contracts/group-metadata.store.d.ts +14 -0
  644. package/dist/types/store/contracts/message.store.d.ts +0 -2
  645. package/dist/types/store/createStore.d.ts +54 -2
  646. package/dist/types/store/index.d.ts +17 -16
  647. package/dist/types/store/locks/group-metadata.lock.d.ts +2 -0
  648. package/dist/types/store/{providers/memory → memory}/appstate.store.d.ts +2 -2
  649. package/dist/types/store/memory/auth.store.d.ts +18 -0
  650. package/dist/types/store/{providers/memory → memory}/contact.store.d.ts +6 -1
  651. package/dist/types/store/{providers/memory → memory}/device-list.store.d.ts +15 -2
  652. package/dist/types/store/memory/group-metadata.store.d.ts +27 -0
  653. package/dist/types/store/{providers/memory → memory}/identity.store.d.ts +2 -2
  654. package/dist/types/store/{providers/memory → memory}/message-secret.store.d.ts +12 -2
  655. package/dist/types/store/{providers/memory → memory}/message.store.d.ts +1 -1
  656. package/dist/types/store/{providers/memory → memory}/pre-key.store.d.ts +2 -2
  657. package/dist/types/store/{providers/memory → memory}/privacy-token.store.d.ts +1 -1
  658. package/dist/types/store/{providers/memory → memory}/retry.store.d.ts +16 -3
  659. package/dist/types/store/{providers/memory → memory}/sender-key.store.d.ts +2 -2
  660. package/dist/types/store/{providers/memory → memory}/session.store.d.ts +2 -2
  661. package/dist/types/store/{providers/memory → memory}/signal.store.d.ts +2 -2
  662. package/dist/types/store/{providers/memory → memory}/thread.store.d.ts +1 -1
  663. package/dist/types/store/noop.store.d.ts +2 -2
  664. package/dist/types/store/types.d.ts +250 -6
  665. package/dist/types/transport/WaComms.d.ts +5 -0
  666. package/dist/types/transport/WaWebSocket.d.ts +5 -0
  667. package/dist/types/transport/binary/constants.d.ts +8 -2
  668. package/dist/types/transport/binary/decoder.d.ts +5 -0
  669. package/dist/types/transport/binary/encoder.d.ts +5 -0
  670. package/dist/types/transport/binary/tokens.d.ts +6 -6
  671. package/dist/types/transport/index.d.ts +3 -1
  672. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +7 -0
  673. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +6 -0
  674. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +5 -0
  675. package/dist/types/transport/node/WaNodeTransport.d.ts +13 -0
  676. package/dist/types/transport/node/builders/account-sync.d.ts +1 -2
  677. package/dist/types/transport/node/builders/bot.d.ts +4 -0
  678. package/dist/types/transport/node/builders/business.d.ts +21 -4
  679. package/dist/types/transport/node/builders/chatstate.d.ts +11 -0
  680. package/dist/types/transport/node/builders/community.d.ts +17 -0
  681. package/dist/types/transport/node/builders/group.d.ts +44 -2
  682. package/dist/types/transport/node/builders/message.d.ts +11 -6
  683. package/dist/types/transport/node/builders/newsletter.d.ts +73 -0
  684. package/dist/types/transport/node/builders/passive.d.ts +3 -0
  685. package/dist/types/transport/node/builders/presence.d.ts +8 -1
  686. package/dist/types/transport/node/builders/profile.d.ts +3 -0
  687. package/dist/types/transport/node/builders/tos.d.ts +12 -0
  688. package/dist/types/transport/node/builders/usync.d.ts +16 -0
  689. package/dist/types/transport/node/helpers.d.ts +1 -2
  690. package/dist/types/transport/node/mex/client.d.ts +12 -1
  691. package/dist/types/transport/node/query.d.ts +19 -1
  692. package/dist/types/transport/node/usync.d.ts +3 -0
  693. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +5 -0
  694. package/dist/types/transport/noise/WaNoiseCert.d.ts +5 -0
  695. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +12 -6
  696. package/dist/types/transport/noise/WaNoiseSession.d.ts +0 -1
  697. package/dist/types/transport/noise/WaNoiseSocket.d.ts +12 -6
  698. package/dist/types/transport/noise/constants.d.ts +4 -5
  699. package/dist/types/transport/proxy.d.ts +5 -0
  700. package/dist/types/transport/types.d.ts +14 -7
  701. package/dist/types/transport/wa-web-version-fetcher.d.ts +44 -0
  702. package/dist/types/util/async.d.ts +4 -0
  703. package/dist/types/util/bytes.d.ts +36 -1
  704. package/dist/types/util/clock.d.ts +6 -0
  705. package/dist/types/util/coercion.d.ts +25 -0
  706. package/dist/types/util/collections.d.ts +8 -0
  707. package/dist/types/util/index.d.ts +2 -2
  708. package/dist/types/util/primitives.d.ts +11 -0
  709. package/dist/types/util/runtime.d.ts +5 -0
  710. package/dist/types/version-spec.d.ts +1 -0
  711. package/dist/util/async.js +4 -0
  712. package/dist/util/bytes.js +37 -2
  713. package/dist/util/clock.js +18 -0
  714. package/dist/util/coercion.js +48 -3
  715. package/dist/util/collections.js +12 -0
  716. package/dist/util/index.js +7 -1
  717. package/dist/util/primitives.js +20 -0
  718. package/dist/util/runtime.js +5 -0
  719. package/dist/version-spec.js +5 -0
  720. package/package.json +32 -8
  721. package/spec/appstate/index.d.ts +188 -0
  722. package/spec/appstate/index.js +850 -0
  723. package/spec/mex/index.d.ts +4172 -0
  724. package/spec/mex/index.js +261 -0
  725. package/spec/proto/index.d.ts +16305 -0
  726. package/spec/proto/index.js +1 -0
  727. package/spec/version/index.d.ts +4 -0
  728. package/spec/version/index.js +9 -0
  729. package/spec/version/version.json +3 -0
  730. package/dist/client/events/chat.js +0 -227
  731. package/dist/client/incoming.js +0 -306
  732. package/dist/client/mailbox.js +0 -66
  733. package/dist/client/messages.js +0 -305
  734. package/dist/esm/client/events/chat.js +0 -224
  735. package/dist/esm/client/incoming.js +0 -296
  736. package/dist/esm/client/mailbox.js +0 -63
  737. package/dist/esm/client/messages.js +0 -301
  738. package/dist/esm/media/WaMediaCrypto.js +0 -499
  739. package/dist/esm/message/phash.js +0 -47
  740. package/dist/esm/store/locks/participants.lock.js +0 -20
  741. package/dist/esm/store/providers/memory/contact.store.js +0 -28
  742. package/dist/esm/store/providers/memory/device-list.store.js +0 -67
  743. package/dist/esm/transport/node/mex/persist-ids.js +0 -10
  744. package/dist/media/WaMediaCrypto.js +0 -503
  745. package/dist/message/phash.js +0 -50
  746. package/dist/store/locks/participants.lock.js +0 -23
  747. package/dist/store/providers/memory/contact.store.js +0 -32
  748. package/dist/store/providers/memory/device-list.store.js +0 -71
  749. package/dist/transport/node/mex/persist-ids.js +0 -13
  750. package/dist/types/appstate/WaAppStateSyncClient.d.ts +0 -70
  751. package/dist/types/client/events/chat.d.ts +0 -3
  752. package/dist/types/client/history-sync.d.ts +0 -20
  753. package/dist/types/client/messages.d.ts +0 -18
  754. package/dist/types/client/messaging/participants.d.ts +0 -13
  755. package/dist/types/media/WaMediaCrypto.d.ts +0 -22
  756. package/dist/types/media/conn.d.ts +0 -3
  757. package/dist/types/message/content.d.ts +0 -14
  758. package/dist/types/message/incoming.d.ts +0 -18
  759. package/dist/types/signal/crypto/constants.d.ts +0 -4
  760. package/dist/types/store/contracts/participants.store.d.ts +0 -13
  761. package/dist/types/store/locks/participants.lock.d.ts +0 -2
  762. package/dist/types/store/providers/memory/participants.store.d.ts +0 -17
  763. package/dist/types/transport/node/mex/persist-ids.d.ts +0 -14
  764. package/proto/index.d.ts +0 -10903
  765. package/proto/index.js +0 -1
  766. /package/dist/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  767. /package/dist/esm/{store/contracts/participants.store.js → client/newsletter/types.js} +0 -0
  768. /package/dist/esm/message/{device-sent.js → encode/device-sent.js} +0 -0
  769. /package/dist/esm/signal/{crypto → attestation}/constants.js +0 -0
  770. /package/dist/esm/store/{providers/memory → memory}/signal.store.js +0 -0
  771. /package/dist/message/{device-sent.js → encode/device-sent.js} +0 -0
  772. /package/dist/signal/{crypto → attestation}/constants.js +0 -0
  773. /package/dist/store/{providers/memory → memory}/signal.store.js +0 -0
  774. /package/dist/types/message/{padding.d.ts → encode/padding.d.ts} +0 -0
@@ -11,9 +11,19 @@ export declare function bytesToHex(value: Uint8Array): string;
11
11
  * Decodes a hex string to a Uint8Array
12
12
  */
13
13
  export declare function hexToBytes(value: string): Uint8Array;
14
+ /** Encodes a Uint8Array to a standard padded base64 string. */
14
15
  export declare function bytesToBase64(value: Uint8Array): string;
16
+ /**
17
+ * Decodes a standard padded base64 string to a Uint8Array. Throws on invalid
18
+ * characters or a length that is not a multiple of 4.
19
+ */
15
20
  export declare function base64ToBytes(value: string): Uint8Array;
16
- export declare function base64ToBytesChecked(value: string, field: string, requireNonEmpty?: boolean): Uint8Array;
21
+ export declare function base64ToBytesChecked(value: string, field: string): Uint8Array;
22
+ /**
23
+ * Decodes a base64url-encoded value to a Uint8Array, restoring padding and
24
+ * the `+`/`/` alphabet first. Throws with a `missing ${field}` message when
25
+ * `value` is empty/undefined.
26
+ */
17
27
  export declare function decodeBase64Url(value: string | undefined, field: string): Uint8Array;
18
28
  export declare function assertByteLength(value: Uint8Array, expectedLength: number, errorMessage: string): void;
19
29
  export declare function decodeProtoBytes(value: Uint8Array | string | null | undefined, field: string): Uint8Array;
@@ -21,13 +31,38 @@ export declare function decodeProtoBytes(value: Uint8Array | string | null | und
21
31
  * Encodes a Uint8Array to a base64url string (URL-safe, no padding)
22
32
  */
23
33
  export declare function bytesToBase64UrlSafe(value: Uint8Array): string;
34
+ /** Concatenates an array of Uint8Arrays into a single new Uint8Array. */
24
35
  export declare function concatBytes(parts: readonly Uint8Array[]): Uint8Array;
36
+ /**
37
+ * Returns a zero-copy `Uint8Array` view over the input. Subclasses of
38
+ * `Uint8Array` (Node `Buffer`) are wrapped in a plain view; `ArrayBuffer`/
39
+ * `ArrayBufferView` get a view over their backing buffer. Use at system
40
+ * boundaries (WebCrypto / Node crypto / WebSocket results) – not on values
41
+ * that are already plain `Uint8Array`.
42
+ */
25
43
  export declare function toBytesView(value: Uint8Array | ArrayBuffer | ArrayBufferView): Uint8Array;
44
+ /**
45
+ * Normalizes an arbitrary stream chunk (string / Uint8Array / ArrayBuffer /
46
+ * ArrayBufferView) to a Uint8Array. Throws on unsupported types.
47
+ */
26
48
  export declare function toChunkBytes(chunk: unknown): Uint8Array;
49
+ /**
50
+ * Constant-time, JIT-resistant equality over `Uint8Array`s. Required for
51
+ * MAC/HMAC/signature comparisons (use {@link uint8Equal} for non-secret data).
52
+ */
27
53
  export declare function uint8TimingSafeEqual(left: Uint8Array, right: Uint8Array): boolean;
54
+ /**
55
+ * XOR-accumulated equality over `Uint8Array`s. Suitable for non-secret data
56
+ * (e.g. identity key match). Use {@link uint8TimingSafeEqual} for MAC checks.
57
+ */
28
58
  export declare function uint8Equal(a: Uint8Array, b: Uint8Array): boolean;
29
59
  export declare function removeAt<T>(items: readonly T[], index: number): T[];
30
60
  export declare function intToBytes(byteLength: number, value: number): Uint8Array;
61
+ /**
62
+ * Drains a Node `Readable` stream into a single Uint8Array. When
63
+ * `options.maxBytes` is set, the stream is destroyed and the promise rejects
64
+ * once the limit is exceeded.
65
+ */
31
66
  export declare function readAllBytes(stream: Readable, options?: {
32
67
  readonly maxBytes?: number;
33
68
  }): Promise<Uint8Array>;
@@ -0,0 +1,6 @@
1
+ export type GetClockSkewMs = () => number | null | undefined;
2
+ export interface ServerClock {
3
+ nowMs(): number;
4
+ nowSeconds(): number;
5
+ }
6
+ export declare function createServerClock(getClockSkewMs: GetClockSkewMs): ServerClock;
@@ -1,8 +1,33 @@
1
+ /**
2
+ * Coerces `value` to a safe-integer/finite number, accepting `number` and
3
+ * `bigint` inputs. Throws with a `${field}`-suffixed message on any other type.
4
+ */
1
5
  export declare function asNumber(value: unknown, field: string): number;
6
+ /** Optional variant of {@link asNumber}; returns `undefined` when input is nullish. */
2
7
  export declare function asOptionalNumber(value: unknown, field?: string): number | undefined;
8
+ /** Asserts that `value` is a string. Throws with a `${field}`-suffixed message otherwise. */
3
9
  export declare function asString(value: unknown, field: string): string;
10
+ /** Optional variant of {@link asString}; returns `undefined` when input is nullish. */
4
11
  export declare function asOptionalString(value: unknown, field?: string): string | undefined;
12
+ /**
13
+ * Coerces `value` to a Uint8Array view, accepting `Uint8Array`, `ArrayBuffer`,
14
+ * and any `ArrayBufferView`. Throws with a `${field}`-suffixed message otherwise.
15
+ */
5
16
  export declare function asBytes(value: unknown, field: string): Uint8Array;
17
+ /** Optional variant of {@link asBytes}; returns `undefined` when input is nullish. */
6
18
  export declare function asOptionalBytes(value: unknown, field?: string): Uint8Array | undefined;
19
+ /** Returns `undefined` when `value` is nullish, otherwise `Boolean(value)`. */
7
20
  export declare function toBoolOrUndef(value: unknown): boolean | undefined;
21
+ /**
22
+ * Returns `value` when it is a positive safe-integer, `fallback` when it is
23
+ * undefined, and throws otherwise.
24
+ */
8
25
  export declare function resolvePositive(value: number | undefined, fallback: number, name: string): number;
26
+ /**
27
+ * Lenient variants for parsing external JSON payloads (GraphQL responses,
28
+ * Mex notifications) where fields may be missing, empty, or arrive as the
29
+ * wrong primitive. Return null instead of throwing.
30
+ */
31
+ export declare function tryAsString(value: unknown): string | null;
32
+ export declare function tryAsNumber(value: unknown): number | null;
33
+ export declare function tryAsRecord(value: unknown): Readonly<Record<string, unknown>> | null;
@@ -1,3 +1,11 @@
1
1
  export declare function resolveCleanupIntervalMs(ttlMs: number, maxIntervalMs?: number): number;
2
+ export interface PeriodicCleanupHandle {
3
+ readonly destroy: () => void;
4
+ }
5
+ export declare function createPeriodicCleanup(ttlMs: number, run: () => void): PeriodicCleanupHandle;
6
+ /**
7
+ * Returns a validated positive-safe-integer query limit, falling back to
8
+ * `defaultLimit` when `limit` is undefined. Throws on invalid input.
9
+ */
2
10
  export declare function normalizeQueryLimit(limit: number | undefined, defaultLimit: number): number;
3
11
  export declare function setBoundedMapEntry<K, V>(map: Map<K, V>, key: K, value: V, maxEntries: number, onEvict?: (key: K, value: V) => void): void;
@@ -1,5 +1,5 @@
1
- export { bytesToHex, hexToBytes, toBytesView, uint8Equal } from './bytes';
1
+ export { base64ToBytes, bytesToBase64, bytesToBase64UrlSafe, bytesToHex, decodeBase64Url, hexToBytes, TEXT_DECODER, toBytesView, uint8Equal } from './bytes';
2
2
  export { asBytes, asNumber, asOptionalBytes, asOptionalNumber, asOptionalString, asString, resolvePositive, toBoolOrUndef } from './coercion';
3
3
  export { normalizeQueryLimit } from './collections';
4
- export { toSafeNumber } from './primitives';
4
+ export { toError, toSafeNumber } from './primitives';
5
5
  export { isBunRuntime } from './runtime';
@@ -1,4 +1,14 @@
1
+ /**
2
+ * Normalizes an unknown thrown value into an `Error` – `Error` instances are
3
+ * returned unchanged, strings/numbers are wrapped, and objects with `message`
4
+ * or `code` fields are mapped to readable messages. Use in `catch` blocks
5
+ * before logging.
6
+ */
1
7
  export declare function toError(value: unknown): Error;
8
+ /**
9
+ * Coerces a `number` or `{ toNumber() }` (protobufjs `Long`) to a finite
10
+ * safe-integer. Throws on missing/non-numeric/out-of-range inputs.
11
+ */
2
12
  export declare function toSafeNumber(value: number | {
3
13
  toNumber?: () => number;
4
14
  } | null | undefined, field: string): number;
@@ -7,3 +17,4 @@ export declare function longToNumber(value: number | {
7
17
  } | null | undefined): number;
8
18
  export declare function normalizeNonNegativeInteger(value: number | undefined, fallback: number): number;
9
19
  export declare function parseOptionalInt(value: string | undefined): number | undefined;
20
+ export declare function parseOptionalSignedInt(value: string | undefined): number | undefined;
@@ -1,2 +1,7 @@
1
+ /**
2
+ * Returns a human-friendly OS name (`Windows` / `Mac OS` / `Linux`) for the
3
+ * current process, falling back to `process.platform` for other OSes.
4
+ */
1
5
  export declare function getRuntimeOsDisplayName(): string;
6
+ /** Returns `true` when running under the Bun runtime. */
2
7
  export declare function isBunRuntime(): boolean;
@@ -0,0 +1 @@
1
+ export { WA_VERSION } from '../spec/version';
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.delay = delay;
4
+ /**
5
+ * Returns a Promise that resolves after `ms` milliseconds. Thin wrapper over
6
+ * `setTimeout` for use in `await` chains.
7
+ */
4
8
  function delay(ms) {
5
9
  return new Promise((resolve) => {
6
10
  setTimeout(resolve, ms);
@@ -82,9 +82,14 @@ function hexToBytes(value) {
82
82
  }
83
83
  return out;
84
84
  }
85
+ /** Encodes a Uint8Array to a standard padded base64 string. */
85
86
  function bytesToBase64(value) {
86
87
  return encodeBase64(value, BASE64_CHARS, true);
87
88
  }
89
+ /**
90
+ * Decodes a standard padded base64 string to a Uint8Array. Throws on invalid
91
+ * characters or a length that is not a multiple of 4.
92
+ */
88
93
  function base64ToBytes(value) {
89
94
  const len = value.length;
90
95
  if (len === 0)
@@ -124,12 +129,17 @@ function base64ToBytes(value) {
124
129
  }
125
130
  return out;
126
131
  }
127
- function base64ToBytesChecked(value, field, requireNonEmpty = true) {
128
- if (requireNonEmpty && value.length === 0) {
132
+ function base64ToBytesChecked(value, field) {
133
+ if (value.length === 0) {
129
134
  throw new Error(`invalid base64 payload for ${field}`);
130
135
  }
131
136
  return base64ToBytes(value);
132
137
  }
138
+ /**
139
+ * Decodes a base64url-encoded value to a Uint8Array, restoring padding and
140
+ * the `+`/`/` alphabet first. Throws with a `missing ${field}` message when
141
+ * `value` is empty/undefined.
142
+ */
133
143
  function decodeBase64Url(value, field) {
134
144
  if (!value) {
135
145
  throw new Error(`missing ${field}`);
@@ -209,6 +219,7 @@ function encodeBase64(value, alphabet, pad) {
209
219
  }
210
220
  return out.join('');
211
221
  }
222
+ /** Concatenates an array of Uint8Arrays into a single new Uint8Array. */
212
223
  function concatBytes(parts) {
213
224
  let total = 0;
214
225
  for (let i = 0; i < parts.length; i += 1) {
@@ -222,6 +233,13 @@ function concatBytes(parts) {
222
233
  }
223
234
  return out;
224
235
  }
236
+ /**
237
+ * Returns a zero-copy `Uint8Array` view over the input. Subclasses of
238
+ * `Uint8Array` (Node `Buffer`) are wrapped in a plain view; `ArrayBuffer`/
239
+ * `ArrayBufferView` get a view over their backing buffer. Use at system
240
+ * boundaries (WebCrypto / Node crypto / WebSocket results) – not on values
241
+ * that are already plain `Uint8Array`.
242
+ */
225
243
  function toBytesView(value) {
226
244
  if (value instanceof Uint8Array) {
227
245
  return value.constructor === Uint8Array
@@ -233,6 +251,10 @@ function toBytesView(value) {
233
251
  }
234
252
  return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
235
253
  }
254
+ /**
255
+ * Normalizes an arbitrary stream chunk (string / Uint8Array / ArrayBuffer /
256
+ * ArrayBufferView) to a Uint8Array. Throws on unsupported types.
257
+ */
236
258
  function toChunkBytes(chunk) {
237
259
  if (typeof chunk === 'string') {
238
260
  return exports.TEXT_ENCODER.encode(chunk);
@@ -242,12 +264,20 @@ function toChunkBytes(chunk) {
242
264
  }
243
265
  throw new Error(`unsupported stream chunk type: ${typeof chunk}`);
244
266
  }
267
+ /**
268
+ * Constant-time, JIT-resistant equality over `Uint8Array`s. Required for
269
+ * MAC/HMAC/signature comparisons (use {@link uint8Equal} for non-secret data).
270
+ */
245
271
  function uint8TimingSafeEqual(left, right) {
246
272
  if (left.byteLength !== right.byteLength) {
247
273
  return false;
248
274
  }
249
275
  return (0, node_crypto_1.timingSafeEqual)(left, right);
250
276
  }
277
+ /**
278
+ * XOR-accumulated equality over `Uint8Array`s. Suitable for non-secret data
279
+ * (e.g. identity key match). Use {@link uint8TimingSafeEqual} for MAC checks.
280
+ */
251
281
  function uint8Equal(a, b) {
252
282
  if (a.length !== b.length) {
253
283
  return false;
@@ -290,6 +320,11 @@ function intToBytes(byteLength, value) {
290
320
  }
291
321
  return out;
292
322
  }
323
+ /**
324
+ * Drains a Node `Readable` stream into a single Uint8Array. When
325
+ * `options.maxBytes` is set, the stream is destroyed and the promise rejects
326
+ * once the limit is exceeded.
327
+ */
293
328
  async function readAllBytes(stream, options = {}) {
294
329
  const maxBytes = options.maxBytes;
295
330
  if (maxBytes !== undefined && (!Number.isSafeInteger(maxBytes) || maxBytes < 0)) {
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServerClock = createServerClock;
4
+ function createServerClock(getClockSkewMs) {
5
+ return {
6
+ nowMs() {
7
+ const skewMs = getClockSkewMs();
8
+ const nowMs = Date.now();
9
+ return Number.isFinite(skewMs) ? nowMs + skewMs : nowMs;
10
+ },
11
+ nowSeconds() {
12
+ const skewMs = getClockSkewMs();
13
+ const nowMs = Date.now();
14
+ const correctedMs = Number.isFinite(skewMs) ? nowMs + skewMs : nowMs;
15
+ return Math.floor(correctedMs / 1000);
16
+ }
17
+ };
18
+ }
@@ -8,47 +8,67 @@ exports.asBytes = asBytes;
8
8
  exports.asOptionalBytes = asOptionalBytes;
9
9
  exports.toBoolOrUndef = toBoolOrUndef;
10
10
  exports.resolvePositive = resolvePositive;
11
+ exports.tryAsString = tryAsString;
12
+ exports.tryAsNumber = tryAsNumber;
13
+ exports.tryAsRecord = tryAsRecord;
11
14
  const bytes_1 = require("./bytes");
12
15
  const primitives_1 = require("./primitives");
16
+ /**
17
+ * Coerces `value` to a safe-integer/finite number, accepting `number` and
18
+ * `bigint` inputs. Throws with a `${field}`-suffixed message on any other type.
19
+ */
13
20
  function asNumber(value, field) {
14
- if (typeof value === 'bigint') {
15
- return (0, primitives_1.toSafeNumber)(Number(value), field);
16
- }
17
21
  if (typeof value === 'number') {
18
22
  return (0, primitives_1.toSafeNumber)(value, field);
19
23
  }
24
+ if (typeof value === 'bigint') {
25
+ return (0, primitives_1.toSafeNumber)(Number(value), field);
26
+ }
20
27
  throw new Error(`invalid number value for ${field}`);
21
28
  }
29
+ /** Optional variant of {@link asNumber}; returns `undefined` when input is nullish. */
22
30
  function asOptionalNumber(value, field = 'optional number') {
23
31
  if (value === null || value === undefined)
24
32
  return undefined;
25
33
  return asNumber(value, field);
26
34
  }
35
+ /** Asserts that `value` is a string. Throws with a `${field}`-suffixed message otherwise. */
27
36
  function asString(value, field) {
28
37
  if (typeof value === 'string') {
29
38
  return value;
30
39
  }
31
40
  throw new Error(`invalid string value for ${field}`);
32
41
  }
42
+ /** Optional variant of {@link asString}; returns `undefined` when input is nullish. */
33
43
  function asOptionalString(value, field = 'optional string') {
34
44
  if (value === null || value === undefined)
35
45
  return undefined;
36
46
  return asString(value, field);
37
47
  }
48
+ /**
49
+ * Coerces `value` to a Uint8Array view, accepting `Uint8Array`, `ArrayBuffer`,
50
+ * and any `ArrayBufferView`. Throws with a `${field}`-suffixed message otherwise.
51
+ */
38
52
  function asBytes(value, field) {
39
53
  if (value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {
40
54
  return (0, bytes_1.toBytesView)(value);
41
55
  }
42
56
  throw new Error(`invalid bytes value for ${field}`);
43
57
  }
58
+ /** Optional variant of {@link asBytes}; returns `undefined` when input is nullish. */
44
59
  function asOptionalBytes(value, field = 'optional bytes') {
45
60
  if (value === null || value === undefined)
46
61
  return undefined;
47
62
  return asBytes(value, field);
48
63
  }
64
+ /** Returns `undefined` when `value` is nullish, otherwise `Boolean(value)`. */
49
65
  function toBoolOrUndef(value) {
50
66
  return value === null || value === undefined ? undefined : Boolean(value);
51
67
  }
68
+ /**
69
+ * Returns `value` when it is a positive safe-integer, `fallback` when it is
70
+ * undefined, and throws otherwise.
71
+ */
52
72
  function resolvePositive(value, fallback, name) {
53
73
  if (value === undefined)
54
74
  return fallback;
@@ -56,3 +76,28 @@ function resolvePositive(value, fallback, name) {
56
76
  return value;
57
77
  throw new Error(`${name} must be a positive safe integer`);
58
78
  }
79
+ /**
80
+ * Lenient variants for parsing external JSON payloads (GraphQL responses,
81
+ * Mex notifications) where fields may be missing, empty, or arrive as the
82
+ * wrong primitive. Return null instead of throwing.
83
+ */
84
+ function tryAsString(value) {
85
+ return typeof value === 'string' && value.length > 0 ? value : null;
86
+ }
87
+ function tryAsNumber(value) {
88
+ if (typeof value === 'number' && Number.isFinite(value))
89
+ return value;
90
+ if (typeof value === 'string') {
91
+ const normalized = value.trim();
92
+ if (normalized.length === 0)
93
+ return null;
94
+ const parsed = Number(normalized);
95
+ return Number.isFinite(parsed) ? parsed : null;
96
+ }
97
+ return null;
98
+ }
99
+ function tryAsRecord(value) {
100
+ return value !== null && typeof value === 'object' && !Array.isArray(value)
101
+ ? value
102
+ : null;
103
+ }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveCleanupIntervalMs = resolveCleanupIntervalMs;
4
+ exports.createPeriodicCleanup = createPeriodicCleanup;
4
5
  exports.normalizeQueryLimit = normalizeQueryLimit;
5
6
  exports.setBoundedMapEntry = setBoundedMapEntry;
6
7
  function resolveCleanupIntervalMs(ttlMs, maxIntervalMs = 60000) {
@@ -9,6 +10,17 @@ function resolveCleanupIntervalMs(ttlMs, maxIntervalMs = 60000) {
9
10
  }
10
11
  return Math.min(maxIntervalMs, Math.floor(ttlMs / 2));
11
12
  }
13
+ function createPeriodicCleanup(ttlMs, run) {
14
+ const timer = setInterval(run, resolveCleanupIntervalMs(ttlMs));
15
+ timer.unref?.();
16
+ return {
17
+ destroy: () => clearInterval(timer)
18
+ };
19
+ }
20
+ /**
21
+ * Returns a validated positive-safe-integer query limit, falling back to
22
+ * `defaultLimit` when `limit` is undefined. Throws on invalid input.
23
+ */
12
24
  function normalizeQueryLimit(limit, defaultLimit) {
13
25
  if (limit === undefined) {
14
26
  return defaultLimit;
@@ -1,9 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isBunRuntime = exports.toSafeNumber = exports.normalizeQueryLimit = exports.toBoolOrUndef = exports.resolvePositive = exports.asString = exports.asOptionalString = exports.asOptionalNumber = exports.asOptionalBytes = exports.asNumber = exports.asBytes = exports.uint8Equal = exports.toBytesView = exports.hexToBytes = exports.bytesToHex = void 0;
3
+ exports.isBunRuntime = exports.toSafeNumber = exports.toError = exports.normalizeQueryLimit = exports.toBoolOrUndef = exports.resolvePositive = exports.asString = exports.asOptionalString = exports.asOptionalNumber = exports.asOptionalBytes = exports.asNumber = exports.asBytes = exports.uint8Equal = exports.toBytesView = exports.TEXT_DECODER = exports.hexToBytes = exports.decodeBase64Url = exports.bytesToHex = exports.bytesToBase64UrlSafe = exports.bytesToBase64 = exports.base64ToBytes = void 0;
4
4
  var bytes_1 = require("./bytes");
5
+ Object.defineProperty(exports, "base64ToBytes", { enumerable: true, get: function () { return bytes_1.base64ToBytes; } });
6
+ Object.defineProperty(exports, "bytesToBase64", { enumerable: true, get: function () { return bytes_1.bytesToBase64; } });
7
+ Object.defineProperty(exports, "bytesToBase64UrlSafe", { enumerable: true, get: function () { return bytes_1.bytesToBase64UrlSafe; } });
5
8
  Object.defineProperty(exports, "bytesToHex", { enumerable: true, get: function () { return bytes_1.bytesToHex; } });
9
+ Object.defineProperty(exports, "decodeBase64Url", { enumerable: true, get: function () { return bytes_1.decodeBase64Url; } });
6
10
  Object.defineProperty(exports, "hexToBytes", { enumerable: true, get: function () { return bytes_1.hexToBytes; } });
11
+ Object.defineProperty(exports, "TEXT_DECODER", { enumerable: true, get: function () { return bytes_1.TEXT_DECODER; } });
7
12
  Object.defineProperty(exports, "toBytesView", { enumerable: true, get: function () { return bytes_1.toBytesView; } });
8
13
  Object.defineProperty(exports, "uint8Equal", { enumerable: true, get: function () { return bytes_1.uint8Equal; } });
9
14
  var coercion_1 = require("./coercion");
@@ -18,6 +23,7 @@ Object.defineProperty(exports, "toBoolOrUndef", { enumerable: true, get: functio
18
23
  var collections_1 = require("./collections");
19
24
  Object.defineProperty(exports, "normalizeQueryLimit", { enumerable: true, get: function () { return collections_1.normalizeQueryLimit; } });
20
25
  var primitives_1 = require("./primitives");
26
+ Object.defineProperty(exports, "toError", { enumerable: true, get: function () { return primitives_1.toError; } });
21
27
  Object.defineProperty(exports, "toSafeNumber", { enumerable: true, get: function () { return primitives_1.toSafeNumber; } });
22
28
  var runtime_1 = require("./runtime");
23
29
  Object.defineProperty(exports, "isBunRuntime", { enumerable: true, get: function () { return runtime_1.isBunRuntime; } });
@@ -5,7 +5,15 @@ exports.toSafeNumber = toSafeNumber;
5
5
  exports.longToNumber = longToNumber;
6
6
  exports.normalizeNonNegativeInteger = normalizeNonNegativeInteger;
7
7
  exports.parseOptionalInt = parseOptionalInt;
8
+ exports.parseOptionalSignedInt = parseOptionalSignedInt;
8
9
  const DIGITS_ONLY_RE = /^\d+$/;
10
+ const SIGNED_DIGITS_RE = /^-?\d+$/;
11
+ /**
12
+ * Normalizes an unknown thrown value into an `Error` – `Error` instances are
13
+ * returned unchanged, strings/numbers are wrapped, and objects with `message`
14
+ * or `code` fields are mapped to readable messages. Use in `catch` blocks
15
+ * before logging.
16
+ */
9
17
  function toError(value) {
10
18
  if (value instanceof Error)
11
19
  return value;
@@ -32,6 +40,10 @@ function assertSafeInteger(value, field, nullishBehavior) {
32
40
  const prefix = nullishBehavior === 'throw' ? `invalid ${field}` : 'invalid long numeric value';
33
41
  throw new Error(`${prefix}: ${value}`);
34
42
  }
43
+ /**
44
+ * Coerces a `number` or `{ toNumber() }` (protobufjs `Long`) to a finite
45
+ * safe-integer. Throws on missing/non-numeric/out-of-range inputs.
46
+ */
35
47
  function toSafeNumber(value, field) {
36
48
  if (value === null || value === undefined)
37
49
  throw new Error(`missing ${field}`);
@@ -63,3 +75,11 @@ function parseOptionalInt(value) {
63
75
  return undefined;
64
76
  return parseStrictUnsignedInt(value);
65
77
  }
78
+ function parseOptionalSignedInt(value) {
79
+ if (!value)
80
+ return undefined;
81
+ if (!SIGNED_DIGITS_RE.test(value))
82
+ return undefined;
83
+ const parsed = Number(value);
84
+ return Number.isSafeInteger(parsed) ? parsed : undefined;
85
+ }
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRuntimeOsDisplayName = getRuntimeOsDisplayName;
4
4
  exports.isBunRuntime = isBunRuntime;
5
+ /**
6
+ * Returns a human-friendly OS name (`Windows` / `Mac OS` / `Linux`) for the
7
+ * current process, falling back to `process.platform` for other OSes.
8
+ */
5
9
  function getRuntimeOsDisplayName() {
6
10
  switch (process.platform) {
7
11
  case 'win32':
@@ -14,6 +18,7 @@ function getRuntimeOsDisplayName() {
14
18
  return process.platform;
15
19
  }
16
20
  }
21
+ /** Returns `true` when running under the Bun runtime. */
17
22
  function isBunRuntime() {
18
23
  return typeof globalThis.Bun !== 'undefined';
19
24
  }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WA_VERSION = void 0;
4
+ var version_1 = require("../spec/version");
5
+ Object.defineProperty(exports, "WA_VERSION", { enumerable: true, get: function () { return version_1.WA_VERSION; } });
package/package.json CHANGED
@@ -1,7 +1,9 @@
1
1
  {
2
2
  "name": "zapo-js",
3
- "version": "0.3.0",
3
+ "version": "1.0.0",
4
4
  "description": "High-performance WhatsApp Web TypeScript library",
5
+ "license": "MIT",
6
+ "author": "vinikjkkj <contact@vinicius.email> (https://github.com/vinikjkkj)",
5
7
  "funding": {
6
8
  "type": "github",
7
9
  "url": "https://github.com/sponsors/vinikjkkj"
@@ -99,8 +101,15 @@
99
101
  },
100
102
  "files": [
101
103
  "dist",
102
- "proto/index.js",
103
- "proto/index.d.ts",
104
+ "spec/proto/index.js",
105
+ "spec/proto/index.d.ts",
106
+ "spec/mex/index.js",
107
+ "spec/mex/index.d.ts",
108
+ "spec/appstate/index.js",
109
+ "spec/appstate/index.d.ts",
110
+ "spec/version/version.json",
111
+ "spec/version/index.js",
112
+ "spec/version/index.d.ts",
104
113
  "scripts/check-node-version.cjs"
105
114
  ],
106
115
  "workspaces": [
@@ -111,6 +120,7 @@
111
120
  },
112
121
  "scripts": {
113
122
  "preinstall": "node ./scripts/check-node-version.cjs",
123
+ "prepack": "npm run build",
114
124
  "changeset": "changeset",
115
125
  "changeset:status": "changeset status --verbose",
116
126
  "version:packages": "changeset version",
@@ -119,7 +129,7 @@
119
129
  "build:cjs": "tsc -p tsconfig.build.cjs.json && tsc-alias -p tsconfig.build.cjs.json",
120
130
  "build:esm": "tsc -p tsconfig.build.esm.json && tsc-alias -p tsconfig.build.esm.json",
121
131
  "build:types": "tsc -p tsconfig.build.types.json && tsc-alias -p tsconfig.build.types.json",
122
- "build:esm:finalize": "node ./scripts/finalize-esm-build.cjs",
132
+ "build:esm:finalize": "node ./scripts/finalize-esm-build.cjs --proto-bridge",
123
133
  "build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:types && npm run build:esm:finalize",
124
134
  "build:packages": "turbo run build",
125
135
  "proto:generate": "node ./scripts/generate-proto.cjs",
@@ -140,7 +150,10 @@
140
150
  "test:coverage": "npm run test:structure && c8 --all --include \"src/**/*.ts\" --exclude \"src/**/*.d.ts\" --exclude \"src/**/__tests__/**\" --exclude \"src/**/types.ts\" --exclude \"src/store/contracts/**/*.ts\" --reporter text --reporter html --reporter lcov node --import tsx --test --test-skip-pattern \"\\\\[flow\\\\]\" \"src/**/__tests__/**/*.test.ts\"",
141
151
  "test:coverage:open": "node -e \"require('node:child_process').execSync(process.platform === 'win32' ? 'start coverage\\\\index.html' : process.platform === 'darwin' ? 'open coverage/index.html' : 'xdg-open coverage/index.html', { stdio: 'inherit' })\"",
142
152
  "typecheck": "tsc -p tsconfig.json --noEmit",
153
+ "typecheck:examples": "tsc -p examples/tsconfig.json",
154
+ "typecheck:bench": "tsc -p bench/tsconfig.json",
143
155
  "typecheck:packages": "turbo run typecheck",
156
+ "typecheck:all": "npm run typecheck && npm run typecheck:examples && npm run typecheck:bench && npm run typecheck:packages",
144
157
  "lint": "eslint . --ext .ts,.js,.cjs",
145
158
  "lint:fix": "eslint . --ext .ts,.js,.cjs --fix",
146
159
  "format": "prettier . --write",
@@ -150,7 +163,7 @@
150
163
  "argo-codec": "^0.2.1",
151
164
  "pino": "^9.0.0",
152
165
  "pino-pretty": "^13.0.0",
153
- "ws": "^8.18.3"
166
+ "ws": "^8.20.1"
154
167
  },
155
168
  "peerDependenciesMeta": {
156
169
  "argo-codec": {
@@ -171,7 +184,7 @@
171
184
  "@types/node": "^22.13.14",
172
185
  "@types/ws": "^8.18.1",
173
186
  "@typescript-eslint/parser": "^8.56.1",
174
- "@vinikjkkj/eslint-config": "^1.0.0",
187
+ "@vinikjkkj/eslint-config": "1.0.2",
175
188
  "argo-codec": "^0.2.1",
176
189
  "better-sqlite3": "^12.6.2",
177
190
  "c8": "^11.0.0",
@@ -184,9 +197,20 @@
184
197
  "prettier": "^3.8.1",
185
198
  "tsc-alias": "^1.8.16",
186
199
  "tsx": "^4.20.6",
187
- "turbo": "^2.8.20",
200
+ "turbo": "^2.9.14",
188
201
  "typescript": "^5.7.3",
189
202
  "typescript-eslint": "^8.56.1",
190
- "ws": "^8.18.3"
203
+ "ws": "^8.20.1"
204
+ },
205
+ "overrides": {
206
+ "ws": "^8.20.1",
207
+ "qs": "6.15.2",
208
+ "flatted": "^3.4.2",
209
+ "picomatch@<2.3.2": "2.3.2",
210
+ "picomatch@4": "^4.0.4",
211
+ "brace-expansion@1": "1.1.13",
212
+ "brace-expansion@2": "^2.0.3",
213
+ "brace-expansion@4": "^4.0.2",
214
+ "brace-expansion@5": "^5.0.6"
191
215
  }
192
216
  }