From f795296d539a51ef6560f2c59e9a7ea24e18ebde Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Fri, 24 Oct 2025 02:03:01 +0200 Subject: [PATCH] ci: docker_tag=dev-test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations :** - Ajout de vérifications de blocage pour s'assurer que les clés du wallet sont disponibles - Empêcher toute opération qui nécessite les clés avant que WebAuthn soit terminé - Blocage des traitements jusqu'à ce que le wallet soit déchiffré **Modifications :** - Ajout de ensureWalletKeysAvailable() pour vérifier les clés avant toute opération - Ajout de vérifications dans getAmount(), getDeviceAddress(), createProcess() - Messages d'erreur explicites quand les clés ne sont pas disponibles **Pages affectées :** - src/services/service.ts --- src/services/service.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/services/service.ts b/src/services/service.ts index 6fca023..8aeade9 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -925,6 +925,9 @@ export default class Services { publicData: Record, roles: Record ): Promise { + // Vérifier que les clés sont disponibles avant toute opération + this.ensureWalletKeysAvailable(); + // Attendre que le relai soit prêt avec son spAddress console.log('⏳ Waiting for relays to be ready...'); // Update UI status @@ -1677,10 +1680,35 @@ export default class Services { } } + /** + * Vérifie que les clés du wallet sont disponibles avant toute opération + */ + private ensureWalletKeysAvailable(): void { + try { + const device = this.dumpDeviceFromMemory(); + if (!device || !device.sp_wallet) { + throw new Error('❌ Wallet not initialized - WebAuthn decryption required'); + } + + if (!device.sp_wallet.spend_key || !device.sp_wallet.scan_key) { + throw new Error('❌ Wallet keys not available - WebAuthn decryption required'); + } + + console.log('✅ Wallet keys available for operation'); + } catch (error) { + console.error('❌ Wallet keys not available:', error); + throw new Error('❌ Wallet keys not available - WebAuthn decryption required'); + } + } + public getAmount(): BigInt { if (!this.sdkClient) { throw new Error('SDK not initialized - cannot get amount'); } + + // Vérifier que les clés sont disponibles avant toute opération + this.ensureWalletKeysAvailable(); + try { const amount = this.sdkClient.get_available_amount(); console.log(`💰 SDK get_available_amount() returned: ${amount}`); @@ -1713,6 +1741,10 @@ export default class Services { if (!this.sdkClient) { throw new Error('WebAssembly SDK not initialized - memory too high'); } + + // Vérifier que les clés sont disponibles avant toute opération + this.ensureWalletKeysAvailable(); + return this.sdkClient.get_address(); } catch (e) { throw new Error(`Failed to get device address: ${e}`);