68 lines
3.3 KiB
Markdown
68 lines
3.3 KiB
Markdown
### Objet
|
||
Analyse synthétique de `lecoffre-back-mini` (Express + TypeScript).
|
||
|
||
### Périmètre et stack
|
||
- **Serveur**: Express 4
|
||
- **Langage**: TypeScript (ts-node en dev, `tsc` en build)
|
||
- **Entrée**: `src/server.ts` → `dist/server.js`
|
||
|
||
### Arborescence notable
|
||
- **`src/routes`**: routes (email, health, idnot, process, sms, stripe)
|
||
- **`src/controllers`**: logique par domaine
|
||
- **`src/services`**: intégrations (email, idnot, signer, sms, stripe)
|
||
- **`src/middleware`**: auth, erreurs, session, validation
|
||
- **`src/utils`**: tokens, logger, result, validations, session manager
|
||
- **`src/config`**: configuration (email, sms, stripe, signer)
|
||
|
||
### Comportements serveur
|
||
- **CORS**: configurable via `config.cors`
|
||
- **Logs requêtes**: middleware chronomètre + `Logger.logRequest`
|
||
- **Gestion erreurs**: middleware centralisé `errorHandler`
|
||
- **Tâches récurrentes**:
|
||
- nettoyage sessions (5 min)
|
||
- purge tokens expirés (1 h)
|
||
- retry emails (1 min)
|
||
- **Arrêts propres**: gestion `SIGINT`/`SIGTERM`, exceptions et promesses rejetées
|
||
|
||
### Changements IdNot
|
||
- L’endpoint d’authentification accepte désormais le code en POST corps JSON sur `/api/v1/idnot/auth` (au lieu d’un segment d’URL).
|
||
- Le handler supporte à la fois `req.params.code` et `req.body.code` pour compatibilité, mais l’usage recommandé est `req.body.code`.
|
||
|
||
### Gestion des erreurs HTTP
|
||
- `400`:
|
||
- JSON invalide (erreur de parsing du corps) → mappé explicitement par `errorHandler`
|
||
- Code d’autorisation IdNot invalide (ValidationError)
|
||
- `401`: non autorisé (ex: email manquant)
|
||
- `403`: utilisateur non rattaché à une étude (ForbiddenError)
|
||
- `5xx`: erreurs internes ou partenaires (ExternalServiceError)
|
||
|
||
Note: dans `IdNotController.authenticate`, toute erreur possédant un `statusCode` 4xx (ou un `name` applicatif connu) est relancée telle quelle afin d’éviter un fallback en 502.
|
||
|
||
### Observabilité IdNot
|
||
- En cas d'échec côté IdNot, les logs indiquent désormais l'URL appelée, le `status`, le `statusText` et un extrait de réponse (<= 500 caractères) pour: token, userData, officeLocationData, rattachements.
|
||
|
||
### Corrections endpoints API Annuaire (v1.0.7)
|
||
- **Problème** : Endpoint incorrect `/api/pp/v2/rattachements/{id}` → 404 "No context-path matches"
|
||
- **Solution** : Correction vers `/api/pp/v2/personnes/{id}/rattachements` selon documentation API Annuaire V2
|
||
- **Robustesse** : Ajout de logique de retry avec variantes d'URL (avec/sans `/annuaire`) et délais progressifs
|
||
- **Fallback** : Support de multiples formats d'endpoints pour résilience
|
||
|
||
### Dépendances clés
|
||
- **HTTP**: `express`, `cors`
|
||
- **Infra**: `pg`, `dotenv`
|
||
- **Intégrations**: `stripe`, `@mailchimp/mailchimp_transactional`, `ovh`
|
||
- **Interop**: `sdk-signer-client` (lien local `../sdk-signer-client`)
|
||
|
||
### Points d’attention
|
||
- **Lien local**: dépendance `sdk-signer-client` en `file:` (vigilance CI/CD)
|
||
- **Secrets**: centraliser dans `.env` et ne pas exposer côté client
|
||
- **Résilience**: reconnection `SignerService` déjà prévue → surveiller métriques
|
||
|
||
### Tests et scripts
|
||
- **Tests rapides**: scripts `test:*` pour DB, rattachements, reconnection signer
|
||
- **Build/Run**: `build`, `start`, `dev`, `watch`
|
||
|
||
### Déploiement
|
||
- **Dockerfile**: présent (image `lecoffre-back-mini` utilisée par `lecoffre_node`)
|
||
- **Réseau**: orchestré via `lecoffre_node` (ports, santé, watchtower)
|