# Origens

Uma origem é o servidor do qual uma application recupera conteúdo. Estas funções do `azion/applications` criam, listam, leem, atualizam e excluem as origens de uma application. A API identifica uma origem pelo `origin_key` dela, um UUID, que todas as funções, exceto `createOrigin` e `getOrigins`, recebem como `originKey`.

---

## createOrigin

Cria uma origem em uma application. Uma origem é o servidor do qual a application obtém o conteúdo.

```typescript
function createOrigin(params: {
  applicationId: number;
  data: ApiCreateOriginPayload;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<AzionOrigin>>;
```

| Parâmetro       | Tipo                                                                                                 | Obrigatório | Descrição                                                                                        |
| --------------- | ---------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------ |
| `applicationId` | `number`                                                                                             | Sim         | O ID da application.                                                                             |
| `data`          | [`ApiCreateOriginPayload`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionorigin)    | Sim         | As configurações da origem. O exemplo define `name`, `origin_type`, `addresses` e `host_header`. |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions) | Não         | Opções de requisição.                                                                            |

Retorna `data` como a [AzionOrigin](/pt-br/documentacao/devtools/azion-lib/application/types/#azionorigin) criada. A API identifica uma origem pela `origin_key` dela, um UUID, que as outras funções de origem recebem como `originKey`.

Este exemplo é em JavaScript, porque `ApiCreateOriginPayload` exige todos os campos da origem, incluindo `origin_key` e os campos de HMAC, e tipa `origin_type` como um enum:

```javascript
import { createOrigin } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID

// Define the data for the new origin
const newOriginData = {
  name: 'my-origin',
  origin_type: 'single_origin',
  addresses: [{ address: 'example.com' }],
  host_header: '${host}',
};

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

if (error) {
  console.error('Error creating origin:', error);
} else {
  console.log('Created origin:', newOrigin.origin_key, newOrigin.name, newOrigin.addresses);
}
```

Saída:

```text
Created origin: 11111111-1111-1111-1111-111111111111 my-origin [
  {
    address: 'example.com',
    weight: null,
    server_role: 'primary',
    is_active: true
  }
]
```

---

## getOrigins

Lista as origens de uma application, uma página por vez.

```typescript
function getOrigins(params: {
  applicationId: number;
  params?: ApiListOriginsParams;
  options?: AzionClientOptions;
}): Promise<AzionApplicationCollectionResponse<AzionOrigin>>;
```

| Parâmetro       | Tipo                                                                                                    | Obrigatório | Descrição                        |
| --------------- | ------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------- |
| `applicationId` | `number`                                                                                                | Sim         | O ID da application.             |
| `params`        | [`ApiListOriginsParams`](/pt-br/documentacao/devtools/azion-lib/application/types/#parametros-de-lista) | Não         | Paginação: `page` e `page_size`. |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions)    | Não         | Opções de requisição.            |

Retorna um [AzionApplicationCollectionResponse](/pt-br/documentacao/devtools/azion-lib/application/types/#azionapplicationcollectionresponse) cujo `data.results` contém objetos [AzionOrigin](/pt-br/documentacao/devtools/azion-lib/application/types/#azionorigin).

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

const applicationId = 1234567890; // Replace with the actual application ID

const { data: origins, error } = await getOrigins({ applicationId, params: { page: 1, page_size: 10 } });

if (error) {
  console.error('Error listing origins:', error);
} else {
  console.log(`Found ${origins?.count} origins:`, origins?.results.map((o) => `${o.name} (${o.origin_key})`));
}
```

Saída:

```text
Found 1 origins: [ 'my-origin (11111111-1111-1111-1111-111111111111)' ]
```

---

## getOrigin

Retorna uma origem de uma application pela chave de origem dela.

```typescript
function getOrigin(params: {
  applicationId: number;
  originKey: string;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<AzionOrigin>>;
```

| Parâmetro       | Tipo                                                                                                 | Obrigatório | Descrição                          |
| --------------- | ---------------------------------------------------------------------------------------------------- | ----------- | ---------------------------------- |
| `applicationId` | `number`                                                                                             | Sim         | O ID da application.               |
| `originKey`     | `string`                                                                                             | Sim         | A `origin_key` da origem, um UUID. |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions) | Não         | Opções de requisição.              |

Retorna `data` como uma [AzionOrigin](/pt-br/documentacao/devtools/azion-lib/application/types/#azionorigin). Uma chave que não corresponde a nenhuma origem retorna `error` com a mensagem `HTTP error! Status: 404 - NOT FOUND` e a operação `get origin`.

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

const applicationId = 1234567890; // Replace with the actual application ID
const originKey = '11111111-1111-1111-1111-111111111111'; // Replace with the origin key (a UUID)

const { data: origin, error } = await getOrigin({ applicationId, originKey });

if (error) {
  console.error('Error retrieving origin:', error);
} else {
  console.log('Origin details:', origin?.origin_key, origin?.name, origin?.origin_type, origin?.host_header);
}
```

Saída:

```text
Origin details: 11111111-1111-1111-1111-111111111111 my-origin single_origin ${host}
```

---

## updateOrigin

Envia em uma requisição `PATCH` os campos da origem que você passa.

```typescript
function updateOrigin(params: {
  applicationId: number;
  originKey: string;
  data: ApiUpdateOriginRequest;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<AzionOrigin>>;
```

| Parâmetro       | Tipo                                                                                                 | Obrigatório | Descrição                             |
| --------------- | ---------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------- |
| `applicationId` | `number`                                                                                             | Sim         | O ID da application.                  |
| `originKey`     | `string`                                                                                             | Sim         | A `origin_key` da origem a atualizar. |
| `data`          | [`ApiUpdateOriginRequest`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionorigin)    | Sim         | Os campos a mudar.                    |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions) | Não         | Opções de requisição.                 |

Retorna `data` como a [AzionOrigin](/pt-br/documentacao/devtools/azion-lib/application/types/#azionorigin) atualizada.

Este exemplo é em JavaScript, porque `ApiUpdateOriginRequest` exige um `id`, de que a requisição não precisa:

```javascript
import { updateOrigin } from 'azion/applications';

const applicationId = 1234567890; // Replace with the actual application ID
const originKey = '11111111-1111-1111-1111-111111111111'; // Replace with the origin key (a UUID)

const { data: updatedOrigin, error } = await updateOrigin({
  applicationId,
  originKey,
  data: { name: 'my-origin-updated' },
});

if (error) {
  console.error('Error updating origin:', error);
} else {
  console.log('Updated origin:', updatedOrigin.origin_key, updatedOrigin.name);
}
```

Saída:

```text
Updated origin: 11111111-1111-1111-1111-111111111111 my-origin-updated
```

---

## deleteOrigin

Exclui uma origem de uma application pela chave de origem dela.

```typescript
function deleteOrigin(params: {
  applicationId: number;
  originKey: string;
  options?: AzionClientOptions;
}): Promise<AzionApplicationResponse<void>>;
```

| Parâmetro       | Tipo                                                                                                 | Obrigatório | Descrição                           |
| --------------- | ---------------------------------------------------------------------------------------------------- | ----------- | ----------------------------------- |
| `applicationId` | `number`                                                                                             | Sim         | O ID da application.                |
| `originKey`     | `string`                                                                                             | Sim         | A `origin_key` da origem a excluir. |
| `options`       | [`AzionClientOptions`](/pt-br/documentacao/devtools/azion-lib/application/types/#azionclientoptions) | Não         | Opções de requisição.               |

Uma exclusão bem-sucedida retorna `error` com a mensagem `Expected JSON response, but got: `, por isso o exemplo lê a origem de volta com [getOrigin](#getorigin). Um erro `404` confirma a exclusão.

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

const applicationId = 1234567890; // Replace with the actual application ID
const originKey = '11111111-1111-1111-1111-111111111111'; // Replace with the origin key (a UUID)

const { error: deleteError } = await deleteOrigin({ applicationId, originKey });

// On success (HTTP 204) the envelope still carries an error, so confirm by reading the origin back
const { error } = await getOrigin({ applicationId, originKey });
if (error) {
  console.log(`Origin ${originKey} deleted (read back: ${error.message})`);
} else {
  console.error('Error deleting origin:', deleteError);
}
```

Saída:

```text
Origin 11111111-1111-1111-1111-111111111111 deleted (read back: HTTP error! Status: 404 - NOT FOUND)
```

---

## 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.
- [Tipos de application](/pt-br/documentacao/devtools/azion-lib/application/types.md): Os tipos de payload e de resposta que estas funções recebem e retornam.
- [Origens](/pt-br/documentacao/plataforma/connectors/origins.md): A origem da qual uma application recupera conteúdo e as configurações dela.
