# Client

O pacote `azion` contém o cliente da Azion Lib. A função `createClient` dele retorna um objeto que reúne um cliente para cada um de seis módulos: Storage, SQL, Purge, Domains, Applications e AI. Você passa o seu token uma única vez, para `createClient`. O pacote `azion` recebe apenas correções de bugs, e a manutenção dele termina em dezembro de 2026.

Instale o pacote:

```bash
npm install azion
```

Os exemplos desta página são módulos ES em JavaScript e TypeScript que usam `await` de nível superior, e eles rodam no Node.js. Os exemplos em TypeScript importam tipos com `import type`, o que os mantém carregáveis quando as anotações de tipo são removidas.

---

## Autenticação

O cliente recebe o seu [personal token](/pt-br/documentacao/fundamentos/personal-tokens/) no campo `token` de [createClient](#createclient). Uma função chamada diretamente do pacote de um módulo, sem cliente, lê o token da variável de ambiente `AZION_TOKEN` em vez disso.

Para saber como os pacotes da Azion Lib resolvem o token e a configuração de debug, consulte [Como a Azion Lib funciona](/pt-br/documentacao/devtools/azion-lib/como-funciona/).

---

## createClient

Cria o cliente. `createClient` também é o export padrão do pacote `azion`.

```typescript
function createClient(config?: {
  token?: string;
  options?: AzionClientOptions;
}): AzionClient;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição                                                                                                                                        |
| --------- | ------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `token`   | `string`                                    | Não         | O seu personal token da Azion.                                                                                                                   |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções da requisição. O tipo aceita `debug` somente dentro de `options`: um campo `debug` no nível superior é ignorado, e o TypeScript o recusa. |

Retorna um [AzionClient](#azionclient), com uma propriedade por módulo. Cada propriedade é o cliente desse módulo, e os métodos dela retornam o envelope de resposta que a página do módulo documenta.

Este exemplo cria um cliente e, pelo módulo `sql` dele, um banco de dados SQL:

```javascript
import { createClient } from 'azion';

// Instantiate the client
const client = createClient({ token: process.env.AZION_TOKEN, options: { debug: false } });

// Access the SQL module and create a Database
const { data: newDatabase, error } = await client.sql.createDatabase('my-database');
if (newDatabase) {
  console.log(`Database created with ID: ${newDatabase.id}`);
} else {
  console.error('Failed to create database', error);
}
```

Saída:

```text
Database created with ID: 1866
```

Em TypeScript, importe `AzionClient` da raiz `azion` e os tipos do módulo do subcaminho do módulo. Este exemplo lê o banco de dados que a chamada anterior criou:

```typescript
import { createClient } from 'azion';
import type { AzionClient } from 'azion';
import type { AzionDatabaseResponse, AzionDatabase } from 'azion/sql';

// Instantiate the client
const client: AzionClient = createClient({ token: process.env.AZION_TOKEN, options: { debug: false } });

// Access the SQL module and read a Database
const { data: database, error }: AzionDatabaseResponse<AzionDatabase> = await client.sql.getDatabase('my-database');
if (database) {
  console.log(`Database ${database.name} has ID ${database.id} (${database.status})`);
} else {
  console.error('Failed to get database', error);
}
```

Saída:

```text
Database my-database has ID 1866 (created)
```

---

## Módulos

Um [AzionClient](#azionclient) contém exatamente seis propriedades, uma por módulo. Cada propriedade aceita as mesmas chamadas que o cliente criado pelo pacote do próprio módulo, e cada página de módulo documenta essas chamadas e o envelope de resposta delas.

| Propriedade    | Tipo                      | O que acessa                                                                                                              | Página do módulo                                                    |
| -------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| `storage`      | `AzionStorageClient`      | Buckets do Object Storage e os objetos deles, pelos métodos que cada bucket traz.                                         | [Storage](/pt-br/documentacao/devtools/azion-lib/storage/)          |
| `sql`          | `AzionSQLClient`          | Bancos de dados SQL: criar, listar, ler e excluir. Um banco de dados que ele retorna traz os métodos `query` e `execute`. | [SQL](/pt-br/documentacao/devtools/azion-lib/sql/)                  |
| `purge`        | `AzionPurgeClient`        | Purges de cache por URL, cache key ou wildcard.                                                                           | [Purge](/pt-br/documentacao/devtools/azion-lib/purge/)              |
| `domains`      | `AzionDomainsClient`      | Domains: criar, listar, ler, atualizar e excluir. Chama a Azion API v3.                                                   | [Domains](/pt-br/documentacao/devtools/azion-lib/domains/)          |
| `applications` | `AzionApplicationsClient` | Applications: criar, listar, ler, atualizar e excluir. Chama a Azion API v3.                                              | [Applications](/pt-br/documentacao/devtools/azion-lib/application/) |
| `ai`           | `AzionAIClient`           | Chat completions, com `chat` e `streamChat`.                                                                              | [Cliente de AI](/pt-br/documentacao/devtools/azion-lib/ai-client/)  |

---

## Clientes de módulo e funções independentes

O cliente agregado é uma de três formas de chamar um módulo. Cada módulo também tem o próprio cliente interno, que o pacote dele cria com o próprio `createClient`, e cada função de módulo pode ser chamada sozinha, sem nenhum cliente. Um cliente de módulo recebe o token no campo `token`, como o cliente agregado. Uma função independente lê o token da variável de ambiente `AZION_TOKEN`, por exemplo de um arquivo `.env`.

Os módulos Storage e SQL têm pacotes próprios, `@aziontech/storage` e `@aziontech/sql`. Instale-os:

```bash
npm install @aziontech/storage @aziontech/sql
```

Este exemplo cria um cliente do módulo Storage a partir de `@aziontech/storage` e cria um bucket com ele:

```typescript
import { createClient } from '@aziontech/storage';
import type { AzionStorageClient, AzionStorageResponse, AzionBucket } from '@aziontech/storage';

// Create a client for the Storage module
const client: AzionStorageClient = createClient({ token: process.env.AZION_TOKEN, options: { debug: false } });

const { data, error }: AzionStorageResponse<AzionBucket> = await client.createBucket({
  name: 'my-bucket',
  workloads_access: 'read_only',
});

if (data) {
  console.log(`Bucket created with name: ${data.name}`);
} else {
  console.error('Failed to create bucket', error);
}
```

Saída:

```text
Bucket created with name: my-bucket
```

Este exemplo chama `createDatabase` de `@aziontech/sql` sem cliente. O token vem de `AZION_TOKEN`, e o segundo argumento traz as opções da requisição:

```javascript
import { createDatabase } from '@aziontech/sql';

// Call the function createDatabase directly from its package
const { data, error } = await createDatabase('my-new-database', { debug: false });
if (data) {
  console.log(`Database created with ID: ${data.id}`);
} else {
  console.error('Failed to create database', error);
}
```

Saída:

```text
Database created with ID: 1867
```

Use o cliente agregado para acessar vários módulos a partir de um único objeto. Chame uma função independente quando você configura o token e as opções por variáveis de ambiente e quer apenas a função que chama.

---

## Tipos

A raiz `azion` exporta os tipos `AzionClient` e `AzionClientConfig`. Importe-os com `import type`. A raiz também exporta `defineConfig`, `processConfig` e `convertJsonConfigToObject`, que a página [Config](/pt-br/documentacao/devtools/azion-lib/config/) documenta.

### AzionClient

O cliente que [createClient](#createclient) retorna. Para saber o que cada propriedade acessa, consulte [Módulos](#modulos).

| Propriedade    | Tipo                      | Obrigatório | Descrição                         |
| -------------- | ------------------------- | ----------- | --------------------------------- |
| `storage`      | `AzionStorageClient`      | Sim         | O cliente do módulo Storage.      |
| `sql`          | `AzionSQLClient`          | Sim         | O cliente do módulo SQL.          |
| `purge`        | `AzionPurgeClient`        | Sim         | O cliente do módulo Purge.        |
| `domains`      | `AzionDomainsClient`      | Sim         | O cliente do módulo Domains.      |
| `applications` | `AzionApplicationsClient` | Sim         | O cliente do módulo Applications. |
| `ai`           | `AzionAIClient`           | Sim         | O cliente do módulo AI.           |

### AzionClientConfig

O objeto que [createClient](#createclient) recebe.

| Propriedade | Tipo                                        | Obrigatório | Descrição                      |
| ----------- | ------------------------------------------- | ----------- | ------------------------------ |
| `token`     | `string`                                    | Não         | O seu personal token da Azion. |
| `options`   | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções da requisição.          |

### AzionClientOptions

O tipo das opções de requisição de `AzionClientConfig`. A raiz `azion` não o exporta: o cliente o declara a partir de `azion/sql`, então importe-o de lá quando precisar dele.

```typescript
type AzionClientOptions = {
  debug?: boolean;
  force?: boolean;
  env?: AzionEnvironment;
  external?: boolean;
};
```

| Propriedade | Tipo               | Obrigatório | Descrição                                                                             |
| ----------- | ------------------ | ----------- | ------------------------------------------------------------------------------------- |
| `debug`     | `boolean`          | Não         | Ativa o modo de debug.                                                                |
| `force`     | `boolean`          | Não         | Força a operação, mesmo quando ela pode destruir dados.                               |
| `env`       | `AzionEnvironment` | Não         | O ambiente para onde as chamadas vão: `'development'`, `'staging'` ou `'production'`. |
| `external`  | `boolean`          | Não         | Força o uso da REST API em vez da API integrada ao runtime.                           |

---

## Recursos relacionados

- [Azion Lib](/pt-br/documentacao/devtools/azion-lib.md): As bibliotecas que a Azion Lib oferece e o pacote que contém cada uma.
- [Como a Azion Lib funciona](/pt-br/documentacao/devtools/azion-lib/como-funciona.md): Como os pacotes resolvem o token e as opções, e onde as funções deles rodam.
- [Storage](/pt-br/documentacao/devtools/azion-lib/storage.md): Todas as funções de bucket e de objeto que o cliente do módulo storage expõe.
- [SQL](/pt-br/documentacao/devtools/azion-lib/sql.md): Todas as funções de banco de dados e de query que o cliente do módulo sql expõe.
