[Nom du Webhook Sanity]
Type de ressource : Configuration Webhook Sanity
Emplacement : Sanity Studio â Settings â Webhooks
Statut : [Actif / Déprécié / En développement]
Slice : [Numéro de la tranche verticale]
Version : 1.0
1. Vue dâensemble (DOC)
Section titled â1. Vue dâensemble (DOC)â1.1. Description
Section titled â1.1. Descriptionâ[Description concise de ce que ce webhook dĂ©clenche dans lâĂ©cosystĂšme]
1.2. Objectif
Section titled â1.2. Objectifâ- [Objectif principal : ex. dĂ©clencher un rebuild du site lors de la publication]
- [Bénéfice pour le workflow éditorial]
1.3. ĂvĂ©nements Sanity dĂ©clencheurs
Section titled â1.3. ĂvĂ©nements Sanity dĂ©clencheursâ| ĂvĂ©nement | Statut |
|---|---|
| CrĂ©ation de document | [â /â] |
| Modification de document | [â /â] |
| Publication de document | [â /â] |
| Suppression de document | [â /â] |
| Type de document | Statut |
|---|---|
| post | [â /â] |
| project | [â /â] |
| page | [â /â] |
| author | [â /â] |
| category | [â /â] |
2. Configuration (CODE)
Section titled â2. Configuration (CODE)â2.1. ParamĂštres du webhook
Section titled â2.1. ParamĂštres du webhookâ| Champ | Valeur | Description |
|---|---|---|
| Name | [Nom du webhook] | Nom lisible pour lâidentification |
| URL | https://[worker-name].[subdomain].workers.dev |
URL du Worker L3 qui reçoit le webhook |
| HTTP Method | POST |
Méthode HTTP utilisée |
| Content Type | application/json |
Format du payload |
| Secret | [Valeur du secret] | Secret pour validation HMAC-SHA256 |
| Events | [Liste des événements] | Ex: publish.create, publish.update, publish.delete |
| Include drafts | [â /â] | Inclure ou non les sauvegardes de brouillons |
| Filter | [Expression GROQ] | Filtre pour limiter les documents déclencheurs |
2.2. Filtre GROQ (si applicable)
Section titled â2.2. Filtre GROQ (si applicable)â_type in ["post", "project", "page", "author", "category"]Rationale : [Expliquer pourquoi ce filtre est nĂ©cessaire]
2.3. Payload envoyé par Sanity
Section titled â2.3. Payload envoyĂ© par Sanityâ{ "transactionId": "abc123", "transition": "publish", "documentId": "post-123", "document": { "_id": "post-123", "_type": "post", "title": "Mon article", "slug": { "current": "mon-article" }, "status": "published", "publishedAt": "2026-09-03T10:00:00Z" }, "previousRevision": "rev-456", "currentRevision": "rev-789", "timestamp": "2026-09-03T10:00:00Z"}2.4. En-tĂȘtes HTTP envoyĂ©s
Section titled â2.4. En-tĂȘtes HTTP envoyĂ©sâ| En-tĂȘte | Description |
|---|---|
Content-Type |
application/json |
x-sanity-signature |
t=1693735200,v1=abc123... (timestamp + signature HMAC-SHA256) |
x-sanity-webhook-id |
ID unique du webhook |
User-Agent |
Sanity-webhook/1.0 |
3. Architecture et flux (DOC)
Section titled â3. Architecture et flux (DOC)â3.1. Diagramme de flux
Section titled â3.1. Diagramme de fluxâ[Sanity Content Lake] â (Ă©vĂ©nement : publish, create, update, delete) âŒ[HTTP POST vers URL du webhook] â âŒ[Worker L3 : cms-webhook-receiver] â âą Validation HMAC-SHA256 â âą Debouncing KV â âą DĂ©clenchement du build âŒ[HĂ©bergeur / CI/CD] â âą Build SSG Astro â âą RĂ©gĂ©nĂ©ration index Pagefind â âą DĂ©ploiement Cloudflare Pages âŒ[Site mis Ă jour]3.2. Composants impliquĂ©s
Section titled â3.2. Composants impliquĂ©sâ| Composant | RĂŽle | Couche | Documentation |
|---|---|---|---|
| Webhook Sanity | Envoi des notifications dâĂ©vĂ©nements | L1 | Ce document |
cms-webhook-receiver |
Réception, validation et traitement | L3 | /ObjectData/cloudflare-workers-objectData.md |
| Pipeline CI/CD | Build et déploiement | Infrastructure | [Lien vers docs CI/CD] |
4. Contrats dâEntrĂ©e/Sortie (SPEC)
Section titled â4. Contrats dâEntrĂ©e/Sortie (SPEC)â4.1. Inputs (payload webhook)
Section titled â4.1. Inputs (payload webhook)â| Champ | Type | Description |
|---|---|---|
transition |
string |
Type de transition (publish, create, update, delete) |
document |
object |
Document modifié |
timestamp |
string |
Timestamp de lâĂ©vĂ©nement |
4.2. Outputs (réponse Worker)
Section titled â4.2. Outputs (rĂ©ponse Worker)â| Code HTTP | Condition | Description |
|---|---|---|
| 200 | Webhook traité avec succÚs | Build déclenché ou ignoré (debounce) |
| 401 | Signature invalide | Secret incorrect |
| 403 | Signature manquante | En-tĂȘte manquant |
| 500 | Erreur serveur | Erreur interne du Worker |
4.3. Side effects
Section titled â4.3. Side effectsâ| Effet | Description | FrĂ©quence |
|---|---|---|
| Déclenchement build | Appel du deploy hook CI/CD | à chaque publication (debounce 2 min) |
| Lock KV | Pose dâun lock de 2 minutes | Ă chaque webhook reçu |
5. Tests attendus (TEST)
Section titled â5. Tests attendus (TEST)â5.1. Tests unitaires
Section titled â5.1. Tests unitairesâ| ScĂ©nario | Description | RĂ©sultat attendu |
|---|---|---|
| Validation HMAC-SHA256 | Signature correcte vs incorrecte | Validation réussie vs échec |
| Debouncing KV | Webhooks multiples en 2 min | Premier traité, autres ignorés |
5.2. Tests dâintĂ©gration
Section titled â5.2. Tests dâintĂ©grationâ| ScĂ©nario | DĂ©pendances | Description | RĂ©sultat attendu |
|---|---|---|---|
| Flux complet | Sanity â Worker â CI/CD | Publication â Webhook â Build | Site mis Ă jour |
| Débouncing | KV + Worker | Publications rapides successives | Un seul build déclenché |
5.3. Tests E2E
Section titled â5.3. Tests E2Eâ| ScĂ©nario | Parcours utilisateur | Description | RĂ©sultat attendu |
|---|---|---|---|
| Publication â Rebuild | Sanity Studio â Webhook â Build | Publication dâun article | Nouveau contenu visible aprĂšs rebuild |
6. IntĂ©gration (INTĂG)
Section titled â6. IntĂ©gration (INTĂG)â6.1. IntĂ©gration avec les composants
Section titled â6.1. IntĂ©gration avec les composantsâ| Composant | Type | RĂŽle | MĂ©thode dâintĂ©gration |
|---|---|---|---|
| Sanity Studio | L1 | Envoi du webhook | Configuration dans Studio |
| cms-webhook-receiver | L3 | Réception et traitement | HTTP POST endpoint |
| Pipeline CI/CD | Infrastructure | Build et déploiement | Deploy hook |
6.2. Points dâattention
Section titled â6.2. Points dâattentionâ- Le secret doit ĂȘtre identique dans Sanity et le Worker
- Le debounce KV protĂšge les quotas CI/CD
- Les webhooks ne sont déclenchés que sur
publish(pas sur les drafts)
6.3. Vérification de cohérence
Section titled â6.3. VĂ©rification de cohĂ©renceâ- Le webhook est configurĂ© dans Sanity Studio
- Le Worker reçoit et valide les webhooks
- Le build est déclenché correctement
- Le debounce fonctionne
- Les tests E2E passent
7. Sécurité
Section titled â7. SĂ©curitĂ©â7.1. MĂ©canismes de sĂ©curitĂ©
Section titled â7.1. MĂ©canismes de sĂ©curitĂ©â| MĂ©canisme | ImplĂ©mentation | Rationale |
|---|---|---|
| Validation HMAC-SHA256 | Signature cryptographique du payload | Garantit lâauthenticitĂ© et lâintĂ©gritĂ© |
| Secret stocké en env | wrangler secret put cÎté Worker L3 |
Jamais dans le code source |
| HTTPS obligatoire | Cloudflare force TLS | Chiffrement en transit |
| Filtre GROQ | Limitation des documents dĂ©clencheurs | Ăvite les webhooks inutiles |
7.2. Gestion du secret
Section titled â7.2. Gestion du secretâCĂŽtĂ© Sanity : Le secret est configurĂ© dans lâinterface Studio lors de la crĂ©ation du webhook.
CÎté Worker L3 : Le secret est injecté via wrangler secret put :
wrangler secret put SANITY_WEBHOOK_SECRET --env productionwrangler secret put SANITY_WEBHOOK_SECRET --env stagingRĂšgle : Le secret doit ĂȘtre identique des deux cĂŽtĂ©s.
7.3. RÚgles de sécurité
Section titled â7.3. RĂšgles de sĂ©curitĂ©â- â Utiliser un secret fort et unique par environnement
- â Ne jamais logger le secret ou le payload en clair
- â Rotation rĂ©guliĂšre du secret (tous les 90 jours)
8. Performance et limites
Section titled â8. Performance et limitesâ8.1. ConsidĂ©rations de performance
Section titled â8.1. ConsidĂ©rations de performanceâ| Aspect | Valeur | StratĂ©gie |
|---|---|---|
| Debounce | 2 minutes | Protection CI/CD |
| Timeout webhook | 30 secondes | Limite Sanity |
| Retry automatique | 3 tentatives | Sanity native |
8.2. Limitations
Section titled â8.2. Limitationsâ- â Les webhooks ne sont pas rĂ©troactifs (pas de rejeu automatique en cas dâĂ©chec)
- â Le payload Sanity ne contient pas toutes les mĂ©tadonnĂ©es
- â Le debouncing de 2 minutes peut masquer des publications rapides
9. Débogage et troubleshooting
Section titled â9. DĂ©bogage et troubleshootingâ9.1. ProblĂšmes courants
Section titled â9.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| Webhook non reçu | URL incorrecte ou firewall | VĂ©rifier lâURL et les logs du Worker |
| âSignature invalideâ | Secret incorrect ou payload modifiĂ© | VĂ©rifier que le secret est identique |
| Build non déclenché | Filtre Sanity trop restrictif | Vérifier le filtre GROQ |
| Webhooks en cascade | Pas de debouncing cÎté Worker | Vérifier la configuration KV |
9.2. Logs et monitoring
Section titled â9.2. Logs et monitoringâCĂŽtĂ© Sanity :
- Sanity Studio â Settings â Webhooks â Delivery logs
CÎté Worker L3 :
- Cloudflare Worker Logs
9.3. Commandes de debug
Section titled â9.3. Commandes de debugâ# Test de validation de signature (avec payload factice)PAYLOAD='{"test": "data"}'TIMESTAMP=$(date +%s)SECRET="your-secret"SIGNATURE=$(echo -n "${TIMESTAMP}.${PAYLOAD}" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $2}')
curl -X POST "https://[worker-url]" \ -H "Content-Type: application/json" \ -H "x-sanity-signature: t=${TIMESTAMP},v1=${SIGNATURE}" \ -d "$PAYLOAD"10. Bonnes pratiques
Section titled â10. Bonnes pratiquesâ10.1. Configuration
Section titled â10.1. Configurationâ- â Utiliser un filtre GROQ pour limiter les webhooks
- â DĂ©sactiver âInclude draftsâ pour Ă©viter les webhooks inutiles
- â Utiliser un secret fort et unique par environnement
10.2. Workflow éditorial
Section titled â10.2. Workflow Ă©ditorialâ- â Publier les modifications par lots plutĂŽt quâune par une
- â VĂ©rifier que le build a bien Ă©tĂ© dĂ©clenchĂ© aprĂšs publication
- â Signaler immĂ©diatement tout Ă©chec de build
11. Ăvolutions et roadmap
Section titled â11. Ăvolutions et roadmapâ11.1. AmĂ©liorations planifiĂ©es
Section titled â11.1. AmĂ©liorations planifiĂ©esâ- [Ăvolution 1 : ex. Filtrage avancĂ© par type de document]
- [Ăvolution 2 : ex. Notification Slack/Teams en cas dâĂ©chec]
11.2. Limitations connues
Section titled â11.2. Limitations connuesâ- â Les webhooks ne sont pas rĂ©troactifs
- â Le payload Sanity ne contient pas toutes les mĂ©tadonnĂ©es
12. Ressources liées
Section titled â12. Ressources liĂ©esâ- Documentation Sanity : Webhooks
- Worker L3 :
/ObjectData/cloudflare-workers-objectData.md - DAT L1 : §4.9.3 - Alerting Webhook & Opérations
- DAT L2 : §7 - Pipeline de DĂ©ploiement et dâInvalidation
13. Historique des modifications
Section titled â13. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |