# generate

Create a WalletConnect URI and Joey deep link for your own connect button or QR code.

`generate` creates a connection URI and a deep link without relying on the connect modal. Use it to build your own "Connect with Joey" button or QR code.

```ts
const { actions } = useProvider();
const { data, error } = await actions.generate();
```

## Parameters (optional)

```ts
{
  walletId?: string;           // a wallet from config.walletDetails, e.g. Joey's ID
  chain?: string;
  pairing?: { topic: string };
  openModal?: boolean;
}
```

When `walletId` matches an entry in `walletDetails`, the deep link uses that wallet's format: `joey://settings/wc?uri=…` for Joey. Otherwise it falls back to the generic `wc://` format.

## Returns

```ts
Promise<{
  data: { uri: string; deeplink: string } | null;
  error: Error | null;
}>
```

## Example: a custom Joey button

```tsx
'use client';

import core from '@joey-wallet/wc-client/core';
import { useProvider } from './provider';

export function JoeyButton({ onShowQr }: { onShowQr: (uri: string) => void }) {
  const { actions } = useProvider();

  const handleClick = async () => {
    const { data, error } = await actions.generate({
      walletId: core.constants.wallets.joey.projectId,
      openModal: false,
    });
    if (error || !data) throw error ?? new Error('Could not create a connection');

    if (/Android|iPhone|iPad/i.test(navigator.userAgent)) {
      window.location.href = data.deeplink; // opens Joey directly
    } else {
      onShowQr(data.uri); // render as a QR code for the user to scan
    }
  };

  return <button onClick={handleClick}>Connect with Joey</button>;
}
```

The connection completes when the user approves in Joey; the provider's `session` updates and a `connect` event fires. See [Deeplinking](/docs/integration/deeplinking) for more on the link formats.
