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

# Règles et statistiques

> Lisez et remplacez les règles par préfixe avec blob.rules, et consultez l'utilisation du compte avec blob.stats().

## Règles

Les règles définissent des valeurs par défaut et des limites pour tous les objets sous un préfixe : visibilité, expiration, taille maximale, extensions autorisées, cache et suppression automatique. Elles s'appliquent à chaque envoi sous le préfixe, qu'il provienne du SDK, d'un jeton d'envoi ou du tableau de bord. Voir [Modifier les paramètres](/fr/blob-reference/endpoint/settings-put) pour les limites des plans et la correspondance des préfixes.

### `rules.get()`

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

Renvoie les règles enregistrées sous forme de tableau. Chaque règle contient les champs ci-dessous, plus `created_at`, et `active_from` lorsqu'elle a `delete_after_days`.

<Note>
  `active_from` est **optionnel** : l'API ne l'envoie que pour les règles avec `delete_after_days`. En TypeScript, gérez le cas où il vaut `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()` **remplace la liste entière**. Envoyez toutes les règles que vous souhaitez conserver ; `rules.set([])` les supprime toutes. Pour ajouter une règle, lisez d'abord la liste :

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

Elle renvoie la liste enregistrée, comme `rules.get()`.

| Champ               | Type       | Description                                                                                         |
| ------------------- | ---------- | --------------------------------------------------------------------------------------------------- |
| `prefix`            | `string`   | Requis. Le préfixe auquel la règle s'applique, par ex. `"a/b/"`.                                    |
| `private`           | `boolean`  | Visibilité par défaut.                                                                              |
| `expire`            | `string`   | Expiration par défaut (`"30d"`, `"168h"`, ...).                                                     |
| `max_size`          | `number`   | Taille maximale de fichier en octets, de 512 B à 10 GiB.                                            |
| `extensions`        | `string[]` | De 1 à 50 extensions autorisées, correspondant à `^[a-z0-9]{1,16}(\.[a-z0-9]{1,16})?$`.             |
| `cache_control`     | `string`   | `Cache-Control` par défaut.                                                                         |
| `delete_after_days` | `number`   | Supprime les objets ce nombre de jours après leur écriture, de 7 à 3650 (Enterprise à partir de 1). |

<Warning>
  `delete_after_days` ne prend effet que **24 heures après l'enregistrement de la règle** (voir `active_from`). Une fois active, les objets supprimés ne peuvent pas être récupérés.
</Warning>

Lorsqu'une règle est rejetée, l'[`extra`](/fr/sdks/blob/errors#squarecloudbloberror) de l'erreur contient le `prefix` fautif :

```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()` est une lecture et fait l'objet de [nouvelles tentatives](/fr/sdks/blob/errors#politique-de-nouvelles-tentatives). `rules.set()` a droit à **une seule tentative**.
</Note>

## Statistiques

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

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

| Champ           | Description                                                      |
| --------------- | ---------------------------------------------------------------- |
| `usage.objects` | Nombre d'objets.                                                 |
| `usage.storage` | Stockage utilisé, en octets.                                     |
| `plan.included` | Stockage inclus dans votre plan, en octets.                      |
| `billing`       | `extraStorage`, `storagePrice`, `objectsPrice`, `totalEstimate`. |
| `month`         | `days` et `average_storage` pour le mois en cours.               |

<Info>
  Les statistiques sont une **estimation**, mise en cache par le serveur pendant **60 secondes**. `billing` n'est qu'une estimation du stockage au-delà de votre plan, pas une facture.
</Info>

Voir [Statistiques du compte](/fr/blob-reference/endpoint/stats).
