
# Actions de données et d'état

Ces cinq familles manipulent les données **en transit** entre les étapes et persistent les valeurs **entre les exécutions** : `data` (transformations), `state` (magasin clé-valeur), `filter` (filtrage conditionnel), `crypto` (hachage) et `digest` (regroupement d'événements pour une libération ultérieure).

## Data — Transformations en mémoire

La famille `data` transforme les tableaux et valeurs qui ont déjà circulé dans le workflow. Neuf operators.

| Operator      | Props                                     | Description                                                                              |
| ------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------- |
| `set`         | `value`                                   | Définit une valeur (ou en calcule une à partir de gabarits) pour les étapes ultérieures. |
| `aggregate`   | `input`, `function`, `field?`, `groupBy?` | Réduit un tableau — `sum`/`avg`/`min`/`max`/`count`, éventuellement groupé.              |
| `sort`        | `input`, `field`, `direction?`            | Trie un tableau par `field` (`asc` par défaut / `desc`).                                 |
| `limit`       | `input`, `count`                          | Prend les `count` premiers éléments.                                                     |
| `deduplicate` | `input`, `key`                            | Supprime les éléments en double par `key`.                                               |
| `merge`       | `left`, `right`, `joinKey?`               | Fusionne deux tableaux, en joignant éventuellement sur `joinKey`.                        |
| `split`       | `input`, `size`                           | Découpe un tableau en sous-tableaux de taille `size`.                                    |
| `compare`     | `left`, `right`, `key`                    | Compare deux tableaux par `key` (ajoutés / supprimés / modifiés).                        |
| `lookup`      | `input`, `key`, `value`                   | Construit une carte de correspondance clé→valeur à partir d'un tableau.                  |

```yaml
- name: revenueByRegion
  type: data
  operator: aggregate
  props:
    input: '{{fetchOrders.result}}'
    function: sum
    field: amount
    groupBy: region
```

## State — Magasin clé-valeur inter-exécutions

La famille `state` persiste les valeurs entre les exécutions d'automatisation (compteurs, curseurs, marqueurs de déduplication). Un `namespace` optionnel délimite les clés ; `ttl` les fait expirer. Cinq operators.

| Operator    | Props                                | Description                                                   |
| ----------- | ------------------------------------ | ------------------------------------------------------------- |
| `get`       | `key`, `namespace?`                  | Lit une valeur stockée.                                       |
| `set`       | `key`, `value`, `namespace?`, `ttl?` | Stocke une valeur, éventuellement avec une durée de vie.      |
| `increment` | `key`, `amount?`, `namespace?`       | Incrémente atomiquement une valeur numérique (par défaut +1). |
| `delete`    | `key`, `namespace?`                  | Supprime une valeur stockée.                                  |
| `list`      | `prefix?`, `namespace?`, `limit?`    | Liste les clés (éventuellement filtrées par préfixe).         |

```yaml
- name: bumpCounter
  type: state
  operator: increment
  props: { key: 'orders:{{trigger.data.region}}', namespace: metrics }
```

## Filter — Filtrage conditionnel

La famille `filter` décide si le workflow se poursuit. Un operator.

| Operator   | Props                   | Description                                                                                                                                             |
| ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `continue` | `condition`, `onFalse?` | Évalue un [groupe de conditions](/fr/docs/automation-flow-control) ; si faux, `stop` (arrête) ou `skip` (saute à l'action suivante). Par défaut `stop`. |

```yaml
- name: onlyPaid
  type: filter
  operator: continue
  props:
    condition:
      conditions: [{ field: '{{trigger.data.status}}', operator: equals, value: paid }]
    onFalse: stop
```

## Crypto — Hachage et HMAC

La famille `crypto` calcule des empreintes et des signatures (par ex. vérification de signature de webhook). Deux operators.

| Operator | Props                                       | Description                                                              |
| -------- | ------------------------------------------- | ------------------------------------------------------------------------ |
| `hash`   | `input`, `algorithm`, `encoding?`           | Hache avec `md5` / `sha256` / `sha512` ; `hex` (par défaut) ou `base64`. |
| `hmac`   | `input`, `secret`, `algorithm`, `encoding?` | HMAC avec `sha256` / `sha512` ; clé fournie par `secret`.                |

```yaml
- name: signPayload
  type: crypto
  operator: hmac
  props:
    input: '{{trigger.body}}'
    secret: $env.SIGNING_SECRET
    algorithm: sha256
    encoding: hex
```

## Digest — Regroupement et libération

La famille `digest` collecte des éléments à travers plusieurs exécutions dans un seau nommé, puis les libère sous forme de lot (par ex. regrouper des notifications dans un résumé quotidien). Deux operators.

| Operator  | Props                              | Description                                                               |
| --------- | ---------------------------------- | ------------------------------------------------------------------------- |
| `collect` | `bucket`, `item`, `deduplicateBy?` | Ajoute un élément à un seau nommé, en dédupliquant éventuellement.        |
| `release` | `bucket`, `sort?`, `limit?`        | Vide un seau — éventuellement trié (`{ field, direction? }`) et plafonné. |

```yaml
# Producer automation (record trigger) collects
- name: queueDigest
  type: digest
  operator: collect
  props: { bucket: daily-summary, item: '{{trigger.data}}', deduplicateBy: id }

# Consumer automation (cron trigger) releases
- name: drain
  type: digest
  operator: release
  props: { bucket: daily-summary, sort: { field: created_at, direction: desc }, limit: 50 }
```

## Pages connexes

- [Vue d'ensemble des actions](/fr/docs/automation-actions-overview) — le modèle type + operator + props.
- [Contrôle de flux](/fr/docs/automation-flow-control) — groupes de conditions, `path`, `loop`.
- [HTTP et webhooks](/fr/docs/automation-http-actions) — récupération de données depuis des API externes.
- [CRUD d'enregistrements](/fr/docs/records-crud) — l'API de données derrière les lectures d'enregistrements.
