Aller au contenu principal

Edge Functions

Vue d'ensemble

Les Edge Functions sont des fonctions serverless exécutées sur Deno.

Base URL : https://xxx.supabase.co/functions/v1

Headers requis :

Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json

invite-participate

Invite des participants à un événement par email.

Endpoint

POST /functions/v1/invite-participate

Request

{
"productId": 123,
"emails": ["user1@example.com", "user2@example.com"],
"sendByEmail": true
}
ChampTypeRequisDescription
productIdnumberOuiID de l'événement
emailsstring[]OuiListe des emails
sendByEmailbooleanNonEnvoyer les invitations (défaut: true)

Response

Succès (200)

{
"success": true,
"invited": 2,
"details": [
{ "email": "user1@example.com", "status": "invited" },
{ "email": "user2@example.com", "status": "invited" }
]
}

Erreur (400)

{
"error": "Invalid request",
"message": "productId is required"
}

Exemple cURL

curl -X POST \
'https://xxx.supabase.co/functions/v1/invite-participate' \
-H 'Authorization: Bearer eyJ...' \
-H 'Content-Type: application/json' \
-d '{
"productId": 123,
"emails": ["test@example.com"],
"sendByEmail": true
}'

stripe

Crée une session de paiement Stripe Checkout.

Endpoint

POST /functions/v1/stripe

Request

{
"product_id": 123
}
ChampTypeRequisDescription
product_idnumberOuiID de l'événement à payer

Response

Succès (200)

{
"id": "cs_test_xxx",
"url": "https://checkout.stripe.com/c/pay/cs_test_xxx",
"payment_status": "unpaid",
"status": "open"
}

Erreur (400)

{
"error": "product_id is required"
}

Exemple cURL

curl -X POST \
'https://xxx.supabase.co/functions/v1/stripe' \
-H 'Authorization: Bearer eyJ...' \
-H 'Content-Type: application/json' \
-d '{"product_id": 123}'

Flux de Paiement


stripe-webhook

Reçoit les événements webhook de Stripe.

Endpoint

POST /functions/v1/stripe-webhook

Headers

stripe-signature: t=xxx,v1=xxx
Content-Type: application/json

Événements Traités

ÉvénementAction
checkout.session.completedMet à jour product.plan à "basic"

Payload (Stripe)

{
"id": "evt_xxx",
"type": "checkout.session.completed",
"data": {
"object": {
"id": "cs_xxx",
"payment_status": "paid",
"metadata": {
"product_id": "123"
}
}
}
}

Response

Succès (200)

{
"received": true
}

Configuration Webhook Stripe

  1. Aller dans Stripe Dashboard → Developers → Webhooks
  2. Ajouter un endpoint :
    • URL : https://xxx.supabase.co/functions/v1/stripe-webhook
    • Événements : checkout.session.completed
  3. Copier le Signing Secret

resend-invite-participate

Renvoie les invitations aux participants n'ayant pas confirmé.

Endpoint

POST /functions/v1/resend-invite-participate

Request

{
"productId": 123,
"emails": ["user@example.com"]
}

Response

{
"success": true,
"resent": 1
}

add-anonymous-message

Permet aux utilisateurs anonymes de soumettre des messages.

Endpoint

POST /functions/v1/add-anonymous-message

Request (FormData)

Content-Type: multipart/form-data

productId: 123
participantName: "Jean"
participantEmail: "jean@example.com"
messageType: "TEXT" | "VIDEO"
messageContent: "<p>Mon message</p>" | <file>

Response

Succès (201)

{
"success": true,
"itemId": "uuid-xxx"
}

Exemple JavaScript

const formData = new FormData();
formData.append('productId', '123');
formData.append('participantName', 'Jean');
formData.append('messageType', 'TEXT');
formData.append('messageContent', '<p>Mon message</p>');

const response = await fetch(
'https://xxx.supabase.co/functions/v1/add-anonymous-message',
{
method: 'POST',
body: formData
}
);

Gestion des Erreurs

Format d'Erreur Standard

{
"error": "Error type",
"message": "Detailed error message",
"code": "ERROR_CODE"
}

Codes d'Erreur Courants

CodeHTTPDescription
INVALID_REQUEST400Paramètres manquants ou invalides
UNAUTHORIZED401Token manquant ou invalide
FORBIDDEN403Accès non autorisé
NOT_FOUND404Ressource non trouvée
RATE_LIMITED429Trop de requêtes
INTERNAL_ERROR500Erreur serveur

Rate Limiting

Les Edge Functions ont des limites par défaut :

LimiteValeur
Requêtes par seconde100
Timeout60 secondes
Taille du body6 MB

Déploiement

Déployer une Function

cd back-dedicaces
npx supabase functions deploy invite-participate

Variables d'Environnement

Configurer dans le Dashboard Supabase :

# Project Settings → Edge Functions → Secrets
STRIPE_API_KEY=sk_live_xxx
STRIPE_WEBHOOK_SIGNING_SECRET=whsec_xxx
SITE_URL=https://app.momentscollectifs.fr