# 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 ## 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) ## Développement ```bash npm run dev ``` ## Build ```bash npm run build npm start ``` ## Endpoints ### Health - `GET /health` - Vérification de santé ### Messages - `GET /messages?start=&end=&service=` - 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 ## 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.