Objectif
update-feed.Constat confirmé dans le code
update-feed accepte bien 3 accès: x-cron-secret, service_role, ou super-user.supabase/functions/_shared/security.ts: validateCronSecret() ne lit que Deno.env.get('CRON_SECRET').public.app_secrets avec la clé cron_secret.CRON_SECRET n’est pas injecté dans le runtime Edge Functions, ton header x-cron-secret sera refusé même si la valeur est correcte côté base.update-feed attend feedId et url, pas name.Plan d’implémentation
Unifier la source du cron secret
validateCronSecret pour vérifier d’abord CRON_SECRET dans l’environnement.public.app_secrets via un client service_role.Mettre à jour les fonctions impactées
validateCronSecret dans :
supabase/functions/update-feed/index.tssupabase/functions/fetch-rss/index.tssupabase/functions/purge-articles/index.tsAméliorer le diagnostic self-hosted
Ajouter une couverture de test
CRON_SECRET présent dans l’environnementapp_secretsanon + bon x-cron-secret = autoriséCorriger la documentation de test
Documenter la vraie payload de update-feed :
curl -L -X POST 'http://192.168.1.244:8000/functions/v1/update-feed' \
-H 'Authorization: Bearer <ANON_OU_SERVICE_ROLE>' \
-H 'x-cron-secret: <CRON_SECRET>' \
-H 'Content-Type: application/json' \
--data '{"feedId":"<FEED_ID>","url":"<FEED_URL>"}'
Préciser que sans fallback, il faut absolument définir CRON_SECRET dans le runtime Edge de la VM.
Détails techniques
supabase/functions/_shared/security.tssupabase/functions/update-feed/index.tssupabase/functions/fetch-rss/index.tssupabase/functions/purge-articles/index.tsCRON_SECRETpublic.app_secretsx-cron-secret fonctionneront sur la VM même si le secret n’est stocké qu’en basefeedId et url, pas l’authentification