# Módulo `Config` da Azion

import DocButton from '~/components/webkit/DocButton.vue';

O módulo **Config** fornece configuração e validação abrangentes para a Plataforma Azion. Ele suporta applications, workloads, connectors, functions, storage, regras de firewall, configurações WAF, listas de rede, páginas personalizadas e operações de purge.

<DocButton href="/pt-br/documentacao/produtos/azion-lib/visao-geral/" label="Saiba mais sobre as Azion Libraries" kind="secondary" size="medium" />

---

## Uso

Você pode configurar sua aplicação Azion de duas formas:

**1. Usando JSDoc para informações de tipo:**

```javascript
/** @type {import('azion').AzionConfig} */
const config = {...}

export default config;
```

**2. Usando a função `defineConfig`:**

```javascript
import { defineConfig } from 'azion/config';

const config = defineConfig({
  build: {
    entry: './src/index.js',
    preset: 'javascript',
  },
  // ... outras configurações
});

export default config;
```

---

## Funções

### `defineConfig`

Configura e valida as opções para Applications Azion.

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `config` | `AzionConfig` | O objeto de configuração para a Application Azion. |

**Retorno**:

| Tipo de Retorno | Descrição |
|-----------------|-----------|
| `AzionConfig` | O objeto de configuração validado. |

**Exemplo**:

```javascript
import { defineConfig } from 'azion/config';

const config = defineConfig({
  build: {
    entry: './src/index.js',
    preset: 'javascript',
    bundler: 'esbuild',
  },
  applications: [
    {
      name: 'my-app',
      active: true,
      cache: [
        {
          name: 'my-cache',
          browser: { maxAgeSeconds: 3600 },
          edge: { maxAgeSeconds: 7200 },
        },
      ],
    },
  ],
  storage: [
    {
      name: 'my-storage',
      workloadsAccess: 'read_write',
      dir: './storage',
      prefix: 'app-data',
    },
  ],
});

export default config;
```

### `processConfig`

Processa o objeto de configuração e retorna um manifesto.

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `config` | `AzionConfig` | O objeto de configuração. |

**Retorno**:

| Tipo de Retorno | Descrição |
|-----------------|-----------|
| `object` | O manifesto processado. |

**Exemplo**:

```typescript
import { AzionConfig, processConfig } from 'azion';

const config: AzionConfig = {...};

const manifest = processConfig(config);
console.log(manifest);
```

### `convertJsonConfigToObject`

Converte uma string de configuração JSON para um objeto `AzionConfig`.

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-----------|
| `config` | `string` | A string de configuração JSON. |

**Retorno**:

| Tipo de Retorno | Descrição |
|-----------------|-----------|
| `AzionConfig` | O objeto de configuração. |

**Exemplo**:

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

const manifestJson = {
  workloads: [
    {
      name: 'my-workload',
      active: true,
      domains: ['example.com'],
    },
  ],
};

const config = convertJsonConfigToObject(JSON.stringify(manifestJson));
console.log(config);
```

---

## Seções de configuração

O objeto `AzionConfig` suporta as seguintes seções:

| Seção | Descrição |
|-------|-----------|
| `build` | Configuração de build (entry, preset, bundler). |
| `applications` | Lista de applications com cache, regras e instâncias de function. |
| `workloads` | Configurações de workload para gerenciamento de domínios. |
| `connectors` | Connectors HTTP, storage ou live ingest. |
| `functions` | Configurações de functions. |
| `storage` | Configurações de buckets de storage. |
| `firewall` | Regras e configurações de firewall. |
| `waf` | Configurações de Web Application Firewall. |
| `networkList` | Listas de rede (IP, ASN, países). |
| `customPages` | Configurações de páginas de erro personalizadas. |
| `purge` | URLs ou cache keys para purge. |
| `kv` | Configurações de armazenamento Key-Value. |

---

## Tipos

### `AzionConfig`

O objeto de configuração principal.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `build` | `AzionBuild` (opcional) | Configuração de build. |
| `applications` | `AzionApplication[]` (opcional) | Lista de applications. |
| `workloads` | `AzionWorkload[]` (opcional) | Lista de workloads. |
| `connectors` | `AzionConnector[]` (opcional) | Lista de connectors. |
| `functions` | `AzionFunction[]` (opcional) | Lista de functions. |
| `storage` | `AzionStorage[]` (opcional) | Lista de configurações de storage. |
| `firewall` | `AzionFirewall[]` (opcional) | Lista de configurações de firewall. |
| `waf` | `AzionWaf[]` (opcional) | Lista de configurações WAF. |
| `networkList` | `AzionNetworkList[]` (opcional) | Lista de listas de rede. |
| `customPages` | `AzionCustomPages[]` (opcional) | Lista de páginas personalizadas. |
| `purge` | `AzionPurge[]` (opcional) | Lista de operações de purge. |
| `kv` | `AzionKV[]` (opcional) | Lista de configurações KV. |

### `AzionBuild`

Opções de configuração de build.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `entry` | `string \| string[] \| Record<string, string>` (opcional) | Arquivo(s) de entrada. |
| `preset` | `string \| AzionBuildPreset` (opcional) | Preset de build. |
| `bundler` | `'esbuild' \| 'webpack'` (opcional) | Bundler a usar. Padrão: `'esbuild'`. |
| `polyfills` | `boolean` (opcional) | Incluir polyfills. |
| `extend` | `(context: T) => T` (opcional) | Estender configuração do bundler. |
| `memoryFS` | `object` (opcional) | Configuração de sistema de arquivos em memória. |

### `AzionApplication`

Configuração de application.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome da application (1-250 caracteres). |
| `active` | `boolean` (opcional) | Se está ativa. Padrão: `true`. |
| `debug` | `boolean` (opcional) | Habilitar modo debug. Padrão: `false`. |
| `edgeCacheEnabled` | `boolean` (opcional) | Habilitar edge cache. Padrão: `true`. |
| `functionsEnabled` | `boolean` (opcional) | Habilitar functions. Padrão: `false`. |
| `applicationAcceleratorEnabled` | `boolean` (opcional) | Habilitar acelerador. Padrão: `false`. |
| `imageProcessorEnabled` | `boolean` (opcional) | Habilitar processador de imagem. Padrão: `false`. |
| `cache` | `AzionCache[]` (opcional) | Configurações de cache. |
| `rules` | `AzionRules` (opcional) | Regras de request/response. |
| `functionsInstances` | `FunctionInstance[]` (opcional) | Instâncias de function. |

### `AzionWorkload`

Configuração de workload para gerenciamento de domínios.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do workload (1-100 caracteres). |
| `active` | `boolean` (opcional) | Se está ativo. Padrão: `true`. |
| `infrastructure` | `1 \| 2` (opcional) | Tipo de infraestrutura. |
| `domains` | `string[]` | Lista de domínios. |
| `workloadDomainAllowAccess` | `boolean` (opcional) | Permitir acesso ao domínio. Padrão: `true`. |
| `tls` | `TLSConfig` (opcional) | Configuração TLS. |
| `protocols` | `ProtocolConfig` (opcional) | Configuração de protocolo. |
| `mtls` | `MTLSConfig` (opcional) | Configuração de TLS mútuo. |
| `deployments` | `Deployment[]` | Lista de deployments. |

### `AzionConnector`

Configuração de connector.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do connector (1-255 caracteres). |
| `active` | `boolean` (opcional) | Se está ativo. Padrão: `true`. |
| `type` | `'http' \| 'storage' \| 'live_ingest'` | Tipo de connector. |
| `attributes` | `ConnectorAttributes` | Atributos específicos do connector. |

### `AzionFunction`

Configuração de function.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome da function (1-250 caracteres). |
| `path` | `string` | Caminho para o arquivo da function. |
| `runtime` | `'azion_js'` (opcional) | Runtime. Padrão: `'azion_js'`. |
| `defaultArgs` | `object` (opcional) | Argumentos padrão. |
| `executionEnvironment` | `'application' \| 'firewall'` (opcional) | Ambiente de execução. |
| `active` | `boolean` (opcional) | Se está ativa. Padrão: `true`. |
| `bindings` | `FunctionBindings` (opcional) | Bindings da function. |

### `AzionStorage`

Configuração de storage.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do storage (6-63 caracteres). |
| `dir` | `string` | Caminho do diretório local. |
| `workloadsAccess` | `'read_only' \| 'read_write' \| 'restricted'` (opcional) | Permissões de acesso. |
| `prefix` | `string` | Prefixo do storage. |

### `AzionCache`

Configuração de cache.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do cache (1-250 caracteres). |
| `stale` | `boolean` (opcional) | Permitir conteúdo stale. |
| `queryStringSort` | `boolean` (opcional) | Ordenar parâmetros de query string. |
| `methods` | `{ post?: boolean; options?: boolean }` (opcional) | Métodos HTTP para cache. |
| `browser` | `{ maxAgeSeconds: number \| string }` (opcional) | Configurações de cache do browser. |
| `edge` | `{ maxAgeSeconds: number \| string }` (opcional) | Configurações de cache edge. |
| `cacheByCookie` | `object` (opcional) | Configurações de cache por cookie. |
| `cacheByQueryString` | `object` (opcional) | Configurações de cache por query string. |
| `tieredCache` | `object` (opcional) | Configurações de tiered cache. |

### `AzionFirewall`

Configuração de firewall.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do firewall. |
| `active` | `boolean` (opcional) | Se está ativo. |
| `functions` | `boolean` (opcional) | Habilitar functions. |
| `networkProtection` | `boolean` (opcional) | Habilitar proteção de rede. |
| `waf` | `boolean` (opcional) | Habilitar WAF. |
| `rules` | `AzionFirewallRule[]` (opcional) | Regras de firewall. |

### `AzionWaf`

Configuração WAF.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do WAF (1-250 caracteres). |
| `productVersion` | `string` (opcional) | Versão do produto. Padrão: `'1.0'`. |
| `engineSettings` | `WafEngineSettings` | Configuração do engine WAF. |

### `AzionNetworkList`

Configuração de lista de rede.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome da lista de rede (1-250 caracteres). |
| `type` | `'ip_cidr' \| 'asn' \| 'countries'` | Tipo da lista. |
| `items` | `string[]` | Itens da lista (1-20000). |
| `active` | `boolean` (opcional) | Se está ativa. Padrão: `true`. |

### `AzionPurge`

Configuração de purge.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `type` | `'url' \| 'cachekey' \| 'wildcard'` | Tipo de purge. |
| `items` | `string[]` | URLs ou padrões para purge. |
| `layer` | `'cache' \| 'tiered_cache'` (opcional) | Camada de cache. |

### `AzionKV`

Configuração de armazenamento KV.

| Propriedade | Tipo | Descrição |
|-------------|------|-----------|
| `name` | `string` | Nome do armazenamento KV (1-255 caracteres). |