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.
- package/README.md +12 -7
- package/dist/appstate/WaAppStateCrypto.js +18 -25
- package/dist/appstate/WaAppStateSyncClient.js +181 -114
- package/dist/appstate/WaAppStateSyncResponseParser.js +16 -5
- package/dist/appstate/constants.js +4 -3
- package/dist/appstate/utils.js +10 -30
- package/dist/auth/WaAuthClient.js +48 -55
- package/dist/auth/flow/WaAuthCredentialsFlow.js +21 -14
- package/dist/auth/index.js +1 -3
- package/dist/auth/pairing/WaPairingFlow.js +21 -23
- package/dist/auth/pairing/WaQrFlow.js +37 -24
- package/dist/client/WaClient.js +103 -276
- package/dist/client/WaClientFactory.js +227 -110
- package/dist/client/connection/WaConnectionManager.js +292 -0
- package/dist/client/connection/WaKeyShareCoordinator.js +63 -0
- package/dist/client/connection/WaReceiptQueue.js +51 -0
- package/dist/client/coordinators/WaAppStateMutationCoordinator.js +471 -0
- package/dist/client/coordinators/WaGroupCoordinator.js +27 -17
- package/dist/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
- package/dist/client/coordinators/WaMessageDispatchCoordinator.js +231 -686
- package/dist/client/coordinators/WaRetryCoordinator.js +70 -37
- package/dist/client/dirty.js +35 -29
- package/dist/client/events/chat.js +4 -3
- package/dist/client/events/group.js +59 -36
- package/dist/client/history-sync.js +53 -63
- package/dist/client/incoming.js +23 -20
- package/dist/client/mailbox.js +8 -8
- package/dist/client/messages.js +4 -4
- package/dist/client/messaging/fanout.js +189 -0
- package/dist/client/messaging/key-protocol.js +130 -0
- package/dist/client/messaging/participants.js +191 -0
- package/dist/crypto/core/hkdf.js +3 -8
- package/dist/crypto/core/index.js +1 -4
- package/dist/crypto/core/keys.js +2 -3
- package/dist/crypto/core/primitives.js +12 -15
- package/dist/crypto/core/random.js +7 -26
- package/dist/crypto/curves/Ed25519.js +7 -8
- package/dist/crypto/curves/X25519.js +13 -16
- package/dist/crypto/index.js +0 -5
- package/dist/esm/appstate/WaAppStateCrypto.js +6 -13
- package/dist/esm/appstate/WaAppStateSyncClient.js +174 -107
- package/dist/esm/appstate/WaAppStateSyncResponseParser.js +17 -6
- package/dist/esm/appstate/constants.js +3 -2
- package/dist/esm/appstate/utils.js +8 -27
- package/dist/esm/auth/WaAuthClient.js +48 -55
- package/dist/esm/auth/flow/WaAuthCredentialsFlow.js +21 -14
- package/dist/esm/auth/index.js +0 -1
- package/dist/esm/auth/pairing/WaPairingFlow.js +14 -16
- package/dist/esm/auth/pairing/WaQrFlow.js +37 -24
- package/dist/esm/client/WaClient.js +103 -276
- package/dist/esm/client/WaClientFactory.js +227 -110
- package/dist/esm/client/connection/WaConnectionManager.js +288 -0
- package/dist/esm/client/connection/WaKeyShareCoordinator.js +59 -0
- package/dist/esm/client/connection/WaReceiptQueue.js +47 -0
- package/dist/esm/client/coordinators/WaAppStateMutationCoordinator.js +467 -0
- package/dist/esm/client/coordinators/WaGroupCoordinator.js +20 -10
- package/dist/esm/client/coordinators/WaIncomingNodeCoordinator.js +20 -27
- package/dist/esm/client/coordinators/WaMessageDispatchCoordinator.js +232 -687
- package/dist/esm/client/coordinators/WaRetryCoordinator.js +71 -38
- package/dist/esm/client/dirty.js +30 -24
- package/dist/esm/client/events/chat.js +4 -3
- package/dist/esm/client/events/group.js +50 -28
- package/dist/esm/client/history-sync.js +50 -60
- package/dist/esm/client/incoming.js +23 -20
- package/dist/esm/client/mailbox.js +8 -8
- package/dist/esm/client/messages.js +1 -1
- package/dist/esm/client/messaging/fanout.js +186 -0
- package/dist/esm/client/messaging/key-protocol.js +127 -0
- package/dist/esm/client/messaging/participants.js +188 -0
- package/dist/esm/crypto/core/hkdf.js +3 -8
- package/dist/esm/crypto/core/index.js +0 -1
- package/dist/esm/crypto/core/keys.js +2 -3
- package/dist/esm/crypto/core/primitives.js +12 -15
- package/dist/esm/crypto/core/random.js +6 -25
- package/dist/esm/crypto/curves/Ed25519.js +4 -5
- package/dist/esm/crypto/curves/X25519.js +10 -13
- package/dist/esm/crypto/index.js +0 -2
- package/dist/esm/infra/log/ConsoleLogger.js +18 -17
- package/dist/esm/infra/log/PinoLogger.js +15 -9
- package/dist/esm/infra/log/types.js +11 -1
- package/dist/esm/infra/perf/BoundedTaskQueue.js +13 -17
- package/dist/esm/media/WaMediaCrypto.js +2 -4
- package/dist/esm/media/WaMediaTransferClient.js +226 -58
- package/dist/esm/media/conn.js +10 -6
- package/dist/esm/media/constants.js +4 -1
- package/dist/esm/message/WaMessageClient.js +4 -13
- package/dist/esm/message/ack.js +6 -6
- package/dist/esm/message/addon-crypto.js +59 -0
- package/dist/esm/message/incoming.js +106 -111
- package/dist/esm/message/index.js +2 -0
- package/dist/esm/message/reporting-token.js +438 -0
- package/dist/esm/message/use-case-secret.js +49 -0
- package/dist/esm/protocol/appstate.js +58 -0
- package/dist/esm/protocol/constants.js +2 -1
- package/dist/esm/protocol/index.js +2 -10
- package/dist/esm/protocol/jid.js +63 -51
- package/dist/esm/protocol/media.js +3 -3
- package/dist/esm/protocol/nodes.js +2 -0
- package/dist/esm/protocol/usync.js +11 -0
- package/dist/esm/retry/index.js +1 -0
- package/dist/esm/retry/outbound.js +4 -5
- package/dist/esm/retry/parse.js +58 -76
- package/dist/esm/retry/replay.js +48 -49
- package/dist/esm/retry/tracker.js +56 -0
- package/dist/esm/signal/api/SignalDeviceSyncApi.js +249 -82
- package/dist/esm/signal/api/SignalDigestSyncApi.js +6 -1
- package/dist/esm/signal/api/SignalIdentitySyncApi.js +49 -34
- package/dist/esm/signal/api/SignalMissingPreKeysSyncApi.js +70 -62
- package/dist/esm/signal/api/SignalSessionSyncApi.js +23 -30
- package/dist/esm/signal/crypto/WaAdvSignature.js +3 -5
- package/dist/esm/signal/group/SenderKeyChain.js +28 -23
- package/dist/esm/signal/group/SenderKeyCodec.js +2 -4
- package/dist/esm/signal/group/SenderKeyManager.js +26 -16
- package/dist/esm/signal/index.js +1 -0
- package/dist/esm/signal/session/SignalProtocol.js +49 -14
- package/dist/esm/signal/session/SignalRatchet.js +24 -15
- package/dist/esm/signal/session/SignalSession.js +14 -9
- package/dist/esm/signal/session/resolver.js +186 -0
- package/dist/esm/signal/store/sqlite.js +16 -37
- package/dist/esm/store/createStore.js +16 -18
- package/dist/esm/store/noop.store.js +3 -6
- package/dist/esm/store/providers/memory/appstate.store.js +30 -6
- package/dist/esm/store/providers/memory/contact.store.js +5 -0
- package/dist/esm/store/providers/memory/device-list.store.js +3 -30
- package/dist/esm/store/providers/memory/message.store.js +11 -5
- package/dist/esm/store/providers/memory/participants.store.js +1 -8
- package/dist/esm/store/providers/memory/sender-key.store.js +5 -7
- package/dist/esm/store/providers/memory/signal.store.js +13 -1
- package/dist/esm/store/providers/memory/thread.store.js +5 -0
- package/dist/esm/store/providers/sqlite/appstate.store.js +82 -1
- package/dist/esm/store/providers/sqlite/connection.js +18 -13
- package/dist/esm/store/providers/sqlite/contact.store.js +31 -18
- package/dist/esm/store/providers/sqlite/device-list.store.js +7 -35
- package/dist/esm/store/providers/sqlite/message.store.js +45 -32
- package/dist/esm/store/providers/sqlite/migrations.js +1 -1
- package/dist/esm/store/providers/sqlite/participants.store.js +1 -9
- package/dist/esm/store/providers/sqlite/retry.store.js +8 -11
- package/dist/esm/store/providers/sqlite/sender-key.store.js +25 -30
- package/dist/esm/store/providers/sqlite/signal.store.js +104 -22
- package/dist/esm/store/providers/sqlite/table-names.js +107 -0
- package/dist/esm/store/providers/sqlite/thread.store.js +35 -22
- package/dist/esm/transport/WaComms.js +25 -23
- package/dist/esm/transport/WaWebSocket.js +115 -12
- package/dist/esm/transport/binary/decoder.js +4 -4
- package/dist/esm/transport/binary/encoder.js +12 -4
- package/dist/esm/transport/index.js +1 -0
- package/dist/esm/transport/keepalive/WaKeepAlive.js +2 -8
- package/dist/esm/transport/node/WaNodeOrchestrator.js +2 -4
- package/dist/esm/transport/node/WaNodeTransport.js +0 -3
- package/dist/esm/transport/node/builders/{accountSync.js → account-sync.js} +16 -36
- package/dist/esm/transport/node/builders/index.js +2 -1
- package/dist/esm/transport/node/builders/message.js +9 -0
- package/dist/esm/transport/node/builders/pairing.js +4 -5
- package/dist/esm/transport/node/builders/usync.js +41 -0
- package/dist/esm/transport/node/helpers.js +107 -5
- package/dist/esm/transport/node/usync.js +35 -0
- package/dist/esm/transport/noise/WaFrameCodec.js +48 -33
- package/dist/esm/transport/noise/WaNoiseCert.js +3 -6
- package/dist/esm/transport/noise/WaNoiseSession.js +17 -10
- package/dist/esm/transport/proxy.js +27 -0
- package/dist/esm/transport/stream/parse.js +13 -48
- package/dist/esm/util/bytes.js +50 -32
- package/dist/esm/util/coercion.js +6 -14
- package/dist/esm/util/primitives.js +39 -14
- package/dist/infra/log/ConsoleLogger.js +18 -17
- package/dist/infra/log/PinoLogger.js +15 -9
- package/dist/infra/log/types.js +12 -0
- package/dist/infra/perf/BoundedTaskQueue.js +13 -17
- package/dist/media/WaMediaCrypto.js +1 -3
- package/dist/media/WaMediaTransferClient.js +259 -58
- package/dist/media/conn.js +10 -6
- package/dist/media/constants.js +4 -1
- package/dist/message/WaMessageClient.js +5 -14
- package/dist/message/ack.js +6 -6
- package/dist/message/addon-crypto.js +65 -0
- package/dist/message/incoming.js +104 -109
- package/dist/message/index.js +2 -0
- package/dist/message/reporting-token.js +443 -0
- package/dist/message/use-case-secret.js +55 -0
- package/dist/protocol/appstate.js +59 -1
- package/dist/protocol/constants.js +7 -1
- package/dist/protocol/index.js +20 -42
- package/dist/protocol/jid.js +64 -51
- package/dist/protocol/media.js +3 -3
- package/dist/protocol/nodes.js +2 -0
- package/dist/protocol/usync.js +14 -0
- package/dist/retry/index.js +3 -1
- package/dist/retry/outbound.js +6 -7
- package/dist/retry/parse.js +57 -75
- package/dist/retry/replay.js +46 -47
- package/dist/retry/tracker.js +59 -0
- package/dist/signal/api/SignalDeviceSyncApi.js +247 -80
- package/dist/signal/api/SignalDigestSyncApi.js +6 -1
- package/dist/signal/api/SignalIdentitySyncApi.js +49 -34
- package/dist/signal/api/SignalMissingPreKeysSyncApi.js +67 -59
- package/dist/signal/api/SignalSessionSyncApi.js +23 -30
- package/dist/signal/crypto/WaAdvSignature.js +2 -4
- package/dist/signal/group/SenderKeyChain.js +27 -22
- package/dist/signal/group/SenderKeyCodec.js +1 -3
- package/dist/signal/group/SenderKeyManager.js +26 -16
- package/dist/signal/index.js +3 -1
- package/dist/signal/session/SignalProtocol.js +49 -14
- package/dist/signal/session/SignalRatchet.js +24 -15
- package/dist/signal/session/SignalSession.js +14 -9
- package/dist/signal/session/resolver.js +189 -0
- package/dist/signal/store/sqlite.js +16 -37
- package/dist/store/createStore.js +16 -18
- package/dist/store/noop.store.js +3 -6
- package/dist/store/providers/memory/appstate.store.js +28 -4
- package/dist/store/providers/memory/contact.store.js +5 -0
- package/dist/store/providers/memory/device-list.store.js +3 -30
- package/dist/store/providers/memory/message.store.js +11 -5
- package/dist/store/providers/memory/participants.store.js +1 -8
- package/dist/store/providers/memory/sender-key.store.js +8 -10
- package/dist/store/providers/memory/signal.store.js +21 -9
- package/dist/store/providers/memory/thread.store.js +5 -0
- package/dist/store/providers/sqlite/appstate.store.js +81 -0
- package/dist/store/providers/sqlite/connection.js +18 -13
- package/dist/store/providers/sqlite/contact.store.js +31 -18
- package/dist/store/providers/sqlite/device-list.store.js +7 -35
- package/dist/store/providers/sqlite/message.store.js +45 -32
- package/dist/store/providers/sqlite/migrations.js +1 -1
- package/dist/store/providers/sqlite/participants.store.js +1 -9
- package/dist/store/providers/sqlite/retry.store.js +8 -11
- package/dist/store/providers/sqlite/sender-key.store.js +24 -29
- package/dist/store/providers/sqlite/signal.store.js +105 -23
- package/dist/store/providers/sqlite/table-names.js +113 -0
- package/dist/store/providers/sqlite/thread.store.js +35 -22
- package/dist/transport/WaComms.js +27 -25
- package/dist/transport/WaWebSocket.js +148 -12
- package/dist/transport/binary/decoder.js +4 -4
- package/dist/transport/binary/encoder.js +12 -4
- package/dist/transport/index.js +7 -1
- package/dist/transport/keepalive/WaKeepAlive.js +1 -7
- package/dist/transport/node/WaNodeOrchestrator.js +2 -4
- package/dist/transport/node/WaNodeTransport.js +0 -3
- package/dist/transport/node/builders/{accountSync.js → account-sync.js} +15 -35
- package/dist/transport/node/builders/index.js +12 -9
- package/dist/transport/node/builders/message.js +9 -0
- package/dist/transport/node/builders/pairing.js +4 -5
- package/dist/transport/node/builders/usync.js +45 -0
- package/dist/transport/node/helpers.js +112 -4
- package/dist/transport/node/usync.js +38 -0
- package/dist/transport/noise/WaFrameCodec.js +47 -32
- package/dist/transport/noise/WaNoiseCert.js +5 -8
- package/dist/transport/noise/WaNoiseSession.js +17 -10
- package/dist/transport/proxy.js +34 -0
- package/dist/transport/stream/parse.js +17 -53
- package/dist/types/appstate/WaAppStateCrypto.d.ts +0 -1
- package/dist/types/appstate/WaAppStateSyncClient.d.ts +5 -2
- package/dist/types/appstate/constants.d.ts +1 -0
- package/dist/types/appstate/store/sqlite.d.ts +4 -18
- package/dist/types/appstate/utils.d.ts +0 -1
- package/dist/types/auth/WaAuthClient.d.ts +10 -12
- package/dist/types/auth/index.d.ts +0 -2
- package/dist/types/auth/pairing/WaQrFlow.d.ts +1 -1
- package/dist/types/auth/types.d.ts +6 -9
- package/dist/types/client/WaClient.d.ts +27 -25
- package/dist/types/client/WaClientFactory.d.ts +22 -23
- package/dist/types/client/connection/WaConnectionManager.d.ts +64 -0
- package/dist/types/client/connection/WaKeyShareCoordinator.d.ts +14 -0
- package/dist/types/client/connection/WaReceiptQueue.d.ts +13 -0
- package/dist/types/client/coordinators/WaAppStateMutationCoordinator.d.ts +46 -0
- package/dist/types/client/coordinators/WaIncomingNodeCoordinator.d.ts +0 -1
- package/dist/types/client/coordinators/WaMessageDispatchCoordinator.d.ts +18 -41
- package/dist/types/client/coordinators/WaRetryCoordinator.d.ts +2 -0
- package/dist/types/client/dirty.d.ts +1 -0
- package/dist/types/client/events/group.d.ts +2 -1
- package/dist/types/client/index.d.ts +1 -1
- package/dist/types/client/messaging/fanout.d.ts +14 -0
- package/dist/types/client/messaging/key-protocol.d.ts +18 -0
- package/dist/types/client/messaging/participants.d.ts +13 -0
- package/dist/types/client/types.d.ts +24 -1
- package/dist/types/crypto/core/hkdf.d.ts +0 -6
- package/dist/types/crypto/core/index.d.ts +0 -1
- package/dist/types/crypto/core/random.d.ts +1 -7
- package/dist/types/crypto/index.d.ts +0 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/infra/log/ConsoleLogger.d.ts +2 -1
- package/dist/types/infra/log/PinoLogger.d.ts +1 -1
- package/dist/types/infra/log/types.d.ts +1 -0
- package/dist/types/infra/perf/BoundedTaskQueue.d.ts +1 -1
- package/dist/types/media/WaMediaTransferClient.d.ts +13 -3
- package/dist/types/media/types.d.ts +5 -0
- package/dist/types/message/addon-crypto.d.ts +25 -0
- package/dist/types/message/index.d.ts +2 -0
- package/dist/types/message/reporting-token.d.ts +19 -0
- package/dist/types/message/use-case-secret.d.ts +20 -0
- package/dist/types/protocol/appstate.d.ts +58 -0
- package/dist/types/protocol/constants.d.ts +2 -1
- package/dist/types/protocol/index.d.ts +2 -10
- package/dist/types/protocol/jid.d.ts +3 -3
- package/dist/types/protocol/nodes.d.ts +2 -0
- package/dist/types/protocol/usync.d.ts +11 -0
- package/dist/types/retry/index.d.ts +1 -0
- package/dist/types/retry/replay.d.ts +0 -4
- package/dist/types/retry/tracker.d.ts +19 -0
- package/dist/types/retry/types.d.ts +4 -3
- package/dist/types/signal/api/SignalDeviceSyncApi.d.ts +13 -1
- package/dist/types/signal/group/SenderKeyCodec.d.ts +4 -6
- package/dist/types/signal/index.d.ts +1 -0
- package/dist/types/signal/session/SignalProtocol.d.ts +9 -0
- package/dist/types/signal/session/resolver.d.ts +17 -0
- package/dist/types/store/contracts/appstate.store.d.ts +3 -0
- package/dist/types/store/contracts/contact.store.d.ts +1 -0
- package/dist/types/store/contracts/device-list.store.d.ts +0 -3
- package/dist/types/store/contracts/message.store.d.ts +1 -0
- package/dist/types/store/contracts/participants.store.d.ts +0 -1
- package/dist/types/store/contracts/sender-key.store.d.ts +0 -1
- package/dist/types/store/contracts/signal.store.d.ts +6 -0
- package/dist/types/store/contracts/thread.store.d.ts +1 -0
- package/dist/types/store/index.d.ts +1 -1
- package/dist/types/store/providers/memory/appstate.store.d.ts +2 -0
- package/dist/types/store/providers/memory/contact.store.d.ts +1 -0
- package/dist/types/store/providers/memory/device-list.store.d.ts +0 -3
- package/dist/types/store/providers/memory/message.store.d.ts +1 -0
- package/dist/types/store/providers/memory/participants.store.d.ts +0 -1
- package/dist/types/store/providers/memory/sender-key.store.d.ts +0 -1
- package/dist/types/store/providers/memory/signal.store.d.ts +6 -0
- package/dist/types/store/providers/memory/thread.store.d.ts +1 -0
- package/dist/types/store/providers/sqlite/appstate.store.d.ts +2 -0
- package/dist/types/store/providers/sqlite/contact.store.d.ts +2 -0
- package/dist/types/store/providers/sqlite/device-list.store.d.ts +0 -3
- package/dist/types/store/providers/sqlite/message.store.d.ts +2 -0
- package/dist/types/store/providers/sqlite/participants.store.d.ts +0 -1
- package/dist/types/store/providers/sqlite/retry.store.d.ts +0 -1
- package/dist/types/store/providers/sqlite/sender-key.store.d.ts +0 -1
- package/dist/types/store/providers/sqlite/signal.store.d.ts +7 -0
- package/dist/types/store/providers/sqlite/table-names.d.ts +5 -0
- package/dist/types/store/providers/sqlite/thread.store.d.ts +2 -0
- package/dist/types/store/types.d.ts +3 -0
- package/dist/types/transport/WaWebSocket.d.ts +3 -0
- package/dist/types/transport/index.d.ts +2 -1
- package/dist/types/transport/keepalive/WaKeepAlive.d.ts +0 -1
- package/dist/types/transport/node/WaNodeTransport.d.ts +0 -9
- package/dist/types/transport/node/builders/group.d.ts +4 -6
- package/dist/types/transport/node/builders/index.d.ts +2 -1
- package/dist/types/transport/node/builders/message.d.ts +14 -25
- package/dist/types/transport/node/builders/retry.d.ts +2 -4
- package/dist/types/transport/node/builders/usync.d.ts +21 -0
- package/dist/types/transport/node/helpers.d.ts +8 -0
- package/dist/types/transport/node/usync.d.ts +2 -0
- package/dist/types/transport/noise/WaFrameCodec.d.ts +3 -0
- package/dist/types/transport/noise/WaNoiseSession.d.ts +1 -0
- package/dist/types/transport/proxy.d.ts +6 -0
- package/dist/types/transport/stream/parse.d.ts +0 -1
- package/dist/types/transport/types.d.ts +18 -1
- package/dist/types/util/bytes.d.ts +5 -0
- package/dist/types/util/primitives.d.ts +3 -0
- package/dist/util/bytes.js +55 -33
- package/dist/util/coercion.js +6 -14
- package/dist/util/primitives.js +42 -14
- package/package.json +27 -9
- package/proto/index.d.ts +1090 -1048
- package/proto/index.js +1 -1
- package/scripts/check-node-version.cjs +0 -1
- package/dist/crypto/core/encoding.js +0 -29
- package/dist/esm/crypto/core/encoding.js +0 -25
- package/dist/esm/util/base64.js +0 -18
- package/dist/esm/util/signal-address.js +0 -5
- package/dist/types/crypto/core/encoding.d.ts +0 -11
- package/dist/types/util/base64.d.ts +0 -4
- package/dist/types/util/signal-address.d.ts +0 -2
- package/dist/util/base64.js +0 -24
- package/dist/util/signal-address.js +0 -8
- /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
|
|
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
|
|
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:
|
|
177
|
-
meDisplayName:
|
|
178
|
-
companionEncStatic:
|
|
179
|
-
lastSuccessTs:
|
|
180
|
-
propsVersion:
|
|
181
|
-
abPropsVersion:
|
|
182
|
-
connectionLocation:
|
|
183
|
-
accountCreationTs:
|
|
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: () =>
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
|
|
204
|
-
|
|
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
|
-
|
|
210
|
-
|
|
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
|
-
|
|
216
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
38
|
-
const
|
|
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
|
|
96
|
+
async function createFreshAndPersistCredentials(args) {
|
|
92
97
|
const credentials = await createFreshCredentials(args.signalStore, args.logger);
|
|
93
|
-
await
|
|
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
|
|
112
|
-
|
|
113
|
-
|
|
117
|
+
await Promise.all([
|
|
118
|
+
signalStore.setRegistrationInfo(credentials.registrationInfo),
|
|
119
|
+
signalStore.setSignedPreKey(credentials.signedPreKey),
|
|
120
|
+
signalStore.setServerHasPreKeys(credentials.serverHasPreKeys === true)
|
|
121
|
+
]);
|
|
114
122
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
await restoreSignalStore(args.signalStore, credentials);
|
|
123
|
+
function isRegistered(credentials) {
|
|
124
|
+
return credentials.meJid !== null && credentials.meJid !== undefined;
|
|
118
125
|
}
|
package/dist/esm/auth/index.js
CHANGED
|
@@ -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,
|
|
9
|
-
import { decodeProtoBytes } from '../../util/
|
|
10
|
-
import { concatBytes,
|
|
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 =
|
|
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 =
|
|
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 =
|
|
271
|
-
|
|
272
|
-
|
|
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/
|
|
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.
|
|
10
|
+
this.qrRefIndex = 0;
|
|
11
11
|
this.currentQrTimer = null;
|
|
12
12
|
}
|
|
13
13
|
hasQr() {
|
|
14
|
-
return this.qrRefs.length
|
|
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.
|
|
23
|
+
this.qrRefIndex = 0;
|
|
24
24
|
}
|
|
25
25
|
refreshCurrentQr() {
|
|
26
|
-
if (
|
|
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', {
|
|
39
|
-
|
|
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 =
|
|
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
|
-
|
|
58
|
-
if (!ref) {
|
|
61
|
+
if (this.qrRefIndex >= this.qrRefs.length) {
|
|
59
62
|
this.clear();
|
|
60
63
|
return;
|
|
61
64
|
}
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
76
|
-
bytesToBase64(credentials.noiseKeyPair.pubKey)
|
|
77
|
-
|
|
78
|
-
bytesToBase64(credentials.
|
|
79
|
-
|
|
80
|
-
|
|
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
|
}
|