Crypto et digest
Deux petites familles qui résolvent deux problèmes sans rapport : prouver qu'une charge utile n'a pas été altérée, et transformer un flot d'événements en un message qu'un humain lira vraiment.
Crypto — Hachage et HMAC
Deux opérateurs, qui calculent des empreintes et des signatures — typiquement pour vérifier un webhook entrant ou signer un webhook sortant.
| Opérateur | Propriétés | Description |
|---|---|---|
hash |
input, algorithm, encoding? |
Hache avec md5 / sha256 / sha512. |
hmac |
input, secret, algorithm, encoding? |
HMAC à clé avec sha256 / sha512, clé fournie par secret. |
algorithm est obligatoire sur les deux. encoding vaut hex (par défaut) ou base64 sur les deux.
- name: signPayload
type: crypto
operator: hmac
props:
input: '{{trigger.data.body}}'
secret: $env.SIGNING_SECRET
algorithm: sha256
encoding: hex
hmac n'accepte pas md5. Son énumération d'algorithmes se limite à sha256 et sha512, tandis que hash accepte encore md5 pour l'interopérabilité avec des systèmes anciens. Ne recourez jamais à md5 pour une signature sur laquelle vous vous appuyez.
Gardez la clé dans l'environnement ($env.SIGNING_SECRET), jamais en clair dans la configuration — celle-ci est du code, et elle part vers un dépôt distant.
Digest — Regroupement et libération
Deux opérateurs qui collectent des éléments sur de nombreuses exécutions dans un seau nommé, puis les vident en un seul lot. L'usage classique est le regroupement de notifications : une automatisation collecte chaque événement à mesure, une seconde les libère selon une planification.
| Opérateur | Propriétés | Description |
|---|---|---|
collect |
digestKey, item, deduplicateBy? |
Ajoute un élément à un seau nommé, avec déduplication optionnelle. |
release |
digestKey, sort?, limit? |
Vide un seau — éventuellement trié ({ field, direction? }) et plafonné. |
digestKey est obligatoire sur les deux opérateurs et c'est lui qui apparie un producteur à son consommateur. sort.direction vaut asc par défaut.
# Producer automation (record trigger) collects
- name: queueDigest
type: digest
operator: collect
props:
digestKey: daily-summary
item: '{{trigger.data.record}}'
deduplicateBy: id
# Consumer automation (cron trigger) releases
- name: drain
type: digest
operator: release
props:
digestKey: daily-summary
sort: { field: created_at, direction: desc }
limit: 50
La propriété est digestKey, pas bucket. Une action digest écrite avec bucket: échoue à l'exécution avec digest.collect requires a digestKey. Le nom n'a aucun rapport avec les buckets de stockage, qui contiennent des fichiers.
Deux exécutions, pas une : collect appartient à une automatisation déclenchée par l'événement (un déclencheur d'enregistrement), et release à une automatisation déclenchée par l'horloge (un déclencheur cron). Comme release vide le seau, celui-ci repart vide pour la fenêtre suivante — une planification manquée accumule donc au lieu de perdre des événements.
Pages connexes
- Données et état — les familles
data,stateetfilter. - Déclencheurs webhook et cron — la signature entrante vérifiée par
hmac, et la planification qui piloterelease. - Actions e-mail — envoyer le lot qu'un digest libère.
- Actions HTTP et webhooks — signer une requête sortante.
- Variables d'environnement — d'où vient
$env.SIGNING_SECRET.
Dernière mise à jour 27 juillet 2026
Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta — les contributions et corrections sont les bienvenues.