SPEC — Intégration Starlight Documentation & Worker Cloudflare d'Authentification (Public / Privé)
Cycle : DOC → SPEC → CODE → TEST → INTÉG
Composant : Composant 4 (Documentation Starlight & Microservice Auth L3)
Destination Spec :docs/PM/phase0-starlight-docs-auth.spec.md
1. Périmètre et Objectifs
Section titled “1. Périmètre et Objectifs”-
Montage des sources de documentation :
- Brancher les dossiers racine
../../docset../../GettingStarteddans la couche de contenu Astro (src/content.config.ts) à l’aide de chargeursglob(). - Exposer l’arborescence dans l’interface Starlight.
- Brancher les dossiers racine
-
Politique de Visibilité & Sécurité (Public vs Privé) :
- Définir le schéma frontmatter Starlight avec
visibility: z.enum(['public', 'private']).default('private'). - Public : Consultable librement sans authentification (ex: aperçus, guides généraux).
- Privé (par défaut) : Restreint aux seuls utilisateurs connectés ayant une session valide.
- Définir le schéma frontmatter Starlight avec
-
Microservice d’Authentification L3 (
services/auth-handler) :- Créer le Worker Cloudflare
services/auth-handler(amn-auth-handler). - Endpoints :
POST /api/auth/login,POST /api/auth/logout,GET /api/auth/verify,GET /health. - Bindings :
AUTH_SESSIONS_KV(KV Namespace),AUTH_SECRET(Secret). - Cookies :
auth_sessionavec attributsHttpOnly; Secure; SameSite=Lax. - Environnements Cloudflare :
devetprod.
- Créer le Worker Cloudflare
-
Middleware SSR Astro (
apps/web/src/middleware.ts) :- Intercepter les requêtes ciblant
/docs/*et/getting-started/*. - Consulter la visibilité du document demandé.
- Pour les documents
private: vérifier la validité de la session via le Service BindingAUTH_HANDLER(enprod) ou HTTP fetch direct vershttp://localhost:8790(endev). - Rediriger les requêtes non authentifiées vers
/login?redirectTo=....
- Intercepter les requêtes ciblant
2. Spécification détaillée des Fichiers à Modifier & Créer
Section titled “2. Spécification détaillée des Fichiers à Modifier & Créer”2.1. Microservice Backend L3 (services/auth-handler/)
Section titled “2.1. Microservice Backend L3 (services/auth-handler/)”-
services/auth-handler/package.json:- Déclarer le package
@amn/auth-handleravec les scriptsbuild,dev,typecheck,deploy:dev,deploy:prod. - Dépendances :
zod,@cloudflare/workers-types.
- Déclarer le package
-
services/auth-handler/wrangler.toml:name = "amn-auth-handler"main = "src/index.ts"compatibility_date = "2025-07-18"compatibility_flags = ["nodejs_compat"][vars]ENVIRONMENT = "dev"[[kv_namespaces]]binding = "AUTH_SESSIONS_KV"id = "auth-sessions-kv-id"[env.dev]name = "amn-auth-handler-dev"vars = { ENVIRONMENT = "dev" }[env.prod]name = "amn-auth-handler-prod"vars = { ENVIRONMENT = "prod" } -
services/auth-handler/src/index.ts:- Logique de validation Zod des identifiants (ex:
email,password). - Génération du token de session
crypto.randomUUID(), stockage dansAUTH_SESSIONS_KVavec TTL (24h). - Invalidation lors du logout (
AUTH_SESSIONS_KV.delete()). - Verification rapide de session pour
apps/web.
- Logique de validation Zod des identifiants (ex:
2.2. Couche Présentation L2 (apps/web/)
Section titled “2.2. Couche Présentation L2 (apps/web/)”-
apps/web/astro.config.mjs&src/content.config.ts:- Étendre Starlight et
content.config.tspour charger la collectiondocsdepuis../../docset../../GettingStarted. - Intégrer le schéma
visibility: z.enum(['public', 'private']).default('private').
- Étendre Starlight et
-
apps/web/src/middleware.ts:- Détecter si l’URL requêtée appartient à la documentation.
- Déterminer la visibilité de la page.
- En cas de page
private, valider le cookieauth_sessionavec le workerAUTH_HANDLER(Service Binding en prod, HTTP localhost en dev). - Si valide : alimenter
context.locals.user. - Si invalide : rediriger vers
/login?redirectTo=....
-
apps/web/src/pages/login.astro:- Page simple de connexion avec formulaire (email / password) qui POST vers
/api/auth/loginpour établir la session et rediriger l’utilisateur vers le document initialement demandé.
- Page simple de connexion avec formulaire (email / password) qui POST vers
-
Taskfile.yaml:- Ajouter la tâche
dev:auth(cd services/auth-handler && pnpm dev --port 8790). - Mettre à jour la tâche
devpour démarrer conjointementapps/web,sanity studioetservices/auth-handler.
- Ajouter la tâche
3. Matrice de Test & Critères de Validation (TEST)
Section titled “3. Matrice de Test & Critères de Validation (TEST)”-
Test d’accès aux documents publics :
- Un utilisateur non connecté peut accéder directement aux documents marqués
visibility: 'public'(HTTP 200 OK).
- Un utilisateur non connecté peut accéder directement aux documents marqués
-
Test d’accès restreint aux documents privés :
- Un utilisateur non connecté tentant d’accéder à un document privé (ou par défaut sans tag public) est redirigé vers
/login?redirectTo=....
- Un utilisateur non connecté tentant d’accéder à un document privé (ou par défaut sans tag public) est redirigé vers
-
Test d’authentification & session :
- Soumission des identifiants sur
/login-> création du cookieauth_sessionet session enregistrée dans KV. - Redirection automatique vers le document privé initialement demandé. Accessibilité confirmée (HTTP 200 OK).
- Soumission des identifiants sur
-
Test de déconnexion :
- Appel
/api/auth/logout-> suppression du cookie et d’enregistrement KV -> tentative ultérieure d’accès au document privé redirige à nouveau vers/login.
- Appel
-
Validation Typecheck & Build :
npx pnpm typecheckretourne 0 erreur.npx pnpm --filter ./apps/web buildet build du serviceauth-handlers’exécutent avec succès.
4. Documentation des Instructions de Test (INTÉG)
Section titled “4. Documentation des Instructions de Test (INTÉG)”Rédiger le guide de test pas-à-pas dans GettingStarted/13-phase0-starlight-docs-auth-test.md.