* 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))
+ }
})
}
} 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 {