From 73c9ada1621362524efbe1a233885dacca243375 Mon Sep 17 00:00:00 2001 From: highlander Date: Sat, 27 Jun 2026 15:10:12 -0500 Subject: [PATCH] fix(nodewebusb): drop legacy PID 0x0001 from WebUSB getDevice filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebUSB can never serve a 0x0001 device — the TransportDelegate ctor rejects any non-0x0002 PID with FirmwareUpdateRequired. Matching 0x0001 in the active pair filter only produced a doomed WebUSB attempt and a misleading 'Firmware 6.1.0 required' error before the caller's HID fallback. Old devices now skip WebUSB cleanly and pair over HID. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/hdwallet-keepkey-nodewebusb/src/adapter.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/hdwallet-keepkey-nodewebusb/src/adapter.ts b/packages/hdwallet-keepkey-nodewebusb/src/adapter.ts index 51a0a7d1..07d43c2b 100644 --- a/packages/hdwallet-keepkey-nodewebusb/src/adapter.ts +++ b/packages/hdwallet-keepkey-nodewebusb/src/adapter.ts @@ -10,10 +10,14 @@ export const NodeWebUSBAdapterDelegate = { return devices.filter((x) => x.vendorId === VENDOR_ID && [WEBUSB_PRODUCT_ID, HID_PRODUCT_ID].includes(x.productId)); }, async getDevice(serialNumber?: string): Promise { + // Only match the WebUSB PID (0x0002). The TransportDelegate ctor rejects any + // other PID with FirmwareUpdateRequired, so matching legacy 0x0001 here just + // produced a doomed pair attempt + a misleading "Firmware 6.1.0 required" + // before the caller's HID fallback. Old (PID 0x0001) devices now skip WebUSB + // cleanly and pair over HID. (getDevices() still lists 0x0001 for detection.) const out = await webusb.requestDevice({ filters: [ { vendorId: VENDOR_ID, productId: WEBUSB_PRODUCT_ID, serialNumber }, - { vendorId: VENDOR_ID, productId: HID_PRODUCT_ID, serialNumber }, ], }); if (out.serialNumber === undefined) throw new Error("expected serial number");