Detalhes do pacote

@ledgerhq/hw-transport-webusb

LedgerHQ467.7kApache-2.06.29.7

Ledger Hardware Wallet WebUSB implementation of the communication layer

Ledger, LedgerWallet, webusb, NanoS

readme (leia-me)

GitHub, Ledger Devs Discord, Developer Portal

@ledgerhq/hw-transport-webusb

Allows to communicate with Ledger Hardware Wallets.

[Web] (WebUSB) – WebUSB check browser support.


Are you adding Ledger support to your software wallet?

You may be using this package to open a USB connection between your web application and the device.

For a smooth and quick integration:

  • See the developers’ documentation on the Developer Portal and
  • Go on Discord to chat with developer support and the developer community.

FAQ: "DOM Exception" is triggered when creating the transport

The transport functions create() and listen() must be called in the context of a user interaction (like a "click" event), otherwise it fails with DOM Exception. This is by WebUSB design. You also must run on HTTPS.

How to use this transport regarding WebUSB paradigm?

In WebUSB, we have a "permission native" modal that appears when we need to "request" a device. This is required at-least-once for the user to accept, and then we can open the transport without triggering this modal. However, in both cases, it must happen in context of a click like explain above. Our current implementation trade off is to abstract this out and only trigger the permission modal if no device are listed. This might change in the future.

In terms of UX, there are two classical use cases:

  1. you only need the device at key times, like once to get the address. once to sign a transaction,...
  2. your app lifecycle requires that you need to access the device at the beginning and/or at any time (like you want to ping with getAddress to get the wallet address)

in (1) case, you can just do your logic in each button (Get Address / Sign Transaction) time (create it, do the logic, close it). in (2) case, you will need to have a Connect button that appear when you don’t have the connection yet. And you need to hook to the “disconnect” event to potentially make the UI reflect that and require user to click again on that Connect button, because you can’t automatically create()/open() again.

Support status

WebUSB is currently only supported on Google Chrome / Chromium.

API

Table of Contents

TransportWebUSB

Extends Transport

WebUSB Transport implementation

Parameters

  • device USBDevice
  • interfaceNumber number

Examples

import TransportWebUSB from "@ledgerhq/hw-transport-webusb";
...
TransportWebUSB.create().then(transport => ...)

close

Release the transport device

Returns Promise\<void>

exchange

Exchange with the device using APDU protocol.

Parameters

Returns Promise[Buffer](https://nodejs.org/api/buffer.html) a promise of apdu response

isSupported

Check if WebUSB transport is supported.

list

List the WebUSB devices that was previously authorized by the user.

listen

Actively listen to WebUSB devices and emit ONE device that was either accepted before, if not it will trigger the native permission UI.

Important: it must be called in the context of a UI click!

Parameters
  • observer Observer\<DescriptorEvent\<USBDevice>>

Returns Subscription

request

Similar to create() except it will always display the device permission (even if some devices are already accepted).

openConnected

Similar to create() except it will never display the device permission (it returns a Promise\<?Transport>, null if it fails to find a device).

open

Create a Ledger transport with a USBDevice

Parameters
  • device USBDevice

changelog (log de mudanças)

@ledgerhq/hw-transport-webusb

6.29.7

Patch Changes

  • Updated dependencies [b5e3217]:
    • @ledgerhq/errors@6.22.0
    • @ledgerhq/devices@8.4.7
    • @ledgerhq/hw-transport@6.31.7

6.29.7-next.0

Patch Changes

  • Updated dependencies [b5e3217]:
    • @ledgerhq/errors@6.22.0-next.0
    • @ledgerhq/devices@8.4.7-next.0
    • @ledgerhq/hw-transport@6.31.7-next.0

6.29.6

Patch Changes

  • Updated dependencies [ebbbd47, f29e4ba]:
    • @ledgerhq/logs@6.13.0
    • @ledgerhq/devices@8.4.6
    • @ledgerhq/hw-transport@6.31.6

6.29.6-next.1

Patch Changes

  • Updated dependencies [ebbbd47]:
    • @ledgerhq/logs@6.13.0-next.1
    • @ledgerhq/devices@8.4.6-next.1
    • @ledgerhq/hw-transport@6.31.6-next.1

6.29.6-next.0

Patch Changes

  • Updated dependencies [f29e4ba]:
    • @ledgerhq/logs@6.13.0-next.0
    • @ledgerhq/devices@8.4.6-next.0
    • @ledgerhq/hw-transport@6.31.6-next.0

6.29.5

Patch Changes

  • Updated dependencies [107f35a, 9081c26]:
    • @ledgerhq/errors@6.21.0
    • @ledgerhq/devices@8.4.5
    • @ledgerhq/hw-transport@6.31.5

6.29.5-next.0

Patch Changes

  • Updated dependencies [107f35a, 9081c26]:
    • @ledgerhq/errors@6.21.0-next.0
    • @ledgerhq/devices@8.4.5-next.0
    • @ledgerhq/hw-transport@6.31.5-next.0

6.29.4

Patch Changes

  • Updated dependencies [0a71c43]:
    • @ledgerhq/errors@6.19.1
    • @ledgerhq/devices@8.4.4
    • @ledgerhq/hw-transport@6.31.4

6.29.4-next.0

Patch Changes

  • Updated dependencies [0a71c43]:
    • @ledgerhq/errors@6.19.1-next.0
    • @ledgerhq/devices@8.4.4-next.0
    • @ledgerhq/hw-transport@6.31.4-next.0

6.29.3

Patch Changes

  • Updated dependencies [5c738cb, fb9466a, a3fd728]:
    • @ledgerhq/errors@6.19.0
    • @ledgerhq/devices@8.4.3
    • @ledgerhq/hw-transport@6.31.3

6.29.3-next.0

Patch Changes

  • Updated dependencies [5c738cb, fb9466a, a3fd728]:
    • @ledgerhq/errors@6.19.0-next.0
    • @ledgerhq/devices@8.4.3-next.0
    • @ledgerhq/hw-transport@6.31.3-next.0

6.29.2

Patch Changes

  • Updated dependencies [0b12c90]:
    • @ledgerhq/devices@8.4.2
    • @ledgerhq/hw-transport@6.31.2

6.29.2-hotfix.0

Patch Changes

  • Updated dependencies [5d508e5]:
    • @ledgerhq/devices@8.4.2-hotfix.0
    • @ledgerhq/hw-transport@6.31.2-hotfix.0

6.29.1

Patch Changes

  • Updated dependencies [e78f3b7, f979216, c1d2bb0]:
    • @ledgerhq/errors@6.18.0
    • @ledgerhq/devices@8.4.1
    • @ledgerhq/hw-transport@6.31.1

6.29.1-next.0

Patch Changes

  • Updated dependencies [e78f3b7, f979216, c1d2bb0]:
    • @ledgerhq/errors@6.18.0-next.0
    • @ledgerhq/devices@8.4.1-next.0
    • @ledgerhq/hw-transport@6.31.1-next.0

6.29.0

Minor Changes

Patch Changes

6.29.0-next.0

Minor Changes

Patch Changes

  • Updated dependencies [77fa530, 815ae3d, cec1599, 3b9c93c]:
    • @ledgerhq/hw-transport@6.31.0-next.0
    • @ledgerhq/devices@8.4.0-next.0
    • @ledgerhq/errors@6.17.0-next.0

6.28.6

Patch Changes

6.28.6-next.0

Patch Changes

6.28.5

Patch Changes

  • Updated dependencies [f456d69]:
    • @ledgerhq/errors@6.16.3
    • @ledgerhq/devices@8.2.2
    • @ledgerhq/hw-transport@6.30.5

6.28.5-next.0

Patch Changes

  • Updated dependencies [f456d69]:
    • @ledgerhq/errors@6.16.3-next.0
    • @ledgerhq/devices@8.2.2-next.0
    • @ledgerhq/hw-transport@6.30.5-next.0

6.28.4

Patch Changes

  • Updated dependencies [ee88785]:
    • @ledgerhq/errors@6.16.2
    • @ledgerhq/devices@8.2.1
    • @ledgerhq/hw-transport@6.30.4

6.28.4-next.0

Patch Changes

  • Updated dependencies [f456d69]:
    • @ledgerhq/errors@6.16.2-next.0
    • @ledgerhq/devices@8.2.1-next.0
    • @ledgerhq/hw-transport@6.30.4-next.0

6.28.3

Patch Changes

  • Updated dependencies [eadebff]:
    • @ledgerhq/hw-transport@6.30.3

6.28.3-next.0

Patch Changes

  • Updated dependencies [eadebff]:
    • @ledgerhq/hw-transport@6.30.3-next.0

6.28.2

Patch Changes

  • Updated dependencies [16b4d7a]:
    • @ledgerhq/hw-transport@6.30.2

6.28.2-next.0

Patch Changes

  • Updated dependencies [16b4d7a]:
    • @ledgerhq/hw-transport@6.30.2-next.0

6.28.1

Patch Changes

  • Updated dependencies [52a3732, 4d1aade, 52a3732]:
    • @ledgerhq/hw-transport@6.30.1
    • @ledgerhq/errors@6.16.1
    • @ledgerhq/devices@8.2.0

6.28.1-next.0

Patch Changes

  • Updated dependencies [52a3732, 4d1aade, 52a3732]:
    • @ledgerhq/hw-transport@6.30.1-next.0
    • @ledgerhq/errors@6.16.1-next.0
    • @ledgerhq/devices@8.2.0-next.0

6.28.0

Minor Changes

Patch Changes

6.28.0-next.0

Minor Changes

Patch Changes

  • Updated dependencies [771c9d3c1d, c5981ae341, e63205b850, 5964e30bed]:
    • @ledgerhq/errors@6.16.0-next.0
    • @ledgerhq/hw-transport@6.30.0-next.0
    • @ledgerhq/devices@8.1.0-next.0
    • @ledgerhq/logs@6.12.0-next.0

6.27.20

Patch Changes

6.27.20-next.0

Patch Changes

6.27.19

Patch Changes

  • Updated dependencies [a61a43fc47, 3455944496]:
    • @ledgerhq/errors@6.14.0
    • @ledgerhq/devices@8.0.7
    • @ledgerhq/hw-transport@6.28.8

6.27.19-next.0

Patch Changes

  • Updated dependencies [a61a43fc47, 3455944496]:
    • @ledgerhq/errors@6.14.0-next.0
    • @ledgerhq/devices@8.0.7-next.0
    • @ledgerhq/hw-transport@6.28.8-next.0

6.27.18

Patch Changes

  • Updated dependencies [c7c484acf0]:
    • @ledgerhq/errors@6.13.1
    • @ledgerhq/devices@8.0.6
    • @ledgerhq/hw-transport@6.28.7

6.27.18-next.0

Patch Changes

  • Updated dependencies [c7c484acf0]:
    • @ledgerhq/errors@6.13.1-next.0
    • @ledgerhq/devices@8.0.6-next.0
    • @ledgerhq/hw-transport@6.28.7-next.0

6.27.17

Patch Changes

  • Updated dependencies [0f4293e9bf]:
    • @ledgerhq/errors@6.13.0
    • @ledgerhq/devices@8.0.5
    • @ledgerhq/hw-transport@6.28.6

6.27.17-next.0

Patch Changes

  • Updated dependencies [0f4293e9bf]:
    • @ledgerhq/errors@6.13.0-next.0
    • @ledgerhq/devices@8.0.5-next.0
    • @ledgerhq/hw-transport@6.28.6-next.0

6.27.16

Patch Changes

  • Updated dependencies [9adc1862dd]:
    • @ledgerhq/errors@6.12.7
    • @ledgerhq/devices@8.0.4
    • @ledgerhq/hw-transport@6.28.5

6.27.16-next.0

Patch Changes

  • Updated dependencies [9adc1862dd]:
    • @ledgerhq/errors@6.12.7-next.0
    • @ledgerhq/devices@8.0.4-next.0
    • @ledgerhq/hw-transport@6.28.5-next.0

6.27.15

Patch Changes

  • Updated dependencies [77f990e207]:
    • @ledgerhq/errors@6.12.6
    • @ledgerhq/devices@8.0.3
    • @ledgerhq/hw-transport@6.28.4

6.27.15-next.0

Patch Changes

  • Updated dependencies [77f990e207]:
    • @ledgerhq/errors@6.12.6-next.0
    • @ledgerhq/devices@8.0.3-next.0
    • @ledgerhq/hw-transport@6.28.4-next.0

6.27.14

Patch Changes

  • Updated dependencies [87d2349fd8]:
    • @ledgerhq/errors@6.12.5
    • @ledgerhq/devices@8.0.2
    • @ledgerhq/hw-transport@6.28.3

6.27.14-next.0

Patch Changes

  • Updated dependencies [87d2349fd8]:
    • @ledgerhq/errors@6.12.5-next.0
    • @ledgerhq/devices@8.0.2-next.0
    • @ledgerhq/hw-transport@6.28.3-next.0

6.27.13

Patch Changes

6.27.13-next.0

Patch Changes

  • Updated dependencies [1d0b2d19eb, ef945b05c0, 5fa68510b4]:
    • @ledgerhq/errors@6.12.4-next.0
    • @ledgerhq/devices@8.0.1-next.0
    • @ledgerhq/hw-transport@6.28.2-next.0

6.27.12

Patch Changes

  • Updated dependencies [62af25493e]:
    • @ledgerhq/devices@8.0.0
    • @ledgerhq/hw-transport@6.28.1

6.27.12-next.0

Patch Changes

  • Updated dependencies [62af25493e]:
    • @ledgerhq/devices@8.0.0-next.0
    • @ledgerhq/hw-transport@6.28.1-next.0

6.27.11

Patch Changes

  • Updated dependencies [c2779b1cab]:
    • @ledgerhq/hw-transport@6.28.0

6.27.11-next.0

Patch Changes

  • Updated dependencies [c2779b1cab]:
    • @ledgerhq/hw-transport@6.28.0-next.0

6.27.10

Patch Changes

6.27.10-next.0

Patch Changes

6.27.9

Patch Changes

  • Updated dependencies [f1c15446da]:
    • @ledgerhq/errors@6.12.2
    • @ledgerhq/hw-transport@6.27.9
    • @ledgerhq/devices@7.0.6

6.27.9-next.0

Patch Changes

  • Updated dependencies [f1c15446da]:
    • @ledgerhq/errors@6.12.2-next.0
    • @ledgerhq/hw-transport@6.27.9-next.0
    • @ledgerhq/devices@7.0.6-next.0

6.27.8

Patch Changes

  • Updated dependencies [856f49374e, 77056e3692]:
    • @ledgerhq/errors@6.12.1
    • @ledgerhq/devices@7.0.5
    • @ledgerhq/hw-transport@6.27.8

6.27.8-next.0

Patch Changes

  • Updated dependencies [856f49374e, 77056e3692]:
    • @ledgerhq/errors@6.12.1-next.0
    • @ledgerhq/devices@7.0.5-next.0
    • @ledgerhq/hw-transport@6.27.8-next.0

6.27.7

Patch Changes

6.27.7-next.0

Patch Changes

6.27.6

Patch Changes

  • #1356 ecac411d7a Thanks @juan-cortes! - Updated readme.md of packages

  • Updated dependencies [ecac411d7a]:

    • @ledgerhq/devices@7.0.3
    • @ledgerhq/errors@6.11.1
    • @ledgerhq/hw-transport@6.27.6
    • @ledgerhq/logs@6.10.1

6.27.6-next.0

Patch Changes

  • #1356 ecac411d7a Thanks @juan-cortes! - Updated readme.md of packages

  • Updated dependencies [ecac411d7a]:

    • @ledgerhq/devices@7.0.3-next.0
    • @ledgerhq/errors@6.11.1-next.0
    • @ledgerhq/hw-transport@6.27.6-next.0
    • @ledgerhq/logs@6.10.1-next.0

6.27.5

Patch Changes

  • Updated dependencies [1a94cbf28a, e0915b34ba]:
    • @ledgerhq/errors@6.11.0
    • @ledgerhq/devices@7.0.2
    • @ledgerhq/hw-transport@6.27.5

6.27.5-next.0

Patch Changes

  • Updated dependencies [1a94cbf28a, e0915b34ba]:
    • @ledgerhq/errors@6.11.0-next.0
    • @ledgerhq/devices@7.0.2-next.0
    • @ledgerhq/hw-transport@6.27.5-next.0

6.27.4

Patch Changes

  • Updated dependencies [ae5e33e15e]:
    • @ledgerhq/errors@6.10.2
    • @ledgerhq/devices@7.0.1
    • @ledgerhq/hw-transport@6.27.4

6.27.4-next.0

Patch Changes

  • Updated dependencies [ae5e33e15]:
    • @ledgerhq/errors@6.10.2-next.0
    • @ledgerhq/devices@7.0.1-next.0
    • @ledgerhq/hw-transport@6.27.4-next.0

6.27.3

Patch Changes

  • Updated dependencies [ecfdd1ebd8]:
    • @ledgerhq/hw-transport@6.27.3

6.27.3-next.0

Patch Changes

  • Updated dependencies [ecfdd1ebd]:
    • @ledgerhq/hw-transport@6.27.3-next.0

6.27.2

Patch Changes

  • #364 f538d2974 Thanks @elbywan! - #### Replace webpack with vite.js to speed up the ledger live desktop development process.

    To fully embrace the "bundleless" vite.js approach, it is necessary to transpile our packages contained in the monorepository to the ESM format, and subpath exports have been added to silently map to commonjs or esm depending on the need.

    🔥 BREAKING CHANGES for @ledgerhq/live-common, @ledgerhq/devices and @ledgerhq/hw-app-btc consumers.

    As highlighted here, it is not possible to target folders directly when using subpath exports.

    The workaround is to suffix the call with /index (or /).

    For instance…

    import * as currencies from "@ledgerhq/live-common/currencies";
    

    …must be rewritten to…

    import * as currencies from "@ledgerhq/live-common/currencies/index;";
    

    …or:

    import * as currencies from "@ledgerhq/live-common/currencies/;";
    
  • Updated dependencies [203b927b4, f538d2974]:

    • @ledgerhq/errors@6.10.1
    • @ledgerhq/devices@7.0.0
    • @ledgerhq/hw-transport@6.27.2

6.27.2-next.0

Patch Changes

  • #364 f538d2974 Thanks @elbywan! - #### Replace webpack with vite.js to speed up the ledger live desktop development process.

    To fully embrace the "bundleless" vite.js approach, it is necessary to transpile our packages contained in the monorepository to the ESM format, and subpath exports have been added to silently map to commonjs or esm depending on the need.

    🔥 BREAKING CHANGES for @ledgerhq/live-common, @ledgerhq/devices and @ledgerhq/hw-app-btc consumers.

    As highlighted here, it is not possible to target folders directly when using subpath exports.

    The workaround is to suffix the call with /index (or /).

    For instance…

    import * as currencies from "@ledgerhq/live-common/currencies";
    

    …must be rewritten to…

    import * as currencies from "@ledgerhq/live-common/currencies/index;";
    

    …or:

    import * as currencies from "@ledgerhq/live-common/currencies/;";
    
  • Updated dependencies [203b927b4, f538d2974]:

    • @ledgerhq/errors@6.10.1-next.0
    • @ledgerhq/devices@7.0.0-next.0
    • @ledgerhq/hw-transport@6.27.2-next.0