OptionalappOptionalappReadonlyisWhether or not the interaction is supported in legacy versions of the Ledger App (<=v2.0.6)
ReadonlyisWhether or not the interaction is supported in non-legacy versions of the Ledger App (>=v2.1.0)
ReadonlynetworkOptionalpolicyReadonlyverifyClose the Transport to free the interface (E.g. could be used in another tab now that the interaction is over)
The way the pubkey/xpub/fingerprints are grabbed makes this a little tricky. Instead of re-writing how that works, let's just add a way to explicitly close the transport.
Return whether there are any messages matching the given options.
Inheriting classes should set properties this.isLegacySupported
and this.isV2Supported to indicate whether a given interaction
has support for a given interaction. This method can then be called
to check the version of the app being called and return whether or
not the interaction is supported based on that version
Subclasses can override this method to indicate they are not supported.
This method has access to whatever options may have been passed
in by the constructor as well as the ability to interact with
this.environment to determine whether the functionality is
supported. See the Bowser documentation for more details:
https://github.com/lancedikson/bowser
isSupported() {
return this.environment.satisfies({
* declare browsers per OS
windows: {
"internet explorer": ">10",
},
macos: {
safari: ">10.1"
},
* per platform (mobile, desktop or tablet)
mobile: {
safari: '>=9',
'android browser': '>3.10'
},
* or in general
chrome: "~20.1.1432",
firefox: ">31",
opera: ">=22",
* also supports equality operator
chrome: "=20.1.1432", * will match particular build only
* and loose-equality operator
chrome: "~20", * will match any 20.* sub-version
chrome: "~20.1" * will match any 20.1.* sub-version (20.1.19 as well as 20.1.12.42-alpha.1)
});
}
Return the first message matching the given options (or null if none is found).
Adds pending and active messages at the info level urging
the user to be in the bitcoin app (ledger.app.bitcoin).
Return messages filtered by the given options.
Multiple options can be given at once to filter along multiple dimensions.
import {PENDING, ACTIVE} from "@caravan/bitcoin";
// Create any interaction instance
interaction.messages().forEach(msg => console.log(msg));
{ code: "device.connect", state: "pending", level: "info", text: "Please plug in your device."}
{ code: "device.active", state: "active", level: "info", text: "Communicating with your device..."}
{ code: "device.active.warning", state: "active", level: "warning", text: "Your device will warn you about...", version: "2.x"}
interaction.messagesFor({state: PENDING}).forEach(msg => console.log(msg));
{ code: "device.connect", state: "pending", level: "info", text: "Please plug in your device."}
interaction.messagesFor({code: ACTIVE}).forEach(msg => console.log(msg));
{ code: "device.active", state: "active", level: "info", text: "Communicating with your device..."}
{ code: "device.active.warning", state: "active", level: "warning", text: "Your device will warn you about...", version: "2.x"}
interaction.messagesFor({version: /^2/}).forEach(msg => console.log(msg));
{ code: "device.active", state: "active", level: "warning", text: "Your device will warn you about...", version: "2.x"}
Retrieve the text of the first message matching the given options
(or null if none is found).
Throws an error.
Throws an error.
Inheriting classes should call the super.run() as well as set the properties of support before calling their run in order to check support before calling the actual interaction run
The return type has to remain any to get inheritance typing to work.
Can be called by a subclass during its run() method.
Creates a transport layer connection, initializes a bitcoin app
object, and passes control to the callback function, with the
app API as the first argument to the function and the transport
API as the second.
See the [Ledger API]https://github.com/LedgerHQ/ledgerjs for general information or the [bitcoin app API]https://github.com/LedgerHQ/ledgerjs/tree/master/packages/hw-app-btc for examples of API calls.
Can be called by a subclass during its run() method.
Creates a transport layer connection and passes control to the
callback function, with the transport API as the first argument
to the function.
See the [Ledger API]https://github.com/LedgerHQ/ledgerjs for general information or a [specific transport API]https://github.com/LedgerHQ/ledgerjs/tree/master/packages/hw-transport-u2f for examples of API calls.
A base class for any interactions that need to interact with a registered wallet by providing a base constructor that will generate the key origins and the policy from a given braid as well as methods for registering and returning a policy hmac