anchorage_layer_simple/features/userwallet-pairing-qr-url-display.md
ncantu 5689693507 UserWallet: Multiple feature implementations and updates
**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)
2026-01-26 10:23:34 +01:00

59 lines
3.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 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 lURL) : **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 lURL 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 lURL) → 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 danalyse
- Accueil avec pairing non satisfait : bloc avec mots du 1ᵉʳ, QR, URL, formulaire «Mots du 2ᵉ appareil».
- Ouvrir lURL (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 derreur ou succès.
- Accessibilité (ARIA, contraste, clavier) des formulaires et des liens.