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

115 lines
3.4 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.

# UserWallet API Relay
Serveur de relais pour le système de login décentralisé UserWallet.
## Fonctionnalités
- Stockage des messages chiffrés (sans signatures ni clés)
- Stockage séparé des signatures
- Stockage séparé des clés de déchiffrement
- Relais entre pairs (inter-relay)
- Déduplication par hash
- Endpoints REST pour GET/POST
- Rate limiting (par IP)
- CORS configurable
- Logging structuré (Pino)
- Métriques Prometheus (`GET /metrics`)
- Compression des réponses (gzip)
- Indexation par `service_uuid` pour GET /messages
- Bloom filter des hash vus (`GET /bloom`)
## Installation
```bash
npm install
```
## Configuration
Variables d'environnement :
- `PORT` : Port d'écoute (défaut: 3019)
- `HOST` : Adresse d'écoute (défaut: 0.0.0.0)
- `STORAGE_PATH` : Chemin de stockage (défaut: ./data)
- `PEER_RELAYS` : Liste de relais pairs séparés par virgule (ex: http://relay1:3019,http://relay2:3019)
- `SAVE_INTERVAL_SECONDS` : Sauvegarde périodique (défaut: 300, 0 = désactivé)
- `BODY_LIMIT` : Taille max body JSON (défaut: 1mb)
- `REQUEST_TIMEOUT_MS` : Timeout requête HTTP (défaut: 30000)
- `RATE_LIMIT_WINDOW_MS` : Fenêtre rate limit (défaut: 60000)
- `RATE_LIMIT_MAX` : Requêtes max par fenêtre et par IP (défaut: 200)
- `CORS_ORIGINS` : Origines CORS autorisées, séparées par virgule (vide = toutes)
- `LOG_LEVEL` : Niveau log Pino (défaut: info, debug en dev)
- `NODE_ENV` : production | autre
## Développement
```bash
npm run dev
```
## Build
```bash
npm run build
npm start
```
## Déploiement (systemd)
```bash
sudo cp api-relay.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable api-relay
sudo systemctl start api-relay
```
`start.sh` build puis lance `node dist/index.js`.
## Endpoints
### Health
- `GET /health` - Vérification de santé
### Messages
- `GET /messages?start=<timestamp>&end=<timestamp>&service=<uuid>` - Récupérer les messages dans une fenêtre temporelle
- `POST /messages` - Publier un message chiffré
- `GET /messages/:hash` - Récupérer un message par hash
### Signatures
- `GET /signatures/:hash` - Récupérer les signatures pour un message
- `POST /signatures` - Publier une signature
### Clés
- `GET /keys/:hash` - Récupérer les clés de déchiffrement pour un message
- `POST /keys` - Publier une clé de déchiffrement
### Métriques
- `GET /metrics` - Métriques Prometheus (relay_storage_entries par kind)
### Bloom
- `GET /bloom` - Bloom filter (JSON) des hash vus. Les clients peuvent lutiliser pour éviter de demander des messages déjà connus.
## Architecture
Le relais respecte la séparation stricte :
1. Messages publiés sans signatures ni clés
2. Signatures publiées séparément
3. Clés publiées séparément
La déduplication par hash évite de relayer deux fois le même message.
## Stockage
Stockage en mémoire avec persistance sur disque (`{STORAGE_PATH}/messages.json`). Sont persistés : messages, seenHashes, signatures, clés. Sauvegarde à larrêt (SIGINT/SIGTERM) et périodiquement si `SAVE_INTERVAL_SECONDS` > 0. En production, une base de données (SQLite, PostgreSQL, etc.) est recommandée.
## Documentation
- **`docs/synthese.md`** : synthèse (rôle, stack, structure, endpoints, config, stockage, déploiement, liens UserWallet).
- **`features/api-relay-evolutions.md`** : évolutions (build ESM, rate limit, CORS, métriques, bloom, etc.).