# Storage

O pacote `@aziontech/storage` é a biblioteca da Azion Lib para o [Object Storage](/pt-br/documentacao/plataforma/object-storage/). Suas funções criam, listam, leem, atualizam e excluem buckets e os objetos dentro deles pela Azion API v4. Cada função recebe um único objeto como argumento e retorna um envelope de resposta em vez de lançar uma exceção.

Instale o pacote:

```bash
npm install @aziontech/storage
```

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 tipos com `import type`, o que mantém os exemplos carregáveis quando as anotações de tipo são removidas.

---

## Autenticação

As funções leem 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`.

| Variável      | Descrição                                                                        |
| ------------- | -------------------------------------------------------------------------------- |
| `AZION_TOKEN` | Seu personal token da Azion.                                                     |
| `AZION_DEBUG` | Com `true`, as funções registram no log os corpos de resposta que a API retorna. |

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 [AzionStorageResponse](#azionstorageresponse), `{ data?, error? }`. Em caso de sucesso, `data` contém o bucket, o objeto ou a lista. Em caso de falha, `error` contém `{ message, operation }`, em que `operation` nomeia a chamada que falhou, como `create bucket` ou `get object by key`.

Um [deleteBucket](#deletebucket) ou [deleteObject](#deleteobject) bem-sucedido não retorna `data`: o envelope contém apenas `error`, com o valor `undefined`. Depois de uma exclusão, verifique `error`, não `data`.

---

## createClient

Cria um client que guarda um token e as opções de requisição e expõe as funções de bucket como métodos. `createClient` também é o export padrão do pacote.

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

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

Retorna um [AzionStorageClient](#azionstorageclient). Seus métodos recebem o mesmo objeto que a função correspondente desta página, sem `options`. O client não tem métodos de objeto: leia e grave objetos com as funções de objeto ou com os [métodos de bucket](#metodos-de-bucket).

Este exemplo cria um client e, com ele, um bucket:

```typescript
import { createClient } from '@aziontech/storage';
import type { AzionStorageClient } from '@aziontech/storage';

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

const { data, error } = await client.createBucket({ name: 'my-client-bucket', workloads_access: 'read_only' });
if (data) {
  console.log(`Bucket created with name: ${data.name}`);
} else {
  console.error('Failed to create bucket', error);
}
```

Saída:

```text
Bucket created with name: my-client-bucket
```

---

## setupStorage

Retorna um bucket pelo nome e, quando ele não existe, cria o bucket antes. A função lê o bucket e, somente quando essa leitura não encontra nada, cria um com o `workloads_access` que você passa.

```typescript
function setupStorage(params: {
  name: string;
  workloads_access: EdgeAccessType;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucket>>;
```

| Parâmetro          | Tipo                                        | Obrigatório | Descrição                                          |
| ------------------ | ------------------------------------------- | ----------- | -------------------------------------------------- |
| `name`             | `string`                                    | Sim         | O nome do bucket a retornar ou criar.              |
| `workloads_access` | [`EdgeAccessType`](#edgeaccesstype)         | Sim         | O nível de acesso do bucket, caso a função o crie. |
| `options`          | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                              |

Retorna `data` como um [AzionBucket](#azionbucket), existente ou criado. O bucket traz os [métodos de bucket](#metodos-de-bucket), então você pode gravar nele em seguida.

Este exemplo obtém um bucket que existe e grava um objeto JSON nele:

```typescript
import { setupStorage } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucket } from '@aziontech/storage';

const { data: bucket, error }: AzionStorageResponse<AzionBucket> = await setupStorage({
  name: 'my-app-bucket',
  workloads_access: 'read_write',
});
if (bucket) {
  console.log(`Storage ready: ${bucket.name}`);
  // Now you can safely use the bucket for operations
  const { data: object, error: objectError } = await bucket.createObject({
    key: 'config.json',
    content: '{}',
    params: { content_type: 'application/json' },
  });
  console.log(object ? `Object created: ${object.key}` : objectError);
} else {
  console.error('Failed to setup storage', error);
}
```

Saída:

```text
Storage ready: my-app-bucket
Object created: config.json
```

---

## createBucket

Cria um bucket.

```typescript
function createBucket(params: {
  name: string;
  workloads_access: EdgeAccessType;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucket>>;
```

| Parâmetro          | Tipo                                        | Obrigatório | Descrição                    |
| ------------------ | ------------------------------------------- | ----------- | ---------------------------- |
| `name`             | `string`                                    | Sim         | O nome do bucket.            |
| `workloads_access` | [`EdgeAccessType`](#edgeaccesstype)         | Sim         | O nível de acesso do bucket. |
| `options`          | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.        |

Retorna `data` como o [AzionBucket](#azionbucket) criado. Um bucket não tem `id`: todas as outras funções o encontram pelo `name`.

```typescript
import { createBucket } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucket } from '@aziontech/storage';

const { data, error }: AzionStorageResponse<AzionBucket> = await createBucket({
  name: 'my-new-bucket',
  workloads_access: 'read_only',
});
if (data) {
  console.log(`Bucket created with name: ${data.name}`);
} else {
  console.error('Failed to create bucket', error);
}
```

Saída:

```text
Bucket created with name: my-new-bucket
```

---

## getBuckets

Lista os buckets da conta, uma página por vez.

```typescript
function getBuckets(params: {
  params?: AzionBucketCollectionParams;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucketCollection>>;
```

| Parâmetro | Tipo                                                          | Obrigatório | Descrição                                        |
| --------- | ------------------------------------------------------------- | ----------- | ------------------------------------------------ |
| `params`  | [`AzionBucketCollectionParams`](#azionbucketcollectionparams) | Não         | Paginação, busca, ordenação e seleção de campos. |
| `options` | [`AzionClientOptions`](#azionclientoptions)                   | Não         | Opções de requisição.                            |

Retorna `data` como um [AzionBucketCollection](#azionbucketcollection): `buckets` contém a página, e `count` contém o número de buckets da conta, não o tamanho da página.

```typescript
import { getBuckets } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucketCollection } from '@aziontech/storage';

const { data: buckets, error }: AzionStorageResponse<AzionBucketCollection> = await getBuckets({
  params: { page: 1, page_size: 10 },
});
if (buckets) {
  console.log(`Retrieved ${buckets.buckets.length} of ${buckets.count} buckets`);
} else {
  console.error('Failed to retrieve buckets', error);
}
```

Saída:

```text
Retrieved 10 of 25 buckets
```

---

## getBucket

Retorna um bucket pelo nome.

```typescript
function getBucket(params: {
  name: string;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucket>>;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição             |
| --------- | ------------------------------------------- | ----------- | --------------------- |
| `name`    | `string`                                    | Sim         | O nome do bucket.     |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição. |

Retorna `data` como um [AzionBucket](#azionbucket), com os [métodos de bucket](#metodos-de-bucket). Um nome que não corresponde a nenhum bucket retorna `error` com a mensagem `The specified bucket does not exist.`.

```typescript
import { getBucket } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucket } from '@aziontech/storage';

const { data: bucket, error }: AzionStorageResponse<AzionBucket> = await getBucket({ name: 'my-new-bucket' });
if (bucket) {
  console.log(`Retrieved bucket: ${bucket.name} (${bucket.workloads_access})`);
} else {
  console.error('Bucket not found', error);
}
```

Saída:

```text
Retrieved bucket: my-new-bucket (read_only)
```

---

## updateBucket

Altera o nível de acesso de um bucket.

```typescript
function updateBucket(params: {
  name: string;
  workloads_access: EdgeAccessType;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucket>>;
```

| Parâmetro          | Tipo                                        | Obrigatório | Descrição                              |
| ------------------ | ------------------------------------------- | ----------- | -------------------------------------- |
| `name`             | `string`                                    | Sim         | O nome do bucket a atualizar.          |
| `workloads_access` | [`EdgeAccessType`](#edgeaccesstype)         | Sim         | O nível de acesso a definir no bucket. |
| `options`          | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                  |

Retorna `data` como o [AzionBucket](#azionbucket) atualizado.

```typescript
import { updateBucket } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucket } from '@aziontech/storage';

const { data: updatedBucket, error }: AzionStorageResponse<AzionBucket> = await updateBucket({
  name: 'my-new-bucket',
  workloads_access: 'read_write',
});
if (updatedBucket) {
  console.log(`Bucket updated: ${updatedBucket.name} (${updatedBucket.workloads_access})`);
} else {
  console.error('Failed to update bucket', error);
}
```

Saída:

```text
Bucket updated: my-new-bucket (read_write)
```

---

## deleteBucket

Exclui um bucket pelo nome. A API exclui um bucket somente quando ele não contém objetos, e não nas 24 horas seguintes à última exclusão de objeto nele. Um bucket que nunca conteve um objeto é excluído na hora.

```typescript
function deleteBucket(params: {
  name: string;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionDeletedBucket>>;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição                   |
| --------- | ------------------------------------------- | ----------- | --------------------------- |
| `name`    | `string`                                    | Sim         | O nome do bucket a excluir. |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.       |

Em caso de sucesso, o envelope não contém `data`, por isso o exemplo verifica `error`. Uma exclusão recusada preenche `error`; as mensagens estão em [Erros](#erros).

```typescript
import { deleteBucket } from '@aziontech/storage';

const { error } = await deleteBucket({ name: 'my-new-bucket' });
if (error) {
  console.error('Failed to delete bucket', error);
} else {
  console.log('Bucket my-new-bucket deleted');
}
```

Saída:

```text
Bucket my-new-bucket deleted
```

---

## createObject

Cria um objeto em um bucket.

```typescript
function createObject(params: {
  bucket: string;
  key: string;
  content: ContentObjectStorage;
  params?: { content_type?: string };
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucketObject>>;
```

| Parâmetro | Tipo                                            | Obrigatório | Descrição                                                                                     |
| --------- | ----------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------- |
| `bucket`  | `string`                                        | Sim         | O nome do bucket em que o objeto é criado.                                                    |
| `key`     | `string`                                        | Sim         | A chave (nome) do objeto.                                                                     |
| `content` | [`ContentObjectStorage`](#contentobjectstorage) | Sim         | O conteúdo do objeto: uma `string`, um `ArrayBuffer`, um `ReadableStream` ou um `Uint8Array`. |
| `params`  | `{ content_type?: string }`                     | Não         | Configurações do objeto. `content_type` define o content type do objeto.                      |
| `options` | [`AzionClientOptions`](#azionclientoptions)     | Não         | Opções de requisição.                                                                         |

Retorna `data` como um [AzionBucketObject](#azionbucketobject) com `key`, `content_type` e `state`. O objeto criado não traz `content`; leia o conteúdo com [getObjectByKey](#getobjectbykey).

```typescript
import { createObject } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucketObject } from '@aziontech/storage';

const { data: newObject, error }: AzionStorageResponse<AzionBucketObject> = await createObject({
  bucket: 'my-bucket',
  key: 'new-file.txt',
  content: 'File content',
  params: { content_type: 'text/plain' },
});
if (newObject) {
  console.log(`Object created with key: ${newObject.key}`);
  console.log(`Content type: ${newObject.content_type}`);
} else {
  console.error('Failed to create object', error);
}
```

Saída:

```text
Object created with key: new-file.txt
Content type: text/plain
```

---

## getObjectByKey

Retorna um objeto, com seu conteúdo, pela chave.

```typescript
function getObjectByKey(params: {
  bucket: string;
  key: string;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucketObject>>;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição                             |
| --------- | ------------------------------------------- | ----------- | ------------------------------------- |
| `bucket`  | `string`                                    | Sim         | O nome do bucket que contém o objeto. |
| `key`     | `string`                                    | Sim         | A chave do objeto.                    |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                 |

Retorna `data` como um [AzionBucketObject](#azionbucketobject) com `key` e `content`. Uma chave que não corresponde a nenhum objeto retorna `error` com a mensagem `The specified bucket object does not exist.`.

```typescript
import { getObjectByKey } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucketObject } from '@aziontech/storage';

const { data: object, error }: AzionStorageResponse<AzionBucketObject> = await getObjectByKey({
  bucket: 'my-bucket',
  key: 'new-file.txt',
});
if (object) {
  console.log(`Retrieved object: ${object.key}`);
  console.log(`Content: ${object.content}`);
} else {
  console.error('Object not found', error);
}
```

Saída:

```text
Retrieved object: new-file.txt
Content: File content
```

---

## getObjects

Lista os objetos de um bucket.

```typescript
function getObjects(params: {
  bucket: string;
  params?: AzionObjectCollectionParams;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucketObjects>>;
```

| Parâmetro | Tipo                                                          | Obrigatório | Descrição                                                                                   |
| --------- | ------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------- |
| `bucket`  | `string`                                                      | Sim         | O nome do bucket a listar.                                                                  |
| `params`  | [`AzionObjectCollectionParams`](#azionobjectcollectionparams) | Não         | O número máximo de objetos a retornar. Sem ele, a função solicita `max_object_count=10000`. |
| `options` | [`AzionClientOptions`](#azionclientoptions)                   | Não         | Opções de requisição.                                                                       |

Retorna `data` como um [AzionBucketObjects](#azionbucketobjects): `objects` e `count`. Cada objeto listado traz `key`, `size` e `last_modified`. A API também retorna `is_folder` em cada objeto, campo que o tipo não declara.

```typescript
import { getObjects } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucketObjects } from '@aziontech/storage';

const { data: objectResult, error }: AzionStorageResponse<AzionBucketObjects> = await getObjects({
  bucket: 'my-bucket',
});
if (objectResult) {
  console.log(`Retrieved ${objectResult.count} objects from the bucket`);
  for (const object of objectResult.objects) console.log(object.key, object.size, object.last_modified);
} else {
  console.error('Failed to retrieve objects', error);
}
```

Saída:

```text
Retrieved 1 objects from the bucket
new-file.txt 12 2026-01-01T12:00:00.000000Z
```

---

## updateObject

Substitui o conteúdo de um objeto.

```typescript
function updateObject(params: {
  bucket: string;
  key: string;
  content: ContentObjectStorage;
  params?: { content_type?: string };
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionBucketObject>>;
```

| Parâmetro | Tipo                                            | Obrigatório | Descrição                                                                                                 |
| --------- | ----------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------- |
| `bucket`  | `string`                                        | Sim         | O nome do bucket que contém o objeto.                                                                     |
| `key`     | `string`                                        | Sim         | A chave do objeto a atualizar.                                                                            |
| `content` | [`ContentObjectStorage`](#contentobjectstorage) | Sim         | O conteúdo que substitui o atual: uma `string`, um `ArrayBuffer`, um `ReadableStream` ou um `Uint8Array`. |
| `params`  | `{ content_type?: string }`                     | Não         | Configurações do objeto. `content_type` define o content type do objeto.                                  |
| `options` | [`AzionClientOptions`](#azionclientoptions)     | Não         | Opções de requisição.                                                                                     |

Retorna `data` como o [AzionBucketObject](#azionbucketobject) atualizado, com `key` e `content`.

```typescript
import { updateObject } from '@aziontech/storage';
import type { AzionStorageResponse, AzionBucketObject } from '@aziontech/storage';

const { data: updatedObject, error }: AzionStorageResponse<AzionBucketObject> = await updateObject({
  bucket: 'my-bucket',
  key: 'new-file.txt',
  content: 'Updated content',
});
if (updatedObject) {
  console.log(`Object updated: ${updatedObject.key}`);
  console.log(`New content: ${updatedObject.content}`);
} else {
  console.error('Failed to update object', error);
}
```

Saída:

```text
Object updated: new-file.txt
New content: Updated content
```

---

## deleteObject

Exclui um objeto de um bucket.

```typescript
function deleteObject(params: {
  bucket: string;
  key: string;
  options?: AzionClientOptions;
}): Promise<AzionStorageResponse<AzionDeletedBucketObject>>;
```

| Parâmetro | Tipo                                        | Obrigatório | Descrição                             |
| --------- | ------------------------------------------- | ----------- | ------------------------------------- |
| `bucket`  | `string`                                    | Sim         | O nome do bucket que contém o objeto. |
| `key`     | `string`                                    | Sim         | A chave do objeto a excluir.          |
| `options` | [`AzionClientOptions`](#azionclientoptions) | Não         | Opções de requisição.                 |

Em caso de sucesso, o envelope não contém `data`, por isso o exemplo verifica `error`. Uma chave que não corresponde a nenhum objeto preenche `error` com `The specified bucket object does not exist.`. Excluir um objeto também bloqueia o [deleteBucket](#deletebucket) nesse bucket por 24 horas.

```typescript
import { deleteObject } from '@aziontech/storage';

const { error } = await deleteObject({
  bucket: 'my-bucket',
  key: 'new-file.txt',
});
if (error) {
  console.error('Failed to delete object', error);
} else {
  console.log('Object new-file.txt deleted');
}
```

Saída:

```text
Object new-file.txt deleted
```

---

## Métodos de bucket

Um bucket que [getBucket](#getbucket), [setupStorage](#setupstorage) ou [createBucket](#createbucket) retorna traz cinco métodos que agem sobre esse bucket. Cada um recebe um único objeto e retorna o mesmo envelope que a função correspondente:

| Método           | Argumento                                                                            | Retorna `data` como                         |
| ---------------- | ------------------------------------------------------------------------------------ | ------------------------------------------- |
| `getObjects`     | `{ params: AzionObjectCollectionParams }` (`params` é obrigatório)                   | [`AzionBucketObjects`](#azionbucketobjects) |
| `getObjectByKey` | `{ key: string }`                                                                    | [`AzionBucketObject`](#azionbucketobject)   |
| `createObject`   | `{ key: string; content: ContentObjectStorage; params?: { content_type?: string } }` | [`AzionBucketObject`](#azionbucketobject)   |
| `updateObject`   | `{ key: string; content: ContentObjectStorage; params?: { content_type?: string } }` | [`AzionBucketObject`](#azionbucketobject)   |
| `deleteObject`   | `{ key: string }`                                                                    | nada em caso de sucesso; verifique `error`  |

Este exemplo lê um bucket e, em seguida, lista, lê, atualiza e exclui um objeto pelos métodos dele:

```typescript
import { getBucket } from '@aziontech/storage';

const { data: bucket, error } = await getBucket({ name: 'my-app-bucket' });
if (!bucket) throw new Error(error?.message);

const { data: list } = await bucket.getObjects({ params: { max_object_count: 10 } });
console.log('getObjects:', list?.objects.map((o) => o.key));

const { data: object } = await bucket.getObjectByKey({ key: 'config.json' });
console.log('getObjectByKey:', object?.key, object?.content);

const { data: updated } = await bucket.updateObject({
  key: 'config.json',
  content: '{"theme":"dark"}',
  params: { content_type: 'application/json' },
});
console.log('updateObject:', updated?.key, updated?.content);

const { error: deleteError } = await bucket.deleteObject({ key: 'config.json' });
console.log('deleteObject:', deleteError ? deleteError : 'deleted');
```

Saída:

```text
getObjects: [ 'config.json' ]
getObjectByKey: config.json {}
updateObject: config.json {"theme":"dark"}
deleteObject: deleted
```

---

## Erros

Uma chamada que falha retorna estas mensagens em `error.message`. `error.operation` nomeia a chamada, como `get all buckets` ou `delete bucket`.

| Mensagem                                                                                                                         | Causa                                                                                                  | O que fazer                                                                                                                                                                                                 |
| -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Authentication credentials were not provided.`                                                                                  | Nenhum token chegou à chamada: `AZION_TOKEN` não está definida e nenhum `token` foi passado ao client. | Defina `AZION_TOKEN` ou passe `token` para [createClient](#createclient).                                                                                                                                   |
| `Invalid authentication credentials.`                                                                                            | O token não é válido.                                                                                  | Use um [personal token](/pt-br/documentacao/fundamentos/personal-tokens/) válido.                                                                                                                           |
| `This field is required.`                                                                                                        | A requisição de criação não tem `workloads_access`.                                                    | Passe `name` e `workloads_access`.                                                                                                                                                                          |
| `The specified bucket does not exist.`                                                                                           | Nenhum bucket da conta tem esse nome.                                                                  | Confira o nome com [getBuckets](#getbuckets).                                                                                                                                                               |
| `The specified bucket object does not exist.`                                                                                    | O bucket não contém nenhum objeto com essa chave.                                                      | Confira a chave com [getObjects](#getobjects).                                                                                                                                                              |
| `Unable to delete a non-empty bucket. Additionally, objects deleted within the last 24 hours are also taken into consideration.` | O bucket contém objetos, ou um objeto foi excluído dele nas últimas 24 horas.                          | Exclua todos os objetos e aguarde 24 horas após a última exclusão. Para mais informações, consulte [Buckets e objetos](/pt-br/documentacao/plataforma/object-storage/buckets-e-objetos/#excluir-um-bucket). |

---

## Tipos

O pacote exporta estes tipos. Importe-os com `import type`.

### AzionStorageClient

O client que [createClient](#createclient) retorna. Todo método recebe um único objeto.

| Método         | Argumento                                             | Retorno                                                |
| -------------- | ----------------------------------------------------- | ------------------------------------------------------ |
| `getBuckets`   | `{ params?: AzionBucketCollectionParams }` (opcional) | `Promise<AzionStorageResponse<AzionBucketCollection>>` |
| `getBucket`    | `{ name: string }`                                    | `Promise<AzionStorageResponse<AzionBucket>>`           |
| `createBucket` | `{ name: string; workloads_access: EdgeAccessType }`  | `Promise<AzionStorageResponse<AzionBucket>>`           |
| `updateBucket` | `{ name: string; workloads_access: EdgeAccessType }`  | `Promise<AzionStorageResponse<AzionBucket>>`           |
| `deleteBucket` | `{ name: string }`                                    | `Promise<AzionStorageResponse<AzionDeletedBucket>>`    |
| `setupStorage` | `{ name: string; workloads_access: EdgeAccessType }`  | `Promise<AzionStorageResponse<AzionBucket>>`           |

### AzionClientOptions

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

| Propriedade | Tipo                                    | Obrigatório | Descrição                                                   |
| ----------- | --------------------------------------- | ----------- | ----------------------------------------------------------- |
| `debug`     | `boolean`                               | Não         | Registra no log os corpos de resposta que a API retorna.    |
| `force`     | `boolean`                               | Não         | Força a operação, mesmo quando ela pode destruir dados.     |
| `env`       | [`AzionEnvironment`](#azionenvironment) | Não         | O ambiente para onde vão as chamadas.                       |
| `external`  | `boolean`                               | Não         | Força o uso da API REST em vez da API integrada ao runtime. |

### AzionEnvironment

O ambiente que um client chama.

```typescript
type AzionEnvironment = 'development' | 'staging' | 'production';
```

### AzionStorageResponse

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. Ausente depois de uma exclusão bem-sucedida. |
| `error`     | `{ message: string; operation: string }` | Não         | A mensagem de erro e a operação que falhou.                          |

### AzionBucket

Um bucket.

| Propriedade                                                                    | Tipo                                            | Obrigatório | Descrição                                       |
| ------------------------------------------------------------------------------ | ----------------------------------------------- | ----------- | ----------------------------------------------- |
| `name`                                                                         | `string`                                        | Sim         | O nome do bucket.                               |
| `workloads_access`                                                             | [`EdgeAccessType`](#edgeaccesstype)             | Sim         | O nível de acesso do bucket.                    |
| `state`                                                                        | `'executed' \| 'executed-runtime' \| 'pending'` | Não         | O estado do bucket.                             |
| `last_editor`                                                                  | `string`                                        | Não         | O usuário que editou o bucket por último.       |
| `last_modified`                                                                | `string`                                        | Não         | Quando o bucket foi modificado pela última vez. |
| `product_version`                                                              | `string`                                        | Não         | A versão do produto.                            |
| `getObjects`, `getObjectByKey`, `createObject`, `updateObject`, `deleteObject` | funções                                         | Sim         | Os [métodos de bucket](#metodos-de-bucket).     |

### AzionBucketCollection

Uma página de buckets.

| Propriedade | Tipo                            | Obrigatório | Descrição                     |
| ----------- | ------------------------------- | ----------- | ----------------------------- |
| `buckets`   | [`AzionBucket[]`](#azionbucket) | Sim         | Os buckets da página.         |
| `count`     | `number`                        | Sim         | O número de buckets da conta. |

### AzionBucketCollectionParams

Paginação e filtragem para [getBuckets](#getbuckets).

| 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 buckets por página.              |
| `search`    | `string` | Não         | Corresponde a parte do nome de um bucket.    |
| `ordering`  | `string` | Não         | O campo que ordena os resultados.            |
| `fields`    | `string` | Não         | Os campos a retornar, separados por vírgula. |

### AzionBucketObject

Um objeto em um bucket.

| Propriedade     | Tipo                                            | Obrigatório | Descrição                                       |
| --------------- | ----------------------------------------------- | ----------- | ----------------------------------------------- |
| `key`           | `string`                                        | Sim         | A chave do objeto.                              |
| `state`         | `'executed' \| 'executed-runtime' \| 'pending'` | Não         | O estado do objeto.                             |
| `size`          | `number`                                        | Não         | O tamanho do objeto, em bytes.                  |
| `last_modified` | `string`                                        | Não         | Quando o objeto foi modificado pela última vez. |
| `content_type`  | `string`                                        | Não         | O content type do objeto.                       |
| `content`       | [`ContentObjectStorage`](#contentobjectstorage) | Não         | O conteúdo do objeto.                           |

### AzionBucketObjects

Uma lista de objetos.

| Propriedade | Tipo                                        | Obrigatório | Descrição                     |
| ----------- | ------------------------------------------- | ----------- | ----------------------------- |
| `objects`   | [`AzionBucketObject[]`](#azionbucketobject) | Sim         | Os objetos do bucket.         |
| `count`     | `number`                                    | Sim         | O número de objetos da lista. |

### AzionObjectCollectionParams

O limite para [getObjects](#getobjects).

| Propriedade        | Tipo     | Obrigatório | Descrição                                  |
| ------------------ | -------- | ----------- | ------------------------------------------ |
| `max_object_count` | `number` | Não         | O número máximo de objetos por requisição. |

### AzionDeletedBucket

O tipo que [deleteBucket](#deletebucket) declara para `data`. Uma exclusão bem-sucedida não retorna `data`.

| Propriedade | Tipo                                            | Obrigatório | Descrição           |
| ----------- | ----------------------------------------------- | ----------- | ------------------- |
| `name`      | `string`                                        | Sim         | O nome do bucket.   |
| `state`     | `'executed' \| 'executed-runtime' \| 'pending'` | Não         | O estado do bucket. |

### AzionDeletedBucketObject

O tipo que [deleteObject](#deleteobject) declara para `data`. Uma exclusão bem-sucedida não retorna `data`.

| Propriedade | Tipo                                            | Obrigatório | Descrição                   |
| ----------- | ----------------------------------------------- | ----------- | --------------------------- |
| `key`       | `string`                                        | Sim         | A chave do objeto excluído. |
| `state`     | `'executed' \| 'executed-runtime' \| 'pending'` | Não         | O estado da exclusão.       |

### ContentObjectStorage

O conteúdo que um objeto aceita.

```typescript
type ContentObjectStorage = ArrayBuffer | ReadableStream | Uint8Array | string;
```

### EdgeAccessType

O nível de acesso de um bucket: o que a plataforma da Azion pode fazer com ele quando uma aplicação o serve. Para saber o que cada valor permite, consulte [Níveis de acesso](/pt-br/documentacao/plataforma/object-storage/buckets-e-objetos/#niveis-de-acesso).

```typescript
type EdgeAccessType = 'read_only' | 'read_write' | 'restricted';
```

---

## 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 único client para Storage, SQL, Purge, Domains, Applications e AI.
- [Object Storage](/pt-br/documentacao/plataforma/object-storage.md): O que um bucket armazena e como uma aplicação o serve.
- [Buckets e objetos](/pt-br/documentacao/plataforma/object-storage/buckets-e-objetos.md): Nomes de bucket, chaves de objeto, níveis de acesso e as chamadas de API que essas funções fazem.
