26 Commits

Author SHA1 Message Date
222f92e058 Refactor wallet setup and improve error handling
**Motivations:**
• Simplify wallet key extraction logic using restoreDevice API
• Improve error handling and logging throughout the application
• Remove unused scanner.js file
• Enhance secure credential management service
• Standardize logging format for better debugging
• Fix storage service error handling

**Modifications:**
• Updated wallet-setup page to use proper wallet key extraction
• Refactored secure-credentials service with better error handling
• Improved storage service with proper error logging
• Enhanced validation modal and device management components
• Updated error utilities and logger with standardized formats
• Removed deprecated scanner.js file
• Fixed birthday-setup and block-sync page error handling
• Updated security-setup page with improved error messages
• Enhanced websocket manager error handling
• Improved prerequisite utils and subscription utils
• Fixed sp-address utils error handling
• Updated encoder worker with better error logging

**Pages affected:**
• device-management component
• validation-modal component
• birthday-setup page
• block-sync page
• pairing page
• security-setup page
• wallet-setup page
• router
• All service files (secure-credentials, secure-key-manager, service, storage, token, websocket-manager)
• All utility files (errors, logger, prerequisites, sp-address, subscription)
• encoder worker
2025-10-30 07:40:59 +01:00
c9ff430b09 Standardize logging system and fix error display
**Motivations :**
- Inconsistent use of console.* methods across codebase
- Missing structured logging with proper levels and context
- Inline error display breaking UI layout
- Risk of sensitive data exposure in logs

**Modifications :**
- Replace all console.* calls with secureLogger.* in main files
- Add proper log levels: DEBUG, INFO, WARN, ERROR
- Add component context for better debugging
- Create styled error/warning/success containers
- Add comprehensive logging guidelines documentation
- Fix import paths for secureLogger in security-setup.ts

**Pages affectées :**
- src/services/service.ts - Main service logging
- src/pages/home/home.ts - Home page logging
- src/pages/security-setup/security-setup.ts - Security setup logging
- src/utils/sp-address.utils.ts - SP address utilities logging
- src/router.ts - Router logging
- src/websockets.ts - WebSocket logging
- src/4nk.css - Error container styles
- docs/LOGGING_GUIDELINES.md - Logging best practices
2025-10-30 00:14:39 +01:00
f7c2f86d30 Fix pairing credentials restoration and wallet keys management
**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()
2025-10-29 20:26:33 +01:00
0d3163b5b2 fix: uniformize block-sync page style and redirect to pairing
**Motivations :**
- Uniformiser le style de la page block-sync avec les autres pages de setup
- Corriger la redirection pour aller vers la page de pairing au lieu de checkStorageStateAndNavigate

**Modifications :**
- Uniformiser le style HTML/CSS de block-sync.html avec birthday-setup et wallet-setup
- Changer la redirection du bouton pour aller vers /src/pages/home/home.html
- Utiliser le même fond dégradé et la même carte blanche centrée

**Pages affectées :**
- src/pages/block-sync/block-sync.html (style uniformisé)
- src/pages/block-sync/block-sync.ts (redirection vers pairing)
2025-10-29 17:05:56 +01:00
0ea661b766 fix: improve memory management for WebAssembly initialization
**Motivations :**
- WebAssembly échoue même avec 40% de mémoire utilisée, nécessite au moins 150MB disponibles
- Ajouter une vérification mémoire plus stricte avant d'importer WebAssembly
- Améliorer le nettoyage mémoire dans wallet-setup avant l'initialisation

**Modifications :**
- Ajouter vérification mémoire avant import WebAssembly dans service.ts init()
- Vérifier que plus de 150MB sont disponibles ou moins de 85% utilisés
- Améliorer nettoyage mémoire dans wallet-setup si >75% utilisé
- Lancer erreur explicite si mémoire insuffisante avec détails

**Pages affectées :**
- src/services/service.ts (vérification mémoire avant import WebAssembly)
- src/pages/wallet-setup/wallet-setup.ts (nettoyage mémoire amélioré)
2025-10-29 16:56:41 +01:00
43a5fadbc8 fix: reorder prerequisites check before Services initialization
**Motivations :**
- Éviter d'initialiser WebAssembly si les prérequis ne sont pas remplis
- Réduire la consommation mémoire en vérifiant d'abord les prérequis légers
- Éviter le router d'initialiser Services lors de la vérification du pairing

**Modifications :**
- Déplacer la vérification PBKDF2 AVANT l'initialisation de Services dans wallet-setup.ts
- Supprimer l'initialisation de Services dans router.ts lors de la vérification du pairing
- Router redirige maintenant directement vers home sans vérifier le pairing

**Pages affectées :**
- src/router.ts (supprime Services.getInstance() lors de la vérification du pairing)
- src/pages/wallet-setup/wallet-setup.ts (vérifie prérequis avant Services)
2025-10-29 16:50:17 +01:00
3f7c3b1dbe fix: correct indentation in wallet-setup.ts 2025-10-29 16:47:31 +01:00
90bb585251 refactor: remove duplicated code and dead code
**Motivations :**
- Éliminer la duplication de code pour la vérification PBKDF2 key
- Éliminer la duplication de code pour la vérification du wallet avec retries
- Supprimer les imports commentés (code mort)
- Centraliser la logique de vérification des prérequis dans un utilitaire

**Modifications :**
- Créer src/utils/prerequisites.utils.ts avec checkPBKDF2Key() et checkWalletWithRetries()
- Remplacer toutes les occurrences dupliquées dans router.ts, home.ts, birthday-setup.ts, block-sync.ts, wallet-setup.ts
- Supprimer les imports commentés dans device-management.ts, pairing.service.ts, modal.service.ts
- Utiliser pbkdf2KeyResult.key au lieu de récupérer la clé plusieurs fois dans wallet-setup.ts

**Pages affectées :**
- src/utils/prerequisites.utils.ts (nouveau fichier utilitaire)
- src/router.ts (utilise checkPBKDF2Key)
- src/pages/home/home.ts (utilise checkPBKDF2Key, checkWalletWithRetries)
- src/pages/birthday-setup/birthday-setup.ts (utilise checkPBKDF2Key, checkWalletWithRetries)
- src/pages/block-sync/block-sync.ts (utilise checkPBKDF2Key, checkWalletWithRetries)
- src/pages/wallet-setup/wallet-setup.ts (utilise checkPBKDF2Key, pbkdf2KeyResult.key)
- src/services/service.ts (supprime imports commentés)
- src/components/device-management/device-management.ts (supprime import commenté)
- src/services/pairing.service.ts (supprime imports commentés)
- src/services/modal.service.ts (supprime import commenté)
2025-10-29 16:47:12 +01:00
102ee331db fix: syntax error in wallet-setup and use simplified Device type in DeviceReaderService
**Motivations :**
- Erreur de syntaxe dans wallet-setup.ts (try/catch mal formé)
- Import de Device depuis SDK peut causer des erreurs de compilation
- Utiliser un type simplifié pour éviter les dépendances lourdes

**Modifications :**
- Corriger l'indentation du try/catch dans wallet-setup.ts
- Remplacer l'import Device par une interface simplifiée dans DeviceReaderService
- Cette interface couvre les champs nécessaires sans dépendre du SDK complet

**Pages affectées :**
- src/pages/wallet-setup/wallet-setup.ts (correction syntaxe)
- src/services/device-reader.service.ts (type simplifié)
2025-10-29 16:04:59 +01:00
9de7f1a5ed fix: prevent WebAssembly reinitialization on memory errors
**Motivations :**
- Les erreurs de mémoire causent des tentatives multiples d'initialisation WebAssembly
- Services.initializing reste défini après une erreur, causant de nouvelles tentatives
- Les pages réessayent indéfiniment même en cas d'erreur mémoire fatale

**Modifications :**
- Réinitialiser Services.initializing à null dans le catch pour éviter les tentatives multiples
- Détecter les erreurs de mémoire et arrêter immédiatement les tentatives
- Ajouter la détection d'erreurs de mémoire dans wallet-setup, birthday-setup et block-sync
- Afficher un message clair à l'utilisateur pour actualiser la page en cas d'erreur mémoire
- Améliorer les messages d'erreur pour indiquer que l'actualisation de la page est nécessaire

**Pages affectées :**
- src/services/service.ts (réinitialisation de initializing et détection mémoire)
- src/pages/wallet-setup/wallet-setup.ts (détection erreurs mémoire)
- src/pages/birthday-setup/birthday-setup.ts (détection erreurs mémoire)
- src/pages/block-sync/block-sync.ts (détection erreurs mémoire)
2025-10-29 15:28:37 +01:00
ad28b37903 fix: use correct methods to check PBKDF2 key in birthday-setup
**Motivations :**
- birthday-setup.ts utilisait getPBKDF2Key() qui n'existe pas dans SecureCredentialsService
- wallet-setup.ts trouve la clé PBKDF2 mais birthday-setup.ts ne la trouve pas
- Il faut utiliser les mêmes méthodes que wallet-setup.ts (hasPBKDF2Key + retrievePBKDF2Key)

**Modifications :**
- Remplacement de getPBKDF2Key() par hasPBKDF2Key() puis retrievePBKDF2Key()
- Utilisation de la même approche que wallet-setup.ts pour vérifier la clé PBKDF2
- Ajout du mode 'otp' à la liste des modes de sécurité pour correspondre à wallet-setup.ts
- Amélioration des messages de log pour indiquer explicitement la vérification dans le store pbkdf2keys

**Pages affectées :**
- src/pages/birthday-setup/birthday-setup.ts (correction de la vérification PBKDF2)
2025-10-29 13:10:57 +01:00
aedfa09bbc fix: verify PBKDF2 key in pbkdf2keys store during prerequisites check
**Motivations :**
- La vérification des prérequis ne vérifiait pas réellement la présence de la clé PBKDF2 dans le store pbkdf2keys
- Il y avait une duplication de code pour la vérification de la clé PBKDF2
- Le mode de sécurité était recherché deux fois au lieu d'être réutilisé

**Modifications :**
- Déplacement de la vérification réelle de la clé PBKDF2 dans la section des prérequis
- Vérification explicite de la présence de la clé dans le store pbkdf2keys avant de continuer
- Stockage du mode de sécurité trouvé dans une variable au niveau supérieur pour réutilisation
- Suppression de la vérification dupliquée plus tard dans le code
- Amélioration des messages de log pour indiquer explicitement la vérification dans le store pbkdf2keys

**Pages affectées :**
- src/pages/wallet-setup/wallet-setup.ts (vérification des prérequis améliorée)
2025-10-29 12:42:13 +01:00
6f9baf6f56 fix: improve prerequisites verification with automatic redirection
**Motivations :**
- Chaque page doit vérifier ses prérequis et rediriger automatiquement si nécessaire
- Erreur avec SecureCredentialsService: 'is not a constructor'
- Amélioration de l'ordre de vérification des prérequis (PBKDF2 key d'abord, puis wallet)
- Redirection automatique vers la page appropriée si les prérequis ne sont pas remplis

**Modifications :**
- Correction de l'utilisation de SecureCredentialsService: utilisation de getInstance() au lieu de new
- Amélioration de la vérification des prérequis dans birthday-setup.ts avec redirection automatique
- Vérification du PBKDF2 key en premier (prérequis le plus basique)
- Redirection vers security-setup si le PBKDF2 key n'est pas trouvé
- Redirection vers wallet-setup si le wallet n'est pas trouvé
- Amélioration de wallet-setup.ts pour rediriger vers security-setup si aucune clé PBKDF2 n'est trouvée

**Pages affectées :**
- src/pages/birthday-setup/birthday-setup.ts (vérification des prérequis améliorée)
- src/pages/wallet-setup/wallet-setup.ts (redirection vers security-setup)
2025-10-29 12:35:08 +01:00
bb5f70a48f feat: add prerequisites verification in birthday-setup
**Motivations :**
- Chaque page doit vérifier ses prérequis en base pour éviter les erreurs
- La page birthday-setup s'arrêtait sans wallet en base
- Il faut s'assurer que le wallet et le PBKDF2 key existent avant de continuer

**Modifications :**
- Ajout de la vérification des prérequis dans birthday-setup.ts
- Vérification que le wallet existe en base de données
- Vérification que le PBKDF2 key existe pour au moins un mode de sécurité
- Ajout de messages d'erreur explicites si les prérequis ne sont pas remplis
- Amélioration de la vérification des prérequis dans wallet-setup.ts

**Pages affectées :**
- src/pages/birthday-setup/birthday-setup.ts (vérification des prérequis)
- src/pages/wallet-setup/wallet-setup.ts (amélioration de la vérification)
2025-10-29 08:42:36 +01:00
c2bd615e88 fix: resolve 'Device not found' error in birthday-setup
**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
2025-10-28 13:30:45 +01:00
057102300a Fix TypeScript errors and display issues
**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)
2025-10-27 18:56:51 +01:00
42f6e9ed05 refactor: use centralized DATABASE_CONFIG for all store names in service.ts and wallet-setup.ts 2025-10-26 02:52:17 +01:00
f4b80f1d93 refactor: centralize encryption/decryption in unified service 2025-10-26 02:47:20 +01:00
ab31901a20 security: deprecate non-encrypting WebAuthn methods and add warnings 2025-10-26 02:45:48 +01:00
6a36fde154 feat: add decryptWithPasswordBase64 method and test wallet decryption 2025-10-26 02:44:33 +01:00
b8b28c1f5d debug: log credentialId in wallet-setup for testing 2025-10-26 02:39:53 +01:00
3e63b9d8fc fix: remove credential generation from wallet-setup, only in security-setup 2025-10-26 02:34:42 +01:00
a96ffabd59 fix: skip credential generation if already exists 2025-10-26 02:30:59 +01:00
3eae4f0210 feat: encrypt wallet completely and detect security mode from PBKDF2 key
**Motivations :**
- Encrypt all wallet data with PBKDF2 key, never store in clear
- Detect security mode from available PBKDF2 key instead of using fallback
- Stop page without fallback if no PBKDF2 key is available
- Use existing PBKDF2 keys only, no generation

**Modifications :**
- wallet-setup.ts: Encrypt device data before storing, store only encrypted_device and encrypted_wallet
- wallet-setup.ts: Detect security mode by testing all modes to find a working PBKDF2 key
- wallet-setup.ts: Stop without fallback if no PBKDF2 key is found
- wallet-setup.ts: Retrieve existing PBKDF2 key (no generation)
- wallet-setup.ts: Remove separate security mode storage (already stored via PBKDF2 key in pbkdf2keys store)
- wallet-setup.ts: Add verification to reject any wallet stored in clear
- wallet-setup.ts: Fix IndexedDB inline key usage (remove explicit key parameter)

**Pages affected :**
- wallet-setup.html: Encrypts and stores only encrypted wallet data, detects security mode from PBKDF2 key
2025-10-26 02:28:33 +01:00
aa913ef930 feat: centralize database configuration and fix service worker blocking
**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
2025-10-26 02:19:00 +01:00
653c7f32ca ci: docker_tag=dev-test
**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é)
2025-10-24 18:29:31 +02:00