# Particle Auth Core Modal

Auth Core provides MPC (Multi-Party Computation)-based threshold signatures.

Modal is implemented based on React, provides a rich set of hook functions and custom components.

## Installation

Install Auth Core and its peer dependencies.

```shell
npm install @particle-network/authkit
# or
yarn add @particle-network/authkit
```

### Configure

Init Auth Core with Particle project config, you can get the config from [Particle Dashboard](https://dashboard.particle.network/).

The modal support custom style, refer to [Customize](https://core-demo.particle.network/customize.html).

Wrap your application with `AuthCoreContextProvider`.

```ts
import { AuthCoreContextProvider } from '@particle-network/authkit';

const App = () => {
  // replace 'xxxx' with particle project config.
  return (
    <AuthCoreContextProvider
      options={{
        projectId: 'xxxx',
        clientKey: 'xxxx',
        appId: 'xxxx',
      }}
    >
      <YourApp />
    </AuthCoreContextProvider>
  );
};
```

## Connect

Custom you own connect button and call `connect` function to connect Auth Core.

```ts
import { useConnect } from '@particle-network/authkit';

const { connect, disconnect, connectionStatus, requestConnectCaptcha } = useConnect();

// connect with email.
const userInfo = await connect({
  email: 'xxx@xx.com',
  code: 'xxxxxx', // optional
});

// connect with phone.
const userInfo = await connect({
  phone: '+8618888888888',
  code: 'xxxxxx', // optional
});

// connect with social type.
const userInfo = await connect({
  socialType: 'google',
  prompt: 'select_account', //optional
});

// connect with JWT.
const userInfo = await connect({
  jwt: 'xxxxxxxxxx',
});

// disconnect
await disconnect();
```

## EVM Wallet

EVM Wallet will be created when connect with EVM chains.

```ts
import { useEthereum } from '@particle-network/authkit';

// you can use eip1193 provider with `web3.js` or `ethers.js`
const { provider, address, chainId, chainInfo, switchChain, signMessage, signTypedData, sendTransaction, enable } =
  useEthereum();

// send transaction.
const txHash = await sendTransaction(txData);

// sign message.
const signature = await signMessage(message);
```

## Solana Wallet

```ts
import { useSolana } from '@particle-network/authkit';

const {
  address,
  chainId,
  chainInfo,
  switchChain,
  signMessage,
  signTransaction,
  signAllTransactions,
  signAndSendTransaction,
  enable,
} = useSolana();

// send transaction.
const txHash = await signAndSendTransaction(txData);

// sign message.
const signature = await signMessage(message);
```

## Learn More

- [Website](https://particle.network)
- [Documentation](https://docs.particle.network/)
- [Live Demo](https://core-demo.particle.network/)
