diff --git a/src/errors.ts b/src/errors.ts index d7d6f81708..b51e92f367 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -23,6 +23,7 @@ export const LowerThanMinimumRelayFee = createCustomErrorClass( export const TransactionRefusedOnDevice = createCustomErrorClass( "TransactionRefusedOnDevice" ); +export const DeviceNotOnboarded = createCustomErrorClass("DeviceNotOnboarded"); export const InvalidAddressBecauseAlreadyDelegated = createCustomErrorClass( "InvalidAddressBecauseAlreadyDelegated" ); diff --git a/src/hw/getDeviceInfo.ts b/src/hw/getDeviceInfo.ts index 112d0f4288..73576b5d3b 100644 --- a/src/hw/getDeviceInfo.ts +++ b/src/hw/getDeviceInfo.ts @@ -10,6 +10,7 @@ import getAppAndVersion from "./getAppAndVersion"; import type { DeviceInfo } from "../types/manager"; import { PROVIDERS } from "../manager/provider"; import { isDashboardName } from "./isDashboardName"; +import { DeviceNotOnboarded } from "../errors"; const ManagerAllowedFlag = 0x08; const PinValidatedFlag = 0x80; export default async function getDeviceInfo( @@ -37,7 +38,16 @@ export default async function getDeviceInfo( throw new DeviceOnDashboardExpected(); } - const res = await getVersion(transport); + const res = await getVersion(transport).catch((e) => { + if (e instanceof TransportStatusError) { + // @ts-expect-error typescript not checking agains the instanceof + if (e.statusCode === 0x6d06) { + throw new DeviceNotOnboarded(); + } + } + throw e; + }); + const { isBootloader, rawVersion,