@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
55import 'package:trezor_flutter/src/connect/acquire.dart' ;
66import 'package:trezor_flutter/src/connect/pairing.dart' ;
77import 'package:trezor_flutter/src/connect/trezor_thp_call.dart' ;
8+ import 'package:trezor_flutter/src/operations/trezor/thp_encrypted_operation.dart' ;
89import 'package:trezor_flutter/src/operations/trezor/v1_operation.dart' ;
910import 'package:trezor_flutter/src/trezor/protobuf/messages-common.pb.dart' ;
1011import 'package:trezor_flutter/src/trezor/protobuf/messages-management.pb.dart' ;
@@ -40,6 +41,9 @@ abstract class TrezorClient {
4041 /// Make a call to the Trezor Device
4142 Future <(int , Uint8List )> call (Uint8List message, TrezorMessageType messageType);
4243
44+ /// Abort an in-flight on-device prompt; the pending call fails with ActionCancelled
45+ Future <void > cancel ();
46+
4347 /// Whether the device forces passphrase entry on its own screen
4448 bool get passphraseAlwaysOnDevice;
4549}
@@ -79,6 +83,9 @@ class TrezorClientV1 extends TrezorClient {
7983 }
8084 }
8185
86+ @override
87+ Future <void > cancel () => connection.disconnect ();
88+
8289 @override
8390 Future <void > createChannel ({TrezorPassphrase ? passphrase}) async {
8491 if (passphrase != null ) _sessionIntent.store (passphrase);
@@ -115,8 +122,7 @@ class TrezorClientV1 extends TrezorClient {
115122 _features = features;
116123
117124 return TrezorSessionInfo (
118- enteredOnDevice:
119- passphrase is TrezorPassphraseOnDevice || features.passphraseAlwaysOnDevice,
125+ enteredOnDevice: passphrase is TrezorPassphraseOnDevice || features.passphraseAlwaysOnDevice,
120126 resumed: listEquals (features.sessionId, resumeSessionId),
121127 sessionId: features.sessionId,
122128 );
@@ -159,6 +165,19 @@ class TrezorClientV2 extends TrezorClient {
159165 }
160166 }
161167
168+ @override
169+ Future <void > cancel () {
170+ if (! state.cancelablePromise) return connection.disconnect ();
171+
172+ return connection.sendOutOfBand (
173+ TrezorThpEncryptedOperation (
174+ state,
175+ data: Cancel ().writeToBuffer (),
176+ messageType: TrezorMessageType .cancel,
177+ ),
178+ );
179+ }
180+
162181 @override
163182 Future <void > createChannel ({TrezorPassphrase ? passphrase}) async {
164183 await getThpChannel (
0 commit comments