From 80f95bae5ab84b8dbfd9cb4bd670dbc5ac0ee66a Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Fri, 24 Apr 2026 15:06:30 +0200 Subject: [PATCH] fix payments --- .../device_setup/device_setup_builder.dart | 5 +++ .../state/device_setup_view_model.dart | 5 +++ .../sca_treezor/sca_treezor_view_model.dart | 33 ++++++++----------- .../treezor_wallet_connection_service.dart | 12 +++++++ 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/modules/payment/modules/auth/lib/src/features/device_setup/device_setup_builder.dart b/modules/payment/modules/auth/lib/src/features/device_setup/device_setup_builder.dart index c1c24a4a..c97df586 100644 --- a/modules/payment/modules/auth/lib/src/features/device_setup/device_setup_builder.dart +++ b/modules/payment/modules/auth/lib/src/features/device_setup/device_setup_builder.dart @@ -1,5 +1,7 @@ import 'package:auth/src/features/device_setup/presentation/device_setup_screen.dart'; +import 'package:auth/src/features/device_setup/presentation/state/device_setup_view_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:get_it/get_it.dart'; import 'package:go_router/go_router.dart'; import 'package:navigation/navigation.dart'; @@ -8,6 +10,9 @@ class DeviceSetupBuilder { const DeviceSetupBuilder(); Page buildPage(BuildContext context, GoRouterState state) { + final container = ProviderScope.containerOf(context); + container.invalidate(deviceSetupViewModelProvider); + final NavigationContract navigationContract = GetIt.I(); return MaterialPage( diff --git a/modules/payment/modules/auth/lib/src/features/device_setup/presentation/state/device_setup_view_model.dart b/modules/payment/modules/auth/lib/src/features/device_setup/presentation/state/device_setup_view_model.dart index 79c15b44..fb38a426 100644 --- a/modules/payment/modules/auth/lib/src/features/device_setup/presentation/state/device_setup_view_model.dart +++ b/modules/payment/modules/auth/lib/src/features/device_setup/presentation/state/device_setup_view_model.dart @@ -198,6 +198,8 @@ class DeviceSetupViewModel extends Notifier { if (!ref.mounted) return false; + ref.invalidate(childProfilesProvider); + ref.read(walletRefreshProvider.notifier).refresh(); state = state.copyWith(isLoading: false, isSuccess: true); return true; } catch (e) { @@ -391,6 +393,9 @@ class DeviceSetupViewModel extends Notifier { // utf8.encode(jsonEncode({'url': url, 'body': {}})), // ); + final connectionService = GetIt.I(); + await connectionService.connectWithPin(loginPin: state.pin); + final jws = await _signatureService.generateJwsWithPin( message: '', input: jsonEncode({'url': url, 'body': {}}), diff --git a/modules/payment/modules/auth/lib/src/features/sca_treezor/sca_treezor_view_model.dart b/modules/payment/modules/auth/lib/src/features/sca_treezor/sca_treezor_view_model.dart index dba800f9..e8985679 100644 --- a/modules/payment/modules/auth/lib/src/features/sca_treezor/sca_treezor_view_model.dart +++ b/modules/payment/modules/auth/lib/src/features/sca_treezor/sca_treezor_view_model.dart @@ -57,29 +57,13 @@ class SCATreezorViewModel extends Notifier { } Future _bootstrap() async { - final alreadyProvisioned = await _sessionLocal.isProvisioned(); - final firstConnectionDone = await _sessionLocal.isFirstConnectionDone(); - + final needsProvisioning = await _checkBackendWalletStatus(); if (!ref.mounted) return; - if (alreadyProvisioned) { - final needsReprovisioning = await _checkBackendWalletStatus(); + if (!needsProvisioning) { + final firstConnectionDone = await _sessionLocal.isFirstConnectionDone(); if (!ref.mounted) return; - if (needsReprovisioning) { - await _loadActivationCode(); - if (!ref.mounted) return; - - final code = state.activationCode.trim(); - if (code.isEmpty) { - state = state.copyWith(process: ScaProcess.idle); - return; - } - - await _provisionWallet(); - return; - } - state = state.copyWith( process: ScaProcess.idle, isProvisioned: true, @@ -89,6 +73,11 @@ class SCATreezorViewModel extends Notifier { return; } + try { + await _connectionService.deleteResidualWallet(); + } catch (_) {} + if (!ref.mounted) return; + await _loadActivationCode(); if (!ref.mounted) return; @@ -109,7 +98,11 @@ class SCATreezorViewModel extends Notifier { final hasActiveWallet = wallets.any((w) => w.status == 'ACTIVE'); final nonDeleted = wallets.where((w) => w.status != 'DELETED').toList(); - if (hasActiveWallet) return false; + if (hasActiveWallet) { + await _sessionLocal.setProvisioned(true); + await _sessionLocal.setFirstConnectionDone(true); + return false; + } // No active wallet — delete non-deleted ones and re-provision for (final wallet in nonDeleted) { diff --git a/packages/sca_treezor/lib/src/treezor_wallet_connection_service.dart b/packages/sca_treezor/lib/src/treezor_wallet_connection_service.dart index cdf2f485..22df73c1 100644 --- a/packages/sca_treezor/lib/src/treezor_wallet_connection_service.dart +++ b/packages/sca_treezor/lib/src/treezor_wallet_connection_service.dart @@ -65,5 +65,17 @@ class TreezorWalletConnectionService { Future logout() async { final walletManager = _bridge.getWalletManagerModule(); await walletManager.logout(); + await walletManager.delete(); + await walletManager.clean(); + } + + Future deleteResidualWallet() async { + final walletManager = _bridge.getWalletManagerModule(); + await walletManager.initialize(WalletManagerCallbacks()); + try { + await walletManager.delete(); + } finally { + await walletManager.clean(); + } } }