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
}
| Champ | Type | Requis | Description |
|---|---|---|---|
productId | number | Oui | ID de l'événement |
emails | string[] | Oui | Liste des emails |
sendByEmail | boolean | Non | Envoyer 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
}
| Champ | Type | Requis | Description |
|---|---|---|---|
product_id | number | Oui | ID 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énement | Action |
|---|---|
checkout.session.completed | Met à 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
- Aller dans Stripe Dashboard → Developers → Webhooks
- Ajouter un endpoint :
- URL :
https://xxx.supabase.co/functions/v1/stripe-webhook - Événements :
checkout.session.completed
- URL :
- 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
| Code | HTTP | Description |
|---|---|---|
INVALID_REQUEST | 400 | Paramètres manquants ou invalides |
UNAUTHORIZED | 401 | Token manquant ou invalide |
FORBIDDEN | 403 | Accès non autorisé |
NOT_FOUND | 404 | Ressource non trouvée |
RATE_LIMITED | 429 | Trop de requêtes |
INTERNAL_ERROR | 500 | Erreur serveur |
Rate Limiting
Les Edge Functions ont des limites par défaut :
| Limite | Valeur |
|---|---|
| Requêtes par seconde | 100 |
| Timeout | 60 secondes |
| Taille du body | 6 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