From 9d0e601a179107cb150dfb6db400394106d9a856 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Tue, 15 Sep 2020 14:59:14 +0200 Subject: [PATCH] launchpad-ledger: Improve error handling --- .../launchpad-ledger/src/launchpadledger.ts | 21 ++++++++++++------- .../types/launchpadledger.d.ts | 4 ++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/launchpad-ledger/src/launchpadledger.ts b/packages/launchpad-ledger/src/launchpadledger.ts index b3c8bf05..d781ea95 100644 --- a/packages/launchpad-ledger/src/launchpadledger.ts +++ b/packages/launchpad-ledger/src/launchpadledger.ts @@ -12,6 +12,13 @@ import CosmosApp, { } from "ledger-cosmos-js"; import semver from "semver"; +/* eslint-disable @typescript-eslint/naming-convention */ +export interface LedgerAppErrorResponse { + readonly error_message?: string; + readonly device_locked?: boolean; +} +/* eslint-enable */ + const defaultInteractionTimeout = 120; // seconds to wait for user action on Ledger, currently is always limited to 60 const requiredCosmosAppVersion = "1.5.3"; @@ -152,9 +159,7 @@ export class LaunchpadLedger { const hdPathToUse = hdPath || this.hdPaths[0]; // ledger-cosmos-js hardens the first three indices const response = await this.cosmosApp.sign(unharden(hdPathToUse), fromUtf8(message)); - this.handleLedgerErrors(response, { - rejectionMessage: "Transaction signing request was rejected by the user", - }); + this.handleLedgerErrors(response, "Transaction signing request was rejected by the user"); return Secp256k1Signature.fromDer((response as SignResponse).signature).toFixedLength(); } @@ -196,13 +201,14 @@ export class LaunchpadLedger { await this.verifyCosmosAppIsOpen(); } - /* eslint-disable @typescript-eslint/naming-convention */ private handleLedgerErrors( + /* eslint-disable @typescript-eslint/naming-convention */ { - error_message: errorMessage, + error_message: errorMessage = "No errors", device_locked: deviceLocked = false, - }: { error_message: string; device_locked?: boolean }, - { rejectionMessage = "Request was rejected by the user" } = {}, + }: LedgerAppErrorResponse, + /* eslint-enable */ + rejectionMessage = "Request was rejected by the user", ): void { if (deviceLocked) { throw new Error("Ledger’s screensaver mode is on"); @@ -228,5 +234,4 @@ export class LaunchpadLedger { throw new Error(`Ledger Native Error: ${errorMessage}`); } } - /* eslint-enable */ } diff --git a/packages/launchpad-ledger/types/launchpadledger.d.ts b/packages/launchpad-ledger/types/launchpadledger.d.ts index c9167fc3..6eda113d 100644 --- a/packages/launchpad-ledger/types/launchpadledger.d.ts +++ b/packages/launchpad-ledger/types/launchpadledger.d.ts @@ -1,4 +1,8 @@ import { HdPath } from "@cosmjs/crypto"; +export interface LedgerAppErrorResponse { + readonly error_message?: string; + readonly device_locked?: boolean; +} export interface LaunchpadLedgerOptions { readonly hdPaths?: readonly HdPath[]; readonly prefix?: string;