docs: add HMR + IdNot + dev3 via state overview (2025-09-24)

This commit is contained in:
Debian Dev4 2025-09-24 17:51:58 +00:00
parent 20877250e2
commit 09fe6b89ff

41
docs/HMR_IDNOT_STATE.md Normal file
View File

@ -0,0 +1,41 @@
HMR + IdNot + dev3 via state (mise à jour: 2025-09-24)
Vue densemble
- 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 lapp 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": "<state_signé>" }`. CORS dynamique côté Nginx (dev3) autorise lorigine dev4.
- Redirection IdNot avec state
- URL dautorisation:
- 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 = <state_signé>` (depuis lAPI 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 nappelle 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.