> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pag.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticação e Configuração

> Configuração do PagFinanceClient, gestão de tokens JWT e o fluxo de login Web3 por challenge-response.

Esta página cobre a configuração do cliente, o modelo de autenticação e a gestão de tokens.

## Configuração do cliente

O `PagFinanceClient` recebe um objeto de configuração na construção:

```ts theme={null}
import { PagFinanceClient } from '@pagfinance/sdk';

const client = new PagFinanceClient({
  baseUrl: 'https://app.pag.finance',
  clientId: 'meu-app',
  appMeta: { name: 'meu-app', version: '1.0.0', domain: 'meuapp.com' },
  defaultBlockchain: 'solana',
});
```

### Opções de configuração

<ParamField path="baseUrl" type="string" required>
  Host da API (proxy Next.js). Aponte para o seu app hoje ou para um BFF dedicado no futuro. O mesmo contrato se mantém.
</ParamField>

<ParamField path="clientId" type="string" required>
  Identificador da aplicação que está consumindo a API.
</ParamField>

<ParamField path="appMeta" type="object">
  Metadados da aplicação host.

  <Expandable title="propriedades" />
</ParamField>

<ParamField path="defaultBlockchain" type="string">
  Blockchain padrão usada quando não especificada por chamada (por exemplo, `solana`).
</ParamField>

## Modelo de autenticação (challenge-response, sem cripto)

O login Web3 é um challenge-response no estilo SIWS (Sign In With Solana). O SDK orquestra todo o fluxo, e a aplicação host apenas fornece um `signer` que assina o desafio com a carteira do usuário:

```ts theme={null}
import nacl from 'tweetnacl';

const { tokenJWT } = await client.auth.signIn(
  { address, blockchain: 'solana' },
  (challenge) => wallet.signMessage(new TextEncoder().encode(challenge)),
);
// tokenJWT já fica salvo no client (tokenStore)
```

<Note>
  Internamente o fluxo é: `POST /api/auth/challenge`, então `signer(challenge)`, então `POST /api/auth/verify`. Não há criptografia nem chave no cliente. A única prova é a assinatura, e toda a lógica (nonce, verificação, emissão do token) vive no servidor.
</Note>

## Fornecendo um token obtido por fora

Se você já possui um token JWT (obtido por outro canal ou reaproveitado de sessão anterior), basta informá-lo ao cliente:

```ts theme={null}
client.setToken(tokenJWT);

const me = await client.user.me();
```

## Re-login transparente em 401

O SDK pode refazer o login automaticamente quando a API responde `401`, de forma transparente para a aplicação:

```ts theme={null}
client.auth.enableAutoRelogin(async () => {
  await client.auth.signIn({ address, blockchain }, signer);
  return true;
});
```

<Warning>
  Endpoints autenticados exigem que o token JWT esteja presente no cliente, seja via `signIn`, seja via `setToken`. Endpoints públicos (como `assets.acceptedCryptos`) não precisam de token.
</Warning>

## Métodos de autenticação

| Método                        | Descrição                                                    |
| ----------------------------- | ------------------------------------------------------------ |
| `auth.signIn(params, signer)` | Executa o fluxo completo challenge-response e salva o token. |
| `auth.challenge(params)`      | Solicita o desafio (nonce) ao servidor.                      |
| `auth.verify(params)`         | Verifica a assinatura e recebe o token JWT.                  |
| `auth.setToken(token)`        | Define o token JWT no cliente.                               |
| `auth.getToken()`             | Retorna o token atual armazenado.                            |
| `auth.clearToken()`           | Remove o token do cliente.                                   |
| `auth.otpSend(params)`        | Envia um código OTP.                                         |
| `auth.enableAutoRelogin(fn)`  | Habilita re-login automático em respostas 401.               |

<Tip>
  Consulte a [Referência de Métodos](/pt-BR/sdks/method-reference) para a lista completa de recursos e a [API Reference de Autenticação](/pt-BR/api-reference/authentication) para os endpoints REST subjacentes.
</Tip>
