**Motivations:** - Implement BIP39 mnemonic import for identity creation - Add password-based key protection for enhanced security - Improve pairing workflow with QR code and URL display - Migrate hash cache from LocalStorage to IndexedDB for better scalability - Update signet-dashboard and mempool components **Root causes:** - N/A (feature implementations) **Correctifs:** - N/A (no bug fixes in this commit) **Evolutions:** - BIP39 mnemonic import: Support for 12/24 word English mnemonics with BIP32 derivation path m/44'/0'/0'/0/0 - Key protection: Password-based encryption of private keys at rest with unlock/lock functionality - Pairing workflow: QR code and URL display for device pairing, form-based word exchange between devices - IndexedDB migration: Hash cache moved from LocalStorage to IndexedDB to avoid size limitations - Global action bar: URL parameter support for navigation - Pairing connection: Enhanced pairing status management **Pages affectées:** - userwallet/src/utils/identity.ts - userwallet/src/utils/keyProtection.ts - userwallet/src/utils/sessionUnlockedKey.ts - userwallet/src/utils/indexedDbStorage.ts - userwallet/src/utils/cache.ts - userwallet/src/utils/pairing.ts - userwallet/src/components/UnlockScreen.tsx - userwallet/src/components/PairingDisplayScreen.tsx - userwallet/src/components/PairingSetupBlock.tsx - userwallet/src/components/GlobalActionBar.tsx - userwallet/src/components/HomeScreen.tsx - userwallet/src/components/ImportIdentityScreen.tsx - userwallet/src/components/DataExportImportScreen.tsx - userwallet/src/hooks/useIdentity.ts - userwallet/src/hooks/usePairingConnected.ts - userwallet/src/services/syncService.ts - userwallet/src/services/pairingConfirm.ts - userwallet/src/App.tsx - userwallet/package.json - userwallet/docs/specs.md - userwallet/docs/storage.md - userwallet/docs/synthese.md - signet-dashboard/public/*.html - signet-dashboard/public/app.js - signet-dashboard/public/styles.css - mempool (submodule updates) - hash_list.txt, hash_list_cache.txt, utxo_list.txt, utxo_list_cache.txt, fees_list.txt - features/*.md (documentation files)
59 lines
3.0 KiB
Markdown
59 lines
3.0 KiB
Markdown
# UserWallet – QR et URL pairing quand statut non satisfait
|
||
|
||
**Author:** Équipe 4NK
|
||
**Date:** 2026-01-26
|
||
|
||
## Objectif
|
||
|
||
Lorsque le statut pairing est **Satisfait : Non**, afficher un bloc « Configurer le pairing avec un 2ᵉ appareil » avec :
|
||
- mots du 1ᵉʳ appareil (représentation de la clé publique, 8 mots, format type BIP32), QR et URL ;
|
||
- **formulaire de saisie** des mots du 2ᵉ appareil sur le 1ᵉʳ.
|
||
|
||
Sur le **2ᵉ appareil** (scan du QR ou ouverture de l’URL) : **page de saisie** des mots du 1ᵉʳ appareil (pré-remplie si `?words=` présent).
|
||
|
||
## Impacts
|
||
|
||
- **Fonctionnels** : Bloc pairing avec formulaire « Mots du 2ᵉ appareil » sur le 1ᵉʳ ; page `/pairing-display` (avec ou sans `?words=`) = formulaire « Saisir les mots du 1ᵉʳ appareil », pré-rempli depuis l’URL si valide. Soumission → `addRemotePairFromWords`, puis succès + liens.
|
||
- **Techniques** : `parseAndValidatePairingWords` et bypass `/pairing-display` pour tout path (pas seulement si `?words=`).
|
||
|
||
## Modifications
|
||
|
||
### pairing.ts
|
||
|
||
- `generatePairingWords()` : inchangé.
|
||
- `parseAndValidatePairingWords(text)` : parse (whitespace), valide 8 mots + `bip32WordsToUuid`, retourne `string[] | null`.
|
||
|
||
### Composants
|
||
|
||
- **PairingSetupBlock** : mots du 1ᵉʳ + QR + URL. **Section « Mots du 2ᵉ appareil »** : formulaire (textarea, « Associer le pair »). Soumission → `parseAndValidatePairingWords` → `addRemotePairFromWords` → `navigate('/manage-pairs')`. Erreurs en state, pas `alert`.
|
||
- **PairingDisplayScreen** : **formulaire** « Saisir les mots du 1ᵉʳ appareil ». Pré-rempli depuis `?words=` si valide. Soumission → `addRemotePairFromWords` → message succès + liens Accueil / Gérer les pairs.
|
||
|
||
### App.tsx
|
||
|
||
- `usePairingDisplayBypass()` : `pathname === /pairing-display` (avec ou sans `?words=`).
|
||
|
||
### HomeScreen
|
||
|
||
- Si `!pairingSatisfied` : afficher `PairingSetupBlock` (et masquer identité / pairing / relais).
|
||
|
||
### package.json (userwallet)
|
||
|
||
- `qrcode`, `@types/qrcode`.
|
||
|
||
## Flux utilisateur
|
||
|
||
1. **Appareil 1** : Accueil, pairing non satisfait → bloc avec mots du 1ᵉʳ, QR, URL, et **saisie des mots du 2ᵉ**.
|
||
2. **Appareil 2** : Scanner le QR (ou ouvrir l’URL) → page **saisie des mots du 1ᵉʳ** (pré-remplie si `?words=`). Soumettre → pair ajouté.
|
||
3. **Appareil 1** : Saisir les mots du 2ᵉ, « Associer le pair » → redirection vers « Gérer les pairs ».
|
||
|
||
## Modalités de déploiement
|
||
|
||
- `npm install` dans userwallet (nouvelles deps), rebuild, déploiement des assets.
|
||
|
||
## Modalités d’analyse
|
||
|
||
- Accueil avec pairing non satisfait : bloc avec mots du 1ᵉʳ, QR, URL, formulaire « Mots du 2ᵉ appareil ».
|
||
- Ouvrir l’URL (ou `/pairing-display`) sur un 2ᵉ appareil : formulaire « Saisir les mots du 1ᵉʳ » ; si `?words=` valide, pré-rempli.
|
||
- Soumission des formulaires : validation 8 mots, `addRemotePairFromWords`, messages d’erreur ou succès.
|
||
- Accessibilité (ARIA, contraste, clavier) des formulaires et des liens.
|