@trezor/connect 10.0.0-beta.1 → 10.0.0-beta.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/CHANGELOG.md +56 -9
- package/README.md +4 -2
- package/lib/exports.d.ts +1 -3
- package/lib/exports.js +1 -3
- package/lib/impl/core-in-module-native.d.ts +7 -0
- package/lib/impl/core-in-module-native.js +11 -0
- package/lib/impl/core-in-module-node.d.ts +8 -0
- package/lib/impl/core-in-module-node.js +12 -0
- package/lib/impl/core-in-module-web.d.ts +9 -0
- package/lib/impl/core-in-module-web.js +26 -0
- package/lib/index.browser.js +2 -26
- package/lib/index.js +1 -11
- package/lib/index.native.d.ts +4 -0
- package/lib/index.native.js +5 -0
- package/package.json +16 -67
- package/lib/api/applyFlags.d.ts +0 -20
- package/lib/api/applyFlags.js +0 -38
- package/lib/api/applySettings.d.ts +0 -20
- package/lib/api/applySettings.js +0 -57
- package/lib/api/authenticateDevice.d.ts +0 -25
- package/lib/api/authenticateDevice.js +0 -195
- package/lib/api/authorizeCoinjoin.d.ts +0 -11
- package/lib/api/authorizeCoinjoin.js +0 -44
- package/lib/api/backupDevice.d.ts +0 -19
- package/lib/api/backupDevice.js +0 -39
- package/lib/api/bitcoin/TransactionComposer.d.ts +0 -46
- package/lib/api/bitcoin/TransactionComposer.js +0 -147
- package/lib/api/bitcoin/createPendingTx.d.ts +0 -37
- package/lib/api/bitcoin/createPendingTx.js +0 -55
- package/lib/api/bitcoin/enhanceSignTx.d.ts +0 -2
- package/lib/api/bitcoin/enhanceSignTx.js +0 -23
- package/lib/api/bitcoin/index.d.ts +0 -9
- package/lib/api/bitcoin/index.js +0 -9
- package/lib/api/bitcoin/inputs.d.ts +0 -4
- package/lib/api/bitcoin/inputs.js +0 -63
- package/lib/api/bitcoin/outputs.d.ts +0 -5
- package/lib/api/bitcoin/outputs.js +0 -128
- package/lib/api/bitcoin/refTx.d.ts +0 -23
- package/lib/api/bitcoin/refTx.js +0 -249
- package/lib/api/bitcoin/signtx.d.ts +0 -30
- package/lib/api/bitcoin/signtx.js +0 -229
- package/lib/api/bitcoin/signtxLegacy.d.ts +0 -10
- package/lib/api/bitcoin/signtxLegacy.js +0 -186
- package/lib/api/bitcoin/signtxVerify.d.ts +0 -12
- package/lib/api/bitcoin/signtxVerify.js +0 -95
- package/lib/api/bitcoin/transactionBytes.d.ts +0 -3
- package/lib/api/bitcoin/transactionBytes.js +0 -65
- package/lib/api/bleUnpair.d.ts +0 -11
- package/lib/api/bleUnpair.js +0 -37
- package/lib/api/blockchainDisconnect.d.ts +0 -16
- package/lib/api/blockchainDisconnect.js +0 -37
- package/lib/api/blockchainEstimateFee.d.ts +0 -16
- package/lib/api/blockchainEstimateFee.js +0 -102
- package/lib/api/blockchainEvmRpcCall.d.ts +0 -19
- package/lib/api/blockchainEvmRpcCall.js +0 -57
- package/lib/api/blockchainGetAccountBalanceHistory.d.ts +0 -16
- package/lib/api/blockchainGetAccountBalanceHistory.js +0 -60
- package/lib/api/blockchainGetContractInfo.d.ts +0 -16
- package/lib/api/blockchainGetContractInfo.js +0 -46
- package/lib/api/blockchainGetCurrentFiatRates.d.ts +0 -20
- package/lib/api/blockchainGetCurrentFiatRates.js +0 -49
- package/lib/api/blockchainGetFiatRatesForTimestamps.d.ts +0 -23
- package/lib/api/blockchainGetFiatRatesForTimestamps.js +0 -55
- package/lib/api/blockchainGetInfo.d.ts +0 -15
- package/lib/api/blockchainGetInfo.js +0 -37
- package/lib/api/blockchainGetTransactions.d.ts +0 -18
- package/lib/api/blockchainGetTransactions.js +0 -47
- package/lib/api/blockchainSetCustomBackend.d.ts +0 -17
- package/lib/api/blockchainSetCustomBackend.js +0 -43
- package/lib/api/blockchainSubscribe.d.ts +0 -19
- package/lib/api/blockchainSubscribe.js +0 -66
- package/lib/api/blockchainSubscribeFiatRates.d.ts +0 -19
- package/lib/api/blockchainSubscribeFiatRates.js +0 -43
- package/lib/api/blockchainUnsubscribe.d.ts +0 -19
- package/lib/api/blockchainUnsubscribe.js +0 -66
- package/lib/api/blockchainUnsubscribeFiatRates.d.ts +0 -17
- package/lib/api/blockchainUnsubscribeFiatRates.js +0 -37
- package/lib/api/blockchainValidateEvmRpcUrl.d.ts +0 -17
- package/lib/api/blockchainValidateEvmRpcUrl.js +0 -54
- package/lib/api/cancelCoinjoinAuthorization.d.ts +0 -11
- package/lib/api/cancelCoinjoinAuthorization.js +0 -33
- package/lib/api/cardano/api/cardanoComposeTransaction.d.ts +0 -10
- package/lib/api/cardano/api/cardanoComposeTransaction.js +0 -84
- package/lib/api/cardano/api/cardanoGetAddress.d.ts +0 -34
- package/lib/api/cardano/api/cardanoGetAddress.js +0 -130
- package/lib/api/cardano/api/cardanoGetNativeScriptHash.d.ts +0 -12
- package/lib/api/cardano/api/cardanoGetNativeScriptHash.js +0 -66
- package/lib/api/cardano/api/cardanoGetPublicKey.d.ts +0 -22
- package/lib/api/cardano/api/cardanoGetPublicKey.js +0 -92
- package/lib/api/cardano/api/cardanoSignMessage.d.ts +0 -22
- package/lib/api/cardano/api/cardanoSignMessage.js +0 -90
- package/lib/api/cardano/api/cardanoSignTransaction.d.ts +0 -81
- package/lib/api/cardano/api/cardanoSignTransaction.js +0 -301
- package/lib/api/cardano/api/index.d.ts +0 -6
- package/lib/api/cardano/api/index.js +0 -6
- package/lib/api/cardano/cardanoAddressParameters.d.ts +0 -6
- package/lib/api/cardano/cardanoAddressParameters.js +0 -79
- package/lib/api/cardano/cardanoAuxiliaryData.d.ts +0 -4
- package/lib/api/cardano/cardanoAuxiliaryData.js +0 -74
- package/lib/api/cardano/cardanoCertificate.d.ts +0 -13
- package/lib/api/cardano/cardanoCertificate.js +0 -142
- package/lib/api/cardano/cardanoInputs.d.ts +0 -25
- package/lib/api/cardano/cardanoInputs.js +0 -39
- package/lib/api/cardano/cardanoOutputs.d.ts +0 -40
- package/lib/api/cardano/cardanoOutputs.js +0 -70
- package/lib/api/cardano/cardanoTokenBundle.d.ts +0 -12
- package/lib/api/cardano/cardanoTokenBundle.js +0 -21
- package/lib/api/cardano/cardanoUtils.d.ts +0 -17
- package/lib/api/cardano/cardanoUtils.js +0 -100
- package/lib/api/cardano/cardanoWitnesses.d.ts +0 -4
- package/lib/api/cardano/cardanoWitnesses.js +0 -47
- package/lib/api/changeLanguage.d.ts +0 -18
- package/lib/api/changeLanguage.js +0 -49
- package/lib/api/changePin.d.ts +0 -11
- package/lib/api/changePin.js +0 -27
- package/lib/api/changeWipeCode.d.ts +0 -11
- package/lib/api/changeWipeCode.js +0 -29
- package/lib/api/cipherKeyValue.d.ts +0 -17
- package/lib/api/cipherKeyValue.js +0 -58
- package/lib/api/common/AbstractMiscGetAddress.d.ts +0 -37
- package/lib/api/common/AbstractMiscGetAddress.js +0 -126
- package/lib/api/common/Discovery.d.ts +0 -33
- package/lib/api/common/Discovery.js +0 -119
- package/lib/api/common/paramsValidator.d.ts +0 -24
- package/lib/api/common/paramsValidator.js +0 -136
- package/lib/api/common/requestExistingAccounts.d.ts +0 -14
- package/lib/api/common/requestExistingAccounts.js +0 -20
- package/lib/api/composeTransaction.d.ts +0 -36
- package/lib/api/composeTransaction.js +0 -404
- package/lib/api/discoverAccounts.d.ts +0 -40
- package/lib/api/discoverAccounts.js +0 -360
- package/lib/api/ethereum/api/ethereumGetAddress.d.ts +0 -30
- package/lib/api/ethereum/api/ethereumGetAddress.js +0 -150
- package/lib/api/ethereum/api/ethereumGetPublicKey.d.ts +0 -52
- package/lib/api/ethereum/api/ethereumGetPublicKey.js +0 -100
- package/lib/api/ethereum/api/ethereumSignMessage.d.ts +0 -27
- package/lib/api/ethereum/api/ethereumSignMessage.js +0 -64
- package/lib/api/ethereum/api/ethereumSignTransaction.d.ts +0 -83
- package/lib/api/ethereum/api/ethereumSignTransaction.js +0 -148
- package/lib/api/ethereum/api/ethereumSignTypedData.d.ts +0 -117
- package/lib/api/ethereum/api/ethereumSignTypedData.js +0 -203
- package/lib/api/ethereum/api/ethereumVerifyMessage.d.ts +0 -12
- package/lib/api/ethereum/api/ethereumVerifyMessage.js +0 -35
- package/lib/api/ethereum/api/index.d.ts +0 -6
- package/lib/api/ethereum/api/index.js +0 -6
- package/lib/api/ethereum/ethereumDefinitions.d.ts +0 -53
- package/lib/api/ethereum/ethereumDefinitions.js +0 -135
- package/lib/api/ethereum/ethereumSignTx.d.ts +0 -16
- package/lib/api/ethereum/ethereumSignTx.js +0 -144
- package/lib/api/ethereum/ethereumSignTypedData.d.ts +0 -32
- package/lib/api/ethereum/ethereumSignTypedData.js +0 -175
- package/lib/api/evoluGetDelegatedIdentityKey.d.ts +0 -14
- package/lib/api/evoluGetDelegatedIdentityKey.js +0 -29
- package/lib/api/evoluGetNode.d.ts +0 -13
- package/lib/api/evoluGetNode.js +0 -29
- package/lib/api/evoluSignRegistrationRequest.d.ts +0 -16
- package/lib/api/evoluSignRegistrationRequest.js +0 -33
- package/lib/api/firmware/calculateFirmwareHash.d.ts +0 -18
- package/lib/api/firmware/calculateFirmwareHash.js +0 -56
- package/lib/api/firmware/calculateXPubHash.d.ts +0 -14
- package/lib/api/firmware/calculateXPubHash.js +0 -16
- package/lib/api/firmware/getBinary.d.ts +0 -14
- package/lib/api/firmware/getBinary.js +0 -33
- package/lib/api/firmware/index.d.ts +0 -6
- package/lib/api/firmware/index.js +0 -6
- package/lib/api/firmware/modifyFirmware.d.ts +0 -3
- package/lib/api/firmware/modifyFirmware.js +0 -13
- package/lib/api/firmware/parseFirmwareHeaders.d.ts +0 -4
- package/lib/api/firmware/parseFirmwareHeaders.js +0 -26
- package/lib/api/firmware/uploadFirmware.d.ts +0 -27
- package/lib/api/firmware/uploadFirmware.js +0 -99
- package/lib/api/firmware/verifyEntropy.d.ts +0 -25
- package/lib/api/firmware/verifyEntropy.js +0 -110
- package/lib/api/getAccountInfo.d.ts +0 -21
- package/lib/api/getAccountInfo.js +0 -253
- package/lib/api/getAddress.d.ts +0 -45
- package/lib/api/getAddress.js +0 -153
- package/lib/api/getCoinInfo.d.ts +0 -148
- package/lib/api/getCoinInfo.js +0 -25
- package/lib/api/getDeviceState.d.ts +0 -8
- package/lib/api/getDeviceState.js +0 -18
- package/lib/api/getFeatures.d.ts +0 -71
- package/lib/api/getFeatures.js +0 -22
- package/lib/api/getFirmwareHash.d.ts +0 -11
- package/lib/api/getFirmwareHash.js +0 -29
- package/lib/api/getNonce.d.ts +0 -10
- package/lib/api/getNonce.js +0 -18
- package/lib/api/getOwnershipId.d.ts +0 -17
- package/lib/api/getOwnershipId.js +0 -88
- package/lib/api/getOwnershipProof.d.ts +0 -17
- package/lib/api/getOwnershipProof.js +0 -95
- package/lib/api/getPublicKey.d.ts +0 -54
- package/lib/api/getPublicKey.js +0 -106
- package/lib/api/getSettings.d.ts +0 -24
- package/lib/api/getSettings.js +0 -21
- package/lib/api/index.d.ts +0 -62
- package/lib/api/index.js +0 -62
- package/lib/api/loadDevice.d.ts +0 -16
- package/lib/api/loadDevice.js +0 -46
- package/lib/api/monero/api/index.d.ts +0 -4
- package/lib/api/monero/api/index.js +0 -4
- package/lib/api/monero/api/moneroGetAddress.d.ts +0 -32
- package/lib/api/monero/api/moneroGetAddress.js +0 -117
- package/lib/api/monero/api/moneroGetWatchKey.d.ts +0 -14
- package/lib/api/monero/api/moneroGetWatchKey.js +0 -45
- package/lib/api/monero/api/moneroKeyImageSync.d.ts +0 -17
- package/lib/api/monero/api/moneroKeyImageSync.js +0 -128
- package/lib/api/monero/api/moneroSignTransaction.d.ts +0 -17
- package/lib/api/monero/api/moneroSignTransaction.js +0 -218
- package/lib/api/nostr/nostrGetPublicKey.d.ts +0 -15
- package/lib/api/nostr/nostrGetPublicKey.js +0 -38
- package/lib/api/nostr/nostrSignEvent.d.ts +0 -13
- package/lib/api/nostr/nostrSignEvent.js +0 -36
- package/lib/api/pingDevice.d.ts +0 -11
- package/lib/api/pingDevice.js +0 -29
- package/lib/api/pushTransaction.d.ts +0 -19
- package/lib/api/pushTransaction.js +0 -39
- package/lib/api/recoveryDevice.d.ts +0 -20
- package/lib/api/recoveryDevice.js +0 -52
- package/lib/api/requestLogin.d.ts +0 -14
- package/lib/api/requestLogin.js +0 -53
- package/lib/api/resetDevice.d.ts +0 -22
- package/lib/api/resetDevice.js +0 -133
- package/lib/api/ripple/api/index.d.ts +0 -2
- package/lib/api/ripple/api/index.js +0 -2
- package/lib/api/ripple/api/rippleGetAddress.d.ts +0 -17
- package/lib/api/ripple/api/rippleGetAddress.js +0 -22
- package/lib/api/ripple/api/rippleSignTransaction.d.ts +0 -13
- package/lib/api/ripple/api/rippleSignTransaction.js +0 -52
- package/lib/api/selectAccount.d.ts +0 -15
- package/lib/api/selectAccount.js +0 -42
- package/lib/api/setBrightness.d.ts +0 -12
- package/lib/api/setBrightness.js +0 -28
- package/lib/api/setBusy.d.ts +0 -11
- package/lib/api/setBusy.js +0 -31
- package/lib/api/showDeviceTutorial.d.ts +0 -11
- package/lib/api/showDeviceTutorial.js +0 -21
- package/lib/api/signMessage.d.ts +0 -25
- package/lib/api/signMessage.js +0 -75
- package/lib/api/signTransaction.d.ts +0 -199
- package/lib/api/signTransaction.js +0 -331
- package/lib/api/solana/api/index.d.ts +0 -4
- package/lib/api/solana/api/index.js +0 -4
- package/lib/api/solana/api/solanaComposeTransaction.d.ts +0 -33
- package/lib/api/solana/api/solanaComposeTransaction.js +0 -73
- package/lib/api/solana/api/solanaGetAddress.d.ts +0 -17
- package/lib/api/solana/api/solanaGetAddress.js +0 -22
- package/lib/api/solana/api/solanaGetPublicKey.d.ts +0 -32
- package/lib/api/solana/api/solanaGetPublicKey.js +0 -86
- package/lib/api/solana/api/solanaSignTransaction.d.ts +0 -41
- package/lib/api/solana/api/solanaSignTransaction.js +0 -204
- package/lib/api/solana/solanaDefinitions.d.ts +0 -9
- package/lib/api/solana/solanaDefinitions.js +0 -33
- package/lib/api/stellar/api/index.d.ts +0 -2
- package/lib/api/stellar/api/index.js +0 -2
- package/lib/api/stellar/api/stellarGetAddress.d.ts +0 -17
- package/lib/api/stellar/api/stellarGetAddress.js +0 -22
- package/lib/api/stellar/api/stellarSignTransaction.d.ts +0 -20
- package/lib/api/stellar/api/stellarSignTransaction.js +0 -65
- package/lib/api/stellar/stellarSignTx.d.ts +0 -7
- package/lib/api/stellar/stellarSignTx.js +0 -183
- package/lib/api/telemetryGet.d.ts +0 -14
- package/lib/api/telemetryGet.js +0 -26
- package/lib/api/tezos/api/index.d.ts +0 -3
- package/lib/api/tezos/api/index.js +0 -3
- package/lib/api/tezos/api/tezosGetAddress.d.ts +0 -17
- package/lib/api/tezos/api/tezosGetAddress.js +0 -22
- package/lib/api/tezos/api/tezosGetPublicKey.d.ts +0 -28
- package/lib/api/tezos/api/tezosGetPublicKey.js +0 -84
- package/lib/api/tezos/api/tezosSignTransaction.d.ts +0 -14
- package/lib/api/tezos/api/tezosSignTransaction.js +0 -30
- package/lib/api/tezos/tezosSignTx.d.ts +0 -71
- package/lib/api/tezos/tezosSignTx.js +0 -204
- package/lib/api/thpGetCredentials.d.ts +0 -13
- package/lib/api/thpGetCredentials.js +0 -30
- package/lib/api/thpRemoveCredentials.d.ts +0 -15
- package/lib/api/thpRemoveCredentials.js +0 -44
- package/lib/api/tron/api/index.d.ts +0 -3
- package/lib/api/tron/api/index.js +0 -3
- package/lib/api/tron/api/tronComposeTransaction.d.ts +0 -17
- package/lib/api/tron/api/tronComposeTransaction.js +0 -52
- package/lib/api/tron/api/tronGetAddress.d.ts +0 -17
- package/lib/api/tron/api/tronGetAddress.js +0 -22
- package/lib/api/tron/api/tronSignTransaction.d.ts +0 -20
- package/lib/api/tron/api/tronSignTransaction.js +0 -137
- package/lib/api/tron/tronEncode.d.ts +0 -11
- package/lib/api/tron/tronEncode.js +0 -157
- package/lib/api/tron/tronProtobuf.d.ts +0 -5
- package/lib/api/tron/tronProtobuf.js +0 -28
- package/lib/api/unlockPath.d.ts +0 -12
- package/lib/api/unlockPath.js +0 -33
- package/lib/api/verifyMessage.d.ts +0 -16
- package/lib/api/verifyMessage.js +0 -46
- package/lib/api/wipeDevice.d.ts +0 -21
- package/lib/api/wipeDevice.js +0 -49
- package/lib/backend/BackendManager.d.ts +0 -30
- package/lib/backend/BackendManager.js +0 -145
- package/lib/backend/Blockchain.d.ts +0 -81
- package/lib/backend/Blockchain.js +0 -235
- package/lib/backend/BlockchainLink.d.ts +0 -10
- package/lib/backend/BlockchainLink.js +0 -19
- package/lib/backend/fees/BitcoinFeeLevels.d.ts +0 -19
- package/lib/backend/fees/BitcoinFeeLevels.js +0 -44
- package/lib/backend/fees/EthereumFeeLevels.d.ts +0 -17
- package/lib/backend/fees/EthereumFeeLevels.js +0 -63
- package/lib/backend/fees/MiscFeeLevels.d.ts +0 -18
- package/lib/backend/fees/MiscFeeLevels.js +0 -30
- package/lib/backend/fees/index.d.ts +0 -5
- package/lib/backend/fees/index.js +0 -31
- package/lib/core/AbstractMethod.d.ts +0 -63
- package/lib/core/AbstractMethod.js +0 -189
- package/lib/core/index.d.ts +0 -29
- package/lib/core/index.js +0 -805
- package/lib/core/method.d.ts +0 -3
- package/lib/core/method.js +0 -19
- package/lib/core/method.native.d.ts +0 -2
- package/lib/core/method.native.js +0 -29
- package/lib/core/onCallFirmwareUpdate.d.ts +0 -42
- package/lib/core/onCallFirmwareUpdate.js +0 -436
- package/lib/data/coinInfo.d.ts +0 -101
- package/lib/data/coinInfo.js +0 -195
- package/lib/data/config.d.ts +0 -8
- package/lib/data/config.js +0 -273
- package/lib/data/defaultFeeLevels.d.ts +0 -18
- package/lib/data/defaultFeeLevels.js +0 -200
- package/lib/data/enabledNetworksStore.d.ts +0 -5
- package/lib/data/enabledNetworksStore.js +0 -20
- package/lib/data/firmwareInfo.d.ts +0 -55
- package/lib/data/firmwareInfo.js +0 -413
- package/lib/data/firmwareReleaseStore.d.ts +0 -10
- package/lib/data/firmwareReleaseStore.js +0 -16
- package/lib/data/localFirmwareStore.d.ts +0 -3
- package/lib/data/localFirmwareStore.js +0 -8
- package/lib/data/protobufLoader.d.ts +0 -1
- package/lib/data/protobufLoader.js +0 -30
- package/lib/data/settingsStore.d.ts +0 -6
- package/lib/data/settingsStore.js +0 -21
- package/lib/device/Device.d.ts +0 -259
- package/lib/device/Device.js +0 -765
- package/lib/device/DeviceCommands.d.ts +0 -87
- package/lib/device/DeviceCommands.js +0 -248
- package/lib/device/DeviceCurrentSession.d.ts +0 -750
- package/lib/device/DeviceCurrentSession.js +0 -239
- package/lib/device/DeviceList.d.ts +0 -75
- package/lib/device/DeviceList.js +0 -243
- package/lib/device/TransportList.d.ts +0 -3
- package/lib/device/TransportList.js +0 -13
- package/lib/device/TransportManager.d.ts +0 -33
- package/lib/device/TransportManager.js +0 -144
- package/lib/device/calculateRevisionForDevice.d.ts +0 -10
- package/lib/device/calculateRevisionForDevice.js +0 -19
- package/lib/device/checkFirmwareRevision.d.ts +0 -22
- package/lib/device/checkFirmwareRevision.js +0 -104
- package/lib/device/resolveDescriptorForTaproot.d.ts +0 -17
- package/lib/device/resolveDescriptorForTaproot.js +0 -27
- package/lib/device/thp/handshake.d.ts +0 -3
- package/lib/device/thp/handshake.js +0 -100
- package/lib/device/thp/index.d.ts +0 -5
- package/lib/device/thp/index.js +0 -65
- package/lib/device/thp/pairing.d.ts +0 -16
- package/lib/device/thp/pairing.js +0 -242
- package/lib/device/thp/session.d.ts +0 -2
- package/lib/device/thp/session.js +0 -27
- package/lib/device/thp/thpCall.d.ts +0 -31
- package/lib/device/thp/thpCall.js +0 -58
- package/lib/device/validateMessageSize.d.ts +0 -2
- package/lib/device/validateMessageSize.js +0 -9
- package/lib/device/workflow/changeLanguage.d.ts +0 -18
- package/lib/device/workflow/changeLanguage.js +0 -62
- package/lib/device/workflow/checkFirmwareHash.d.ts +0 -12
- package/lib/device/workflow/checkFirmwareHash.js +0 -86
- package/lib/device/workflow/checkFirmwareHashWithRetries.d.ts +0 -8
- package/lib/device/workflow/checkFirmwareHashWithRetries.js +0 -36
- package/lib/device/workflow/handshake.d.ts +0 -13
- package/lib/device/workflow/handshake.js +0 -55
- package/lib/device/workflow/trezorPushNotification.d.ts +0 -5
- package/lib/device/workflow/trezorPushNotification.js +0 -73
- package/lib/device/workflow/validateState.d.ts +0 -2
- package/lib/device/workflow/validateState.js +0 -152
- package/lib/events/ui-promise.d.ts +0 -20
- package/lib/events/ui-promise.js +0 -1
- package/lib/impl/core-in-module.d.ts +0 -33
- package/lib/impl/core-in-module.js +0 -194
- package/lib/types/idevice.d.ts +0 -110
- package/lib/types/idevice.js +0 -1
- package/lib/types/typed-call-provider.d.ts +0 -29
- package/lib/types/typed-call-provider.js +0 -1
- package/lib/types/workflow.d.ts +0 -16
- package/lib/types/workflow.js +0 -1
- package/lib/utils/accountUtils.d.ts +0 -10
- package/lib/utils/accountUtils.js +0 -90
- package/lib/utils/addressUtils.d.ts +0 -2
- package/lib/utils/addressUtils.js +0 -24
- package/lib/utils/assetUtils.d.ts +0 -13
- package/lib/utils/assetUtils.js +0 -55
- package/lib/utils/assets.browser.d.ts +0 -1
- package/lib/utils/assets.browser.js +0 -1
- package/lib/utils/assets.d.ts +0 -2
- package/lib/utils/assets.js +0 -13
- package/lib/utils/assets.native.d.ts +0 -2
- package/lib/utils/assets.native.js +0 -23
- package/lib/utils/assetsTypes.d.ts +0 -5
- package/lib/utils/assetsTypes.js +0 -1
- package/lib/utils/buildOutputDescriptor.d.ts +0 -20
- package/lib/utils/buildOutputDescriptor.js +0 -67
- package/lib/utils/deviceFeaturesUtils.d.ts +0 -7
- package/lib/utils/deviceFeaturesUtils.js +0 -109
- package/lib/utils/ethereumUtils.d.ts +0 -3
- package/lib/utils/ethereumUtils.js +0 -7
- package/lib/utils/firmwareReleaseConfigUtils.d.ts +0 -19
- package/lib/utils/firmwareReleaseConfigUtils.js +0 -131
- package/lib/utils/firmwareUtils.d.ts +0 -15
- package/lib/utils/firmwareUtils.js +0 -57
- package/lib/utils/formatUtils.d.ts +0 -13
- package/lib/utils/formatUtils.js +0 -45
- package/lib/utils/hdnodeUtils.d.ts +0 -6
- package/lib/utils/hdnodeUtils.js +0 -62
- package/lib/utils/pathUtils.d.ts +0 -1
- package/lib/utils/pathUtils.js +0 -1
- package/lib/utils/paymentRequest.d.ts +0 -8
- package/lib/utils/paymentRequest.js +0 -25
- package/lib/utils/uiPromiseManager.d.ts +0 -8
- package/lib/utils/uiPromiseManager.js +0 -51
- package/lib/workers/workers.browser.d.ts +0 -10
- package/lib/workers/workers.browser.js +0 -16
- package/lib/workers/workers.d.ts +0 -10
- package/lib/workers/workers.js +0 -8
- package/lib/workers/workers.native.d.ts +0 -7
- package/lib/workers/workers.native.js +0 -7
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import { sha256 } from "@noble/hashes/sha2.js";
|
|
2
|
-
import { bytesToHex, concatBytes, randomBytes } from "@noble/hashes/utils.js";
|
|
3
|
-
import { DEVICE } from "@trezor/connect-common";
|
|
4
|
-
import { ERRORS } from "@trezor/connect-common/lib/constants/index.js";
|
|
5
|
-
import { ThpPairingMethod, thp as protocolThp } from "@trezor/protocol";
|
|
6
|
-
import { createDeferred, resolveAfter } from "@trezor/utils";
|
|
7
|
-
import { abortThpWorkflow, thpCall } from "./thpCall.js";
|
|
8
|
-
import * as settingsStore from "../../data/settingsStore.js";
|
|
9
|
-
import { sanitizeString } from "../../utils/formatUtils.js";
|
|
10
|
-
const sha256Hex = (...parts) => bytesToHex(sha256(concatBytes(...parts)));
|
|
11
|
-
const processQrCodeTag = async (device, value) => {
|
|
12
|
-
const thpState = device.getThpState();
|
|
13
|
-
if (!thpState?.handshakeCredentials) {
|
|
14
|
-
throw ERRORS.TypedError('Device_ThpStateMissing');
|
|
15
|
-
}
|
|
16
|
-
const tagSha = sha256Hex(thpState.handshakeCredentials.handshakeHash, Buffer.from(value, 'hex'));
|
|
17
|
-
const qrCodeSecret = await thpCall(device, 'ThpQrCodeTag', {
|
|
18
|
-
tag: tagSha
|
|
19
|
-
});
|
|
20
|
-
protocolThp.validateQrCodeTag(thpState.handshakeCredentials, value, qrCodeSecret.message.secret);
|
|
21
|
-
return qrCodeSecret;
|
|
22
|
-
};
|
|
23
|
-
const processNfcTag = async (device, value) => {
|
|
24
|
-
const thpState = device.getThpState();
|
|
25
|
-
if (!thpState?.handshakeCredentials) {
|
|
26
|
-
throw ERRORS.TypedError('Device_ThpStateMissing');
|
|
27
|
-
}
|
|
28
|
-
if (!thpState?.nfcSecret) {
|
|
29
|
-
throw new Error('missing nfcSecret');
|
|
30
|
-
}
|
|
31
|
-
const tagSha = sha256Hex(Buffer.from([protocolThp.ThpPairingMethod.NFC]), thpState.handshakeCredentials.handshakeHash, Buffer.from(value, 'hex'));
|
|
32
|
-
const nfcTagTrezor = await thpCall(device, 'ThpNfcTagHost', {
|
|
33
|
-
tag: tagSha
|
|
34
|
-
});
|
|
35
|
-
protocolThp.validateNfcTag(thpState.handshakeCredentials, nfcTagTrezor.message.tag, thpState.nfcSecret);
|
|
36
|
-
return nfcTagTrezor;
|
|
37
|
-
};
|
|
38
|
-
const processCodeEntry = async (device, value) => {
|
|
39
|
-
const codeValue = Buffer.from(value, 'ascii');
|
|
40
|
-
const thpState = device.getThpState();
|
|
41
|
-
if (!thpState?.handshakeCredentials) {
|
|
42
|
-
throw ERRORS.TypedError('Device_ThpStateMissing');
|
|
43
|
-
}
|
|
44
|
-
const hostKeys = protocolThp.getCpaceHostKeys(codeValue, thpState.handshakeCredentials.handshakeHash);
|
|
45
|
-
const tag = protocolThp.getSharedSecret(thpState.handshakeCredentials.trezorCpacePublicKey, hostKeys.privateKey).toString('hex');
|
|
46
|
-
const codeEntrySecret = await thpCall(device, 'ThpCodeEntryCpaceHostTag', {
|
|
47
|
-
tag,
|
|
48
|
-
cpace_host_public_key: hostKeys.publicKey.toString('hex')
|
|
49
|
-
});
|
|
50
|
-
protocolThp.validateCodeEntryTag(thpState.handshakeCredentials, value, codeEntrySecret.message.secret);
|
|
51
|
-
return codeEntrySecret;
|
|
52
|
-
};
|
|
53
|
-
const processThpPairingResponse = (device, payload) => {
|
|
54
|
-
if ('selectedMethod' in payload) {
|
|
55
|
-
const selectedMethod = protocolThp.getThpPairingMethod(payload.selectedMethod);
|
|
56
|
-
device.getThpState()?.setPairingMethod(selectedMethod);
|
|
57
|
-
return thpCall(device, 'ThpSelectMethod', {
|
|
58
|
-
selected_pairing_method: selectedMethod
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
const selectedMethod = device.getThpState()?.pairingMethod;
|
|
62
|
-
if (selectedMethod === ThpPairingMethod.QrCode) {
|
|
63
|
-
return processQrCodeTag(device, payload.tag);
|
|
64
|
-
}
|
|
65
|
-
if (selectedMethod === ThpPairingMethod.NFC) {
|
|
66
|
-
return processNfcTag(device, payload.tag);
|
|
67
|
-
}
|
|
68
|
-
if (selectedMethod === ThpPairingMethod.CodeEntry) {
|
|
69
|
-
return processCodeEntry(device, payload.tag);
|
|
70
|
-
}
|
|
71
|
-
throw ERRORS.TypedError('Device_ThpPairingMethodsException');
|
|
72
|
-
};
|
|
73
|
-
const waitForPairingCancel = device => {
|
|
74
|
-
const readAbort = new AbortController();
|
|
75
|
-
device.getThpState()?.setExpectedResponses([0x04]);
|
|
76
|
-
const readCancel = device.getCurrentSession().receive({
|
|
77
|
-
signal: readAbort.signal
|
|
78
|
-
});
|
|
79
|
-
return {
|
|
80
|
-
readAbort,
|
|
81
|
-
readCancel
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
const waitForPairingTag = async device => {
|
|
85
|
-
const thpState = device.getThpState();
|
|
86
|
-
if (!thpState?.handshakeCredentials) {
|
|
87
|
-
throw ERRORS.TypedError('Device_ThpStateMissing');
|
|
88
|
-
}
|
|
89
|
-
if (thpState.pairingMethod === undefined) {
|
|
90
|
-
throw ERRORS.TypedError('Device_ThpPairingMethodsException');
|
|
91
|
-
}
|
|
92
|
-
const dfd = createDeferred();
|
|
93
|
-
const {
|
|
94
|
-
readAbort,
|
|
95
|
-
readCancel
|
|
96
|
-
} = waitForPairingCancel(device);
|
|
97
|
-
const cancelResult = readCancel.then(readResult => {
|
|
98
|
-
if (readResult.success) {
|
|
99
|
-
let code, message;
|
|
100
|
-
const {
|
|
101
|
-
payload
|
|
102
|
-
} = readResult;
|
|
103
|
-
if (payload.type === 'Failure') {
|
|
104
|
-
code = payload.message.code;
|
|
105
|
-
message = payload.message.message;
|
|
106
|
-
} else {
|
|
107
|
-
message = `Unexpected message type: ${readResult.payload.type}`;
|
|
108
|
-
}
|
|
109
|
-
dfd.resolve({
|
|
110
|
-
error: ERRORS.TypedError(code || 'ThpUnknownError', message)
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
}).catch(() => {});
|
|
114
|
-
thpState.setPairingTagPromise({
|
|
115
|
-
abort: async () => {
|
|
116
|
-
readAbort.abort();
|
|
117
|
-
await cancelResult;
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const payload = {
|
|
121
|
-
availableMethods: thpState.handshakeCredentials.pairingMethods,
|
|
122
|
-
selectedMethod: thpState.pairingMethod,
|
|
123
|
-
nfcData: thpState.nfcData?.toString('hex')
|
|
124
|
-
};
|
|
125
|
-
device.prompt(DEVICE.THP_PAIRING, {
|
|
126
|
-
payload
|
|
127
|
-
}).then(response => {
|
|
128
|
-
if (response.success) {
|
|
129
|
-
dfd.resolve(response.payload);
|
|
130
|
-
} else {
|
|
131
|
-
abortThpWorkflow(device).then(() => {
|
|
132
|
-
dfd.resolve({
|
|
133
|
-
error: ERRORS.TypedError('ThpUnknownError', response.error.message)
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
const pairingResponse = await dfd.promise;
|
|
139
|
-
readAbort.abort();
|
|
140
|
-
await readCancel;
|
|
141
|
-
thpState.setPairingTagPromise(undefined);
|
|
142
|
-
if ('error' in pairingResponse) {
|
|
143
|
-
throw pairingResponse.error;
|
|
144
|
-
}
|
|
145
|
-
await resolveAfter(500);
|
|
146
|
-
return processThpPairingResponse(device, pairingResponse).catch(e => {
|
|
147
|
-
if (e.code === 'Failure_FirmwareError' || e.code === 'Failure_DataError') {
|
|
148
|
-
if ('tag' in pairingResponse) {
|
|
149
|
-
device.emit(DEVICE.THP_PAIRING_STATUS_CHANGED, {
|
|
150
|
-
status: 'invalid-tag',
|
|
151
|
-
tag: pairingResponse.tag
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
throw ERRORS.TypedError('Device_ThpPairingTagInvalid', e.message);
|
|
155
|
-
}
|
|
156
|
-
throw ERRORS.TypedError(e.code, e.message);
|
|
157
|
-
});
|
|
158
|
-
};
|
|
159
|
-
export const getThpCredentials = async (device, autoconnect = false) => {
|
|
160
|
-
const thpState = device.getThpState();
|
|
161
|
-
if (!thpState?.handshakeCredentials) {
|
|
162
|
-
throw ERRORS.TypedError('Device_ThpStateMissing');
|
|
163
|
-
}
|
|
164
|
-
const credentials = await thpCall(device, 'ThpCredentialRequest', {
|
|
165
|
-
autoconnect,
|
|
166
|
-
host_static_public_key: thpState.handshakeCredentials.hostStaticPublicKey.toString('hex'),
|
|
167
|
-
credential: thpState.pairingCredentials[0]?.credential
|
|
168
|
-
});
|
|
169
|
-
const host_static_key = thpState.handshakeCredentials.staticKey.toString('hex');
|
|
170
|
-
return {
|
|
171
|
-
...credentials.message,
|
|
172
|
-
autoconnect,
|
|
173
|
-
host_static_key
|
|
174
|
-
};
|
|
175
|
-
};
|
|
176
|
-
export const thpPairingEnd = async device => {
|
|
177
|
-
const result = await thpCall(device, 'ThpEndRequest', {});
|
|
178
|
-
device.getThpState()?.setPhase('paired');
|
|
179
|
-
return result;
|
|
180
|
-
};
|
|
181
|
-
export const thpPairing = async device => {
|
|
182
|
-
const thpState = device.getThpState();
|
|
183
|
-
if (!thpState?.handshakeCredentials) {
|
|
184
|
-
throw ERRORS.TypedError('Device_ThpStateMissing');
|
|
185
|
-
}
|
|
186
|
-
if (thpState.isPaired && thpState.pairingMethod !== protocolThp.ThpPairingMethod.SkipPairing) {
|
|
187
|
-
if (!thpState.isAutoconnectPaired) {
|
|
188
|
-
await getThpCredentials(device, false);
|
|
189
|
-
}
|
|
190
|
-
return thpPairingEnd(device);
|
|
191
|
-
}
|
|
192
|
-
const {
|
|
193
|
-
pairingMethods
|
|
194
|
-
} = thpState.handshakeCredentials;
|
|
195
|
-
const selected_pairing_method = pairingMethods[0];
|
|
196
|
-
thpState.setPairingMethod(selected_pairing_method);
|
|
197
|
-
const settings = settingsStore.get('thp');
|
|
198
|
-
await thpCall(device, 'ThpPairingRequest', {
|
|
199
|
-
host_name: sanitizeString(settings?.hostName) || 'Unknown hostName',
|
|
200
|
-
app_name: sanitizeString(settings?.appName) || 'Unknown appName'
|
|
201
|
-
});
|
|
202
|
-
const selectMethod = await thpCall(device, 'ThpSelectMethod', {
|
|
203
|
-
selected_pairing_method
|
|
204
|
-
});
|
|
205
|
-
if (selectMethod.type === 'ThpEndResponse') {
|
|
206
|
-
thpState.setIsPaired(true);
|
|
207
|
-
device.getThpState()?.setPhase('paired');
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
if (selectMethod.type === 'ThpCodeEntryCommitment') {
|
|
211
|
-
const codeEntryChallenge = Buffer.from(randomBytes(32));
|
|
212
|
-
const handshakeCommitment = Buffer.from(selectMethod.message.commitment, 'hex');
|
|
213
|
-
thpState.updateHandshakeCredentials({
|
|
214
|
-
handshakeCommitment,
|
|
215
|
-
codeEntryChallenge
|
|
216
|
-
});
|
|
217
|
-
const codeEntryCpace = await thpCall(device, 'ThpCodeEntryChallenge', {
|
|
218
|
-
challenge: codeEntryChallenge.toString('hex')
|
|
219
|
-
});
|
|
220
|
-
thpState.updateHandshakeCredentials({
|
|
221
|
-
trezorCpacePublicKey: Buffer.from(codeEntryCpace.message.cpace_trezor_public_key, 'hex')
|
|
222
|
-
});
|
|
223
|
-
await waitForPairingTag(device);
|
|
224
|
-
}
|
|
225
|
-
if (selectMethod.type === 'ThpPairingPreparationsFinished') {
|
|
226
|
-
if (thpState.pairingMethod === protocolThp.ThpPairingMethod.NFC) {
|
|
227
|
-
thpState.setNfcSecret(Buffer.from(randomBytes(16)));
|
|
228
|
-
}
|
|
229
|
-
await waitForPairingTag(device);
|
|
230
|
-
}
|
|
231
|
-
const credentials = await getThpCredentials(device, false);
|
|
232
|
-
device.emit(DEVICE.THP_CREDENTIALS_CHANGED, {
|
|
233
|
-
credentials
|
|
234
|
-
});
|
|
235
|
-
const settings1 = settingsStore.get('thp');
|
|
236
|
-
if (settings1) {
|
|
237
|
-
settings1.knownCredentials?.push(credentials);
|
|
238
|
-
}
|
|
239
|
-
thpState.setPairingCredentials([credentials]);
|
|
240
|
-
thpState.setIsPaired(true);
|
|
241
|
-
await thpPairingEnd(device);
|
|
242
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { thpCall } from "./thpCall.js";
|
|
2
|
-
export const createThpSession = async (device, deriveCardano) => {
|
|
3
|
-
let passphrase;
|
|
4
|
-
if (device.features.passphrase_protection === false) {
|
|
5
|
-
passphrase = {
|
|
6
|
-
passphrase: ''
|
|
7
|
-
};
|
|
8
|
-
} else {
|
|
9
|
-
passphrase = await device.prompt('passphrase', {}).then(promptRes => {
|
|
10
|
-
if (!promptRes.success) {
|
|
11
|
-
return {
|
|
12
|
-
passphrase: ''
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
return promptRes.payload.passphraseOnDevice ? {
|
|
16
|
-
on_device: true
|
|
17
|
-
} : {
|
|
18
|
-
passphrase: promptRes.payload.value.normalize('NFKD')
|
|
19
|
-
};
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
await thpCall(device, 'ThpCreateNewSession', {
|
|
23
|
-
...passphrase,
|
|
24
|
-
derive_cardano: deriveCardano
|
|
25
|
-
});
|
|
26
|
-
return 0;
|
|
27
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { thp as protocolThp } from '@trezor/protocol';
|
|
2
|
-
import type { IDevice } from "../../types/idevice.js";
|
|
3
|
-
type ThpTypedCall = {
|
|
4
|
-
ThpCreateChannelRequest: 'ThpCreateChannelResponse';
|
|
5
|
-
ThpHandshakeInitRequest: 'ThpHandshakeInitResponse';
|
|
6
|
-
ThpHandshakeCompletionRequest: 'ThpHandshakeCompletionResponse';
|
|
7
|
-
ThpPairingRequest: 'ThpPairingRequestApproved';
|
|
8
|
-
ThpSelectMethod: ['ThpCodeEntryCommitment', 'ThpEndResponse', 'ThpPairingRequestApproved', 'ThpPairingPreparationsFinished'];
|
|
9
|
-
ThpCodeEntryChallenge: ['ThpCodeEntryCpaceTrezor'];
|
|
10
|
-
ThpCodeEntryCpaceHostTag: 'ThpCodeEntrySecret';
|
|
11
|
-
ThpQrCodeTag: 'ThpQrCodeSecret';
|
|
12
|
-
ThpNfcTagHost: 'ThpNfcTagTrezor';
|
|
13
|
-
ThpCredentialRequest: 'ThpCredentialResponse';
|
|
14
|
-
ThpEndRequest: 'ThpEndResponse';
|
|
15
|
-
ThpCreateNewSession: 'Success';
|
|
16
|
-
};
|
|
17
|
-
type ThpMessage = protocolThp.ThpMessageType & {
|
|
18
|
-
Success: Record<never, never>;
|
|
19
|
-
};
|
|
20
|
-
type TypedPayloadItem<K> = K extends keyof ThpMessage ? {
|
|
21
|
-
type: K;
|
|
22
|
-
message: ThpMessage[K];
|
|
23
|
-
} : never;
|
|
24
|
-
type ExtractFromArray<A extends any[]> = { [K in keyof A]: TypedPayloadItem<A[K]> }[number];
|
|
25
|
-
type MessageKey = keyof ThpTypedCall;
|
|
26
|
-
type TypedPayload<T extends MessageKey> = ThpTypedCall[T] extends any[] ? ExtractFromArray<ThpTypedCall[T]> : TypedPayloadItem<ThpTypedCall[T]>;
|
|
27
|
-
type ThpCallResponse = { [K in keyof ThpTypedCall]: TypedPayload<K> };
|
|
28
|
-
type ThpMessagePayload<T extends MessageKey = MessageKey> = ThpMessage[T];
|
|
29
|
-
export declare const thpCall: <T extends MessageKey>(device: IDevice, name: T, data: ThpMessagePayload<T>) => Promise<ThpCallResponse[T]>;
|
|
30
|
-
export declare const abortThpWorkflow: (device: IDevice) => Promise<void>;
|
|
31
|
-
export {};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { DEVICE } from "@trezor/connect-common";
|
|
2
|
-
import { TypedError } from "@trezor/connect-common/lib/constants/errors.js";
|
|
3
|
-
export const thpCall = async (device, name, data) => {
|
|
4
|
-
const thpState = device.getThpState();
|
|
5
|
-
if (!thpState) {
|
|
6
|
-
throw TypedError('Device_ThpStateMissing');
|
|
7
|
-
}
|
|
8
|
-
const result = await device.getCurrentSession().call(name, data);
|
|
9
|
-
if (!result.success) {
|
|
10
|
-
throw result.error;
|
|
11
|
-
}
|
|
12
|
-
thpState.setCancelablePromise(false);
|
|
13
|
-
if (result.payload.type === 'ButtonRequest') {
|
|
14
|
-
thpState.setCancelablePromise(true);
|
|
15
|
-
if (result.payload.message.code === 'ButtonRequest_PassphraseEntry') {
|
|
16
|
-
device.emit(DEVICE.PASSPHRASE_ON_DEVICE);
|
|
17
|
-
} else {
|
|
18
|
-
device.emit(DEVICE.BUTTON, {
|
|
19
|
-
device,
|
|
20
|
-
payload: result.payload.message
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
return thpCall(device, 'ButtonAck', {});
|
|
24
|
-
}
|
|
25
|
-
if (result.payload.type === 'Failure') {
|
|
26
|
-
const {
|
|
27
|
-
code,
|
|
28
|
-
message
|
|
29
|
-
} = result.payload.message;
|
|
30
|
-
throw TypedError(code || 'Failure_UnknownCode', message);
|
|
31
|
-
}
|
|
32
|
-
if (result.payload.type === 'ThpError') {
|
|
33
|
-
const {
|
|
34
|
-
code,
|
|
35
|
-
message
|
|
36
|
-
} = result.payload.message;
|
|
37
|
-
throw TypedError(code, message);
|
|
38
|
-
}
|
|
39
|
-
return result.payload;
|
|
40
|
-
};
|
|
41
|
-
export const abortThpWorkflow = async device => {
|
|
42
|
-
const thpState = device.getThpState();
|
|
43
|
-
if (!thpState || !device.currentRun) {
|
|
44
|
-
return Promise.resolve();
|
|
45
|
-
}
|
|
46
|
-
if (thpState.pairingTagPromise) {
|
|
47
|
-
await thpState.pairingTagPromise.abort();
|
|
48
|
-
await device.getCurrentSession().cancelCall();
|
|
49
|
-
thpState.resetState();
|
|
50
|
-
device.emit(DEVICE.THP_PAIRING_STATUS_CHANGED, {
|
|
51
|
-
status: 'canceled'
|
|
52
|
-
});
|
|
53
|
-
} else if (thpState.cancelablePromise) {
|
|
54
|
-
thpState.sync('send', 'Cancel');
|
|
55
|
-
await device.getCurrentSession().send('Cancel', {});
|
|
56
|
-
await device.currentRun;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { TypedError } from "@trezor/connect-common/lib/constants/errors.js";
|
|
2
|
-
export const validateModelOneMessageSize = (device, messageHex) => {
|
|
3
|
-
if (device.features?.major_version === 1) {
|
|
4
|
-
const byteSize = messageHex.length / 2;
|
|
5
|
-
if (byteSize > 1024) {
|
|
6
|
-
throw TypedError('Method_DataOverflowModelOne');
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { IDevice } from "../../types/idevice.js";
|
|
2
|
-
type Context = {
|
|
3
|
-
device: IDevice;
|
|
4
|
-
} & ({
|
|
5
|
-
language?: undefined;
|
|
6
|
-
binary: ArrayBuffer;
|
|
7
|
-
} | {
|
|
8
|
-
language: string;
|
|
9
|
-
binary?: undefined;
|
|
10
|
-
});
|
|
11
|
-
export declare const changeLanguage: ({
|
|
12
|
-
device,
|
|
13
|
-
language,
|
|
14
|
-
binary
|
|
15
|
-
}: Context) => Promise<{
|
|
16
|
-
message: string;
|
|
17
|
-
}>;
|
|
18
|
-
export {};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ERRORS } from "@trezor/connect-common/lib/constants/index.js";
|
|
2
|
-
import { getLanguage } from "../../data/firmwareInfo.js";
|
|
3
|
-
const uploadTranslationData = async (device, payload) => {
|
|
4
|
-
if (payload === null) {
|
|
5
|
-
const response = await device.getCurrentSession().typedCall('ChangeLanguage', ['Success'], {
|
|
6
|
-
data_length: 0
|
|
7
|
-
});
|
|
8
|
-
return response.message;
|
|
9
|
-
}
|
|
10
|
-
const length = payload.byteLength;
|
|
11
|
-
device.startPiggybackAck();
|
|
12
|
-
let response = await device.getCurrentSession().typedCall('ChangeLanguage', ['DataChunkRequest', 'Success'], {
|
|
13
|
-
data_length: length
|
|
14
|
-
});
|
|
15
|
-
while (response.type !== 'Success') {
|
|
16
|
-
const start = response.message.data_offset;
|
|
17
|
-
const end = response.message.data_offset + response.message.data_length;
|
|
18
|
-
const chunk = payload.slice(start, end);
|
|
19
|
-
response = await device.getCurrentSession().typedCall('DataChunkAck', ['DataChunkRequest', 'Success'], {
|
|
20
|
-
data_chunk: Buffer.from(chunk).toString('hex')
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
await device.stopPiggybackAck();
|
|
24
|
-
return response.message;
|
|
25
|
-
};
|
|
26
|
-
export const changeLanguage = async ({
|
|
27
|
-
device,
|
|
28
|
-
language,
|
|
29
|
-
binary
|
|
30
|
-
}) => {
|
|
31
|
-
if (language === 'en-US') {
|
|
32
|
-
return uploadTranslationData(device, null);
|
|
33
|
-
}
|
|
34
|
-
if (binary) {
|
|
35
|
-
return uploadTranslationData(device, binary);
|
|
36
|
-
}
|
|
37
|
-
const version = device.getVersion();
|
|
38
|
-
if (!version) {
|
|
39
|
-
throw ERRORS.TypedError('Runtime', 'changeLanguage: device version unknown');
|
|
40
|
-
}
|
|
41
|
-
if (!device.firmwareType) {
|
|
42
|
-
throw ERRORS.TypedError('Runtime', 'changeLanguage: firmware type unknown');
|
|
43
|
-
}
|
|
44
|
-
if (!device.currentRelease) {
|
|
45
|
-
throw ERRORS.TypedError('Runtime', 'changeLanguage: release not found');
|
|
46
|
-
}
|
|
47
|
-
const {
|
|
48
|
-
translations
|
|
49
|
-
} = device.currentRelease;
|
|
50
|
-
const languageBinPath = translations[language];
|
|
51
|
-
const downloadedBinary = await getLanguage(languageBinPath);
|
|
52
|
-
if (!downloadedBinary) {
|
|
53
|
-
throw ERRORS.TypedError('Runtime', 'changeLanguage: translation not found');
|
|
54
|
-
}
|
|
55
|
-
let dataToSend;
|
|
56
|
-
if (Buffer.isBuffer(downloadedBinary)) {
|
|
57
|
-
dataToSend = new Uint8Array(downloadedBinary).buffer;
|
|
58
|
-
} else {
|
|
59
|
-
dataToSend = downloadedBinary;
|
|
60
|
-
}
|
|
61
|
-
return uploadTranslationData(device, dataToSend);
|
|
62
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { FirmwareHashCheckResult } from '@trezor/connect-common';
|
|
2
|
-
import { type Logger } from '@trezor/utils';
|
|
3
|
-
import type { IDevice } from "../../types/idevice.js";
|
|
4
|
-
type Context = {
|
|
5
|
-
device: IDevice;
|
|
6
|
-
logger: Logger;
|
|
7
|
-
};
|
|
8
|
-
export declare const checkFirmwareHash: ({
|
|
9
|
-
device,
|
|
10
|
-
logger
|
|
11
|
-
}: Context) => Promise<FirmwareHashCheckResult | null>;
|
|
12
|
-
export {};
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { randomBytes } from "@noble/hashes/utils.js";
|
|
2
|
-
import { serializeError } from "@trezor/utils";
|
|
3
|
-
import { calculateFirmwareHash, getBinaryOptional, stripFwHeaders } from "../../api/firmware/index.js";
|
|
4
|
-
import { getFirmwareLocation, getReleaseByVersion } from "../../data/firmwareInfo.js";
|
|
5
|
-
import * as settingsStore from "../../data/settingsStore.js";
|
|
6
|
-
import { getFirmwareType } from "../../utils/firmwareUtils.js";
|
|
7
|
-
const createFailResult = (error, errorPayload) => ({
|
|
8
|
-
success: false,
|
|
9
|
-
error,
|
|
10
|
-
errorPayload
|
|
11
|
-
});
|
|
12
|
-
export const checkFirmwareHash = async ({
|
|
13
|
-
device,
|
|
14
|
-
logger
|
|
15
|
-
}) => {
|
|
16
|
-
const enabled = settingsStore.get('enableFirmwareHashCheck');
|
|
17
|
-
if (!enabled) return createFailResult('check-skipped');
|
|
18
|
-
const firmwareVersion = device.getVersion();
|
|
19
|
-
if (firmwareVersion === undefined || !device.features || device.features.bootloader_mode) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
const firmwareType = getFirmwareType(device.features);
|
|
23
|
-
const release = await getReleaseByVersion(device.features, firmwareVersion, firmwareType);
|
|
24
|
-
if (!release) return createFailResult('unknown-release');
|
|
25
|
-
const firmwareLocation = getFirmwareLocation({
|
|
26
|
-
firmwareVersion,
|
|
27
|
-
remotePath: release.url,
|
|
28
|
-
deviceModel: device.features.internal_model,
|
|
29
|
-
firmwareType: getFirmwareType(device.features)
|
|
30
|
-
});
|
|
31
|
-
const {
|
|
32
|
-
baseUrl,
|
|
33
|
-
path
|
|
34
|
-
} = firmwareLocation;
|
|
35
|
-
const timeoutThresholdsPerModel = settingsStore.get('firmwareHashCheckTimeouts');
|
|
36
|
-
if (firmwareVersion === undefined || !device.features || device.features.bootloader_mode) {
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
const checkSupported = !device.unavailableCapabilities.getFirmwareHash;
|
|
40
|
-
if (!checkSupported) return createFailResult('check-unsupported');
|
|
41
|
-
const firmwareBinary = await getBinaryOptional({
|
|
42
|
-
baseUrl,
|
|
43
|
-
path,
|
|
44
|
-
release
|
|
45
|
-
});
|
|
46
|
-
if (firmwareBinary === null) {
|
|
47
|
-
return createFailResult('check-unsupported');
|
|
48
|
-
}
|
|
49
|
-
if (firmwareBinary.binary.byteLength < 200) {
|
|
50
|
-
logger.warn(`Firmware binary for hash check suspiciously small (< 200 b)`);
|
|
51
|
-
return createFailResult('check-unsupported');
|
|
52
|
-
}
|
|
53
|
-
const strippedBinary = stripFwHeaders(firmwareBinary.binary);
|
|
54
|
-
const {
|
|
55
|
-
hash: expectedHash,
|
|
56
|
-
challenge
|
|
57
|
-
} = calculateFirmwareHash({
|
|
58
|
-
internal_model: device.features.internal_model,
|
|
59
|
-
firmwareVersion,
|
|
60
|
-
fw: Buffer.from(strippedBinary),
|
|
61
|
-
key: Buffer.from(randomBytes(32))
|
|
62
|
-
});
|
|
63
|
-
try {
|
|
64
|
-
const ts = performance.now();
|
|
65
|
-
const deviceResponse = await device.getCurrentSession().typedCall('GetFirmwareHash', 'FirmwareHash', {
|
|
66
|
-
challenge
|
|
67
|
-
});
|
|
68
|
-
if (!deviceResponse?.message?.hash) {
|
|
69
|
-
return createFailResult('other-error', 'Device response is missing hash');
|
|
70
|
-
}
|
|
71
|
-
if (deviceResponse.message.hash !== expectedHash) {
|
|
72
|
-
return createFailResult('hash-mismatch');
|
|
73
|
-
}
|
|
74
|
-
const duration = performance.now() - ts;
|
|
75
|
-
logger.debug('GetFirmwareHash time', duration);
|
|
76
|
-
const timeoutThreshold = timeoutThresholdsPerModel?.[device.features.internal_model];
|
|
77
|
-
if (timeoutThreshold !== undefined && duration > timeoutThreshold) {
|
|
78
|
-
return createFailResult('takes-too-long');
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
success: true
|
|
82
|
-
};
|
|
83
|
-
} catch (errorPayload) {
|
|
84
|
-
return createFailResult('other-error', serializeError(errorPayload));
|
|
85
|
-
}
|
|
86
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { FIRMWARE } from "@trezor/connect-common";
|
|
2
|
-
import { isArrayMember } from "@trezor/utils";
|
|
3
|
-
import { checkFirmwareHash } from "./checkFirmwareHash.js";
|
|
4
|
-
const PROBE_CHECK_TIME_RETRIES = 4;
|
|
5
|
-
const probeCheckTime = async context => {
|
|
6
|
-
for (let i = 0; i < PROBE_CHECK_TIME_RETRIES; i++) {
|
|
7
|
-
const result = await checkFirmwareHash(context);
|
|
8
|
-
if (result !== null && (result.success || result.error !== 'takes-too-long')) {
|
|
9
|
-
context.device.setAuthenticityChecks(result);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
export const checkFirmwareHashWithRetries = async context => {
|
|
15
|
-
const lastResult = context.device.getAuthenticityChecks().firmwareHash;
|
|
16
|
-
const notDoneYet = lastResult === null;
|
|
17
|
-
const attemptsDone = lastResult?.attemptCount ?? 0;
|
|
18
|
-
if (attemptsDone >= FIRMWARE.HASH_CHECK_MAX_ATTEMPTS) return;
|
|
19
|
-
const wasError = lastResult !== null && !lastResult.success;
|
|
20
|
-
const wasErrorRetriable = wasError && isArrayMember(lastResult.error, FIRMWARE.HASH_CHECK_RETRIABLE_ERRORS);
|
|
21
|
-
const lastErrorPayload = wasError ? lastResult?.errorPayload : null;
|
|
22
|
-
if (notDoneYet || wasErrorRetriable) {
|
|
23
|
-
const result = await checkFirmwareHash(context);
|
|
24
|
-
context.device.setAuthenticityChecks(result);
|
|
25
|
-
if (result === null) return;
|
|
26
|
-
result.attemptCount = attemptsDone + 1;
|
|
27
|
-
if (!result.success && result.error === 'takes-too-long') {
|
|
28
|
-
await probeCheckTime(context);
|
|
29
|
-
}
|
|
30
|
-
if (result.success && lastErrorPayload) {
|
|
31
|
-
result.warningPayload = {
|
|
32
|
-
lastErrorPayload
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type Logger } from '@trezor/utils';
|
|
2
|
-
import type { WorkflowContext } from "../../types/workflow.js";
|
|
3
|
-
type Context = {
|
|
4
|
-
device: WorkflowContext['device'];
|
|
5
|
-
signal: AbortSignal;
|
|
6
|
-
logger?: Logger;
|
|
7
|
-
};
|
|
8
|
-
export declare const handshakeCancel: ({
|
|
9
|
-
device,
|
|
10
|
-
logger,
|
|
11
|
-
signal
|
|
12
|
-
}: Context) => Promise<void>;
|
|
13
|
-
export {};
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { TypedError } from "@trezor/connect-common/lib/constants/errors.js";
|
|
2
|
-
import { PROTOCOL_MALFORMED } from "@trezor/protocol/lib/errors.js";
|
|
3
|
-
import { TRANSPORT_ERROR } from "@trezor/transport-common";
|
|
4
|
-
import { resolveAfter, versionUtils } from "@trezor/utils";
|
|
5
|
-
const CANCEL_TIMEOUT = 1_000;
|
|
6
|
-
const ATTEMPTS_LIMIT = 10;
|
|
7
|
-
const isLegacyBridge = transport => transport.name === 'BridgeTransport' && !versionUtils.isNewerOrEqual(transport.version, '3.0.0');
|
|
8
|
-
export const handshakeCancel = async ({
|
|
9
|
-
device,
|
|
10
|
-
logger,
|
|
11
|
-
signal
|
|
12
|
-
}) => {
|
|
13
|
-
if (device.features || device.getThpState()?.properties) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const timeout = device.possibleT1 ? CANCEL_TIMEOUT : undefined;
|
|
17
|
-
logger?.debug('handshake Cancel start');
|
|
18
|
-
const send = await device.getCurrentSession().send('Cancel', {}, {
|
|
19
|
-
signal,
|
|
20
|
-
timeout
|
|
21
|
-
});
|
|
22
|
-
if (!send.success) {
|
|
23
|
-
logger?.debug(`handshake Cancel send error ${send.error}`);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
logger?.debug('handshake Cancel sent');
|
|
27
|
-
for (let attempt = 0; attempt < ATTEMPTS_LIMIT; ++attempt) {
|
|
28
|
-
logger?.debug(`handshake Cancel read attempt ${attempt}`);
|
|
29
|
-
const result = await device.getCurrentSession().receive({
|
|
30
|
-
signal,
|
|
31
|
-
timeout: CANCEL_TIMEOUT
|
|
32
|
-
});
|
|
33
|
-
if (!result.success && result.error.message === TRANSPORT_ERROR.ABORTED_BY_TIMEOUT) {
|
|
34
|
-
if (isLegacyBridge(device.transport)) {
|
|
35
|
-
await resolveAfter(501);
|
|
36
|
-
}
|
|
37
|
-
await device.acquire();
|
|
38
|
-
}
|
|
39
|
-
if (!result.success && result.error.message !== PROTOCOL_MALFORMED) {
|
|
40
|
-
logger?.debug(`handshake Cancel read error: ${result.error}`);
|
|
41
|
-
return;
|
|
42
|
-
} else if (result.success) {
|
|
43
|
-
logger?.debug(`handshake Cancel read success: ${result.payload.type}`);
|
|
44
|
-
if (result.payload.type === 'Failure' && result.payload.message.code === 'Failure_InvalidProtocol') {
|
|
45
|
-
logger?.debug(`handshake Cancel protocol v2 detected`);
|
|
46
|
-
device.setupThp();
|
|
47
|
-
}
|
|
48
|
-
if (result.payload.type === 'Failure' && result.payload.message.code === 'Failure_Busy') {
|
|
49
|
-
throw TypedError(result.payload.message.code, result.payload.message.message);
|
|
50
|
-
}
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
logger?.debug(`handshake Cancel attempts limit reached`);
|
|
55
|
-
};
|