fix: replace declarative logs with verified checks
**Motivations :** - Les logs étaient déclaratifs (juste des messages sans vérification réelle) - Il faut vérifier réellement que les opérations sont réussies avant de logger le succès - Les logs doivent refléter la réalité et non juste des déclarations **Modifications :** - Ajout de vérifications réelles dans updateDeviceBlockHeight() pour vérifier que le device est bien restauré en mémoire et sauvegardé en base - Ajout de vérification dans saveDeviceInDatabase() pour vérifier que le wallet est bien sauvegardé après l'opération - Ajout de vérifications dans birthday-setup.ts pour vérifier que les relais sont connectés, que le handshake est reçu, et que le birthday est bien mis à jour - Les logs de succès sont maintenant émis uniquement après vérification réelle des résultats - Amélioration de la gestion des erreurs avec messages explicites si les vérifications échouent **Pages affectées :** - src/services/service.ts (updateDeviceBlockHeight et saveDeviceInDatabase avec vérifications réelles) - src/pages/birthday-setup/birthday-setup.ts (vérifications réelles des prérequis et du birthday)
This commit is contained in:
parent
72cb8129c1
commit
93ddfcbb76
@ -56,6 +56,11 @@ voir docs/INITIALIZATION_FLOW.md
|
||||
* **Lint :** Corrige les erreurs de lint, vérifie apres chaque fichier modifié
|
||||
* **Fallbacks :** Ne fait pas et supprime les fallbacks
|
||||
|
||||
#### Logs
|
||||
|
||||
* **Données vérifiées :** Vérifiant que les logs reflètent des vérifications réelles et non des déclarations.
|
||||
* **Log abondamment :** Log les informations et étapes ou états clés ainsi que les identifiants clés.
|
||||
|
||||
#### 🧪 Tests
|
||||
|
||||
* **Couverture des tests :** Rédiger des tests unitaires et d'intégration pour toute nouvelle fonctionnalité ou correction de bug.
|
||||
|
||||
@ -93,19 +93,39 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
return;
|
||||
}
|
||||
}
|
||||
console.log('✅ Wallet found in database');
|
||||
console.log('✅ All prerequisites verified');
|
||||
// Vérifier que le wallet contient bien les données attendues
|
||||
if (wallet.sp_wallet && wallet.sp_wallet.birthday !== undefined) {
|
||||
console.log('✅ Wallet found in database with birthday:', wallet.sp_wallet.birthday);
|
||||
} else {
|
||||
throw new Error('Wallet found but missing required data (sp_wallet or birthday)');
|
||||
}
|
||||
|
||||
// Vérifier que tous les prérequis sont remplis
|
||||
const prerequisitesOk = wallet && pbkdf2KeyFound;
|
||||
if (prerequisitesOk) {
|
||||
console.log('✅ All prerequisites verified');
|
||||
} else {
|
||||
throw new Error('Prerequisites verification failed');
|
||||
}
|
||||
|
||||
// Connexion aux relais
|
||||
await services.connectAllRelays();
|
||||
console.log('✅ Relays connected successfully');
|
||||
|
||||
// Étape 2: Mise à jour de la date anniversaire
|
||||
updateStatus('🎂 Mise à jour de la date anniversaire...', 'loading');
|
||||
updateProgress(40);
|
||||
|
||||
// Vérifier que les relais sont connectés
|
||||
const currentBlockHeight = services.getCurrentBlockHeight();
|
||||
if (currentBlockHeight !== -1) {
|
||||
console.log('✅ Relays connected successfully, chain_tip:', currentBlockHeight);
|
||||
} else {
|
||||
throw new Error('Relays connected but chain_tip not set');
|
||||
}
|
||||
|
||||
// Les relais sont déjà prêts après connectAllRelays
|
||||
console.log('✅ Communication handshake completed');
|
||||
// Vérifier que le handshake a été reçu
|
||||
if (currentBlockHeight > 0) {
|
||||
console.log('✅ Communication handshake completed, chain_tip:', currentBlockHeight);
|
||||
} else {
|
||||
throw new Error('Handshake not received or chain_tip not set');
|
||||
}
|
||||
|
||||
// Attendre que la hauteur de bloc soit définie avant de mettre à jour la date anniversaire
|
||||
updateStatus('⏳ Attente de la synchronisation avec le réseau...', 'loading');
|
||||
@ -132,7 +152,14 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
|
||||
// Mettre à jour la date anniversaire du wallet
|
||||
await services.updateDeviceBlockHeight();
|
||||
console.log('✅ Birthday updated successfully');
|
||||
|
||||
// Vérifier que le birthday a bien été mis à jour en récupérant le wallet depuis la base
|
||||
const updatedWallet = await services.getDeviceFromDatabase();
|
||||
if (updatedWallet?.sp_wallet?.birthday && updatedWallet.sp_wallet.birthday > 0) {
|
||||
console.log('✅ Birthday updated successfully:', updatedWallet.sp_wallet.birthday);
|
||||
} else {
|
||||
throw new Error(`Birthday update verification failed: expected birthday > 0, got ${updatedWallet?.sp_wallet?.birthday}`);
|
||||
}
|
||||
|
||||
// Redirection vers la page de synchronisation des blocs
|
||||
updateStatus('🔄 Redirection vers la synchronisation des blocs...', 'loading');
|
||||
|
||||
@ -1886,7 +1886,7 @@ export default class Services {
|
||||
|
||||
// Sauvegarder avec le format chiffré
|
||||
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);
|
||||
@ -1895,12 +1895,12 @@ export default class Services {
|
||||
});
|
||||
|
||||
const walletStore = DATABASE_CONFIG.stores.wallet.name;
|
||||
|
||||
|
||||
// Sauvegarder le wallet chiffré directement avec IndexedDB
|
||||
await new Promise<void>((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',
|
||||
@ -1912,23 +1912,60 @@ export default class Services {
|
||||
walletObject.encrypted_wallet = encryptedWallet;
|
||||
}
|
||||
|
||||
// Définir les handlers de transaction avant le put
|
||||
transaction.oncomplete = async () => {
|
||||
console.log('✅ Transaction completed for wallet save');
|
||||
|
||||
// Vérifier que le wallet a bien été sauvegardé en le récupérant depuis la base
|
||||
try {
|
||||
const verificationDb = await new Promise<IDBDatabase>((resolveDb, rejectDb) => {
|
||||
const request = indexedDB.open(DATABASE_CONFIG.name, DATABASE_CONFIG.version);
|
||||
request.onsuccess = () => resolveDb(request.result);
|
||||
request.onerror = () => rejectDb(request.error);
|
||||
});
|
||||
|
||||
const verificationTx = verificationDb.transaction([walletStore], 'readonly');
|
||||
const verificationStore = verificationTx.objectStore(walletStore);
|
||||
const verifyRequest = verificationStore.get('1');
|
||||
|
||||
await new Promise<void>((resolveVerify, rejectVerify) => {
|
||||
verifyRequest.onsuccess = () => {
|
||||
const savedData = verifyRequest.result;
|
||||
if (savedData && savedData.encrypted_device === encryptedDevice) {
|
||||
console.log('✅ Verified: Device correctly saved in database');
|
||||
resolveVerify();
|
||||
} else {
|
||||
console.error('❌ Verification failed: Device not found or encrypted data mismatch');
|
||||
rejectVerify(new Error('Device save verification failed'));
|
||||
}
|
||||
};
|
||||
|
||||
verifyRequest.onerror = () => {
|
||||
console.error('❌ Verification failed: Could not retrieve saved device', verifyRequest.error);
|
||||
rejectVerify(verifyRequest.error);
|
||||
};
|
||||
});
|
||||
|
||||
resolve();
|
||||
} catch (verifyError) {
|
||||
reject(verifyError);
|
||||
}
|
||||
};
|
||||
|
||||
transaction.onerror = () => {
|
||||
console.error('❌ Transaction failed:', transaction.error);
|
||||
reject(transaction.error);
|
||||
};
|
||||
|
||||
const putRequest = store.put(walletObject);
|
||||
putRequest.onsuccess = () => {
|
||||
console.log('✅ Device saved to database with encryption');
|
||||
resolve();
|
||||
// La vérification se fera dans transaction.oncomplete
|
||||
};
|
||||
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);
|
||||
@ -2265,21 +2302,49 @@ export default class Services {
|
||||
try {
|
||||
// First set the updated device in memory
|
||||
this.sdkClient.restore_device(device);
|
||||
console.log('✅ Device restored in memory with updated birthday');
|
||||
|
||||
// Vérifier que le device a été restauré en mémoire
|
||||
const restoredDevice = this.dumpDeviceFromMemory();
|
||||
if (restoredDevice?.sp_wallet?.birthday === device.sp_wallet.birthday) {
|
||||
console.log('✅ Device restored in memory with updated birthday:', device.sp_wallet.birthday);
|
||||
} else {
|
||||
throw new Error(`Device restoration failed: expected birthday ${device.sp_wallet.birthday}, got ${restoredDevice?.sp_wallet?.birthday}`);
|
||||
}
|
||||
|
||||
// Then save it to database
|
||||
await this.saveDeviceInDatabase(device);
|
||||
console.log('✅ Device saved to database with updated birthday');
|
||||
|
||||
// Vérifier que le device a été sauvegardé en base de données
|
||||
const savedDevice = await this.getDeviceFromDatabase();
|
||||
if (savedDevice?.sp_wallet?.birthday === device.sp_wallet.birthday) {
|
||||
console.log('✅ Device saved to database with updated birthday:', device.sp_wallet.birthday);
|
||||
} else {
|
||||
throw new Error(`Device save verification failed: expected birthday ${device.sp_wallet.birthday}, got ${savedDevice?.sp_wallet?.birthday}`);
|
||||
}
|
||||
|
||||
// For new wallets, perform initial scan to catch any existing transactions
|
||||
console.log(`🔄 Performing initial scan for new wallet from block ${device.sp_wallet.birthday} to ${this.currentBlockHeight}...`);
|
||||
await this.sdkClient.scan_blocks(this.currentBlockHeight, BLINDBITURL);
|
||||
console.log('✅ Initial scan completed for new wallet');
|
||||
|
||||
// Vérifier que le scan est terminé en vérifiant last_scan
|
||||
const deviceAfterScan = this.dumpDeviceFromMemory();
|
||||
if (deviceAfterScan?.sp_wallet?.last_scan === this.currentBlockHeight) {
|
||||
console.log('✅ Initial scan completed for new wallet');
|
||||
} else {
|
||||
console.warn(`⚠️ Initial scan may not be complete: expected last_scan ${this.currentBlockHeight}, got ${deviceAfterScan?.sp_wallet?.last_scan}`);
|
||||
}
|
||||
|
||||
// Update last_scan to current block height
|
||||
device.sp_wallet.last_scan = this.currentBlockHeight;
|
||||
await this.saveDeviceInDatabase(device);
|
||||
console.log('✅ New wallet initial scan completed');
|
||||
|
||||
// Vérifier que le device a été sauvegardé avec last_scan mis à jour
|
||||
const finalDevice = await this.getDeviceFromDatabase();
|
||||
if (finalDevice?.sp_wallet?.last_scan === this.currentBlockHeight) {
|
||||
console.log('✅ New wallet initial scan completed and saved');
|
||||
} else {
|
||||
throw new Error(`Final save verification failed: expected last_scan ${this.currentBlockHeight}, got ${finalDevice?.sp_wallet?.last_scan}`);
|
||||
}
|
||||
} catch (e) {
|
||||
throw new Error(`Failed to save updated device: ${e}`);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user