zapo-js 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +12 -7
  2. package/dist/appstate/WaAppStateCrypto.js +18 -25
  3. package/dist/appstate/WaAppStateSyncClient.js +181 -114
  4. package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
  5. package/dist/appstate/constants.js +4 -3
  6. package/dist/appstate/utils.js +10 -30
  7. package/dist/auth/WaAuthClient.js +48 -55
  8. package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
  9. package/dist/auth/index.js +1 -3
  10. package/dist/auth/pairing/WaPairingFlow.js +21 -23
  11. package/dist/auth/pairing/WaQrFlow.js +37 -24
  12. package/dist/client/WaClient.js +103 -276
  13. package/dist/client/WaClientFactory.js +227 -110
  14. package/dist/client/connection/WaConnectionManager.js +292 -0
  15. package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
  16. package/dist/client/connection/WaReceiptQueue.js +51 -0
  17. package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
  18. package/dist/client/coordinators/WaGroupCoordinator.js +27 -17
  19. package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  20. package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
  21. package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
  22. package/dist/client/dirty.js +35 -29
  23. package/dist/client/events/chat.js +4 -3
  24. package/dist/client/events/group.js +59 -36
  25. package/dist/client/history-sync.js +53 -63
  26. package/dist/client/incoming.js +23 -20
  27. package/dist/client/mailbox.js +8 -8
  28. package/dist/client/messages.js +4 -4
  29. package/dist/client/messaging/fanout.js +189 -0
  30. package/dist/client/messaging/key-protocol.js +130 -0
  31. package/dist/client/messaging/participants.js +191 -0
  32. package/dist/crypto/core/hkdf.js +3 -8
  33. package/dist/crypto/core/index.js +1 -4
  34. package/dist/crypto/core/keys.js +2 -3
  35. package/dist/crypto/core/primitives.js +12 -15
  36. package/dist/crypto/core/random.js +7 -26
  37. package/dist/crypto/curves/Ed25519.js +7 -8
  38. package/dist/crypto/curves/X25519.js +13 -16
  39. package/dist/crypto/index.js +0 -5
  40. package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
  41. package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
  42. package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
  43. package/dist/esm/appstate/constants.js +3 -2
  44. package/dist/esm/appstate/utils.js +8 -27
  45. package/dist/esm/auth/WaAuthClient.js +48 -55
  46. package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
  47. package/dist/esm/auth/index.js +0 -1
  48. package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
  49. package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
  50. package/dist/esm/client/WaClient.js +103 -276
  51. package/dist/esm/client/WaClientFactory.js +227 -110
  52. package/dist/esm/client/connection/WaConnectionManager.js +288 -0
  53. package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
  54. package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
  55. package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
  56. package/dist/esm/client/coordinators/WaGroupCoordinator.js +20 -10
  57. package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
  58. package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
  59. package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
  60. package/dist/esm/client/dirty.js +30 -24
  61. package/dist/esm/client/events/chat.js +4 -3
  62. package/dist/esm/client/events/group.js +50 -28
  63. package/dist/esm/client/history-sync.js +50 -60
  64. package/dist/esm/client/incoming.js +23 -20
  65. package/dist/esm/client/mailbox.js +8 -8
  66. package/dist/esm/client/messages.js +1 -1
  67. package/dist/esm/client/messaging/fanout.js +186 -0
  68. package/dist/esm/client/messaging/key-protocol.js +127 -0
  69. package/dist/esm/client/messaging/participants.js +188 -0
  70. package/dist/esm/crypto/core/hkdf.js +3 -8
  71. package/dist/esm/crypto/core/index.js +0 -1
  72. package/dist/esm/crypto/core/keys.js +2 -3
  73. package/dist/esm/crypto/core/primitives.js +12 -15
  74. package/dist/esm/crypto/core/random.js +6 -25
  75. package/dist/esm/crypto/curves/Ed25519.js +4 -5
  76. package/dist/esm/crypto/curves/X25519.js +10 -13
  77. package/dist/esm/crypto/index.js +0 -2
  78. package/dist/esm/infra/log/ConsoleLogger.js +18 -17
  79. package/dist/esm/infra/log/PinoLogger.js +15 -9
  80. package/dist/esm/infra/log/types.js +11 -1
  81. package/dist/esm/infra/perf/BoundedTaskQueue.js +13 -17
  82. package/dist/esm/media/WaMediaCrypto.js +2 -4
  83. package/dist/esm/media/WaMediaTransferClient.js +226 -58
  84. package/dist/esm/media/conn.js +10 -6
  85. package/dist/esm/media/constants.js +4 -1
  86. package/dist/esm/message/WaMessageClient.js +4 -13
  87. package/dist/esm/message/ack.js +6 -6
  88. package/dist/esm/message/addon-crypto.js +59 -0
  89. package/dist/esm/message/incoming.js +106 -111
  90. package/dist/esm/message/index.js +2 -0
  91. package/dist/esm/message/reporting-token.js +438 -0
  92. package/dist/esm/message/use-case-secret.js +49 -0
  93. package/dist/esm/protocol/appstate.js +58 -0
  94. package/dist/esm/protocol/constants.js +2 -1
  95. package/dist/esm/protocol/index.js +2 -10
  96. package/dist/esm/protocol/jid.js +63 -51
  97. package/dist/esm/protocol/media.js +3 -3
  98. package/dist/esm/protocol/nodes.js +2 -0
  99. package/dist/esm/protocol/usync.js +11 -0
  100. package/dist/esm/retry/index.js +1 -0
  101. package/dist/esm/retry/outbound.js +4 -5
  102. package/dist/esm/retry/parse.js +58 -76
  103. package/dist/esm/retry/replay.js +48 -49
  104. package/dist/esm/retry/tracker.js +56 -0
  105. package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
  106. package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
  107. package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
  108. package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
  109. package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
  110. package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
  111. package/dist/esm/signal/group/SenderKeyChain.js +28 -23
  112. package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
  113. package/dist/esm/signal/group/SenderKeyManager.js +26 -16
  114. package/dist/esm/signal/index.js +1 -0
  115. package/dist/esm/signal/session/SignalProtocol.js +49 -14
  116. package/dist/esm/signal/session/SignalRatchet.js +24 -15
  117. package/dist/esm/signal/session/SignalSession.js +14 -9
  118. package/dist/esm/signal/session/resolver.js +186 -0
  119. package/dist/esm/signal/store/sqlite.js +16 -37
  120. package/dist/esm/store/createStore.js +16 -18
  121. package/dist/esm/store/noop.store.js +3 -6
  122. package/dist/esm/store/providers/memory/appstate.store.js +30 -6
  123. package/dist/esm/store/providers/memory/contact.store.js +5 -0
  124. package/dist/esm/store/providers/memory/device-list.store.js +3 -30
  125. package/dist/esm/store/providers/memory/message.store.js +11 -5
  126. package/dist/esm/store/providers/memory/participants.store.js +1 -8
  127. package/dist/esm/store/providers/memory/sender-key.store.js +5 -7
  128. package/dist/esm/store/providers/memory/signal.store.js +13 -1
  129. package/dist/esm/store/providers/memory/thread.store.js +5 -0
  130. package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
  131. package/dist/esm/store/providers/sqlite/connection.js +18 -13
  132. package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
  133. package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
  134. package/dist/esm/store/providers/sqlite/message.store.js +45 -32
  135. package/dist/esm/store/providers/sqlite/migrations.js +1 -1
  136. package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
  137. package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
  138. package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
  139. package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
  140. package/dist/esm/store/providers/sqlite/table-names.js +107 -0
  141. package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
  142. package/dist/esm/transport/WaComms.js +25 -23
  143. package/dist/esm/transport/WaWebSocket.js +115 -12
  144. package/dist/esm/transport/binary/decoder.js +4 -4
  145. package/dist/esm/transport/binary/encoder.js +12 -4
  146. package/dist/esm/transport/index.js +1 -0
  147. package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
  148. package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
  149. package/dist/esm/transport/node/WaNodeTransport.js +0 -3
  150. package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
  151. package/dist/esm/transport/node/builders/index.js +2 -1
  152. package/dist/esm/transport/node/builders/message.js +9 -0
  153. package/dist/esm/transport/node/builders/pairing.js +4 -5
  154. package/dist/esm/transport/node/builders/usync.js +41 -0
  155. package/dist/esm/transport/node/helpers.js +107 -5
  156. package/dist/esm/transport/node/usync.js +35 -0
  157. package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
  158. package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
  159. package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
  160. package/dist/esm/transport/proxy.js +27 -0
  161. package/dist/esm/transport/stream/parse.js +13 -48
  162. package/dist/esm/util/bytes.js +50 -32
  163. package/dist/esm/util/coercion.js +6 -14
  164. package/dist/esm/util/primitives.js +39 -14
  165. package/dist/infra/log/ConsoleLogger.js +18 -17
  166. package/dist/infra/log/PinoLogger.js +15 -9
  167. package/dist/infra/log/types.js +12 -0
  168. package/dist/infra/perf/BoundedTaskQueue.js +13 -17
  169. package/dist/media/WaMediaCrypto.js +1 -3
  170. package/dist/media/WaMediaTransferClient.js +259 -58
  171. package/dist/media/conn.js +10 -6
  172. package/dist/media/constants.js +4 -1
  173. package/dist/message/WaMessageClient.js +5 -14
  174. package/dist/message/ack.js +6 -6
  175. package/dist/message/addon-crypto.js +65 -0
  176. package/dist/message/incoming.js +104 -109
  177. package/dist/message/index.js +2 -0
  178. package/dist/message/reporting-token.js +443 -0
  179. package/dist/message/use-case-secret.js +55 -0
  180. package/dist/protocol/appstate.js +59 -1
  181. package/dist/protocol/constants.js +7 -1
  182. package/dist/protocol/index.js +20 -42
  183. package/dist/protocol/jid.js +64 -51
  184. package/dist/protocol/media.js +3 -3
  185. package/dist/protocol/nodes.js +2 -0
  186. package/dist/protocol/usync.js +14 -0
  187. package/dist/retry/index.js +3 -1
  188. package/dist/retry/outbound.js +6 -7
  189. package/dist/retry/parse.js +57 -75
  190. package/dist/retry/replay.js +46 -47
  191. package/dist/retry/tracker.js +59 -0
  192. package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
  193. package/dist/signal/api/SignalDigestSyncApi.js +6 -1
  194. package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
  195. package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
  196. package/dist/signal/api/SignalSessionSyncApi.js +23 -30
  197. package/dist/signal/crypto/WaAdvSignature.js +2 -4
  198. package/dist/signal/group/SenderKeyChain.js +27 -22
  199. package/dist/signal/group/SenderKeyCodec.js +1 -3
  200. package/dist/signal/group/SenderKeyManager.js +26 -16
  201. package/dist/signal/index.js +3 -1
  202. package/dist/signal/session/SignalProtocol.js +49 -14
  203. package/dist/signal/session/SignalRatchet.js +24 -15
  204. package/dist/signal/session/SignalSession.js +14 -9
  205. package/dist/signal/session/resolver.js +189 -0
  206. package/dist/signal/store/sqlite.js +16 -37
  207. package/dist/store/createStore.js +16 -18
  208. package/dist/store/noop.store.js +3 -6
  209. package/dist/store/providers/memory/appstate.store.js +28 -4
  210. package/dist/store/providers/memory/contact.store.js +5 -0
  211. package/dist/store/providers/memory/device-list.store.js +3 -30
  212. package/dist/store/providers/memory/message.store.js +11 -5
  213. package/dist/store/providers/memory/participants.store.js +1 -8
  214. package/dist/store/providers/memory/sender-key.store.js +8 -10
  215. package/dist/store/providers/memory/signal.store.js +21 -9
  216. package/dist/store/providers/memory/thread.store.js +5 -0
  217. package/dist/store/providers/sqlite/appstate.store.js +81 -0
  218. package/dist/store/providers/sqlite/connection.js +18 -13
  219. package/dist/store/providers/sqlite/contact.store.js +31 -18
  220. package/dist/store/providers/sqlite/device-list.store.js +7 -35
  221. package/dist/store/providers/sqlite/message.store.js +45 -32
  222. package/dist/store/providers/sqlite/migrations.js +1 -1
  223. package/dist/store/providers/sqlite/participants.store.js +1 -9
  224. package/dist/store/providers/sqlite/retry.store.js +8 -11
  225. package/dist/store/providers/sqlite/sender-key.store.js +24 -29
  226. package/dist/store/providers/sqlite/signal.store.js +105 -23
  227. package/dist/store/providers/sqlite/table-names.js +113 -0
  228. package/dist/store/providers/sqlite/thread.store.js +35 -22
  229. package/dist/transport/WaComms.js +27 -25
  230. package/dist/transport/WaWebSocket.js +148 -12
  231. package/dist/transport/binary/decoder.js +4 -4
  232. package/dist/transport/binary/encoder.js +12 -4
  233. package/dist/transport/index.js +7 -1
  234. package/dist/transport/keepalive/WaKeepAlive.js +1 -7
  235. package/dist/transport/node/WaNodeOrchestrator.js +2 -4
  236. package/dist/transport/node/WaNodeTransport.js +0 -3
  237. package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
  238. package/dist/transport/node/builders/index.js +12 -9
  239. package/dist/transport/node/builders/message.js +9 -0
  240. package/dist/transport/node/builders/pairing.js +4 -5
  241. package/dist/transport/node/builders/usync.js +45 -0
  242. package/dist/transport/node/helpers.js +112 -4
  243. package/dist/transport/node/usync.js +38 -0
  244. package/dist/transport/noise/WaFrameCodec.js +47 -32
  245. package/dist/transport/noise/WaNoiseCert.js +5 -8
  246. package/dist/transport/noise/WaNoiseSession.js +17 -10
  247. package/dist/transport/proxy.js +34 -0
  248. package/dist/transport/stream/parse.js +17 -53
  249. package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
  250. package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
  251. package/dist/types/appstate/constants.d.ts +1 -0
  252. package/dist/types/appstate/store/sqlite.d.ts +4 -18
  253. package/dist/types/appstate/utils.d.ts +0 -1
  254. package/dist/types/auth/WaAuthClient.d.ts +10 -12
  255. package/dist/types/auth/index.d.ts +0 -2
  256. package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
  257. package/dist/types/auth/types.d.ts +6 -9
  258. package/dist/types/client/WaClient.d.ts +27 -25
  259. package/dist/types/client/WaClientFactory.d.ts +22 -23
  260. package/dist/types/client/connection/WaConnectionManager.d.ts +64 -0
  261. package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
  262. package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
  263. package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
  264. package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +0 -1
  265. package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
  266. package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
  267. package/dist/types/client/dirty.d.ts +1 -0
  268. package/dist/types/client/events/group.d.ts +2 -1
  269. package/dist/types/client/index.d.ts +1 -1
  270. package/dist/types/client/messaging/fanout.d.ts +14 -0
  271. package/dist/types/client/messaging/key-protocol.d.ts +18 -0
  272. package/dist/types/client/messaging/participants.d.ts +13 -0
  273. package/dist/types/client/types.d.ts +24 -1
  274. package/dist/types/crypto/core/hkdf.d.ts +0 -6
  275. package/dist/types/crypto/core/index.d.ts +0 -1
  276. package/dist/types/crypto/core/random.d.ts +1 -7
  277. package/dist/types/crypto/index.d.ts +0 -2
  278. package/dist/types/index.d.ts +1 -1
  279. package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
  280. package/dist/types/infra/log/PinoLogger.d.ts +1 -1
  281. package/dist/types/infra/log/types.d.ts +1 -0
  282. package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
  283. package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
  284. package/dist/types/media/types.d.ts +5 -0
  285. package/dist/types/message/addon-crypto.d.ts +25 -0
  286. package/dist/types/message/index.d.ts +2 -0
  287. package/dist/types/message/reporting-token.d.ts +19 -0
  288. package/dist/types/message/use-case-secret.d.ts +20 -0
  289. package/dist/types/protocol/appstate.d.ts +58 -0
  290. package/dist/types/protocol/constants.d.ts +2 -1
  291. package/dist/types/protocol/index.d.ts +2 -10
  292. package/dist/types/protocol/jid.d.ts +3 -3
  293. package/dist/types/protocol/nodes.d.ts +2 -0
  294. package/dist/types/protocol/usync.d.ts +11 -0
  295. package/dist/types/retry/index.d.ts +1 -0
  296. package/dist/types/retry/replay.d.ts +0 -4
  297. package/dist/types/retry/tracker.d.ts +19 -0
  298. package/dist/types/retry/types.d.ts +4 -3
  299. package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
  300. package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
  301. package/dist/types/signal/index.d.ts +1 -0
  302. package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
  303. package/dist/types/signal/session/resolver.d.ts +17 -0
  304. package/dist/types/store/contracts/appstate.store.d.ts +3 -0
  305. package/dist/types/store/contracts/contact.store.d.ts +1 -0
  306. package/dist/types/store/contracts/device-list.store.d.ts +0 -3
  307. package/dist/types/store/contracts/message.store.d.ts +1 -0
  308. package/dist/types/store/contracts/participants.store.d.ts +0 -1
  309. package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
  310. package/dist/types/store/contracts/signal.store.d.ts +6 -0
  311. package/dist/types/store/contracts/thread.store.d.ts +1 -0
  312. package/dist/types/store/index.d.ts +1 -1
  313. package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
  314. package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
  315. package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
  316. package/dist/types/store/providers/memory/message.store.d.ts +1 -0
  317. package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
  318. package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
  319. package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
  320. package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
  321. package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
  322. package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
  323. package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
  324. package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
  325. package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
  326. package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
  327. package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
  328. package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
  329. package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
  330. package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
  331. package/dist/types/store/types.d.ts +3 -0
  332. package/dist/types/transport/WaWebSocket.d.ts +3 -0
  333. package/dist/types/transport/index.d.ts +2 -1
  334. package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
  335. package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
  336. package/dist/types/transport/node/builders/group.d.ts +4 -6
  337. package/dist/types/transport/node/builders/index.d.ts +2 -1
  338. package/dist/types/transport/node/builders/message.d.ts +14 -25
  339. package/dist/types/transport/node/builders/retry.d.ts +2 -4
  340. package/dist/types/transport/node/builders/usync.d.ts +21 -0
  341. package/dist/types/transport/node/helpers.d.ts +8 -0
  342. package/dist/types/transport/node/usync.d.ts +2 -0
  343. package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
  344. package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
  345. package/dist/types/transport/proxy.d.ts +6 -0
  346. package/dist/types/transport/stream/parse.d.ts +0 -1
  347. package/dist/types/transport/types.d.ts +18 -1
  348. package/dist/types/util/bytes.d.ts +5 -0
  349. package/dist/types/util/primitives.d.ts +3 -0
  350. package/dist/util/bytes.js +55 -33
  351. package/dist/util/coercion.js +6 -14
  352. package/dist/util/primitives.js +42 -14
  353. package/package.json +27 -9
  354. package/proto/index.d.ts +1090 -1048
  355. package/proto/index.js +1 -1
  356. package/scripts/check-node-version.cjs +0 -1
  357. package/dist/crypto/core/encoding.js +0 -29
  358. package/dist/esm/crypto/core/encoding.js +0 -25
  359. package/dist/esm/util/base64.js +0 -18
  360. package/dist/esm/util/signal-address.js +0 -5
  361. package/dist/types/crypto/core/encoding.d.ts +0 -11
  362. package/dist/types/util/base64.d.ts +0 -4
  363. package/dist/types/util/signal-address.d.ts +0 -2
  364. package/dist/util/base64.js +0 -24
  365. package/dist/util/signal-address.js +0 -8
  366. /package/dist/types/transport/node/builders/{accountSync.d.ts → account-sync.d.ts} +0 -0
@@ -50,7 +50,7 @@ export class WaAuthClient {
50
50
  getState(connected = false) {
51
51
  return {
52
52
  connected,
53
- registered: this.credentials?.meJid !== null && this.credentials?.meJid !== undefined,
53
+ registered: hasMeJid(this.credentials),
54
54
  hasQr: this.qrFlow.hasQr(),
55
55
  hasPairingCode: this.pairingFlow.hasPairingSession()
56
56
  };
@@ -67,7 +67,7 @@ export class WaAuthClient {
67
67
  signalStore: this.signalStore
68
68
  });
69
69
  this.logger.info('auth client credentials ready', {
70
- registered: this.credentials.meJid !== null && this.credentials.meJid !== undefined
70
+ registered: hasMeJid(this.credentials)
71
71
  });
72
72
  return this.credentials;
73
73
  });
@@ -141,51 +141,47 @@ export class WaAuthClient {
141
141
  }
142
142
  });
143
143
  }
144
- async persistMeLid(meLid) {
145
- await this.persistSuccessAttributes({
146
- meLid
147
- });
148
- }
149
144
  async persistSuccessAttributes(attributes) {
150
- let changes = {};
151
145
  await this.patchCredentials((credentials) => {
152
- const nextMeLid = attributes.meLid ?? credentials.meLid;
153
- const nextMeDisplayName = attributes.meDisplayName ?? credentials.meDisplayName;
154
- const nextCompanionEncStatic = attributes.companionEncStatic ?? credentials.companionEncStatic;
155
- const nextLastSuccessTs = attributes.lastSuccessTs ?? credentials.lastSuccessTs;
156
- const nextPropsVersion = attributes.propsVersion ?? credentials.propsVersion;
157
- const nextAbPropsVersion = attributes.abPropsVersion ?? credentials.abPropsVersion;
158
- const nextConnectionLocation = attributes.connectionLocation ?? credentials.connectionLocation;
159
- const nextAccountCreationTs = attributes.accountCreationTs ?? credentials.accountCreationTs;
160
- changes = {
161
- lidChanged: nextMeLid !== credentials.meLid,
162
- displayNameChanged: nextMeDisplayName !== credentials.meDisplayName,
163
- companionChanged: (credentials.companionEncStatic === undefined) !==
164
- (nextCompanionEncStatic === undefined) ||
165
- (credentials.companionEncStatic !== undefined &&
166
- nextCompanionEncStatic !== undefined &&
167
- !uint8Equal(credentials.companionEncStatic, nextCompanionEncStatic)),
168
- lastSuccessTsChanged: nextLastSuccessTs !== credentials.lastSuccessTs,
169
- propsVersionChanged: nextPropsVersion !== credentials.propsVersion,
170
- abPropsVersionChanged: nextAbPropsVersion !== credentials.abPropsVersion,
171
- connectionLocationChanged: nextConnectionLocation !== credentials.connectionLocation,
172
- accountCreationTsChanged: nextAccountCreationTs !== credentials.accountCreationTs
173
- };
174
146
  return {
175
147
  ...credentials,
176
- meLid: nextMeLid,
177
- meDisplayName: nextMeDisplayName,
178
- companionEncStatic: nextCompanionEncStatic,
179
- lastSuccessTs: nextLastSuccessTs,
180
- propsVersion: nextPropsVersion,
181
- abPropsVersion: nextAbPropsVersion,
182
- connectionLocation: nextConnectionLocation,
183
- accountCreationTs: nextAccountCreationTs
148
+ meLid: attributes.meLid ?? credentials.meLid,
149
+ meDisplayName: attributes.meDisplayName ?? credentials.meDisplayName,
150
+ companionEncStatic: attributes.companionEncStatic ?? credentials.companionEncStatic,
151
+ lastSuccessTs: attributes.lastSuccessTs ?? credentials.lastSuccessTs,
152
+ propsVersion: attributes.propsVersion ?? credentials.propsVersion,
153
+ abPropsVersion: attributes.abPropsVersion ?? credentials.abPropsVersion,
154
+ connectionLocation: attributes.connectionLocation ?? credentials.connectionLocation,
155
+ accountCreationTs: attributes.accountCreationTs ?? credentials.accountCreationTs
184
156
  };
185
157
  }, {
186
- shouldPersist: () => Object.values(changes).some(Boolean),
187
- onPersist: () => {
188
- this.logger.debug('persisting success attributes', changes);
158
+ shouldPersist: (current, next) => next.meLid !== current.meLid ||
159
+ next.meDisplayName !== current.meDisplayName ||
160
+ (current.companionEncStatic === undefined) !==
161
+ (next.companionEncStatic === undefined) ||
162
+ (current.companionEncStatic !== undefined &&
163
+ next.companionEncStatic !== undefined &&
164
+ !uint8Equal(current.companionEncStatic, next.companionEncStatic)) ||
165
+ next.lastSuccessTs !== current.lastSuccessTs ||
166
+ next.propsVersion !== current.propsVersion ||
167
+ next.abPropsVersion !== current.abPropsVersion ||
168
+ next.connectionLocation !== current.connectionLocation ||
169
+ next.accountCreationTs !== current.accountCreationTs,
170
+ onPersist: (current, next) => {
171
+ this.logger.debug('persisting success attributes', {
172
+ lidChanged: next.meLid !== current.meLid,
173
+ displayNameChanged: next.meDisplayName !== current.meDisplayName,
174
+ companionChanged: (current.companionEncStatic === undefined) !==
175
+ (next.companionEncStatic === undefined) ||
176
+ (current.companionEncStatic !== undefined &&
177
+ next.companionEncStatic !== undefined &&
178
+ !uint8Equal(current.companionEncStatic, next.companionEncStatic)),
179
+ lastSuccessTsChanged: next.lastSuccessTs !== current.lastSuccessTs,
180
+ propsVersionChanged: next.propsVersion !== current.propsVersion,
181
+ abPropsVersionChanged: next.abPropsVersion !== current.abPropsVersion,
182
+ connectionLocationChanged: next.connectionLocation !== current.connectionLocation,
183
+ accountCreationTsChanged: next.accountCreationTs !== current.accountCreationTs
184
+ });
189
185
  }
190
186
  });
191
187
  }
@@ -200,24 +196,18 @@ export class WaAuthClient {
200
196
  return this.runHandled(() => this.pairingFlow.fetchPairingCountryCodeIso());
201
197
  }
202
198
  async handleIncomingIqSet(node) {
203
- return this.runHandled(async () => {
204
- this.logger.trace('auth client handleIncomingIqSet', { id: node.attrs.id });
205
- return this.pairingFlow.handleIncomingIqSet(node);
206
- });
199
+ this.logger.trace('auth client handleIncomingIqSet', { id: node.attrs.id });
200
+ return this.runHandled(() => this.pairingFlow.handleIncomingIqSet(node));
207
201
  }
208
202
  async handleLinkCodeNotification(node) {
209
- return this.runHandled(async () => {
210
- this.logger.trace('auth client handleLinkCodeNotification', { id: node.attrs.id });
211
- return this.pairingFlow.handleLinkCodeNotification(node);
212
- });
203
+ this.logger.trace('auth client handleLinkCodeNotification', { id: node.attrs.id });
204
+ return this.runHandled(() => this.pairingFlow.handleLinkCodeNotification(node));
213
205
  }
214
206
  async handleCompanionRegRefreshNotification(node) {
215
- return this.runHandled(async () => {
216
- this.logger.trace('auth client handleCompanionRegRefreshNotification', {
217
- id: node.attrs.id
218
- });
219
- return this.pairingFlow.handleCompanionRegRefreshNotification(node);
207
+ this.logger.trace('auth client handleCompanionRegRefreshNotification', {
208
+ id: node.attrs.id
220
209
  });
210
+ return this.runHandled(() => this.pairingFlow.handleCompanionRegRefreshNotification(node));
221
211
  }
222
212
  async patchCredentials(buildNext, options = {}) {
223
213
  const current = this.requireCredentials();
@@ -240,7 +230,7 @@ export class WaAuthClient {
240
230
  }
241
231
  async updateCredentials(credentials) {
242
232
  this.logger.trace('auth client update credentials', {
243
- registered: credentials.meJid !== null && credentials.meJid !== undefined
233
+ registered: hasMeJid(credentials)
244
234
  });
245
235
  this.credentials = credentials;
246
236
  await persistCredentials({
@@ -260,3 +250,6 @@ export class WaAuthClient {
260
250
  this.callbacks.onError?.(error);
261
251
  }
262
252
  }
253
+ function hasMeJid(credentials) {
254
+ return credentials?.meJid !== null && credentials?.meJid !== undefined;
255
+ }
@@ -4,22 +4,23 @@ import { X25519 } from '../../crypto/curves/X25519.js';
4
4
  import { getLoginIdentity } from '../../protocol/jid.js';
5
5
  import { verifySignalSignature } from '../../signal/crypto/WaAdvSignature.js';
6
6
  import { createAndStoreInitialKeys } from '../../signal/registration/utils.js';
7
+ import { toProxyAgent, toProxyDispatcher } from '../../transport/proxy.js';
7
8
  import { toError } from '../../util/primitives.js';
8
9
  export async function loadOrCreateCredentials(args) {
9
10
  args.logger.trace('auth credentials loadOrCreate start');
10
11
  const existing = await args.authStore.load();
11
12
  if (!existing) {
12
- const credentials = await createAndPersistFreshCredentials(args);
13
+ const credentials = await createFreshAndPersistCredentials(args);
13
14
  args.logger.info('created fresh auth credentials');
14
15
  return credentials;
15
16
  }
16
17
  args.logger.debug('auth credentials loaded from store', {
17
- registered: existing.meJid !== null && existing.meJid !== undefined,
18
+ registered: isRegistered(existing),
18
19
  hasServerStaticKey: existing.serverStaticKey !== null && existing.serverStaticKey !== undefined
19
20
  });
20
21
  if (!existing.meJid && !(await hasValidSignedPreKey(args.logger, existing))) {
21
22
  args.logger.warn('signed pre-key is invalid, regenerating credentials');
22
- const fresh = await createAndPersistFreshCredentials(args);
23
+ const fresh = await createFreshAndPersistCredentials(args);
23
24
  args.logger.info('regenerated credentials due to invalid signed pre-key');
24
25
  return fresh;
25
26
  }
@@ -29,13 +30,15 @@ export async function loadOrCreateCredentials(args) {
29
30
  }
30
31
  export async function persistCredentials(args, credentials) {
31
32
  args.logger.trace('persisting auth credentials', {
32
- registered: credentials.meJid !== null && credentials.meJid !== undefined
33
+ registered: isRegistered(credentials)
33
34
  });
34
35
  await args.authStore.save(credentials);
35
36
  }
36
37
  export function buildCommsConfig(logger, credentials, socketOptions, clientOptions) {
37
- const registered = credentials.meJid !== null && credentials.meJid !== undefined;
38
- const loginIdentity = registered ? getLoginIdentity(credentials.meJid) : null;
38
+ const meJid = credentials.meJid;
39
+ const registered = meJid !== null && meJid !== undefined;
40
+ const loginIdentity = registered ? getLoginIdentity(meJid) : null;
41
+ const wsProxy = socketOptions.proxy?.ws;
39
42
  logger.debug('building comms config from credentials', {
40
43
  registered,
41
44
  hasServerStaticKey: credentials.serverStaticKey !== null && credentials.serverStaticKey !== undefined
@@ -44,6 +47,8 @@ export function buildCommsConfig(logger, credentials, socketOptions, clientOptio
44
47
  url: socketOptions.url,
45
48
  urls: socketOptions.urls,
46
49
  protocols: socketOptions.protocols,
50
+ dispatcher: toProxyDispatcher(wsProxy),
51
+ agent: toProxyAgent(wsProxy),
47
52
  connectTimeoutMs: socketOptions.connectTimeoutMs,
48
53
  reconnectIntervalMs: socketOptions.reconnectIntervalMs,
49
54
  timeoutIntervalMs: socketOptions.timeoutIntervalMs,
@@ -88,9 +93,10 @@ async function createFreshCredentials(signalStore, logger) {
88
93
  advSecretKey
89
94
  };
90
95
  }
91
- async function createAndPersistFreshCredentials(args) {
96
+ async function createFreshAndPersistCredentials(args) {
92
97
  const credentials = await createFreshCredentials(args.signalStore, args.logger);
93
- await persistFreshCredentials(args, credentials);
98
+ await args.authStore.save(credentials);
99
+ await restoreSignalStore(args.signalStore, credentials);
94
100
  return credentials;
95
101
  }
96
102
  async function hasValidSignedPreKey(logger, credentials) {
@@ -108,11 +114,12 @@ async function hasValidSignedPreKey(logger, credentials) {
108
114
  }
109
115
  }
110
116
  async function restoreSignalStore(signalStore, credentials) {
111
- await signalStore.setRegistrationInfo(credentials.registrationInfo);
112
- await signalStore.setSignedPreKey(credentials.signedPreKey);
113
- await signalStore.setServerHasPreKeys(credentials.serverHasPreKeys === true);
117
+ await Promise.all([
118
+ signalStore.setRegistrationInfo(credentials.registrationInfo),
119
+ signalStore.setSignedPreKey(credentials.signedPreKey),
120
+ signalStore.setServerHasPreKeys(credentials.serverHasPreKeys === true)
121
+ ]);
114
122
  }
115
- async function persistFreshCredentials(args, credentials) {
116
- await args.authStore.save(credentials);
117
- await restoreSignalStore(args.signalStore, credentials);
123
+ function isRegistered(credentials) {
124
+ return credentials.meJid !== null && credentials.meJid !== undefined;
118
125
  }
@@ -1,5 +1,4 @@
1
1
  export * from './types.js';
2
- export { getLoginIdentity } from '../protocol/jid.js';
3
2
  export { WaAuthClient } from './WaAuthClient.js';
4
3
  export { completeCompanionFinish, createCompanionHello } from './pairing/WaPairingCodeCrypto.js';
5
4
  export { WaAuthSqliteStore } from '../store/providers/sqlite/auth.store.js';
@@ -5,9 +5,9 @@ import { WA_DEFAULTS, WA_IQ_TYPES, WA_NODE_TAGS, WA_SIGNALING } from '../../prot
5
5
  import { parsePhoneJid } from '../../protocol/jid.js';
6
6
  import { ADV_PREFIX_HOSTED_ACCOUNT_SIGNATURE, computeAdvIdentityHmac, generateDeviceSignature, verifyDeviceIdentityAccountSignature } from '../../signal/crypto/WaAdvSignature.js';
7
7
  import { buildCompanionFinishRequestNode, buildCompanionHelloRequestNode, buildGetCountryCodeRequestNode, buildIqResultNode, buildNotificationAckNode } from '../../transport/node/builders/pairing.js';
8
- import { decodeNodeContentUtf8OrBytes, findNodeChild, getFirstNodeChild, getNodeChildrenByTag, hasNodeChild } from '../../transport/node/helpers.js';
9
- import { decodeProtoBytes } from '../../util/base64.js';
10
- import { concatBytes, TEXT_DECODER, uint8Equal } from '../../util/bytes.js';
8
+ import { decodeNodeContentUtf8OrBytes, findNodeChildrenByTags, findNodeChild, getFirstNodeChild, getNodeChildrenNonEmptyUtf8ByTag, hasNodeChild } from '../../transport/node/helpers.js';
9
+ import { decodeProtoBytes } from '../../util/bytes.js';
10
+ import { concatBytes, uint8Equal } from '../../util/bytes.js';
11
11
  export class WaPairingFlow {
12
12
  constructor(options) {
13
13
  this.opts = options;
@@ -153,9 +153,7 @@ export class WaPairingFlow {
153
153
  return true;
154
154
  }
155
155
  async handlePairDevice(iqNode, pairDeviceNode) {
156
- const refs = getNodeChildrenByTag(pairDeviceNode, WA_NODE_TAGS.REF)
157
- .map((child) => TEXT_DECODER.decode(decodeNodeContentUtf8OrBytes(child.content, 'pair-device.ref')))
158
- .filter((ref) => ref.length > 0);
156
+ const refs = getNodeChildrenNonEmptyUtf8ByTag(pairDeviceNode, WA_NODE_TAGS.REF, 'pair-device.ref');
159
157
  await this.rotateAdvSecret(this.requireCredentials());
160
158
  this.opts.qrFlow.setRefs(refs);
161
159
  this.opts.logger.info('pair-device refs updated', { refsCount: refs.length });
@@ -164,9 +162,7 @@ export class WaPairingFlow {
164
162
  async handlePairSuccess(iqNode, pairSuccessNode) {
165
163
  this.opts.logger.info('processing pair-success node');
166
164
  const credentials = this.requireCredentials();
167
- const deviceIdentityNode = findNodeChild(pairSuccessNode, WA_NODE_TAGS.DEVICE_IDENTITY);
168
- const deviceNode = findNodeChild(pairSuccessNode, 'device');
169
- const platformNode = findNodeChild(pairSuccessNode, WA_NODE_TAGS.PLATFORM);
165
+ const [deviceIdentityNode, deviceNode, platformNode] = findNodeChildrenByTags(pairSuccessNode, [WA_NODE_TAGS.DEVICE_IDENTITY, 'device', WA_NODE_TAGS.PLATFORM]);
170
166
  if (!deviceIdentityNode || !deviceNode || !platformNode) {
171
167
  this.opts.logger.error('pair-success missing required nodes', {
172
168
  hasDeviceIdentity: !!deviceIdentityNode,
@@ -267,9 +263,11 @@ export class WaPairingFlow {
267
263
  if (pairingSession.attempts > 3) {
268
264
  throw new Error('pairing code exceeded maximum primary hello attempts');
269
265
  }
270
- const refNode = findNodeChild(linkCodeNode, WA_NODE_TAGS.LINK_CODE_PAIRING_REF);
271
- const wrappedPrimaryNode = findNodeChild(linkCodeNode, 'link_code_pairing_wrapped_primary_ephemeral_pub');
272
- const primaryIdentityNode = findNodeChild(linkCodeNode, 'primary_identity_pub');
266
+ const [refNode, wrappedPrimaryNode, primaryIdentityNode] = findNodeChildrenByTags(linkCodeNode, [
267
+ WA_NODE_TAGS.LINK_CODE_PAIRING_REF,
268
+ 'link_code_pairing_wrapped_primary_ephemeral_pub',
269
+ 'primary_identity_pub'
270
+ ]);
273
271
  if (!refNode || !wrappedPrimaryNode || !primaryIdentityNode) {
274
272
  throw new Error('primary_hello notification is missing fields');
275
273
  }
@@ -290,10 +288,6 @@ export class WaPairingFlow {
290
288
  companionEphemeralPrivKey: pairingSession.companionEphemeralKeyPair.privKey,
291
289
  registrationIdentityKeyPair: credentials.registrationInfo.identityKeyPair
292
290
  });
293
- await this.opts.auth.updateCredentials({
294
- ...credentials,
295
- advSecretKey: finish.advSecret
296
- });
297
291
  const result = await this.opts.socket.query(buildCompanionFinishRequestNode({
298
292
  phoneJid: pairingSession.phoneJid,
299
293
  wrappedKeyBundle: finish.wrappedKeyBundle,
@@ -303,6 +297,10 @@ export class WaPairingFlow {
303
297
  if (result.attrs.type === WA_IQ_TYPES.ERROR) {
304
298
  throw new Error('companion_finish returned error');
305
299
  }
300
+ await this.opts.auth.updateCredentials({
301
+ ...credentials,
302
+ advSecretKey: finish.advSecret
303
+ });
306
304
  pairingSession.finished = true;
307
305
  this.opts.logger.info('primary_hello completed with companion_finish success');
308
306
  }
@@ -1,5 +1,5 @@
1
1
  import { WA_DEFAULTS } from '../../protocol/constants.js';
2
- import { bytesToBase64 } from '../../util/base64.js';
2
+ import { bytesToBase64 } from '../../util/bytes.js';
3
3
  export class WaQrFlow {
4
4
  constructor(args) {
5
5
  this.logger = args.logger;
@@ -7,11 +7,11 @@ export class WaQrFlow {
7
7
  this.getDevicePlatform = args.getDevicePlatform;
8
8
  this.emitQr = args.emitQr;
9
9
  this.qrRefs = [];
10
- this.currentRef = null;
10
+ this.qrRefIndex = 0;
11
11
  this.currentQrTimer = null;
12
12
  }
13
13
  hasQr() {
14
- return this.qrRefs.length > 0 || this.currentQrTimer !== null;
14
+ return this.qrRefIndex < this.qrRefs.length || this.currentQrTimer !== null;
15
15
  }
16
16
  clear() {
17
17
  this.logger.trace('qr flow clear');
@@ -20,28 +20,32 @@ export class WaQrFlow {
20
20
  this.currentQrTimer = null;
21
21
  }
22
22
  this.qrRefs = [];
23
- this.currentRef = null;
23
+ this.qrRefIndex = 0;
24
24
  }
25
25
  refreshCurrentQr() {
26
- if (!this.currentRef) {
26
+ if (this.qrRefIndex === 0) {
27
27
  this.logger.trace('qr flow refresh skipped: no active ref');
28
28
  return false;
29
29
  }
30
+ const ref = this.qrRefs[this.qrRefIndex - 1];
30
31
  const credentials = this.getCredentials();
31
32
  if (!credentials) {
32
33
  this.logger.warn('qr flow refresh skipped: missing credentials');
33
34
  return false;
34
35
  }
35
- const ttlMs = this.qrRefs.length === 5
36
+ const ttlMs = this.qrRefs.length - this.qrRefIndex === 5
36
37
  ? WA_DEFAULTS.QR_INITIAL_TTL_MS
37
38
  : WA_DEFAULTS.QR_ROTATION_TTL_MS;
38
- this.logger.debug('qr flow refresh emit', { ttlMs, remainingRefs: this.qrRefs.length });
39
- this.emitQr(this.buildQr(this.currentRef, credentials), ttlMs);
39
+ this.logger.debug('qr flow refresh emit', {
40
+ ttlMs,
41
+ remainingRefs: this.qrRefs.length - this.qrRefIndex
42
+ });
43
+ this.emitQr(this.buildQr(ref, credentials), ttlMs);
40
44
  return true;
41
45
  }
42
46
  setRefs(refs) {
43
47
  this.clear();
44
- this.qrRefs = [...refs];
48
+ this.qrRefs = refs;
45
49
  this.logger.info('qr refs updated', { count: this.qrRefs.length });
46
50
  if (this.qrRefs.length === 0) {
47
51
  return;
@@ -54,29 +58,38 @@ export class WaQrFlow {
54
58
  this.clear();
55
59
  return;
56
60
  }
57
- const ref = this.qrRefs.shift();
58
- if (!ref) {
61
+ if (this.qrRefIndex >= this.qrRefs.length) {
59
62
  this.clear();
60
63
  return;
61
64
  }
62
- this.currentRef = ref;
63
- const ttlMs = this.qrRefs.length === 5
64
- ? WA_DEFAULTS.QR_INITIAL_TTL_MS
65
- : WA_DEFAULTS.QR_ROTATION_TTL_MS;
66
- this.logger.trace('qr flow emit new code', { ttlMs, remainingRefs: this.qrRefs.length });
67
- this.emitQr(this.buildQr(ref, credentials), ttlMs);
65
+ const ref = this.qrRefs[this.qrRefIndex++];
66
+ const remainingRefs = this.qrRefs.length - this.qrRefIndex;
67
+ const ttlMs = remainingRefs === 5 ? WA_DEFAULTS.QR_INITIAL_TTL_MS : WA_DEFAULTS.QR_ROTATION_TTL_MS;
68
+ this.logger.trace('qr flow emit new code', { ttlMs, remainingRefs });
68
69
  this.currentQrTimer = setTimeout(() => {
69
70
  this.currentQrTimer = null;
70
71
  this.rotateRef();
71
72
  }, ttlMs);
73
+ try {
74
+ this.emitQr(this.buildQr(ref, credentials), ttlMs);
75
+ }
76
+ catch (error) {
77
+ if (this.currentQrTimer) {
78
+ clearTimeout(this.currentQrTimer);
79
+ this.currentQrTimer = null;
80
+ }
81
+ throw error;
82
+ }
72
83
  }
73
84
  buildQr(ref, credentials) {
74
- return [
75
- ref,
76
- bytesToBase64(credentials.noiseKeyPair.pubKey),
77
- bytesToBase64(credentials.registrationInfo.identityKeyPair.pubKey),
78
- bytesToBase64(credentials.advSecretKey),
79
- this.getDevicePlatform()
80
- ].join(',');
85
+ return (ref +
86
+ ',' +
87
+ bytesToBase64(credentials.noiseKeyPair.pubKey) +
88
+ ',' +
89
+ bytesToBase64(credentials.registrationInfo.identityKeyPair.pubKey) +
90
+ ',' +
91
+ bytesToBase64(credentials.advSecretKey) +
92
+ ',' +
93
+ this.getDevicePlatform());
81
94
  }
82
95
  }