npm package: @mavrykdynamics/mavryk-wallet-dapp
Description: This module is required to provide communication between DApps and Mavryk Wallet, it exposes unified interface for this interaction.
Author: Mavryk Dynamics
Latest version: 8.0.1

# MavrykWallet DApp Module

This module is required to provide communication between DApps and Mavryk Wallet, it exposes unified interface for this interaction.

## 🚀 Quick Start

### Install

```bash
yarn add @mavrykdynamics/taquito @mavrykdynamics/mavryk-wallet-dapp
```

### Usage

```typescript
import { MavrykWallet } from "@mavrykdynamics/mavryk-wallet-dapp";

(async () => {
  try {
    const available = await MavrykWallet.isAvailable();
    if (!available) {
      throw new Error("Mavryk Wallet not installed");
    }

    // Note:

    // use `MavrykWallet.isAvailable` method only after web application fully loaded.

    // Alternatively, you can use the method `MavrykWallet.onAvailabilityChange`
    // that tracks availability in real-time .

    const wallet = new MavrykWallet("My Super DApp");
    await wallet.connect("carthagenet");
    const tezos = wallet.toTezos();

    const accountPkh = await tezos.wallet.pkh();
    const accountBalance = await tezos.tz.getBalance(accountPkh);
    console.info(`address: ${accountPkh}, balance: ${accountBalance}`);

    const counter = await tezos.wallet.at(
      "KT1DjYkruvfujfKw6nLYafArqKufcwHuKXvT"
    );

    const operation = await counter.methods.increment(1).send();
    await operation.confirmation();

    const counterValue = await counter.storage();
    console.info(`count: ${counterValue}`);
  } catch (err) {
    console.error(err);
  }
})();
```

#### Check permissions

```typescript
import { MavrykWallet } from "@mavrykdynamics/mavryk-wallet-dapp";

(async () => {
  try {
    const available = await MavrykWallet.isAvailable();
    if (!available) {
      throw new Error("Mavryk Wallet not installed");
    }

    const permission = await MavrykWallet.getCurrentPermission();
    // Alternatively, you can use the method `MavrykWallet.onPermissionChange`
    // that tracks current permission in real-time.

    console.info(permission);
    // prints "{ rpc: string, pkh: string, publicKey: string }" if permission exists, "null" - if not.

    const wallet = new MavrykWallet("My Super DApp", permission);

    console.info(wallet.connected);
    // prints "true" if permission exists, "false" - if not.

    if (!wallet.connected) {
      await wallet.connect("carthagenet");
    }

    const tezos = wallet.toTezos();

    // ...
  } catch (err) {
    console.error(err);
  }
})();
```

#### Sign

```typescript
import { MavrykWallet } from "@mavrykdynamics/mavryk-wallet-dapp";

(async () => {
  try {
    const wallet = new MavrykWallet("My Super DApp");
    // ...

    // Only hex strings
    const signature = await wallet.sign(
      Buffer.from("Hello world").toString("hex")
    );
  } catch (err) {
    console.error(err);
  }
})();
```

### Demo

You can find the example of Counter DApp in [this repo](https://github.com/madfish-solutions/counter-dapp).

## API

You can explore auto generated [full API Docs here](docs/README.md).

Probably you would be most interested in the [MavrykWallet class](docs/classes/mavrykwallet.md) methods.

## Local Development

Below is a list of commands you will probably find useful.

### npm run dev or yarn dev

Runs the project in development/watch mode. Your project will be rebuilt upon changes.

Your library will be rebuilt if you make edits.

### npm run build or yarn build

Bundles the package to the dist folder.
The package is optimized and bundled with Rollup into multiple formats (CommonJS, UMD, and ES Module).