ncantu c3c11f0ef0 Update userwallet components, services and documentation
**Motivations:**
- Add new features and fixes for userwallet application
- Update documentation for pairing, login state machine, and sync
- Add new utilities for bloom filters, nonce store, and contract versioning
- Fix mempool websocket offline issues

**Root causes:**
- N/A (feature additions and improvements)

**Correctifs:**
- Fix mempool websocket offline handling
- Update ESLint configuration

**Evolutions:**
- Add login state machine service and hook
- Add sync loop service
- Add bloom filter utilities for anti-replay and state visibility
- Add nonce store and contract version utilities
- Update pairing confirmation and graph resolver services
- Add new documentation for features and fixes
- Update userwallet components (LoginScreen, SyncScreen)
- Update types for contract, identity, and messages

**Pages affectées:**
- userwallet/src/components/LoginScreen.tsx
- userwallet/src/components/SyncScreen.tsx
- userwallet/src/hooks/useChannel.ts
- userwallet/src/hooks/useLoginStateMachine.ts (new)
- userwallet/src/services/graphResolver.ts
- userwallet/src/services/pairingConfirm.ts
- userwallet/src/services/syncService.ts
- userwallet/src/services/syncLoop.ts (new)
- userwallet/src/services/loginStateMachine.ts (new)
- userwallet/src/types/contract.ts
- userwallet/src/types/identity.ts
- userwallet/src/types/message.ts
- userwallet/src/utils/canonical.ts
- userwallet/src/utils/identity.ts
- userwallet/src/utils/indexedDbStorage.ts
- userwallet/src/utils/relay.ts
- userwallet/src/utils/verification.ts
- userwallet/src/utils/bloom.ts (new)
- userwallet/src/utils/contractVersion.ts (new)
- userwallet/src/utils/nonceStore.ts (new)
- userwallet/eslint.config.mjs
- userwallet/package.json
- userwallet/package-lock.json
- userwallet/docs/synthese.md
- userwallet/docs/specs-champs-obligatoires-cnil.md (new)
- api-relay/README.md
- features/userwallet-pairing-words-only-finalise.md
- features/userwallet-anti-rejeu-etats-visibles-bloom.md (new)
- features/userwallet-bloom-usage-sync.md (new)
- features/userwallet-contrat-login-reste-a-faire.md (new)
- features/userwallet-ecrans-login-a-valider.md (new)
- features/userwallet-eslint-fix.md (new)
- features/userwallet-login-state-machine.md (new)
- features/userwallet-validation-conformite.md (new)
- fixKnowledge/mempool-websocket-offline-fix.md (new)
- mempool (submodule)
- hash_list.txt
- hash_list_cache.txt
2026-01-26 14:00:32 +01:00

92 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Synthèse API Relay (UserWallet)
**Author:** Équipe 4NK
**Date:** 2026-01-26
## 1. Rôle
Relais de stockage et de diffusion pour le login décentralisé UserWallet : messages chiffrés, signatures et clés publiés séparément, adressés par hash, récupération par GET (pull). Pas de destinataire explicite ; déduplication par hash.
## 2. Stack
- **Runtime** : Node.js, ESM (`"type": "module"`).
- **Serveur** : Express, `http.createServer`, timeout configurable.
- **Build** : TypeScript, `module`/`moduleResolution` Node16, imports `.js`. `npm start``node dist/index.js`.
- **Middleware** : CORS (origines via `CORS_ORIGINS`), Pino (logging HTTP), compression gzip, `express-rate-limit`, `express.json` (body limit).
- **Validation** : `lib/validate` (MsgChiffre, MsgSignature, MsgCle) ; 400 si corps invalide.
- **Métriques** : Prometheus (`prom-client`), `GET /metrics`.
## 3. Structure
```
src/
index.ts # Bootstrap, storage, relay, routes, server timeout
lib/
logger.ts # Pino
validate.ts # validateMsgChiffre, validateMsgSignature, validateMsgCle
middleware/
index.ts # CORS, logging, compression, rate limit ; getBodyLimit, getRequestTimeoutMs
routes/
health.ts # GET /health
messages.ts # GET/POST /messages, GET /messages/:hash
signatures.ts # GET /signatures/:hash, POST /signatures
keys.ts # GET /keys/:hash, POST /keys
metrics.ts # GET /metrics
bloom.ts # GET /bloom
services/
storage.ts # StorageService (messages, signatures, keys, seenHashes, byService)
relay.ts # RelayService (relayMessage, relaySignature, relayKey)
types/
message.ts # MsgChiffre, MsgSignature, MsgCle, Stored*
```
## 4. Endpoints
| Méthode | Chemin | Description |
|--------|--------|-------------|
| GET | /health | `{ status: 'ok', timestamp }` |
| GET | /messages?start=&end=&service= | Messages dans la fenêtre ; `service` optionnel (index `byService`). |
| POST | /messages | Enregistrement + relais si hash non vu. |
| GET | /messages/:hash | Message par hash. |
| GET | /signatures/:hash | Signatures pour un message. |
| POST | /signatures | Enregistrement + relais. |
| GET | /keys/:hash | Clés de déchiffrement pour un message. |
| POST | /keys | Enregistrement + relais. |
| GET | /metrics | Métriques Prometheus (`relay_storage_entries{kind}`). |
| GET | /bloom | Bloom filter (JSON) des hash vus. |
## 5. Configuration (env)
- **PORT**, **HOST** : écoute (défaut 3019, 0.0.0.0).
- **STORAGE_PATH** : répertoire de persistance (défaut `./data`).
- **PEER_RELAYS** : relais pairs (virgule), ex. `http://relay1:3019,http://relay2:3019`.
- **SAVE_INTERVAL_SECONDS** : sauvegarde périodique (défaut 300 ; 0 = désactivé).
- **BODY_LIMIT**, **REQUEST_TIMEOUT_MS** : body JSON max, timeout HTTP.
- **RATE_LIMIT_WINDOW_MS**, **RATE_LIMIT_MAX** : fenêtre et max requêtes par IP.
- **CORS_ORIGINS** : origines autorisées (virgule) ; vide = toutes.
- **LOG_LEVEL**, **NODE_ENV** : Pino et environnement.
## 6. Stockage
- **Mémoire** : `messages`, `signatures`, `keys`, `seenHashes`, index `byService`.
- **Disque** : `{STORAGE_PATH}/messages.json` (messages, seenHashes, signatures, keys). Chargement au démarrage ; sauvegarde à larrêt (SIGINT/SIGTERM) et périodique si `SAVE_INTERVAL_SECONDS` > 0.
- **Limitations** : pas de base SQLite/PostgreSQL ; en production, une base dédiée est recommandée.
## 7. Déploiement
- **Dev** : `npm run dev` (tsx watch).
- **Build** : `npm run build` puis `npm start` ou `./start.sh`.
- **Systemd** : `api-relay.service` ; `WorkingDirectory` = repo, `ExecStart` = `./start.sh`. Voir README.
## 8. Liens avec UserWallet
- UserWallet appelle les endpoints (messages, signatures, keys, health) via `utils/relay`.
- Types alignés : MsgChiffre, MsgSignature, MsgCle (`datajson_public`, etc.).
- Port par défaut 3019 ; front 3018. Proxy Nginx : voir `features/nginx-proxy-relay-certificator.md`.
## 9. Références
- **README** : `api-relay/README.md`.
- **Évolutions** : `features/api-relay-evolutions.md`.
- **Persistance** : `features/api-relay-persistence-signatures-keys-periodic-save.md`.