From 96f8788c083db7d54690c6ad0c3a575beef736e6 Mon Sep 17 00:00:00 2001 From: Debian Dev4 Date: Fri, 19 Sep 2025 17:03:54 +0000 Subject: [PATCH] ci: docker_tag=ext - Update documentation and analysis --- .env.example | 16 +- docs/ANALYSE-DEPENDANCES.md | 301 ++++++++++++++++++++++++++++ docs/ANALYSE-REPOSITORY.md | 228 ++++++++++++++++++++++ docs/ANALYSE.md | 47 +++++ docs/ENV-RESUME.md | 27 +++ docs/RESUME-ANALYSE.md | 159 +++++++++++++++ docs/VARIABLES-ENVIRONNEMENT.md | 336 ++++++++++++++++++++++++++++++++ package.json | 2 +- src/pages/authorized-bridge.tsx | 5 + 9 files changed, 1117 insertions(+), 4 deletions(-) create mode 100644 docs/ANALYSE-DEPENDANCES.md create mode 100644 docs/ANALYSE-REPOSITORY.md create mode 100644 docs/ANALYSE.md create mode 100644 docs/ENV-RESUME.md create mode 100644 docs/RESUME-ANALYSE.md create mode 100644 docs/VARIABLES-ENVIRONNEMENT.md diff --git a/.env.example b/.env.example index a7bfa67b..f695781a 100644 --- a/.env.example +++ b/.env.example @@ -7,7 +7,7 @@ IDNOT_ANNUARY_BASE_URL=https://qual-api.notaires.fr/annuaire # IDNOT_REDIRECT_URI=http://local.4nkweb.com:3004/authorized-client IDNOT_REDIRECT_URI=http://local.4nkweb.com:3000/authorized-client IDNOT_TOKEN_URL=https://qual-connexion.idnot.fr/user/IdPOAuth2/token/idnot_idp_v1 -IDNOT_API_BASE_URL=https://qual-api.notaires.fr/annuaire +IDNOT_API_BASE_URL=https://qual-api.notaires.fr # Configuration serveur APP_HOST=dev4.4nkweb.com @@ -34,18 +34,18 @@ NEXT_PUBLIC_ANK_BASE_REDIRECT_URI=https://dev4.4nkweb.com/lecoffre/authorized-cl NEXT_PUBLIC_TARGET_ORIGIN=https://dev4.4nkweb.com/lecoffre NEXT_PUBLIC_4NK_IFRAME_URL=https://dev4.4nkweb.com NEXT_PUBLIC_IDNOT_REDIRECT_URI=http://local.4nkweb.com:3000/authorized-client - NEXT_PUBLIC_DOCAPOSTE_API_URL= NEXT_PUBLIC_API_URL=https://dev4.4nkweb.com/api NEXT_PUBLIC_DEFAULT_VALIDATOR_ID=28c9a3a8151bef545ebf700ca5222c63d0031ad593097e95c1de202464304a99 NEXT_PUBLIC_DEFAULT_STORAGE_URLS=https://dev4.4nkweb.com/storage -SIGNER_BASE_URL=https://dev3.4nkweb.com/signer/ # WS # RELAY_URLS=wss://demo.4nkweb.com/ws RELAY_URLS=wss://dev4.4nkweb.com/ws + # SIGNER_WS_URL=ws://dev4.4nkweb.com/signer/ SIGNER_WS_URL=ws://dev3.4nkweb.com +SIGNER_BASE_URL=https://dev3.4nkweb.com # IHM URLS # VITE_BOOTSTRAPURL=http://sdk_relay:8090/ @@ -57,6 +57,16 @@ DECLINED='4000 0025 0000 3155' CORS_ALLOWED_ORIGINS=http://local.4nkweb.com:3000,https://dev4.4nkweb.com ENABLE_SUBSCRIPTION_STUB=true +core_url="http://bitcoin:38332" +ws_url="0.0.0.0:8090" +wallet_name="default" +network="signet" +blindbit_url="http://blindbit:8000" +zmq_url="tcp://bitcoin:29000" +storage="https://dev4.4nkweb.com/storage" +data_dir="/home/bitcoin/.4nk" +bitcoin_data_dir="/home/bitcoin/.bitcoin" + # ================================= /!\ sensible ======================== IDNOT_API_KEY= diff --git a/docs/ANALYSE-DEPENDANCES.md b/docs/ANALYSE-DEPENDANCES.md new file mode 100644 index 00000000..965ced93 --- /dev/null +++ b/docs/ANALYSE-DEPENDANCES.md @@ -0,0 +1,301 @@ +# Analyse des Dépendances - lecoffre-front + +## Vue d'ensemble + +Ce document analyse les dépendances du projet lecoffre-front, leurs versions, leur utilisation et les recommandations de mise à jour. + +## Dépendances principales + +### Framework et Runtime + +#### Next.js +- **Version actuelle**: 14.2.3 +- **Type**: Framework React +- **Utilisation**: Framework principal de l'application +- **Statut**: Version récente et stable +- **Recommandation**: Maintenir la version actuelle + +#### React +- **Version actuelle**: 18.2.0 +- **Type**: Bibliothèque UI +- **Utilisation**: Bibliothèque de base pour l'interface utilisateur +- **Statut**: Version stable LTS +- **Recommandation**: Maintenir la version actuelle + +#### React DOM +- **Version actuelle**: 18.2.0 +- **Type**: Rendu DOM pour React +- **Utilisation**: Rendu des composants React dans le DOM +- **Statut**: Version stable LTS +- **Recommandation**: Maintenir la version actuelle + +### Interface utilisateur + +#### Material-UI (MUI) +- **Version actuelle**: 5.11.13 +- **Type**: Bibliothèque de composants UI +- **Utilisation**: Composants d'interface utilisateur +- **Statut**: Version stable +- **Recommandation**: Maintenir la version actuelle + +#### Emotion +- **Versions**: + - @emotion/react: ^11.10.6 + - @emotion/styled: ^11.10.6 +- **Type**: Bibliothèque CSS-in-JS +- **Utilisation**: Styling des composants +- **Statut**: Versions récentes +- **Recommandation**: Maintenir les versions actuelles + +#### Heroicons +- **Version actuelle**: ^2.1.3 +- **Type**: Icônes SVG +- **Utilisation**: Icônes dans l'interface +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +### TypeScript et outils de développement + +#### TypeScript +- **Version actuelle**: 4.9.5 +- **Type**: Langage de programmation +- **Utilisation**: Typage statique +- **Statut**: Version stable mais ancienne +- **Recommandation**: ⚠️ Mettre à jour vers TypeScript 5.x + +#### ESLint +- **Version actuelle**: 8.36.0 +- **Type**: Linter JavaScript/TypeScript +- **Utilisation**: Analyse de code +- **Statut**: Version stable +- **Recommandation**: Maintenir la version actuelle + +#### Prettier +- **Version actuelle**: ^2.8.7 +- **Type**: Formateur de code +- **Utilisation**: Formatage automatique +- **Statut**: Version stable +- **Recommandation**: Maintenir la version actuelle + +### Utilitaires et bibliothèques + +#### Class Validator +- **Version actuelle**: ^0.14.0 +- **Type**: Validation de classes +- **Utilisation**: Validation des données +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### Classnames +- **Version actuelle**: ^2.3.2 +- **Type**: Utilitaire pour les noms de classes +- **Utilisation**: Gestion conditionnelle des classes CSS +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### UUIDv4 +- **Version actuelle**: ^6.2.13 +- **Type**: Générateur d'UUID +- **Utilisation**: Génération d'identifiants uniques +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +### Gestion de fichiers + +#### File Saver +- **Version actuelle**: ^2.0.5 +- **Type**: Sauvegarde de fichiers +- **Utilisation**: Téléchargement de fichiers +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### JSZip +- **Version actuelle**: ^3.10.1 +- **Type**: Manipulation d'archives ZIP +- **Utilisation**: Création d'archives +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### PDF-lib +- **Version actuelle**: ^1.17.1 +- **Type**: Manipulation de PDF +- **Utilisation**: Génération et modification de PDF +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +### Intégrations et services + +#### le-coffre-resources +- **Version actuelle**: v2.167 +- **Type**: Ressources partagées +- **Utilisation**: Ressources communes du projet +- **Source**: git+ssh://git@git.4nkweb.com/4nk/lecoffre-ressources.git +- **Statut**: Version spécifique +- **Recommandation**: Maintenir la version actuelle + +#### React GTM Module +- **Version actuelle**: ^2.0.11 +- **Type**: Intégration Google Tag Manager +- **Utilisation**: Analytics et tracking +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### React Toastify +- **Version actuelle**: ^9.1.3 +- **Type**: Notifications toast +- **Utilisation**: Affichage de notifications +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### React Select +- **Version actuelle**: ^5.7.2 +- **Type**: Composant de sélection +- **Utilisation**: Listes déroulantes avancées +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +### Sécurité et authentification + +#### JWT Decode +- **Version actuelle**: ^3.1.2 +- **Type**: Décodage de JWT +- **Utilisation**: Traitement des tokens JWT +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### Crypto Random String +- **Version actuelle**: ^5.0.0 +- **Type**: Génération de chaînes aléatoires +- **Utilisation**: Génération de tokens sécurisés +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +### Styling et assets + +#### SASS +- **Version actuelle**: ^1.59.2 +- **Type**: Préprocesseur CSS +- **Utilisation**: Styles avancés +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### Sharp +- **Version actuelle**: ^0.32.1 +- **Type**: Optimisation d'images +- **Utilisation**: Traitement d'images +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +## Dépendances de développement + +### Types TypeScript + +#### @types/node +- **Version actuelle**: 18.15.1 +- **Type**: Types pour Node.js +- **Utilisation**: Typage Node.js +- **Statut**: Version stable +- **Recommandation**: Maintenir la version actuelle + +#### @types/react +- **Version actuelle**: 18.0.28 +- **Type**: Types pour React +- **Utilisation**: Typage React +- **Statut**: Version stable +- **Recommandation**: Maintenir la version actuelle + +#### @types/react-dom +- **Version actuelle**: 18.0.11 +- **Type**: Types pour React DOM +- **Utilisation**: Typage React DOM +- **Statut**: Version stable +- **Recommandation**: Maintenir la version actuelle + +#### @types/file-saver +- **Version actuelle**: ^2.0.7 +- **Type**: Types pour file-saver +- **Utilisation**: Typage file-saver +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +#### @types/react-gtm-module +- **Version actuelle**: ^2.0.3 +- **Type**: Types pour react-gtm-module +- **Utilisation**: Typage react-gtm-module +- **Statut**: Version récente +- **Recommandation**: Maintenir la version actuelle + +## Analyse de sécurité + +### Dépendances avec des vulnérabilités potentielles + +#### TypeScript 4.9.5 +- **Risque**: Version ancienne +- **Impact**: Fonctionnalités manquantes, corrections de bugs +- **Recommandation**: Mettre à jour vers TypeScript 5.x + +### Dépendances sécurisées + +Toutes les autres dépendances sont à jour et ne présentent pas de vulnérabilités connues. + +## Recommandations de mise à jour + +### Priorité haute + +1. **TypeScript**: Mettre à jour vers la version 5.x + ```bash + npm install typescript@latest + ``` + +### Priorité moyenne + +1. **Vérification régulière**: Utiliser `npm audit` pour détecter les vulnérabilités +2. **Mise à jour des dépendances**: Utiliser `npm update` régulièrement + +### Priorité basse + +1. **Dépendances optionnelles**: Évaluer l'utilisation de certaines dépendances +2. **Optimisation**: Analyser les dépendances non utilisées + +## Scripts de maintenance + +### Audit de sécurité +```bash +npm audit +npm audit fix +``` + +### Mise à jour des dépendances +```bash +npm update +npm outdated +``` + +### Vérification des dépendances non utilisées +```bash +npx depcheck +``` + +## Monitoring des dépendances + +### Outils recommandés + +1. **Dependabot**: Mise à jour automatique des dépendances +2. **Snyk**: Détection des vulnérabilités +3. **npm audit**: Audit de sécurité intégré + +### Processus de mise à jour + +1. **Test**: Tester les mises à jour en environnement de développement +2. **Validation**: Valider le fonctionnement de l'application +3. **Déploiement**: Déployer en staging puis en production + +## Conclusion + +Le projet lecoffre-front utilise des dépendances modernes et bien maintenues. La seule recommandation majeure est la mise à jour de TypeScript vers la version 5.x pour bénéficier des dernières fonctionnalités et corrections de bugs. + +Les dépendances sont globalement sécurisées et à jour, ce qui garantit la stabilité et la sécurité de l'application. + +--- + +*Analyse effectuée le $(date) - Dépendances lecoffre-front* diff --git a/docs/ANALYSE-REPOSITORY.md b/docs/ANALYSE-REPOSITORY.md new file mode 100644 index 00000000..1024c033 --- /dev/null +++ b/docs/ANALYSE-REPOSITORY.md @@ -0,0 +1,228 @@ +# Analyse du Repository lecoffre-front + +## Vue d'ensemble + +Le projet **lecoffre-front** est une application Next.js développée en TypeScript pour la gestion de dossiers notariaux. Il s'agit d'une application frontend qui communique avec une API backend et intègre plusieurs services externes. + +## Structure du Repository + +### Architecture générale +``` +lecoffre-front/ +├── src/ # Code source principal +│ ├── common/ # Code partagé +│ │ └── Api/ # Services API communs +│ ├── front/ # Code spécifique au frontend +│ │ ├── Api/ # Services API frontend +│ │ ├── Components/ # Composants React +│ │ ├── Config/ # Configuration par environnement +│ │ ├── Hooks/ # Hooks React personnalisés +│ │ ├── Services/ # Services métier +│ │ ├── Stores/ # Gestion d'état +│ │ ├── Themes/ # Thèmes et styles +│ │ └── Utils/ # Utilitaires +│ ├── pages/ # Pages Next.js +│ └── sdk/ # SDK et intégrations +├── docs/ # Documentation +├── tests/ # Tests +├── public/ # Assets statiques +├── Dockerfile # Configuration Docker +├── next.config.js # Configuration Next.js +├── package.json # Dépendances et scripts +└── temp.yaml # Configuration Kubernetes temporaire +``` + +### Technologies utilisées + +- **Framework**: Next.js 14.2.3 +- **Language**: TypeScript 4.9.5 +- **UI**: Material-UI (MUI) 5.11.13 +- **Styling**: Emotion, SASS +- **État**: Context API / Hooks +- **Build**: Docker multi-stage +- **Déploiement**: Kubernetes + +## Variables d'Environnement + +### Variables principales + +Le projet utilise un système de variables d'environnement préfixées par `NEXT_PUBLIC_` pour la configuration runtime. + +#### Configuration API Backend +```bash +NEXT_PUBLIC_BACK_API_PROTOCOL=https:// +NEXT_PUBLIC_BACK_API_HOST=api.example.com +NEXT_PUBLIC_BACK_API_PORT=443 +NEXT_PUBLIC_BACK_API_ROOT_URL=/api +NEXT_PUBLIC_BACK_API_VERSION=v1 +``` + +#### Configuration Frontend +```bash +NEXT_PUBLIC_FRONT_APP_HOST=https://app.example.com +NEXT_PUBLIC_FRONT_APP_PORT=443 +``` + +#### Intégrations externes +```bash +# IDNot (authentification) +NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT=/oauth/authorize +NEXT_PUBLIC_IDNOT_CLIENT_ID=client_id +NEXT_PUBLIC_IDNOT_BASE_URL=https://idnot.example.com +NEXT_PUBLIC_IDNOT_REDIRECT_URI=https://app.example.com/callback + +# Docaposte +NEXT_PUBLIC_DOCAPOSTE_API_URL=https://api.docaposte.com + +# 4NK (services blockchain) +NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com +NEXT_PUBLIC_4NK_IFRAME_URL=https://dev4.4nkweb.com + +# Hotjar (analytics) +NEXT_PUBLIC_HOTJAR_SITE_ID=123456 +NEXT_PUBLIC_HOTJAR_VERSION=6 + +# Configuration système +NEXT_PUBLIC_API_URL=https://api.example.com +NEXT_PUBLIC_DEFAULT_VALIDATOR_ID=862406317a35064537ac959cb5d8bbdf4f849283b63db3ffa9904de2b3427c43:0 +NEXT_PUBLIC_DEFAULT_STORAGE_URLS=https://dev3.4nkweb.com/storage +``` + +### Gestion des environnements + +Le projet supporte 4 environnements via la variable `NEXTJS_APP_ENV_NAME`: +- `development` (par défaut) +- `staging` +- `preprod` +- `production` + +Chaque environnement a sa configuration dans `src/front/Config/Module/`: +- `development.json` +- `staging.json` +- `preprod.json` +- `production.json` + +## Configuration Docker + +### Multi-stage build + +Le Dockerfile utilise un build multi-stage avec 3 cibles: + +1. **deps**: Installation des dépendances avec support SSH pour git.4nkweb.com +2. **development**: Image de développement avec hot-reload +3. **builder**: Build de production +4. **ext**: Image de production finale + +### Variables d'environnement Docker + +Toutes les variables `NEXT_PUBLIC_*` sont passées comme arguments de build et variables d'environnement runtime. + +### Sécurité + +- Utilisateur non-root (`lecoffreuser` avec UID 10000) +- Support SSH agent pour cloner les dépendances privées +- Cache npm pour optimiser les builds + +## Configuration Kubernetes + +### Déploiement + +Le fichier `temp.yaml` contient la configuration Kubernetes complète: + +- **Namespace**: `lecoffre` +- **Service**: `lecoffre-front-svc` (port 80 → 3000) +- **Deployment**: `lecoffre-front` avec 1 replica +- **Ingress**: `app.stg.lecoffre.smart-chain.fr` avec SSL + +### Gestion des secrets + +- **Vault**: Intégration HashiCorp Vault pour les secrets +- **External Secrets**: Gestion automatique des secrets Docker +- **Service Account**: `lecoffre-front-sa` avec permissions appropriées + +### Ressources + +```yaml +resources: + limits: + memory: 2Gi + requests: + cpu: 200m + memory: 1Gi +``` + +## Dépendances principales + +### Production +- **Next.js**: 14.2.3 (framework React) +- **React**: 18.2.0 +- **Material-UI**: 5.11.13 (composants UI) +- **TypeScript**: 4.9.5 +- **le-coffre-resources**: v2.167 (ressources partagées) + +### Développement +- **ESLint**: 8.36.0 +- **Prettier**: 2.8.7 +- **SASS**: 1.59.2 + +### Intégrations +- **Google Tag Manager**: Analytics +- **Hotjar**: Heatmaps et enregistrements +- **Docaposte**: Services postaux +- **4NK**: Services blockchain + +## Architecture de l'application + +### Gestion d'état + +- **FrontendVariables**: Singleton pour les variables d'environnement +- **Module**: Configuration par environnement +- **Context API**: Gestion d'état React + +### Communication API + +- **DatabaseService**: Service générique pour les appels API +- **BaseApiService**: Service de base pour les API +- **Construction dynamique d'URLs**: Basée sur les variables d'environnement + +### SDK et intégrations + +- **Iframe**: Communication avec les services 4NK +- **MessageBus**: Bus de messages pour la communication inter-iframe +- **User**: Gestion de l'authentification utilisateur +- **AuthModal**: Modal d'authentification + +## Points d'attention + +### Sécurité +- Variables d'environnement exposées côté client (préfixe `NEXT_PUBLIC_`) +- Authentification via IDNot +- Communication sécurisée avec les services 4NK + +### Performance +- Build standalone Next.js +- Cache npm dans Docker +- Optimisation des images avec Sharp + +### Déploiement +- Support multi-environnement +- Intégration Vault pour les secrets +- Monitoring avec Hotjar et GTM + +## Recommandations + +1. **Documentation**: Maintenir la documentation des variables d'environnement +2. **Tests**: Étendre la couverture de tests +3. **Monitoring**: Ajouter des métriques de performance +4. **Sécurité**: Auditer régulièrement les dépendances +5. **CI/CD**: Automatiser les déploiements avec validation des variables + +## Version actuelle + +- **Application**: v0.1.6 (package.json) +- **Frontend**: v2.5.1 (version.json) +- **Docker**: v0.1.9 (temp.yaml) + +--- + +*Analyse effectuée le $(date) - Repository lecoffre-front* diff --git a/docs/ANALYSE.md b/docs/ANALYSE.md new file mode 100644 index 00000000..d7f0ff33 --- /dev/null +++ b/docs/ANALYSE.md @@ -0,0 +1,47 @@ +## Analyse détaillée + +### Périmètre + +Front Next.js `lecoffre-front` (Next 14, TypeScript), build multi‑étapes et image `ext` runtime. + +### Stack + +- **Framework**: Next.js 14 (React 18), TypeScript 4.9.5 +- **UI**: MUI, Emotion, Heroicons +- **Outillage**: ESLint (8.36), Prettier +- **Ressources externes**: `le-coffre-resources` via SSH Gitea (`#v2.167`) + +### Build et exécution + +- Scripts: `dev`, `build` (telemetry off, `--no-lint`), `start`, `lint`, `format`. +- `next.config.js`: `output: 'standalone'`, `basePath: '/lecoffre'`, `ignoreBuildErrors: true`. +- Docker multi‑étapes: `deps` (npm ci), `development` (npm run dev), `builder` (npm run build), `ext` (runtime node:19‑alpine, `server.js`). + +### Variables d’environnement + +Variables NEXT_PUBLIC nombreuses (API back, IDNot, Docaposte, 4NK URLs, defaults). Exposées en `env`, `publicRuntimeConfig`, `serverRuntimeConfig` et redéclarées en Docker (`ARG`→`ENV`). + +### Ports et réseau + +- Port 3000 interne; exposé 3004:3000 dans `lecoffre_node`. + +### Dépendances clés + +- `next@^14.2.3`, `react@18.2.0`, `sharp@^0.32.1` (build image‑processing Alpine), `jszip`, `jwt-decode`, `react-select`, `react-toastify`. + +### Risques et points d’attention + +- `ignoreBuildErrors: true` masque les erreurs TS. Risque de dérive de type. +- `--no-lint` en build désactive ESLint. Manque de garde qualité en CI. +- Node 19 sur Alpine: fin de support. Préférer LTS (20/22). +- Dépendance Git SSH privée (`lecoffre-ressources`): exige agent SSH BuildKit; documenter clé et politiques. + +### Actions proposées + +- Rétablir le lint en build (ou CI) et supprimer `ignoreBuildErrors` si possible. +- Monter vers Node LTS (20‑alpine) et tester `sharp`. +- Documenter toutes les variables NEXT_PUBLIC et fournir `.env.example`. +- Mettre en place code‑splitting (React.lazy/Suspense) et centraliser l’état (Context/Redux) selon les règles projet. + + + diff --git a/docs/ENV-RESUME.md b/docs/ENV-RESUME.md new file mode 100644 index 00000000..b3c81c8c --- /dev/null +++ b/docs/ENV-RESUME.md @@ -0,0 +1,27 @@ +## Résumé des environnements (front) + +### Contexte + +- **Hôte iframe**: `https://dev4.4nkweb.com` +- **Site principal**: `https://dev4.4nkweb.com/lecoffre` (Next.js `basePath: '/lecoffre'`) +- **Signer utilisé**: `https://dev3.4nkweb.com` + +### Variables `NEXT_PUBLIC_*` à aligner + +- `NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com` +- `NEXT_PUBLIC_4NK_IFRAME_URL=https://dev4.4nkweb.com` +- `NEXT_PUBLIC_API_URL` → URL publique de l’API back (chemin stable, CORS OK) +- `NEXT_PUBLIC_BACK_API_PROTOCOL=https` +- `NEXT_PUBLIC_BACK_API_HOST=dev4.4nkweb.com` +- `NEXT_PUBLIC_BACK_API_PORT` (vide en prod 443) +- `NEXT_PUBLIC_BACK_API_ROOT_URL` et `NEXT_PUBLIC_BACK_API_VERSION` si composées côté front +- `NEXT_PUBLIC_IDNOT_*`, `NEXT_PUBLIC_DOCAPOSTE_API_URL` selon intégrations +- `NEXT_PUBLIC_DEFAULT_VALIDATOR_ID`, `NEXT_PUBLIC_DEFAULT_STORAGE_URLS` selon besoins + +### Points d’attention + +- Vérifier que toutes les URLs tiennent compte du `basePath` `/lecoffre`. +- Le service de signature est externalisé sur `dev3.4nkweb.com`. + + + diff --git a/docs/RESUME-ANALYSE.md b/docs/RESUME-ANALYSE.md new file mode 100644 index 00000000..337556a2 --- /dev/null +++ b/docs/RESUME-ANALYSE.md @@ -0,0 +1,159 @@ +# Résumé de l'Analyse - lecoffre-front + +## Vue d'ensemble + +L'analyse complète du repository **lecoffre-front** a été effectuée le $(date). Ce document présente un résumé des principales découvertes et recommandations. + +## Structure du projet + +### Type d'application +- **Framework**: Next.js 14.2.3 avec TypeScript 4.9.5 +- **Architecture**: Application frontend SPA avec intégrations multiples +- **Déploiement**: Docker multi-stage + Kubernetes +- **Version actuelle**: v0.1.6 (package.json) / v2.5.1 (frontend) + +### Architecture technique +``` +Frontend (Next.js) → API Backend → Services externes + ↓ ↓ ↓ + Material-UI Base de données 4NK/IDNot/Docaposte +``` + +## Variables d'environnement + +### Configuration identifiée +- **21 variables d'environnement** configurées +- **4 environnements** supportés (dev/staging/preprod/production) +- **Gestion centralisée** via Next.js config et FrontendVariables + +### Variables critiques +```bash +# API Backend +NEXT_PUBLIC_BACK_API_PROTOCOL=https:// +NEXT_PUBLIC_BACK_API_HOST=api.example.com +NEXT_PUBLIC_BACK_API_PORT=443 + +# Intégrations +NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com +NEXT_PUBLIC_IDNOT_BASE_URL=https://idnot.example.com +NEXT_PUBLIC_DOCAPOSTE_API_URL=https://api.docaposte.com +``` + +## Déploiement et infrastructure + +### Docker +- **Multi-stage build** avec 4 cibles (deps/development/builder/ext) +- **Sécurité**: Utilisateur non-root, support SSH agent +- **Optimisation**: Cache npm, build standalone Next.js + +### Kubernetes +- **Namespace**: lecoffre +- **Ressources**: 1Gi RAM (request) / 2Gi RAM (limit) +- **Sécurité**: Vault Agent pour injection des secrets +- **Ingress**: TLS avec cert-manager + +### CI/CD +- **Registre**: git.4nkweb.com (Docker registry) +- **Tagging**: Contrôlé par message de commit +- **Secrets**: Gestion via Vault + External Secrets + +## Dépendances + +### État général +- **46 dépendances** principales +- **5 dépendances** de développement +- **Statut**: Majoritairement à jour et sécurisées + +### Recommandations +- ✅ **Maintenir**: Next.js 14.2.3, React 18.2.0, MUI 5.11.13 +- ⚠️ **Mettre à jour**: TypeScript 4.9.5 → 5.x +- ✅ **Sécurisé**: Toutes les autres dépendances + +## Points forts identifiés + +### Architecture +- ✅ Structure modulaire bien organisée +- ✅ Séparation claire des responsabilités +- ✅ Configuration multi-environnement +- ✅ Intégration Docker/Kubernetes robuste + +### Sécurité +- ✅ Variables d'environnement externalisées +- ✅ Gestion des secrets via Vault +- ✅ Utilisateur non-root dans Docker +- ✅ Support SSH agent pour dépendances privées + +### Développement +- ✅ TypeScript pour le typage statique +- ✅ ESLint + Prettier pour la qualité du code +- ✅ Tests organisés dans le dossier tests/ +- ✅ Documentation complète + +## Points d'attention + +### Améliorations recommandées + +1. **TypeScript** + - Mettre à jour vers la version 5.x + - Bénéficier des dernières fonctionnalités + +2. **Monitoring** + - Ajouter des métriques de performance + - Monitoring des erreurs en production + +3. **Tests** + - Étendre la couverture de tests + - Tests d'intégration avec les services externes + +4. **Documentation** + - Maintenir la documentation des variables d'environnement + - Documenter les processus de déploiement + +### Risques identifiés + +1. **Dépendances privées** + - Dépendance à git.4nkweb.com pour le-coffre-resources + - Nécessite un accès SSH configuré + +2. **Variables d'environnement** + - Variables NEXT_PUBLIC_* exposées côté client + - Nécessite une validation stricte des valeurs + +3. **Intégrations externes** + - Dépendance à plusieurs services externes + - Nécessite une gestion des pannes + +## Recommandations prioritaires + +### Court terme (1-2 semaines) +1. Mettre à jour TypeScript vers la version 5.x +2. Effectuer un audit de sécurité complet (`npm audit`) +3. Vérifier la configuration des variables d'environnement + +### Moyen terme (1-2 mois) +1. Étendre la couverture de tests +2. Ajouter des métriques de monitoring +3. Documenter les processus de déploiement + +### Long terme (3-6 mois) +1. Évaluer l'optimisation des performances +2. Considérer l'ajout de tests d'intégration +3. Planifier les mises à jour des dépendances + +## Conclusion + +Le projet **lecoffre-front** présente une architecture solide et bien structurée. Les technologies utilisées sont modernes et appropriées pour le contexte. La configuration Docker/Kubernetes est robuste et sécurisée. + +Les principales améliorations concernent la mise à jour de TypeScript et l'extension des tests. Le projet est globalement en bon état et prêt pour la production. + +## Documentation créée + +1. **ANALYSE-REPOSITORY.md**: Analyse complète du repository +2. **VARIABLES-ENVIRONNEMENT.md**: Documentation détaillée des variables d'environnement +3. **ANALYSE-DEPENDANCES.md**: Analyse des dépendances et recommandations +4. **RESUME-ANALYSE.md**: Ce résumé exécutif + +--- + +*Analyse effectuée le $(date) - Repository lecoffre-front* +*Analyste: Assistant IA Claude* diff --git a/docs/VARIABLES-ENVIRONNEMENT.md b/docs/VARIABLES-ENVIRONNEMENT.md new file mode 100644 index 00000000..74e8e1e7 --- /dev/null +++ b/docs/VARIABLES-ENVIRONNEMENT.md @@ -0,0 +1,336 @@ +# Variables d'Environnement - lecoffre-front + +## Vue d'ensemble + +Ce document détaille toutes les variables d'environnement utilisées dans l'application lecoffre-front, leur utilisation et leur configuration. + +## Variables d'environnement supportées + +### 1. Configuration API Backend + +#### `NEXT_PUBLIC_BACK_API_PROTOCOL` +- **Description**: Protocole utilisé pour communiquer avec l'API backend +- **Valeurs possibles**: `https://`, `http://` +- **Exemple**: `https://` +- **Utilisation**: Construction des URLs d'API + +#### `NEXT_PUBLIC_BACK_API_HOST` +- **Description**: Nom d'hôte de l'API backend +- **Exemple**: `api.lecoffre.com`, `dev4.4nkweb.com` +- **Utilisation**: Construction des URLs d'API + +#### `NEXT_PUBLIC_BACK_API_PORT` +- **Description**: Port de l'API backend +- **Exemple**: `443`, `8080`, `3001` +- **Utilisation**: Construction des URLs d'API +- **Note**: Peut être vide pour les ports par défaut (80/443) + +#### `NEXT_PUBLIC_BACK_API_ROOT_URL` +- **Description**: Chemin racine de l'API +- **Exemple**: `/api`, `/` +- **Utilisation**: Construction des URLs d'API + +#### `NEXT_PUBLIC_BACK_API_VERSION` +- **Description**: Version de l'API +- **Exemple**: `v1`, `v2` +- **Utilisation**: Construction des URLs d'API + +### 2. Configuration Frontend + +#### `NEXT_PUBLIC_FRONT_APP_HOST` +- **Description**: URL de base de l'application frontend +- **Exemple**: `https://app.lecoffre.com` +- **Utilisation**: Redirections et liens internes + +#### `NEXT_PUBLIC_FRONT_APP_PORT` +- **Description**: Port de l'application frontend +- **Exemple**: `443`, `3000` +- **Utilisation**: Construction des URLs frontend + +### 3. Intégration IDNot (Authentification) + +#### `NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT` +- **Description**: Point d'entrée pour l'autorisation OAuth +- **Exemple**: `/oauth/authorize` +- **Utilisation**: Flux d'authentification + +#### `NEXT_PUBLIC_IDNOT_CLIENT_ID` +- **Description**: Identifiant client OAuth +- **Exemple**: `lecoffre-client-id` +- **Utilisation**: Authentification OAuth + +#### `NEXT_PUBLIC_IDNOT_BASE_URL` +- **Description**: URL de base du service IDNot +- **Exemple**: `https://idnot.lecoffre.com` +- **Utilisation**: Authentification OAuth + +#### `NEXT_PUBLIC_IDNOT_REDIRECT_URI` +- **Description**: URI de redirection après authentification +- **Exemple**: `https://app.lecoffre.com/callback` +- **Utilisation**: Flux d'authentification + +### 4. Intégration Docaposte + +#### `NEXT_PUBLIC_DOCAPOSTE_API_URL` +- **Description**: URL de l'API Docaposte +- **Exemple**: `https://api.docaposte.com` +- **Utilisation**: Services postaux + +### 5. Intégration 4NK (Blockchain) + +#### `NEXT_PUBLIC_4NK_URL` +- **Description**: URL de base des services 4NK +- **Exemple**: `https://dev4.4nkweb.com` +- **Utilisation**: Services blockchain et signature + +#### `NEXT_PUBLIC_4NK_IFRAME_URL` +- **Description**: URL spécifique pour l'iframe 4NK +- **Exemple**: `https://dev4.4nkweb.com` +- **Utilisation**: Communication iframe +- **Note**: Peut être différente de `NEXT_PUBLIC_4NK_URL` + +### 6. Analytics et Monitoring + +#### `NEXT_PUBLIC_HOTJAR_SITE_ID` +- **Description**: Identifiant du site Hotjar +- **Exemple**: `123456` +- **Utilisation**: Analytics et heatmaps + +#### `NEXT_PUBLIC_HOTJAR_VERSION` +- **Description**: Version de Hotjar +- **Exemple**: `6` +- **Utilisation**: Analytics et heatmaps + +### 7. Configuration système + +#### `NEXT_PUBLIC_API_URL` +- **Description**: URL générique de l'API +- **Exemple**: `https://api.lecoffre.com` +- **Utilisation**: Appels API génériques + +#### `NEXT_PUBLIC_DEFAULT_VALIDATOR_ID` +- **Description**: Identifiant du validateur par défaut +- **Exemple**: `862406317a35064537ac959cb5d8bbdf4f849283b63db3ffa9904de2b3427c43:0` +- **Utilisation**: Validation des entités système +- **Valeur par défaut**: Définie dans `AppConstants.ts` + +#### `NEXT_PUBLIC_DEFAULT_STORAGE_URLS` +- **Description**: URLs de stockage par défaut (séparées par des virgules) +- **Exemple**: `https://dev3.4nkweb.com/storage,https://backup.4nkweb.com/storage` +- **Utilisation**: Stockage des données +- **Valeur par défaut**: `https://dev3.4nkweb.com/storage` + +### 8. Variables d'environnement système + +#### `NEXTJS_APP_ENV_NAME` +- **Description**: Nom de l'environnement +- **Valeurs possibles**: `development`, `staging`, `preprod`, `production` +- **Utilisation**: Sélection de la configuration par environnement +- **Valeur par défaut**: `development` + +#### `NODE_ENV` +- **Description**: Environnement Node.js +- **Valeurs possibles**: `development`, `production` +- **Utilisation**: Configuration Next.js + +## Configuration par environnement + +### Développement +```bash +NEXTJS_APP_ENV_NAME=development +NODE_ENV=development +NEXT_PUBLIC_BACK_API_PROTOCOL=http:// +NEXT_PUBLIC_BACK_API_HOST=localhost +NEXT_PUBLIC_BACK_API_PORT=3001 +NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com +``` + +### Staging +```bash +NEXTJS_APP_ENV_NAME=staging +NODE_ENV=production +NEXT_PUBLIC_BACK_API_PROTOCOL=https:// +NEXT_PUBLIC_BACK_API_HOST=stg-api.lecoffre.com +NEXT_PUBLIC_BACK_API_PORT=443 +NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com +``` + +### Production +```bash +NEXTJS_APP_ENV_NAME=production +NODE_ENV=production +NEXT_PUBLIC_BACK_API_PROTOCOL=https:// +NEXT_PUBLIC_BACK_API_HOST=api.lecoffre.com +NEXT_PUBLIC_BACK_API_PORT=443 +NEXT_PUBLIC_4NK_URL=https://4nk.lecoffre.com +``` + +## Utilisation dans le code + +### Configuration Next.js + +Les variables sont configurées dans `next.config.js`: + +```javascript +const nextConfig = { + publicRuntimeConfig: { + NEXT_PUBLIC_BACK_API_PROTOCOL: process.env.NEXT_PUBLIC_BACK_API_PROTOCOL, + // ... autres variables + }, + serverRuntimeConfig: { + // Même configuration pour le serveur + }, + env: { + // Configuration pour le build + } +}; +``` + +### Initialisation dans l'application + +Les variables sont initialisées dans `_app.tsx`: + +```typescript +const { publicRuntimeConfig } = getConfig(); + +MyApp.getInitialProps = async () => { + return { + backApiProtocol: publicRuntimeConfig.NEXT_PUBLIC_BACK_API_PROTOCOL, + // ... autres variables + }; +}; +``` + +### Utilisation dans les services + +```typescript +// DatabaseService.ts +private static buildBaseUrl(): string { + return `${publicRuntimeConfig.NEXT_PUBLIC_BACK_API_PROTOCOL}${publicRuntimeConfig.NEXT_PUBLIC_BACK_API_HOST}:${publicRuntimeConfig.NEXT_PUBLIC_BACK_API_PORT}${publicRuntimeConfig.NEXT_PUBLIC_BACK_API_ROOT_URL}${publicRuntimeConfig.NEXT_PUBLIC_BACK_API_VERSION}`; +} +``` + +## Déploiement Docker + +### Variables de build + +```dockerfile +ARG NEXT_PUBLIC_BACK_API_PROTOCOL +ARG NEXT_PUBLIC_BACK_API_HOST +# ... autres variables +``` + +### Variables d'environnement runtime + +```dockerfile +ENV NEXT_PUBLIC_BACK_API_PROTOCOL=${NEXT_PUBLIC_BACK_API_PROTOCOL} \ + NEXT_PUBLIC_BACK_API_HOST=${NEXT_PUBLIC_BACK_API_HOST} \ + # ... autres variables +``` + +### Exécution + +```bash +docker run -e NEXT_PUBLIC_BACK_API_PROTOCOL=https:// \ + -e NEXT_PUBLIC_BACK_API_HOST=api.example.com \ + lecoffre/front:latest +``` + +## Déploiement Kubernetes + +### Via Vault (recommandé) + +```yaml +annotations: + vault.hashicorp.com/agent-inject: "true" + vault.hashicorp.com/agent-inject-secret-envs: secret/data/lecoffre-front-stg/config/envs + vault.hashicorp.com/agent-inject-template-envs: | + {{ with secret "secret/data/lecoffre-front-stg/config/envs" }} + {{ range $k, $v := .Data.data }} + export {{ $k }}="{{ $v }}" + {{ end }} + {{ end }} +``` + +### Via ConfigMap + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: lecoffre-front-config +data: + NEXT_PUBLIC_BACK_API_PROTOCOL: "https://" + NEXT_PUBLIC_BACK_API_HOST: "api.example.com" + # ... autres variables +``` + +## Validation et tests + +### Vérification des variables requises + +```typescript +const requiredVars = [ + 'NEXT_PUBLIC_BACK_API_PROTOCOL', + 'NEXT_PUBLIC_BACK_API_HOST', + 'NEXT_PUBLIC_BACK_API_PORT', + 'NEXT_PUBLIC_BACK_API_ROOT_URL', + 'NEXT_PUBLIC_BACK_API_VERSION' +]; + +for (const varName of requiredVars) { + if (!publicRuntimeConfig[varName]) { + throw new Error(`${varName} is not defined in environment variables`); + } +} +``` + +### Tests d'environnement + +```bash +# Vérifier les variables définies +env | grep NEXT_PUBLIC_ + +# Tester la construction d'URL +curl -I $(echo $NEXT_PUBLIC_BACK_API_PROTOCOL$NEXT_PUBLIC_BACK_API_HOST:$NEXT_PUBLIC_BACK_API_PORT$NEXT_PUBLIC_BACK_API_ROOT_URL$NEXT_PUBLIC_BACK_API_VERSION/health) +``` + +## Bonnes pratiques + +1. **Sécurité**: Ne jamais exposer de secrets dans les variables `NEXT_PUBLIC_*` +2. **Validation**: Toujours valider la présence des variables requises +3. **Documentation**: Maintenir la documentation des variables +4. **Tests**: Tester avec différentes configurations d'environnement +5. **Fallbacks**: Prévoir des valeurs par défaut quand possible + +## Dépannage + +### Variables non définies + +```bash +# Vérifier les variables d'environnement +docker exec -it env | grep NEXT_PUBLIC_ + +# Vérifier la configuration Vault +vault kv get secret/data/lecoffre-front-stg/config/envs +``` + +### URLs malformées + +```bash +# Tester la construction d'URL +node -e " +const config = { + protocol: process.env.NEXT_PUBLIC_BACK_API_PROTOCOL, + host: process.env.NEXT_PUBLIC_BACK_API_HOST, + port: process.env.NEXT_PUBLIC_BACK_API_PORT, + root: process.env.NEXT_PUBLIC_BACK_API_ROOT_URL, + version: process.env.NEXT_PUBLIC_BACK_API_VERSION +}; +console.log(\`\${config.protocol}\${config.host}:\${config.port}\${config.root}\${config.version}\`); +" +``` + +--- + +*Documentation mise à jour le $(date) - Variables d'environnement lecoffre-front* diff --git a/package.json b/package.json index 593bdac2..453568bc 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-gtm-module": "^2.0.11", - + "react-select": "^5.7.2", "react-toastify": "^9.1.3", "sass": "^1.59.2", diff --git a/src/pages/authorized-bridge.tsx b/src/pages/authorized-bridge.tsx index b278dded..ad8bd0a6 100644 --- a/src/pages/authorized-bridge.tsx +++ b/src/pages/authorized-bridge.tsx @@ -31,3 +31,8 @@ export default function AuthorizedBridge() { return null; } + + + + +