zapo-js 0.1.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 (585) hide show
  1. package/README.md +235 -0
  2. package/dist/appstate/WaAppStateCrypto.js +202 -0
  3. package/dist/appstate/WaAppStateSyncClient.js +808 -0
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +71 -0
  5. package/dist/appstate/constants.js +23 -0
  6. package/dist/appstate/index.js +28 -0
  7. package/dist/appstate/store/sqlite.js +55 -0
  8. package/dist/appstate/types.js +2 -0
  9. package/dist/appstate/utils.js +84 -0
  10. package/dist/auth/WaAuthClient.js +266 -0
  11. package/dist/auth/flow/WaAuthCredentialsFlow.js +123 -0
  12. package/dist/auth/index.js +27 -0
  13. package/dist/auth/pairing/WaPairingCodeCrypto.js +75 -0
  14. package/dist/auth/pairing/WaPairingFlow.js +328 -0
  15. package/dist/auth/pairing/WaQrFlow.js +86 -0
  16. package/dist/auth/pairing/constants.js +5 -0
  17. package/dist/auth/types.js +2 -0
  18. package/dist/client/WaClient.js +749 -0
  19. package/dist/client/WaClientFactory.js +381 -0
  20. package/dist/client/coordinators/WaGroupCoordinator.js +191 -0
  21. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +315 -0
  22. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +1061 -0
  23. package/dist/client/coordinators/WaPassiveTasksCoordinator.js +200 -0
  24. package/dist/client/coordinators/WaRetryCoordinator.js +494 -0
  25. package/dist/client/coordinators/WaStreamControlCoordinator.js +123 -0
  26. package/dist/client/dirty.js +254 -0
  27. package/dist/client/events/chat.js +226 -0
  28. package/dist/client/events/group.js +410 -0
  29. package/dist/client/history-sync.js +122 -0
  30. package/dist/client/incoming.js +236 -0
  31. package/dist/client/index.js +5 -0
  32. package/dist/client/mailbox.js +49 -0
  33. package/dist/client/messages.js +152 -0
  34. package/dist/client/types.js +2 -0
  35. package/dist/crypto/core/constants.js +4 -0
  36. package/dist/crypto/core/encoding.js +29 -0
  37. package/dist/crypto/core/hkdf.js +26 -0
  38. package/dist/crypto/core/index.js +43 -0
  39. package/dist/crypto/core/keys.js +73 -0
  40. package/dist/crypto/core/nonce.js +18 -0
  41. package/dist/crypto/core/primitives.js +121 -0
  42. package/dist/crypto/core/random.js +32 -0
  43. package/dist/crypto/curves/Ed25519.js +42 -0
  44. package/dist/crypto/curves/X25519.js +64 -0
  45. package/dist/crypto/curves/constants.js +6 -0
  46. package/dist/crypto/curves/types.js +9 -0
  47. package/dist/crypto/index.js +22 -0
  48. package/dist/crypto/math/constants.js +44 -0
  49. package/dist/crypto/math/edwards.js +64 -0
  50. package/dist/crypto/math/le.js +20 -0
  51. package/dist/crypto/math/mod.js +38 -0
  52. package/dist/crypto/math/types.js +2 -0
  53. package/dist/esm/appstate/WaAppStateCrypto.js +198 -0
  54. package/dist/esm/appstate/WaAppStateSyncClient.js +803 -0
  55. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +67 -0
  56. package/dist/esm/appstate/constants.js +20 -0
  57. package/dist/esm/appstate/index.js +6 -0
  58. package/dist/esm/appstate/store/sqlite.js +49 -0
  59. package/dist/esm/appstate/types.js +1 -0
  60. package/dist/esm/appstate/utils.js +75 -0
  61. package/dist/esm/auth/WaAuthClient.js +262 -0
  62. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +118 -0
  63. package/dist/esm/auth/index.js +5 -0
  64. package/dist/esm/auth/pairing/WaPairingCodeCrypto.js +71 -0
  65. package/dist/esm/auth/pairing/WaPairingFlow.js +324 -0
  66. package/dist/esm/auth/pairing/WaQrFlow.js +82 -0
  67. package/dist/esm/auth/pairing/constants.js +2 -0
  68. package/dist/esm/auth/types.js +1 -0
  69. package/dist/esm/client/WaClient.js +745 -0
  70. package/dist/esm/client/WaClientFactory.js +377 -0
  71. package/dist/esm/client/coordinators/WaGroupCoordinator.js +188 -0
  72. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +311 -0
  73. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +1057 -0
  74. package/dist/esm/client/coordinators/WaPassiveTasksCoordinator.js +196 -0
  75. package/dist/esm/client/coordinators/WaRetryCoordinator.js +490 -0
  76. package/dist/esm/client/coordinators/WaStreamControlCoordinator.js +120 -0
  77. package/dist/esm/client/dirty.js +250 -0
  78. package/dist/esm/client/events/chat.js +223 -0
  79. package/dist/esm/client/events/group.js +407 -0
  80. package/dist/esm/client/history-sync.js +119 -0
  81. package/dist/esm/client/incoming.js +227 -0
  82. package/dist/esm/client/index.js +1 -0
  83. package/dist/esm/client/mailbox.js +46 -0
  84. package/dist/esm/client/messages.js +148 -0
  85. package/dist/esm/client/types.js +1 -0
  86. package/dist/esm/crypto/core/constants.js +1 -0
  87. package/dist/esm/crypto/core/encoding.js +25 -0
  88. package/dist/esm/crypto/core/hkdf.js +22 -0
  89. package/dist/esm/crypto/core/index.js +11 -0
  90. package/dist/esm/crypto/core/keys.js +66 -0
  91. package/dist/esm/crypto/core/nonce.js +15 -0
  92. package/dist/esm/crypto/core/primitives.js +102 -0
  93. package/dist/esm/crypto/core/random.js +28 -0
  94. package/dist/esm/crypto/curves/Ed25519.js +38 -0
  95. package/dist/esm/crypto/curves/X25519.js +58 -0
  96. package/dist/esm/crypto/curves/constants.js +3 -0
  97. package/dist/esm/crypto/curves/types.js +6 -0
  98. package/dist/esm/crypto/index.js +3 -0
  99. package/dist/esm/crypto/math/constants.js +41 -0
  100. package/dist/esm/crypto/math/edwards.js +60 -0
  101. package/dist/esm/crypto/math/le.js +16 -0
  102. package/dist/esm/crypto/math/mod.js +31 -0
  103. package/dist/esm/crypto/math/types.js +1 -0
  104. package/dist/esm/index.js +6 -0
  105. package/dist/esm/infra/log/ConsoleLogger.js +40 -0
  106. package/dist/esm/infra/log/PinoLogger.js +73 -0
  107. package/dist/esm/infra/log/types.js +1 -0
  108. package/dist/esm/infra/perf/BoundedTaskQueue.js +62 -0
  109. package/dist/esm/media/WaMediaCrypto.js +224 -0
  110. package/dist/esm/media/WaMediaTransferClient.js +361 -0
  111. package/dist/esm/media/conn.js +33 -0
  112. package/dist/esm/media/constants.js +18 -0
  113. package/dist/esm/media/index.js +3 -0
  114. package/dist/esm/media/types.js +1 -0
  115. package/dist/esm/message/WaMessageClient.js +210 -0
  116. package/dist/esm/message/ack.js +46 -0
  117. package/dist/esm/message/content.js +20 -0
  118. package/dist/esm/message/device-sent.js +49 -0
  119. package/dist/esm/message/incoming.js +318 -0
  120. package/dist/esm/message/index.js +2 -0
  121. package/dist/esm/message/padding.js +20 -0
  122. package/dist/esm/message/phash.js +25 -0
  123. package/dist/esm/message/types.js +1 -0
  124. package/dist/esm/package.json +3 -0
  125. package/dist/esm/proto.js +3 -0
  126. package/dist/esm/protocol/appstate.js +34 -0
  127. package/dist/esm/protocol/auth.js +12 -0
  128. package/dist/esm/protocol/browser.js +41 -0
  129. package/dist/esm/protocol/constants.js +11 -0
  130. package/dist/esm/protocol/defaults.js +27 -0
  131. package/dist/esm/protocol/dirty.js +26 -0
  132. package/dist/esm/protocol/group.js +5 -0
  133. package/dist/esm/protocol/index.js +11 -0
  134. package/dist/esm/protocol/jid.js +94 -0
  135. package/dist/esm/protocol/media.js +20 -0
  136. package/dist/esm/protocol/message.js +16 -0
  137. package/dist/esm/protocol/nodes.js +83 -0
  138. package/dist/esm/protocol/notification.js +50 -0
  139. package/dist/esm/protocol/stream.js +60 -0
  140. package/dist/esm/retry/constants.js +20 -0
  141. package/dist/esm/retry/index.js +5 -0
  142. package/dist/esm/retry/outbound.js +83 -0
  143. package/dist/esm/retry/parse.js +130 -0
  144. package/dist/esm/retry/reason.js +50 -0
  145. package/dist/esm/retry/replay.js +177 -0
  146. package/dist/esm/retry/types.js +1 -0
  147. package/dist/esm/signal/api/SignalDeviceSyncApi.js +185 -0
  148. package/dist/esm/signal/api/SignalDigestSyncApi.js +179 -0
  149. package/dist/esm/signal/api/SignalIdentitySyncApi.js +111 -0
  150. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +141 -0
  151. package/dist/esm/signal/api/SignalRotateKeyApi.js +59 -0
  152. package/dist/esm/signal/api/SignalSessionSyncApi.js +187 -0
  153. package/dist/esm/signal/api/codec.js +23 -0
  154. package/dist/esm/signal/api/constants.js +9 -0
  155. package/dist/esm/signal/api/prekeys.js +9 -0
  156. package/dist/esm/signal/constants.js +16 -0
  157. package/dist/esm/signal/crypto/WaAdvSignature.js +60 -0
  158. package/dist/esm/signal/crypto/constants.js +8 -0
  159. package/dist/esm/signal/group/SenderKeyChain.js +97 -0
  160. package/dist/esm/signal/group/SenderKeyCodec.js +46 -0
  161. package/dist/esm/signal/group/SenderKeyManager.js +176 -0
  162. package/dist/esm/signal/index.js +11 -0
  163. package/dist/esm/signal/registration/keygen.js +31 -0
  164. package/dist/esm/signal/registration/utils.js +16 -0
  165. package/dist/esm/signal/session/SignalProtocol.js +122 -0
  166. package/dist/esm/signal/session/SignalRatchet.js +260 -0
  167. package/dist/esm/signal/session/SignalSerializer.js +63 -0
  168. package/dist/esm/signal/session/SignalSession.js +153 -0
  169. package/dist/esm/signal/store/sqlite.js +310 -0
  170. package/dist/esm/signal/types.js +1 -0
  171. package/dist/esm/store/contracts/appstate.store.js +1 -0
  172. package/dist/esm/store/contracts/auth.store.js +1 -0
  173. package/dist/esm/store/contracts/contact.store.js +1 -0
  174. package/dist/esm/store/contracts/device-list.store.js +1 -0
  175. package/dist/esm/store/contracts/message.store.js +1 -0
  176. package/dist/esm/store/contracts/participants.store.js +1 -0
  177. package/dist/esm/store/contracts/retry.store.js +1 -0
  178. package/dist/esm/store/contracts/sender-key.store.js +1 -0
  179. package/dist/esm/store/contracts/signal.store.js +1 -0
  180. package/dist/esm/store/contracts/thread.store.js +1 -0
  181. package/dist/esm/store/createStore.js +278 -0
  182. package/dist/esm/store/index.js +20 -0
  183. package/dist/esm/store/noop.store.js +43 -0
  184. package/dist/esm/store/providers/memory/appstate.store.js +101 -0
  185. package/dist/esm/store/providers/memory/contact.store.js +23 -0
  186. package/dist/esm/store/providers/memory/device-list.store.js +86 -0
  187. package/dist/esm/store/providers/memory/message.store.js +40 -0
  188. package/dist/esm/store/providers/memory/participants.store.js +61 -0
  189. package/dist/esm/store/providers/memory/retry.store.js +71 -0
  190. package/dist/esm/store/providers/memory/sender-key.store.js +88 -0
  191. package/dist/esm/store/providers/memory/signal.store.js +170 -0
  192. package/dist/esm/store/providers/memory/thread.store.js +34 -0
  193. package/dist/esm/store/providers/sqlite/BaseSqliteStore.js +37 -0
  194. package/dist/esm/store/providers/sqlite/appstate.store.js +169 -0
  195. package/dist/esm/store/providers/sqlite/auth.store.js +176 -0
  196. package/dist/esm/store/providers/sqlite/connection.js +240 -0
  197. package/dist/esm/store/providers/sqlite/contact.store.js +61 -0
  198. package/dist/esm/store/providers/sqlite/device-list.store.js +155 -0
  199. package/dist/esm/store/providers/sqlite/message.store.js +119 -0
  200. package/dist/esm/store/providers/sqlite/migrations.js +347 -0
  201. package/dist/esm/store/providers/sqlite/participants.store.js +85 -0
  202. package/dist/esm/store/providers/sqlite/retry.store.js +144 -0
  203. package/dist/esm/store/providers/sqlite/sender-key.store.js +203 -0
  204. package/dist/esm/store/providers/sqlite/signal.store.js +353 -0
  205. package/dist/esm/store/providers/sqlite/thread.store.js +72 -0
  206. package/dist/esm/store/types.js +1 -0
  207. package/dist/esm/transport/WaComms.js +527 -0
  208. package/dist/esm/transport/WaWebSocket.js +361 -0
  209. package/dist/esm/transport/binary/constants.js +96 -0
  210. package/dist/esm/transport/binary/decoder.js +275 -0
  211. package/dist/esm/transport/binary/encoder.js +210 -0
  212. package/dist/esm/transport/binary/index.js +4 -0
  213. package/dist/esm/transport/binary/tokens.js +1280 -0
  214. package/dist/esm/transport/index.js +6 -0
  215. package/dist/esm/transport/keepalive/WaKeepAlive.js +141 -0
  216. package/dist/esm/transport/node/WaNodeOrchestrator.js +143 -0
  217. package/dist/esm/transport/node/WaNodeTransport.js +64 -0
  218. package/dist/esm/transport/node/builders/accountSync.js +101 -0
  219. package/dist/esm/transport/node/builders/group.js +47 -0
  220. package/dist/esm/transport/node/builders/index.js +7 -0
  221. package/dist/esm/transport/node/builders/media.js +10 -0
  222. package/dist/esm/transport/node/builders/message.js +317 -0
  223. package/dist/esm/transport/node/builders/pairing.js +130 -0
  224. package/dist/esm/transport/node/builders/prekeys.js +102 -0
  225. package/dist/esm/transport/node/builders/retry.js +116 -0
  226. package/dist/esm/transport/node/helpers.js +37 -0
  227. package/dist/esm/transport/node/query.js +53 -0
  228. package/dist/esm/transport/node/xml.js +39 -0
  229. package/dist/esm/transport/noise/WaClientPayload.js +162 -0
  230. package/dist/esm/transport/noise/WaFrameCodec.js +121 -0
  231. package/dist/esm/transport/noise/WaNoiseCert.js +74 -0
  232. package/dist/esm/transport/noise/WaNoiseHandshake.js +57 -0
  233. package/dist/esm/transport/noise/WaNoiseSession.js +322 -0
  234. package/dist/esm/transport/noise/WaNoiseSocket.js +17 -0
  235. package/dist/esm/transport/noise/constants.js +8 -0
  236. package/dist/esm/transport/noise/types.js +1 -0
  237. package/dist/esm/transport/stream/parse.js +91 -0
  238. package/dist/esm/transport/types.js +1 -0
  239. package/dist/esm/util/async.js +5 -0
  240. package/dist/esm/util/base64.js +18 -0
  241. package/dist/esm/util/bytes.js +275 -0
  242. package/dist/esm/util/coercion.js +56 -0
  243. package/dist/esm/util/collections.js +27 -0
  244. package/dist/esm/util/primitives.js +32 -0
  245. package/dist/esm/util/runtime.js +15 -0
  246. package/dist/esm/util/signal-address.js +5 -0
  247. package/dist/index.js +52 -0
  248. package/dist/infra/log/ConsoleLogger.js +44 -0
  249. package/dist/infra/log/PinoLogger.js +111 -0
  250. package/dist/infra/log/types.js +2 -0
  251. package/dist/infra/perf/BoundedTaskQueue.js +67 -0
  252. package/dist/media/WaMediaCrypto.js +228 -0
  253. package/dist/media/WaMediaTransferClient.js +365 -0
  254. package/dist/media/conn.js +36 -0
  255. package/dist/media/constants.js +21 -0
  256. package/dist/media/index.js +9 -0
  257. package/dist/media/types.js +2 -0
  258. package/dist/message/WaMessageClient.js +214 -0
  259. package/dist/message/ack.js +52 -0
  260. package/dist/message/content.js +24 -0
  261. package/dist/message/device-sent.js +53 -0
  262. package/dist/message/incoming.js +321 -0
  263. package/dist/message/index.js +20 -0
  264. package/dist/message/padding.js +24 -0
  265. package/dist/message/phash.js +28 -0
  266. package/dist/message/types.js +2 -0
  267. package/dist/proto.js +5 -0
  268. package/dist/protocol/appstate.js +37 -0
  269. package/dist/protocol/auth.js +15 -0
  270. package/dist/protocol/browser.js +45 -0
  271. package/dist/protocol/constants.js +46 -0
  272. package/dist/protocol/defaults.js +30 -0
  273. package/dist/protocol/dirty.js +29 -0
  274. package/dist/protocol/group.js +8 -0
  275. package/dist/protocol/index.js +53 -0
  276. package/dist/protocol/jid.js +107 -0
  277. package/dist/protocol/media.js +24 -0
  278. package/dist/protocol/message.js +19 -0
  279. package/dist/protocol/nodes.js +86 -0
  280. package/dist/protocol/notification.js +53 -0
  281. package/dist/protocol/stream.js +63 -0
  282. package/dist/retry/constants.js +23 -0
  283. package/dist/retry/index.js +19 -0
  284. package/dist/retry/outbound.js +88 -0
  285. package/dist/retry/parse.js +133 -0
  286. package/dist/retry/reason.js +53 -0
  287. package/dist/retry/replay.js +181 -0
  288. package/dist/retry/types.js +2 -0
  289. package/dist/signal/api/SignalDeviceSyncApi.js +189 -0
  290. package/dist/signal/api/SignalDigestSyncApi.js +183 -0
  291. package/dist/signal/api/SignalIdentitySyncApi.js +115 -0
  292. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +145 -0
  293. package/dist/signal/api/SignalRotateKeyApi.js +63 -0
  294. package/dist/signal/api/SignalSessionSyncApi.js +191 -0
  295. package/dist/signal/api/codec.js +27 -0
  296. package/dist/signal/api/constants.js +12 -0
  297. package/dist/signal/api/prekeys.js +16 -0
  298. package/dist/signal/constants.js +19 -0
  299. package/dist/signal/crypto/WaAdvSignature.js +72 -0
  300. package/dist/signal/crypto/constants.js +11 -0
  301. package/dist/signal/group/SenderKeyChain.js +101 -0
  302. package/dist/signal/group/SenderKeyCodec.js +50 -0
  303. package/dist/signal/group/SenderKeyManager.js +180 -0
  304. package/dist/signal/index.js +29 -0
  305. package/dist/signal/registration/keygen.js +37 -0
  306. package/dist/signal/registration/utils.js +19 -0
  307. package/dist/signal/session/SignalProtocol.js +126 -0
  308. package/dist/signal/session/SignalRatchet.js +268 -0
  309. package/dist/signal/session/SignalSerializer.js +69 -0
  310. package/dist/signal/session/SignalSession.js +165 -0
  311. package/dist/signal/store/sqlite.js +324 -0
  312. package/dist/signal/types.js +2 -0
  313. package/dist/store/contracts/appstate.store.js +2 -0
  314. package/dist/store/contracts/auth.store.js +2 -0
  315. package/dist/store/contracts/contact.store.js +2 -0
  316. package/dist/store/contracts/device-list.store.js +2 -0
  317. package/dist/store/contracts/message.store.js +2 -0
  318. package/dist/store/contracts/participants.store.js +2 -0
  319. package/dist/store/contracts/retry.store.js +2 -0
  320. package/dist/store/contracts/sender-key.store.js +2 -0
  321. package/dist/store/contracts/signal.store.js +2 -0
  322. package/dist/store/contracts/thread.store.js +2 -0
  323. package/dist/store/createStore.js +281 -0
  324. package/dist/store/index.js +43 -0
  325. package/dist/store/noop.store.js +46 -0
  326. package/dist/store/providers/memory/appstate.store.js +105 -0
  327. package/dist/store/providers/memory/contact.store.js +27 -0
  328. package/dist/store/providers/memory/device-list.store.js +90 -0
  329. package/dist/store/providers/memory/message.store.js +44 -0
  330. package/dist/store/providers/memory/participants.store.js +65 -0
  331. package/dist/store/providers/memory/retry.store.js +75 -0
  332. package/dist/store/providers/memory/sender-key.store.js +92 -0
  333. package/dist/store/providers/memory/signal.store.js +174 -0
  334. package/dist/store/providers/memory/thread.store.js +38 -0
  335. package/dist/store/providers/sqlite/BaseSqliteStore.js +41 -0
  336. package/dist/store/providers/sqlite/appstate.store.js +173 -0
  337. package/dist/store/providers/sqlite/auth.store.js +180 -0
  338. package/dist/store/providers/sqlite/connection.js +276 -0
  339. package/dist/store/providers/sqlite/contact.store.js +65 -0
  340. package/dist/store/providers/sqlite/device-list.store.js +159 -0
  341. package/dist/store/providers/sqlite/message.store.js +123 -0
  342. package/dist/store/providers/sqlite/migrations.js +350 -0
  343. package/dist/store/providers/sqlite/participants.store.js +89 -0
  344. package/dist/store/providers/sqlite/retry.store.js +148 -0
  345. package/dist/store/providers/sqlite/sender-key.store.js +207 -0
  346. package/dist/store/providers/sqlite/signal.store.js +357 -0
  347. package/dist/store/providers/sqlite/thread.store.js +76 -0
  348. package/dist/store/types.js +2 -0
  349. package/dist/transport/WaComms.js +531 -0
  350. package/dist/transport/WaWebSocket.js +365 -0
  351. package/dist/transport/binary/constants.js +99 -0
  352. package/dist/transport/binary/decoder.js +279 -0
  353. package/dist/transport/binary/encoder.js +214 -0
  354. package/dist/transport/binary/index.js +23 -0
  355. package/dist/transport/binary/tokens.js +1283 -0
  356. package/dist/transport/index.js +18 -0
  357. package/dist/transport/keepalive/WaKeepAlive.js +145 -0
  358. package/dist/transport/node/WaNodeOrchestrator.js +147 -0
  359. package/dist/transport/node/WaNodeTransport.js +68 -0
  360. package/dist/transport/node/builders/accountSync.js +110 -0
  361. package/dist/transport/node/builders/group.js +52 -0
  362. package/dist/transport/node/builders/index.js +39 -0
  363. package/dist/transport/node/builders/media.js +13 -0
  364. package/dist/transport/node/builders/message.js +328 -0
  365. package/dist/transport/node/builders/pairing.js +137 -0
  366. package/dist/transport/node/builders/prekeys.js +107 -0
  367. package/dist/transport/node/builders/retry.js +119 -0
  368. package/dist/transport/node/helpers.js +46 -0
  369. package/dist/transport/node/query.js +59 -0
  370. package/dist/transport/node/xml.js +42 -0
  371. package/dist/transport/noise/WaClientPayload.js +166 -0
  372. package/dist/transport/noise/WaFrameCodec.js +125 -0
  373. package/dist/transport/noise/WaNoiseCert.js +77 -0
  374. package/dist/transport/noise/WaNoiseHandshake.js +61 -0
  375. package/dist/transport/noise/WaNoiseSession.js +326 -0
  376. package/dist/transport/noise/WaNoiseSocket.js +21 -0
  377. package/dist/transport/noise/constants.js +11 -0
  378. package/dist/transport/noise/types.js +2 -0
  379. package/dist/transport/stream/parse.js +97 -0
  380. package/dist/transport/types.js +2 -0
  381. package/dist/types/appstate/WaAppStateCrypto.d.ts +59 -0
  382. package/dist/types/appstate/WaAppStateSyncClient.d.ts +63 -0
  383. package/dist/types/appstate/WaAppStateSyncResponseParser.d.ts +12 -0
  384. package/dist/types/appstate/constants.d.ts +14 -0
  385. package/dist/types/appstate/index.d.ts +7 -0
  386. package/dist/types/appstate/store/sqlite.d.ts +21 -0
  387. package/dist/types/appstate/types.d.ts +66 -0
  388. package/dist/types/appstate/utils.d.ts +10 -0
  389. package/dist/types/auth/WaAuthClient.d.ts +61 -0
  390. package/dist/types/auth/flow/WaAuthCredentialsFlow.d.ts +14 -0
  391. package/dist/types/auth/index.d.ts +6 -0
  392. package/dist/types/auth/pairing/WaPairingCodeCrypto.d.ts +17 -0
  393. package/dist/types/auth/pairing/WaPairingFlow.d.ts +48 -0
  394. package/dist/types/auth/pairing/WaQrFlow.d.ts +23 -0
  395. package/dist/types/auth/pairing/constants.d.ts +2 -0
  396. package/dist/types/auth/types.d.ts +48 -0
  397. package/dist/types/client/WaClient.d.ts +97 -0
  398. package/dist/types/client/WaClientFactory.d.ts +83 -0
  399. package/dist/types/client/coordinators/WaGroupCoordinator.d.ts +48 -0
  400. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +60 -0
  401. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +90 -0
  402. package/dist/types/client/coordinators/WaPassiveTasksCoordinator.d.ts +43 -0
  403. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +61 -0
  404. package/dist/types/client/coordinators/WaStreamControlCoordinator.d.ts +17 -0
  405. package/dist/types/client/dirty.d.ts +17 -0
  406. package/dist/types/client/events/chat.d.ts +3 -0
  407. package/dist/types/client/events/group.d.ts +7 -0
  408. package/dist/types/client/history-sync.d.ts +17 -0
  409. package/dist/types/client/incoming.d.ts +35 -0
  410. package/dist/types/client/index.d.ts +2 -0
  411. package/dist/types/client/mailbox.d.ts +12 -0
  412. package/dist/types/client/messages.d.ts +17 -0
  413. package/dist/types/client/types.d.ts +235 -0
  414. package/dist/types/crypto/core/constants.d.ts +1 -0
  415. package/dist/types/crypto/core/encoding.d.ts +11 -0
  416. package/dist/types/crypto/core/hkdf.d.ts +8 -0
  417. package/dist/types/crypto/core/index.d.ts +11 -0
  418. package/dist/types/crypto/core/keys.d.ts +20 -0
  419. package/dist/types/crypto/core/nonce.d.ts +5 -0
  420. package/dist/types/crypto/core/primitives.d.ts +25 -0
  421. package/dist/types/crypto/core/random.d.ts +8 -0
  422. package/dist/types/crypto/curves/Ed25519.d.ts +7 -0
  423. package/dist/types/crypto/curves/X25519.d.ts +8 -0
  424. package/dist/types/crypto/curves/constants.d.ts +2 -0
  425. package/dist/types/crypto/curves/types.d.ts +10 -0
  426. package/dist/types/crypto/index.d.ts +3 -0
  427. package/dist/types/crypto/math/constants.d.ts +7 -0
  428. package/dist/types/crypto/math/edwards.d.ts +3 -0
  429. package/dist/types/crypto/math/le.d.ts +2 -0
  430. package/dist/types/crypto/math/mod.d.ts +5 -0
  431. package/dist/types/crypto/math/types.d.ts +6 -0
  432. package/dist/types/index.d.ts +10 -0
  433. package/dist/types/infra/log/ConsoleLogger.d.ts +11 -0
  434. package/dist/types/infra/log/PinoLogger.d.ts +30 -0
  435. package/dist/types/infra/log/types.d.ts +9 -0
  436. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +19 -0
  437. package/dist/types/media/WaMediaCrypto.d.ts +12 -0
  438. package/dist/types/media/WaMediaTransferClient.d.ts +81 -0
  439. package/dist/types/media/conn.d.ts +3 -0
  440. package/dist/types/media/constants.d.ts +10 -0
  441. package/dist/types/media/index.d.ts +4 -0
  442. package/dist/types/media/types.d.ts +56 -0
  443. package/dist/types/message/WaMessageClient.d.ts +29 -0
  444. package/dist/types/message/ack.d.ts +5 -0
  445. package/dist/types/message/content.d.ts +4 -0
  446. package/dist/types/message/device-sent.d.ts +3 -0
  447. package/dist/types/message/incoming.d.ts +18 -0
  448. package/dist/types/message/index.d.ts +2 -0
  449. package/dist/types/message/padding.d.ts +2 -0
  450. package/dist/types/message/phash.d.ts +1 -0
  451. package/dist/types/message/types.d.ts +58 -0
  452. package/dist/types/proto.d.ts +2 -0
  453. package/dist/types/protocol/appstate.d.ts +34 -0
  454. package/dist/types/protocol/auth.d.ts +12 -0
  455. package/dist/types/protocol/browser.d.ts +22 -0
  456. package/dist/types/protocol/constants.d.ts +11 -0
  457. package/dist/types/protocol/defaults.d.ts +26 -0
  458. package/dist/types/protocol/dirty.d.ts +15 -0
  459. package/dist/types/protocol/group.d.ts +6 -0
  460. package/dist/types/protocol/index.d.ts +11 -0
  461. package/dist/types/protocol/jid.d.ts +19 -0
  462. package/dist/types/protocol/media.d.ts +15 -0
  463. package/dist/types/protocol/message.d.ts +16 -0
  464. package/dist/types/protocol/nodes.d.ts +83 -0
  465. package/dist/types/protocol/notification.d.ts +50 -0
  466. package/dist/types/protocol/stream.d.ts +60 -0
  467. package/dist/types/retry/constants.d.ts +21 -0
  468. package/dist/types/retry/index.d.ts +7 -0
  469. package/dist/types/retry/outbound.d.ts +4 -0
  470. package/dist/types/retry/parse.d.ts +3 -0
  471. package/dist/types/retry/reason.d.ts +2 -0
  472. package/dist/types/retry/replay.d.ts +30 -0
  473. package/dist/types/retry/types.d.ts +70 -0
  474. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +31 -0
  475. package/dist/types/signal/api/SignalDigestSyncApi.d.ts +27 -0
  476. package/dist/types/signal/api/SignalIdentitySyncApi.d.ts +26 -0
  477. package/dist/types/signal/api/SignalMissingPreKeysSyncApi.d.ts +39 -0
  478. package/dist/types/signal/api/SignalRotateKeyApi.d.ts +22 -0
  479. package/dist/types/signal/api/SignalSessionSyncApi.d.ts +38 -0
  480. package/dist/types/signal/api/codec.d.ts +3 -0
  481. package/dist/types/signal/api/constants.d.ts +9 -0
  482. package/dist/types/signal/api/prekeys.d.ts +6 -0
  483. package/dist/types/signal/constants.d.ts +14 -0
  484. package/dist/types/signal/crypto/WaAdvSignature.d.ts +7 -0
  485. package/dist/types/signal/crypto/constants.d.ts +5 -0
  486. package/dist/types/signal/group/SenderKeyChain.d.ts +11 -0
  487. package/dist/types/signal/group/SenderKeyCodec.d.ts +14 -0
  488. package/dist/types/signal/group/SenderKeyManager.d.ts +22 -0
  489. package/dist/types/signal/index.d.ts +12 -0
  490. package/dist/types/signal/registration/keygen.d.ts +5 -0
  491. package/dist/types/signal/registration/utils.d.ts +9 -0
  492. package/dist/types/signal/session/SignalProtocol.d.ts +22 -0
  493. package/dist/types/signal/session/SignalRatchet.d.ts +25 -0
  494. package/dist/types/signal/session/SignalSerializer.d.ts +6 -0
  495. package/dist/types/signal/session/SignalSession.d.ts +43 -0
  496. package/dist/types/signal/store/sqlite.d.ts +72 -0
  497. package/dist/types/signal/types.d.ts +110 -0
  498. package/dist/types/store/contracts/appstate.store.d.ts +22 -0
  499. package/dist/types/store/contracts/auth.store.d.ts +6 -0
  500. package/dist/types/store/contracts/contact.store.d.ts +14 -0
  501. package/dist/types/store/contracts/device-list.store.d.ts +16 -0
  502. package/dist/types/store/contracts/message.store.d.ts +18 -0
  503. package/dist/types/store/contracts/participants.store.d.ts +14 -0
  504. package/dist/types/store/contracts/retry.store.d.ts +11 -0
  505. package/dist/types/store/contracts/sender-key.store.d.ts +16 -0
  506. package/dist/types/store/contracts/signal.store.d.ts +31 -0
  507. package/dist/types/store/contracts/thread.store.d.ts +17 -0
  508. package/dist/types/store/createStore.d.ts +2 -0
  509. package/dist/types/store/index.d.ts +31 -0
  510. package/dist/types/store/noop.store.d.ts +10 -0
  511. package/dist/types/store/providers/memory/appstate.store.d.ts +21 -0
  512. package/dist/types/store/providers/memory/contact.store.d.ts +13 -0
  513. package/dist/types/store/providers/memory/device-list.store.d.ts +20 -0
  514. package/dist/types/store/providers/memory/message.store.d.ts +14 -0
  515. package/dist/types/store/providers/memory/participants.store.d.ts +18 -0
  516. package/dist/types/store/providers/memory/retry.store.d.ts +18 -0
  517. package/dist/types/store/providers/memory/sender-key.store.d.ts +28 -0
  518. package/dist/types/store/providers/memory/signal.store.d.ts +51 -0
  519. package/dist/types/store/providers/memory/thread.store.d.ts +14 -0
  520. package/dist/types/store/providers/sqlite/BaseSqliteStore.d.ts +12 -0
  521. package/dist/types/store/providers/sqlite/appstate.store.d.ts +15 -0
  522. package/dist/types/store/providers/sqlite/auth.store.d.ts +10 -0
  523. package/dist/types/store/providers/sqlite/connection.d.ts +10 -0
  524. package/dist/types/store/providers/sqlite/contact.store.d.ts +10 -0
  525. package/dist/types/store/providers/sqlite/device-list.store.d.ts +18 -0
  526. package/dist/types/store/providers/sqlite/message.store.d.ts +11 -0
  527. package/dist/types/store/providers/sqlite/migrations.d.ts +3 -0
  528. package/dist/types/store/providers/sqlite/participants.store.d.ts +13 -0
  529. package/dist/types/store/providers/sqlite/retry.store.d.ts +16 -0
  530. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +25 -0
  531. package/dist/types/store/providers/sqlite/signal.store.d.ts +46 -0
  532. package/dist/types/store/providers/sqlite/thread.store.d.ts +11 -0
  533. package/dist/types/store/types.d.ts +103 -0
  534. package/dist/types/transport/WaComms.d.ts +61 -0
  535. package/dist/types/transport/WaWebSocket.d.ts +36 -0
  536. package/dist/types/transport/binary/constants.d.ts +49 -0
  537. package/dist/types/transport/binary/decoder.d.ts +3 -0
  538. package/dist/types/transport/binary/encoder.d.ts +3 -0
  539. package/dist/types/transport/binary/index.d.ts +4 -0
  540. package/dist/types/transport/binary/tokens.d.ts +11 -0
  541. package/dist/types/transport/index.d.ts +7 -0
  542. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +39 -0
  543. package/dist/types/transport/node/WaNodeOrchestrator.d.ts +28 -0
  544. package/dist/types/transport/node/WaNodeTransport.d.ts +22 -0
  545. package/dist/types/transport/node/builders/accountSync.d.ts +11 -0
  546. package/dist/types/transport/node/builders/group.d.ts +16 -0
  547. package/dist/types/transport/node/builders/index.d.ts +7 -0
  548. package/dist/types/transport/node/builders/media.d.ts +2 -0
  549. package/dist/types/transport/node/builders/message.d.ts +52 -0
  550. package/dist/types/transport/node/builders/pairing.d.ts +18 -0
  551. package/dist/types/transport/node/builders/prekeys.d.ts +5 -0
  552. package/dist/types/transport/node/builders/retry.d.ts +18 -0
  553. package/dist/types/transport/node/helpers.d.ts +8 -0
  554. package/dist/types/transport/node/query.d.ts +10 -0
  555. package/dist/types/transport/node/xml.d.ts +2 -0
  556. package/dist/types/transport/noise/WaClientPayload.d.ts +3 -0
  557. package/dist/types/transport/noise/WaFrameCodec.d.ts +9 -0
  558. package/dist/types/transport/noise/WaNoiseCert.d.ts +1 -0
  559. package/dist/types/transport/noise/WaNoiseHandshake.d.ts +14 -0
  560. package/dist/types/transport/noise/WaNoiseSession.d.ts +33 -0
  561. package/dist/types/transport/noise/WaNoiseSocket.d.ts +10 -0
  562. package/dist/types/transport/noise/constants.d.ts +7 -0
  563. package/dist/types/transport/noise/types.d.ts +23 -0
  564. package/dist/types/transport/stream/parse.d.ts +23 -0
  565. package/dist/types/transport/types.d.ts +71 -0
  566. package/dist/types/util/async.d.ts +1 -0
  567. package/dist/types/util/base64.d.ts +4 -0
  568. package/dist/types/util/bytes.d.ts +28 -0
  569. package/dist/types/util/coercion.d.ts +8 -0
  570. package/dist/types/util/collections.d.ts +3 -0
  571. package/dist/types/util/primitives.d.ts +7 -0
  572. package/dist/types/util/runtime.d.ts +2 -0
  573. package/dist/types/util/signal-address.d.ts +2 -0
  574. package/dist/util/async.js +8 -0
  575. package/dist/util/base64.js +24 -0
  576. package/dist/util/bytes.js +291 -0
  577. package/dist/util/coercion.js +66 -0
  578. package/dist/util/collections.js +32 -0
  579. package/dist/util/primitives.js +37 -0
  580. package/dist/util/runtime.js +19 -0
  581. package/dist/util/signal-address.js +8 -0
  582. package/package.json +150 -0
  583. package/proto/index.d.ts +10861 -0
  584. package/proto/index.js +1 -0
  585. package/scripts/check-node-version.cjs +55 -0
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseSyncResponse = parseSyncResponse;
4
+ exports.parseCollectionState = parseCollectionState;
5
+ const utils_1 = require("./utils");
6
+ const _proto_1 = require("../proto.js");
7
+ const constants_1 = require("../protocol/constants");
8
+ const helpers_1 = require("../transport/node/helpers");
9
+ function parseSyncResponse(iqNode) {
10
+ if (iqNode.tag !== constants_1.WA_NODE_TAGS.IQ) {
11
+ throw new Error(`invalid sync response tag ${iqNode.tag}`);
12
+ }
13
+ const syncNode = (0, helpers_1.findNodeChild)(iqNode, constants_1.WA_NODE_TAGS.SYNC);
14
+ if (!syncNode) {
15
+ throw new Error('sync response is missing <sync> node');
16
+ }
17
+ const payloads = [];
18
+ for (const collectionNode of (0, helpers_1.getNodeChildrenByTag)(syncNode, constants_1.WA_NODE_TAGS.COLLECTION)) {
19
+ const collection = (0, utils_1.parseCollectionName)(collectionNode.attrs.name);
20
+ if (!collection) {
21
+ throw new Error(`invalid app-state collection name: ${collectionNode.attrs.name}`);
22
+ }
23
+ const state = parseCollectionState(collectionNode);
24
+ const versionAttr = collectionNode.attrs.version;
25
+ let version;
26
+ if (versionAttr) {
27
+ const parsedVersion = Number.parseInt(versionAttr, 10);
28
+ if (!Number.isSafeInteger(parsedVersion) || parsedVersion < 0) {
29
+ throw new Error(`invalid app-state collection version "${versionAttr}"`);
30
+ }
31
+ version = parsedVersion;
32
+ }
33
+ const patchesNode = (0, helpers_1.findNodeChild)(collectionNode, constants_1.WA_NODE_TAGS.PATCHES);
34
+ const patches = patchesNode
35
+ ? (0, helpers_1.getNodeChildrenByTag)(patchesNode, constants_1.WA_NODE_TAGS.PATCH).map((node) => _proto_1.proto.SyncdPatch.decode((0, helpers_1.decodeNodeContentBase64OrBytes)(node.content, 'collection.patches.patch')))
36
+ : [];
37
+ const snapshotNode = (0, helpers_1.findNodeChild)(collectionNode, constants_1.WA_NODE_TAGS.SNAPSHOT);
38
+ const snapshotReference = snapshotNode
39
+ ? _proto_1.proto.ExternalBlobReference.decode((0, helpers_1.decodeNodeContentBase64OrBytes)(snapshotNode.content, 'collection.snapshot'))
40
+ : undefined;
41
+ payloads.push({
42
+ collection,
43
+ state,
44
+ version,
45
+ patches,
46
+ snapshotReference
47
+ });
48
+ }
49
+ return payloads;
50
+ }
51
+ function parseCollectionState(node) {
52
+ const type = node.attrs.type;
53
+ const hasMorePatches = node.attrs.has_more_patches === 'true';
54
+ if (type !== constants_1.WA_IQ_TYPES.ERROR) {
55
+ return hasMorePatches
56
+ ? constants_1.WA_APP_STATE_COLLECTION_STATES.SUCCESS_HAS_MORE
57
+ : constants_1.WA_APP_STATE_COLLECTION_STATES.SUCCESS;
58
+ }
59
+ const errorNode = (0, helpers_1.findNodeChild)(node, constants_1.WA_NODE_TAGS.ERROR);
60
+ const code = errorNode?.attrs.code;
61
+ if (code === constants_1.WA_APP_STATE_ERROR_CODES.CONFLICT) {
62
+ return hasMorePatches
63
+ ? constants_1.WA_APP_STATE_COLLECTION_STATES.CONFLICT_HAS_MORE
64
+ : constants_1.WA_APP_STATE_COLLECTION_STATES.CONFLICT;
65
+ }
66
+ if (code === constants_1.WA_APP_STATE_ERROR_CODES.BAD_REQUEST ||
67
+ code === constants_1.WA_APP_STATE_ERROR_CODES.NOT_FOUND) {
68
+ return constants_1.WA_APP_STATE_COLLECTION_STATES.ERROR_FATAL;
69
+ }
70
+ return constants_1.WA_APP_STATE_COLLECTION_STATES.ERROR_RETRY;
71
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.APP_STATE_DEFAULT_COLLECTIONS = exports.APP_STATE_EMPTY_LT_HASH = exports.APP_STATE_POINT_SIZE = exports.APP_STATE_LT_HASH_SIZE = exports.APP_STATE_IV_LENGTH = exports.APP_STATE_MAC_OCTET_LENGTH = exports.APP_STATE_VALUE_MAC_LENGTH = exports.APP_STATE_DERIVED_PATCH_MAC_KEY_END = exports.APP_STATE_DERIVED_SNAPSHOT_MAC_KEY_END = exports.APP_STATE_DERIVED_VALUE_MAC_KEY_END = exports.APP_STATE_DERIVED_VALUE_ENCRYPTION_KEY_END = exports.APP_STATE_DERIVED_INDEX_KEY_END = exports.APP_STATE_DERIVED_KEY_LENGTH = void 0;
4
+ const constants_1 = require("../protocol/constants");
5
+ exports.APP_STATE_DERIVED_KEY_LENGTH = 160;
6
+ exports.APP_STATE_DERIVED_INDEX_KEY_END = 32;
7
+ exports.APP_STATE_DERIVED_VALUE_ENCRYPTION_KEY_END = 64;
8
+ exports.APP_STATE_DERIVED_VALUE_MAC_KEY_END = 96;
9
+ exports.APP_STATE_DERIVED_SNAPSHOT_MAC_KEY_END = 128;
10
+ exports.APP_STATE_DERIVED_PATCH_MAC_KEY_END = 160;
11
+ exports.APP_STATE_VALUE_MAC_LENGTH = 32;
12
+ exports.APP_STATE_MAC_OCTET_LENGTH = 8;
13
+ exports.APP_STATE_IV_LENGTH = 16;
14
+ exports.APP_STATE_LT_HASH_SIZE = 128;
15
+ exports.APP_STATE_POINT_SIZE = 2;
16
+ exports.APP_STATE_EMPTY_LT_HASH = new Uint8Array(exports.APP_STATE_LT_HASH_SIZE);
17
+ exports.APP_STATE_DEFAULT_COLLECTIONS = [
18
+ constants_1.WA_APP_STATE_COLLECTIONS.CRITICAL_UNBLOCK_LOW,
19
+ constants_1.WA_APP_STATE_COLLECTIONS.CRITICAL_BLOCK,
20
+ constants_1.WA_APP_STATE_COLLECTIONS.REGULAR_LOW,
21
+ constants_1.WA_APP_STATE_COLLECTIONS.REGULAR,
22
+ constants_1.WA_APP_STATE_COLLECTIONS.REGULAR_HIGH
23
+ ];
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.WaAppStateSyncClient = exports.parseSyncResponse = exports.parseCollectionState = exports.WaAppStateMissingKeyError = exports.WaAppStateCrypto = void 0;
18
+ __exportStar(require("./constants"), exports);
19
+ __exportStar(require("./utils"), exports);
20
+ var WaAppStateCrypto_1 = require("./WaAppStateCrypto");
21
+ Object.defineProperty(exports, "WaAppStateCrypto", { enumerable: true, get: function () { return WaAppStateCrypto_1.WaAppStateCrypto; } });
22
+ var WaAppStateSyncClient_1 = require("./WaAppStateSyncClient");
23
+ Object.defineProperty(exports, "WaAppStateMissingKeyError", { enumerable: true, get: function () { return WaAppStateSyncClient_1.WaAppStateMissingKeyError; } });
24
+ var WaAppStateSyncResponseParser_1 = require("./WaAppStateSyncResponseParser");
25
+ Object.defineProperty(exports, "parseCollectionState", { enumerable: true, get: function () { return WaAppStateSyncResponseParser_1.parseCollectionState; } });
26
+ Object.defineProperty(exports, "parseSyncResponse", { enumerable: true, get: function () { return WaAppStateSyncResponseParser_1.parseSyncResponse; } });
27
+ var WaAppStateSyncClient_2 = require("./WaAppStateSyncClient");
28
+ Object.defineProperty(exports, "WaAppStateSyncClient", { enumerable: true, get: function () { return WaAppStateSyncClient_2.WaAppStateSyncClient; } });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeAppStateFingerprint = encodeAppStateFingerprint;
4
+ exports.decodeAppStateFingerprint = decodeAppStateFingerprint;
5
+ exports.decodeAppStateSyncKeys = decodeAppStateSyncKeys;
6
+ exports.decodeAppStateCollections = decodeAppStateCollections;
7
+ const _proto_1 = require("../../proto.js");
8
+ const coercion_1 = require("../../util/coercion");
9
+ function encodeAppStateFingerprint(fingerprint) {
10
+ if (!fingerprint) {
11
+ return null;
12
+ }
13
+ return _proto_1.proto.Message.AppStateSyncKeyFingerprint.encode(fingerprint).finish();
14
+ }
15
+ function decodeAppStateFingerprint(raw) {
16
+ const bytes = (0, coercion_1.asOptionalBytes)(raw, 'appstate_sync_keys.fingerprint');
17
+ if (!bytes) {
18
+ return undefined;
19
+ }
20
+ try {
21
+ return _proto_1.proto.Message.AppStateSyncKeyFingerprint.decode(bytes);
22
+ }
23
+ catch (error) {
24
+ const reason = error instanceof Error ? error.message : String(error);
25
+ throw new Error(`invalid appstate_sync_keys.fingerprint protobuf payload: ${reason}`);
26
+ }
27
+ }
28
+ function decodeAppStateSyncKeys(rows) {
29
+ return rows.map((row) => ({
30
+ keyId: (0, coercion_1.asBytes)(row.key_id, 'appstate_sync_keys.key_id'),
31
+ keyData: (0, coercion_1.asBytes)(row.key_data, 'appstate_sync_keys.key_data'),
32
+ timestamp: (0, coercion_1.asNumber)(row.timestamp, 'appstate_sync_keys.timestamp'),
33
+ fingerprint: decodeAppStateFingerprint(row.fingerprint)
34
+ }));
35
+ }
36
+ function decodeAppStateCollections(versionRows, valueRows) {
37
+ const valueMapByCollection = new Map();
38
+ for (const row of valueRows) {
39
+ const collection = (0, coercion_1.asString)(row.collection, 'appstate_collection_index_values.collection');
40
+ const byIndex = valueMapByCollection.get(collection) ?? {};
41
+ byIndex[(0, coercion_1.asString)(row.index_mac_hex, 'appstate_collection_index_values.index_mac_hex')] =
42
+ (0, coercion_1.asBytes)(row.value_mac, 'appstate_collection_index_values.value_mac');
43
+ valueMapByCollection.set(collection, byIndex);
44
+ }
45
+ const collections = {};
46
+ for (const row of versionRows) {
47
+ const collection = (0, coercion_1.asString)(row.collection, 'appstate_collection_versions.collection');
48
+ collections[collection] = {
49
+ version: (0, coercion_1.asNumber)(row.version, 'appstate_collection_versions.version'),
50
+ hash: (0, coercion_1.asBytes)(row.hash, 'appstate_collection_versions.hash'),
51
+ indexValueMap: valueMapByCollection.get(collection) ?? {}
52
+ };
53
+ }
54
+ return collections;
55
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keyIdToHex = keyIdToHex;
4
+ exports.parseCollectionName = parseCollectionName;
5
+ exports.keyDeviceId = keyDeviceId;
6
+ exports.keyEpoch = keyEpoch;
7
+ exports.pickActiveSyncKey = pickActiveSyncKey;
8
+ exports.toNetworkOrder64 = toNetworkOrder64;
9
+ exports.downloadExternalBlobReference = downloadExternalBlobReference;
10
+ const constants_1 = require("../protocol/constants");
11
+ const base64_1 = require("../util/base64");
12
+ const bytes_1 = require("../util/bytes");
13
+ function keyIdToHex(keyId) {
14
+ return (0, bytes_1.bytesToHex)(keyId);
15
+ }
16
+ function parseCollectionName(value) {
17
+ if (!value) {
18
+ return null;
19
+ }
20
+ for (const collection of Object.values(constants_1.WA_APP_STATE_COLLECTIONS)) {
21
+ if (collection === value) {
22
+ return collection;
23
+ }
24
+ }
25
+ return null;
26
+ }
27
+ function keyDeviceId(keyId) {
28
+ if (keyId.byteLength < 6) {
29
+ return null;
30
+ }
31
+ return (keyId[0] << 8) | keyId[1];
32
+ }
33
+ function keyEpoch(keyId) {
34
+ if (keyId.byteLength < 6) {
35
+ return -1;
36
+ }
37
+ return new DataView(keyId.buffer, keyId.byteOffset, keyId.byteLength).getUint32(2, false);
38
+ }
39
+ function pickActiveSyncKey(keys) {
40
+ let active = null;
41
+ for (const key of keys) {
42
+ if (!active) {
43
+ active = key;
44
+ continue;
45
+ }
46
+ const currentEpoch = keyEpoch(active.keyId);
47
+ const nextEpoch = keyEpoch(key.keyId);
48
+ if (nextEpoch > currentEpoch) {
49
+ active = key;
50
+ continue;
51
+ }
52
+ if (nextEpoch < currentEpoch) {
53
+ continue;
54
+ }
55
+ const nextDeviceId = keyDeviceId(key.keyId);
56
+ const currentDeviceId = keyDeviceId(active.keyId);
57
+ if (nextDeviceId !== null && currentDeviceId !== null && nextDeviceId < currentDeviceId) {
58
+ active = key;
59
+ }
60
+ }
61
+ return active;
62
+ }
63
+ function toNetworkOrder64(value) {
64
+ const out = new Uint8Array(8);
65
+ const view = new DataView(out.buffer);
66
+ view.setUint32(0, Math.floor(value / 4294967296), false);
67
+ view.setUint32(4, value >>> 0, false);
68
+ return out;
69
+ }
70
+ async function downloadExternalBlobReference(mediaTransfer, reference) {
71
+ if (!reference.directPath) {
72
+ throw new Error('external blob reference is missing directPath');
73
+ }
74
+ const mediaKey = (0, base64_1.decodeProtoBytes)(reference.mediaKey, 'external blob mediaKey');
75
+ const fileSha256 = (0, base64_1.decodeProtoBytes)(reference.fileSha256, 'external blob fileSha256');
76
+ const fileEncSha256 = (0, base64_1.decodeProtoBytes)(reference.fileEncSha256, 'external blob fileEncSha256');
77
+ return mediaTransfer.downloadAndDecrypt({
78
+ directPath: reference.directPath,
79
+ mediaType: constants_1.WA_APP_STATE_KEY_TYPES.MD_APP_STATE,
80
+ mediaKey,
81
+ fileSha256,
82
+ fileEncSha256
83
+ });
84
+ }
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WaAuthClient = void 0;
4
+ const WaAuthCredentialsFlow_1 = require("./flow/WaAuthCredentialsFlow");
5
+ const WaPairingFlow_1 = require("./pairing/WaPairingFlow");
6
+ const WaQrFlow_1 = require("./pairing/WaQrFlow");
7
+ const constants_1 = require("../protocol/constants");
8
+ const bytes_1 = require("../util/bytes");
9
+ const primitives_1 = require("../util/primitives");
10
+ const runtime_1 = require("../util/runtime");
11
+ class WaAuthClient {
12
+ constructor(options, deps) {
13
+ const deviceBrowser = options.deviceBrowser ?? constants_1.WA_DEFAULTS.DEVICE_BROWSER;
14
+ const device = Object.freeze({
15
+ browser: deviceBrowser,
16
+ osDisplayName: options.deviceOsDisplayName ?? (0, runtime_1.getRuntimeOsDisplayName)(),
17
+ platform: options.devicePlatform ?? (0, constants_1.getWaCompanionPlatformId)(deviceBrowser)
18
+ });
19
+ this.options = Object.freeze({
20
+ ...options,
21
+ deviceBrowser: device.browser,
22
+ deviceOsDisplayName: device.osDisplayName,
23
+ devicePlatform: device.platform,
24
+ requireFullSync: options.requireFullSync
25
+ });
26
+ this.logger = deps.logger;
27
+ this.callbacks = deps.callbacks ?? {};
28
+ this.authStore = deps.authStore;
29
+ this.signalStore = deps.signalStore;
30
+ this.credentials = null;
31
+ this.qrFlow = new WaQrFlow_1.WaQrFlow({
32
+ logger: this.logger,
33
+ getCredentials: () => this.credentials,
34
+ getDevicePlatform: () => device.platform,
35
+ emitQr: (qr, ttlMs) => this.callbacks.onQr?.(qr, ttlMs)
36
+ });
37
+ this.pairingFlow = new WaPairingFlow_1.WaPairingFlow({
38
+ logger: this.logger,
39
+ auth: {
40
+ getCredentials: () => this.credentials,
41
+ updateCredentials: this.updateCredentials.bind(this)
42
+ },
43
+ socket: deps.socket,
44
+ qrFlow: this.qrFlow,
45
+ device,
46
+ callbacks: {
47
+ emitPairingCode: (code) => this.callbacks.onPairingCode?.(code),
48
+ emitPairingRefresh: (forceManual) => this.callbacks.onPairingRefresh?.(forceManual),
49
+ emitPaired: (credentials) => this.callbacks.onPaired?.(credentials)
50
+ }
51
+ });
52
+ }
53
+ getState(connected = false) {
54
+ return {
55
+ connected,
56
+ registered: this.credentials?.meJid !== null && this.credentials?.meJid !== undefined,
57
+ hasQr: this.qrFlow.hasQr(),
58
+ hasPairingCode: this.pairingFlow.hasPairingSession()
59
+ };
60
+ }
61
+ getCurrentCredentials() {
62
+ return this.credentials;
63
+ }
64
+ async loadOrCreateCredentials() {
65
+ return this.runHandled(async () => {
66
+ this.logger.debug('auth client loadOrCreateCredentials start');
67
+ this.credentials = await (0, WaAuthCredentialsFlow_1.loadOrCreateCredentials)({
68
+ logger: this.logger,
69
+ authStore: this.authStore,
70
+ signalStore: this.signalStore
71
+ });
72
+ this.logger.info('auth client credentials ready', {
73
+ registered: this.credentials.meJid !== null && this.credentials.meJid !== undefined
74
+ });
75
+ return this.credentials;
76
+ });
77
+ }
78
+ buildCommsConfig(socketOptions) {
79
+ this.logger.trace('auth client building comms config');
80
+ return (0, WaAuthCredentialsFlow_1.buildCommsConfig)(this.logger, this.requireCredentials(), socketOptions, {
81
+ deviceBrowser: this.options.deviceBrowser,
82
+ deviceOsDisplayName: this.options.deviceOsDisplayName,
83
+ requireFullSync: this.options.requireFullSync
84
+ });
85
+ }
86
+ async clearTransientState() {
87
+ this.logger.trace('auth client clear transient state');
88
+ this.qrFlow.clear();
89
+ this.pairingFlow.clearSession();
90
+ }
91
+ async clearStoredCredentials() {
92
+ this.logger.warn('auth client clearing stored credentials');
93
+ await this.authStore.clear();
94
+ this.credentials = null;
95
+ await this.clearTransientState();
96
+ }
97
+ async persistServerStaticKey(serverStaticKey) {
98
+ this.logger.debug('persisting server static key', {
99
+ keyLength: serverStaticKey.byteLength
100
+ });
101
+ await this.patchCredentials((credentials) => ({
102
+ ...credentials,
103
+ serverStaticKey
104
+ }));
105
+ }
106
+ async persistServerHasPreKeys(serverHasPreKeys) {
107
+ await this.patchCredentials((credentials) => ({
108
+ ...credentials,
109
+ serverHasPreKeys
110
+ }), {
111
+ shouldPersist: (current) => current.serverHasPreKeys !== serverHasPreKeys,
112
+ onPersist: () => {
113
+ this.logger.debug('persisting serverHasPreKeys', {
114
+ serverHasPreKeys
115
+ });
116
+ }
117
+ });
118
+ }
119
+ async persistRoutingInfo(routingInfo) {
120
+ this.logger.trace('persisting routing info', {
121
+ byteLength: routingInfo.byteLength
122
+ });
123
+ await this.patchCredentials((credentials) => ({
124
+ ...credentials,
125
+ routingInfo
126
+ }), {
127
+ shouldPersist: (current) => {
128
+ if (current.routingInfo && (0, bytes_1.uint8Equal)(current.routingInfo, routingInfo)) {
129
+ this.logger.trace('routing info unchanged, skipping persistence');
130
+ return false;
131
+ }
132
+ return true;
133
+ }
134
+ });
135
+ }
136
+ async clearRoutingInfo() {
137
+ return this.patchCredentials((credentials) => ({
138
+ ...credentials,
139
+ routingInfo: undefined
140
+ }), {
141
+ shouldPersist: (current) => current.routingInfo !== undefined,
142
+ onPersist: () => {
143
+ this.logger.warn('clearing persisted routing info');
144
+ }
145
+ });
146
+ }
147
+ async persistMeLid(meLid) {
148
+ await this.persistSuccessAttributes({
149
+ meLid
150
+ });
151
+ }
152
+ async persistSuccessAttributes(attributes) {
153
+ let changes = {};
154
+ await this.patchCredentials((credentials) => {
155
+ const nextMeLid = attributes.meLid ?? credentials.meLid;
156
+ const nextMeDisplayName = attributes.meDisplayName ?? credentials.meDisplayName;
157
+ const nextCompanionEncStatic = attributes.companionEncStatic ?? credentials.companionEncStatic;
158
+ const nextLastSuccessTs = attributes.lastSuccessTs ?? credentials.lastSuccessTs;
159
+ const nextPropsVersion = attributes.propsVersion ?? credentials.propsVersion;
160
+ const nextAbPropsVersion = attributes.abPropsVersion ?? credentials.abPropsVersion;
161
+ const nextConnectionLocation = attributes.connectionLocation ?? credentials.connectionLocation;
162
+ const nextAccountCreationTs = attributes.accountCreationTs ?? credentials.accountCreationTs;
163
+ changes = {
164
+ lidChanged: nextMeLid !== credentials.meLid,
165
+ displayNameChanged: nextMeDisplayName !== credentials.meDisplayName,
166
+ companionChanged: (credentials.companionEncStatic === undefined) !==
167
+ (nextCompanionEncStatic === undefined) ||
168
+ (credentials.companionEncStatic !== undefined &&
169
+ nextCompanionEncStatic !== undefined &&
170
+ !(0, bytes_1.uint8Equal)(credentials.companionEncStatic, nextCompanionEncStatic)),
171
+ lastSuccessTsChanged: nextLastSuccessTs !== credentials.lastSuccessTs,
172
+ propsVersionChanged: nextPropsVersion !== credentials.propsVersion,
173
+ abPropsVersionChanged: nextAbPropsVersion !== credentials.abPropsVersion,
174
+ connectionLocationChanged: nextConnectionLocation !== credentials.connectionLocation,
175
+ accountCreationTsChanged: nextAccountCreationTs !== credentials.accountCreationTs
176
+ };
177
+ return {
178
+ ...credentials,
179
+ meLid: nextMeLid,
180
+ meDisplayName: nextMeDisplayName,
181
+ companionEncStatic: nextCompanionEncStatic,
182
+ lastSuccessTs: nextLastSuccessTs,
183
+ propsVersion: nextPropsVersion,
184
+ abPropsVersion: nextAbPropsVersion,
185
+ connectionLocation: nextConnectionLocation,
186
+ accountCreationTs: nextAccountCreationTs
187
+ };
188
+ }, {
189
+ shouldPersist: () => Object.values(changes).some(Boolean),
190
+ onPersist: () => {
191
+ this.logger.debug('persisting success attributes', changes);
192
+ }
193
+ });
194
+ }
195
+ async requestPairingCode(phoneNumber, shouldShowPushNotification = false) {
196
+ this.requireCredentials();
197
+ this.logger.info('auth client requesting pairing code');
198
+ return this.runHandled(() => this.pairingFlow.requestPairingCode(phoneNumber, shouldShowPushNotification));
199
+ }
200
+ async fetchPairingCountryCodeIso() {
201
+ this.requireCredentials();
202
+ this.logger.trace('auth client fetching pairing country code ISO');
203
+ return this.runHandled(() => this.pairingFlow.fetchPairingCountryCodeIso());
204
+ }
205
+ async handleIncomingIqSet(node) {
206
+ return this.runHandled(async () => {
207
+ this.logger.trace('auth client handleIncomingIqSet', { id: node.attrs.id });
208
+ return this.pairingFlow.handleIncomingIqSet(node);
209
+ });
210
+ }
211
+ async handleLinkCodeNotification(node) {
212
+ return this.runHandled(async () => {
213
+ this.logger.trace('auth client handleLinkCodeNotification', { id: node.attrs.id });
214
+ return this.pairingFlow.handleLinkCodeNotification(node);
215
+ });
216
+ }
217
+ async handleCompanionRegRefreshNotification(node) {
218
+ return this.runHandled(async () => {
219
+ this.logger.trace('auth client handleCompanionRegRefreshNotification', {
220
+ id: node.attrs.id
221
+ });
222
+ return this.pairingFlow.handleCompanionRegRefreshNotification(node);
223
+ });
224
+ }
225
+ async patchCredentials(buildNext, options = {}) {
226
+ const current = this.requireCredentials();
227
+ const next = buildNext(current);
228
+ if (options.shouldPersist && !options.shouldPersist(current, next)) {
229
+ return current;
230
+ }
231
+ options.onPersist?.(current, next);
232
+ await this.updateCredentials(next);
233
+ return next;
234
+ }
235
+ async runHandled(action) {
236
+ try {
237
+ return await action();
238
+ }
239
+ catch (error) {
240
+ this.handleError((0, primitives_1.toError)(error));
241
+ throw error;
242
+ }
243
+ }
244
+ async updateCredentials(credentials) {
245
+ this.logger.trace('auth client update credentials', {
246
+ registered: credentials.meJid !== null && credentials.meJid !== undefined
247
+ });
248
+ this.credentials = credentials;
249
+ await (0, WaAuthCredentialsFlow_1.persistCredentials)({
250
+ logger: this.logger,
251
+ authStore: this.authStore,
252
+ signalStore: this.signalStore
253
+ }, credentials);
254
+ }
255
+ requireCredentials() {
256
+ if (!this.credentials) {
257
+ throw new Error('credentials are not initialized');
258
+ }
259
+ return this.credentials;
260
+ }
261
+ handleError(error) {
262
+ this.logger.error('wa auth client error', { message: error.message });
263
+ this.callbacks.onError?.(error);
264
+ }
265
+ }
266
+ exports.WaAuthClient = WaAuthClient;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadOrCreateCredentials = loadOrCreateCredentials;
4
+ exports.persistCredentials = persistCredentials;
5
+ exports.buildCommsConfig = buildCommsConfig;
6
+ const _crypto_1 = require("../../crypto/index.js");
7
+ const keys_1 = require("../../crypto/core/keys");
8
+ const X25519_1 = require("../../crypto/curves/X25519");
9
+ const jid_1 = require("../../protocol/jid");
10
+ const WaAdvSignature_1 = require("../../signal/crypto/WaAdvSignature");
11
+ const utils_1 = require("../../signal/registration/utils");
12
+ const primitives_1 = require("../../util/primitives");
13
+ async function loadOrCreateCredentials(args) {
14
+ args.logger.trace('auth credentials loadOrCreate start');
15
+ const existing = await args.authStore.load();
16
+ if (!existing) {
17
+ const credentials = await createAndPersistFreshCredentials(args);
18
+ args.logger.info('created fresh auth credentials');
19
+ return credentials;
20
+ }
21
+ args.logger.debug('auth credentials loaded from store', {
22
+ registered: existing.meJid !== null && existing.meJid !== undefined,
23
+ hasServerStaticKey: existing.serverStaticKey !== null && existing.serverStaticKey !== undefined
24
+ });
25
+ if (!existing.meJid && !(await hasValidSignedPreKey(args.logger, existing))) {
26
+ args.logger.warn('signed pre-key is invalid, regenerating credentials');
27
+ const fresh = await createAndPersistFreshCredentials(args);
28
+ args.logger.info('regenerated credentials due to invalid signed pre-key');
29
+ return fresh;
30
+ }
31
+ await restoreSignalStore(args.signalStore, existing);
32
+ args.logger.trace('auth credentials restored into signal store');
33
+ return existing;
34
+ }
35
+ async function persistCredentials(args, credentials) {
36
+ args.logger.trace('persisting auth credentials', {
37
+ registered: credentials.meJid !== null && credentials.meJid !== undefined
38
+ });
39
+ await args.authStore.save(credentials);
40
+ }
41
+ function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
42
+ const registered = credentials.meJid !== null && credentials.meJid !== undefined;
43
+ const loginIdentity = registered ? (0, jid_1.getLoginIdentity)(credentials.meJid) : null;
44
+ logger.debug('building comms config from credentials', {
45
+ registered,
46
+ hasServerStaticKey: credentials.serverStaticKey !== null && credentials.serverStaticKey !== undefined
47
+ });
48
+ return {
49
+ url: socketOptions.url,
50
+ urls: socketOptions.urls,
51
+ protocols: socketOptions.protocols,
52
+ connectTimeoutMs: socketOptions.connectTimeoutMs,
53
+ reconnectIntervalMs: socketOptions.reconnectIntervalMs,
54
+ timeoutIntervalMs: socketOptions.timeoutIntervalMs,
55
+ maxReconnectAttempts: socketOptions.maxReconnectAttempts,
56
+ noise: {
57
+ clientStaticKeyPair: credentials.noiseKeyPair,
58
+ isRegistered: registered,
59
+ serverStaticKey: credentials.serverStaticKey,
60
+ routingInfo: credentials.routingInfo,
61
+ loginPayloadConfig: loginIdentity
62
+ ? {
63
+ username: loginIdentity.username,
64
+ device: loginIdentity.device,
65
+ deviceBrowser: clientOptions.deviceBrowser,
66
+ deviceOsDisplayName: clientOptions.deviceOsDisplayName
67
+ }
68
+ : undefined,
69
+ registrationPayloadConfig: !loginIdentity
70
+ ? {
71
+ registrationInfo: credentials.registrationInfo,
72
+ signedPreKey: credentials.signedPreKey,
73
+ deviceBrowser: clientOptions.deviceBrowser,
74
+ deviceOsDisplayName: clientOptions.deviceOsDisplayName,
75
+ requireFullSync: clientOptions.requireFullSync
76
+ }
77
+ : undefined
78
+ }
79
+ };
80
+ }
81
+ async function createFreshCredentials(signalStore, logger) {
82
+ logger.trace('creating fresh credentials');
83
+ const [noiseKeyPair, registrationBundle, advSecretKey] = await Promise.all([
84
+ X25519_1.X25519.generateKeyPair(),
85
+ (0, utils_1.createAndStoreInitialKeys)(signalStore),
86
+ (0, _crypto_1.randomBytesAsync)(32)
87
+ ]);
88
+ return {
89
+ noiseKeyPair,
90
+ registrationInfo: registrationBundle.registrationInfo,
91
+ signedPreKey: registrationBundle.signedPreKey,
92
+ serverHasPreKeys: false,
93
+ advSecretKey
94
+ };
95
+ }
96
+ async function createAndPersistFreshCredentials(args) {
97
+ const credentials = await createFreshCredentials(args.signalStore, args.logger);
98
+ await persistFreshCredentials(args, credentials);
99
+ return credentials;
100
+ }
101
+ async function hasValidSignedPreKey(logger, credentials) {
102
+ try {
103
+ const serializedPubKey = (0, keys_1.toSerializedPubKey)(credentials.signedPreKey.keyPair.pubKey);
104
+ const valid = await (0, WaAdvSignature_1.verifySignalSignature)(credentials.registrationInfo.identityKeyPair.pubKey, serializedPubKey, credentials.signedPreKey.signature);
105
+ logger.trace('signed pre-key validation completed', { valid });
106
+ return valid;
107
+ }
108
+ catch (error) {
109
+ logger.warn('signed pre-key validation failed with exception', {
110
+ message: (0, primitives_1.toError)(error).message
111
+ });
112
+ return false;
113
+ }
114
+ }
115
+ async function restoreSignalStore(signalStore, credentials) {
116
+ await signalStore.setRegistrationInfo(credentials.registrationInfo);
117
+ await signalStore.setSignedPreKey(credentials.signedPreKey);
118
+ await signalStore.setServerHasPreKeys(credentials.serverHasPreKeys === true);
119
+ }
120
+ async function persistFreshCredentials(args, credentials) {
121
+ await args.authStore.save(credentials);
122
+ await restoreSignalStore(args.signalStore, credentials);
123
+ }