> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Reglas y estadísticas

> Lee y reemplaza las reglas por prefijo con blob.rules, y consulta el uso de la cuenta con blob.stats().

## Reglas

Las reglas definen valores por defecto y límites para todos los objetos bajo un prefijo: visibilidad, expiración, tamaño máximo, extensiones permitidas, caché y eliminación automática. Se aplican a todas las subidas bajo el prefijo, tanto si vienen del SDK como de un token de subida o del panel. Consulta [Update Settings](/es/blob-reference/endpoint/settings-put) para ver los límites de cada plan y cómo se emparejan los prefijos.

### `rules.get()`

```typescript theme={"system"}
const rules = await blob.rules.get();
```

Devuelve las reglas guardadas como un array. Cada regla tiene los campos de abajo más `created_at`, y `active_from` cuando tiene `delete_after_days`.

<Note>
  `active_from` es **opcional**: la API solo lo envía en las reglas con `delete_after_days`. En TypeScript, ten en cuenta que puede ser `undefined`.
</Note>

### `rules.set(rules)`

```typescript theme={"system"}
await blob.rules.set([
    { prefix: "tmp/", delete_after_days: 7 },
    { prefix: "avatars/", max_size: 5 * 1024 * 1024, extensions: ["png", "jpg"] },
]);
```

<Warning>
  `rules.set()` **reemplaza toda la lista**. Envía todas las reglas que quieras conservar; `rules.set([])` las elimina todas. Para añadir una regla, lee primero la lista:

  ```typescript theme={"system"}
  const current = await blob.rules.get();
  await blob.rules.set([
      ...current.map(({ created_at, active_from, ...rule }) => rule),
      { prefix: "exports/", expire: "30d" },
  ]);
  ```
</Warning>

Devuelve la lista guardada, igual que `rules.get()`.

| Campo               | Tipo       | Descripción                                                                                      |
| ------------------- | ---------- | ------------------------------------------------------------------------------------------------ |
| `prefix`            | `string`   | Obligatorio. El prefijo al que se aplica la regla, p. ej. `"a/b/"`.                              |
| `private`           | `boolean`  | Visibilidad por defecto.                                                                         |
| `expire`            | `string`   | Expiración por defecto (`"30d"`, `"168h"`, ...).                                                 |
| `max_size`          | `number`   | Tamaño máximo del archivo en bytes, de 512 B a 10 GiB.                                           |
| `extensions`        | `string[]` | De 1 a 50 extensiones permitidas, que cumplan `^[a-z0-9]{1,16}(\.[a-z0-9]{1,16})?$`.             |
| `cache_control`     | `string`   | `Cache-Control` por defecto.                                                                     |
| `delete_after_days` | `number`   | Elimina los objetos este número de días después de escribirse, de 7 a 3650 (Enterprise desde 1). |

<Warning>
  `delete_after_days` solo surte efecto **24 horas después de guardar la regla** (consulta `active_from`). Una vez activa, los objetos eliminados no se pueden recuperar.
</Warning>

Cuando se rechaza una regla, el [`extra`](/es/sdks/blob/errors#squarecloudbloberror) del error contiene el `prefix` problemático:

```typescript theme={"system"}
import { SquareCloudBlobError } from "@squarecloud/blob";

try {
    await blob.rules.set(rules);
} catch (error) {
    if (error instanceof SquareCloudBlobError) {
        console.error(error.code, error.extra.prefix);
    }
}
```

<Note>
  `rules.get()` es una lectura y se [reintenta](/es/sdks/blob/errors#política-de-reintentos). `rules.set()` tiene un **único intento**.
</Note>

## Estadísticas

```typescript theme={"system"}
const stats = await blob.stats();

console.log(stats.usage.objects); // total objects
console.log(stats.usage.storage); // storage used, in bytes
```

| Campo           | Descripción                                                      |
| --------------- | ---------------------------------------------------------------- |
| `usage.objects` | Número de objetos.                                               |
| `usage.storage` | Almacenamiento usado, en bytes.                                  |
| `plan.included` | Almacenamiento incluido en tu plan, en bytes.                    |
| `billing`       | `extraStorage`, `storagePrice`, `objectsPrice`, `totalEstimate`. |
| `month`         | `days` y `average_storage` del mes en curso.                     |

<Info>
  Las estadísticas son una **estimación**, que el servidor almacena en caché durante **60 segundos**. `billing` es solo una estimación del almacenamiento por encima de tu plan, no una factura.
</Info>

Consulta [Account Stats](/es/blob-reference/endpoint/stats).
