# Tipos de application

O módulo `azion/applications` exporta estes tipos, exceto onde um tipo diz o contrário. Importe-os com `import type`.

---

## AzionApplicationsClient

O client que [createAzionApplicationClient](/pt-br/documentacao/devtools/azion-lib/application/application/#createazionapplicationclient) retorna. Cada método recebe um único objeto.

| Método              | Argumento                                                                                             | Retorno                                                         |
| ------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `createApplication` | `{ data: ApiCreateApplicationPayload; options?: AzionClientOptions }`                                 | `Promise<AzionApplicationResponse<AzionApplication>>`           |
| `getApplication`    | `{ applicationId: number; options?: AzionClientOptions }`                                             | `Promise<AzionApplicationResponse<AzionApplication>>`           |
| `getApplications`   | `{ params?: AzionApplicationCollectionOptions; options?: AzionClientOptions }`                        | `Promise<AzionApplicationCollectionResponse<AzionApplication>>` |
| `putApplication`    | `{ applicationId: number; data: ApiUpdateApplicationPayload; options?: AzionClientOptions }`          | `Promise<AzionApplicationResponse<AzionApplication>>`           |
| `patchApplication`  | `{ applicationId: number; data: Partial<ApiUpdateApplicationPayload>; options?: AzionClientOptions }` | `Promise<AzionApplicationResponse<AzionApplication>>`           |
| `deleteApplication` | `{ applicationId: number; options?: AzionClientOptions }`                                             | `Promise<AzionApplicationResponse<void>>`                       |

---

## CreateAzionApplicationClient

O tipo de [createAzionApplicationClient](/pt-br/documentacao/devtools/azion-lib/application/application/#createazionapplicationclient).

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

---

## AzionClientOptions

Opções de requisição que toda função recebe em `options`.

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

---

## AzionApplicationResponse

O envelope que toda função retorna, exceto as funções de lista. Para saber como lê-lo, consulte [Envelope de resposta](/pt-br/documentacao/devtools/azion-lib/application/#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. Uma exclusão bem-sucedida também o preenche. |

---

## AzionApplicationCollectionResponse

O envelope que as funções de lista retornam.

| Propriedade           | Tipo                                                     | Obrigatório | Descrição                                            |
| --------------------- | -------------------------------------------------------- | ----------- | ---------------------------------------------------- |
| `data`                | `{ count; total_pages; schema_version; links; results }` | Não         | A página de resultados.                              |
| `data.count`          | `number`                                                 | Sim         | O número de objetos da lista inteira, não da página. |
| `data.total_pages`    | `number`                                                 | Sim         | O número de páginas.                                 |
| `data.schema_version` | `number`                                                 | Sim         | A versão do schema da resposta da API.               |
| `data.links`          | `{ previous: string \| null; next: string \| null }`     | Sim         | As páginas anterior e seguinte.                      |
| `data.results`        | `T[]`                                                    | Sim         | Os objetos da página.                                |
| `error`               | `{ message: string; operation: string }`                 | Não         | A mensagem de erro e a operação que falhou.          |

---

## AzionApplication

Uma application: os campos de [ApiBaseApplicationPayload](#apibaseapplicationpayload), mais o ID e os [métodos da application](/pt-br/documentacao/devtools/azion-lib/application/application/#metodos-da-application). `AzionApplicationSettings` tem o mesmo formato, sem os métodos.

| Propriedade | Tipo                                                    | Obrigatório | Descrição                                  |
| ----------- | ------------------------------------------------------- | ----------- | ------------------------------------------ |
| `id`        | `number`                                                | Sim         | O ID da application.                       |
| `origins`   | `OriginOperations`                                      | Sim         | Os métodos de origem.                      |
| `cache`     | `CacheOperations`                                       | Sim         | Os métodos de cache setting.               |
| `devices`   | `DeviceGroupOperations`                                 | Sim         | Os métodos de device group.                |
| `functions` | `FunctionOperations`                                    | Sim         | Os métodos de instância de function.       |
| `rules`     | `{ request: RuleOperations; response: RuleOperations }` | Sim         | Os métodos de regra, um conjunto por fase. |

---

## ApiBaseApplicationPayload

As configurações de uma application. `name` é obrigatório, e todos os outros campos são opcionais. `ApiCreateApplicationPayload`, que o módulo não exporta, tem o mesmo formato, e `ApiUpdateApplicationPayload` torna todos os campos opcionais. A API v3 recusa `application_acceleration` em uma requisição de criação.

```typescript
interface ApiBaseApplicationPayload {
  name: string;
  delivery_protocol?: DeliveryProtocol;
  http3?: boolean;
  http_port?: HttpPort[];
  https_port?: HttpsPort[];
  minimum_tls_version?: TlsVersion;
  active?: boolean;
  debug_rules?: boolean;
  application_acceleration?: boolean;
  caching?: boolean;
  device_detection?: boolean;
  edge_firewall?: boolean;
  edge_functions?: boolean;
  image_optimization?: boolean;
  l2_caching?: boolean;
  load_balancer?: boolean;
  raw_logs?: boolean;
  web_application_firewall?: boolean;
  supported_ciphers?: SupportedCiphers;
}
```

Os enums das configurações da application, que o módulo exporta:

```typescript
enum DeliveryProtocol {
  HTTP = "http",
  HTTPS = "https",
  HTTP_HTTPS = "http,https"
}
enum HttpPort {
  PORT_80 = 80,
  PORT_8008 = 8008,
  PORT_8080 = 8080
}
enum HttpsPort {
  PORT_443 = 443,
  PORT_8443 = 8443,
  PORT_9440 = 9440,
  PORT_9441 = 9441,
  PORT_9442 = 9442,
  PORT_9443 = 9443
}
enum TlsVersion {
  TLS_1_0 = "tls_1_0",
  TLS_1_1 = "tls_1_1",
  TLS_1_2 = "tls_1_2",
  TLS_1_3 = "tls_1_3"
}
enum SupportedCiphers {
  ALL = "all",
  TLSv1_2_2018 = "TLSv1.2_2018",
  TLSv1_2_2019 = "TLSv1.2_2019",
  TLSv1_2_2021 = "TLSv1.2_2021",
  TLSv1_3_2022 = "TLSv1.3_2022"
}
```

---

## ApiListApplicationsParams

Paginação e ordenação para [getApplications](/pt-br/documentacao/devtools/azion-lib/application/application/#getapplications). `AzionApplicationCollectionOptions`, que o método do client recebe, tem as mesmas chaves.

| Propriedade | Tipo             | Obrigatório | Descrição                                               |
| ----------- | ---------------- | ----------- | ------------------------------------------------------- |
| `page`      | `number`         | Não         | O número da página.                                     |
| `page_size` | `number`         | Não         | O número de applications por página.                    |
| `sort`      | `'name' \| 'id'` | Não         | Declarado pelo tipo. Nenhum exemplo desta página o usa. |
| `order_by`  | `string`         | Não         | Declarado pelo tipo. Nenhum exemplo desta página o usa. |

---

## AzionOrigin

Uma origem, com a `origin_key` dela. `ApiCreateOriginPayload` recebe todos os campos abaixo, exceto `id` e `method`, todos obrigatórios, além dos campos opcionais `origin_path`, `hmac_authentication`, `hmac_region_name`, `hmac_access_key`, `hmac_secret_key`, `connection_timeout` e `timeout_between_bytes`. `ApiUpdateOriginRequest` torna todos os campos opcionais e exige `id`.

```typescript
interface AzionOrigin {
  id: number;
  origin_key: string;
  name: string;
  origin_type: OriginType;
  addresses: Address[];
  origin_protocol_policy: OriginProtocolPolicy;
  is_origin_redirection_enabled: boolean;
  host_header: string;
  method: string;
  origin_path: string;
  connection_timeout: number;
  timeout_between_bytes: number;
  hmac_authentication: boolean;
  hmac_region_name: string;
  hmac_access_key: string;
  hmac_secret_key: string;
}
interface Address {
  address: string;
  weight?: number | null;
  server_role?: ServerRole;
  is_active?: boolean;
}
```

Os enums de uma origem, que o módulo não exporta:

```typescript
enum OriginType {
  SINGLE_ORIGIN = "single_origin",
  LOAD_BALANCER = "load_balancer"
}
enum OriginProtocolPolicy {
  PRESERVE = "preserve",
  HTTP = "http",
  HTTPS = "https"
}
enum ServerRole {
  PRIMARY = "primary",
  BACKUP = "backup"
}
```

---

## AzionCacheSetting

Um cache setting: os campos de [ApiBaseCacheSettingPayload](#apibasecachesettingpayload), mais o `id` dele (`number`).

---

## ApiBaseCacheSettingPayload

As configurações de um cache setting. `name` é obrigatório, e todos os outros campos são opcionais. `ApiUpdateCacheSettingPayload` torna todos os campos opcionais.

```typescript
interface ApiBaseCacheSettingPayload {
  name: string;
  browser_cache_settings?: BrowserCacheSettings;
  browser_cache_settings_maximum_ttl?: number;
  cdn_cache_settings?: CdnCacheSettings;
  cdn_cache_settings_maximum_ttl?: number;
  cache_by_query_string?: CacheByQueryString;
  query_string_fields?: string[];
  enable_query_string_sort?: boolean;
  cache_by_cookies?: CacheByCookies;
  cookie_names?: string[];
  adaptive_delivery_action?: AdaptiveDeliveryAction;
  device_group?: string[];
  enable_caching_for_post?: boolean;
  l2_caching_enabled?: boolean;
  is_slice_configuration_enabled?: boolean;
  is_slice_edge_caching_enabled?: boolean;
  is_slice_l2_caching_enabled?: boolean;
  slice_configuration_range?: number;
  enable_caching_for_options?: boolean;
  enable_stale_cache?: boolean;
  l2_region?: string | null;
}
```

Os enums de um cache setting, que o módulo não exporta:

```typescript
enum BrowserCacheSettings {
  HONOR = "honor",
  OVERRIDE = "override",
  IGNORE = "ignore"
}
enum CdnCacheSettings {
  HONOR = "honor",
  OVERRIDE = "override"
}
enum CacheByQueryString {
  IGNORE = "ignore",
  WHITELIST = "whitelist",
  BLACKLIST = "blacklist",
  ALL = "all"
}
enum CacheByCookies {
  IGNORE = "ignore",
  WHITELIST = "whitelist",
  BLACKLIST = "blacklist",
  ALL = "all"
}
enum AdaptiveDeliveryAction {
  IGNORE = "ignore",
  OPTIMIZE = "optimize"
}
```

---

## AzionDeviceGroup

Um device group. `ApiCreateDeviceGroupPayload` e `ApiUpdateDeviceGroupPayload`, que o módulo não exporta, recebem `name` e `user_agent`, ambos obrigatórios na criação e opcionais na atualização.

| Propriedade  | Tipo     | Obrigatório | Descrição                                                              |
| ------------ | -------- | ----------- | ---------------------------------------------------------------------- |
| `id`         | `number` | Sim         | O ID do device group.                                                  |
| `name`       | `string` | Sim         | O nome do grupo, sem espaços e sem hífens.                             |
| `user_agent` | `string` | Sim         | A expressão regular comparada com o header de requisição `User-Agent`. |

---

## AzionFunctionInstance

Uma instância de function. A API retorna os quatro campos abaixo, como os exemplos mostram.

| Propriedade        | Tipo                      | Descrição                                 |
| ------------------ | ------------------------- | ----------------------------------------- |
| `id`               | `number`                  | O ID da instância de function.            |
| `edge_function_id` | `number`                  | O ID da function que a instância executa. |
| `name`             | `string`                  | O nome da instância de function.          |
| `args`             | `Record<string, unknown>` | Os argumentos que a function recebe.      |

O tipo declara outros campos: `id`, mais os campos de `ApiBaseFunctionInstancePayload`, que são `name`, `code`, `language` (`'JavaScript'`), `initiator_type` (`'edge_application' \| 'edge_firewall'`), `active` e `json_args`. `ApiUpdateFunctionInstancePayload` torna esses campos opcionais.

---

## ApiCreateFunctionInstancePayload

O payload de [createFunctionInstance](/pt-br/documentacao/devtools/azion-lib/application/function-instance/#createfunctioninstance). O módulo não exporta este tipo.

| Propriedade        | Tipo                      | Obrigatório | Descrição                                               |
| ------------------ | ------------------------- | ----------- | ------------------------------------------------------- |
| `name`             | `string`                  | Sim         | O nome da instância de function.                        |
| `edge_function_id` | `number`                  | Sim         | O ID da function que a instância executa.               |
| `args`             | `Record<string, unknown>` | Sim         | Os argumentos que a function recebe.                    |
| `active`           | `boolean`                 | Não         | Declarado pelo tipo. Nenhum exemplo desta página o usa. |

---

## AzionRule

Uma regra: os campos de [ApiCreateRulePayload](#apicreaterulepayload), mais `id` (`number`). `AzionRule` declara `is_active` e `order` como obrigatórios, e toda regra dos exemplos traz os dois.

---

## ApiCreateRulePayload

O payload de [createRule](/pt-br/documentacao/devtools/azion-lib/application/rule/#createrule). `ApiUpdateRulePayload` torna todos os campos opcionais.

| Propriedade   | Tipo                      | Obrigatório | Descrição                                                                                                                                                         |
| ------------- | ------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`        | `string`                  | Sim         | O nome da regra.                                                                                                                                                  |
| `phase`       | `'request' \| 'response'` | Sim         | A fase da regra.                                                                                                                                                  |
| `criteria`    | `Criterion[][]`           | Sim         | Os grupos de condições. Cada `Criterion` contém `variable` (`string`), `operator` (`string`), `conditional` (`'if' \| 'and' \| 'or'`) e `input_value` (`string`). |
| `behaviors`   | `Behavior[]`              | Sim         | As ações. Cada `Behavior` contém `name` (`string`) e um `target` opcional: uma `string`, `null` ou `{ captured_array: string; subject: string; regex: string }`.  |
| `is_active`   | `boolean`                 | Não         | Indica se a regra está ativa. Uma regra criada sem ele fica ativa.                                                                                                |
| `order`       | `number`                  | Não         | A posição da regra na fase dela.                                                                                                                                  |
| `description` | `string`                  | Não         | A descrição da regra.                                                                                                                                             |

---

## Parâmetros de lista

O objeto `params` de cada função de lista de sub-recurso declara estas chaves. Os exemplos enviam apenas `page` e `page_size`. `ApiListDeviceGroupsParams` não é exportado.

| Tipo                             | Chaves declaradas                                                                                 |
| -------------------------------- | ------------------------------------------------------------------------------------------------- |
| `ApiListOriginsParams`           | `page`, `page_size`, `sort` (`'name' \| 'id'`), `order` (`'asc' \| 'desc'`), `filter`             |
| `ApiListCacheSettingsParams`     | `page`, `page_size`, `sort` (`'name' \| 'id'`), `order` (`'asc' \| 'desc'`)                       |
| `ApiListDeviceGroupsParams`      | `page`, `page_size`, `sort` (`'name' \| 'id'`), `order` (`'asc' \| 'desc'`)                       |
| `ApiListFunctionInstancesParams` | `page`, `page_size`, `sort` (`'name' \| 'id'`), `order` (`'asc' \| 'desc'`), `order_by`, `filter` |
| `ApiListRulesParams`             | `page`, `page_size`, `sort` (`string`), `order` (`'asc' \| 'desc'`), `filter`                     |

---

## Recursos relacionados

- [Azion Lib](/pt-br/documentacao/devtools/azion-lib.md): Os módulos da Azion Lib e o pacote npm em que cada um é distribuído.
- [Applications](/pt-br/documentacao/devtools/azion-lib/application.md): A autenticação do módulo, o envelope de resposta dele e os erros que as funções reportam.
- [Funções de application](/pt-br/documentacao/devtools/azion-lib/application/application.md): As funções que criam, leem e atualizam a application que estes tipos descrevem.
- [Client](/pt-br/documentacao/devtools/azion-lib/client.md): O client que expõe Applications ao lado de Storage, SQL, Purge, Domains e AI.
