mirror of
https://github.com/trezor/trezor-suite.git
synced 2026-03-09 16:58:32 +01:00
chore(suite): bitcoin-only fw util
This commit is contained in:
@@ -18,9 +18,15 @@ export const getFirmwareVersion = (device?: PartialDevice) => {
|
||||
return `${features.major_version}.${features.minor_version}.${features.patch_version}`;
|
||||
};
|
||||
|
||||
export const hasBitcoinOnlyFirmware = (device?: PartialDevice) =>
|
||||
device?.firmwareType === FirmwareType.BitcoinOnly;
|
||||
|
||||
/**
|
||||
* @deprecated This method should not be part of device-utils
|
||||
*/
|
||||
export const getFirmwareType = (device?: PartialDevice) => {
|
||||
if (isDeviceInBootloaderMode(device)) {
|
||||
return '';
|
||||
}
|
||||
return device?.firmwareType === 'bitcoin-only' ? 'Bitcoin-only' : 'Universal';
|
||||
return isBitcoinOnlyFirmware(device) ? 'Bitcoin-only' : 'Universal';
|
||||
};
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
// TODO: ⬇️ comment does not apply anymore
|
||||
// define required device attributes here to avoid dependencies
|
||||
|
||||
import { FirmwareType } from '@trezor/connect';
|
||||
|
||||
// can be replaced in the future when we create a device types package
|
||||
export type PartialDevice = Partial<{
|
||||
features: {
|
||||
@@ -16,5 +20,5 @@ export type PartialDevice = Partial<{
|
||||
model: string | null;
|
||||
internal_model: string | null;
|
||||
};
|
||||
firmwareType: string | null;
|
||||
firmwareType?: FirmwareType;
|
||||
}>;
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import { getBootloaderVersion, getFirmwareVersion } from '@trezor/device-utils';
|
||||
import {
|
||||
getBootloaderVersion,
|
||||
getFirmwareVersion,
|
||||
hasBitcoinOnlyFirmware,
|
||||
} from '@trezor/device-utils';
|
||||
import { Await } from '@trezor/type-utils';
|
||||
import { isDesktop } from '@trezor/env-utils';
|
||||
import { resolveStaticPath } from '@suite-common/suite-utils';
|
||||
@@ -84,9 +88,7 @@ const firmwareInstallThunk =
|
||||
// unless the user wants to switch firmware type
|
||||
let toBitcoinOnlyFirmware = firmwareType === FirmwareType.BitcoinOnly;
|
||||
if (!firmwareType) {
|
||||
toBitcoinOnlyFirmware = !prevDevice
|
||||
? false
|
||||
: prevDevice.firmwareType === 'bitcoin-only';
|
||||
toBitcoinOnlyFirmware = !prevDevice ? false : hasBitcoinOnlyFirmware(prevDevice);
|
||||
}
|
||||
|
||||
const targetFirmwareVersion = release.version.join('.');
|
||||
|
||||
@@ -12,7 +12,8 @@ import { useDevice, useFirmware, useOnboarding, useSelector } from 'src/hooks/su
|
||||
import { ReconnectDevicePrompt, InstallButton, FirmwareOffer } from 'src/components/firmware';
|
||||
import { FirmwareType, TrezorDevice } from 'src/types/suite';
|
||||
import { getFwUpdateVersion } from 'src/utils/suite/device';
|
||||
import { getFirmwareVersion } from '@trezor/device-utils';
|
||||
import { getFirmwareVersion, hasBitcoinOnlyFirmware } from '@trezor/device-utils';
|
||||
import { FirmwareType } from '@trezor/connect';
|
||||
|
||||
const Description = styled.div`
|
||||
align-items: center;
|
||||
@@ -133,7 +134,7 @@ export const FirmwareInitial = ({
|
||||
currentFwVersion &&
|
||||
availableFwVersion === currentFwVersion
|
||||
);
|
||||
const isCurrentlyBitcoinOnly = device.firmwareType === 'bitcoin-only';
|
||||
const isCurrentlyBitcoinOnly = hasBitcoinOnlyFirmware(device);
|
||||
const targetFirmwareType =
|
||||
// switching to Universal
|
||||
(isCurrentlyBitcoinOnly && shouldSwitchFirmwareType) ||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React, { useCallback, useEffect } from 'react';
|
||||
import styled, { css } from 'styled-components';
|
||||
import { analytics, EventType } from '@trezor/suite-analytics';
|
||||
import { getFirmwareType, getFirmwareVersion } from '@trezor/device-utils';
|
||||
import { getFirmwareVersion } from '@trezor/device-utils';
|
||||
|
||||
import { CharacterCount, Translation } from 'src/components/suite';
|
||||
import { Textarea, Select, variables, Button, CollapsibleBox } from '@trezor/components';
|
||||
@@ -174,11 +174,6 @@ export const Feedback = ({ type }: FeedbackProps) => {
|
||||
}
|
||||
}, [description]);
|
||||
|
||||
let firmwareType = '';
|
||||
if (device?.features) {
|
||||
firmwareType = getFirmwareType(device);
|
||||
}
|
||||
|
||||
const goBack = () => dispatch(setView('SUPPORT_FEEDBACK_SELECTION'));
|
||||
const onSubmit = useCallback(() => {
|
||||
const userData: UserData = {
|
||||
@@ -191,7 +186,7 @@ export const Feedback = ({ type }: FeedbackProps) => {
|
||||
device_model: device?.features?.internal_model,
|
||||
firmware_version: device?.features ? getFirmwareVersion(device) : '',
|
||||
firmware_revision: device?.features?.revision || '',
|
||||
firmware_type: firmwareType,
|
||||
firmware_type: device?.firmwareType || '',
|
||||
};
|
||||
if (type === 'BUG') {
|
||||
dispatch(
|
||||
@@ -223,7 +218,7 @@ export const Feedback = ({ type }: FeedbackProps) => {
|
||||
type: EventType.GuideFeedbackSubmit,
|
||||
payload: { type: type === 'BUG' ? 'bug' : 'suggestion' },
|
||||
});
|
||||
}, [device, dispatch, firmwareType, type, description, category, rating?.id]);
|
||||
}, [device, dispatch, type, description, category, rating?.id]);
|
||||
|
||||
return (
|
||||
<ViewWrapper>
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
getBootloaderVersion,
|
||||
getFirmwareRevision,
|
||||
getFirmwareVersion,
|
||||
hasBitcoinOnlyFirmware,
|
||||
isDeviceInBootloaderMode,
|
||||
} from '@trezor/device-utils';
|
||||
import { analyticsActions } from '@suite-common/analytics';
|
||||
@@ -82,7 +83,7 @@ const analyticsMiddleware =
|
||||
pin_protection: features.pin_protection,
|
||||
passphrase_protection: features.passphrase_protection,
|
||||
totalInstances: state.devices.length,
|
||||
isBitcoinOnly: action.payload.firmwareType === 'bitcoin-only',
|
||||
isBitcoinOnly: hasBitcoinOnlyFirmware(action.payload),
|
||||
totalDevices: getPhysicalDeviceCount(state.devices),
|
||||
language: features.language,
|
||||
model: features.internal_model,
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import { MiddlewareAPI } from 'redux';
|
||||
|
||||
import { discoveryActions, accountsActions, blockchainActions } from '@suite-common/wallet-core';
|
||||
import { getBootloaderVersion, getFirmwareVersion } from '@trezor/device-utils';
|
||||
import {
|
||||
getBootloaderVersion,
|
||||
getFirmwareVersion,
|
||||
hasBitcoinOnlyFirmware,
|
||||
} from '@trezor/device-utils';
|
||||
import { DEVICE, TRANSPORT } from '@trezor/connect';
|
||||
import { analyticsActions } from '@suite-common/analytics';
|
||||
|
||||
@@ -87,7 +91,7 @@ const sentryMiddleware =
|
||||
setSentryContext(deviceContextName, {
|
||||
mode,
|
||||
firmware: getFirmwareVersion(action.payload),
|
||||
isBitcoinOnly: action.payload.firmwareType === 'bitcoin-only',
|
||||
isBitcoinOnly: hasBitcoinOnlyFirmware(action.payload),
|
||||
bootloader: getBootloaderVersion(action.payload),
|
||||
model: state.suite.device?.features?.internal_model,
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { getFirmwareType, getFirmwareVersion } from '@trezor/device-utils';
|
||||
import { getFirmwareVersion } from '@trezor/device-utils';
|
||||
|
||||
import {
|
||||
getCommitHash,
|
||||
@@ -21,9 +21,9 @@ const getDeviceInfo = (device?: TrezorDevice) => {
|
||||
if (!device?.features) {
|
||||
return '';
|
||||
}
|
||||
return `Trezor ${device.features.internal_model} ${getFirmwareVersion(
|
||||
device,
|
||||
)} ${getFirmwareType(device)} (revision ${device.features.revision})`;
|
||||
return `Trezor ${device.features.internal_model} ${getFirmwareVersion(device)} ${
|
||||
device.firmwareType
|
||||
} (revision ${device.features.revision})`;
|
||||
};
|
||||
|
||||
const getSuiteInfo = () =>
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import { valid, satisfies } from 'semver';
|
||||
import { getFirmwareVersion } from '@trezor/device-utils';
|
||||
import {
|
||||
getFirmwareVersion,
|
||||
hasBitcoinOnlyFirmware,
|
||||
isDeviceInBootloaderMode,
|
||||
} from '@trezor/device-utils';
|
||||
|
||||
import type { AppState, TrezorDevice, ExtendedMessageDescriptor } from 'src/types/suite';
|
||||
import { DeviceModelInternal } from '@trezor/connect';
|
||||
@@ -109,3 +113,18 @@ export const validateFirmware = (
|
||||
return 'TR_FIRMWARE_VALIDATION_T1_V2';
|
||||
}
|
||||
};
|
||||
|
||||
export const getSuiteFwTypeFromDevice = (device?: TrezorDevice) => {
|
||||
if (isDeviceInBootloaderMode(device)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return hasBitcoinOnlyFirmware(device)
|
||||
? SuiteFirmwareType.BitcoinOnly
|
||||
: SuiteFirmwareType.Universal;
|
||||
};
|
||||
|
||||
export const getSuiteFwType = (firmwareType?: FirmwareType) =>
|
||||
firmwareType === FirmwareType.BitcoinOnly
|
||||
? SuiteFirmwareType.BitcoinOnly
|
||||
: SuiteFirmwareType.Universal;
|
||||
|
||||
@@ -20,7 +20,6 @@ import {
|
||||
getBootloaderHash,
|
||||
getBootloaderVersion,
|
||||
getFirmwareRevision,
|
||||
getFirmwareType,
|
||||
getFirmwareVersion,
|
||||
} from '@trezor/device-utils';
|
||||
import { DeepPartial } from '@trezor/type-utils';
|
||||
@@ -222,7 +221,7 @@ export const getApplicationInfo = (state: AppState, hideSensitiveInfo: boolean)
|
||||
model: device.features?.internal_model,
|
||||
firmware: device.features ? getFirmwareVersion(device) : '',
|
||||
firmwareRevision: device.features ? getFirmwareRevision(device) : '',
|
||||
firmwareType: device.features ? getFirmwareType(device) : '',
|
||||
firmwareType: device.firmwareType || '',
|
||||
bootloader: device.features ? getBootloaderVersion(device) : '',
|
||||
bootloaderHash: device.features ? getBootloaderHash(device) : '',
|
||||
numberOfWallets:
|
||||
|
||||
@@ -8,6 +8,7 @@ import { TextColumn } from 'src/components/suite/Settings';
|
||||
import { SettingsAnchor } from 'src/constants/suite/anchors';
|
||||
import { useDevice, useDispatch } from 'src/hooks/suite';
|
||||
import { Button, Card } from '@trezor/components';
|
||||
import { hasBitcoinOnlyFirmware } from '@trezor/device-utils';
|
||||
|
||||
const StyledCard = styled(Card)`
|
||||
align-items: flex-start;
|
||||
@@ -25,8 +26,7 @@ export const FirmwareTypeSuggestion = () => {
|
||||
const dispatch = useDispatch();
|
||||
const { device } = useDevice();
|
||||
|
||||
const bitcoinOnlyFirmware = device?.firmwareType === 'bitcoin-only';
|
||||
const translationId = bitcoinOnlyFirmware
|
||||
const translationId = hasBitcoinOnlyFirmware(device)
|
||||
? 'TR_SETTINGS_COINS_UNIVERSAL_FIRMWARE_SUGGESTION'
|
||||
: 'TR_SETTINGS_COINS_BITCOIN_FIRMWARE_SUGGESTION';
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import { useAnchor } from 'src/hooks/suite/useAnchor';
|
||||
import { SettingsAnchor } from 'src/constants/suite/anchors';
|
||||
import { useDevice, useSelector } from 'src/hooks/suite';
|
||||
import { FirmwareTypeSuggestion } from './FirmwareTypeSuggestion';
|
||||
import { hasBitcoinOnlyFirmware } from '@trezor/device-utils';
|
||||
|
||||
const StyledSettingsLayout = styled(SettingsLayout)`
|
||||
& > * + * {
|
||||
@@ -29,7 +30,7 @@ export const SettingsCoins = () => {
|
||||
|
||||
const { device } = useDevice();
|
||||
|
||||
const bitcoinOnlyFirmware = device?.firmwareType === 'bitcoin-only';
|
||||
const bitcoinOnlyFirmware = hasBitcoinOnlyFirmware(device);
|
||||
const onlyBitcoinEnabled =
|
||||
!!enabledNetworks.length &&
|
||||
enabledNetworks.every(coin => ['btc', 'regtest', 'test'].includes(coin));
|
||||
|
||||
@@ -8,7 +8,7 @@ import { goto } from 'src/actions/suite/routerActions';
|
||||
import { Button } from '@trezor/components';
|
||||
import { useAnchor } from 'src/hooks/suite/useAnchor';
|
||||
import { SettingsAnchor } from 'src/constants/suite/anchors';
|
||||
import { getFirmwareType, getFirmwareVersion } from '@trezor/device-utils';
|
||||
import { getFirmwareVersion, hasBitcoinOnlyFirmware } from '@trezor/device-utils';
|
||||
import { HELP_FIRMWARE_TYPE } from '@trezor/urls';
|
||||
|
||||
const Version = styled.div`
|
||||
@@ -36,9 +36,10 @@ export const FirmwareTypeChange = ({ isDeviceLocked }: FirmwareTypeProps) => {
|
||||
}
|
||||
|
||||
const currentFwVersion = getFirmwareVersion(device);
|
||||
const currentFwType = getFirmwareType(device);
|
||||
const actionButtonId =
|
||||
device.firmwareType === 'bitcoin-only' ? 'TR_SWITCH_TO_UNIVERSAL' : 'TR_SWITCH_TO_BITCOIN';
|
||||
const currentFwType = getSuiteFwTypeFromDevice(device);
|
||||
const actionButtonId = hasBitcoinOnlyFirmware(device)
|
||||
? 'TR_SWITCH_TO_UNIVERSAL'
|
||||
: 'TR_SWITCH_TO_BITCOIN';
|
||||
|
||||
const handleAction = () => dispatch(goto('firmware-type', { params: { cancelable: true } }));
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ export const validateDeviceCompatibility = (
|
||||
const deviceFwVersion = getFirmwareVersion(device);
|
||||
const deviceBootloaderVersion = getBootloaderVersion(device);
|
||||
const deviceFwRevision = getFirmwareRevision(device);
|
||||
const deviceFwVariant = device.firmwareType === 'bitcoin-only' ? 'bitcoin-only' : 'regular';
|
||||
const deviceFwType = device.firmwareType;
|
||||
const deviceInternalModel = device.features.internal_model.toLowerCase();
|
||||
const deviceVendor = device.features.vendor.toLowerCase();
|
||||
|
||||
@@ -184,7 +184,7 @@ export const validateDeviceCompatibility = (
|
||||
return (
|
||||
modelCondition.toLowerCase() === deviceInternalModel &&
|
||||
(vendorCondition.toLowerCase() === deviceVendor || vendorCondition === '*') &&
|
||||
(variantCondition.toLowerCase() === deviceFwVariant || variantCondition === '*') &&
|
||||
(variantCondition.toLowerCase() === deviceFwType || variantCondition === '*') &&
|
||||
(firmwareRevisionCondition.toLowerCase() === deviceFwRevision.toLowerCase() ||
|
||||
firmwareRevisionCondition === '*') &&
|
||||
(semver.satisfies(deviceFwVersion, createVersionRange(firmwareCondition)!) ||
|
||||
|
||||
Reference in New Issue
Block a user