fix: use direct IndexedDB access in saveDeviceInDatabase and add debug logs
**Motivations :** - saveDeviceInDatabase() n'utilise pas directement IndexedDB, ce qui peut causer des problèmes de synchronisation - Il manque des logs pour déboguer pourquoi le wallet n'est pas sauvegardé après updateDeviceBlockHeight() - Utiliser directement IndexedDB comme dans getDeviceFromDatabase() pour éviter les problèmes de service worker **Modifications :** - Remplacement de Database.getInstance() par un accès direct à IndexedDB dans saveDeviceInDatabase() - Ajout de logs détaillés à chaque étape du processus de sauvegarde - Utilisation de put() au lieu de delete() puis add() pour éviter les problèmes de timing - Amélioration de la gestion des erreurs avec logs explicites pour chaque étape **Pages affectées :** - src/services/service.ts (saveDeviceInDatabase utilise maintenant IndexedDB directement)
This commit is contained in:
parent
c63fe48420
commit
72cb8129c1
@ -1815,8 +1815,10 @@ export default class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async saveDeviceInDatabase(device: Device): Promise<void> {
|
async saveDeviceInDatabase(device: Device): Promise<void> {
|
||||||
|
console.log('🔐 saveDeviceInDatabase called - starting encryption process...');
|
||||||
try {
|
try {
|
||||||
// Récupérer la clé PBKDF2 pour chiffrer le device
|
// 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 } = await import('./secure-credentials.service');
|
||||||
const secureCredentialsService = SecureCredentialsService.getInstance();
|
const secureCredentialsService = SecureCredentialsService.getInstance();
|
||||||
|
|
||||||
@ -1833,11 +1835,13 @@ export default class Services {
|
|||||||
if (key) {
|
if (key) {
|
||||||
pbkdf2Key = key;
|
pbkdf2Key = key;
|
||||||
workingMode = mode;
|
workingMode = mode;
|
||||||
|
console.log(`✅ PBKDF2 key found for mode: ${mode}`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Continue to next mode
|
// 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');
|
throw new Error('Failed to retrieve PBKDF2 key - cannot encrypt device');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('🔐 Encrypting device with PBKDF2 key...');
|
||||||
// Chiffrer le device
|
// Chiffrer le device
|
||||||
const { EncryptionService } = await import('./encryption.service');
|
const { EncryptionService } = await import('./encryption.service');
|
||||||
const encryptionService = EncryptionService.getInstance();
|
const encryptionService = EncryptionService.getInstance();
|
||||||
const deviceString = JSON.stringify(device);
|
const deviceString = JSON.stringify(device);
|
||||||
const encryptedDevice = await encryptionService.encrypt(deviceString, pbkdf2Key);
|
const encryptedDevice = await encryptionService.encrypt(deviceString, pbkdf2Key);
|
||||||
|
console.log('✅ Device encrypted successfully');
|
||||||
|
|
||||||
// Récupérer le wallet existant pour préserver encrypted_wallet
|
// 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;
|
let encryptedWallet: string | undefined = undefined;
|
||||||
|
|
||||||
// Récupérer le wallet chiffré depuis la base de données directement
|
// Récupérer le wallet chiffré depuis la base de données directement
|
||||||
@ -1872,16 +1879,29 @@ export default class Services {
|
|||||||
|
|
||||||
if (walletData && walletData.encrypted_wallet) {
|
if (walletData && walletData.encrypted_wallet) {
|
||||||
encryptedWallet = 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é
|
// Sauvegarder avec le format chiffré
|
||||||
const db = await Database.getInstance();
|
console.log('💾 Saving encrypted device to database...');
|
||||||
|
|
||||||
|
// Utiliser directement IndexedDB au lieu du service Database pour éviter les problèmes de service worker
|
||||||
|
const db = await new Promise<IDBDatabase>((resolve, reject) => {
|
||||||
|
const request = indexedDB.open(DATABASE_CONFIG.name, DATABASE_CONFIG.version);
|
||||||
|
request.onsuccess = () => resolve(request.result);
|
||||||
|
request.onerror = () => reject(request.error);
|
||||||
|
});
|
||||||
|
|
||||||
const walletStore = DATABASE_CONFIG.stores.wallet.name;
|
const walletStore = DATABASE_CONFIG.stores.wallet.name;
|
||||||
|
|
||||||
// Supprimer l'ancien wallet si nécessaire (utiliser put au lieu de delete/add pour éviter les problèmes de timing)
|
// Sauvegarder le wallet chiffré directement avec IndexedDB
|
||||||
await db.deleteObject(walletStore, '1');
|
await new Promise<void>((resolve, reject) => {
|
||||||
|
const transaction = db.transaction([walletStore], 'readwrite');
|
||||||
|
const store = transaction.objectStore(walletStore);
|
||||||
|
|
||||||
// Sauvegarder le wallet chiffré
|
// Sauvegarder le nouveau wallet chiffré (put écrase automatiquement si existe)
|
||||||
const walletObject: any = {
|
const walletObject: any = {
|
||||||
pre_id: '1',
|
pre_id: '1',
|
||||||
encrypted_device: encryptedDevice
|
encrypted_device: encryptedDevice
|
||||||
@ -1892,13 +1912,24 @@ export default class Services {
|
|||||||
walletObject.encrypted_wallet = encryptedWallet;
|
walletObject.encrypted_wallet = encryptedWallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
await db.addObject({
|
const putRequest = store.put(walletObject);
|
||||||
storeName: walletStore,
|
putRequest.onsuccess = () => {
|
||||||
object: walletObject,
|
|
||||||
key: null,
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('✅ Device saved to database with encryption');
|
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) {
|
} catch (e) {
|
||||||
console.error('❌ Error saving device to database:', e);
|
console.error('❌ Error saving device to database:', e);
|
||||||
throw e;
|
throw e;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user