**Motivations :**
- restore_device() ne met pas à jour les clés dans le SpClient interne
- create_device_from_sp_wallet() crée un nouveau device avec les clés mises à jour
- Cela force le SDK à reconnaître les nouvelles clés
**Modifications :**
- src/services/service.ts : Remplacé restoreDevice() par create_device_from_sp_wallet()
- Utilise dumpWallet() pour récupérer le JSON du SpClient avec les clés mises à jour
- Supprimé l'injection manuelle des clés dans le device en mémoire
- Fallback vers restoreDevice() si create_device_from_sp_wallet() échoue
**Pages affectées :**
- src/services/service.ts : Amélioration de ensureWalletKeysAvailable() pour forcer la reconnaissance des clés
**Motivations :**
- Les credentials contenaient des clés aléatoires sans lien avec le wallet SDK
- Les vraies clés du wallet (spend_key, scan_key) n'étaient jamais sauvegardées
- Quand on restaurait le wallet, les clés injectées n'étaient pas les bonnes
- Le SDK ne pouvait donc pas détecter les fonds
**Modifications :**
- src/services/secure-credentials.service.ts : generateEncryptedCredentials() extrait maintenant les vraies clés via dumpWallet()
- Les clés sont extraites du wallet SDK (spend_key.Secret et scan_sk)
- Les vraies clés sont chiffrées et stockées dans les credentials
- Lors de la restauration, les vraies clés du wallet sont réinjectées
**Pages affectées :**
- src/services/secure-credentials.service.ts : Correction de generateEncryptedCredentials() pour extraire les vraies clés
**Motivations :**
- Le pairing échouait avec l'erreur 'Wallet keys not available - WebAuthn decryption required'
- Le device stocké en base ne contenait pas les clés spend_key et scan_key dans sp_wallet
- Ces clés étaient stockées séparément dans les credentials chiffrés
- Il fallait restaurer ces clés dans le device en mémoire avant de pouvoir les utiliser
**Modifications :**
- ensureWalletKeysAvailable() : Maintenant asynchrone, vérifie si les clés sont disponibles dans le device en mémoire, sinon les restaure depuis les credentials
- Restauration des clés : Si les clés ne sont pas en mémoire, la méthode récupère les credentials, restaure les clés dans le device, et le restaure via restoreDevice()
- Méthodes asynchrones : getAmount() et getDeviceAddress() sont maintenant asynchrones pour supporter la restauration des clés
- Appels mis à jour : Tous les appels à ces méthodes ont été mis à jour avec await
**Pages affectées :**
- src/services/service.ts : Restauration automatique des clés depuis les credentials
- src/utils/sp-address.utils.ts : Appels asynchrones à getDeviceAddress()
- src/router.ts : Appels asynchrones à getDeviceAddress()
- src/components/device-management/device-management.ts : Appels asynchrones à getDeviceAddress()
- src/services/iframe-pairing.service.ts : Appels asynchrones à getDeviceAddress()
**Motivations :**
- Corriger le type de retour de getAmount() pour utiliser bigint au lieu de BigInt
- Utiliser @ts-ignore au lieu de @ts-expect-error pour PasswordCredential API
**Modifications :**
- Changer getAmount() return type de BigInt à bigint
- Remplacer @ts-expect-error par @ts-ignore pour PasswordCredential
**Pages affectées :**
- src/services/service.ts (type de retour getAmount)
- src/services/secure-credentials.service.ts (annotations PasswordCredential)
**Motivations :**
- Corriger les erreurs TypeScript qui bloquaient la compilation
- Corriger les erreurs ESLint pour améliorer la qualité du code
- Utiliser les bons formats pour secureLogger.error
**Modifications :**
- Corriger les appels secureLogger.error pour passer error comme 2e paramètre
- Ajouter les imports manquants (Database dans security-mode.service.ts)
- Préfixer les variables non utilisées avec _ pour respecter ESLint
- Corriger les comparaisons BigInt (utiliser BigInt(0) au lieu de 0n)
- Ajouter @ts-expect-error pour PasswordCredential API expérimentale
- Corriger le paramètre services non utilisé dans router.ts
**Pages affectées :**
- src/services/service.ts (comparaisons BigInt, imports)
- src/services/security-mode.service.ts (import Database)
- src/services/secure-credentials.service.ts (secureLogger.error, PasswordCredential)
- src/services/credentials/encryption.service.ts (secureLogger.error, salt type)
- src/router.ts (paramètre _services)
- src/components/device-management/device-management.ts (variable _data)
- src/components/secure-credentials/secure-credentials.ts (variable _error)
- src/components/security-mode-selector/security-mode-selector.ts (paramètre _mode)
- src/components/login-modal/login-modal.js (window globals)
**Motivations :**
- L'erreur 'Device not found' se produit lors de la mise à jour de la date anniversaire
- Le wallet est bien créé et sauvegardé mais n'est pas trouvé lors de la récupération
- Problème d'incohérence entre l'accès direct à IndexedDB et l'accès via service worker
**Modifications :**
- Ajout de logs de débogage dans getDeviceFromDatabase pour tracer le problème
- Modification de getDeviceFromDatabase pour utiliser directement IndexedDB au lieu du service worker
- Correction des erreurs TypeScript dans birthday-setup.ts et home.ts
- Correction des comparaisons BigInt dans service.ts
- Modification de birthday-setup.ts pour éviter l'utilisation de méthodes privées
**Pages affectées :**
- src/services/service.ts (getDeviceFromDatabase, updateDeviceBlockHeight)
- src/services/database.service.ts (getObject)
- src/pages/birthday-setup/birthday-setup.ts
- src/pages/home/home.ts
- src/components/security-mode-selector/security-mode-selector.ts
**Motivations:**
- Corriger les erreurs TypeScript dans secure-credentials.service.ts qui empêchaient le chargement du module
- Résoudre l'affichage cassé des pages de setup en utilisant une redirection directe
- Supprimer le mode 'browser' et nettoyer le code mort
**Modifications:**
- Correction de la méthode inexistante getEncryptedKey() dans secure-credentials.service.ts
- Correction de la redéclaration de variable encryptedKey dans generatePBKDF2Key()
- Suppression des références au mode 'browser' supprimé dans security-mode.service.ts
- Ajout des propriétés requiresOTP et requiresPassword dans l'interface SecurityModeConfig
- Suppression de la méthode retrieveKeyFromBrowser() non utilisée dans storage.service.ts
- Changement de stratégie de routage pour les pages de setup (redirection directe au lieu d'injection)
- Mise à jour des textes des options de sécurité (Proton Pass → Clé de sécurité, OTP → code à usage unique)
**Pages affectées:**
- src/services/secure-credentials.service.ts (correction des erreurs principales)
- src/services/security-mode.service.ts (correction des références au mode browser)
- src/services/credentials/storage.service.ts (suppression de la méthode non utilisée)
- src/router.ts (changement de stratégie de routage)
- src/pages/security-setup/security-setup.html (mise à jour des textes)
- src/pages/wallet-setup/wallet-setup.html (mise à jour des textes)
- src/components/security-mode-selector/ (suppression du mode browser)
- src/pages/home/home.ts (suppression du mode browser)
- src/services/service.ts (suppression du mode browser)
**Motivations :**
- Centralize database configuration to prevent version inconsistencies
- Fix service worker blocking during wallet setup
- Ensure all database stores are created at initialization
**Modifications :**
- Created database-config.ts with centralized DATABASE_CONFIG (name, version, stores)
- Updated storage.service.ts to use DATABASE_CONFIG and create all stores on upgrade
- Updated security-setup.ts to initialize database with complete configuration
- Updated wallet-setup.ts to call SDK directly and bypass service worker blocking
- Updated database.service.ts, webauthn.service.ts, and database.worker.js to use DATABASE_CONFIG
- Removed service worker dependency for wallet setup page
**Pages affected :**
- security-setup.html: Initializes database with all stores on page load
- wallet-setup.html: Saves wallet directly to IndexedDB without service worker dependency
**Motivations :**
- Implémentation du système de sélection de mode de sécurité
- Séparation claire entre les données de sécurité et les données du wallet
- Suppression des duplications entre 'encrypted-pbkdf2-key' et 'pbkdf2-key'
- Architecture modulaire pour la gestion des credentials
**Modifications :**
- Ajout du composant security-mode-selector pour la sélection du mode de sécurité
- Création des pages séquentielles : security-setup, wallet-setup, birthday-setup
- Implémentation des services de credentials (encryption, storage, webauthn)
- Ajout du service security-mode pour la gestion des modes de sécurité
- Correction du stockage des clés PBKDF2 avec le securityMode dynamique
- Suppression des méthodes redondantes dans StorageService
- Nettoyage des appels redondants dans secure-credentials.service.ts
**Pages affectées :**
- src/components/security-mode-selector/ (nouveau composant)
- src/pages/security-setup/ (nouvelle page)
- src/pages/wallet-setup/ (nouvelle page)
- src/pages/birthday-setup/ (nouvelle page)
- src/services/credentials/ (nouveaux services)
- src/services/security-mode.service.ts (nouveau service)
- src/services/secure-credentials.service.ts (modifié)
- src/services/database.service.ts (modifié)
- src/router.ts (modifié)
- src/pages/home/home.ts (modifié)
**Motivations :**
- Finalisation des corrections WebAuthn
- Toutes les modifications sont maintenant prêtes
**Modifications :**
- Correction de l'import dynamique dans secure-credentials.service.ts
- Ajout du déchiffrement des credentials après WebAuthn
- WebAuthn se déclenche maintenant correctement
**Pages affectées :**
- src/services/secure-credentials.service.ts
**Motivations :**
- Correction de l'import dynamique dans getDeviceFromSDK()
- Ajout du déchiffrement des credentials après WebAuthn pour rendre les clés disponibles au SDK
- Résolution du problème où les clés restent chiffrées après WebAuthn
**Modifications :**
- Correction de l'import dans secure-credentials.service.ts (serviceModule.default)
- Ajout de retrieveCredentials() après storeCredentials() dans home.ts
- Les clés sont maintenant déchiffrées et disponibles pour le SDK après WebAuthn
**Pages affectées :**
- src/services/secure-credentials.service.ts
- src/pages/home/home.ts
**Motivations :**
- Correction du problème WebAuthn qui ne se déclenche pas
- Réorganisation de l'ordre d'initialisation pour déclencher WebAuthn avant getDeviceAddress()
- Éviter le blocage sur ensureWalletKeysAvailable() avant WebAuthn
**Modifications :**
- Déplacement de handleMainPairing() avant getDeviceAddress() dans initHomePage()
- WebAuthn se déclenche maintenant en premier, puis l'UI est configurée après
- Correction de l'ordre logique : WebAuthn → déchiffrement → accès aux clés → UI
**Pages affectées :**
- src/pages/home/home.ts
**Motivations :**
- Correction du problème WebAuthn qui ne se déclenche plus
- Ajout de vérifications pour s'assurer que le SDK est initialisé
- Ajout d'un fallback pour les clés personnalisées si les clés du SDK ne sont pas disponibles
**Modifications :**
- Ajout de vérification SDK dans getDeviceFromSDK()
- Ajout de logs pour diagnostiquer le problème
- Fallback vers generateSpendKey/generateScanKey si les clés du SDK ne sont pas disponibles
- Gestion d'erreur robuste pour éviter que WebAuthn échoue
**Pages affectées :**
- src/services/secure-credentials.service.ts
**Motivations :**
- Correction du chiffrement : PBKDF2 génère les clés du SDK, pas des clés personnalisées
- WebAuthn chiffre maintenant les clés du SDK générées par PBKDF2
- Ajout de getDeviceFromSDK() pour récupérer les clés du SDK
**Modifications :**
- Remplacement de generateSpendKey/generateScanKey par getDeviceFromSDK()
- WebAuthn chiffre maintenant device.sp_wallet.spend_key et device.sp_wallet.scan_key
- Ajout de la méthode getDeviceFromSDK() pour accéder au SDK
**Pages affectées :**
- src/services/secure-credentials.service.ts
**Motivations :**
- Corriger la détection des tokens du faucet en forçant la synchronisation du wallet
- Ajouter des messages utilisateur compréhensibles pour remplacer les logs techniques
- S'assurer que le scan des blocs est effectué après création/restauration du wallet
**Modifications :**
- Ajout de la méthode updateUserStatus() pour afficher des messages clairs à l'utilisateur
- Messages utilisateur dans waitForAmount() : synchronisation, demande de tokens, confirmation
- Messages utilisateur dans parseNewTx() : transaction reçue, wallet mis à jour
- Synchronisation forcée du wallet après création/restauration dans router.ts
- Messages de statut dans updateDeviceBlockHeight() pour informer l'utilisateur
- Logs de debugging étendus pour diagnostiquer les problèmes de faucet
**Pages affectées :**
- src/services/service.ts (méthodes updateUserStatus, waitForAmount, parseNewTx, updateDeviceBlockHeight)
- src/router.ts (synchronisation après création/restauration du wallet)
- Ajouter log avec window.location.href pour identifier l'URL
- Confirmer que la nouvelle version est bien déployée sur HTTPS
- Identifier si le problème vient du cache ou du déploiement
- Ajouter timestamp dynamique pour forcer le rechargement
- Identifier si le problème vient du cache du serveur
- Confirmer que la nouvelle version est bien déployée
- Ajouter timestamp 2025-10-23-12:15 pour identifier la version
- Confirmer que la nouvelle version est bien déployée
- Identifier si le problème vient du cache ou du déploiement
- Ajouter log 🚨🚨🚨 FORCING WEBAUTHN - NO FALLBACK 🚨🚨🚨
- Confirmer que la nouvelle version sans fallback est utilisée
- Identifier si le problème vient du cache ou du déploiement
- Supprimer toutes les vérifications de contexte et fallback
- Forcer l'appel direct à navigator.credentials.create()
- Simplifier le code pour identifier le problème WebAuthn
- Tester si WebAuthn fonctionne sans conditions
- Ajouter log dans la branche WebAuthn pour confirmer l'exécution
- Ajouter logs dans la branche fallback pour voir les valeurs
- Identifier si le problème vient de la condition ou de l'exécution
- Déplacer l'appel WebAuthn dans le gestionnaire de clic direct
- Ajouter logs de debugging pour WebAuthn availability
- Éviter les appels WebAuthn asynchrones qui ne sont pas considérés comme user gesture
- Améliorer les messages d'interface pour l'authentification
- Supprimer l'appel WebAuthn dupliqué dans prepareAndSendPairingTx
- Ajouter vérification du contexte sécurisé (HTTPS) pour WebAuthn
- Implémenter fallback pour le développement HTTP local
- Améliorer les messages d'interface pour expliquer le mode WebAuthn
- Ajouter logs informatifs pour le debugging WebAuthn
- Gestion d'erreur robuste avec fallback automatique
- Changer extractable: false à extractable: true dans deriveMasterKey
- Résoudre l'erreur 'key is not extractable' lors de l'export de la clé
- Permettre l'utilisation de la clé maître pour dériver les clés spend et scan
- Maintenir la sécurité tout en permettant l'extraction nécessaire
- Remplacer deriveBits PBKDF2 par HMAC pour dériver les clés spend et scan
- Résoudre l'erreur 'key.algorithm does not match that of operation'
- Utiliser HMAC-SHA256 avec la clé maître pour dériver les clés spécifiques
- Maintenir la sécurité cryptographique avec une approche compatible