diff --git a/src/services/service.ts b/src/services/service.ts index 94b6981..403d177 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -1815,8 +1815,10 @@ export default class Services { } async saveDeviceInDatabase(device: Device): Promise { + console.log('🔐 saveDeviceInDatabase called - starting encryption process...'); try { // Récupérer la clé PBKDF2 pour chiffrer le device + console.log('🔐 Retrieving PBKDF2 key for device encryption...'); const { SecureCredentialsService } = await import('./secure-credentials.service'); const secureCredentialsService = SecureCredentialsService.getInstance(); @@ -1833,11 +1835,13 @@ export default class Services { if (key) { pbkdf2Key = key; workingMode = mode; + console.log(`✅ PBKDF2 key found for mode: ${mode}`); break; } } } catch (e) { // Continue to next mode + console.log(`⚠️ No PBKDF2 key for mode ${mode}`); } } @@ -1845,13 +1849,16 @@ export default class Services { throw new Error('Failed to retrieve PBKDF2 key - cannot encrypt device'); } + console.log('🔐 Encrypting device with PBKDF2 key...'); // Chiffrer le device const { EncryptionService } = await import('./encryption.service'); const encryptionService = EncryptionService.getInstance(); const deviceString = JSON.stringify(device); const encryptedDevice = await encryptionService.encrypt(deviceString, pbkdf2Key); + console.log('✅ Device encrypted successfully'); // Récupérer le wallet existant pour préserver encrypted_wallet + console.log('🔍 Retrieving existing wallet to preserve encrypted_wallet...'); let encryptedWallet: string | undefined = undefined; // Récupérer le wallet chiffré depuis la base de données directement @@ -1872,33 +1879,57 @@ export default class Services { if (walletData && walletData.encrypted_wallet) { encryptedWallet = walletData.encrypted_wallet; + console.log('✅ encrypted_wallet preserved'); + } else { + console.log('⚠️ No existing encrypted_wallet to preserve'); } // Sauvegarder avec le format chiffré - const db = await Database.getInstance(); - const walletStore = DATABASE_CONFIG.stores.wallet.name; + console.log('💾 Saving encrypted device to database...'); - // Supprimer l'ancien wallet si nécessaire (utiliser put au lieu de delete/add pour éviter les problèmes de timing) - await db.deleteObject(walletStore, '1'); - - // Sauvegarder le wallet chiffré - const walletObject: any = { - pre_id: '1', - encrypted_device: encryptedDevice - }; - - // Préserver encrypted_wallet s'il existe - if (encryptedWallet) { - walletObject.encrypted_wallet = encryptedWallet; - } - - await db.addObject({ - storeName: walletStore, - object: walletObject, - key: null, + // Utiliser directement IndexedDB au lieu du service Database pour éviter les problèmes de service worker + const db = await new Promise((resolve, reject) => { + const request = indexedDB.open(DATABASE_CONFIG.name, DATABASE_CONFIG.version); + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); }); - console.log('✅ Device saved to database with encryption'); + const walletStore = DATABASE_CONFIG.stores.wallet.name; + + // Sauvegarder le wallet chiffré directement avec IndexedDB + await new Promise((resolve, reject) => { + const transaction = db.transaction([walletStore], 'readwrite'); + const store = transaction.objectStore(walletStore); + + // Sauvegarder le nouveau wallet chiffré (put écrase automatiquement si existe) + const walletObject: any = { + pre_id: '1', + encrypted_device: encryptedDevice + }; + + // Préserver encrypted_wallet s'il existe + if (encryptedWallet) { + walletObject.encrypted_wallet = encryptedWallet; + } + + const putRequest = store.put(walletObject); + putRequest.onsuccess = () => { + console.log('✅ Device saved to database with encryption'); + resolve(); + }; + putRequest.onerror = () => { + console.error('❌ Failed to save wallet:', putRequest.error); + reject(putRequest.error); + }; + + transaction.oncomplete = () => { + console.log('✅ Transaction completed for wallet save'); + }; + transaction.onerror = () => { + console.error('❌ Transaction failed:', transaction.error); + reject(transaction.error); + }; + }); } catch (e) { console.error('❌ Error saving device to database:', e); throw e;