From 7191d0bb33df90ab2a3ed0d60533ca0217e6e7d2 Mon Sep 17 00:00:00 2001 From: Wes Date: Thu, 15 Oct 2026 17:13:28 -0700 Subject: [PATCH] fix(mobile): cancel pairing admission before persistence Carry the pairing generation through asynchronous community admission so a reset cannot save or activate credentials when verification completes later. Co-authored-by: Brain <1a02c72794dcd0f07058a353bc3a81f4028b8c77c92c87fce6d5c8b85970a20b@buzz.block.builderlab.xyz> Signed-off-by: Wes --- mobile/lib/features/pairing/pairing_provider.dart | 13 +++++++++++-- .../features/pairing/pairing_provider_test.dart | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mobile/lib/features/pairing/pairing_provider.dart b/mobile/lib/features/pairing/pairing_provider.dart index bb046d14d1..0da7b129a3 100644 --- a/mobile/lib/features/pairing/pairing_provider.dart +++ b/mobile/lib/features/pairing/pairing_provider.dart @@ -758,7 +758,13 @@ class PairingNotifier extends Notifier { ); await ref .read(authProvider.notifier) - .authenticateWithCommunity(community); + .authenticateWithCommunity( + community, + shouldContinue: () => + pairingGeneration == _pairingGeneration && + state.status == PairingStatus.storing && + !_sendIdentityToSource, + ); if (pairingGeneration != _pairingGeneration || state.status != PairingStatus.storing || _sendIdentityToSource) { @@ -869,7 +875,10 @@ class PairingNotifier extends Notifier { if (generation != _pairingGeneration) return; await ref .read(authProvider.notifier) - .authenticateWithCommunity(community); + .authenticateWithCommunity( + community, + shouldContinue: () => generation == _pairingGeneration, + ); if (generation != _pairingGeneration) return; state = PairingState( status: PairingStatus.success, diff --git a/mobile/test/features/pairing/pairing_provider_test.dart b/mobile/test/features/pairing/pairing_provider_test.dart index 726ad6791f..cd5d481196 100644 --- a/mobile/test/features/pairing/pairing_provider_test.dart +++ b/mobile/test/features/pairing/pairing_provider_test.dart @@ -669,6 +669,10 @@ void main() { await Future.delayed(Duration.zero); expect(container.read(pairingProvider).status, PairingStatus.idle); + expect( + container.read(authProvider).value!.status, + AuthStatus.unauthenticated, + ); expect(socket.isConnected, isFalse); }); @@ -1286,6 +1290,7 @@ class FakeAuthNotifier extends AsyncNotifier lastCommunity = community; entered?.complete(); await authentication?.future; + if (shouldContinue != null && !shouldContinue()) return; state = AsyncData( AuthState(status: AuthStatus.authenticated, community: community), );