open-index/open-npm huggingface dataset:
npm package: @ledgerhq/metamask-keyring
Description: A Metamask keyring implementation to bridge wallet operatations with Ledger Nano devices.
Latest version: 0.3.3

# Metamask Keyring

This repository contains a node module that makes it easy to integrate the Metamask Mobile app through the app's generic KeyringController / Keyring approach.

The Metamask Ethereum [Keyring Controller](https://github.com/MetaMask/KeyringController) is an abstraction to work with multiple keyrings that serve as bridges to external wallet / HW wallet providers. The component needs to adhere to [the Keyring Class protocol](https://github.com/MetaMask/KeyringController) to support Ethereum based actions from the Ledger Nano X device.

As such is provides the following members used by a top level KeyringController:

- `Keyring.type` - A class property that returns a unique string describing the Keyring. (value fixed to 'Ledger')
- `serialize()` - Returns any JSON-serializable JavaScript object that you like to store as the state of the LedgerKeyring. It will be encoded to a string, encrypted with the user's password, and stored to disk.
- `deserialize(object)` - Restores the internal state based on the previously store keyring state.
- `addAccounts(n)` - Retrieves an account from the ledger and stores the address on the PK. In the current implementation we are supporting a single default account and won't allow adding more.
- `getAccounts()` - Retrieves the list of accounts store in the keyring state
- `signTransaction(address, transaction)` - Interacts with the Ledger Device to sign an [ethereumjs-tx](https://github.com/ethereumjs/ethereumjs-tx) transaction
- `signMessage / signPersonalMessage(address, data)` - Takes a hash data and signs it using the Ledger Device
- `signTypedData(address, data, versionInformation)` - Signs a typed message (EIP712) using the Ledger Device. Only V4 is supported.
- `getName()` - Returns a user friendly name that can be used as label for Metamask accounts
- `getAppAndVersion()` - Returns the currently running application and version that can be used as a "pre-check" of conditions before trying to sign.
- `forgetDevice()` - Resets the state of the keyring
- `setTransport()` - Specifies the transport to use when talking to the Ledger Device.

## Usage

```javascript
const KeyringController = require('eth-keyring-controller');
const LedgerKeyring = require('@ledgerhq/metamask-keyring');
const BluetoothTransport = require("@ledgerhq/react-native-hw-transport-ble");

const keyringController = new KeyringController({
  keyringTypes: [LedgerKeyring],
  initState: initState.KeyringController,
});

// Connect to device first
const device = ...; // get the device to econnect to
const transport = await BluetoothTransport.open(device);

// Perform signing action
const tx = ...; // ethereumjs-tx object
const address = ...;

const signedTx = await keyringController.signTransaction(address, tx);
```
npm package: @ledgerhq/nano-app-web-installer-lib
Description: Lib to help install nano app easier
Author: Henri Ly
Latest version: 0.1.3

# Nano web installer library

This library is a helper to install an app to a Nano device on the web.
It exposes a few function to install an App using its name, check the list of all apps installed on a device

## Requirements

A hw-transport library is required to communicate with the device, for instance

- @ledgerhq/hw-transport-webusb

## Installation

    npm install --save @ledgerhq/nano-app-web-installer-lib

## Usage

This code sample shows how to :
- Create a transport connection with webUSB
- Get the firmware version of a device
- Install an app using its name

```javascript
import { installAppByName, getAllAppInstalled, getDeviceInfo } from '@ledgerhq/nano-app-web-installer-lib';
import TransportWebUSB from "@ledgerhq/hw-transport-webusb";

const myAppName = "staRknet";

// starknet app is only availble in staging, provider = 4
const provider = 4;

// set to true to uninstall app
const isDelete = false;

// create connection to nano device
const transport = await TransportWebUSB.create();
const info = await getDeviceInfo(transport);

switch (transport.deviceModel.id) {
    case "nanoX":
        if(info.version === '2.1.0') {
            await installAppByName(appName, transport, isDelete, provider);
        } else {
            throw "Device is not up to date"
        }
        break;
    case "nanoSP":
        if(info.version === '1.1.0') {
            await installAppByName(appName, transport, isDelete, provider);
        } else {
            throw "Device is not up to date"
        }
        break;
    case "nanoS":
        if(info.version === '2.1.0') {
            await installAppByName(appName, transport, isDelete, provider);
        } else {
            throw "Device is not up to date"
        }
        break;
    default:
        throw "Device not recognized"
}

// check if apps already exists
const apps = await getAllAppInstalled(transport);
const isInstalled = !!apps.find(app => app.name == myAppName);

// Note this function returns when the installation starts, not finishes
// Optionnal parameters: 
// delete: boolean set to true to uninstall the app instead
// provider: number. Catalog of apps. default to 1 (production and tested)  
await installAppByName(myAppName, transport, false, 4);
```


## Get all apps for a device (to find its name for example)

An app name is Capitalized.
- Ethereum
- Cosmos
- Bitcoin
- staRknet

If you need to know all apps name for a device run 

```javascript

import { getDeviceInfo, getAppsListByDevice } from '@ledgerhq/nano-app-web-installer-lib';

// Catalog of apps. 1 is production and tested
const provider = 1;  
// get all device info to know its available apps
const deviceInfo = await getDeviceInfo(transport);
// load all app available for device. Second param is dev mode. set to false
const appByDevice = await getAppsListByDevice(deviceInfo, false, provider);
```