UNPKG

@trezor/connect

Version:

High-level javascript interface for Trezor hardware wallet.

70 lines (69 loc) 4.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isFirmwareCacheUsedForSelectedSource = exports.getFirmwareType = exports.getFirmwareMode = exports.buildIntermediaryFirmwareFileName = exports.buildLocalFirmwareFileName = exports.buildLocalReleaseName = exports.findBestCompatibleRelease = exports.isStrictFeatures = void 0; const device_utils_1 = require("@trezor/device-utils"); const utils_1 = require("@trezor/utils"); const DataManager_1 = require("../data/DataManager"); const isStrictFeatures = extFeatures => [1, 2].includes(extFeatures.major_version) && (extFeatures.firmware_present === false || extFeatures.bootloader_mode == null || extFeatures.bootloader_mode === true); exports.isStrictFeatures = isStrictFeatures; const findBestCompatibleRelease = (availableFirmwares, currentVesion, checkProperty) => { if (!availableFirmwares || availableFirmwares.length === 0) { return; } const currentFirmwareVersion = currentVesion.firmwareVersion; const currentBootloaderVersion = currentVesion.bootloaderVersion; let versionToCompare = currentFirmwareVersion; if (checkProperty === 'min_bootloader_version' && currentBootloaderVersion) { versionToCompare = currentBootloaderVersion; } else if (checkProperty === 'min_bootloader_version' && currentFirmwareVersion) { const currentRelease = availableFirmwares.find(fw => utils_1.versionUtils.isEqual(currentFirmwareVersion, fw.version)); if (!currentRelease?.bootloader_version) { return; } } if (!versionToCompare) { return; } const sortedFirmwares = availableFirmwares.sort((a, b) => utils_1.versionUtils.isNewer(b.version, a.version) ? 1 : -1); const compatibleFirmware = sortedFirmwares.find(fw => utils_1.versionUtils.isNewerOrEqual(versionToCompare, fw[checkProperty])); return compatibleFirmware; }; exports.findBestCompatibleRelease = findBestCompatibleRelease; const buildLocalFileBaseName = (firmwareType, deviceModel, version) => { const firmwareSuffix = firmwareType === device_utils_1.FirmwareType.BitcoinOnly ? '-bitcoinonly' : ''; const model = deviceModel.toLowerCase(); const versionString = version.join('.'); return `trezor-${model}-${versionString}${firmwareSuffix}`; }; const buildLocalReleaseName = (firmwareType, deviceModel, version) => `${buildLocalFileBaseName(firmwareType, deviceModel, version)}.json`; exports.buildLocalReleaseName = buildLocalReleaseName; const buildLocalFirmwareFileName = (firmwareType, deviceModel, version) => `${buildLocalFileBaseName(firmwareType, deviceModel, version)}.bin`; exports.buildLocalFirmwareFileName = buildLocalFirmwareFileName; const buildIntermediaryFirmwareFileName = (internalModel, version) => `trezor-${internalModel.toLowerCase()}-inter-v${version}.bin`; exports.buildIntermediaryFirmwareFileName = buildIntermediaryFirmwareFileName; const getFirmwareMode = features => { if (features.bootloader_mode) return 'bootloader'; if (!features.initialized) return 'initialize'; if (features.no_backup) return 'seedless'; return 'normal'; }; exports.getFirmwareMode = getFirmwareMode; const getFirmwareType = features => { let type = device_utils_1.FirmwareType.Universal; if (features.fw_vendor === 'Trezor Bitcoin-only') { type = device_utils_1.FirmwareType.BitcoinOnly; } else if (features.fw_vendor === 'Trezor') { type = device_utils_1.FirmwareType.Universal; } else if ((0, exports.getFirmwareMode)(features) !== 'bootloader') { type = features.capabilities && features.capabilities.length > 0 && !features.capabilities.includes('Capability_Bitcoin_like') ? device_utils_1.FirmwareType.BitcoinOnly : device_utils_1.FirmwareType.Universal; } else if ((0, exports.getFirmwareMode)(features) === 'bootloader' && features.unit_btconly) { type = device_utils_1.FirmwareType.BitcoinOnly; } return type; }; exports.getFirmwareType = getFirmwareType; const isFirmwareCacheUsedForSelectedSource = () => DataManager_1.DataManager.getSettings('firmwareUpdateSource') === 'production'; exports.isFirmwareCacheUsedForSelectedSource = isFirmwareCacheUsedForSelectedSource; //# sourceMappingURL=firmwareUtils.js.map