open-index/open-npm huggingface dataset:
npm package: @liteflow/core
Description: This document provides a step-by-step guide on how to install and use the Liteflow Javascript SDK. The SDK allows you to access various modules such as Account, Asset, and Exchange.
Latest version: 3.0.0

# Core SDK

This document provides a step-by-step guide on how to install and use the Liteflow Javascript SDK. The SDK allows you to access various modules such as Account, Asset, and Exchange.

## Installation

First, you need to install the `@liteflow/core` package. You can do this using npm with the following command:

```bash
npm i @liteflow/core
```

## Creating a Client

After installation, you can create a client to access the different modules of the Liteflow SDK. To create a client, you will need an API key, which can be obtained from the Liteflow dashboard at https://dashboard.liteflow.com/developer/connection.

Here is a sample code snippet to create a client:

```ts
import { Client } from '@liteflow/core'

const client = new Client('API_KEY')
```

## User Authentication

To authenticate a user, you need to pass the `authorization` in the options while creating the client. Here's how you can do it:

```ts
new Client('API_KEY', { authorization: 'xxxx' })
```

## Using Modules

The `core` library is divided into different modules that you can use to perform various actions. Here are some of the modules:

- Account: Allows you to execute actions on an account.
- Asset: Lets you perform actions related to NFTs (also known as Assets).
- Exchange: Enables you to exchange NFTs and create various offers.

You can access these modules directly from the client using the following structure:

```bash
client.MODULE.ACTION
```

In the above structure, `MODULE` is the module you want to use, and `ACTION` is the action you want to execute.

For example, if you want to list a token in the exchange module, you can do it as follows:

```bash
client.exchange.listToken(...)
```

That's it! You are now ready to use the Liteflow Javascript SDK.
npm package: @liteflow/react
Description: ## Installation
Latest version: 3.0.0

# React SDK

## Installation

Install `@liteflow/react` and its react peer dependency.

```
npm i @liteflow/react
```

## Wrap app with `LiteflowProvider`

Wrap your app with the [`LiteflowProvider`](/docs/LiteflowProvider) component, passing the `apiKey` of your organization.

```tsx
function App() {
  return (
    <LiteflowProvider apiKey="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
      <TheRestOfYourApp />
    </LiteflowProvider>
  )
}
```

## Authenticate your user

To authenticate your user you will need to have access to the `Signer` of their wallet with your favorite Web3 library.

```tsx
import { useAuthenticate, useIsLoggedIn } from '@liteflow/react'
import { useMemo } from 'react'
import { publicActions } from 'viem'
import { useWalletClient } from 'wagmi'

function Login() {
  const { address } = useAccount()
  const { data: walletClient } = useWalletClient()
  const signer = useMemo(() => {
    return walletClient?.extend(publicActions)
  }, [walletClient])

  const [authenticate, { resetAuthenticationToken }] = useAuthenticate()
  const loggedIn = useIsLoggedIn(walletClient?.account.address)

  if (!signer) return 'No wallet connected'
  if (loggedIn)
    return <button onClick={resetAuthenticationToken}>Logout</button>
  return <button onClick={() => authenticate(signer)}>Login</button>
}
```

## Use hooks

Every component inside the `LiteflowProvider` is now set up to use the Liteflow hooks.

```tsx
import { BigNumber } from '@ethersproject/bignumber'
import { useCreateOffer } from '@liteflow/react'
import { useMemo } from 'react'
import { publicActions } from 'viem'
import { useWalletClient } from 'wagmi'

function PlaceBid() {
  const { data: walletClient } = useWalletClient()
  const signer = useMemo(() => {
    return walletClient?.extend(publicActions)
  }, [walletClient])

  const [createOffer] = useCreateOffer(signer)

  const handleClick = async () => {
    const offerId = await createOffer({
      type: 'BUY',
      chain: 1, // Ethereum
      collection: `0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d`,
      token: '100',
      quantity: BigNumber.from(1),
      unitPrice: {
        amount: BigNumber.from(1).mul(BigNumber.from(10).pow(18)), // this value is in base unit of the token. This is equivalent to 1 ETH. Use BigNumber
        currency: null, // currency can be set as an address to use ERC20 tokens
      },
    })
    alert(`Offer created: ${offerId}`)
  }

  return <button onClick={handleClick}>Create Offer</button>
}
```

Want to learn more? Check out the [example](https://github.com/liteflow-labs/liteflow-js/tree/main/example) to learn how to setup Liteflow and continue on reading the documentation.