**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
115 lines
3.4 KiB
Markdown
115 lines
3.4 KiB
Markdown
# 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 l’utiliser 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 à l’arrê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.).
|