ihm_client/src/utils/prerequisites.utils.ts
NicolasCantu 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

84 lines
2.8 KiB
TypeScript

/**
* Utilitaires pour vérifier les prérequis de l'application
* Centralise la logique de vérification pour éviter la duplication
*/
import { SecureCredentialsService } from '../services/secure-credentials.service';
import { DeviceReaderService } from '../services/device-reader.service';
export type SecurityMode = 'none' | 'otp' | 'password' | 'os' | 'proton-pass';
const ALL_SECURITY_MODES: SecurityMode[] = ['none', 'otp', 'password', 'os', 'proton-pass'];
/**
* Vérifie si une clé PBKDF2 existe dans le store pbkdf2keys
* @returns La clé PBKDF2 trouvée et le mode de sécurité associé, ou null si aucune clé n'est trouvée
*/
export async function checkPBKDF2Key(): Promise<{ key: string; mode: SecurityMode } | null> {
const secureCredentialsService = SecureCredentialsService.getInstance();
for (const mode of ALL_SECURITY_MODES) {
try {
const hasKey = await secureCredentialsService.hasPBKDF2Key(mode);
if (hasKey) {
const key = await secureCredentialsService.retrievePBKDF2Key(mode);
if (key) {
console.log(`✅ PBKDF2 key found in pbkdf2keys store for security mode: ${mode}`);
return { key, mode };
}
}
} catch (error) {
// Continue to next mode
console.log(`⚠️ No PBKDF2 key found in pbkdf2keys store for mode ${mode}`);
}
}
return null;
}
/**
* Vérifie si le wallet existe en base de données avec retries pour gérer la synchronisation
* @param maxAttempts Nombre maximum de tentatives
* @param delayMs Délai entre les tentatives en millisecondes
* @returns Le wallet trouvé ou null si non trouvé après toutes les tentatives
*/
export async function checkWalletWithRetries(
maxAttempts: number = 5,
delayMs: number = 500
): Promise<any | null> {
const deviceReader = DeviceReaderService.getInstance();
for (let attempt = 0; attempt < maxAttempts; attempt++) {
const wallet = await deviceReader.getDeviceFromDatabase();
if (wallet) {
if (attempt > 0) {
console.log(`✅ Wallet found after ${attempt + 1} attempts`);
}
return wallet;
}
if (attempt < maxAttempts - 1) {
console.log(`⚠️ Wallet not found, waiting for database synchronization (attempt ${attempt + 1}/${maxAttempts})...`);
await new Promise(resolve => setTimeout(resolve, delayMs));
}
}
console.log(`⚠️ Wallet still not found after ${maxAttempts} attempts`);
return null;
}
/**
* Vérifie tous les prérequis nécessaires pour une page
* @returns Objet avec les résultats des vérifications
*/
export async function checkAllPrerequisites(): Promise<{
pbkdf2Key: { key: string; mode: SecurityMode } | null;
wallet: any | null;
}> {
const pbkdf2Key = await checkPBKDF2Key();
const wallet = pbkdf2Key ? await checkWalletWithRetries() : null;
return { pbkdf2Key, wallet };
}