# Módulo Application da Azion

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

O módulo **Application** da Azion oferece uma interface completa para interagir com a API de **Applications** da Azion. Este módulo permite gerenciar applications e seus componentes, incluindo configurações de cache, grupos de dispositivos, instâncias de funções, origens e configurações do mecanismo de regras.

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

Você pode interagir com a API usando um `client` ou chamando os métodos diretamente da biblioteca. Ao fazer chamadas diretas, você pode usar as variáveis de ambiente para configurar o `client` sem precisar passar diretamente o token e os parâmetros de depuração.

Este é um exemplo de como um arquivo `.env` com suas variáveis de ambiente pode ser:

```sh
AZION_TOKEN=seu-token-da-api
AZION_DEBUG=true
```

| Variavel | Descrição |
|----------|-------------|
| `AZION_TOKEN` | Seu token da API Azion. |
| `AZION_DEBUG` | Ativa o modo de depuração (true/false). |

:::tip
Definir `AZION_DEBUG` como `true` ativa o modo de depuração. Este modo fornece logs detalhados das requisições e respostas da API.
:::

## Uso

---

### `createClient`

**Exemplo em TypeScript**:

```typescript
import createClient from '@azion/applications';

const client = createClient({
  token: 'your-api-token',
  options: { debug: true }
});
```
---

### Uso com Applications

#### `createApplication`

Cria uma nova application.

**Exemplo em TypeScript**:

```typescript
import { createApplication } from '@azion/applications';

// Create a new application
const { data: newApp, error } = await createApplication({
  data: { 
    name: "My Applications",
    delivery_protocol: "http,https",
    application_acceleration: true
  }
});
```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `data` | `{ name: string; delivery_protocol: string; application_acceleration: boolean; }` | Dados para a nova application. |
| `options?` | ` debug?: boolean }` | Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionApplication>>` | A application criada ou erro se a criação falhou.|

#### `getApplications`

Lista todas as applications.

**Exemplo em TypeScript**:
```typescript
import { getApplications } from '@azion/applications';

// Lista todas applications
const { data: apps, error } = await getApplications({
  params: { page: 1, page_size: 20 }
});
```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `params?` | `{ page?: number; page_size?: number; order?: 'id'} \| 'name'; sort?: 'asc' \| 'desc'; }`| Parâmetros opcionais de filtro e paginação. |
| `options?` | `{ debug?: boolean }` | Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationCollectionResponse<AzionApplication>>` | Uma coleção de applications ou erro se a busca falhou. |

#### `getApplication`

Busca uma application específica.

**Exemplo em TypeScript**:

```typescript
import { getApplication } from '@azion/applications';

// Busca a application específica
const applicationId = 12345; // Substitua com o applicationID

const { data: app, error } = await getApplication(applicationId, { debug: true });

if (error) {
  console.error("Error retrieving application:", error);
} else {
  console.log("Application details:", app);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `applicationId`  | Número | O ID da application que você quer buscar. |
| `options?` | `{ debug?: boolean }` | Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionApplication>>` | O objeto da application encontrada ou erro caso não localizado.|

---

#### `updateApplication`

Atualiza uma application existente.

**Exemplo em TypeScript**:

```typescript
import { updateApplication } from '@azion/applications';

// Atualiza uma application existente
const applicationId = 12345; // Substitua com o applicationID

const updateData = {
  name: "Updated Applications",
  delivery_protocol: "https",
  application_acceleration: false
};

const { data: updatedApp, error } = await updateApplication(applicationId, updateData, { debug: true });

if (error) {
  console.error("Error updating application:", error);
} else {
  console.log("Updated application details:", updatedApp);
}

```
**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `applicationId`  | Número | O ID da application a ser atualizada. |
| `data` | `{ name?: string; delivery_protocol?: string; application_acceleration?: boolean; }`| Os dados atualizados da application. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. | 

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionApplication>>` | O objeto application atualizado, ou erro caso a atualização tenha falhado.|


#### `deleteApplication`

Exclui uma application.

**Exemplo em TypeScript**:

```typescript
import { deleteApplication } from '@azion/applications';

// Exclui uma application existente
const applicationId = 12345; // Substitua com o applicationID

const { data: deletedApp, error } = await deleteApplication(applicationId, { debug: true });

if (error) {
  console.error("Error deleting application:", error);
} else {
  console.log("Application deleted successfully:", deletedApp);
}


```
**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `applicationId`  | Número | O ID da application a ser excluída. |
| `options?` | `{ debug?: boolean }` | Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeletedApplication>>` | Confirmação de exclusão ou erro se a operação falhou. |

---

### Configurações de cache

#### `createCacheSetting`

Cria uma nova configuração de cache.

**Exemplo em TypeScript**:

```typescript
import { createCacheSetting } from '@azion/applications';

// Cria uma nova configuração de cache.
const cacheSettingData = {
  name: "My Cache Setting",
  browser_cache_settings: "private",
  cdn_cache_settings: "public"
};

const { data: newCacheSetting, error } = await createCacheSetting(cacheSettingData, { debug: true });

if (error) {
  console.error("Error creating cache setting:", error);
} else {
  console.log("Cache setting created successfully:", newCacheSetting);
}


```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `data`  | `{ name: string; browser_cache_settings: string; cdn_cache_settings: string; }` | Dados para a nova configuração de cache. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionCacheSetting>>` | A configuração de cache criada ou erro se a operação falhou. |



#### `getCacheSetting`

Busca uma configuração de cache específica.

**Exemplo em TypeScript**:

```typescript
import { getCacheSetting } from '@azion/applications';

// Busca uma configuração de cache específica
const cacheSettingId = 12345; // Substituia com o ID de configuração de cache

const { data: cacheSetting, error } = await getCacheSetting(cacheSettingId, { debug: true });

if (error) {
  console.error("Error retrieving cache setting:", error);
} else {
  console.log("Cache setting details:", cacheSetting);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `cacheSettingId`  | Número | O ID da configuração de cache a ser buscado. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionCacheSetting>>` | O objeto de configuração de cache encontrado ou erro caso não localizado. |

---

#### `getCacheSettings`

Lista todas configurações de cache.

**Exemplo em TypeScript**:

```typescript
import { getCacheSettings } from '@azion/applications';

// Lista todas configurações de cache com paginação e filtros opcionais
const { data: cacheSettings, error } = await getCacheSettings({
  params: { page: 1, page_size: 20, order: 'name', sort: 'asc' },
  debug: true
});

if (error) {
  console.error("Error retrieving cache settings:", error);
} else {
  console.log("Cache settings list:", cacheSettings);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `params?` | `{ page?: number; page_size?: number; order?: 'id' \| 'name'; sort?: 'asc' \| 'desc'; }` | Parâmetros opcionais de filtro e paginação. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationCollectionResponse<AzionCacheSetting>>` | Uma coleção de configurações de cache ou erro caso a busca tenha falhado. |


#### `updateCacheSetting`

Atualizar uma configuração de cache existente.

**Exemplo em TypeScript**:

```typescript
import { updateCacheSetting } from '@azion/applications';

// Update an existing cache setting
const cacheSettingId = 12345; // Substitua com o ID da configuração a ser atualizada

const updateData = {
  name: "Updated Cache Setting",
  browser_cache_settings: "no-cache",
  cdn_cache_settings: "private"
};

const { data: updatedCacheSetting, error } = await updateCacheSetting(cacheSettingId, updateData, { debug: true });

if (error) {
  console.error("Error updating cache setting:", error);
} else {
  console.log("Updated cache setting details:", updatedCacheSetting);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `cacheSettingId` | Número | O ID da configuração de cache a ser atualizada. |
| `data` | `{ name?: string; browser_cache_settings?: string; cdn_cache_settings?: string; }`| Dados atualizados para a configuração de cache. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionCacheSetting>>` | O objeto de configuração atualizado ou erro se a operação falhou. |



#### `deleteCacheSetting`

Exclui uma configuração de cache.

**Exemplo em TypeScript**:

```typescript
import { deleteCacheSetting } from '@azion/applications';

// Exclui uma configuração de cache
const cacheSettingId = 12345; // Substitua com o ID da configuração de cache.

const { data: deletedCacheSetting, error } = await deleteCacheSetting(cacheSettingId, { debug: true });

if (error) {
  console.error("Error deleting cache setting:", error);
} else {
  console.log("Cache setting deleted successfully:", deletedCacheSetting);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `cacheSettingId` | Número | O ID da configuração de cache a ser excluída. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeletedCacheSetting>>` | Confirmação de exclusão ou erro se a operação falhou. |

---

### Grupos de dispositivos

#### `createDeviceGroup`

Cria um novo grupo de dispositivos.

**Exemplo em TypeScript**:

```typescript
import { createDeviceGroup } from '@azion/applications';

// Cria um novo grupo de dispositivos
const deviceGroupData = {
  name: "Mobile Devices",
  user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
};

const { data: newDeviceGroup, error } = await createDeviceGroup(deviceGroupData, { debug: true });

if (error) {
  console.error("Error creating device group:", error);
} else {
  console.log("Device group created successfully:", newDeviceGroup);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `data` | `{ name: string; user_agent: string; }` | Dados para o novo grupo de dispositivos. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeviceGroup>>` | O grupo de dispositivos criado ou erro se a operação falhou. |



#### `getDeviceGroup`

Busca um grupo de dispositivos específico.

**Exemplo em TypeScript**:

```typescript
import { getDeviceGroup } from '@azion/applications';

// Busca um grupo de dispositivos específico
const deviceGroupId = 12345; // Substitua com o ID do grupo de dispositivos

const { data: deviceGroup, error } = await getDeviceGroup(deviceGroupId, { debug: true });

if (error) {
  console.error("Error retrieving device group:", error);
} else {
  console.log("Device group details:", deviceGroup);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `deviceGroupId` | Número | O ID do grupo de dispositivos a ser buscado. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeviceGroup>>` | O objeto grupo de dispositivos encontrado ou erro caso não localizado. |


#### `getDeviceGroups`

Lista todos os grupos de dispositivos.

**Exemplo em TypeScript**:

```typescript
import { getDeviceGroups } from '@azion/applications';

// Lista todos os grupos de dispositivos com paginação e filtros opcionais.\
const { data: deviceGroups, error } = await getDeviceGroups({
  params: { page: 1, page_size: 20, order: 'name', sort: 'asc' },
  debug: true
});

if (error) {
  console.error("Error retrieving device groups:", error);
} else {
  console.log("Device groups list:", deviceGroups);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `params?` | `{ page?: number; page_size?: number; order?: 'id' \| 'name'; sort?: 'asc' \| 'desc'; }` | Parâmetros opcionais de filtro e paginação. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationCollectionResponse<AzionDeviceGroup>>` | O objeto grupo de dispositivo encontrado ou erro caso não localizado. |



#### `updateDeviceGroup`

Atualiza um grupo de dispositivos.

**Exemplo em TypeScript**:

```typescript
import { updateDeviceGroup } from '@azion/applications';

// Atualiza um grupo de dispositivos
const deviceGroupId = 12345; // Substituia com o ID do grupo de dispositivos
const updatedName = "Novo nome";

const updateData = {
  name: updatedName
};

const { data: updatedDeviceGroup, error } = await updateDeviceGroup(deviceGroupId, updateData, { debug: true });

if (error) {
  console.error("Error updating device group:", error);
} else {
  console.log("Updated device group details:", updatedDeviceGroup);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `deviceGroupId` | Número | O ID do grupo de dispositivos a ser atualizado. |
| `data` | `{ name?: string; user_agent?: string; }` | Os dados a serem atualizados do grupo de dispositivos. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeviceGroup>>` | O grupo de dispositivos atualizados ou erro se a operação falhou. |



#### `deleteDeviceGroup`

Exclui um grupo de dispositivos.

**Exemplo em TypeScript**:

```typescript
import { deleteDeviceGroup } from '@azion/applications';

// Delete a specific device group
const deviceGroupId = 12345; // Replace with the actual device group ID

const { data: deletedDeviceGroup, error } = await deleteDeviceGroup(deviceGroupId, { debug: true });

if (error) {
  console.error("Error deleting device group:", error);
} else {
  console.log("Device group deleted successfully:", deletedDeviceGroup);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `deviceGroupId` | Número | O ID do grupo de dispositivos a ser excluído. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeletedDeviceGroup>>`| Confirmação de exclusão ou erro se a operação falhou. |

### Instância de function

#### `createFunctionInstance`

Cria uma nova instância de function.

**Exemplo em TypeScript**:

```typescript
import { createFunctionInstance } from '@azion/applications';

// Define os dados para nova instancia de function.
const functionInstanceData = {
  name: "MyFunctionInstance",
  entry_point: "index.handler", // Replace with the entry point of your function
  timeout: 30 // Adjust the timeout as needed
};

// Create a new function instance
const { data: newFunctionInstance, error } = await createFunctionInstance(functionInstanceData, { debug: true });

if (error) {
  console.error("Error creating function instance:", error);
} else {
  console.log("Function instance created successfully:", newFunctionInstance);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `data` | `ApiCreateFunctionInstancePayload` | Os dados para nova instância de function. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionFunctionInstance>>`| Objeto instância de function criado ou erro se a operação falhou. |



#### `getFunctionInstance`

Busca uma instância de function específica.

**Exemplo em TypeScript**:

```typescript
import { getFunctionInstance } from '@azion/applications';

// Busca uma instância de function específica
const functionInstanceId = 12345; // Substitua com o ID da function

const { data: functionInstance, error } = await getFunctionInstance(functionInstanceId, { debug: true });

if (error) {
  console.error("Error retrieving function instance:", error);
} else {
  console.log("Function instance details:", functionInstance);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `functionInstanceId` | Número | O ID da function a ser buscada. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionFunctionInstance>>`| A instância da function encontrada ou erro caso não localizada. |



#### `getFunctionInstances`

Lista todas as instâncias de functions.

**Exemplo em TypeScript**:

```typescript
import { getFunctionInstances } from '@azion/applications';

// Lista todas as instâncias de functions com parâmetros opcionais de filtro e paginação
const params = {
  page: 1, // Page number for pagination
  page_size: 20, // Número of items per page
  order: 'name', // Order by name
  sort: 'asc' // Sort in ascending order
};

const { data: functionInstances, error } = await getFunctionInstances(params, { debug: true });

if (error) {
  console.error("Error retrieving function instances:", error);
} else {
  console.log("List of function instances:", functionInstances);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `params?` | `ApiListFunctionInstancesParams` | Parâmetros opcionais de filtro e paginação. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationCollectionResponse<AzionFunctionInstance>>`| Uma coleção de instâncias de functions ou erro se não localizadas. |



#### `updateFunctionInstance`

Atualiza uma instância de function existente.

**Exemplo em TypeScript**:

```typescript
import { updateFunctionInstance } from '@azion/applications';

const functionInstanceId = 12345; // Substitua com o ID da function
const updatedData = {
  name: "Updated Function Instance Name",
  entry_point: "newIndex.handler",
};

// Update the function instance
const { data: updatedFunctionInstance, error } = await updateFunctionInstance(functionInstanceId, updatedData, { debug: true });

if (error) {
  console.error("Error updating function instance:", error);
} else {
  console.log("Updated function instance details:", updatedFunctionInstance);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `functionInstanceId` | Número | O ID da function a ser atualizada. |
| `data` | `ApiUpdateFunctionInstancePayload` | Os dados atualizados da instância da function. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionFunctionInstance>>`| O objeto function atualizado ou erro se a operação falhou. |

---

#### `deleteFunctionInstance`

Exclui uma instância de function.

**Exemplo em TypeScript**:

```typescript
import { deleteFunctionInstance } from '@azion/applications';

const functionInstanceId = 12345; // Replace with the actual function instance ID

// Delete the function instance
const { data: deletedFunctionInstance, error } = await deleteFunctionInstance(functionInstanceId, { debug: true });

if (error) {
  console.error("Error deleting function instance:", error);
} else {
  console.log("Function instance deleted successfully:", deletedFunctionInstance);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `functionInstanceId` | Número | O ID da instância de function a ser excluída. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeletedFunctionInstance>>`| Confirmação de exclusão ou erro se a operação falhou. |

---

### Origins

#### `createOrigin`

Cria uma nova Origin.

**Exemplo em TypeScript**:

```typescript
import { createOrigin } from '@azion/applications';

// Define the data for the new origin
const newOriginData = {
  name: "My New Origin", // Name of the origin
  url: "https://example.com" // URL of the origin
};

// Create a new origin
const { data: newOrigin, error } = await createOrigin(newOriginData, { debug: true });

if (error) {
  console.error("Error creating origin:", error);
} else {
  console.log("Created origin:", newOrigin);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `data` | `{ name: string; url: string; }` | Os dados para a nova Origin. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionOrigin>>`| O objeto Origin criado ou erro se a operação falhou. |



#### `getOrigin`

Busca uma Origin específica.

**Exemplo em TypeScript**:

```typescript
import { getOrigin } from '@azion/applications';

const originId = 12345; // Substitua com o ID da origin a ser localizada

const { data: origin, error } = await getOrigin(originId, { debug: true });

if (error) {
  console.error("Error retrieving origin:", error);
} else {
  console.log("Retrieved origin:", origin);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `originId` | Número | O ID da Origin a ser localizada. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionOrigin>>`| A Origin encontrada ou erro caso não localizada. |

#### `getOrigins`

Lista todas as Origins.

**Exemplo em TypeScript**:

```typescript
import { getOrigins } from '@azion/applications';

// Define os parâmetros opctionais de filtro e páginação
const params = {
  page: 1,
  page_size: 20,
  order: 'name',
  sort: 'asc' //
};


const { data: origins, error } = await getOrigins(params, { debug: true });

if (error) {
  console.error("Error retrieving origins:", error);
} else {
  console.log("List of origins:", origins);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `params?` | `{ page?: number; page_size?: number; order?: 'id' \| 'name'; sort?: 'asc' \| 'desc'; }` | Parâmetros opcionais de filtro e paginação. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationCollectionResponse<AzionOrigin>>`| Uma coleção de origins encontradas ou erro caso não localizadas. |


#### `updateOrigin`

Atualiza uma Origin existente.

**Exemplo em TypeScript**:

```typescript
import { updateOrigin } from '@azion/applications';


const originId = 12345; // Substitua com o ID da Origin a ser atualizada
const updatedData = {
  name: "Updated Origin Name", 
  url: "https://new-url.com"  
};

const { data: updatedOrigin, error } = await updateOrigin(originId, updatedData, { debug: true });

if (error) {
  console.error("Error updating origin:", error);
} else {
  console.log("Updated origin:", updatedOrigin);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `originId` | Número | O ID da Origin a ser atualizada. |
| `data` | `{ name?: string; url?: string; }` | Os dados atualizados da Origin. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionOrigin>>`| O objeto Origin atualizado ou erro se a operação falhou. |


#### `deleteOrigin`

Exclui uma Origin.

**Exemplo em TypeScript**:

```typescript
import { deleteOrigin } from '@azion/applications';

const originId = 12345; // Substituia com o ID da Origin a ser exclído.

const { data: deletedOrigin, error } = await deleteOrigin(originId, { debug: true });

if (error) {
  console.error("Error deleting origin:", error);
} else {
  console.log("Deleted origin:", deletedOrigin);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `originId` | Número | O ID da Origin a ser excluída. |
| `options?` | `{ debug?: boolean }`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeletedOrigin>>`| Confirmação de exclusão ou erro se a operação falhou. |

---

### Rules Engine

#### `createRule`

Cria uma nova regra.

**Exemplo em TypeScript**:

```typescript
import { createRule } from '@azion/applications';


const ruleData = {
  name: "Example Rule", 
  conditions: {
    path: "/example-path"
  },
  actions: {
    redirect: {
      url: "https://example.com"
    }
  }
};


const { data: newRule, error } = await createRule(ruleData, { debug: true });

if (error) {
  console.error("Error creating rule:", error);
} else {
  console.log("Created rule:", newRule);
}

```
**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `data` | `{ApiCreateRulePayload` | Os dados da nova regra. |
| `options?` | `AzionClientOptions`| Parâmetros opcionais para modo debug.|

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionRule>>`| O objeto regra criado ou erro se a operação falhou. |


#### `getRule`

Busca uma regra específica.

**Exemplo em TypeScript**:

```typescript
import { getRule } from '@azion/applications';

const ruleId = 123;

const { data: rule, error } = await getRule(ruleId, { debug: true });

if (error) {
  console.error("Error retrieving rule:", error);
} else {
  console.log("Retrieved rule:", rule);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `ruleId` | Número | O ID da regra a ser localizada. |
| `options?` | `AzionClientOptions`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionRule>>`| A regra encontrada ou erro se não localizada. |

---

#### `getRules`

Lista todas as regras.

**Exemplo em TypeScript**:

```typescript
import { getRules } from '@azion/applications';

// Parâmetros opcionais de filtros e páginação
const params = {
  page: 1,
  page_size: 10,
  order: 'id',
  sort: 'asc',
};

const { data: rules, error } = await getRules(params, { debug: true });

if (error) {
  console.error("Error retrieving rules:", error);
} else {
  console.log("Retrieved rules:", rules);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `params?` | `ApiListRulesParams` | Parâmetros opcionais de filtro e paginação. |
| `options?` | `AzionClientOptions`| Parâmetros opcionais para modo debug. |

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationCollectionResponse<AzionRule>>`| Uma coleção de regras ou erro se a operação falhou. |


#### `updateRule`

Atualiza uma regra existente.

**Exemplo em TypeScript**:

```typescript
import { updateRule } from '@azion/applications';

const ruleId = 123;

const data = {
  name: "Updated Rule Name",
  condition: "new_condition_expression",
  action: "new_action_to_perform",
};

const options = { debug: true };

const { data: updatedRule, error } = await updateRule(ruleId, data, options);

if (error) {
  console.error("Error updating the rule:", error);
} else {
  console.log("Updated rule:", updatedRule);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `ruleId` | Número | O ID da regra a ser atualizada.|
| `data` | `ApiUpdateRulePayload` | Os dados atualizados da regra. |
| `options?` | `AzionClientOptions`| Parâmetros opcionais para modo debug.|

**Retorna**:

| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionRule>>`| Objeto de regra atualizado ou erro se a operação falhou. |

#### `deleteRule`

Exclui uma regra.

**Exemplo em TypeScript**:

```typescript
import { deleteRule } from '@azion/applications';


const ruleId = 123; // Substitua com o ID da gera a ser excluída.

const options = { debug: true };

const { data: deletionConfirmation, error } = await deleteRule(ruleId, options);

if (error) {
  console.error("Error deleting the rule:", error);
} else {
  console.log("Rule deleted successfully:", deletionConfirmation);
}

```

**Parâmetros**:

| Parâmetro | Tipo | Descrição |
|-----------|------|-------------|
| `ruleId` | Número | O ID da regra a ser excluída. |
| `options?` | `AzionClientOptions`| Parâmetros opcionais para modo debug. |

**Retorna**:


| Tipo de Retorno | Descrição |
|-------------|-------------|
| `Promise<AzionApplicationResponse<AzionDeletedRule>>`| Confirmação de exclusão ou erro se a operação falhou. |

---