zapo-js 0.1.1 → 0.1.2

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 (363) hide show
  1. package/README.md +8 -0
  2. package/dist/appstate/WaAppStateCrypto.js +18 -25
  3. package/dist/appstate/WaAppStateSyncClient.js +181 -114
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/utils.js +10 -30
  7. package/dist/auth/WaAuthClient.js +48 -55
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
  9. package/dist/auth/index.js +1 -3
  10. package/dist/auth/pairing/WaPairingFlow.js +21 -23
  11. package/dist/auth/pairing/WaQrFlow.js +37 -24
  12. package/dist/client/WaClient.js +103 -276
  13. package/dist/client/WaClientFactory.js +227 -110
  14. package/dist/client/connection/WaConnectionManager.js +292 -0
  15. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  16. package/dist/client/connection/WaReceiptQueue.js +51 -0
  17. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +27 -17
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
  21. package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
  22. package/dist/client/dirty.js +35 -29
  23. package/dist/client/events/chat.js +4 -3
  24. package/dist/client/events/group.js +59 -36
  25. package/dist/client/history-sync.js +53 -63
  26. package/dist/client/incoming.js +23 -20
  27. package/dist/client/mailbox.js +8 -8
  28. package/dist/client/messages.js +4 -4
  29. package/dist/client/messaging/fanout.js +189 -0
  30. package/dist/client/messaging/key-protocol.js +130 -0
  31. package/dist/client/messaging/participants.js +191 -0
  32. package/dist/crypto/core/hkdf.js +3 -8
  33. package/dist/crypto/core/index.js +1 -4
  34. package/dist/crypto/core/keys.js +2 -3
  35. package/dist/crypto/core/primitives.js +12 -15
  36. package/dist/crypto/core/random.js +7 -26
  37. package/dist/crypto/curves/Ed25519.js +7 -8
  38. package/dist/crypto/curves/X25519.js +13 -16
  39. package/dist/crypto/index.js +0 -5
  40. package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
  41. package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
  42. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  43. package/dist/esm/appstate/constants.js +3 -2
  44. package/dist/esm/appstate/utils.js +8 -27
  45. package/dist/esm/auth/WaAuthClient.js +48 -55
  46. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
  47. package/dist/esm/auth/index.js +0 -1
  48. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
  49. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  50. package/dist/esm/client/WaClient.js +103 -276
  51. package/dist/esm/client/WaClientFactory.js +227 -110
  52. package/dist/esm/client/connection/WaConnectionManager.js +288 -0
  53. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  54. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  55. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  56. package/dist/esm/client/coordinators/WaGroupCoordinator.js +20 -10
  57. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  58. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
  59. package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
  60. package/dist/esm/client/dirty.js +30 -24
  61. package/dist/esm/client/events/chat.js +4 -3
  62. package/dist/esm/client/events/group.js +50 -28
  63. package/dist/esm/client/history-sync.js +50 -60
  64. package/dist/esm/client/incoming.js +23 -20
  65. package/dist/esm/client/mailbox.js +8 -8
  66. package/dist/esm/client/messages.js +1 -1
  67. package/dist/esm/client/messaging/fanout.js +186 -0
  68. package/dist/esm/client/messaging/key-protocol.js +127 -0
  69. package/dist/esm/client/messaging/participants.js +188 -0
  70. package/dist/esm/crypto/core/hkdf.js +3 -8
  71. package/dist/esm/crypto/core/index.js +0 -1
  72. package/dist/esm/crypto/core/keys.js +2 -3
  73. package/dist/esm/crypto/core/primitives.js +12 -15
  74. package/dist/esm/crypto/core/random.js +6 -25
  75. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  76. package/dist/esm/crypto/curves/X25519.js +10 -13
  77. package/dist/esm/crypto/index.js +0 -2
  78. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  79. package/dist/esm/infra/log/PinoLogger.js +15 -9
  80. package/dist/esm/infra/log/types.js +11 -1
  81. package/dist/esm/infra/perf/BoundedTaskQueue.js +13 -17
  82. package/dist/esm/media/WaMediaCrypto.js +2 -4
  83. package/dist/esm/media/WaMediaTransferClient.js +226 -58
  84. package/dist/esm/media/conn.js +10 -6
  85. package/dist/esm/media/constants.js +4 -1
  86. package/dist/esm/message/WaMessageClient.js +4 -13
  87. package/dist/esm/message/ack.js +6 -6
  88. package/dist/esm/message/addon-crypto.js +59 -0
  89. package/dist/esm/message/incoming.js +106 -111
  90. package/dist/esm/message/index.js +2 -0
  91. package/dist/esm/message/reporting-token.js +438 -0
  92. package/dist/esm/message/use-case-secret.js +49 -0
  93. package/dist/esm/protocol/appstate.js +58 -0
  94. package/dist/esm/protocol/constants.js +2 -1
  95. package/dist/esm/protocol/index.js +2 -10
  96. package/dist/esm/protocol/jid.js +63 -51
  97. package/dist/esm/protocol/media.js +3 -3
  98. package/dist/esm/protocol/nodes.js +2 -0
  99. package/dist/esm/protocol/usync.js +11 -0
  100. package/dist/esm/retry/index.js +1 -0
  101. package/dist/esm/retry/outbound.js +4 -5
  102. package/dist/esm/retry/parse.js +58 -76
  103. package/dist/esm/retry/replay.js +48 -49
  104. package/dist/esm/retry/tracker.js +56 -0
  105. package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
  106. package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
  107. package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
  108. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
  109. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
  110. package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
  111. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  112. package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
  113. package/dist/esm/signal/group/SenderKeyManager.js +26 -16
  114. package/dist/esm/signal/index.js +1 -0
  115. package/dist/esm/signal/session/SignalProtocol.js +49 -14
  116. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  117. package/dist/esm/signal/session/SignalSession.js +14 -9
  118. package/dist/esm/signal/session/resolver.js +186 -0
  119. package/dist/esm/signal/store/sqlite.js +16 -37
  120. package/dist/esm/store/createStore.js +16 -18
  121. package/dist/esm/store/noop.store.js +3 -6
  122. package/dist/esm/store/providers/memory/appstate.store.js +30 -6
  123. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  124. package/dist/esm/store/providers/memory/device-list.store.js +3 -30
  125. package/dist/esm/store/providers/memory/message.store.js +11 -5
  126. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  127. package/dist/esm/store/providers/memory/sender-key.store.js +5 -7
  128. package/dist/esm/store/providers/memory/signal.store.js +13 -1
  129. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  130. package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
  131. package/dist/esm/store/providers/sqlite/connection.js +18 -13
  132. package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
  133. package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
  134. package/dist/esm/store/providers/sqlite/message.store.js +45 -32
  135. package/dist/esm/store/providers/sqlite/migrations.js +1 -1
  136. package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
  137. package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
  138. package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
  139. package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
  140. package/dist/esm/store/providers/sqlite/table-names.js +107 -0
  141. package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
  142. package/dist/esm/transport/WaComms.js +25 -23
  143. package/dist/esm/transport/WaWebSocket.js +115 -12
  144. package/dist/esm/transport/binary/decoder.js +4 -4
  145. package/dist/esm/transport/binary/encoder.js +12 -4
  146. package/dist/esm/transport/index.js +1 -0
  147. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  148. package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
  149. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  150. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  151. package/dist/esm/transport/node/builders/index.js +2 -1
  152. package/dist/esm/transport/node/builders/message.js +9 -0
  153. package/dist/esm/transport/node/builders/pairing.js +4 -5
  154. package/dist/esm/transport/node/builders/usync.js +41 -0
  155. package/dist/esm/transport/node/helpers.js +107 -5
  156. package/dist/esm/transport/node/usync.js +35 -0
  157. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  158. package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
  159. package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
  160. package/dist/esm/transport/proxy.js +27 -0
  161. package/dist/esm/transport/stream/parse.js +13 -48
  162. package/dist/esm/util/bytes.js +50 -32
  163. package/dist/esm/util/coercion.js +6 -14
  164. package/dist/esm/util/primitives.js +39 -14
  165. package/dist/infra/log/ConsoleLogger.js +18 -17
  166. package/dist/infra/log/PinoLogger.js +15 -9
  167. package/dist/infra/log/types.js +12 -0
  168. package/dist/infra/perf/BoundedTaskQueue.js +13 -17
  169. package/dist/media/WaMediaCrypto.js +1 -3
  170. package/dist/media/WaMediaTransferClient.js +259 -58
  171. package/dist/media/conn.js +10 -6
  172. package/dist/media/constants.js +4 -1
  173. package/dist/message/WaMessageClient.js +5 -14
  174. package/dist/message/ack.js +6 -6
  175. package/dist/message/addon-crypto.js +65 -0
  176. package/dist/message/incoming.js +104 -109
  177. package/dist/message/index.js +2 -0
  178. package/dist/message/reporting-token.js +443 -0
  179. package/dist/message/use-case-secret.js +55 -0
  180. package/dist/protocol/appstate.js +59 -1
  181. package/dist/protocol/constants.js +7 -1
  182. package/dist/protocol/index.js +20 -42
  183. package/dist/protocol/jid.js +64 -51
  184. package/dist/protocol/media.js +3 -3
  185. package/dist/protocol/nodes.js +2 -0
  186. package/dist/protocol/usync.js +14 -0
  187. package/dist/retry/index.js +3 -1
  188. package/dist/retry/outbound.js +6 -7
  189. package/dist/retry/parse.js +57 -75
  190. package/dist/retry/replay.js +46 -47
  191. package/dist/retry/tracker.js +59 -0
  192. package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
  193. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  194. package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
  195. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
  196. package/dist/signal/api/SignalSessionSyncApi.js +23 -30
  197. package/dist/signal/crypto/WaAdvSignature.js +2 -4
  198. package/dist/signal/group/SenderKeyChain.js +27 -22
  199. package/dist/signal/group/SenderKeyCodec.js +1 -3
  200. package/dist/signal/group/SenderKeyManager.js +26 -16
  201. package/dist/signal/index.js +3 -1
  202. package/dist/signal/session/SignalProtocol.js +49 -14
  203. package/dist/signal/session/SignalRatchet.js +24 -15
  204. package/dist/signal/session/SignalSession.js +14 -9
  205. package/dist/signal/session/resolver.js +189 -0
  206. package/dist/signal/store/sqlite.js +16 -37
  207. package/dist/store/createStore.js +16 -18
  208. package/dist/store/noop.store.js +3 -6
  209. package/dist/store/providers/memory/appstate.store.js +28 -4
  210. package/dist/store/providers/memory/contact.store.js +5 -0
  211. package/dist/store/providers/memory/device-list.store.js +3 -30
  212. package/dist/store/providers/memory/message.store.js +11 -5
  213. package/dist/store/providers/memory/participants.store.js +1 -8
  214. package/dist/store/providers/memory/sender-key.store.js +8 -10
  215. package/dist/store/providers/memory/signal.store.js +21 -9
  216. package/dist/store/providers/memory/thread.store.js +5 -0
  217. package/dist/store/providers/sqlite/appstate.store.js +81 -0
  218. package/dist/store/providers/sqlite/connection.js +18 -13
  219. package/dist/store/providers/sqlite/contact.store.js +31 -18
  220. package/dist/store/providers/sqlite/device-list.store.js +7 -35
  221. package/dist/store/providers/sqlite/message.store.js +45 -32
  222. package/dist/store/providers/sqlite/migrations.js +1 -1
  223. package/dist/store/providers/sqlite/participants.store.js +1 -9
  224. package/dist/store/providers/sqlite/retry.store.js +8 -11
  225. package/dist/store/providers/sqlite/sender-key.store.js +24 -29
  226. package/dist/store/providers/sqlite/signal.store.js +105 -23
  227. package/dist/store/providers/sqlite/table-names.js +113 -0
  228. package/dist/store/providers/sqlite/thread.store.js +35 -22
  229. package/dist/transport/WaComms.js +27 -25
  230. package/dist/transport/WaWebSocket.js +148 -12
  231. package/dist/transport/binary/decoder.js +4 -4
  232. package/dist/transport/binary/encoder.js +12 -4
  233. package/dist/transport/index.js +7 -1
  234. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  235. package/dist/transport/node/WaNodeOrchestrator.js +2 -4
  236. package/dist/transport/node/WaNodeTransport.js +0 -3
  237. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  238. package/dist/transport/node/builders/index.js +12 -9
  239. package/dist/transport/node/builders/message.js +9 -0
  240. package/dist/transport/node/builders/pairing.js +4 -5
  241. package/dist/transport/node/builders/usync.js +45 -0
  242. package/dist/transport/node/helpers.js +112 -4
  243. package/dist/transport/node/usync.js +38 -0
  244. package/dist/transport/noise/WaFrameCodec.js +47 -32
  245. package/dist/transport/noise/WaNoiseCert.js +5 -8
  246. package/dist/transport/noise/WaNoiseSession.js +17 -10
  247. package/dist/transport/proxy.js +34 -0
  248. package/dist/transport/stream/parse.js +17 -53
  249. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  250. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  251. package/dist/types/appstate/constants.d.ts +1 -0
  252. package/dist/types/appstate/store/sqlite.d.ts +4 -18
  253. package/dist/types/appstate/utils.d.ts +0 -1
  254. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  255. package/dist/types/auth/index.d.ts +0 -2
  256. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  257. package/dist/types/auth/types.d.ts +6 -9
  258. package/dist/types/client/WaClient.d.ts +27 -25
  259. package/dist/types/client/WaClientFactory.d.ts +22 -23
  260. package/dist/types/client/connection/WaConnectionManager.d.ts +64 -0
  261. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  262. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  263. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  264. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +0 -1
  265. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
  266. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
  267. package/dist/types/client/dirty.d.ts +1 -0
  268. package/dist/types/client/events/group.d.ts +2 -1
  269. package/dist/types/client/index.d.ts +1 -1
  270. package/dist/types/client/messaging/fanout.d.ts +14 -0
  271. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  272. package/dist/types/client/messaging/participants.d.ts +13 -0
  273. package/dist/types/client/types.d.ts +24 -1
  274. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  275. package/dist/types/crypto/core/index.d.ts +0 -1
  276. package/dist/types/crypto/core/random.d.ts +1 -7
  277. package/dist/types/crypto/index.d.ts +0 -2
  278. package/dist/types/index.d.ts +1 -1
  279. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  280. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  281. package/dist/types/infra/log/types.d.ts +1 -0
  282. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  283. package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
  284. package/dist/types/media/types.d.ts +5 -0
  285. package/dist/types/message/addon-crypto.d.ts +25 -0
  286. package/dist/types/message/index.d.ts +2 -0
  287. package/dist/types/message/reporting-token.d.ts +19 -0
  288. package/dist/types/message/use-case-secret.d.ts +20 -0
  289. package/dist/types/protocol/appstate.d.ts +58 -0
  290. package/dist/types/protocol/constants.d.ts +2 -1
  291. package/dist/types/protocol/index.d.ts +2 -10
  292. package/dist/types/protocol/jid.d.ts +3 -3
  293. package/dist/types/protocol/nodes.d.ts +2 -0
  294. package/dist/types/protocol/usync.d.ts +11 -0
  295. package/dist/types/retry/index.d.ts +1 -0
  296. package/dist/types/retry/replay.d.ts +0 -4
  297. package/dist/types/retry/tracker.d.ts +19 -0
  298. package/dist/types/retry/types.d.ts +4 -3
  299. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
  300. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  301. package/dist/types/signal/index.d.ts +1 -0
  302. package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
  303. package/dist/types/signal/session/resolver.d.ts +17 -0
  304. package/dist/types/store/contracts/appstate.store.d.ts +3 -0
  305. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  306. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  307. package/dist/types/store/contracts/message.store.d.ts +1 -0
  308. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  309. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  310. package/dist/types/store/contracts/signal.store.d.ts +6 -0
  311. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  312. package/dist/types/store/index.d.ts +1 -1
  313. package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
  314. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  315. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  316. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  317. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  318. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  319. package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
  320. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  321. package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
  322. package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
  323. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
  324. package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
  325. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
  326. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
  327. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
  328. package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
  329. package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
  330. package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
  331. package/dist/types/store/types.d.ts +3 -0
  332. package/dist/types/transport/WaWebSocket.d.ts +3 -0
  333. package/dist/types/transport/index.d.ts +2 -1
  334. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  335. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  336. package/dist/types/transport/node/builders/group.d.ts +4 -6
  337. package/dist/types/transport/node/builders/index.d.ts +2 -1
  338. package/dist/types/transport/node/builders/message.d.ts +14 -25
  339. package/dist/types/transport/node/builders/retry.d.ts +2 -4
  340. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  341. package/dist/types/transport/node/helpers.d.ts +8 -0
  342. package/dist/types/transport/node/usync.d.ts +2 -0
  343. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  344. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
  345. package/dist/types/transport/proxy.d.ts +6 -0
  346. package/dist/types/transport/stream/parse.d.ts +0 -1
  347. package/dist/types/transport/types.d.ts +18 -1
  348. package/dist/types/util/bytes.d.ts +5 -0
  349. package/dist/types/util/primitives.d.ts +3 -0
  350. package/dist/util/bytes.js +55 -33
  351. package/dist/util/coercion.js +6 -14
  352. package/dist/util/primitives.js +42 -14
  353. package/package.json +26 -5
  354. package/dist/crypto/core/encoding.js +0 -29
  355. package/dist/esm/crypto/core/encoding.js +0 -25
  356. package/dist/esm/util/base64.js +0 -18
  357. package/dist/esm/util/signal-address.js +0 -5
  358. package/dist/types/crypto/core/encoding.d.ts +0 -11
  359. package/dist/types/util/base64.d.ts +0 -4
  360. package/dist/types/util/signal-address.d.ts +0 -2
  361. package/dist/util/base64.js +0 -24
  362. package/dist/util/signal-address.js +0 -8
  363. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EMPTY_BYTES = exports.TEXT_DECODER = exports.TEXT_ENCODER = void 0;
3
+ exports.EMPTY_BYTES = exports.ZERO_BYTES = exports.TEXT_DECODER = exports.TEXT_ENCODER = void 0;
4
4
  exports.bytesToHex = bytesToHex;
5
5
  exports.hexToBytes = hexToBytes;
6
6
  exports.bytesToBase64 = bytesToBase64;
7
7
  exports.base64ToBytes = base64ToBytes;
8
+ exports.base64ToBytesChecked = base64ToBytesChecked;
9
+ exports.decodeBase64Url = decodeBase64Url;
10
+ exports.assertByteLength = assertByteLength;
11
+ exports.decodeProtoBytes = decodeProtoBytes;
8
12
  exports.bytesToBase64UrlSafe = bytesToBase64UrlSafe;
9
13
  exports.concatBytes = concatBytes;
10
14
  exports.toBytesView = toBytesView;
@@ -17,6 +21,7 @@ exports.readAllBytes = readAllBytes;
17
21
  const node_crypto_1 = require("node:crypto");
18
22
  exports.TEXT_ENCODER = new TextEncoder();
19
23
  exports.TEXT_DECODER = new TextDecoder();
24
+ exports.ZERO_BYTES = new Uint8Array([0]);
20
25
  exports.EMPTY_BYTES = Object.freeze(new Uint8Array(0));
21
26
  const HEX_CHARS = '0123456789abcdef';
22
27
  const HEX_TABLE = /* @__PURE__ */ (() => {
@@ -106,28 +111,52 @@ function base64ToBytes(value) {
106
111
  out[j++] = ((b & 0x0f) << 4) | (c >> 2);
107
112
  out[j++] = ((c & 0x03) << 6) | d;
108
113
  }
109
- if (padding === 0) {
110
- const a = lookupBase64(value.charCodeAt(i));
111
- const b = lookupBase64(value.charCodeAt(i + 1));
114
+ const a = lookupBase64(value.charCodeAt(i));
115
+ const b = lookupBase64(value.charCodeAt(i + 1));
116
+ out[j++] = (a << 2) | (b >> 4);
117
+ if (j < outLen) {
112
118
  const c = lookupBase64(value.charCodeAt(i + 2));
113
- const d = lookupBase64(value.charCodeAt(i + 3));
114
- out[j++] = (a << 2) | (b >> 4);
115
119
  out[j++] = ((b & 0x0f) << 4) | (c >> 2);
116
- out[j++] = ((c & 0x03) << 6) | d;
120
+ if (j < outLen) {
121
+ const d = lookupBase64(value.charCodeAt(i + 3));
122
+ out[j++] = ((c & 0x03) << 6) | d;
123
+ }
117
124
  }
118
- else if (padding === 1) {
119
- const a = lookupBase64(value.charCodeAt(i));
120
- const b = lookupBase64(value.charCodeAt(i + 1));
121
- const c = lookupBase64(value.charCodeAt(i + 2));
122
- out[j++] = (a << 2) | (b >> 4);
123
- out[j++] = ((b & 0x0f) << 4) | (c >> 2);
125
+ return out;
126
+ }
127
+ function base64ToBytesChecked(value, field, requireNonEmpty = true) {
128
+ if (requireNonEmpty && value.length === 0) {
129
+ throw new Error(`invalid base64 payload for ${field}`);
124
130
  }
125
- else {
126
- const a = lookupBase64(value.charCodeAt(i));
127
- const b = lookupBase64(value.charCodeAt(i + 1));
128
- out[j++] = (a << 2) | (b >> 4);
131
+ return base64ToBytes(value);
132
+ }
133
+ function decodeBase64Url(value, field) {
134
+ if (!value) {
135
+ throw new Error(`missing ${field}`);
136
+ }
137
+ const padded = value
138
+ .replace(/-/g, '+')
139
+ .replace(/_/g, '/')
140
+ .padEnd(Math.ceil(value.length / 4) * 4, '=');
141
+ return base64ToBytesChecked(padded, field);
142
+ }
143
+ function assertByteLength(value, expectedLength, errorMessage, throwOnMismatch = true) {
144
+ if (value.length !== expectedLength) {
145
+ if (!throwOnMismatch) {
146
+ return false;
147
+ }
148
+ throw new Error(errorMessage);
129
149
  }
130
- return out;
150
+ return true;
151
+ }
152
+ function decodeProtoBytes(value, field) {
153
+ if (value === null || value === undefined) {
154
+ throw new Error(`missing protobuf bytes field ${field}`);
155
+ }
156
+ if (value instanceof Uint8Array) {
157
+ return value;
158
+ }
159
+ return base64ToBytes(value);
131
160
  }
132
161
  function lookupBase64(code) {
133
162
  if (code > 127) {
@@ -196,28 +225,21 @@ function concatBytes(parts) {
196
225
  }
197
226
  function toBytesView(value) {
198
227
  if (value instanceof Uint8Array) {
199
- if (value.constructor === Uint8Array) {
200
- return value;
201
- }
202
- return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
228
+ return value.constructor === Uint8Array
229
+ ? value
230
+ : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
203
231
  }
204
- if (ArrayBuffer.isView(value)) {
205
- return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
232
+ if (value instanceof ArrayBuffer) {
233
+ return new Uint8Array(value);
206
234
  }
207
- return new Uint8Array(value);
235
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
208
236
  }
209
237
  function toChunkBytes(chunk) {
210
- if (chunk instanceof Uint8Array) {
211
- return chunk;
212
- }
213
- if (chunk instanceof ArrayBuffer) {
214
- return new Uint8Array(chunk);
215
- }
216
238
  if (typeof chunk === 'string') {
217
239
  return exports.TEXT_ENCODER.encode(chunk);
218
240
  }
219
- if (ArrayBuffer.isView(chunk)) {
220
- return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
241
+ if (chunk instanceof Uint8Array || chunk instanceof ArrayBuffer || ArrayBuffer.isView(chunk)) {
242
+ return toBytesView(chunk);
221
243
  }
222
244
  throw new Error(`unsupported stream chunk type: ${typeof chunk}`);
223
245
  }
@@ -20,9 +20,8 @@ function asNumber(value, field) {
20
20
  throw new Error(`invalid number value for ${field}`);
21
21
  }
22
22
  function asOptionalNumber(value, field = 'optional number') {
23
- if (value === null || value === undefined) {
23
+ if (value === null || value === undefined)
24
24
  return undefined;
25
- }
26
25
  return asNumber(value, field);
27
26
  }
28
27
  function asString(value, field) {
@@ -32,9 +31,8 @@ function asString(value, field) {
32
31
  throw new Error(`invalid string value for ${field}`);
33
32
  }
34
33
  function asOptionalString(value, field = 'optional string') {
35
- if (value === null || value === undefined) {
34
+ if (value === null || value === undefined)
36
35
  return undefined;
37
- }
38
36
  return asString(value, field);
39
37
  }
40
38
  function asBytes(value, field) {
@@ -44,23 +42,17 @@ function asBytes(value, field) {
44
42
  throw new Error(`invalid bytes value for ${field}`);
45
43
  }
46
44
  function asOptionalBytes(value, field = 'optional bytes') {
47
- if (value === null || value === undefined) {
45
+ if (value === null || value === undefined)
48
46
  return undefined;
49
- }
50
47
  return asBytes(value, field);
51
48
  }
52
49
  function toBoolOrUndef(value) {
53
- if (value === null || value === undefined) {
54
- return undefined;
55
- }
56
- return Boolean(value);
50
+ return value === null || value === undefined ? undefined : Boolean(value);
57
51
  }
58
52
  function resolvePositive(value, fallback, name) {
59
- if (value === undefined) {
53
+ if (value === undefined)
60
54
  return fallback;
61
- }
62
- if (Number.isSafeInteger(value) && value > 0) {
55
+ if (Number.isSafeInteger(value) && value > 0)
63
56
  return value;
64
- }
65
57
  throw new Error(`${name} must be a positive safe integer`);
66
58
  }
@@ -3,35 +3,63 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toError = toError;
4
4
  exports.toSafeNumber = toSafeNumber;
5
5
  exports.longToNumber = longToNumber;
6
+ exports.normalizeNonNegativeInteger = normalizeNonNegativeInteger;
7
+ exports.parseStrictUnsignedInt = parseStrictUnsignedInt;
8
+ exports.parseOptionalInt = parseOptionalInt;
6
9
  function toError(value) {
7
- if (value instanceof Error) {
10
+ if (value instanceof Error)
8
11
  return value;
9
- }
10
- if (typeof value === 'string') {
12
+ if (typeof value === 'string')
11
13
  return new Error(value);
14
+ if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
15
+ return new Error(String(value));
16
+ }
17
+ if (value && typeof value === 'object') {
18
+ const message = value.message;
19
+ if (typeof message === 'string' && message.length > 0) {
20
+ return new Error(message);
21
+ }
22
+ const code = value.code;
23
+ if (typeof code === 'string' || typeof code === 'number') {
24
+ return new Error(`unknown error (${code})`);
25
+ }
12
26
  }
13
27
  return new Error('unknown error');
14
28
  }
15
29
  function assertSafeInteger(value, field, nullishBehavior) {
16
- if (!Number.isFinite(value) || !Number.isSafeInteger(value)) {
17
- const prefix = nullishBehavior === 'throw' ? `invalid ${field}` : 'invalid long numeric value';
18
- throw new Error(`${prefix}: ${value}`);
19
- }
20
- return value;
30
+ if (Number.isFinite(value) && Number.isSafeInteger(value))
31
+ return value;
32
+ const prefix = nullishBehavior === 'throw' ? `invalid ${field}` : 'invalid long numeric value';
33
+ throw new Error(`${prefix}: ${value}`);
21
34
  }
22
35
  function toSafeNumber(value, field) {
23
- if (value === null || value === undefined) {
36
+ if (value === null || value === undefined)
24
37
  throw new Error(`missing ${field}`);
25
- }
26
38
  const numeric = typeof value === 'number' ? value : value.toNumber?.();
27
- if (typeof numeric !== 'number') {
39
+ if (typeof numeric !== 'number')
28
40
  throw new Error(`invalid ${field}`);
29
- }
30
41
  return assertSafeInteger(numeric, field, 'throw');
31
42
  }
32
43
  function longToNumber(value) {
33
- if (value === null || value === undefined) {
44
+ if (value === null || value === undefined)
34
45
  return 0;
35
- }
36
46
  return assertSafeInteger(typeof value === 'number' ? value : value.toNumber(), '', 'zero');
37
47
  }
48
+ function normalizeNonNegativeInteger(value, fallback) {
49
+ if (typeof value !== 'number' || !Number.isFinite(value))
50
+ return fallback;
51
+ return Math.max(0, Math.trunc(value));
52
+ }
53
+ function parseStrictUnsignedInt(value) {
54
+ if (!/^\d+$/.test(value))
55
+ return undefined;
56
+ const parsed = Number(value);
57
+ if (!Number.isSafeInteger(parsed))
58
+ return undefined;
59
+ return parsed;
60
+ }
61
+ function parseOptionalInt(value) {
62
+ if (!value)
63
+ return undefined;
64
+ return parseStrictUnsignedInt(value);
65
+ }
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "zapo-js",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "High-performance WhatsApp Web TypeScript library",
5
+ "funding": {
6
+ "type": "github",
7
+ "url": "https://github.com/sponsors/vinikjkkj"
8
+ },
5
9
  "main": "dist/index.js",
6
10
  "module": "dist/esm/index.js",
7
11
  "types": "dist/types/index.d.ts",
@@ -97,6 +101,12 @@
97
101
  "build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:types && npm run build:esm:finalize",
98
102
  "proto:generate": "node ./scripts/generate-proto.cjs",
99
103
  "example": "tsx examples/example.ts",
104
+ "bench:media": "node --expose-gc --import tsx bench/media-streaming.bench.ts",
105
+ "bench:binary": "node --expose-gc --import tsx bench/binary-codec.bench.ts",
106
+ "bench:crypto": "node --expose-gc --import tsx bench/crypto-core.bench.ts",
107
+ "bench:store:memory": "node --expose-gc --import tsx bench/store-memory.bench.ts",
108
+ "bench:all": "npm run bench:media && npm run bench:binary && npm run bench:crypto && npm run bench:store:memory",
109
+ "bench:comment": "node ./scripts/build-bench-comment.cjs",
100
110
  "test:structure": "node ./scripts/check-tests-structure.cjs",
101
111
  "test": "npm run test:structure && node --import tsx --test --test-skip-pattern \"\\\\[flow\\\\]\" \"src/**/__tests__/**/*.test.ts\"",
102
112
  "test:watch": "node --import tsx --test --watch --test-skip-pattern \"\\\\[flow\\\\]\" \"src/**/__tests__/**/*.test.ts\"",
@@ -105,43 +115,54 @@
105
115
  "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\"",
106
116
  "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' })\"",
107
117
  "typecheck": "tsc -p tsconfig.json --noEmit",
108
- "lint": "eslint \"src/**/*.{ts,js}\"",
109
- "lint:fix": "eslint \"src/**/*.{ts,js}\" --fix",
118
+ "lint": "eslint . --ext .ts,.js,.cjs",
119
+ "lint:fix": "eslint . --ext .ts,.js,.cjs --fix",
110
120
  "format": "prettier . --write",
111
121
  "format:check": "prettier . --check"
112
122
  },
113
123
  "dependencies": {},
114
124
  "peerDependencies": {
115
125
  "better-sqlite3": "^11.9.1",
126
+ "got": "14.6.4",
116
127
  "pino": "^9.0.0",
117
- "pino-pretty": "^13.0.0"
128
+ "pino-pretty": "^13.0.0",
129
+ "ws": "^8.18.3"
118
130
  },
119
131
  "peerDependenciesMeta": {
120
132
  "better-sqlite3": {
121
133
  "optional": true
122
134
  },
135
+ "got": {
136
+ "optional": true
137
+ },
123
138
  "pino": {
124
139
  "optional": true
125
140
  },
126
141
  "pino-pretty": {
127
142
  "optional": true
143
+ },
144
+ "ws": {
145
+ "optional": true
128
146
  }
129
147
  },
130
148
  "devDependencies": {
131
149
  "@changesets/cli": "^2.30.0",
132
150
  "@types/node": "^22.13.14",
151
+ "@types/ws": "^8.18.1",
133
152
  "@typescript-eslint/parser": "^8.56.1",
134
153
  "@vinikjkkj/eslint-config": "^1.0.0",
135
154
  "better-sqlite3": "^12.6.2",
136
155
  "c8": "^11.0.0",
137
156
  "eslint": "^9.39.4",
138
157
  "eslint-plugin-import": "^2.32.0",
158
+ "got": "14.6.4",
139
159
  "pino": "^10.3.1",
140
160
  "pino-pretty": "^13.1.3",
141
161
  "prettier": "^3.8.1",
142
162
  "tsc-alias": "^1.8.16",
143
163
  "tsx": "^4.20.6",
144
164
  "typescript": "^5.7.3",
145
- "typescript-eslint": "^8.56.1"
165
+ "typescript-eslint": "^8.56.1",
166
+ "ws": "^8.18.3"
146
167
  }
147
168
  }
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decodeBase64Url = decodeBase64Url;
4
- exports.assert32 = assert32;
5
- const bytes_1 = require("../../util/bytes");
6
- /**
7
- * Base64 URL encoding utilities
8
- */
9
- /**
10
- * Decodes a base64url encoded string to Uint8Array
11
- */
12
- function decodeBase64Url(value, field) {
13
- if (!value) {
14
- throw new Error(`missing ${field}`);
15
- }
16
- const padded = value
17
- .replace(/-/g, '+')
18
- .replace(/_/g, '/')
19
- .padEnd(Math.ceil(value.length / 4) * 4, '=');
20
- return (0, bytes_1.base64ToBytes)(padded);
21
- }
22
- /**
23
- * Asserts that a Uint8Array is exactly 32 bytes
24
- */
25
- function assert32(value, name) {
26
- if (value.length !== 32) {
27
- throw new Error(`${name} must be 32 bytes`);
28
- }
29
- }
@@ -1,25 +0,0 @@
1
- import { base64ToBytes } from '../../util/bytes.js';
2
- /**
3
- * Base64 URL encoding utilities
4
- */
5
- /**
6
- * Decodes a base64url encoded string to Uint8Array
7
- */
8
- export function decodeBase64Url(value, field) {
9
- if (!value) {
10
- throw new Error(`missing ${field}`);
11
- }
12
- const padded = value
13
- .replace(/-/g, '+')
14
- .replace(/_/g, '/')
15
- .padEnd(Math.ceil(value.length / 4) * 4, '=');
16
- return base64ToBytes(padded);
17
- }
18
- /**
19
- * Asserts that a Uint8Array is exactly 32 bytes
20
- */
21
- export function assert32(value, name) {
22
- if (value.length !== 32) {
23
- throw new Error(`${name} must be 32 bytes`);
24
- }
25
- }
@@ -1,18 +0,0 @@
1
- import { base64ToBytes as decodeBase64, bytesToBase64, bytesToBase64UrlSafe } from './bytes.js';
2
- export { bytesToBase64, bytesToBase64UrlSafe };
3
- export function base64ToBytes(value, field, requireNonEmpty = true) {
4
- const out = decodeBase64(value);
5
- if (requireNonEmpty && out.length === 0) {
6
- throw new Error(`invalid base64 payload for ${field}`);
7
- }
8
- return out;
9
- }
10
- export function decodeProtoBytes(value, field) {
11
- if (value === null || value === undefined) {
12
- throw new Error(`missing protobuf bytes field ${field}`);
13
- }
14
- if (value instanceof Uint8Array) {
15
- return value;
16
- }
17
- return decodeBase64(value);
18
- }
@@ -1,5 +0,0 @@
1
- import { WA_DEFAULTS } from '../protocol/constants.js';
2
- export function signalAddressKey(address) {
3
- const server = address.server ?? WA_DEFAULTS.HOST_DOMAIN;
4
- return `${address.user}|${server}|${address.device}`;
5
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Base64 URL encoding utilities
3
- */
4
- /**
5
- * Decodes a base64url encoded string to Uint8Array
6
- */
7
- export declare function decodeBase64Url(value: string | undefined, field: string): Uint8Array;
8
- /**
9
- * Asserts that a Uint8Array is exactly 32 bytes
10
- */
11
- export declare function assert32(value: Uint8Array, name: string): void;
@@ -1,4 +0,0 @@
1
- import { bytesToBase64, bytesToBase64UrlSafe } from './bytes';
2
- export { bytesToBase64, bytesToBase64UrlSafe };
3
- export declare function base64ToBytes(value: string, field: string, requireNonEmpty?: boolean): Uint8Array;
4
- export declare function decodeProtoBytes(value: Uint8Array | string | null | undefined, field: string): Uint8Array;
@@ -1,2 +0,0 @@
1
- import type { SignalAddress } from '../signal/types';
2
- export declare function signalAddressKey(address: SignalAddress): string;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bytesToBase64UrlSafe = exports.bytesToBase64 = void 0;
4
- exports.base64ToBytes = base64ToBytes;
5
- exports.decodeProtoBytes = decodeProtoBytes;
6
- const bytes_1 = require("./bytes");
7
- Object.defineProperty(exports, "bytesToBase64", { enumerable: true, get: function () { return bytes_1.bytesToBase64; } });
8
- Object.defineProperty(exports, "bytesToBase64UrlSafe", { enumerable: true, get: function () { return bytes_1.bytesToBase64UrlSafe; } });
9
- function base64ToBytes(value, field, requireNonEmpty = true) {
10
- const out = (0, bytes_1.base64ToBytes)(value);
11
- if (requireNonEmpty && out.length === 0) {
12
- throw new Error(`invalid base64 payload for ${field}`);
13
- }
14
- return out;
15
- }
16
- function decodeProtoBytes(value, field) {
17
- if (value === null || value === undefined) {
18
- throw new Error(`missing protobuf bytes field ${field}`);
19
- }
20
- if (value instanceof Uint8Array) {
21
- return value;
22
- }
23
- return (0, bytes_1.base64ToBytes)(value);
24
- }
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.signalAddressKey = signalAddressKey;
4
- const constants_1 = require("../protocol/constants");
5
- function signalAddressKey(address) {
6
- const server = address.server ?? constants_1.WA_DEFAULTS.HOST_DOMAIN;
7
- return `${address.user}|${server}|${address.device}`;
8
- }