npm package: @huddle01/web3
Description: ![Huddle01 Logo](https://huddle01-assets-frontend.s3.amazonaws.com/general/huddle01-logo-blue.svg)
Latest version: 0.0.2

# Huddle01 Web3 Helper

![Huddle01 Logo](https://huddle01-assets-frontend.s3.amazonaws.com/general/huddle01-logo-blue.svg)

<p align="center">
  <strong>Web3 Utilities for Huddle01</strong>
</p>

<h3 align="center">
  <a href="https://discord.com/invite/AZ5TRMMP55">Community</a>
  <span> · </span>
  <a href="https://huddle01.com/docs">Documentation</a>
</h3>

The @huddle01/web3 package provides utility functions for integrating Web3 functionality with Huddle01, including NFT fetching, DID resolution, and access token generation.

## Installation

```bash
npm install @huddle01/web3
```

```bash
yarn add @huddle01/web3
```

```bash
pnpm add @huddle01/web3
```

## Usage

### Fetch User NFTs

Retrieves NFTs owned by a given address across specified chains.

```typescript
import { fetchUserNFT } from "@huddle01/web3";

const address = "0x1234567890123456789012345678901234567890";
const chains = ["polygon", "ethereum", "arbitrum"];

const nfts = await fetchUserNFT(address, chains);
console.log(nfts);
```

### Resolve Arbitrum DID

Resolves a Decentralized Identifier (DID) for an Arbitrum address.

```typescript
import { resolveArbDID } from "@huddle01/web3";

const address = "0x1234567890123456789012345678901234567890";

const did = await resolveArbDID(address);
console.log(did);
```

### Generate Access Token

Generates an access token for a user based on NFT ownership and room data.

```typescript
import { Role } from "@huddle01/server-sdk/auth";
import { generateAccessToken } from "@huddle01/web3";

const authData = {
  condition: "ERC721",
  address: "0x1234567890123456789012345678901234567890",
  chainId: 1,
  contractAddress: "0x1234567890123456789012345678901234567890",
  tokenId: "1",
};

const roomData = {
  roomId: "your-room-id",
  apiKey: "your-api-key",
  role: Role.HOST,
};

const token = await generateAccessToken(authData, roomData);
console.log(token);
```

## API Reference

### `fetchUserNFT(address: string, chains: string[]): Promise<NFT[]>`

Fetches NFTs owned by the given address across specified chains.

- `address`: The Ethereum address to fetch NFTs for.
- `chains`: An array of chain names to search for NFTs.

### `resolveArbDID(address: string): Promise<string>`

Resolves the Arbitrum Decentralized Identifier (DID) for the given address.

- `address`: The Ethereum address to resolve the DID for.

### `generateAccessToken(data: CheckAuthData, roomData: TRoomData): Promise<string | null>`

Generates an access token for a user based on NFT ownership and room data.

- `data`: Authentication data including condition type and NFT details.
- `roomData`: Room information including room ID, API key, and user role.

## Error Handling

All functions in this package use try-catch blocks for error handling. Errors are logged to the console and can be caught in your application for custom error handling.

## Dependencies

This package relies on the following dependencies:

- `@huddle01/server-sdk/auth`: For access token generation.
- SimpleHash API: For fetching NFT data.
- Space ID API: For resolving Arbitrum DIDs.

Make sure to set up the necessary API keys and environment variables as required by these dependencies.

## Contributing

We welcome contributions to the @huddle01/web3 package. Please feel free to submit issues and pull requests on our GitHub repository.

## License

[MIT License](LICENSE)

---

For more information, visit the [Huddle01 documentation](https://huddle01.com/docs).