import invariant from "invariant"; import Transport from "@ledgerhq/hw-transport"; export type AppAndVersion = { name: string; version: string; flags: number | Buffer; }; export const getAppAndVersion = async (transport: Transport): Promise => { const r = await transport.send(0xb0, 0x01, 0x00, 0x00); let i = 0; const format = r[i++]; invariant(format === 1, "getAppAndVersion: format not supported"); const nameLength = r[i++]; const name = r.slice(i, (i += nameLength)).toString("ascii"); const versionLength = r[i++]; const version = r.slice(i, (i += versionLength)).toString("ascii"); const flagLength = r[i++]; const flags = r.slice(i, (i += flagLength)); return { name, version, flags, }; }; export const checkIsBtcLegacy = async (transport: Transport): Promise => { try { // Call old btc API, it will throw an exception with new btc app. It is a workaround to differentiate new/old btc nano app await transport.send(0xe0, 0xc4, 0, 0); } catch { return false; } return true; };