# UserWallet – Export / Import des données **Author:** Équipe 4NK **Date:** 2026-01-26 ## Objectif Permettre l’export et l’import de toutes les données UserWallet (identité, relais, pairs, cache de hash, keypair et services legacy) pour sauvegarde, migration ou restauration. ## Impacts - **Fonctionnels** : Export en fichier JSON téléchargeable ; import depuis fichier qui remplace les données locales puis recharge la page. - **Techniques** : Nouveau module `utils/exportImport.ts`, écran `DataExportImportScreen`, route `/data`, boutons sur l’accueil. ## Modifications ### utils/exportImport.ts - `exportUserWalletData(): string` : lit identity, relays, pairs, hash_cache, keypair, services depuis localStorage, produit un JSON versionné (`version`, `exportedAt`). - `importUserWalletData(json: string): void` : parse, valide (version, exportedAt, relays, pairs, hash_cache, identity optionnel), écrit en localStorage. Lance `Error` si format invalide. - Types : `UserWalletExport`, validateurs `isRelayConfig`, `isPairConfig`, `isLocalIdentity`. ### DataExportImportScreen - Section Export : bouton « Exporter les données » → `exportUserWalletData` puis téléchargement `userwallet-export-{timestamp}.json`. - Section Import : input file caché, bouton « Choisir un fichier à importer » → lecture du fichier, `importUserWalletData`, puis `window.location.reload`. Affichage des erreurs d’import. ### App & HomeScreen - Route `/data` → `DataExportImportScreen`. - Bouton « Export / Import données » sur l’accueil (avec ou sans identité). ### Documentation - `userwallet/docs/storage.md` : suppression de « Pas de backup / pas d’export-import » ; ajout section « Export / Import » et retrait de la recommandation correspondante. ## Modalités de déploiement - Rebuild du frontend UserWallet et déploiement des assets. Aucune migration de données. ## Modalités d’analyse - Exporter les données, vérifier que le JSON contient identity, relays, pairs, hash_cache, etc. - Importer un export valide : vérifier que les données sont bien présentes après rechargement. - Importer un JSON invalide (mauvais format, champs manquants) : vérifier qu’une erreur est affichée et que les données locales ne sont pas modifiées.