# Domains

O módulo `azion/domains` é a biblioteca da Azion Lib para [Domains](/pt-br/documentacao/plataforma/workloads/domains/). Suas funções criam, listam, leem, atualizam e excluem os domínios da sua conta, e cada domínio aponta para uma application pelo ID dela. O módulo chama a Azion API v3, e toda função retorna um envelope de resposta.

Instale o pacote:

```bash
npm install azion
```

O pacote `azion` recebe apenas correções de bugs, e a manutenção dele termina em dezembro de 2026.

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

---

## Autenticação

As funções leem o seu [personal token](/pt-br/documentacao/fundamentos/personal-tokens/) da variável de ambiente `AZION_TOKEN`. Um client criado com [createClient](#createclient) recebe o token no campo `token`, em vez da variável.

| Variável      | Descrição                          |
| ------------- | ---------------------------------- |
| `AZION_TOKEN` | O seu personal token da Azion.     |
| `AZION_DEBUG` | Com `true`, ativa o modo de debug. |

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/).

---

## Envelope de resposta

Toda função retorna um objeto [AzionDomainsResponse](#aziondomainsresponse), `{ data?, error? }`. Em caso de sucesso, `data` contém o domínio, a lista de domínios ou o domínio excluído. Em caso de falha, `error` contém `{ message, operation }`, em que `operation` nomeia a chamada que falhou.

Uma chamada bem-sucedida de [deleteDomain](#deletedomain) também retorna `data`: um [AzionDeletedDomain](#aziondeleteddomain) com o `id` do domínio excluído.

---

## createClient

Cria um client que guarda um token e opções de requisição e expõe as cinco funções de domínio como métodos. `createClient` também é o export padrão do módulo.

```typescript
function createClient(config?: Partial<{
  token?: string;
  options?: AzionClientOptions;
}>): AzionDomainsClient;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição                                                |
| --------- | ------------------------------------------- | ----------- | -------------------------------------------------------- |
| `token`   | `string`                                    | Não         | O seu personal token da Azion.                           |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição para toda chamada que o client faz. |

Retorna um [AzionDomainsClient](#aziondomainsclient). Os métodos dele recebem os mesmos argumentos que as funções correspondentes desta página.

Este exemplo cria um client e, com ele, um domínio:

```typescript
import { createClient } from 'azion/domains';
import type { AzionDomain, AzionDomainsClient, AzionDomainsResponse } from 'azion/domains';

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

const { data: newDomain, error }: AzionDomainsResponse<AzionDomain> = await client.createDomain({ name: 'my-client-domain', edgeApplicationId: 1234567890 });
if (newDomain) {
  console.log(`Domain created with ID: ${newDomain.id} (${newDomain.url})`);
} else {
  console.error('Failed to create domain', error);
}
```

Saída:

```text
Domain created with ID: 1234567891 (xxxxxxxxxx.map.azionedge.net)
```

---

## createDomain

Cria um domínio que aponta para uma application.

```typescript
function createDomain(domain: AzionCreateDomain, options?: AzionClientOptions): Promise<AzionDomainsResponse<AzionDomain>>;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição                                                                   |
| --------- | ------------------------------------------- | ----------- | --------------------------------------------------------------------------- |
| `domain`  | [`AzionCreateDomain`](#azioncreatedomain)   | Sim         | As configurações do domínio. `name` e `edgeApplicationId` são obrigatórios. |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                                                       |

Retorna `data` como o [AzionDomain](#aziondomain) criado. O domínio traz o `id` que a API atribuiu, e `url` contém o endereço Azion do domínio.

```typescript
import { createDomain } from 'azion/domains';
import type { AzionDomain, AzionDomainsResponse } from 'azion/domains';

const { data: domain, error }: AzionDomainsResponse<AzionDomain> = await createDomain({
  name: 'my-domain',
  edgeApplicationId: 1234567890,
});
if (domain) {
  console.log(`Domain created with ID: ${domain.id} (${domain.url})`);
} else {
  console.error('Failed to create domain', error);
}
```

Saída:

```text
Domain created with ID: 1234567892 (xxxxxxxxxx.map.azionedge.net)
```

---

## getDomains

Lista os domínios da conta, uma página por vez.

```typescript
function getDomains(options?: AzionClientOptions, queryParams?: {
  orderBy?: 'id' | 'name';
  page?: number;
  pageSize?: number;
  sort?: 'asc' | 'desc';
}): Promise<AzionDomainsResponse<AzionDomainCollection>>;
```

| Parâmetro     | Tipo                                        | Obrigatório | Descrição                                                                                            |
| ------------- | ------------------------------------------- | ----------- | ---------------------------------------------------------------------------------------------------- |
| `options`     | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                                                                                |
| `queryParams` | `{ orderBy?, page?, pageSize?, sort? }`     | Não         | Paginação. Dessas chaves, a função envia apenas `page` para a API, e cada página contém 10 domínios. |

Retorna `data` como um [AzionDomainCollection](#aziondomaincollection): `results` contém a página, e `count` contém o número de domínios da conta, não o tamanho da página.

```typescript
import { getDomains } from 'azion/domains';
import type { AzionDomainCollection, AzionDomainsResponse } from 'azion/domains';

const { data: domains, error }: AzionDomainsResponse<AzionDomainCollection> = await getDomains();

if (domains) {
  console.log(`Found ${domains.count} domains; this page has ${domains.results.length}`);
} else {
  console.error('Failed to list domains', error);
}
```

Saída:

```text
Found 20 domains; this page has 10
```

---

## getDomain

Retorna um domínio pelo ID.

```typescript
function getDomain(domainId: number, options?: AzionClientOptions): Promise<AzionDomainsResponse<AzionDomain>>;
```

| Parâmetro  | Tipo                                        | Obrigatório | Descrição             |
| ---------- | ------------------------------------------- | ----------- | --------------------- |
| `domainId` | `number`                                    | Sim         | O ID do domínio.      |
| `options`  | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição. |

Retorna `data` como um [AzionDomain](#aziondomain).

```typescript
import { getDomain } from 'azion/domains';
import type { AzionDomain, AzionDomainsResponse } from 'azion/domains';

const domainId = 1234567892;
const { data: domain, error }: AzionDomainsResponse<AzionDomain> = await getDomain(domainId);

if (domain) {
  console.log(`Found domain with name: ${domain.name}`);
} else {
  console.error('Failed to get domain', error);
}
```

Saída:

```text
Found domain with name: my-domain
```

---

## updateDomain

Atualiza um domínio pelo ID. A função envia uma requisição `PUT`, e toda chamada leva `name` e `edgeApplicationId`.

```typescript
function updateDomain(domainId: number, domain: AzionUpdateDomain, options?: AzionClientOptions): Promise<AzionDomainsResponse<AzionDomain>>;
```

| Parâmetro  | Tipo                                        | Obrigatório | Descrição                                                                   |
| ---------- | ------------------------------------------- | ----------- | --------------------------------------------------------------------------- |
| `domainId` | `number`                                    | Sim         | O ID do domínio a atualizar.                                                |
| `domain`   | [`AzionUpdateDomain`](#azionupdatedomain)   | Sim         | As configurações do domínio. `name` e `edgeApplicationId` são obrigatórios. |
| `options`  | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                                                       |

Retorna `data` como o [AzionDomain](#aziondomain) atualizado.

```typescript
import { updateDomain } from 'azion/domains';
import type { AzionDomain, AzionDomainsResponse } from 'azion/domains';

const domainId = 1234567892;
const { data: domain, error }: AzionDomainsResponse<AzionDomain> = await updateDomain(domainId, {
  name: 'my-domain-updated',
  edgeApplicationId: 1234567890,
});

if (domain) {
  console.log(`Updated domain with name: ${domain.name}`);
} else {
  console.error('Failed to update domain', error);
}
```

Saída:

```text
Updated domain with name: my-domain-updated
```

---

## deleteDomain

Exclui um domínio pelo ID.

```typescript
function deleteDomain(domainId: number, options?: AzionClientOptions): Promise<AzionDomainsResponse<AzionDeletedDomain>>;
```

| Parâmetro  | Tipo                                        | Obrigatório | Descrição                  |
| ---------- | ------------------------------------------- | ----------- | -------------------------- |
| `domainId` | `number`                                    | Sim         | O ID do domínio a excluir. |
| `options`  | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.      |

Retorna `data` como um [AzionDeletedDomain](#aziondeleteddomain) com o `id` do domínio excluído.

```typescript
import { deleteDomain } from 'azion/domains';
import type { AzionDeletedDomain, AzionDomainsResponse } from 'azion/domains';

const domainId = 1234567891;
const { data: deletedDomain, error }: AzionDomainsResponse<AzionDeletedDomain> = await deleteDomain(domainId);

if (deletedDomain) {
  console.log(`Deleted domain with ID: ${deletedDomain.id}`);
} else {
  console.error('Failed to delete domain', error);
}
```

Saída:

```text
Deleted domain with ID: 1234567891
```

---

## Tipos

O módulo `azion/domains` exporta estes tipos. Importe-os com `import type`.

### AzionDomainsClient

O client que [createClient](#createclient) retorna.

| Método         | Argumentos                                                                  | Retorno                                                |
| -------------- | --------------------------------------------------------------------------- | ------------------------------------------------------ |
| `createDomain` | `domain: AzionCreateDomain, options?: AzionClientOptions`                   | `Promise<AzionDomainsResponse<AzionDomain>>`           |
| `getDomains`   | `options?: AzionClientOptions, queryParams?`                                | `Promise<AzionDomainsResponse<AzionDomainCollection>>` |
| `getDomain`    | `domainId: number, options?: AzionClientOptions`                            | `Promise<AzionDomainsResponse<AzionDomain>>`           |
| `updateDomain` | `domainId: number, domain: AzionUpdateDomain, options?: AzionClientOptions` | `Promise<AzionDomainsResponse<AzionDomain>>`           |
| `deleteDomain` | `domainId: number, options?: AzionClientOptions`                            | `Promise<AzionDomainsResponse<AzionDeletedDomain>>`    |

### AzionDomainsCreateClient

O tipo de [createClient](#createclient).

```typescript
type AzionDomainsCreateClient = (config?: Partial<{
  token?: string;
  options?: AzionClientOptions;
}>) => AzionDomainsClient;
```

### AzionClientOptions

Opções de requisição que toda função recebe em `options`, e que [createClient](#createclient) recebe para todas as chamadas dele.

| Propriedade | Tipo      | Obrigatório | Descrição                                               |
| ----------- | --------- | ----------- | ------------------------------------------------------- |
| `debug`     | `boolean` | Não         | Ativa o modo de debug.                                  |
| `force`     | `boolean` | Não         | Declarado pelo tipo. Nenhum exemplo desta página o usa. |

### AzionDomainsResponse

O envelope que toda função retorna. Para saber como lê-lo, consulte [Envelope de resposta](#envelope-de-resposta).

| Propriedade | Tipo                                     | Obrigatório | Descrição                                   |
| ----------- | ---------------------------------------- | ----------- | ------------------------------------------- |
| `data`      | `T`                                      | Não         | O resultado da chamada.                     |
| `error`     | `{ message: string; operation: string }` | Não         | A mensagem de erro e a operação que falhou. |

### AzionDomain

Um domínio.

| Propriedade                   | Tipo                                                 | Obrigatório | Descrição                                                                                                             |
| ----------------------------- | ---------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `name`                        | `string`                                             | Sim         | O nome do domínio.                                                                                                    |
| `state`                       | [`ResponseState`](#responsestate)                    | Não         | O estado da requisição.                                                                                               |
| `id`                          | `number`                                             | Não         | O ID do domínio.                                                                                                      |
| `url`                         | `string`                                             | Não         | O endereço Azion do domínio.                                                                                          |
| `environment`                 | `string`                                             | Não         | O ambiente do domínio, como `production`.                                                                             |
| `active`                      | `boolean`                                            | Não         | Indica se o domínio está ativo.                                                                                       |
| `edgeApplicationId`           | `number`                                             | Não         | O ID da application para a qual o domínio aponta.                                                                     |
| `cnameAccessOnly`             | `boolean`                                            | Não         | Com `true`, bloqueia o acesso pelo endereço Azion do domínio, de modo que apenas os CNAMEs dele chegam à application. |
| `cnames`                      | `string[]`                                           | Não         | Os CNAMEs do domínio.                                                                                                 |
| `edgeFirewallId`              | `number`                                             | Não         | O ID do firewall do domínio. A API retorna `null` quando o domínio não tem um.                                        |
| `digitalCertificateId`        | `string \| number \| null`                           | Não         | O ID do certificado digital do domínio.                                                                               |
| `mtls`                        | `{ verification; trustedCaCertificateId; crlList? }` | Não         | As configurações de TLS mútuo do domínio.                                                                             |
| `mtls.verification`           | `'enforce' \| 'permissive'`                          | Sim         | O modo de verificação do TLS mútuo.                                                                                   |
| `mtls.trustedCaCertificateId` | `number`                                             | Sim         | O ID do certificado de CA confiável.                                                                                  |
| `mtls.crlList`                | `number[]`                                           | Não         | Os IDs das listas de revogação de certificados.                                                                       |

### AzionCreateDomain

As configurações que [createDomain](#createdomain) recebe: as propriedades de [AzionDomain](#aziondomain) sem `id`, `environment`, `active`, `url` e `state`.

| Propriedade            | Tipo                                                 | Obrigatório | Descrição                                                                                                             |
| ---------------------- | ---------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `name`                 | `string`                                             | Sim         | O nome do domínio.                                                                                                    |
| `edgeApplicationId`    | `number`                                             | Sim         | O ID da application para a qual o domínio aponta.                                                                     |
| `cnameAccessOnly`      | `boolean`                                            | Não         | Com `true`, bloqueia o acesso pelo endereço Azion do domínio, de modo que apenas os CNAMEs dele chegam à application. |
| `cnames`               | `string[]`                                           | Não         | Os CNAMEs do domínio.                                                                                                 |
| `edgeFirewallId`       | `number`                                             | Não         | O ID do firewall do domínio.                                                                                          |
| `digitalCertificateId` | `string \| number \| null`                           | Não         | O ID do certificado digital do domínio.                                                                               |
| `mtls`                 | `{ verification; trustedCaCertificateId; crlList? }` | Não         | As configurações de TLS mútuo do domínio.                                                                             |

### AzionUpdateDomain

As configurações que [updateDomain](#updatedomain) recebe: as propriedades de [AzionDomain](#aziondomain) sem `id`, `environment`, `url` e `state`. Ao contrário de [AzionCreateDomain](#azioncreatedomain), ele recebe `active`.

| Propriedade            | Tipo                                                 | Obrigatório | Descrição                                                                                                             |
| ---------------------- | ---------------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------- |
| `name`                 | `string`                                             | Sim         | O nome do domínio.                                                                                                    |
| `edgeApplicationId`    | `number`                                             | Sim         | O ID da application para a qual o domínio aponta.                                                                     |
| `active`               | `boolean`                                            | Não         | Indica se o domínio está ativo.                                                                                       |
| `cnameAccessOnly`      | `boolean`                                            | Não         | Com `true`, bloqueia o acesso pelo endereço Azion do domínio, de modo que apenas os CNAMEs dele chegam à application. |
| `cnames`               | `string[]`                                           | Não         | Os CNAMEs do domínio.                                                                                                 |
| `edgeFirewallId`       | `number`                                             | Não         | O ID do firewall do domínio.                                                                                          |
| `digitalCertificateId` | `string \| number \| null`                           | Não         | O ID do certificado digital do domínio.                                                                               |
| `mtls`                 | `{ verification; trustedCaCertificateId; crlList? }` | Não         | As configurações de TLS mútuo do domínio.                                                                             |

### AzionDomainCollection

Uma página de domínios.

| Propriedade | Tipo                              | Obrigatório | Descrição                      |
| ----------- | --------------------------------- | ----------- | ------------------------------ |
| `state`     | [`ResponseState`](#responsestate) | Sim         | O estado da requisição.        |
| `count`     | `number`                          | Sim         | O número de domínios da conta. |
| `pages`     | `number`                          | Sim         | O número de páginas.           |
| `results`   | [`AzionDomain[]`](#aziondomain)   | Sim         | Os domínios da página.         |

### AzionDeletedDomain

O resultado de [deleteDomain](#deletedomain).

| Propriedade | Tipo                              | Obrigatório | Descrição                 |
| ----------- | --------------------------------- | ----------- | ------------------------- |
| `id`        | `number`                          | Não         | O ID do domínio excluído. |
| `state`     | [`ResponseState`](#responsestate) | Não         | O estado da exclusão.     |

### ResponseState

O estado de uma requisição.

```typescript
type ResponseState = 'pending' | 'executed' | 'failed';
```

---

## 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.
- [Client](/pt-br/documentacao/devtools/azion-lib/client.md): Um client para Storage, SQL, Purge, Domains, Applications e AI.
- [Applications](/pt-br/documentacao/devtools/azion-lib/application.md): As funções da Azion Lib que criam a application para a qual um domínio aponta.
- [Domains](/pt-br/documentacao/plataforma/workloads/domains.md): Endereços Azion, domínios personalizados, CNAMEs, certificados digitais e mTLS em um domínio.
