1+ import 'dart:typed_data' ;
12import 'package:bb_mobile/core/seed/data/datasources/seed_datasource.dart' ;
23import 'package:bb_mobile/core/seed/data/models/seed_model.dart' ;
34import 'package:bb_mobile/core/seed/domain/entity/seed.dart' ;
4- import 'package:bb_mobile/core/storage/data/datasources/key_value_storage/impl/secure_storage_data_source_impl.dart' ;
5- import 'package:bb_mobile/core/storage/secure_storage.dart' ;
6- import 'package:flutter/foundation.dart' ;
7- import 'package:flutter/services.dart' ;
5+ import 'package:bb_mobile/core/utils/logger.dart' ;
86
97class SeedRepository {
108 final SeedDatasource _source;
@@ -15,49 +13,64 @@ class SeedRepository {
1513 required List <String > mnemonicWords,
1614 String ? passphrase,
1715 }) async {
18- final model = SeedModel .mnemonic (
19- mnemonicWords: mnemonicWords,
20- passphrase: passphrase,
21- );
22- await _source.store (fingerprint: model.masterFingerprint, seed: model);
23- return model.toEntity () as MnemonicSeed ;
16+ try {
17+ final model = SeedModel .mnemonic (
18+ mnemonicWords: mnemonicWords,
19+ passphrase: passphrase,
20+ );
21+ await _source.store (fingerprint: model.masterFingerprint, seed: model);
22+ return model.toEntity () as MnemonicSeed ;
23+ } catch (e, stackTrace) {
24+ log.info (
25+ 'Failed to create seed from mnemonic: $e ' ,
26+ error: e,
27+ trace: stackTrace,
28+ );
29+ rethrow ;
30+ }
2431 }
2532
2633 Future <Seed > createFromBytes ({required Uint8List bytes}) async {
27- final model = SeedModel .bytes (bytes: bytes);
28- await _source.store (fingerprint: model.masterFingerprint, seed: model);
29- return model.toEntity ();
34+ try {
35+ final model = SeedModel .bytes (bytes: bytes);
36+ await _source.store (fingerprint: model.masterFingerprint, seed: model);
37+ return model.toEntity ();
38+ } catch (e, stackTrace) {
39+ log.info (
40+ 'Failed to create seed from bytes: $e ' ,
41+ error: e,
42+ trace: stackTrace,
43+ );
44+ rethrow ;
45+ }
3046 }
3147
3248 Future <Seed > get (String fingerprint) async {
33- final rootToken = RootIsolateToken .instance! ;
34- return await compute (
35- _getSeedInIsolate,
36- _IsolateParams (fingerprint: fingerprint, rootToken: rootToken),
37- );
49+ try {
50+ final model = await _source.get (fingerprint);
51+ return model.toEntity ();
52+ } catch (e, stackTrace) {
53+ log.info (
54+ 'Failed to get seed with fingerprint $fingerprint : $e ' ,
55+ error: e,
56+ trace: stackTrace,
57+ );
58+ rethrow ;
59+ }
3860 }
3961
40- Future <bool > exists (String fingerprint) => _source.exists (fingerprint);
62+ Future <bool > exists (String fingerprint) async {
63+ try {
64+ return await _source.exists (fingerprint);
65+ } catch (e, stackTrace) {
66+ log.info (
67+ 'Failed to check if seed exists with fingerprint $fingerprint : $e ' ,
68+ error: e,
69+ trace: stackTrace,
70+ );
71+ rethrow ;
72+ }
73+ }
4174
4275 Future <void > delete (String fingerprint) => _source.delete (fingerprint);
4376}
44-
45- class _IsolateParams {
46- final String fingerprint;
47- final RootIsolateToken rootToken;
48-
49- _IsolateParams ({required this .fingerprint, required this .rootToken});
50- }
51-
52- Future <Seed > _getSeedInIsolate (_IsolateParams params) async {
53- try {
54- BackgroundIsolateBinaryMessenger .ensureInitialized (params.rootToken);
55- final secureStorage = SecureStorageDatasourceImpl (SecureStorage .init ());
56- final seedDatasource = SeedDatasource (secureStorage: secureStorage);
57- final model = await seedDatasource.get (params.fingerprint);
58- return model.toEntity ();
59- } catch (e) {
60- if (e is SeedNotFoundException ) rethrow ;
61- throw Exception ('Failed to get seed in isolate: $e ' );
62- }
63- }
0 commit comments