]> git.codecow.com Git - libnemo.git/commitdiff
Push Ledger disconnects as queued request.
authorChris Duncan <chris@zoso.dev>
Tue, 23 Sep 2025 14:12:48 +0000 (07:12 -0700)
committerChris Duncan <chris@zoso.dev>
Tue, 23 Sep 2025 14:12:48 +0000 (07:12 -0700)
src/lib/ledger.ts

index 14062133bfdad0b424730805da0348b5497250fa..d783a47df13383c4282c0e700bd95b70c8b039df 100644 (file)
@@ -206,18 +206,20 @@ export class Ledger {
        * connection updates.
        */
        static async disconnect (): Promise<void> {
-               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 {