diff --git a/docs/HMR_IDNOT_STATE.md b/docs/HMR_IDNOT_STATE.md new file mode 100644 index 00000000..76337bbd --- /dev/null +++ b/docs/HMR_IDNOT_STATE.md @@ -0,0 +1,41 @@ +HMR + IdNot + dev3 via state (mise à jour: 2025-09-24) + +Vue d’ensemble + +- HMR (Hot Module Replacement) + - En local, Next.js sert le HMR (ex: port 3000) et recharge les modules sans redémarrage. + - Les appels API sont effectués en same-origin via le proxy Nginx/compose: le front cible `/api/...`, Nginx route vers dev3. Pas de CORS ni reconfig lors des reloads. + - En dev4/prod, pas de HMR: `next start` sert l’app buildée sous `/lecoffre/`. + +- Émission du state (dev3) + - Front → `POST /api/v1/idnot/state` (same-origin `/api`). Nginx (dev4) relaie vers `https://dev3.4nkweb.com/api/v1/idnot/state`. + - Body: `{ "next_url": "https://dev4.4nkweb.com/lecoffre/authorized-client" }`. + - Réponse: `{ "state": "" }`. CORS dynamique côté Nginx (dev3) autorise l’origine dev4. + +- Redirection IdNot avec state + - URL d’autorisation: + - base = `NEXT_PUBLIC_IDNOT_BASE_URL + NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT` + - `client_id = NEXT_PUBLIC_IDNOT_CLIENT_ID` + - `redirect_uri = NEXT_PUBLIC_IDNOT_REDIRECT_URI_FIXED` (stable) + - `scope = openid,profile`, `response_type = code` + - `state = ` (depuis l’API state dev3) + - IdNot renvoie `code` (et le `state` validé côté backend) vers dev3, qui enchaîne selon `next_url`. + +- Pourquoi ça marche bien avec HMR + - Le front n’appelle pas dev3 directement depuis le navigateur: toujours `/api` (reverse-proxy Nginx). + - Nginx masque les headers CORS upstream et réinjecte des headers valides dynamiquement (Origin dev4/local). + - Le `state` est demandé via `/api`, donc indépendant du HMR. + - Les `NEXT_PUBLIC_*` pilotent IdNot et `next_url`; endpoints de debug: `/api/env` et `/env`. + +- Canonicalisation URL + - Canonical sous-sous-chemin: `/lecoffre/`. + - Next: `basePath: '/lecoffre'`, `assetPrefix: '/lecoffre'`, `trailingSlash: true`. + - Nginx (dev4): rediriger `/lecoffre` → `/lecoffre/`; proxy `^~ /lecoffre/` vers `http://localhost:3004`. + +- Validation (script `scripts/deploy_front_ext.sh`) + - Vérifie: variables `NEXT_PUBLIC_*` (conteneur vs `.env.master`). + - CORS dev3: OPTIONS 204 + en-têtes (A-C-A-Origin = dev4). + - `POST /api/v1/idnot/state`: 200 + `state` présent. + - Checks publics: `/lecoffre` = 301 → `/lecoffre/`, `/lecoffre/` = 200. + +