30 sec connection timeout
This commit is contained in:
parent
c3f09f4931
commit
9b67c6baa3
2 changed files with 17 additions and 23 deletions
|
|
@ -1,13 +1,11 @@
|
|||
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid';
|
||||
import TransportNodeBle from '@ledgerhq/hw-transport-node-ble';
|
||||
import Transport from '@ledgerhq/hw-transport';
|
||||
import * as LedgerLogs from '@ledgerhq/logs';
|
||||
import Nano from 'hw-app-nano';
|
||||
|
||||
import * as rx from 'rxjs';
|
||||
|
||||
import { ipcMain } from 'electron';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
const STATUS_CODES = {
|
||||
SECURITY_STATUS_NOT_SATISFIED: 0x6982,
|
||||
|
|
@ -35,8 +33,7 @@ export interface LedgerData {
|
|||
*/
|
||||
export class LedgerService {
|
||||
walletPrefix = `44'/165'/`;
|
||||
waitTimeout = 300000;
|
||||
normalTimeout = 5000;
|
||||
waitTimeout = 30000;
|
||||
pollInterval = 10000;
|
||||
|
||||
pollingLedger = false;
|
||||
|
|
@ -65,25 +62,32 @@ export class LedgerService {
|
|||
async loadTransport(bluetooth: boolean) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const transport = bluetooth ? TransportNodeBle : TransportNodeHid;
|
||||
|
||||
let found = false;
|
||||
const sub = transport.listen({
|
||||
next: async(e) => {
|
||||
found = true;
|
||||
if (sub) sub.unsubscribe();
|
||||
|
||||
clearTimeout(timeoutId);
|
||||
this.ledger.transport = await transport.open(e.descriptor);
|
||||
this.ledger.transport.setExchangeTimeout(this.waitTimeout); // 5 minutes
|
||||
this.ledger.nano = new Nano(this.ledger.transport);
|
||||
resolve(this.ledger.transport);
|
||||
},
|
||||
error: (e) => reject(e),
|
||||
error: (e) => {
|
||||
clearTimeout(timeoutId);
|
||||
reject(e);
|
||||
},
|
||||
complete: () => {
|
||||
clearTimeout(timeoutId);
|
||||
if (!found) {
|
||||
reject(new Error('No device found'));
|
||||
reject(new Error(transport.ErrorMessage_NoDeviceFound));
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const timeoutId = setTimeout(() => {
|
||||
sub.unsubscribe();
|
||||
reject(new Error(transport.ErrorMessage_ListenTimeout));
|
||||
}, this.waitTimeout);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -141,8 +145,6 @@ export class LedgerService {
|
|||
|
||||
async getLedgerAccount(accountIndex, showOnScreen = false) {
|
||||
try {
|
||||
this.ledger.transport.setExchangeTimeout(showOnScreen ? this.waitTimeout : this.normalTimeout);
|
||||
|
||||
this.queryingLedger = true;
|
||||
const account = await this.ledger.nano.getAddress(this.ledgerPath(accountIndex), showOnScreen);
|
||||
this.queryingLedger = false;
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ import TransportUSB from '@ledgerhq/hw-transport-webusb';
|
|||
import TransportHID from '@ledgerhq/hw-transport-webhid';
|
||||
import TransportBLE from '@ledgerhq/hw-transport-web-ble';
|
||||
import Transport from '@ledgerhq/hw-transport';
|
||||
import * as LedgerLogs from '@ledgerhq/logs';
|
||||
import {Observable, Subject} from 'rxjs';
|
||||
import {Subject} from 'rxjs';
|
||||
import {ApiService} from './api.service';
|
||||
import {NotificationService} from './notification.service';
|
||||
import { environment } from '../../environments/environment';
|
||||
|
|
@ -47,8 +46,7 @@ const zeroBlock = '0000000000000000000000000000000000000000000000000000000000000
|
|||
export class LedgerService {
|
||||
walletPrefix = `44'/165'/`;
|
||||
|
||||
waitTimeout = 300000;
|
||||
normalTimeout = 5000;
|
||||
waitTimeout = 30000;
|
||||
pollInterval = 5000;
|
||||
|
||||
pollingLedger = false;
|
||||
|
|
@ -70,7 +68,7 @@ export class LedgerService {
|
|||
supportsUSB = false;
|
||||
|
||||
transportMode: 'U2F' | 'USB' | 'HID' | 'Bluetooth' = 'U2F';
|
||||
DynamicTransport = TransportU2F;
|
||||
DynamicTransport = TransportU2F as typeof Transport;
|
||||
|
||||
ledgerStatus$: Subject<{ status: string, statusText: string }> = new Subject();
|
||||
desktopMessage$ = new Subject();
|
||||
|
|
@ -262,11 +260,10 @@ export class LedgerService {
|
|||
|
||||
async loadTransport() {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.DynamicTransport.create().then(trans => {
|
||||
this.DynamicTransport.create(3000, this.waitTimeout).then(trans => {
|
||||
|
||||
// LedgerLogs.listen((log: LedgerLog) => console.log(`Ledger: ${log.type}: ${log.message}`));
|
||||
this.ledger.transport = trans;
|
||||
this.ledger.transport.setExchangeTimeout(this.waitTimeout); // 5 minutes
|
||||
this.ledger.nano = new Nano(this.ledger.transport);
|
||||
|
||||
resolve(this.ledger.transport);
|
||||
|
|
@ -334,9 +331,6 @@ export class LedgerService {
|
|||
return resolve(false);
|
||||
}
|
||||
|
||||
// if (this.ledger.status === LedgerStatus.READY) {
|
||||
// return resolve(true); // Already ready?
|
||||
// }
|
||||
let resolved = false;
|
||||
|
||||
// Set up a timeout when things are not ready
|
||||
|
|
@ -453,7 +447,6 @@ export class LedgerService {
|
|||
if (this.isDesktop) {
|
||||
return this.signBlockDesktop(accountIndex, blockData);
|
||||
} else {
|
||||
this.ledger.transport.setExchangeTimeout(this.waitTimeout);
|
||||
return await this.ledger.nano.signBlock(this.ledgerPath(accountIndex), blockData);
|
||||
}
|
||||
}
|
||||
|
|
@ -463,7 +456,6 @@ export class LedgerService {
|
|||
}
|
||||
|
||||
async getLedgerAccountWeb(accountIndex: number, showOnScreen = false) {
|
||||
this.ledger.transport.setExchangeTimeout(showOnScreen ? this.waitTimeout : this.normalTimeout);
|
||||
try {
|
||||
return await this.ledger.nano.getAddress(this.ledgerPath(accountIndex), showOnScreen);
|
||||
} catch (err) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue