Skip to content

feat: upgrade @ledgerhq/hw-transport for Nano Gen5 USB support#1928

Merged
piatoss3612 merged 2 commits intodevelopfrom
rowan/ledger-bump-gen5-support
Apr 21, 2026
Merged

feat: upgrade @ledgerhq/hw-transport for Nano Gen5 USB support#1928
piatoss3612 merged 2 commits intodevelopfrom
rowan/ledger-bump-gen5-support

Conversation

@piatoss3612
Copy link
Copy Markdown
Member

Summary

  • @ledgerhq/hw-transport ^6.31.4 → ^6.35.0
  • @ledgerhq/hw-transport-webhid ^6.29.4 → ^6.35.0
  • @ledgerhq/hw-transport-webusb ^6.29.4 → ^6.34.0
  • @ledgerhq/devices ^6.20.0 dead dep 제거 (apps/extension/package.json)

배경

최신 @ledgerhq/hw-transport-web{hid,usb}는 내부적으로 @ledgerhq/devices@8.14.0을 pull하며, 여기 devicesListLedger Nano Gen5 (productIdMM: 0x80, legacyUsbProductId: 0x0008)가 추가되어 있음.

이 버전 범프 없이는 TransportWebHID.create() / TransportWebUSB.create() 경로가 devices@8.4.4를 로드하여 Gen5 USB 연결 시 식별 실패.

Mobile에서 BLE 지원을 추가한 keplr-mobile-private#751과 페어링되는 Extension 쪽 변경.

업그레이드 후 USB 지원 모델: Nano S, Nano S Plus, Nano X, Stax, Flex, Nano Gen5 (신규)

Dead dep 제거 근거

@ledgerhq/devices: ^6.20.0은 2023-02-11 (커밋 03d3f2b58)에 ledgerUSBVendorId 용도로 추가됐으나, 이후 리팩토링으로 해당 import가 제거되면서 package.json 선언만 고아 상태로 남아있음. 현재 코드 전체에서 사용처 0건 (grep '@ledgerhq/devices' 결과 yarn.lock과 dep 선언만 매치), 다른 라이브러리 중 peerDependencies로 요구하는 것도 없음.

Test plan

  • Nano X (WebHID) — Cosmos 서명 정상
  • Nano X (WebHID) — EVM 서명 정상
  • Nano X (WebHID) — Starknet 서명 정상
  • Nano X (WebHID) — Bitcoin 서명 정상
  • Nano X (WebUSB 토글) — 위 4개 재확인
  • (가능 시) Nano Gen5 USB 연결 확인
  • yarn build 성공 (extension)
  • CI 통과

Notes

  • yarn.lock@ledgerhq/hw-transport@6.31.4 (→ devices 8.4.4), @6.20.0 (→ devices 6.20.0)가 여전히 병존 — hw-app-eth@6.42.8, hw-app-starknet@3.0.1, hw-transport-mocker, ledger-bitcoin@0.2.3가 caret으로 요구하기 때문. WebHID/WebUSB로 기기를 스캔·식별하는 1차 경로는 모두 8.14.0으로 수렴하므로 Gen5 지원에는 영향 없음. bundle 중복은 변경 전부터 이미 있던 상태.
  • hw-transport 싱글톤 통일은 follow-up으로 resolutions 도입 고려 가능 (Mobile PR #751이 동일 조합 실기기 QA 검증 후 적용 판단).
  • yarn npm audit --severity high: No audit suggestions.

🤖 Generated with Claude Code

- @ledgerhq/hw-transport ^6.31.4 → ^6.35.0
- @ledgerhq/hw-transport-webhid ^6.29.4 → ^6.35.0
- @ledgerhq/hw-transport-webusb ^6.29.4 → ^6.34.0

Latest web transports pull @ledgerhq/devices@8.14.0, which includes
Ledger Nano Gen5 in the device registry (productIdMM 0x80,
legacyUsbProductId 0x0008). Without this bump, WebHID/WebUSB paths
resolve devices@8.4.4 which doesn't know Nano Gen5.

Also removes dead @ledgerhq/devices ^6.20.0 from apps/extension
(last imported in 03d3f2b via ledgerUSBVendorId, removed during
later refactoring, leftover in package.json since 2023).

Paired with keplr-mobile-private PR #751 for BLE support.
@piatoss3612 piatoss3612 requested a review from a team as a code owner April 17, 2026 04:33
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 17, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
keplr-wallet-extension Ready Ready Preview, Comment Apr 17, 2026 5:04am

Request Review

hw-app-eth@6.42.8 and hw-app-starknet@3.0.1 pull an older
hw-transport transitively (^6.31.4 / ^6.31.2) into nested
node_modules, which TypeScript treats as a distinct Transport class
from the top-level 6.35.0 one — causing TS2345 "Argument of type
Transport is not assignable to parameter of type Transport" errors
across ledger-grant.tsx, cosmos-ledger-sign.ts, handle-eth-sign.ts,
handle-starknet-sign.ts, etc.

Adding resolutions["@ledgerhq/hw-transport"] = "^6.35.0" forces a
single Transport class identity across the workspace. Same pattern
used in keplr-mobile-private for the same reason.

Side effect: @ledgerhq/devices also collapses to a single 8.14.0
(previously 6.20.0 / 8.4.4 / 8.14.0 coexisted).
@piatoss3612 piatoss3612 merged commit 6bb6007 into develop Apr 21, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant