# README

How to install

```bash
yarn add wallets-wrappers
npm i wallets-wrappers
```

Example flow

```js
const metamask = new WalletsWrapper({
  type: WalletsNames.Metamask,
  infuraApiKey: process.env.REACT_APP_INFURA_API_KEY || '',
})

metamask
  .init({
    appUrl: 'example.com',
    email: 'example@gmail.com',
  })
  .then(() => {
    metamask.address$.subscribe(setAddress)
    metamask.errors$.subscribe(setError)
    metamask.isConnected$.subscribe(setIsConnected)
    metamask.chainId$.subscribe(setChain)

    metamask.getAddress().then(setAddress)

    metamask.getStandardContract(coinAddresses[CoinNames.USDT]).then(async (contract) => {
      await contract.init()
      const usdtBalance = await contract.getBalance()
    })

    metamask.getStandardContract(ERC20address).then(async (contract) => {
      await contract.init()
      const balance = await contract.getBalance()
      setBalanceERC20(balance)
      setERC20Contract(contract)
    })
    metamask.getStandardContract(ERC721address).then(async (contract) => {
      await contract.init()
      const balance = await contract.getBalance()
      setBalanceERC721(balance)
      setERC721Contract(contract)
    })
    metamask.getStandardContract(ERC1155address).then(async (contract) => {
      await contract.init()
      const balance = await contract.getBalance({ ids: [0, 1] })
      setBalanceERC1155(balance)
      contract
      setERC1155Contract(contract)
    })
  })
  .catch()

const handleClickGetmetamaskwallet = async () => {
  await metamask.connectWallet()
}

const handleClickSwitchmetamasknetwork = async () => {
  await metamask.switchNetwork(ChainIds.GoerliTestNetwork)
}

const handleClickPersonalSign = async () => {
  await metamask.sign({ message: 'Hello signer!', type: 'personal_sign' })
}

const handleClickSendETH = async () => {
  await metamask.transfer({
    addressTo,
    value,
  })
}

const handleClickGetContract = async () => {
  const contract = await metamask.getStandardContract(ERC20ContractAddress?.value || '')
  await contract.init()
}

const handleClickTransferERC20 = async () => {
  await ERC20Contract?.transfer({
    addressTo: addressToERC20?.value || '',
    values: [Number(valueERC20?.value || '')],
  })
}

const handleClickTransferERC721 = async () => {
  await ERC721Contract?.transfer({
    addressTo: addressToERC721?.value || '',
    tokenIds: [Number(tokenIdERC721?.value || '')],
  })
}

const handleClickTransferERC1155 = async () => {
  await ERC1155Contract?.transfer({
    addressTo: addressToERC1155?.value || '',
    tokenIds: [Number(tokenIdERC1155?.value || '')],
    values: [1],
  })
}

const handleClickWatchAsset = async () => {
  await metamask.addToken(CoinNames.USDT)
}
```


## Classes

<dl>
<dt><a href="#ERC1155">ERC1155</a></dt>
<dd><p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p></dd>
<dt><a href="#ERC20">ERC20</a></dt>
<dd><p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p></dd>
<dt><a href="#ERC721">ERC721</a></dt>
<dd><p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p></dd>
<dt><a href="#StandardContract">StandardContract</a></dt>
<dd><p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p></dd>
<dt><a href="#AnchorWrapper">AnchorWrapper</a></dt>
<dd><p>The client describes how to work with Anchor.</p></dd>
<dt><a href="#MetamaskWrapper">MetamaskWrapper</a></dt>
<dd><p>The client describes how to work with Metamask Extension.</p></dd>
<dt><a href="#TrezorWrapper">TrezorWrapper</a></dt>
<dd><p>The client describes how to work with Trezor.</p></dd>
<dt><a href="#WalletsWrapper">WalletsWrapper</a></dt>
<dd><p>The client describes how to work with all wallets.
All connection to wallets must be with this client</p></dd>
</dl>

<a name="ERC1155"></a>

## ERC1155
<p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p>

**Kind**: global class  
**Implements**: <code>IStandardContract</code>  

* [ERC1155](#ERC1155)
    * [.init()](#ERC1155+init)
    * [.getBalance(object,)](#ERC1155+getBalance) ⇒ <code>Promise.&lt;number&gt;</code>
    * [.transfer(args)](#ERC1155+transfer) ⇒ <code>Promise.&lt;Transaction&gt;</code>
    * [.getDecodedTransfer(args)](#ERC1155+getDecodedTransfer) ⇒ <code>string</code>
    * [.getTokenUri(tokenId)](#ERC1155+getTokenUri) ⇒ <code>Promise.&lt;string&gt;</code>
    * [.transferEvents()](#ERC1155+transferEvents)

<a name="ERC1155+init"></a>

### erC1155.init()
<p>Gives access to contract methods,
if you don't call init client just won't know which contract to use</p>

**Kind**: instance method of [<code>ERC1155</code>](#ERC1155)  
<a name="ERC1155+getBalance"></a>

### erC1155.getBalance(object,) ⇒ <code>Promise.&lt;number&gt;</code>
<p>Check balance in contract</p>

**Kind**: instance method of [<code>ERC1155</code>](#ERC1155)  

| Param | Type |
| --- | --- |
| object, | <code>GetContractBalance</code> | 

<a name="ERC1155+transfer"></a>

### erC1155.transfer(args) ⇒ <code>Promise.&lt;Transaction&gt;</code>
<p>Transfer token</p>

**Kind**: instance method of [<code>ERC1155</code>](#ERC1155)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="ERC1155+getDecodedTransfer"></a>

### erC1155.getDecodedTransfer(args) ⇒ <code>string</code>
<p>get decoded Transfer</p>

**Kind**: instance method of [<code>ERC1155</code>](#ERC1155)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="ERC1155+getTokenUri"></a>

### erC1155.getTokenUri(tokenId) ⇒ <code>Promise.&lt;string&gt;</code>
<p>Get token uri, only works when this.type === 'ERC721'</p>

**Kind**: instance method of [<code>ERC1155</code>](#ERC1155)  

| Param | Type |
| --- | --- |
| tokenId | <code>string</code> | 

<a name="ERC1155+transferEvents"></a>

### erC1155.transferEvents()
<p>Subscribe on transfer events in contract</p>

**Kind**: instance method of [<code>ERC1155</code>](#ERC1155)  
<a name="ERC20"></a>

## ERC20
<p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p>

**Kind**: global class  
**Implements**: <code>IStandardContract</code>  

* [ERC20](#ERC20)
    * [.init()](#ERC20+init)
    * [.getBalance(object,)](#ERC20+getBalance) ⇒ <code>Promise.&lt;number&gt;</code>
    * [.transfer(args)](#ERC20+transfer) ⇒ <code>Promise.&lt;Transaction&gt;</code>
    * [.getDecodedTransfer(args)](#ERC20+getDecodedTransfer) ⇒ <code>string</code>
    * [.transferEvents()](#ERC20+transferEvents)

<a name="ERC20+init"></a>

### erC20.init()
<p>Gives access to contract methods,
if you don't call init client just won't know which contract to use</p>

**Kind**: instance method of [<code>ERC20</code>](#ERC20)  
<a name="ERC20+getBalance"></a>

### erC20.getBalance(object,) ⇒ <code>Promise.&lt;number&gt;</code>
<p>Check balance in contract</p>

**Kind**: instance method of [<code>ERC20</code>](#ERC20)  

| Param | Type |
| --- | --- |
| object, | <code>GetContractBalance</code> | 

<a name="ERC20+transfer"></a>

### erC20.transfer(args) ⇒ <code>Promise.&lt;Transaction&gt;</code>
<p>Transfer token</p>

**Kind**: instance method of [<code>ERC20</code>](#ERC20)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="ERC20+getDecodedTransfer"></a>

### erC20.getDecodedTransfer(args) ⇒ <code>string</code>
<p>get decoded Transfer</p>

**Kind**: instance method of [<code>ERC20</code>](#ERC20)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="ERC20+transferEvents"></a>

### erC20.transferEvents()
<p>Subscribe on transfer events in contract</p>

**Kind**: instance method of [<code>ERC20</code>](#ERC20)  
<a name="ERC721"></a>

## ERC721
<p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p>

**Kind**: global class  
**Implements**: <code>IStandardContract</code>  

* [ERC721](#ERC721)
    * [.init()](#ERC721+init)
    * [.getBalance(address,, object,)](#ERC721+getBalance) ⇒ <code>Promise.&lt;number&gt;</code>
    * [.transfer(args)](#ERC721+transfer) ⇒ <code>Promise.&lt;Transaction&gt;</code>
    * [.getDecodedTransfer(args)](#ERC721+getDecodedTransfer) ⇒ <code>string</code>
    * [.getTokenUri(tokenId)](#ERC721+getTokenUri) ⇒ <code>Promise.&lt;string&gt;</code>
    * [.transferEvents()](#ERC721+transferEvents)

<a name="ERC721+init"></a>

### erC721.init()
<p>Gives access to contract methods,
if you don't call init client just won't know which contract to use</p>

**Kind**: instance method of [<code>ERC721</code>](#ERC721)  
<a name="ERC721+getBalance"></a>

### erC721.getBalance(address,, object,) ⇒ <code>Promise.&lt;number&gt;</code>
<p>Check balance in contract</p>

**Kind**: instance method of [<code>ERC721</code>](#ERC721)  

| Param | Type | Description |
| --- | --- | --- |
| address, | <code>string</code> | <p>you can specify explicitly to check a different address</p> |
| object, | <code>GetContractBalance</code> |  |

<a name="ERC721+transfer"></a>

### erC721.transfer(args) ⇒ <code>Promise.&lt;Transaction&gt;</code>
<p>Transfer token</p>

**Kind**: instance method of [<code>ERC721</code>](#ERC721)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="ERC721+getDecodedTransfer"></a>

### erC721.getDecodedTransfer(args) ⇒ <code>string</code>
<p>get decoded Transfer</p>

**Kind**: instance method of [<code>ERC721</code>](#ERC721)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="ERC721+getTokenUri"></a>

### erC721.getTokenUri(tokenId) ⇒ <code>Promise.&lt;string&gt;</code>
<p>Get token uri, only works when this.type === 'ERC721'</p>

**Kind**: instance method of [<code>ERC721</code>](#ERC721)  

| Param | Type |
| --- | --- |
| tokenId | <code>string</code> | 

<a name="ERC721+transferEvents"></a>

### erC721.transferEvents()
<p>Subscribe on transfer events in contract</p>

**Kind**: instance method of [<code>ERC721</code>](#ERC721)  
<a name="StandardContract"></a>

## StandardContract
<p>The client describes how to work with ERC20, ERC721, ERC1155 contracts .</p>

**Kind**: global class  
**Implements**: <code>IStandardContract</code>  

* [StandardContract](#StandardContract)
    * [.init()](#StandardContract+init)
    * [.getBalance(object,)](#StandardContract+getBalance) ⇒ <code>Promise.&lt;number&gt;</code>
    * [.transfer(args)](#StandardContract+transfer) ⇒ <code>Promise.&lt;Transaction&gt;</code>
    * [.getTokenUri(tokenId)](#StandardContract+getTokenUri) ⇒ <code>Promise.&lt;string&gt;</code>
    * [.approve(object)](#StandardContract+approve) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
    * [.setApprovalForAll(object)](#StandardContract+setApprovalForAll) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
    * [.transferEvents()](#StandardContract+transferEvents)

<a name="StandardContract+init"></a>

### standardContract.init()
<p>Gives access to contract methods,
if you don't call init client just won't know which contract to use</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  
<a name="StandardContract+getBalance"></a>

### standardContract.getBalance(object,) ⇒ <code>Promise.&lt;number&gt;</code>
<p>Check balance in contract</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  

| Param | Type |
| --- | --- |
| object, | <code>GetContractBalance</code> | 

<a name="StandardContract+transfer"></a>

### standardContract.transfer(args) ⇒ <code>Promise.&lt;Transaction&gt;</code>
<p>Transfer token</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  

| Param | Type |
| --- | --- |
| args | <code>TransferContractToken</code> | 

<a name="StandardContract+getTokenUri"></a>

### standardContract.getTokenUri(tokenId) ⇒ <code>Promise.&lt;string&gt;</code>
<p>Get token uri, only works when this.type === 'ERC721'</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  

| Param | Type |
| --- | --- |
| tokenId | <code>string</code> | 

<a name="StandardContract+approve"></a>

### standardContract.approve(object) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
<p>Approve token for ERC20 and ERC721</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  

| Param | Type |
| --- | --- |
| object | <code>ApproveToken</code> | 

<a name="StandardContract+setApprovalForAll"></a>

### standardContract.setApprovalForAll(object) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
<p>setApprovalForAll token for ERC721 and ERC1155</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  

| Param | Type |
| --- | --- |
| object | <code>SetApprovalForAll</code> | 

<a name="StandardContract+transferEvents"></a>

### standardContract.transferEvents()
<p>Subscribe on transfer events in contract</p>

**Kind**: instance method of [<code>StandardContract</code>](#StandardContract)  
<a name="AnchorWrapper"></a>

## AnchorWrapper
<p>The client describes how to work with Anchor.</p>

**Kind**: global class  
**Implements**: <code>IAnchorWrapper</code>  

* [AnchorWrapper](#AnchorWrapper)
    * [.init()](#AnchorWrapper+init) ⇒ <code>LinkSession</code> \| <code>null</code>
    * [.getBalance(coins)](#AnchorWrapper+getBalance) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
    * [.getContractData(coins)](#AnchorWrapper+getContractData) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
    * [.getAccountInfo(args)](#AnchorWrapper+getAccountInfo) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
    * [.connectWallet()](#AnchorWrapper+connectWallet) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
    * [.sendSignedTransaction(object)](#AnchorWrapper+sendSignedTransaction) ⇒ <code>Promise.&lt;(TransactResult\|undefined)&gt;</code>
    * [.sendTransaction(tx)](#AnchorWrapper+sendTransaction) ⇒ <code>Promise.&lt;SendTransactionResponse&gt;</code>
    * [.transfer(args)](#AnchorWrapper+transfer) ⇒ <code>TransactResult</code> \| <code>undefined</code>

<a name="AnchorWrapper+init"></a>

### anchorWrapper.init() ⇒ <code>LinkSession</code> \| <code>null</code>
<p>init AnchorConnect library</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  
<a name="AnchorWrapper+getBalance"></a>

### anchorWrapper.getBalance(coins) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
<p>Get balance from current wallet in native coin</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;number&gt;&gt;</code> - <ul>
<li>balance value</li>
</ul>  

| Param | Type | Description |
| --- | --- | --- |
| coins | <code>GetEosAccountInfoProps</code> | <ul> <li></li> </ul> |

<a name="AnchorWrapper+getContractData"></a>

### anchorWrapper.getContractData(coins) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
<p>Get balance from current wallet in contracts</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;number&gt;&gt;</code> - <ul>
<li>balance value</li>
</ul>  

| Param | Type | Description |
| --- | --- | --- |
| coins | <code>GetEosAccountInfoProps</code> | <ul> <li></li> </ul> |

<a name="AnchorWrapper+getAccountInfo"></a>

### anchorWrapper.getAccountInfo(args) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
<p>Get account info from current wallets in native coin</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| args | <code>GetEosAccountInfoProps</code> | <ul> <li></li> </ul> |

<a name="AnchorWrapper+connectWallet"></a>

### anchorWrapper.connectWallet() ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
<p>Get data for sign in via anchor</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;string&gt;&gt;</code> - <ul>
<li>wallet address</li>
</ul>  
<a name="AnchorWrapper+sendSignedTransaction"></a>

### anchorWrapper.sendSignedTransaction(object) ⇒ <code>Promise.&lt;(TransactResult\|undefined)&gt;</code>
<p>Send Transaction with user's anchor</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  

| Param | Type |
| --- | --- |
| object | <code>SendEosSignedTransaction</code> | 

<a name="AnchorWrapper+sendTransaction"></a>

### anchorWrapper.sendTransaction(tx) ⇒ <code>Promise.&lt;SendTransactionResponse&gt;</code>
<p>Send Transaction</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  

| Param | Type |
| --- | --- |
| tx | <code>SendEosTransaction</code> | 

<a name="AnchorWrapper+transfer"></a>

### anchorWrapper.transfer(args) ⇒ <code>TransactResult</code> \| <code>undefined</code>
<p>Transfer native coin</p>

**Kind**: instance method of [<code>AnchorWrapper</code>](#AnchorWrapper)  

| Param | Type |
| --- | --- |
| args | <code>EosTransferProps</code> | 

<a name="MetamaskWrapper"></a>

## MetamaskWrapper
<p>The client describes how to work with Metamask Extension.</p>

**Kind**: global class  
**Implements**: <code>IMetamaskWrapper</code>  

* [MetamaskWrapper](#MetamaskWrapper)
    * [new MetamaskWrapper()](#new_MetamaskWrapper_new)
    * [.generateWallet()](#MetamaskWrapper+generateWallet) ⇒ <code>object</code>
    * [.connectWallet()](#MetamaskWrapper+connectWallet) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
    * [.getAddress()](#MetamaskWrapper+getAddress) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
    * [.getBalance(getBalanceProps, network, address)](#MetamaskWrapper+getBalance) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
    * [.getAccountInfo(accounts)](#MetamaskWrapper+getAccountInfo) ⇒ <code>Promise.&lt;Array.&lt;AccountInfo&gt;&gt;</code>
    * [.getChain()](#MetamaskWrapper+getChain) ⇒ <code>Promise.&lt;(ChainInfo\|null)&gt;</code>
    * [.switchNetwork(chainId)](#MetamaskWrapper+switchNetwork) ⇒ <code>Promise.&lt;void&gt;</code>
    * [.switchCustomNetwork(network)](#MetamaskWrapper+switchCustomNetwork) ⇒ <code>Promise.&lt;void&gt;</code>
    * [.addToken(token)](#MetamaskWrapper+addToken) ⇒ <code>Promise.&lt;boolean&gt;</code>
    * [.addCustomToken(newAsset)](#MetamaskWrapper+addCustomToken) ⇒ <code>Promise.&lt;boolean&gt;</code>
    * [.sign(object)](#MetamaskWrapper+sign) ⇒ <code>Promise.&lt;void&gt;</code>
    * [.transfer(args)](#MetamaskWrapper+transfer) ⇒ <code>Promise.&lt;(ethers.providers.TransactionResponse\|null)&gt;</code>
    * [.sendSignedTransaction(tx)](#MetamaskWrapper+sendSignedTransaction) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
    * [.sendTransaction(tx)](#MetamaskWrapper+sendTransaction) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
    * [.getMobileLink()](#MetamaskWrapper+getMobileLink) ⇒ <code>string</code>

<a name="new_MetamaskWrapper_new"></a>

### new MetamaskWrapper()
<p>Current class is Singleton</p>

<a name="MetamaskWrapper+generateWallet"></a>

### metamaskWrapper.generateWallet() ⇒ <code>object</code>
<p>Generate Ethers wallet</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
**Returns**: <code>object</code> - <ul>
<li>Object with address, mnemonic and privateKey</li>
</ul>  
<a name="MetamaskWrapper+connectWallet"></a>

### metamaskWrapper.connectWallet() ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
<p>Connect to Metamask Extension and return current wallet address if extension exists
or open installation page</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;string&gt;&gt;</code> - <ul>
<li>wallet address</li>
</ul>  
<a name="MetamaskWrapper+getAddress"></a>

### metamaskWrapper.getAddress() ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
<p>Get current Metamask wallet address</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;string&gt;&gt;</code> - <ul>
<li>wallet address</li>
</ul>  
<a name="MetamaskWrapper+getBalance"></a>

### metamaskWrapper.getBalance(getBalanceProps, network, address) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
<p>Get balance from current wallet in native coin</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;number&gt;&gt;</code> - <ul>
<li>balance value</li>
</ul>  

| Param | Type | Description |
| --- | --- | --- |
| getBalanceProps | <code>GetBalanceProps</code> | <p>custom props if balance in custom network and address needed</p> |
| network | <code>ChainIds</code> |  |
| address | <code>string</code> |  |

<a name="MetamaskWrapper+getAccountInfo"></a>

### metamaskWrapper.getAccountInfo(accounts) ⇒ <code>Promise.&lt;Array.&lt;AccountInfo&gt;&gt;</code>
<p>Get balance from current wallet in native coin</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;AccountInfo&gt;&gt;</code> - <ul>
<li>balance value</li>
</ul>  

| Param | Type | Description |
| --- | --- | --- |
| accounts | <code>Array.&lt;GetBalanceProps&gt;</code> | <ul> <li></li> </ul> |

<a name="MetamaskWrapper+getChain"></a>

### metamaskWrapper.getChain() ⇒ <code>Promise.&lt;(ChainInfo\|null)&gt;</code>
<p>Get Chain</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
**Returns**: <code>Promise.&lt;(ChainInfo\|null)&gt;</code> - <ul>
<li>Chain class with chainId and name</li>
</ul>  
<a name="MetamaskWrapper+switchNetwork"></a>

### metamaskWrapper.switchNetwork(chainId) ⇒ <code>Promise.&lt;void&gt;</code>
<p>Switch to another chain network</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| chainId | <code>ChainIds</code> | <p>id of Chain</p> |

<a name="MetamaskWrapper+switchCustomNetwork"></a>

### metamaskWrapper.switchCustomNetwork(network) ⇒ <code>Promise.&lt;void&gt;</code>
<p>Switch to custom chain network</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| network | <code>AddEthereumChainParameter</code> | <p>Object of chain network</p> |

<a name="MetamaskWrapper+addToken"></a>

### metamaskWrapper.addToken(token) ⇒ <code>Promise.&lt;boolean&gt;</code>
<p>Add coin token (only ERC20 for now @metamask docs) to metamask</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| token | <code>CoinsTypes</code> | <p>CoinsTypes, like USDT</p> |

<a name="MetamaskWrapper+addCustomToken"></a>

### metamaskWrapper.addCustomToken(newAsset) ⇒ <code>Promise.&lt;boolean&gt;</code>
<p>Add custom token (only ERC20 for now @metamask docs) to metamask</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| newAsset | <code>WatchAssetParams</code> | <p>Asset object</p> |

<a name="MetamaskWrapper+sign"></a>

### metamaskWrapper.sign(object) ⇒ <code>Promise.&lt;void&gt;</code>
<p>Sign transaction with metamask</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| object | <code>SignProps</code> | <p>Sign Object with type and message</p> |

<a name="MetamaskWrapper+transfer"></a>

### metamaskWrapper.transfer(args) ⇒ <code>Promise.&lt;(ethers.providers.TransactionResponse\|null)&gt;</code>
<p>Transfer native coin</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type |
| --- | --- |
| args | <code>TransferToken</code> | 

<a name="MetamaskWrapper+sendSignedTransaction"></a>

### metamaskWrapper.sendSignedTransaction(tx) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
<p>Send Transaction with user's metamask</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| tx | <code>ethers.utils.Deferrable.&lt;ethers.providers.TransactionRequest&gt;</code> | <p>Transaction Request</p> |

<a name="MetamaskWrapper+sendTransaction"></a>

### metamaskWrapper.sendTransaction(tx) ⇒ <code>Promise.&lt;ethers.providers.TransactionResponse&gt;</code>
<p>Send Transaction</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| tx | <code>ethers.utils.Deferrable.&lt;ethers.providers.TransactionRequest&gt;</code> | <p>Transaction Request</p> |

<a name="MetamaskWrapper+getMobileLink"></a>

### metamaskWrapper.getMobileLink() ⇒ <code>string</code>
<p>Get lint for mobile metamask</p>

**Kind**: instance method of [<code>MetamaskWrapper</code>](#MetamaskWrapper)  
<a name="TrezorWrapper"></a>

## TrezorWrapper
<p>The client describes how to work with Trezor.</p>

**Kind**: global class  
**Implements**: <code>ITrezorWrapper</code>  

* [TrezorWrapper](#TrezorWrapper)
    * [.init(object)](#TrezorWrapper+init) ⇒ <code>Promise.&lt;void&gt;</code>
    * [.getBalance(coins)](#TrezorWrapper+getBalance) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
    * [.getAccountInfo(args)](#TrezorWrapper+getAccountInfo) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
    * [.connectWallet(params)](#TrezorWrapper+connectWallet) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
    * [.sendSignedTransaction(object)](#TrezorWrapper+sendSignedTransaction) ⇒ <code>Promise.&lt;(SignedTransaction\|PushedTransaction\|CardanoSignedTxData\|EosSignedTx)&gt;</code>
    * [.sendTransaction(object)](#TrezorWrapper+sendTransaction) ⇒ <code>Promise.&lt;PushedTransaction&gt;</code>
    * [.transfer(args)](#TrezorWrapper+transfer) ⇒ <code>Promise.&lt;(SignedTransaction\|CardanoSignedTxData\|EosSignedTx\|PushedTransaction)&gt;</code>

<a name="TrezorWrapper+init"></a>

### trezorWrapper.init(object) ⇒ <code>Promise.&lt;void&gt;</code>
<p>init TrezorConnect library</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  

| Param | Type |
| --- | --- |
| object | <code>Manifest</code> | 

<a name="TrezorWrapper+getBalance"></a>

### trezorWrapper.getBalance(coins) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
<p>Get balance from current wallet in native coin</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;number&gt;&gt;</code> - <ul>
<li>balance value</li>
</ul>  

| Param | Type | Description |
| --- | --- | --- |
| coins | <code>Array.&lt;AllCoins&gt;</code> | <ul> <li></li> </ul> |

<a name="TrezorWrapper+getAccountInfo"></a>

### trezorWrapper.getAccountInfo(args) ⇒ <code>Promise.&lt;Array.&lt;number&gt;&gt;</code>
<p>Get account info from current wallets in native coin</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| args | <code>Array.&lt;GetAccountInfo&gt;</code> | <ul> <li></li> </ul> |

<a name="TrezorWrapper+connectWallet"></a>

### trezorWrapper.connectWallet(params) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
<p>Get data for sign in via trezor</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;string&gt;&gt;</code> - <ul>
<li>wallet address</li>
</ul>  

| Param | Type |
| --- | --- |
| params | <code>Params.&lt;(RequestLoginAsync\|LoginChallenge)&gt;</code> | 

<a name="TrezorWrapper+sendSignedTransaction"></a>

### trezorWrapper.sendSignedTransaction(object) ⇒ <code>Promise.&lt;(SignedTransaction\|PushedTransaction\|CardanoSignedTxData\|EosSignedTx)&gt;</code>
<p>Send Transaction with user's trezor</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  

| Param | Type |
| --- | --- |
| object | <code>SendSignedTransactionProps</code> | 

<a name="TrezorWrapper+sendTransaction"></a>

### trezorWrapper.sendTransaction(object) ⇒ <code>Promise.&lt;PushedTransaction&gt;</code>
<p>Send Transaction</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  

| Param | Type |
| --- | --- |
| object | <code>SendTransactionProps</code> | 

<a name="TrezorWrapper+transfer"></a>

### trezorWrapper.transfer(args) ⇒ <code>Promise.&lt;(SignedTransaction\|CardanoSignedTxData\|EosSignedTx\|PushedTransaction)&gt;</code>
<p>Transfer native coin</p>

**Kind**: instance method of [<code>TrezorWrapper</code>](#TrezorWrapper)  

| Param | Type |
| --- | --- |
| args | <code>TransferProps</code> | 

<a name="WalletsWrapper"></a>

## WalletsWrapper
<p>The client describes how to work with all wallets.
All connection to wallets must be with this client</p>

**Kind**: global class  
**Implements**: <code>WalletWrapper</code>  

* [WalletsWrapper](#WalletsWrapper)
    * [new WalletsWrapper(object, type, infuraApiKey)](#new_WalletsWrapper_new)
    * [.init(object)](#WalletsWrapper+init) ⇒ <code>Promise.&lt;void&gt;</code>
    * [.isInstalled()](#WalletsWrapper+isInstalled) ⇒ <code>Promise.&lt;boolean&gt;</code>
    * [.connectWallet(params)](#WalletsWrapper+connectWallet) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
    * [.getChain(object)](#WalletsWrapper+getChain) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
    * [.getStandardContract(address, network)](#WalletsWrapper+getStandardContract) ⇒ [<code>Promise.&lt;StandardContract&gt;</code>](#StandardContract)

<a name="new_WalletsWrapper_new"></a>

### new WalletsWrapper(object, type, infuraApiKey)
<p>Creates an instance of a class to work with a specific wallet</p>


| Param | Type | Description |
| --- | --- | --- |
| object | <code>WalletsWrapperProps</code> |  |
| type | <code>WalletsNames</code> | <p>type of wallet, default is MetamaskWrapper</p> |
| infuraApiKey | <code>WalletsWrapperProps</code> | <p>the parameter is needed to connect to the blockchain</p> |

<a name="WalletsWrapper+init"></a>

### walletsWrapper.init(object) ⇒ <code>Promise.&lt;void&gt;</code>
<p>init library</p>

**Kind**: instance method of [<code>WalletsWrapper</code>](#WalletsWrapper)  

| Param | Type |
| --- | --- |
| object | <code>Manifest</code> | 

<a name="WalletsWrapper+isInstalled"></a>

### walletsWrapper.isInstalled() ⇒ <code>Promise.&lt;boolean&gt;</code>
<p>Check wallet existing</p>

**Kind**: instance method of [<code>WalletsWrapper</code>](#WalletsWrapper)  
<a name="WalletsWrapper+connectWallet"></a>

### walletsWrapper.connectWallet(params) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
<p>Connect to chosen wallet</p>

**Kind**: instance method of [<code>WalletsWrapper</code>](#WalletsWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;string&gt;&gt;</code> - <ul>
<li>wallet address</li>
</ul>  

| Param | Type | Description |
| --- | --- | --- |
| params | <code>Params.&lt;(RequestLoginAsync\|LoginChallenge)&gt;</code> | <p>params for trezor</p> |

<a name="WalletsWrapper+getChain"></a>

### walletsWrapper.getChain(object) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
<p>Get current wallet addresses</p>

**Kind**: instance method of [<code>WalletsWrapper</code>](#WalletsWrapper)  
**Returns**: <code>Promise.&lt;Array.&lt;string&gt;&gt;</code> - <ul>
<li>wallet address</li>
</ul>  

| Param | Type |
| --- | --- |
| object | <code>GetAddressProps</code> | 

<a name="WalletsWrapper+getStandardContract"></a>

### walletsWrapper.getStandardContract(address, network) ⇒ [<code>Promise.&lt;StandardContract&gt;</code>](#StandardContract)
<p>Get client for contract connection</p>

**Kind**: instance method of [<code>WalletsWrapper</code>](#WalletsWrapper)  

| Param | Type | Description |
| --- | --- | --- |
| address | <code>string</code> | <p>Contract address</p> |
| network | <code>ChainIds</code> | <p>network in which to search for a contract</p> |

<a name="ErrorTypes"></a>

## ErrorTypes : <code>enum</code>
<p>Description of errors</p>

**Kind**: global enum  
**Read only**: true  
<a name="generateCoin"></a>

## generateCoin : <code>enum</code>
<p>Types of ERC20 tokens</p>

**Kind**: global enum  
**Read only**: true  
<a name="networks"></a>

## networks : <code>enum</code>
<p>Types of supported EVM networks</p>

**Kind**: global enum  
**Read only**: true  
**Properties**

| Name | Type | Default |
| --- | --- | --- |
| "_models.ChainIds.EthereumMainNetwork" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.RopstenTestNetwork" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.RinkebyTestNetwork" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;Rinkeby Test Network\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.GoerliTestNetwork" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.KovanTestNetwork" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;Kovan Test Network\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.PolygonMainnet" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;Polygon Mainnet\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.HardhatLocalhost" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;Hardhat Localhost\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.GanacheLocalhost" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;Ganache Localhost\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.BinanceSmartChain" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;,\&quot;blockExplorerUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.BinanceSmartTestnet" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;,\&quot;blockExplorerUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.Palm" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;,\&quot;blockExplorerUrls\&quot;:\&quot;\&quot;}&quot;</code> | 
| "_models.ChainIds.PalmTestnet" | <code>string</code> | <code>&quot;{\&quot;chainId\&quot;:\&quot;\&quot;,\&quot;chainName\&quot;:\&quot;\&quot;,\&quot;nativeCurrency\&quot;:\&quot;\&quot;,\&quot;rpcUrls\&quot;:\&quot;\&quot;,\&quot;blockExplorerUrls\&quot;:\&quot;\&quot;}&quot;</code> | 



