From 53b20f533877e0396a19e5b1c19bbfd287a6166d Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 29 Sep 2020 17:40:33 +0200 Subject: [PATCH] Refactor ensureConnected --- .../launchpad-ledger/src/launchpadledger.ts | 41 +++++++++---------- .../types/launchpadledger.d.ts | 2 +- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/packages/launchpad-ledger/src/launchpadledger.ts b/packages/launchpad-ledger/src/launchpadledger.ts index 316c9fb1..80ce8cb8 100644 --- a/packages/launchpad-ledger/src/launchpadledger.ts +++ b/packages/launchpad-ledger/src/launchpadledger.ts @@ -81,25 +81,8 @@ export class LaunchpadLedger { } } - public async connect(timeout = defaultInteractionTimeout): Promise { - // assume good connection if connected once - if (this.cosmosApp) { - return this; - } - - if (this.platform !== "node") { - verifyBrowserIsSupported(this.platform, this.userAgent); - } - - const transport = await this.createTransport(timeout * 1000); - this.cosmosApp = new CosmosApp(transport); - - await this.verifyDeviceIsReady(); - return this; - } - public async getCosmosAppVersion(): Promise { - await this.connect(); + await this.ensureConnected(); assert(this.cosmosApp, "Cosmos Ledger App is not connected"); const response = await this.cosmosApp.getVersion(); @@ -111,7 +94,7 @@ export class LaunchpadLedger { } public async getPubkey(hdPath?: HdPath): Promise { - await this.connect(); + await this.ensureConnected(); assert(this.cosmosApp, "Cosmos Ledger App is not connected"); const hdPathToUse = hdPath || this.hdPaths[0]; @@ -135,7 +118,7 @@ export class LaunchpadLedger { } public async sign(message: Uint8Array, hdPath?: HdPath): Promise { - await this.connect(); + await this.ensureConnected(); assert(this.cosmosApp, "Cosmos Ledger App is not connected"); const hdPathToUse = hdPath || this.hdPaths[0]; @@ -145,6 +128,22 @@ export class LaunchpadLedger { return Secp256k1Signature.fromDer((response as SignResponse).signature).toFixedLength(); } + private async ensureConnected(timeout = defaultInteractionTimeout): Promise { + // assume good connection if connected once + if (this.cosmosApp) { + return; + } + + if (this.platform !== "node") { + verifyBrowserIsSupported(this.platform, this.userAgent); + } + + const transport = await this.createTransport(timeout * 1000); + this.cosmosApp = new CosmosApp(transport); + + await this.verifyDeviceIsReady(); + } + private async createTransport(timeout: number): Promise { // HACK: Use a variable to get webpack to ignore this const nodeJsTransportPackageName = "@ledgerhq/hw-transport-node-hid"; @@ -189,7 +188,7 @@ export class LaunchpadLedger { } private async getOpenAppName(): Promise { - await this.connect(); + await this.ensureConnected(); assert(this.cosmosApp, "Cosmos Ledger App is not connected"); const response = await this.cosmosApp.appInfo(); diff --git a/packages/launchpad-ledger/types/launchpadledger.d.ts b/packages/launchpad-ledger/types/launchpadledger.d.ts index 2cc42f18..459d82fe 100644 --- a/packages/launchpad-ledger/types/launchpadledger.d.ts +++ b/packages/launchpad-ledger/types/launchpadledger.d.ts @@ -16,12 +16,12 @@ export declare class LaunchpadLedger { readonly platform: string; readonly userAgent: string | null; constructor(options?: LaunchpadLedgerOptions); - connect(timeout?: number): Promise; getCosmosAppVersion(): Promise; getPubkey(hdPath?: HdPath): Promise; getPubkeys(): Promise; getCosmosAddress(pubkey?: Uint8Array): Promise; sign(message: Uint8Array, hdPath?: HdPath): Promise; + private ensureConnected; private createTransport; private verifyAppMode; private getOpenAppName;