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

4.1 KiB
Raw Blame History

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 startnode 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.