diff --git a/src/services/secure-credentials.service.ts b/src/services/secure-credentials.service.ts index 09b44ba..d4e2f4e 100644 --- a/src/services/secure-credentials.service.ts +++ b/src/services/secure-credentials.service.ts @@ -475,37 +475,37 @@ export class SecureCredentialsService { // Récupérer les vraies clés du wallet SDK au lieu de générer des clés aléatoires let spendKeyStr = ''; let scanKeyStr = ''; - + try { const Services = (await import('./service')).default; const services = await Services.getInstance(); - + // Dumper le wallet pour récupérer les vraies clés const wallet = await services.dumpWallet(); console.log('🔑 Wallet dumped for credentials extraction:', typeof wallet); - + // Parse le wallet JSON const walletObj = typeof wallet === 'string' ? JSON.parse(wallet) : wallet; - + // Extraire les clés if (walletObj.spend_key) { // spend_key peut être un objet {Secret: string} ou une string - spendKeyStr = typeof walletObj.spend_key === 'object' - ? walletObj.spend_key.Secret + spendKeyStr = typeof walletObj.spend_key === 'object' + ? walletObj.spend_key.Secret : walletObj.spend_key; } - + if (walletObj.scan_sk) { scanKeyStr = walletObj.scan_sk; } - + console.log('🔑 Extracted keys from wallet:', { has_spend_key: !!spendKeyStr, has_scan_key: !!scanKeyStr, spend_key_length: spendKeyStr.length, scan_key_length: scanKeyStr.length }); - + if (!spendKeyStr || !scanKeyStr) { throw new Error('Failed to extract keys from wallet SDK'); } diff --git a/src/services/service.ts b/src/services/service.ts index 7647ba0..9eee248 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -1713,48 +1713,24 @@ export default class Services { deviceFromDb.sp_wallet.spend_key = {Secret: credentials.spendKey}; deviceFromDb.sp_wallet.scan_key = credentials.scanKey; - // Restaurer le device complet avec toutes les informations (birthday, last_scan, clés) - this.restoreDevice(deviceFromDb); - - // Forcer la mise à jour des clés dans le SDK - console.log('🔧 Forcing wallet update in SDK...'); + // Créer un nouveau device avec les clés mises à jour via create_device_from_sp_wallet + console.log('🔧 Creating new device with updated keys...'); try { - await this.dumpWallet(); - console.log('✅ Wallet updated in SDK'); + // Dumper le wallet pour récupérer le JSON du SpClient + const walletJson = await this.dumpWallet(); + console.log('🔑 Wallet JSON for device creation:', typeof walletJson); + + // Créer un nouveau device avec les clés mises à jour + const newAddress = await this.sdkClient.create_device_from_sp_wallet(walletJson); + console.log('✅ New device created with address:', newAddress); } catch (error) { - console.warn('⚠️ Failed to update wallet in SDK:', error); + console.warn('⚠️ Failed to create new device with updated keys:', error); + // Fallback: utiliser restoreDevice + this.restoreDevice(deviceFromDb); } - // Injecter les clés directement dans le device en mémoire - const deviceInMemory = this.dumpDeviceFromMemory(); - if (deviceInMemory?.sp_wallet && credentials.spendKey && credentials.scanKey) { - // Mettre à jour les clés dans le device en mémoire - // spend_key doit être un objet {Secret: string} - deviceInMemory.sp_wallet.spend_key = {Secret: credentials.spendKey}; - deviceInMemory.sp_wallet.scan_key = credentials.scanKey; - - console.log('🔧 Injected keys:', { - spend_key_type: typeof deviceInMemory.sp_wallet.spend_key, - scan_key_type: typeof deviceInMemory.sp_wallet.scan_key, - spend_key_secret: deviceInMemory.sp_wallet.spend_key?.Secret ? 'present' : 'missing' - }); - - // Restaurer le device avec les clés mises à jour - this.restoreDevice(deviceInMemory); - - // Forcer la mise à jour des clés dans le SDK - console.log('🔧 Forcing wallet update in SDK...'); - try { - await this.dumpWallet(); - console.log('✅ Wallet updated in SDK'); - } catch (error) { - console.warn('⚠️ Failed to update wallet in SDK:', error); - } - - console.log('✅ Wallet keys injected and device restored'); - } else { - console.warn('⚠️ Could not inject keys - missing data'); - } + // Le nouveau device est créé avec les clés mises à jour + console.log('✅ New device created with updated keys'); // Vérifier que le birthday est bien préservé après restauration const deviceAfterRestore = this.dumpDeviceFromMemory();