npm package: @meetarvo/autentique
Description: TypeScript library for Autentique API
Author: Marcel Coelho
Latest version: 0.1.4

# Cliente API Autentique

Uma biblioteca TypeScript para interagir com a API de assinatura eletrônica [Autentique](https://autentique.com.br/).

## Instalação

```bash
npm install @meetarvo/autentique
# ou
yarn add @meetarvo/autentique
# ou
pnpm add @meetarvo/autentique
# ou
bun add @meetarvo/autentique
```

---

### 💙 Curtiu? Você vai gostar ainda mais da Arvo!

> #### 🚀 **Contabilidade feita para devs**
>
> Somos a **[Arvo](https://arvo.dev.br)**, escritório especializado em contabilidade para profissionais de tecnologia.
>
> - 💻 Atendemos desenvolvedores, PMs e profissionais tech;
> - 📱 Dashboard moderna e API própria;
> - 🤝 Cuidamos de toda burocracia da sua empresa;
>
> **[Conheça a Arvo](https://arvo.dev.br)** e foque no que realmente importa: seu código!

---

## Uso

### Inicialização

```typescript
import { Autentique } from '@meetarvo/autentique';

// Inicializar o cliente
const autentique = new Autentique({
  apiKey: 'sua-chave-api',
  sandbox: false, // Defina como true para ambiente sandbox
});
```

### Trabalhando com Documentos

#### Criar um Documento

```typescript
// Criar um documento com um buffer de arquivo
const resultadoCriarDocumento = await autentique.document.create({
  document: {
    name: 'Contrato de Acordo',
    refusable: true,
    sortable: true,
  },
  signers: [
    {
      email: 'assinante@exemplo.com',
      action: 'SIGN', // 'SIGN' (assinar), 'APPROVE' (aprovar) ou 'ACKNOWLEDGE' (reconhecer)
    },
  ],
  filename: 'contrato.pdf',
  file: bufferArquivo, // Buffer contendo o arquivo
});

// Ou criar um documento com uma URL de arquivo
const resultadoCriarDocumentoComUrl = await autentique.document.create({
  document: {
    name: 'Contrato de Acordo',
  },
  signers: [
    {
      email: 'assinante@exemplo.com',
      action: 'SIGN',
    },
  ],
  filename: 'contrato.pdf',
  fileUrl: 'https://exemplo.com/contrato.pdf',
});
```

#### Obter um Documento por ID

```typescript
const documento = await autentique.document.getById('id-do-documento');
```

#### Listar Documentos

```typescript
// Listar documentos com paginação padrão (60 itens, página 1)
const documentos = await autentique.document.list();

// Listar documentos com paginação personalizada
const documentosPaginaPersonalizada = await autentique.document.list({
  limit: 10,
  page: 2,
});
```

#### Excluir um Documento

```typescript
const resultadoExclusao = await autentique.document.delete('id-do-documento');
```

#### Assinar um Documento

```typescript
const resultadoAssinatura = await autentique.document.sign('id-do-documento');
```

### Trabalhando com Pastas

#### Criar uma Pasta

```typescript
const resultadoCriarPasta = await autentique.folder.create({
  folder: {
    name: 'Contratos',
    type: 'custom',
  },
});
```

#### Obter uma Pasta por ID

```typescript
const pasta = await autentique.folder.getById('id-da-pasta');
```

#### Listar Pastas

```typescript
// Listar pastas com paginação padrão
const pastas = await autentique.folder.list();

// Listar pastas com paginação personalizada
const pastasPaginaPersonalizada = await autentique.folder.list({
  limit: 10,
  page: 2,
});
```

#### Excluir uma Pasta

```typescript
const resultadoExclusaoPasta = await autentique.folder.delete('id-da-pasta');
```

#### Mover um Documento para uma Pasta

```typescript
const resultadoMover = await autentique.folder.moveDocument({
  document_id: 'id-do-documento',
  folder_id: 'id-da-pasta-destino',
  current_folder_id: 'id-da-pasta-atual', // Opcional
  context: 'contexto-personalizado', // Opcional
});
```

#### Listar Documentos em uma Pasta

```typescript
// Listar documentos em uma pasta com paginação padrão
const documentosPasta = await autentique.folder.listDocuments('id-da-pasta');

// Listar documentos em uma pasta com paginação personalizada
const documentosPastaPaginaPersonalizada =
  await autentique.folder.listDocuments('id-da-pasta', {
    limit: 10,
    page: 2,
  });
```

## Referência da API

### Classe Autentique

A classe principal para interagir com a API Autentique.

#### Construtor

```typescript
new Autentique(config: AutentiqueConfig)
```

**Parâmetros:**

- `config`: Objeto de configuração com as seguintes propriedades:
  - `apiKey` (obrigatório): Sua chave de API Autentique
  - `sandbox` (opcional): Booleano indicando se deve usar o ambiente sandbox (padrão: `false`)
  - `baseUrl` (opcional): URL base da API personalizada (padrão: `'https://api.autentique.com.br/v2'`)

### Serviço de Documento

#### Métodos

- `create(params: CreateDocumentParams): Promise<ApiResponse<{ createDocument: Document }>>`
- `getById(id: string): Promise<ApiResponse<{ document: Document }>>`
- `list(params?: PaginationParams): Promise<ApiResponse<{ documents: DocumentsResponse }>>`
- `delete(id: string): Promise<ApiResponse<{ deleteDocument: boolean }>>`
- `sign(id: string): Promise<ApiResponse<{ signDocument: boolean }>>`

### Serviço de Pasta

#### Métodos

- `create(params: CreateFolderParams): Promise<ApiResponse<{ createFolder: Folder }>>`
- `getById(id: string): Promise<ApiResponse<{ folder: Folder }>>`
- `list(params?: PaginationParams): Promise<ApiResponse<{ folders: FoldersResponse }>>`
- `delete(id: string): Promise<ApiResponse<{ deleteFolder: boolean }>>`
- `moveDocument(params: MoveDocumentParams): Promise<ApiResponse<{ moveDocumentToFolder: boolean }>>`
- `listDocuments(folderId: string, params?: PaginationParams): Promise<ApiResponse<{ documentsByFolder: DocumentsByFolderResponse }>>`

## Licença

MIT