From: Chris Duncan Date: Tue, 23 Sep 2025 14:12:48 +0000 (-0700) Subject: Push Ledger disconnects as queued request. X-Git-Tag: v0.10.5~12^2~8 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=4d630b92d0da65f260a0c72f5a9f9b2479a2d9b3;p=libnemo.git Push Ledger disconnects as queued request. --- diff --git a/src/lib/ledger.ts b/src/lib/ledger.ts index 1406213..d783a47 100644 --- a/src/lib/ledger.ts +++ b/src/lib/ledger.ts @@ -206,18 +206,20 @@ export class Ledger { * connection updates. */ static async disconnect (): Promise { - this.#isPolling = false - return new Promise(resolve => { - setTimeout(async () => { - await (await navigator?.hid?.getDevices?.() ?? []) - .filter(device => device.vendorId === this.ledgerVendorId) - .map(device => device.close()) - await (await navigator?.usb?.getDevices?.() ?? []) + this.#enqueue(async () => { + try { + this.#isPolling = false + const hidDevices = await navigator?.hid?.getDevices?.() ?? [] + const usbDevices = await navigator?.usb?.getDevices?.() ?? [] + const devices = [...hidDevices, ...usbDevices] .filter(device => device.vendorId === this.ledgerVendorId) - .map(device => device.close()) + await Promise.allSettled(devices.map(device => device.forget?.() ?? Promise.resolve())) this.#status = 'DISCONNECTED' - resolve() - }) + } catch (err) { + console.warn('Ledger.disconnect()', err) + } finally { + await new Promise(r => setTimeout(r, 5000)) + } }) } @@ -509,7 +511,7 @@ export class Ledger { } else if (this.#transport === TransportUSB && isUsbPaired) { await this.#connect() } else { - console.log('No Ledger devices paired on current interface') + console.log('No Ledger devices paired on USB') this.#status = 'DISCONNECTED' } } catch {