zapo-js 0.2.0 → 0.3.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 (351) hide show
  1. package/README.md +7 -3
  2. package/dist/appstate/WaAppStateCrypto.js +49 -41
  3. package/dist/appstate/WaAppStateSyncClient.js +79 -42
  4. package/dist/appstate/index.js +2 -2
  5. package/dist/auth/WaAuthClient.js +20 -11
  6. package/dist/auth/{flow/WaAuthCredentialsFlow.js → credentials-flow.js} +83 -18
  7. package/dist/auth/pairing/WaPairingFlow.js +26 -29
  8. package/dist/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +29 -13
  9. package/dist/client/WaClient.js +115 -75
  10. package/dist/client/WaClientFactory.js +113 -30
  11. package/dist/client/connection/WaConnectionManager.js +4 -1
  12. package/dist/client/coordinators/WaAbPropsCoordinator.js +141 -0
  13. package/dist/client/coordinators/WaBusinessCoordinator.js +3 -12
  14. package/dist/client/coordinators/WaEmailCoordinator.js +63 -0
  15. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +33 -8
  16. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +55 -25
  17. package/dist/client/coordinators/WaOfflineResumeCoordinator.js +114 -0
  18. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +38 -20
  19. package/dist/client/coordinators/WaProfileCoordinator.js +3 -1
  20. package/dist/client/coordinators/WaRetryCoordinator.js +11 -9
  21. package/dist/client/coordinators/WaTrustedContactTokenCoordinator.js +22 -4
  22. package/dist/client/dirty.js +1 -1
  23. package/dist/client/events/abprops.js +43 -0
  24. package/dist/client/events/privacy-token.js +1 -2
  25. package/dist/client/events/registration.js +42 -0
  26. package/dist/client/incoming.js +37 -0
  27. package/dist/client/mailbox.js +17 -1
  28. package/dist/client/media.js +243 -0
  29. package/dist/client/messages.js +163 -86
  30. package/dist/crypto/core/index.js +4 -1
  31. package/dist/crypto/core/random.js +3 -9
  32. package/dist/crypto/core/xeddsa.js +57 -0
  33. package/dist/crypto/curves/X25519.js +18 -0
  34. package/dist/crypto/curves/constants.js +2 -1
  35. package/dist/esm/appstate/WaAppStateCrypto.js +39 -31
  36. package/dist/esm/appstate/WaAppStateSyncClient.js +68 -31
  37. package/dist/esm/appstate/index.js +1 -1
  38. package/dist/esm/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +1 -1
  39. package/dist/esm/auth/WaAuthClient.js +17 -8
  40. package/dist/esm/auth/{flow/WaAuthCredentialsFlow.js → credentials-flow.js} +83 -18
  41. package/dist/esm/auth/pairing/WaPairingFlow.js +25 -28
  42. package/dist/esm/auth/pairing/{WaPairingCodeCrypto.js → pairing-code-crypto.js} +20 -6
  43. package/dist/esm/client/WaClient.js +116 -76
  44. package/dist/esm/client/WaClientFactory.js +114 -31
  45. package/dist/esm/client/connection/WaConnectionManager.js +4 -1
  46. package/dist/esm/client/coordinators/WaAbPropsCoordinator.js +137 -0
  47. package/dist/esm/client/coordinators/WaBusinessCoordinator.js +4 -13
  48. package/dist/esm/client/coordinators/WaEmailCoordinator.js +60 -0
  49. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +35 -10
  50. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +47 -17
  51. package/dist/esm/client/coordinators/WaOfflineResumeCoordinator.js +110 -0
  52. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +38 -20
  53. package/dist/esm/client/coordinators/WaProfileCoordinator.js +3 -1
  54. package/dist/esm/client/coordinators/WaRetryCoordinator.js +11 -9
  55. package/dist/esm/client/coordinators/WaTrustedContactTokenCoordinator.js +24 -6
  56. package/dist/esm/client/dirty.js +1 -1
  57. package/dist/esm/client/events/abprops.js +40 -0
  58. package/dist/esm/client/events/privacy-token.js +1 -2
  59. package/dist/esm/client/events/registration.js +39 -0
  60. package/dist/esm/client/incoming.js +36 -0
  61. package/dist/esm/client/mailbox.js +17 -1
  62. package/dist/esm/client/media.js +234 -0
  63. package/dist/esm/client/messages.js +162 -85
  64. package/dist/esm/crypto/core/index.js +1 -0
  65. package/dist/esm/crypto/core/random.js +2 -7
  66. package/dist/esm/crypto/core/xeddsa.js +53 -0
  67. package/dist/esm/crypto/curves/X25519.js +20 -2
  68. package/dist/esm/crypto/curves/constants.js +1 -0
  69. package/dist/esm/infra/perf/StoreLock.js +7 -4
  70. package/dist/esm/media/WaMediaCrypto.js +257 -62
  71. package/dist/esm/media/WaMediaTransferClient.js +47 -190
  72. package/dist/esm/media/constants.js +2 -0
  73. package/dist/esm/media/processor.js +1 -0
  74. package/dist/esm/message/addon-crypto.js +130 -3
  75. package/dist/esm/message/content.js +12 -6
  76. package/dist/esm/message/icdc.js +8 -8
  77. package/dist/esm/message/incoming.js +14 -12
  78. package/dist/esm/message/phash.js +32 -12
  79. package/dist/esm/message/reporting-token.js +3 -3
  80. package/dist/esm/message/use-case-secret.js +1 -1
  81. package/dist/esm/protocol/abprops.js +159 -0
  82. package/dist/esm/protocol/browser.js +14 -0
  83. package/dist/esm/protocol/constants.js +3 -1
  84. package/dist/esm/protocol/email.js +30 -0
  85. package/dist/esm/protocol/jid.js +44 -10
  86. package/dist/esm/protocol/nodes.js +6 -2
  87. package/dist/esm/protocol/notification.js +7 -1
  88. package/dist/esm/retry/reason.js +1 -1
  89. package/dist/esm/signal/api/SignalDeviceSyncApi.js +5 -2
  90. package/dist/esm/signal/api/SignalDigestSyncApi.js +8 -6
  91. package/dist/esm/signal/api/SignalIdentitySyncApi.js +4 -4
  92. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +1 -1
  93. package/dist/esm/signal/api/SignalSessionSyncApi.js +1 -1
  94. package/dist/esm/signal/crypto/WaAdvSignature.js +5 -51
  95. package/dist/esm/signal/crypto/constants.js +0 -4
  96. package/dist/esm/signal/encoding.js +11 -54
  97. package/dist/esm/signal/group/SenderKeyChain.js +3 -3
  98. package/dist/esm/signal/group/SenderKeyCodec.js +5 -6
  99. package/dist/esm/signal/group/SenderKeyManager.js +13 -10
  100. package/dist/esm/signal/registration/keygen.js +2 -3
  101. package/dist/esm/signal/registration/utils.js +2 -2
  102. package/dist/esm/signal/session/SignalProtocol.js +18 -17
  103. package/dist/esm/signal/session/SignalRatchet.js +21 -10
  104. package/dist/esm/signal/session/SignalSerializer.js +5 -6
  105. package/dist/esm/signal/session/SignalSession.js +11 -9
  106. package/dist/esm/signal/session/resolver.js +6 -6
  107. package/dist/esm/store/contracts/identity.store.js +1 -0
  108. package/dist/esm/store/contracts/message-secret.store.js +1 -0
  109. package/dist/esm/store/contracts/pre-key.store.js +1 -0
  110. package/dist/esm/store/contracts/session.store.js +1 -0
  111. package/dist/esm/store/createStore.js +48 -12
  112. package/dist/esm/store/index.js +4 -0
  113. package/dist/esm/store/locks/identity.lock.js +16 -0
  114. package/dist/esm/store/locks/message-secret.lock.js +17 -0
  115. package/dist/esm/store/locks/pre-key.lock.js +27 -0
  116. package/dist/esm/store/locks/session.lock.js +19 -0
  117. package/dist/esm/store/locks/signal.lock.js +0 -24
  118. package/dist/esm/store/noop.store.js +20 -0
  119. package/dist/esm/store/providers/memory/device-list.store.js +3 -0
  120. package/dist/esm/store/providers/memory/identity.store.js +31 -0
  121. package/dist/esm/store/providers/memory/message-secret.store.js +81 -0
  122. package/dist/esm/store/providers/memory/participants.store.js +3 -0
  123. package/dist/esm/store/providers/memory/pre-key.store.js +97 -0
  124. package/dist/esm/store/providers/memory/retry.store.js +25 -11
  125. package/dist/esm/store/providers/memory/session.store.js +45 -0
  126. package/dist/esm/store/providers/memory/signal.store.js +1 -164
  127. package/dist/esm/transport/WaComms.js +4 -3
  128. package/dist/esm/transport/WaWebSocket.js +9 -1
  129. package/dist/esm/transport/index.js +6 -0
  130. package/dist/esm/transport/keepalive/WaKeepAlive.js +17 -8
  131. package/dist/esm/transport/node/WaMobileTcpSocket.js +114 -0
  132. package/dist/esm/transport/node/WaNodeOrchestrator.js +17 -8
  133. package/dist/esm/transport/node/builders/abprops.js +20 -0
  134. package/dist/esm/transport/node/builders/device.js +11 -0
  135. package/dist/esm/transport/node/builders/email.js +65 -0
  136. package/dist/esm/transport/node/builders/offline.js +14 -0
  137. package/dist/esm/transport/node/builders/prekeys.js +37 -40
  138. package/dist/esm/transport/node/builders/presence.js +13 -0
  139. package/dist/esm/transport/node/builders/privacy-token.js +19 -23
  140. package/dist/esm/transport/node/builders/retry.js +1 -1
  141. package/dist/esm/transport/node/helpers.js +24 -0
  142. package/dist/esm/transport/node/mex/argo-decoder.js +152 -0
  143. package/dist/esm/transport/node/mex/client.js +83 -0
  144. package/dist/esm/transport/node/mex/persist-ids.js +10 -0
  145. package/dist/esm/transport/noise/WaClientPayload.js +15 -10
  146. package/dist/esm/transport/noise/WaFrameCodec.js +2 -2
  147. package/dist/esm/transport/noise/WaMobileClientPayload.js +53 -0
  148. package/dist/esm/transport/noise/WaNoiseCert.js +9 -27
  149. package/dist/esm/transport/noise/WaNoiseSession.js +12 -11
  150. package/dist/infra/perf/StoreLock.js +7 -4
  151. package/dist/media/WaMediaCrypto.js +253 -58
  152. package/dist/media/WaMediaTransferClient.js +50 -223
  153. package/dist/media/constants.js +3 -1
  154. package/dist/media/processor.js +2 -0
  155. package/dist/message/addon-crypto.js +131 -0
  156. package/dist/message/content.js +13 -5
  157. package/dist/message/icdc.js +8 -8
  158. package/dist/message/incoming.js +14 -12
  159. package/dist/message/phash.js +32 -12
  160. package/dist/message/reporting-token.js +2 -2
  161. package/dist/message/use-case-secret.js +1 -1
  162. package/dist/protocol/abprops.js +163 -0
  163. package/dist/protocol/browser.js +15 -0
  164. package/dist/protocol/constants.js +14 -2
  165. package/dist/protocol/email.js +33 -0
  166. package/dist/protocol/jid.js +45 -10
  167. package/dist/protocol/nodes.js +6 -2
  168. package/dist/protocol/notification.js +8 -2
  169. package/dist/retry/reason.js +1 -1
  170. package/dist/signal/api/SignalDeviceSyncApi.js +5 -2
  171. package/dist/signal/api/SignalDigestSyncApi.js +8 -6
  172. package/dist/signal/api/SignalIdentitySyncApi.js +4 -4
  173. package/dist/signal/crypto/WaAdvSignature.js +2 -50
  174. package/dist/signal/crypto/constants.js +1 -5
  175. package/dist/signal/encoding.js +11 -49
  176. package/dist/signal/group/SenderKeyChain.js +2 -2
  177. package/dist/signal/group/SenderKeyCodec.js +4 -5
  178. package/dist/signal/group/SenderKeyManager.js +12 -9
  179. package/dist/signal/registration/keygen.js +1 -2
  180. package/dist/signal/registration/utils.js +2 -2
  181. package/dist/signal/session/SignalProtocol.js +18 -17
  182. package/dist/signal/session/SignalRatchet.js +19 -8
  183. package/dist/signal/session/SignalSerializer.js +5 -6
  184. package/dist/signal/session/SignalSession.js +11 -9
  185. package/dist/signal/session/resolver.js +6 -6
  186. package/dist/store/contracts/identity.store.js +2 -0
  187. package/dist/store/contracts/message-secret.store.js +2 -0
  188. package/dist/store/contracts/pre-key.store.js +2 -0
  189. package/dist/store/contracts/session.store.js +2 -0
  190. package/dist/store/createStore.js +47 -11
  191. package/dist/store/index.js +9 -1
  192. package/dist/store/locks/identity.lock.js +19 -0
  193. package/dist/store/locks/message-secret.lock.js +20 -0
  194. package/dist/store/locks/pre-key.lock.js +30 -0
  195. package/dist/store/locks/session.lock.js +22 -0
  196. package/dist/store/locks/signal.lock.js +0 -24
  197. package/dist/store/noop.store.js +21 -1
  198. package/dist/store/providers/memory/device-list.store.js +3 -0
  199. package/dist/store/providers/memory/identity.store.js +35 -0
  200. package/dist/store/providers/memory/message-secret.store.js +85 -0
  201. package/dist/store/providers/memory/participants.store.js +3 -0
  202. package/dist/store/providers/memory/pre-key.store.js +101 -0
  203. package/dist/store/providers/memory/retry.store.js +24 -10
  204. package/dist/store/providers/memory/session.store.js +49 -0
  205. package/dist/store/providers/memory/signal.store.js +1 -164
  206. package/dist/transport/WaComms.js +4 -3
  207. package/dist/transport/WaWebSocket.js +9 -1
  208. package/dist/transport/index.js +17 -1
  209. package/dist/transport/keepalive/WaKeepAlive.js +17 -8
  210. package/dist/transport/node/WaMobileTcpSocket.js +118 -0
  211. package/dist/transport/node/WaNodeOrchestrator.js +16 -7
  212. package/dist/transport/node/builders/abprops.js +23 -0
  213. package/dist/transport/node/builders/device.js +14 -0
  214. package/dist/transport/node/builders/email.js +72 -0
  215. package/dist/transport/node/builders/offline.js +17 -0
  216. package/dist/transport/node/builders/prekeys.js +36 -39
  217. package/dist/transport/node/builders/presence.js +16 -0
  218. package/dist/transport/node/builders/privacy-token.js +18 -22
  219. package/dist/transport/node/builders/retry.js +1 -1
  220. package/dist/transport/node/helpers.js +26 -0
  221. package/dist/transport/node/mex/argo-decoder.js +189 -0
  222. package/dist/transport/node/mex/client.js +86 -0
  223. package/dist/transport/node/mex/persist-ids.js +13 -0
  224. package/dist/transport/noise/WaClientPayload.js +14 -9
  225. package/dist/transport/noise/WaFrameCodec.js +1 -1
  226. package/dist/transport/noise/WaMobileClientPayload.js +56 -0
  227. package/dist/transport/noise/WaNoiseCert.js +8 -26
  228. package/dist/transport/noise/WaNoiseSession.js +11 -10
  229. package/dist/types/appstate/WaAppStateCrypto.d.ts +11 -8
  230. package/dist/types/appstate/WaAppStateSyncClient.d.ts +6 -2
  231. package/dist/types/appstate/index.d.ts +1 -1
  232. package/dist/types/appstate/{WaAppStateSyncResponseParser.d.ts → response-parser.d.ts} +1 -1
  233. package/dist/types/appstate/types.d.ts +1 -1
  234. package/dist/types/auth/WaAuthClient.d.ts +9 -3
  235. package/dist/types/auth/credentials-flow.d.ts +20 -0
  236. package/dist/types/auth/pairing/WaPairingFlow.d.ts +3 -2
  237. package/dist/types/auth/pairing/{WaPairingCodeCrypto.d.ts → pairing-code-crypto.d.ts} +6 -1
  238. package/dist/types/auth/types.d.ts +40 -0
  239. package/dist/types/client/WaClient.d.ts +19 -8
  240. package/dist/types/client/WaClientFactory.d.ts +10 -4
  241. package/dist/types/client/coordinators/WaAbPropsCoordinator.d.ts +26 -0
  242. package/dist/types/client/coordinators/WaBusinessCoordinator.d.ts +1 -1
  243. package/dist/types/client/coordinators/WaEmailCoordinator.d.ts +24 -0
  244. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +6 -1
  245. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +15 -2
  246. package/dist/types/client/coordinators/WaOfflineResumeCoordinator.d.ts +31 -0
  247. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +13 -2
  248. package/dist/types/client/coordinators/WaPrivacyCoordinator.d.ts +1 -1
  249. package/dist/types/client/coordinators/WaProfileCoordinator.d.ts +4 -2
  250. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +6 -0
  251. package/dist/types/client/coordinators/WaTrustedContactTokenCoordinator.d.ts +11 -1
  252. package/dist/types/client/dirty.d.ts +3 -1
  253. package/dist/types/client/events/abprops.d.ts +14 -0
  254. package/dist/types/client/events/registration.d.ts +17 -0
  255. package/dist/types/client/incoming.d.ts +6 -1
  256. package/dist/types/client/mailbox.d.ts +2 -0
  257. package/dist/types/client/media.d.ts +31 -0
  258. package/dist/types/client/messages.d.ts +2 -0
  259. package/dist/types/client/persistence/WriteBehindPersistence.d.ts +1 -1
  260. package/dist/types/client/types.d.ts +100 -1
  261. package/dist/types/crypto/core/index.d.ts +1 -0
  262. package/dist/types/crypto/core/primitives.d.ts +1 -1
  263. package/dist/types/crypto/core/random.d.ts +1 -1
  264. package/dist/types/crypto/core/xeddsa.d.ts +2 -0
  265. package/dist/types/crypto/curves/constants.d.ts +1 -0
  266. package/dist/types/crypto/index.d.ts +1 -0
  267. package/dist/types/index.d.ts +2 -1
  268. package/dist/types/infra/log/ConsoleLogger.d.ts +1 -1
  269. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  270. package/dist/types/infra/perf/StoreLock.d.ts +1 -0
  271. package/dist/types/media/WaMediaCrypto.d.ts +15 -6
  272. package/dist/types/media/WaMediaTransferClient.d.ts +3 -11
  273. package/dist/types/media/constants.d.ts +2 -0
  274. package/dist/types/media/index.d.ts +1 -0
  275. package/dist/types/media/processor.d.ts +28 -0
  276. package/dist/types/media/types.d.ts +9 -3
  277. package/dist/types/message/addon-crypto.d.ts +34 -3
  278. package/dist/types/message/content.d.ts +3 -1
  279. package/dist/types/message/icdc.d.ts +4 -4
  280. package/dist/types/message/types.d.ts +16 -24
  281. package/dist/types/protocol/abprops.d.ts +142 -0
  282. package/dist/types/protocol/browser.d.ts +1 -0
  283. package/dist/types/protocol/constants.d.ts +5 -1
  284. package/dist/types/protocol/email.d.ts +32 -0
  285. package/dist/types/protocol/jid.d.ts +1 -0
  286. package/dist/types/protocol/nodes.d.ts +4 -0
  287. package/dist/types/protocol/notification.d.ts +6 -0
  288. package/dist/types/protocol/stream.d.ts +1 -0
  289. package/dist/types/retry/reason.d.ts +1 -1
  290. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +3 -0
  291. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +3 -3
  292. package/dist/types/signal/crypto/WaAdvSignature.d.ts +0 -2
  293. package/dist/types/signal/crypto/constants.d.ts +0 -1
  294. package/dist/types/signal/encoding.d.ts +7 -1
  295. package/dist/types/signal/group/SenderKeyChain.d.ts +1 -1
  296. package/dist/types/signal/group/SenderKeyManager.d.ts +7 -2
  297. package/dist/types/signal/registration/utils.d.ts +2 -1
  298. package/dist/types/signal/session/SignalProtocol.d.ts +11 -2
  299. package/dist/types/signal/session/SignalSerializer.d.ts +2 -1
  300. package/dist/types/signal/session/resolver.d.ts +4 -2
  301. package/dist/types/signal/types.d.ts +16 -4
  302. package/dist/types/store/contracts/identity.store.d.ts +11 -0
  303. package/dist/types/store/contracts/message-secret.store.d.ts +16 -0
  304. package/dist/types/store/contracts/pre-key.store.d.ts +13 -0
  305. package/dist/types/store/contracts/session.store.d.ts +14 -0
  306. package/dist/types/store/contracts/signal.store.d.ts +1 -34
  307. package/dist/types/store/index.d.ts +9 -1
  308. package/dist/types/store/locks/identity.lock.d.ts +3 -0
  309. package/dist/types/store/locks/message-secret.lock.d.ts +3 -0
  310. package/dist/types/store/locks/pre-key.lock.d.ts +3 -0
  311. package/dist/types/store/locks/session.lock.d.ts +3 -0
  312. package/dist/types/store/noop.store.d.ts +4 -0
  313. package/dist/types/store/providers/memory/identity.store.d.ts +18 -0
  314. package/dist/types/store/providers/memory/message-secret.store.d.ts +21 -0
  315. package/dist/types/store/providers/memory/pre-key.store.d.ts +23 -0
  316. package/dist/types/store/providers/memory/retry.store.d.ts +7 -1
  317. package/dist/types/store/providers/memory/session.store.d.ts +21 -0
  318. package/dist/types/store/providers/memory/signal.store.d.ts +3 -45
  319. package/dist/types/store/providers/memory/thread.store.d.ts +1 -1
  320. package/dist/types/store/types.d.ts +21 -1
  321. package/dist/types/transport/WaWebSocket.d.ts +1 -0
  322. package/dist/types/transport/index.d.ts +8 -1
  323. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +4 -1
  324. package/dist/types/transport/node/WaMobileTcpSocket.d.ts +18 -0
  325. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +6 -2
  326. package/dist/types/transport/node/builders/abprops.d.ts +5 -0
  327. package/dist/types/transport/node/builders/device.d.ts +2 -0
  328. package/dist/types/transport/node/builders/email.d.ts +11 -0
  329. package/dist/types/transport/node/builders/offline.d.ts +2 -0
  330. package/dist/types/transport/node/builders/prekeys.d.ts +4 -3
  331. package/dist/types/transport/node/builders/presence.d.ts +6 -0
  332. package/dist/types/transport/node/helpers.d.ts +3 -0
  333. package/dist/types/transport/node/mex/argo-decoder.d.ts +11 -0
  334. package/dist/types/transport/node/mex/client.d.ts +18 -0
  335. package/dist/types/transport/node/mex/persist-ids.d.ts +14 -0
  336. package/dist/types/transport/noise/WaMobileClientPayload.d.ts +29 -0
  337. package/dist/types/transport/noise/WaNoiseCert.d.ts +7 -1
  338. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
  339. package/dist/types/transport/types.d.ts +8 -0
  340. package/package.json +6 -4
  341. package/dist/auth/pairing/constants.js +0 -5
  342. package/dist/client/connection/WaKeyShareCoordinator.js +0 -63
  343. package/dist/esm/auth/pairing/constants.js +0 -2
  344. package/dist/esm/client/connection/WaKeyShareCoordinator.js +0 -59
  345. package/dist/esm/transport/node/builders/index.js +0 -11
  346. package/dist/transport/node/builders/index.js +0 -51
  347. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +0 -14
  348. package/dist/types/auth/pairing/constants.d.ts +0 -2
  349. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +0 -14
  350. package/dist/types/transport/node/builders/index.d.ts +0 -11
  351. /package/dist/appstate/{WaAppStateSyncResponseParser.js → response-parser.js} +0 -0
@@ -9,12 +9,16 @@ const mailbox_1 = require("./mailbox");
9
9
  const WriteBehindPersistence_1 = require("./persistence/WriteBehindPersistence");
10
10
  const WaClientFactory_1 = require("./WaClientFactory");
11
11
  const ConsoleLogger_1 = require("../infra/log/ConsoleLogger");
12
+ const addon_crypto_1 = require("../message/addon-crypto");
12
13
  const _proto_1 = require("../proto.js");
13
14
  const constants_1 = require("../protocol/constants");
14
15
  const jid_1 = require("../protocol/jid");
16
+ const stream_1 = require("../protocol/stream");
17
+ const noop_store_1 = require("../store/noop.store");
18
+ const device_1 = require("../transport/node/builders/device");
19
+ const presence_1 = require("../transport/node/builders/presence");
15
20
  const query_1 = require("../transport/node/query");
16
21
  const bytes_1 = require("../util/bytes");
17
- const bytes_2 = require("../util/bytes");
18
22
  const primitives_1 = require("../util/primitives");
19
23
  const SYNC_RELATED_PROTOCOL_TYPES = new Set([
20
24
  _proto_1.proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_REQUEST,
@@ -22,8 +26,6 @@ const SYNC_RELATED_PROTOCOL_TYPES = new Set([
22
26
  _proto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_MESSAGE,
23
27
  _proto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE
24
28
  ]);
25
- const WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS = 15000;
26
- const WA_APP_STATE_KEY_SHARE_MAX_RETRIES = 2;
27
29
  class WaClient extends node_events_1.EventEmitter {
28
30
  constructor(options, logger = new ConsoleLogger_1.ConsoleLogger('info')) {
29
31
  super();
@@ -37,11 +39,15 @@ class WaClient extends node_events_1.EventEmitter {
37
39
  this.appStateStore = base.sessionStore.appState;
38
40
  this.contactStore = base.sessionStore.contacts;
39
41
  this.messageStore = base.sessionStore.messages;
42
+ this.messageSecretStore = base.sessionStore.messageSecret;
40
43
  this.participantsStore = base.sessionStore.participants;
41
44
  this.privacyTokenStore = base.sessionStore.privacyToken;
42
45
  this.deviceListStore = base.sessionStore.deviceList;
43
46
  this.retryStore = base.sessionStore.retry;
44
47
  this.signalStore = base.sessionStore.signal;
48
+ this.preKeyStore = base.sessionStore.preKey;
49
+ this.sessionStore = base.sessionStore.session;
50
+ this.identityStore = base.sessionStore.identity;
45
51
  this.senderKeyStore = base.sessionStore.senderKey;
46
52
  this.threadStore = base.sessionStore.threads;
47
53
  this.writeBehind = new WriteBehindPersistence_1.WriteBehindPersistence({
@@ -49,11 +55,16 @@ class WaClient extends node_events_1.EventEmitter {
49
55
  threadStore: this.threadStore,
50
56
  contactStore: this.contactStore
51
57
  }, this.logger, this.options.writeBehind);
58
+ if (this.options.addons?.autoDecrypt &&
59
+ this.messageSecretStore === noop_store_1.NOOP_MESSAGE_SECRET_STORE) {
60
+ this.logger.warn('addons.autoDecrypt is enabled but messageSecret cache is noop — ' +
61
+ 'addon decryption will only work if secrets are in the message store');
62
+ }
52
63
  const dependencies = (0, WaClientFactory_1.buildWaClientDependencies)({
53
64
  base,
54
65
  runtime: {
55
66
  sendNode: (node) => this.sendNode(node),
56
- query: (node, timeoutMs) => this.query(node, timeoutMs),
67
+ query: (node, timeoutMs, options) => this.query(node, timeoutMs, options),
57
68
  queryWithContext: this.queryWithContext.bind(this),
58
69
  syncAppState: () => this.syncAppState().then(() => { }),
59
70
  syncAppStateWithOptions: (syncOptions) => this.syncAppState(syncOptions),
@@ -112,12 +123,16 @@ class WaClient extends node_events_1.EventEmitter {
112
123
  throw normalized;
113
124
  }
114
125
  }
115
- async query(node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS) {
126
+ async sendPresence(type) {
127
+ const credentials = this.authClient.getCurrentCredentials();
128
+ await this.nodeOrchestrator.sendNode((0, presence_1.buildPresenceNode)({ type, name: credentials?.meDisplayName ?? undefined }), false);
129
+ }
130
+ async query(node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS, options = {}) {
116
131
  if (!this.connectionManager.isConnected()) {
117
132
  throw new Error('client is not connected');
118
133
  }
119
134
  this.logger.debug('wa client query', { tag: node.tag, id: node.attrs.id, timeoutMs });
120
- return this.nodeOrchestrator.query(node, timeoutMs);
135
+ return this.nodeOrchestrator.query(node, timeoutMs, options);
121
136
  }
122
137
  registerIncomingHandler(registration) {
123
138
  return this.incomingNode.registerIncomingHandler(registration);
@@ -144,8 +159,17 @@ class WaClient extends node_events_1.EventEmitter {
144
159
  void (0, mailbox_1.persistIncomingMailboxEntities)({
145
160
  logger: this.logger,
146
161
  writeBehind: this.writeBehind,
162
+ messageSecretStore: this.messageSecretStore,
147
163
  event
148
164
  });
165
+ if (this.options.addons?.autoDecrypt && event.message) {
166
+ void this.tryDecryptAddon(event).catch((err) => {
167
+ this.logger.warn('addon auto-decrypt failed', {
168
+ id: event.stanzaId,
169
+ message: (0, primitives_1.toError)(err).message
170
+ });
171
+ });
172
+ }
149
173
  const protocolMessage = event.message?.protocolMessage;
150
174
  if (!protocolMessage) {
151
175
  return;
@@ -212,16 +236,6 @@ class WaClient extends node_events_1.EventEmitter {
212
236
  imported
213
237
  });
214
238
  if (imported > 0) {
215
- const hadWaiters = this.keyShareCoordinator.hasWaiters();
216
- this.keyShareCoordinator.notifyReceived();
217
- if (hadWaiters) {
218
- this.logger.debug('app-state key share imported and waiters released', {
219
- id: event.stanzaId,
220
- from: event.chatJid,
221
- imported
222
- });
223
- return;
224
- }
225
239
  void this.syncAppState().catch((error) => {
226
240
  this.logger.warn('failed to sync app-state after key share import', {
227
241
  id: event.stanzaId,
@@ -320,7 +334,7 @@ class WaClient extends node_events_1.EventEmitter {
320
334
  for (const key of request.keyIds ?? []) {
321
335
  try {
322
336
  const keyId = (0, bytes_1.decodeProtoBytes)(key.keyId, 'appStateSyncKeyRequest.keyIds[].keyId');
323
- const keyHex = (0, bytes_2.bytesToHex)(keyId);
337
+ const keyHex = (0, bytes_1.bytesToHex)(keyId);
324
338
  if (deduped.has(keyHex)) {
325
339
  continue;
326
340
  }
@@ -362,8 +376,8 @@ class WaClient extends node_events_1.EventEmitter {
362
376
  });
363
377
  }
364
378
  }
365
- async queryWithContext(context, node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS, contextData = {}) {
366
- return (0, query_1.queryWithContext)(async (queryNode, queryTimeoutMs) => this.query(queryNode, queryTimeoutMs), this.logger, context, node, timeoutMs, contextData);
379
+ async queryWithContext(context, node, timeoutMs = this.options.iqTimeoutMs ?? constants_1.WA_DEFAULTS.IQ_TIMEOUT_MS, contextData = {}, options = {}) {
380
+ return (0, query_1.queryWithContext)(async (queryNode, queryTimeoutMs) => this.query(queryNode, queryTimeoutMs, options), this.logger, context, node, timeoutMs, contextData);
367
381
  }
368
382
  async handleIncomingFrame(frame) {
369
383
  try {
@@ -403,7 +417,6 @@ class WaClient extends node_events_1.EventEmitter {
403
417
  remaining: writeBehindFlush.remaining
404
418
  });
405
419
  }
406
- this.keyShareCoordinator.notifyDisconnected();
407
420
  await this.connectionManager.disconnect();
408
421
  this.emit('connection', {
409
422
  status: 'close',
@@ -413,12 +426,12 @@ class WaClient extends node_events_1.EventEmitter {
413
426
  isNewLogin: false
414
427
  });
415
428
  }
416
- async requestPairingCode(phoneNumber, shouldShowPushNotification = false) {
429
+ async requestPairingCode(phoneNumber, shouldShowPushNotification = false, customCode) {
417
430
  if (!this.connectionManager.isConnected() || !this.authClient.getCurrentCredentials()) {
418
431
  throw new Error('client is not connected');
419
432
  }
420
433
  this.logger.debug('wa client request pairing code');
421
- return this.authClient.requestPairingCode(phoneNumber, shouldShowPushNotification);
434
+ return this.authClient.requestPairingCode(phoneNumber, shouldShowPushNotification, customCode);
422
435
  }
423
436
  async fetchPairingCountryCodeIso() {
424
437
  if (!this.connectionManager.isConnected() || !this.authClient.getCurrentCredentials()) {
@@ -467,6 +480,22 @@ class WaClient extends node_events_1.EventEmitter {
467
480
  get business() {
468
481
  return this.businessCoordinator;
469
482
  }
483
+ get email() {
484
+ return this.emailCoordinator;
485
+ }
486
+ async logout(reason = stream_1.WA_LOGOUT_REASONS.USER_INITIATED) {
487
+ const meJid = this.authClient.getCurrentCredentials()?.meJid;
488
+ if (!meJid) {
489
+ throw new Error('cannot logout: client is not authenticated');
490
+ }
491
+ const deviceJid = (0, jid_1.normalizeDeviceJid)(meJid);
492
+ const node = (0, device_1.buildRemoveCompanionDeviceIq)(deviceJid, reason);
493
+ const result = await this.queryWithContext('client.logout', node, undefined, {
494
+ jid: deviceJid,
495
+ reason
496
+ });
497
+ (0, query_1.assertIqResult)(result, 'client.logout');
498
+ }
470
499
  sendReceipt(input) {
471
500
  return this.messageDispatch.sendReceipt(input);
472
501
  }
@@ -483,60 +512,11 @@ class WaClient extends node_events_1.EventEmitter {
483
512
  if (!this.connectionManager.isConnected()) {
484
513
  throw new Error('client is not connected');
485
514
  }
486
- const shouldWaitForKeyShare = (await this.appStateStore.getActiveSyncKey()) === null;
487
- if (shouldWaitForKeyShare && !this.keyShareCoordinator.isBootstrapDone()) {
488
- this.keyShareCoordinator.markBootstrapDone();
489
- this.logger.info('app-state bootstrap pre-sync waiting for key share', {
490
- timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS
491
- });
492
- const received = await this.keyShareCoordinator.waitForShare(WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS);
493
- if (received) {
494
- this.logger.info('app-state bootstrap pre-sync received key share, continuing sync');
495
- }
496
- else {
497
- this.logger.warn('app-state bootstrap pre-sync key share wait timed out, continuing sync', {
498
- timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS
499
- });
500
- }
501
- }
502
- let syncResult = await this.executeAppStateSync(options);
503
- let blockedCollections = this.getBlockedAppStateCollections(syncResult);
504
- if (!shouldWaitForKeyShare || blockedCollections.length === 0) {
505
- this.emitChatEventsFromAppStateSyncResult(syncResult);
506
- return syncResult;
507
- }
508
- let retryCount = 0;
509
- let observedKeyShareVersion = this.keyShareCoordinator.getVersion();
510
- while (blockedCollections.length > 0 && retryCount < WA_APP_STATE_KEY_SHARE_MAX_RETRIES) {
511
- const hasFreshShare = this.keyShareCoordinator.getVersion() !== observedKeyShareVersion;
512
- if (!hasFreshShare) {
513
- this.logger.info('app-state bootstrap waiting for key share', {
514
- blockedCollections: blockedCollections.join(','),
515
- timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS,
516
- retryCount: retryCount + 1
517
- });
518
- const received = await this.keyShareCoordinator.waitForShare(WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS);
519
- if (!received) {
520
- this.logger.warn('app-state bootstrap key share wait timed out', {
521
- blockedCollections: blockedCollections.join(','),
522
- timeoutMs: WA_APP_STATE_KEY_SHARE_WAIT_TIMEOUT_MS
523
- });
524
- break;
525
- }
526
- }
527
- observedKeyShareVersion = this.keyShareCoordinator.getVersion();
528
- retryCount += 1;
529
- this.logger.info('app-state bootstrap retrying sync after key share', {
530
- retryCount,
531
- blockedCollections: blockedCollections.join(',')
532
- });
533
- syncResult = await this.executeAppStateSync(options);
534
- blockedCollections = this.getBlockedAppStateCollections(syncResult);
535
- }
515
+ const syncResult = await this.executeAppStateSync(options);
516
+ const blockedCollections = this.getBlockedAppStateCollections(syncResult);
536
517
  if (blockedCollections.length > 0) {
537
- this.logger.warn('app-state bootstrap still blocked after waiting for key share', {
538
- blockedCollections: blockedCollections.join(','),
539
- retries: retryCount
518
+ this.logger.warn('app-state sync has blocked collections', {
519
+ blockedCollections: blockedCollections.join(',')
540
520
  });
541
521
  }
542
522
  this.emitChatEventsFromAppStateSyncResult(syncResult);
@@ -637,6 +617,8 @@ class WaClient extends node_events_1.EventEmitter {
637
617
  await this.contactStore.clear();
638
618
  if (shouldClear('messages'))
639
619
  await this.messageStore.clear();
620
+ if (shouldClear('messageSecret'))
621
+ await this.messageSecretStore.clear();
640
622
  if (shouldClear('participants'))
641
623
  await this.participantsStore.clear();
642
624
  if (shouldClear('deviceList'))
@@ -645,6 +627,12 @@ class WaClient extends node_events_1.EventEmitter {
645
627
  await this.retryStore.clear();
646
628
  if (shouldClear('signal'))
647
629
  await this.signalStore.clear();
630
+ if (shouldClear('preKey'))
631
+ await this.preKeyStore.clear();
632
+ if (shouldClear('session'))
633
+ await this.sessionStore.clear();
634
+ if (shouldClear('identity'))
635
+ await this.identityStore.clear();
648
636
  if (shouldClear('senderKey'))
649
637
  await this.senderKeyStore.clear();
650
638
  if (shouldClear('threads'))
@@ -652,6 +640,58 @@ class WaClient extends node_events_1.EventEmitter {
652
640
  if (shouldClear('privacyToken'))
653
641
  await this.privacyTokenStore.clear();
654
642
  }
643
+ async tryDecryptAddon(event) {
644
+ const message = event.message;
645
+ if (!message)
646
+ return;
647
+ const addon = (0, addon_crypto_1.identifyEncryptedAddon)(message);
648
+ if (!addon)
649
+ return;
650
+ const targetMessageId = addon.targetMessageKey.id;
651
+ if (!targetMessageId)
652
+ return;
653
+ const parentEntry = await (0, addon_crypto_1.resolveParentMessageSecret)(targetMessageId, this.messageSecretStore, this.messageStore);
654
+ if (!parentEntry) {
655
+ this.logger.debug('addon parent message secret not found', {
656
+ id: event.stanzaId,
657
+ targetId: targetMessageId
658
+ });
659
+ return;
660
+ }
661
+ const parentMsgOriginalSender = parentEntry.senderJid;
662
+ const modificationSender = event.senderJid ?? '';
663
+ const plaintext = await (0, addon_crypto_1.decryptAddonPayload)({
664
+ messageSecret: parentEntry.secret,
665
+ stanzaId: targetMessageId,
666
+ parentMsgOriginalSender,
667
+ modificationSender,
668
+ modificationType: addon.modificationType,
669
+ ciphertext: addon.encPayload,
670
+ iv: addon.encIv,
671
+ additionalData: (0, addon_crypto_1.shouldUseAddonAdditionalData)(addon.modificationType)
672
+ ? (0, addon_crypto_1.buildAddonAdditionalData)(targetMessageId, modificationSender)
673
+ : undefined
674
+ });
675
+ let decrypted = (0, addon_crypto_1.decodeAddonPlaintext)(addon.kind, plaintext);
676
+ if (decrypted.kind === 'poll_vote' && decrypted.pollVote.selectedOptions) {
677
+ const names = await (0, addon_crypto_1.resolvePollOptionNames)(decrypted.pollVote.selectedOptions, targetMessageId, this.messageStore);
678
+ if (names) {
679
+ decrypted = { ...decrypted, selectedOptionNames: names };
680
+ }
681
+ }
682
+ const addonEvent = {
683
+ rawNode: event.rawNode,
684
+ stanzaId: event.stanzaId,
685
+ chatJid: event.chatJid,
686
+ stanzaType: event.stanzaType,
687
+ kind: addon.kind,
688
+ targetMessageId,
689
+ senderJid: modificationSender,
690
+ decrypted,
691
+ raw: message
692
+ };
693
+ this.emit('message_addon', addonEvent);
694
+ }
655
695
  tryEnterIncomingHandler() {
656
696
  if (!this.acceptingIncomingEvents) {
657
697
  return false;