fix(clippy): apply auto-fixable linting suggestions
This commit is contained in:
@@ -1,25 +1,25 @@
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'bootstrap_token.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class BootstrapToken extends _$BootstrapToken {
|
||||
@override
|
||||
String? build() {
|
||||
return null;
|
||||
}
|
||||
|
||||
void set(String token) {
|
||||
state = token;
|
||||
}
|
||||
|
||||
void clear() {
|
||||
state = null;
|
||||
}
|
||||
|
||||
String? take() {
|
||||
final token = state;
|
||||
state = null;
|
||||
return token;
|
||||
}
|
||||
}
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'bootstrap_token.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class BootstrapToken extends _$BootstrapToken {
|
||||
@override
|
||||
String? build() {
|
||||
return null;
|
||||
}
|
||||
|
||||
void set(String token) {
|
||||
state = token;
|
||||
}
|
||||
|
||||
void clear() {
|
||||
state = null;
|
||||
}
|
||||
|
||||
String? take() {
|
||||
final token = state;
|
||||
state = null;
|
||||
return token;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'bootstrap_token.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(BootstrapToken)
|
||||
final bootstrapTokenProvider = BootstrapTokenProvider._();
|
||||
|
||||
final class BootstrapTokenProvider
|
||||
extends $NotifierProvider<BootstrapToken, String?> {
|
||||
BootstrapTokenProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'bootstrapTokenProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$bootstrapTokenHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
BootstrapToken create() => BootstrapToken();
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(String? value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<String?>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$bootstrapTokenHash() => r'5c09ea4480fc3a7fd0d0a0bced712912542cca5d';
|
||||
|
||||
abstract class _$BootstrapToken extends $Notifier<String?> {
|
||||
String? build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<String?, String?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<String?, String?>,
|
||||
String?,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'bootstrap_token.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(BootstrapToken)
|
||||
final bootstrapTokenProvider = BootstrapTokenProvider._();
|
||||
|
||||
final class BootstrapTokenProvider
|
||||
extends $NotifierProvider<BootstrapToken, String?> {
|
||||
BootstrapTokenProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'bootstrapTokenProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$bootstrapTokenHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
BootstrapToken create() => BootstrapToken();
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(String? value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<String?>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$bootstrapTokenHash() => r'5c09ea4480fc3a7fd0d0a0bced712912542cca5d';
|
||||
|
||||
abstract class _$BootstrapToken extends $Notifier<String?> {
|
||||
String? build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<String?, String?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<String?, String?>,
|
||||
String?,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
import 'package:arbiter/features/connection/auth.dart';
|
||||
import 'package:arbiter/features/connection/connection.dart';
|
||||
import 'package:arbiter/providers/connection/bootstrap_token.dart';
|
||||
import 'package:arbiter/providers/key.dart';
|
||||
import 'package:arbiter/providers/server_info.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'connection_manager.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class ConnectionManager extends _$ConnectionManager {
|
||||
@override
|
||||
Future<Connection?> build() async {
|
||||
final serverInfo = await ref.watch(serverInfoProvider.future);
|
||||
final key = await ref.watch(keyProvider.future);
|
||||
final token = ref.read(bootstrapTokenProvider);
|
||||
|
||||
if (serverInfo == null || key == null) {
|
||||
return null;
|
||||
}
|
||||
final Connection connection;
|
||||
try {
|
||||
connection = await connectAndAuthorize(
|
||||
serverInfo,
|
||||
key,
|
||||
bootstrapToken: token,
|
||||
);
|
||||
if (token != null) {
|
||||
ref.read(bootstrapTokenProvider.notifier).clear();
|
||||
}
|
||||
} catch (e) {
|
||||
talker.handle(e);
|
||||
rethrow;
|
||||
}
|
||||
|
||||
ref.onDispose(() {
|
||||
final connection = state.asData?.value;
|
||||
if (connection != null) {
|
||||
connection.close();
|
||||
}
|
||||
});
|
||||
|
||||
return connection;
|
||||
}
|
||||
}
|
||||
import 'package:arbiter/features/connection/auth.dart';
|
||||
import 'package:arbiter/features/connection/connection.dart';
|
||||
import 'package:arbiter/providers/connection/bootstrap_token.dart';
|
||||
import 'package:arbiter/providers/key.dart';
|
||||
import 'package:arbiter/providers/server_info.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'connection_manager.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class ConnectionManager extends _$ConnectionManager {
|
||||
@override
|
||||
Future<Connection?> build() async {
|
||||
final serverInfo = await ref.watch(serverInfoProvider.future);
|
||||
final key = await ref.watch(keyProvider.future);
|
||||
final token = ref.read(bootstrapTokenProvider);
|
||||
|
||||
if (serverInfo == null || key == null) {
|
||||
return null;
|
||||
}
|
||||
final Connection connection;
|
||||
try {
|
||||
connection = await connectAndAuthorize(
|
||||
serverInfo,
|
||||
key,
|
||||
bootstrapToken: token,
|
||||
);
|
||||
if (token != null) {
|
||||
ref.read(bootstrapTokenProvider.notifier).clear();
|
||||
}
|
||||
} catch (e) {
|
||||
talker.handle(e);
|
||||
rethrow;
|
||||
}
|
||||
|
||||
ref.onDispose(() {
|
||||
final connection = state.asData?.value;
|
||||
if (connection != null) {
|
||||
connection.close();
|
||||
}
|
||||
});
|
||||
|
||||
return connection;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'connection_manager.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(ConnectionManager)
|
||||
final connectionManagerProvider = ConnectionManagerProvider._();
|
||||
|
||||
final class ConnectionManagerProvider
|
||||
extends $AsyncNotifierProvider<ConnectionManager, Connection?> {
|
||||
ConnectionManagerProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'connectionManagerProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$connectionManagerHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
ConnectionManager create() => ConnectionManager();
|
||||
}
|
||||
|
||||
String _$connectionManagerHash() => r'f471afb49bdcde77238424942f5af1716634f084';
|
||||
|
||||
abstract class _$ConnectionManager extends $AsyncNotifier<Connection?> {
|
||||
FutureOr<Connection?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<AsyncValue<Connection?>, Connection?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<Connection?>, Connection?>,
|
||||
AsyncValue<Connection?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'connection_manager.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(ConnectionManager)
|
||||
final connectionManagerProvider = ConnectionManagerProvider._();
|
||||
|
||||
final class ConnectionManagerProvider
|
||||
extends $AsyncNotifierProvider<ConnectionManager, Connection?> {
|
||||
ConnectionManagerProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'connectionManagerProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$connectionManagerHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
ConnectionManager create() => ConnectionManager();
|
||||
}
|
||||
|
||||
String _$connectionManagerHash() => r'f471afb49bdcde77238424942f5af1716634f084';
|
||||
|
||||
abstract class _$ConnectionManager extends $AsyncNotifier<Connection?> {
|
||||
FutureOr<Connection?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<AsyncValue<Connection?>, Connection?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<Connection?>, Connection?>,
|
||||
AsyncValue<Connection?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
import 'package:arbiter/features/connection/evm.dart' as evm;
|
||||
import 'package:arbiter/proto/evm.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'evm.g.dart';
|
||||
|
||||
@riverpod
|
||||
class Evm extends _$Evm {
|
||||
@override
|
||||
Future<List<WalletEntry>?> build() async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return evm.listEvmWallets(connection);
|
||||
}
|
||||
|
||||
Future<void> refreshWallets() async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
state = const AsyncData(null);
|
||||
return;
|
||||
}
|
||||
|
||||
state = const AsyncLoading();
|
||||
state = await AsyncValue.guard(() => evm.listEvmWallets(connection));
|
||||
}
|
||||
}
|
||||
|
||||
final createEvmWallet = Mutation();
|
||||
|
||||
Future<void> executeCreateEvmWallet(MutationTarget target) async {
|
||||
return await createEvmWallet.run(target, (tsx) async {
|
||||
final connection = await tsx.get(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
|
||||
await evm.createEvmWallet(connection);
|
||||
|
||||
await tsx.get(evmProvider.notifier).refreshWallets();
|
||||
});
|
||||
}
|
||||
import 'package:arbiter/features/connection/evm.dart' as evm;
|
||||
import 'package:arbiter/proto/evm.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'evm.g.dart';
|
||||
|
||||
@riverpod
|
||||
class Evm extends _$Evm {
|
||||
@override
|
||||
Future<List<WalletEntry>?> build() async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return evm.listEvmWallets(connection);
|
||||
}
|
||||
|
||||
Future<void> refreshWallets() async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
state = const AsyncData(null);
|
||||
return;
|
||||
}
|
||||
|
||||
state = const AsyncLoading();
|
||||
state = await AsyncValue.guard(() => evm.listEvmWallets(connection));
|
||||
}
|
||||
}
|
||||
|
||||
final createEvmWallet = Mutation();
|
||||
|
||||
Future<void> executeCreateEvmWallet(MutationTarget target) async {
|
||||
return await createEvmWallet.run(target, (tsx) async {
|
||||
final connection = await tsx.get(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
|
||||
await evm.createEvmWallet(connection);
|
||||
|
||||
await tsx.get(evmProvider.notifier).refreshWallets();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,55 +1,55 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'evm.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(Evm)
|
||||
final evmProvider = EvmProvider._();
|
||||
|
||||
final class EvmProvider
|
||||
extends $AsyncNotifierProvider<Evm, List<WalletEntry>?> {
|
||||
EvmProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'evmProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$evmHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
Evm create() => Evm();
|
||||
}
|
||||
|
||||
String _$evmHash() => r'ca2c9736065c5dc7cc45d8485000dd85dfbfa572';
|
||||
|
||||
abstract class _$Evm extends $AsyncNotifier<List<WalletEntry>?> {
|
||||
FutureOr<List<WalletEntry>?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref =
|
||||
this.ref as $Ref<AsyncValue<List<WalletEntry>?>, List<WalletEntry>?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<List<WalletEntry>?>, List<WalletEntry>?>,
|
||||
AsyncValue<List<WalletEntry>?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'evm.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(Evm)
|
||||
final evmProvider = EvmProvider._();
|
||||
|
||||
final class EvmProvider
|
||||
extends $AsyncNotifierProvider<Evm, List<WalletEntry>?> {
|
||||
EvmProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'evmProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$evmHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
Evm create() => Evm();
|
||||
}
|
||||
|
||||
String _$evmHash() => r'ca2c9736065c5dc7cc45d8485000dd85dfbfa572';
|
||||
|
||||
abstract class _$Evm extends $AsyncNotifier<List<WalletEntry>?> {
|
||||
FutureOr<List<WalletEntry>?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref =
|
||||
this.ref as $Ref<AsyncValue<List<WalletEntry>?>, List<WalletEntry>?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<List<WalletEntry>?>, List<WalletEntry>?>,
|
||||
AsyncValue<List<WalletEntry>?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,105 +1,105 @@
|
||||
import 'package:arbiter/features/connection/evm/grants.dart';
|
||||
import 'package:arbiter/proto/evm.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'evm_grants.freezed.dart';
|
||||
part 'evm_grants.g.dart';
|
||||
|
||||
final createEvmGrantMutation = Mutation<int>();
|
||||
final revokeEvmGrantMutation = Mutation<void>();
|
||||
|
||||
@freezed
|
||||
abstract class EvmGrantsState with _$EvmGrantsState {
|
||||
const EvmGrantsState._();
|
||||
|
||||
const factory EvmGrantsState({
|
||||
required List<GrantEntry> grants,
|
||||
@Default(false) bool showRevoked,
|
||||
}) = _EvmGrantsState;
|
||||
|
||||
bool get revokedFilterBackedByServer => false;
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class EvmGrants extends _$EvmGrants {
|
||||
@override
|
||||
Future<EvmGrantsState?> build() async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
final grants = await listEvmGrants(connection);
|
||||
return EvmGrantsState(grants: grants);
|
||||
} catch (e, st) {
|
||||
talker.handle(e, st);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
void toggleShowRevoked(bool value) {
|
||||
final current = state.asData?.value;
|
||||
if (current == null) {
|
||||
return;
|
||||
}
|
||||
state = AsyncData(current.copyWith(showRevoked: value));
|
||||
}
|
||||
|
||||
Future<void> refresh() async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
state = const AsyncData(null);
|
||||
return;
|
||||
}
|
||||
|
||||
final previous = state.asData?.value;
|
||||
state = const AsyncLoading();
|
||||
|
||||
state = await AsyncValue.guard(() async {
|
||||
final grants = await listEvmGrants(connection);
|
||||
return EvmGrantsState(
|
||||
grants: grants,
|
||||
showRevoked: previous?.showRevoked ?? false,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<int> executeCreateEvmGrant(
|
||||
MutationTarget ref, {
|
||||
required SharedSettings sharedSettings,
|
||||
required SpecificGrant specific,
|
||||
}) {
|
||||
return createEvmGrantMutation.run(ref, (tsx) async {
|
||||
final connection = await tsx.get(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
|
||||
final grantId = await createEvmGrant(
|
||||
connection,
|
||||
sharedSettings: sharedSettings,
|
||||
specific: specific,
|
||||
);
|
||||
|
||||
await tsx.get(evmGrantsProvider.notifier).refresh();
|
||||
return grantId;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> executeRevokeEvmGrant(MutationTarget ref, {required int grantId}) {
|
||||
return revokeEvmGrantMutation.run(ref, (tsx) async {
|
||||
final connection = await tsx.get(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
|
||||
await deleteEvmGrant(connection, grantId);
|
||||
await tsx.get(evmGrantsProvider.notifier).refresh();
|
||||
});
|
||||
}
|
||||
import 'package:arbiter/features/connection/evm/grants.dart';
|
||||
import 'package:arbiter/proto/evm.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'evm_grants.freezed.dart';
|
||||
part 'evm_grants.g.dart';
|
||||
|
||||
final createEvmGrantMutation = Mutation<int>();
|
||||
final revokeEvmGrantMutation = Mutation<void>();
|
||||
|
||||
@freezed
|
||||
abstract class EvmGrantsState with _$EvmGrantsState {
|
||||
const EvmGrantsState._();
|
||||
|
||||
const factory EvmGrantsState({
|
||||
required List<GrantEntry> grants,
|
||||
@Default(false) bool showRevoked,
|
||||
}) = _EvmGrantsState;
|
||||
|
||||
bool get revokedFilterBackedByServer => false;
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class EvmGrants extends _$EvmGrants {
|
||||
@override
|
||||
Future<EvmGrantsState?> build() async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
final grants = await listEvmGrants(connection);
|
||||
return EvmGrantsState(grants: grants);
|
||||
} catch (e, st) {
|
||||
talker.handle(e, st);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
void toggleShowRevoked(bool value) {
|
||||
final current = state.asData?.value;
|
||||
if (current == null) {
|
||||
return;
|
||||
}
|
||||
state = AsyncData(current.copyWith(showRevoked: value));
|
||||
}
|
||||
|
||||
Future<void> refresh() async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
state = const AsyncData(null);
|
||||
return;
|
||||
}
|
||||
|
||||
final previous = state.asData?.value;
|
||||
state = const AsyncLoading();
|
||||
|
||||
state = await AsyncValue.guard(() async {
|
||||
final grants = await listEvmGrants(connection);
|
||||
return EvmGrantsState(
|
||||
grants: grants,
|
||||
showRevoked: previous?.showRevoked ?? false,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Future<int> executeCreateEvmGrant(
|
||||
MutationTarget ref, {
|
||||
required SharedSettings sharedSettings,
|
||||
required SpecificGrant specific,
|
||||
}) {
|
||||
return createEvmGrantMutation.run(ref, (tsx) async {
|
||||
final connection = await tsx.get(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
|
||||
final grantId = await createEvmGrant(
|
||||
connection,
|
||||
sharedSettings: sharedSettings,
|
||||
specific: specific,
|
||||
);
|
||||
|
||||
await tsx.get(evmGrantsProvider.notifier).refresh();
|
||||
return grantId;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> executeRevokeEvmGrant(MutationTarget ref, {required int grantId}) {
|
||||
return revokeEvmGrantMutation.run(ref, (tsx) async {
|
||||
final connection = await tsx.get(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
|
||||
await deleteEvmGrant(connection, grantId);
|
||||
await tsx.get(evmGrantsProvider.notifier).refresh();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,280 +1,280 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'evm_grants.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$EvmGrantsState {
|
||||
|
||||
List<GrantEntry> get grants; bool get showRevoked;
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$EvmGrantsStateCopyWith<EvmGrantsState> get copyWith => _$EvmGrantsStateCopyWithImpl<EvmGrantsState>(this as EvmGrantsState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is EvmGrantsState&&const DeepCollectionEquality().equals(other.grants, grants)&&(identical(other.showRevoked, showRevoked) || other.showRevoked == showRevoked));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(grants),showRevoked);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'EvmGrantsState(grants: $grants, showRevoked: $showRevoked)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $EvmGrantsStateCopyWith<$Res> {
|
||||
factory $EvmGrantsStateCopyWith(EvmGrantsState value, $Res Function(EvmGrantsState) _then) = _$EvmGrantsStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
List<GrantEntry> grants, bool showRevoked
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$EvmGrantsStateCopyWithImpl<$Res>
|
||||
implements $EvmGrantsStateCopyWith<$Res> {
|
||||
_$EvmGrantsStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final EvmGrantsState _self;
|
||||
final $Res Function(EvmGrantsState) _then;
|
||||
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? grants = null,Object? showRevoked = null,}) {
|
||||
return _then(_self.copyWith(
|
||||
grants: null == grants ? _self.grants : grants // ignore: cast_nullable_to_non_nullable
|
||||
as List<GrantEntry>,showRevoked: null == showRevoked ? _self.showRevoked : showRevoked // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [EvmGrantsState].
|
||||
extension EvmGrantsStatePatterns on EvmGrantsState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _EvmGrantsState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _EvmGrantsState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _EvmGrantsState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( List<GrantEntry> grants, bool showRevoked)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that.grants,_that.showRevoked);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( List<GrantEntry> grants, bool showRevoked) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState():
|
||||
return $default(_that.grants,_that.showRevoked);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( List<GrantEntry> grants, bool showRevoked)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that.grants,_that.showRevoked);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _EvmGrantsState extends EvmGrantsState {
|
||||
const _EvmGrantsState({required final List<GrantEntry> grants, this.showRevoked = false}): _grants = grants,super._();
|
||||
|
||||
|
||||
final List<GrantEntry> _grants;
|
||||
@override List<GrantEntry> get grants {
|
||||
if (_grants is EqualUnmodifiableListView) return _grants;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(_grants);
|
||||
}
|
||||
|
||||
@override@JsonKey() final bool showRevoked;
|
||||
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$EvmGrantsStateCopyWith<_EvmGrantsState> get copyWith => __$EvmGrantsStateCopyWithImpl<_EvmGrantsState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _EvmGrantsState&&const DeepCollectionEquality().equals(other._grants, _grants)&&(identical(other.showRevoked, showRevoked) || other.showRevoked == showRevoked));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(_grants),showRevoked);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'EvmGrantsState(grants: $grants, showRevoked: $showRevoked)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$EvmGrantsStateCopyWith<$Res> implements $EvmGrantsStateCopyWith<$Res> {
|
||||
factory _$EvmGrantsStateCopyWith(_EvmGrantsState value, $Res Function(_EvmGrantsState) _then) = __$EvmGrantsStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
List<GrantEntry> grants, bool showRevoked
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$EvmGrantsStateCopyWithImpl<$Res>
|
||||
implements _$EvmGrantsStateCopyWith<$Res> {
|
||||
__$EvmGrantsStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _EvmGrantsState _self;
|
||||
final $Res Function(_EvmGrantsState) _then;
|
||||
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? grants = null,Object? showRevoked = null,}) {
|
||||
return _then(_EvmGrantsState(
|
||||
grants: null == grants ? _self._grants : grants // ignore: cast_nullable_to_non_nullable
|
||||
as List<GrantEntry>,showRevoked: null == showRevoked ? _self.showRevoked : showRevoked // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'evm_grants.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
/// @nodoc
|
||||
mixin _$EvmGrantsState {
|
||||
|
||||
List<GrantEntry> get grants; bool get showRevoked;
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$EvmGrantsStateCopyWith<EvmGrantsState> get copyWith => _$EvmGrantsStateCopyWithImpl<EvmGrantsState>(this as EvmGrantsState, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is EvmGrantsState&&const DeepCollectionEquality().equals(other.grants, grants)&&(identical(other.showRevoked, showRevoked) || other.showRevoked == showRevoked));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(grants),showRevoked);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'EvmGrantsState(grants: $grants, showRevoked: $showRevoked)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $EvmGrantsStateCopyWith<$Res> {
|
||||
factory $EvmGrantsStateCopyWith(EvmGrantsState value, $Res Function(EvmGrantsState) _then) = _$EvmGrantsStateCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
List<GrantEntry> grants, bool showRevoked
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$EvmGrantsStateCopyWithImpl<$Res>
|
||||
implements $EvmGrantsStateCopyWith<$Res> {
|
||||
_$EvmGrantsStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final EvmGrantsState _self;
|
||||
final $Res Function(EvmGrantsState) _then;
|
||||
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? grants = null,Object? showRevoked = null,}) {
|
||||
return _then(_self.copyWith(
|
||||
grants: null == grants ? _self.grants : grants // ignore: cast_nullable_to_non_nullable
|
||||
as List<GrantEntry>,showRevoked: null == showRevoked ? _self.showRevoked : showRevoked // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [EvmGrantsState].
|
||||
extension EvmGrantsStatePatterns on EvmGrantsState {
|
||||
/// A variant of `map` that fallback to returning `orElse`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _EvmGrantsState value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// Callbacks receives the raw object, upcasted.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case final Subclass2 value:
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _EvmGrantsState value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState():
|
||||
return $default(_that);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `map` that fallback to returning `null`.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case final Subclass value:
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _EvmGrantsState value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to an `orElse` callback.
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return orElse();
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( List<GrantEntry> grants, bool showRevoked)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that.grants,_that.showRevoked);case _:
|
||||
return orElse();
|
||||
|
||||
}
|
||||
}
|
||||
/// A `switch`-like method, using callbacks.
|
||||
///
|
||||
/// As opposed to `map`, this offers destructuring.
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case Subclass2(:final field2):
|
||||
/// return ...;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( List<GrantEntry> grants, bool showRevoked) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState():
|
||||
return $default(_that.grants,_that.showRevoked);case _:
|
||||
throw StateError('Unexpected subclass');
|
||||
|
||||
}
|
||||
}
|
||||
/// A variant of `when` that fallback to returning `null`
|
||||
///
|
||||
/// It is equivalent to doing:
|
||||
/// ```dart
|
||||
/// switch (sealedClass) {
|
||||
/// case Subclass(:final field):
|
||||
/// return ...;
|
||||
/// case _:
|
||||
/// return null;
|
||||
/// }
|
||||
/// ```
|
||||
|
||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( List<GrantEntry> grants, bool showRevoked)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _EvmGrantsState() when $default != null:
|
||||
return $default(_that.grants,_that.showRevoked);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
||||
|
||||
class _EvmGrantsState extends EvmGrantsState {
|
||||
const _EvmGrantsState({required final List<GrantEntry> grants, this.showRevoked = false}): _grants = grants,super._();
|
||||
|
||||
|
||||
final List<GrantEntry> _grants;
|
||||
@override List<GrantEntry> get grants {
|
||||
if (_grants is EqualUnmodifiableListView) return _grants;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableListView(_grants);
|
||||
}
|
||||
|
||||
@override@JsonKey() final bool showRevoked;
|
||||
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$EvmGrantsStateCopyWith<_EvmGrantsState> get copyWith => __$EvmGrantsStateCopyWithImpl<_EvmGrantsState>(this, _$identity);
|
||||
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _EvmGrantsState&&const DeepCollectionEquality().equals(other._grants, _grants)&&(identical(other.showRevoked, showRevoked) || other.showRevoked == showRevoked));
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(_grants),showRevoked);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'EvmGrantsState(grants: $grants, showRevoked: $showRevoked)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$EvmGrantsStateCopyWith<$Res> implements $EvmGrantsStateCopyWith<$Res> {
|
||||
factory _$EvmGrantsStateCopyWith(_EvmGrantsState value, $Res Function(_EvmGrantsState) _then) = __$EvmGrantsStateCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
List<GrantEntry> grants, bool showRevoked
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$EvmGrantsStateCopyWithImpl<$Res>
|
||||
implements _$EvmGrantsStateCopyWith<$Res> {
|
||||
__$EvmGrantsStateCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _EvmGrantsState _self;
|
||||
final $Res Function(_EvmGrantsState) _then;
|
||||
|
||||
/// Create a copy of EvmGrantsState
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? grants = null,Object? showRevoked = null,}) {
|
||||
return _then(_EvmGrantsState(
|
||||
grants: null == grants ? _self._grants : grants // ignore: cast_nullable_to_non_nullable
|
||||
as List<GrantEntry>,showRevoked: null == showRevoked ? _self.showRevoked : showRevoked // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'evm_grants.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(EvmGrants)
|
||||
final evmGrantsProvider = EvmGrantsProvider._();
|
||||
|
||||
final class EvmGrantsProvider
|
||||
extends $AsyncNotifierProvider<EvmGrants, EvmGrantsState?> {
|
||||
EvmGrantsProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'evmGrantsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$evmGrantsHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
EvmGrants create() => EvmGrants();
|
||||
}
|
||||
|
||||
String _$evmGrantsHash() => r'd71ec12bbc1b412f11fdbaae27382b289f8a3538';
|
||||
|
||||
abstract class _$EvmGrants extends $AsyncNotifier<EvmGrantsState?> {
|
||||
FutureOr<EvmGrantsState?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<AsyncValue<EvmGrantsState?>, EvmGrantsState?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<EvmGrantsState?>, EvmGrantsState?>,
|
||||
AsyncValue<EvmGrantsState?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'evm_grants.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(EvmGrants)
|
||||
final evmGrantsProvider = EvmGrantsProvider._();
|
||||
|
||||
final class EvmGrantsProvider
|
||||
extends $AsyncNotifierProvider<EvmGrants, EvmGrantsState?> {
|
||||
EvmGrantsProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'evmGrantsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$evmGrantsHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
EvmGrants create() => EvmGrants();
|
||||
}
|
||||
|
||||
String _$evmGrantsHash() => r'd71ec12bbc1b412f11fdbaae27382b289f8a3538';
|
||||
|
||||
abstract class _$EvmGrants extends $AsyncNotifier<EvmGrantsState?> {
|
||||
FutureOr<EvmGrantsState?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<AsyncValue<EvmGrantsState?>, EvmGrantsState?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<EvmGrantsState?>, EvmGrantsState?>,
|
||||
AsyncValue<EvmGrantsState?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,59 +1,59 @@
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:arbiter/features/identity/pk_manager.dart';
|
||||
import 'package:arbiter/features/identity/hazmat_mldsa.dart';
|
||||
|
||||
part 'key.g.dart';
|
||||
|
||||
@riverpod
|
||||
KeyManager keyManager(Ref ref) {
|
||||
return HazmatMLDSAManager();
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class Key extends _$Key {
|
||||
@override
|
||||
Future<KeyHandle?> build() async {
|
||||
final manager = ref.watch(keyManagerProvider);
|
||||
final keyHandle = await manager.get();
|
||||
return keyHandle;
|
||||
}
|
||||
|
||||
Future<void> create() async {
|
||||
final manager = ref.watch(keyManagerProvider);
|
||||
if (state.value != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
state = await AsyncValue.guard(() async {
|
||||
final newKeyHandle = await manager.create();
|
||||
return newKeyHandle;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class KeyBootstrapper implements StageFactory {
|
||||
final ProviderContainer ref;
|
||||
|
||||
KeyBootstrapper({required this.ref});
|
||||
|
||||
@override
|
||||
String get title => "Setting up your identity";
|
||||
|
||||
@override
|
||||
Future<bool> get isAlreadyCompleted async {
|
||||
final key = await ref.read(keyProvider.future);
|
||||
return key != null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> start(StageController controller) async {
|
||||
controller.setIndefiniteProgress();
|
||||
final key = ref.read(keyProvider.notifier);
|
||||
|
||||
await key.create();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {}
|
||||
}
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:arbiter/features/identity/pk_manager.dart';
|
||||
import 'package:arbiter/features/identity/hazmat_mldsa.dart';
|
||||
|
||||
part 'key.g.dart';
|
||||
|
||||
@riverpod
|
||||
KeyManager keyManager(Ref ref) {
|
||||
return HazmatMLDSAManager();
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class Key extends _$Key {
|
||||
@override
|
||||
Future<KeyHandle?> build() async {
|
||||
final manager = ref.watch(keyManagerProvider);
|
||||
final keyHandle = await manager.get();
|
||||
return keyHandle;
|
||||
}
|
||||
|
||||
Future<void> create() async {
|
||||
final manager = ref.watch(keyManagerProvider);
|
||||
if (state.value != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
state = await AsyncValue.guard(() async {
|
||||
final newKeyHandle = await manager.create();
|
||||
return newKeyHandle;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class KeyBootstrapper implements StageFactory {
|
||||
final ProviderContainer ref;
|
||||
|
||||
KeyBootstrapper({required this.ref});
|
||||
|
||||
@override
|
||||
String get title => "Setting up your identity";
|
||||
|
||||
@override
|
||||
Future<bool> get isAlreadyCompleted async {
|
||||
final key = await ref.read(keyProvider.future);
|
||||
return key != null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> start(StageController controller) async {
|
||||
controller.setIndefiniteProgress();
|
||||
final key = ref.read(keyProvider.notifier);
|
||||
|
||||
await key.create();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {}
|
||||
}
|
||||
|
||||
@@ -1,94 +1,94 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'key.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(keyManager)
|
||||
final keyManagerProvider = KeyManagerProvider._();
|
||||
|
||||
final class KeyManagerProvider
|
||||
extends $FunctionalProvider<KeyManager, KeyManager, KeyManager>
|
||||
with $Provider<KeyManager> {
|
||||
KeyManagerProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'keyManagerProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$keyManagerHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<KeyManager> $createElement($ProviderPointer pointer) =>
|
||||
$ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
KeyManager create(Ref ref) {
|
||||
return keyManager(ref);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(KeyManager value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<KeyManager>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$keyManagerHash() => r'aa37bca34c01a39c11e29d57e320172b37c0b116';
|
||||
|
||||
@ProviderFor(Key)
|
||||
final keyProvider = KeyProvider._();
|
||||
|
||||
final class KeyProvider extends $AsyncNotifierProvider<Key, KeyHandle?> {
|
||||
KeyProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'keyProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$keyHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
Key create() => Key();
|
||||
}
|
||||
|
||||
String _$keyHash() => r'37b209825067adadbb75fe0b4ce936ea1c201dc8';
|
||||
|
||||
abstract class _$Key extends $AsyncNotifier<KeyHandle?> {
|
||||
FutureOr<KeyHandle?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<AsyncValue<KeyHandle?>, KeyHandle?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<KeyHandle?>, KeyHandle?>,
|
||||
AsyncValue<KeyHandle?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'key.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(keyManager)
|
||||
final keyManagerProvider = KeyManagerProvider._();
|
||||
|
||||
final class KeyManagerProvider
|
||||
extends $FunctionalProvider<KeyManager, KeyManager, KeyManager>
|
||||
with $Provider<KeyManager> {
|
||||
KeyManagerProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'keyManagerProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$keyManagerHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<KeyManager> $createElement($ProviderPointer pointer) =>
|
||||
$ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
KeyManager create(Ref ref) {
|
||||
return keyManager(ref);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(KeyManager value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<KeyManager>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$keyManagerHash() => r'aa37bca34c01a39c11e29d57e320172b37c0b116';
|
||||
|
||||
@ProviderFor(Key)
|
||||
final keyProvider = KeyProvider._();
|
||||
|
||||
final class KeyProvider extends $AsyncNotifierProvider<Key, KeyHandle?> {
|
||||
KeyProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'keyProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$keyHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
Key create() => Key();
|
||||
}
|
||||
|
||||
String _$keyHash() => r'37b209825067adadbb75fe0b4ce936ea1c201dc8';
|
||||
|
||||
abstract class _$Key extends $AsyncNotifier<KeyHandle?> {
|
||||
FutureOr<KeyHandle?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref = this.ref as $Ref<AsyncValue<KeyHandle?>, KeyHandle?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<KeyHandle?>, KeyHandle?>,
|
||||
AsyncValue<KeyHandle?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
||||
import 'package:arbiter/providers/sdk_clients/list.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'details.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<ua_sdk.Entry?> clientDetails(Ref ref, int clientId) async {
|
||||
final clients = await ref.watch(sdkClientsProvider.future);
|
||||
if (clients == null) {
|
||||
return null;
|
||||
}
|
||||
for (final client in clients) {
|
||||
if (client.id == clientId) {
|
||||
return client;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
||||
import 'package:arbiter/providers/sdk_clients/list.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'details.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<ua_sdk.Entry?> clientDetails(Ref ref, int clientId) async {
|
||||
final clients = await ref.watch(sdkClientsProvider.future);
|
||||
if (clients == null) {
|
||||
return null;
|
||||
}
|
||||
for (final client in clients) {
|
||||
if (client.id == clientId) {
|
||||
return client;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'details.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(clientDetails)
|
||||
final clientDetailsProvider = ClientDetailsFamily._();
|
||||
|
||||
final class ClientDetailsProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<ua_sdk.Entry?>,
|
||||
ua_sdk.Entry?,
|
||||
FutureOr<ua_sdk.Entry?>
|
||||
>
|
||||
with $FutureModifier<ua_sdk.Entry?>, $FutureProvider<ua_sdk.Entry?> {
|
||||
ClientDetailsProvider._({
|
||||
required ClientDetailsFamily super.from,
|
||||
required int super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'clientDetailsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientDetailsHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'clientDetailsProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<ua_sdk.Entry?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<ua_sdk.Entry?> create(Ref ref) {
|
||||
final argument = this.argument as int;
|
||||
return clientDetails(ref, argument);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ClientDetailsProvider && other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientDetailsHash() => r'907fd39230cc630dcaad3bbe924f343a84a2375e';
|
||||
|
||||
final class ClientDetailsFamily extends $Family
|
||||
with $FunctionalFamilyOverride<FutureOr<ua_sdk.Entry?>, int> {
|
||||
ClientDetailsFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'clientDetailsProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ClientDetailsProvider call(int clientId) =>
|
||||
ClientDetailsProvider._(argument: clientId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'clientDetailsProvider';
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'details.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(clientDetails)
|
||||
final clientDetailsProvider = ClientDetailsFamily._();
|
||||
|
||||
final class ClientDetailsProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<ua_sdk.Entry?>,
|
||||
ua_sdk.Entry?,
|
||||
FutureOr<ua_sdk.Entry?>
|
||||
>
|
||||
with $FutureModifier<ua_sdk.Entry?>, $FutureProvider<ua_sdk.Entry?> {
|
||||
ClientDetailsProvider._({
|
||||
required ClientDetailsFamily super.from,
|
||||
required int super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'clientDetailsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientDetailsHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'clientDetailsProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<ua_sdk.Entry?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<ua_sdk.Entry?> create(Ref ref) {
|
||||
final argument = this.argument as int;
|
||||
return clientDetails(ref, argument);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ClientDetailsProvider && other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientDetailsHash() => r'907fd39230cc630dcaad3bbe924f343a84a2375e';
|
||||
|
||||
final class ClientDetailsFamily extends $Family
|
||||
with $FunctionalFamilyOverride<FutureOr<ua_sdk.Entry?>, int> {
|
||||
ClientDetailsFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'clientDetailsProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ClientDetailsProvider call(int clientId) =>
|
||||
ClientDetailsProvider._(argument: clientId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'clientDetailsProvider';
|
||||
}
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'list.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<List<ua_sdk.Entry>?> sdkClients(Ref ref) async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final resp = await connection.ask(
|
||||
UserAgentRequest(sdkClient: ua_sdk.Request(list: Empty())),
|
||||
);
|
||||
|
||||
if (!resp.hasSdkClient()) {
|
||||
throw Exception('Expected SDK client response, got ${resp.whichPayload()}');
|
||||
}
|
||||
final sdkClientResponse = resp.sdkClient;
|
||||
if (!sdkClientResponse.hasList()) {
|
||||
throw Exception(
|
||||
'Expected SDK client list response, got ${sdkClientResponse.whichPayload()}',
|
||||
);
|
||||
}
|
||||
final result = sdkClientResponse.list;
|
||||
|
||||
switch (result.whichResult()) {
|
||||
case ua_sdk.ListResponse_Result.clients:
|
||||
return result.clients.clients.toList(growable: false);
|
||||
case ua_sdk.ListResponse_Result.error:
|
||||
throw Exception('Error listing SDK clients: ${result.error}');
|
||||
case ua_sdk.ListResponse_Result.notSet:
|
||||
throw Exception('SDK client list response was empty.');
|
||||
}
|
||||
}
|
||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'list.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<List<ua_sdk.Entry>?> sdkClients(Ref ref) async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final resp = await connection.ask(
|
||||
UserAgentRequest(sdkClient: ua_sdk.Request(list: Empty())),
|
||||
);
|
||||
|
||||
if (!resp.hasSdkClient()) {
|
||||
throw Exception('Expected SDK client response, got ${resp.whichPayload()}');
|
||||
}
|
||||
final sdkClientResponse = resp.sdkClient;
|
||||
if (!sdkClientResponse.hasList()) {
|
||||
throw Exception(
|
||||
'Expected SDK client list response, got ${sdkClientResponse.whichPayload()}',
|
||||
);
|
||||
}
|
||||
final result = sdkClientResponse.list;
|
||||
|
||||
switch (result.whichResult()) {
|
||||
case ua_sdk.ListResponse_Result.clients:
|
||||
return result.clients.clients.toList(growable: false);
|
||||
case ua_sdk.ListResponse_Result.error:
|
||||
throw Exception('Error listing SDK clients: ${result.error}');
|
||||
case ua_sdk.ListResponse_Result.notSet:
|
||||
throw Exception('SDK client list response was empty.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +1,51 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'list.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(sdkClients)
|
||||
final sdkClientsProvider = SdkClientsProvider._();
|
||||
|
||||
final class SdkClientsProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<List<ua_sdk.Entry>?>,
|
||||
List<ua_sdk.Entry>?,
|
||||
FutureOr<List<ua_sdk.Entry>?>
|
||||
>
|
||||
with
|
||||
$FutureModifier<List<ua_sdk.Entry>?>,
|
||||
$FutureProvider<List<ua_sdk.Entry>?> {
|
||||
SdkClientsProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'sdkClientsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$sdkClientsHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<List<ua_sdk.Entry>?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<List<ua_sdk.Entry>?> create(Ref ref) {
|
||||
return sdkClients(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$sdkClientsHash() => r'9b966083effea11035d6edde379e71cc2a0f85c0';
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'list.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(sdkClients)
|
||||
final sdkClientsProvider = SdkClientsProvider._();
|
||||
|
||||
final class SdkClientsProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<List<ua_sdk.Entry>?>,
|
||||
List<ua_sdk.Entry>?,
|
||||
FutureOr<List<ua_sdk.Entry>?>
|
||||
>
|
||||
with
|
||||
$FutureModifier<List<ua_sdk.Entry>?>,
|
||||
$FutureProvider<List<ua_sdk.Entry>?> {
|
||||
SdkClientsProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'sdkClientsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$sdkClientsHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<List<ua_sdk.Entry>?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<List<ua_sdk.Entry>?> create(Ref ref) {
|
||||
return sdkClients(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$sdkClientsHash() => r'9b966083effea11035d6edde379e71cc2a0f85c0';
|
||||
|
||||
@@ -1,174 +1,174 @@
|
||||
import 'package:arbiter/features/connection/evm/wallet_access.dart';
|
||||
import 'package:arbiter/proto/evm.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:arbiter/providers/evm/evm.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'wallet_access.g.dart';
|
||||
|
||||
class ClientWalletOption {
|
||||
const ClientWalletOption({required this.walletId, required this.address});
|
||||
|
||||
final int walletId;
|
||||
final String address;
|
||||
}
|
||||
|
||||
class ClientWalletAccessState {
|
||||
const ClientWalletAccessState({
|
||||
this.searchQuery = '',
|
||||
this.originalWalletIds = const {},
|
||||
this.selectedWalletIds = const {},
|
||||
});
|
||||
|
||||
final String searchQuery;
|
||||
final Set<int> originalWalletIds;
|
||||
final Set<int> selectedWalletIds;
|
||||
|
||||
bool get hasChanges => !setEquals(originalWalletIds, selectedWalletIds);
|
||||
|
||||
ClientWalletAccessState copyWith({
|
||||
String? searchQuery,
|
||||
Set<int>? originalWalletIds,
|
||||
Set<int>? selectedWalletIds,
|
||||
}) {
|
||||
return ClientWalletAccessState(
|
||||
searchQuery: searchQuery ?? this.searchQuery,
|
||||
originalWalletIds: originalWalletIds ?? this.originalWalletIds,
|
||||
selectedWalletIds: selectedWalletIds ?? this.selectedWalletIds,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
final saveClientWalletAccessMutation = Mutation<void>();
|
||||
|
||||
abstract class ClientWalletAccessRepository {
|
||||
Future<Set<int>> fetchSelectedWalletIds(int clientId);
|
||||
Future<void> saveSelectedWalletIds(int clientId, Set<int> walletIds);
|
||||
}
|
||||
|
||||
class ServerClientWalletAccessRepository
|
||||
implements ClientWalletAccessRepository {
|
||||
ServerClientWalletAccessRepository(this.ref);
|
||||
|
||||
final Ref ref;
|
||||
|
||||
@override
|
||||
Future<Set<int>> fetchSelectedWalletIds(int clientId) async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
return readClientWalletAccess(connection, clientId: clientId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> saveSelectedWalletIds(int clientId, Set<int> walletIds) async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
await writeClientWalletAccess(
|
||||
connection,
|
||||
clientId: clientId,
|
||||
walletIds: walletIds,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
ClientWalletAccessRepository clientWalletAccessRepository(Ref ref) {
|
||||
return ServerClientWalletAccessRepository(ref);
|
||||
}
|
||||
|
||||
@riverpod
|
||||
Future<List<ClientWalletOption>> clientWalletOptions(Ref ref) async {
|
||||
final wallets = await ref.watch(evmProvider.future) ?? const <WalletEntry>[];
|
||||
return [
|
||||
for (var index = 0; index < wallets.length; index++)
|
||||
ClientWalletOption(
|
||||
walletId: index + 1,
|
||||
address: formatWalletAddress(wallets[index].address),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@riverpod
|
||||
Future<Set<int>> clientWalletAccessSelection(Ref ref, int clientId) async {
|
||||
final repository = ref.watch(clientWalletAccessRepositoryProvider);
|
||||
return repository.fetchSelectedWalletIds(clientId);
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class ClientWalletAccessController extends _$ClientWalletAccessController {
|
||||
@override
|
||||
ClientWalletAccessState build(int clientId) {
|
||||
final selection = ref.read(clientWalletAccessSelectionProvider(clientId));
|
||||
|
||||
void sync(AsyncValue<Set<int>> value) {
|
||||
value.when(data: hydrate, error: (_, _) {}, loading: () {});
|
||||
}
|
||||
|
||||
ref.listen<AsyncValue<Set<int>>>(
|
||||
clientWalletAccessSelectionProvider(clientId),
|
||||
(_, next) => sync(next),
|
||||
);
|
||||
return selection.when(
|
||||
data: (walletIds) => ClientWalletAccessState(
|
||||
originalWalletIds: Set.of(walletIds),
|
||||
selectedWalletIds: Set.of(walletIds),
|
||||
),
|
||||
error: (error, _) => const ClientWalletAccessState(),
|
||||
loading: () => const ClientWalletAccessState(),
|
||||
);
|
||||
}
|
||||
|
||||
void hydrate(Set<int> selectedWalletIds) {
|
||||
state = state.copyWith(
|
||||
originalWalletIds: Set.of(selectedWalletIds),
|
||||
selectedWalletIds: Set.of(selectedWalletIds),
|
||||
);
|
||||
}
|
||||
|
||||
void setSearchQuery(String value) {
|
||||
state = state.copyWith(searchQuery: value);
|
||||
}
|
||||
|
||||
void toggleWallet(int walletId) {
|
||||
final next = Set<int>.of(state.selectedWalletIds);
|
||||
if (!next.add(walletId)) {
|
||||
next.remove(walletId);
|
||||
}
|
||||
state = state.copyWith(selectedWalletIds: next);
|
||||
}
|
||||
|
||||
void discardChanges() {
|
||||
state = state.copyWith(selectedWalletIds: Set.of(state.originalWalletIds));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> executeSaveClientWalletAccess(
|
||||
MutationTarget ref, {
|
||||
required int clientId,
|
||||
}) {
|
||||
final mutation = saveClientWalletAccessMutation(clientId);
|
||||
return mutation.run(ref, (tsx) async {
|
||||
final repository = tsx.get(clientWalletAccessRepositoryProvider);
|
||||
final controller = tsx.get(
|
||||
clientWalletAccessControllerProvider(clientId).notifier,
|
||||
);
|
||||
final selectedWalletIds = tsx
|
||||
.get(clientWalletAccessControllerProvider(clientId))
|
||||
.selectedWalletIds;
|
||||
await repository.saveSelectedWalletIds(clientId, selectedWalletIds);
|
||||
controller.hydrate(selectedWalletIds);
|
||||
});
|
||||
}
|
||||
|
||||
String formatWalletAddress(List<int> bytes) {
|
||||
final hex = bytes
|
||||
.map((byte) => byte.toRadixString(16).padLeft(2, '0'))
|
||||
.join();
|
||||
return '0x$hex';
|
||||
}
|
||||
import 'package:arbiter/features/connection/evm/wallet_access.dart';
|
||||
import 'package:arbiter/proto/evm.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:arbiter/providers/evm/evm.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:hooks_riverpod/experimental/mutation.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'wallet_access.g.dart';
|
||||
|
||||
class ClientWalletOption {
|
||||
const ClientWalletOption({required this.walletId, required this.address});
|
||||
|
||||
final int walletId;
|
||||
final String address;
|
||||
}
|
||||
|
||||
class ClientWalletAccessState {
|
||||
const ClientWalletAccessState({
|
||||
this.searchQuery = '',
|
||||
this.originalWalletIds = const {},
|
||||
this.selectedWalletIds = const {},
|
||||
});
|
||||
|
||||
final String searchQuery;
|
||||
final Set<int> originalWalletIds;
|
||||
final Set<int> selectedWalletIds;
|
||||
|
||||
bool get hasChanges => !setEquals(originalWalletIds, selectedWalletIds);
|
||||
|
||||
ClientWalletAccessState copyWith({
|
||||
String? searchQuery,
|
||||
Set<int>? originalWalletIds,
|
||||
Set<int>? selectedWalletIds,
|
||||
}) {
|
||||
return ClientWalletAccessState(
|
||||
searchQuery: searchQuery ?? this.searchQuery,
|
||||
originalWalletIds: originalWalletIds ?? this.originalWalletIds,
|
||||
selectedWalletIds: selectedWalletIds ?? this.selectedWalletIds,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
final saveClientWalletAccessMutation = Mutation<void>();
|
||||
|
||||
abstract class ClientWalletAccessRepository {
|
||||
Future<Set<int>> fetchSelectedWalletIds(int clientId);
|
||||
Future<void> saveSelectedWalletIds(int clientId, Set<int> walletIds);
|
||||
}
|
||||
|
||||
class ServerClientWalletAccessRepository
|
||||
implements ClientWalletAccessRepository {
|
||||
ServerClientWalletAccessRepository(this.ref);
|
||||
|
||||
final Ref ref;
|
||||
|
||||
@override
|
||||
Future<Set<int>> fetchSelectedWalletIds(int clientId) async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
return readClientWalletAccess(connection, clientId: clientId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> saveSelectedWalletIds(int clientId, Set<int> walletIds) async {
|
||||
final connection = await ref.read(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
throw Exception('Not connected to the server.');
|
||||
}
|
||||
await writeClientWalletAccess(
|
||||
connection,
|
||||
clientId: clientId,
|
||||
walletIds: walletIds,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@riverpod
|
||||
ClientWalletAccessRepository clientWalletAccessRepository(Ref ref) {
|
||||
return ServerClientWalletAccessRepository(ref);
|
||||
}
|
||||
|
||||
@riverpod
|
||||
Future<List<ClientWalletOption>> clientWalletOptions(Ref ref) async {
|
||||
final wallets = await ref.watch(evmProvider.future) ?? const <WalletEntry>[];
|
||||
return [
|
||||
for (var index = 0; index < wallets.length; index++)
|
||||
ClientWalletOption(
|
||||
walletId: index + 1,
|
||||
address: formatWalletAddress(wallets[index].address),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@riverpod
|
||||
Future<Set<int>> clientWalletAccessSelection(Ref ref, int clientId) async {
|
||||
final repository = ref.watch(clientWalletAccessRepositoryProvider);
|
||||
return repository.fetchSelectedWalletIds(clientId);
|
||||
}
|
||||
|
||||
@riverpod
|
||||
class ClientWalletAccessController extends _$ClientWalletAccessController {
|
||||
@override
|
||||
ClientWalletAccessState build(int clientId) {
|
||||
final selection = ref.read(clientWalletAccessSelectionProvider(clientId));
|
||||
|
||||
void sync(AsyncValue<Set<int>> value) {
|
||||
value.when(data: hydrate, error: (_, _) {}, loading: () {});
|
||||
}
|
||||
|
||||
ref.listen<AsyncValue<Set<int>>>(
|
||||
clientWalletAccessSelectionProvider(clientId),
|
||||
(_, next) => sync(next),
|
||||
);
|
||||
return selection.when(
|
||||
data: (walletIds) => ClientWalletAccessState(
|
||||
originalWalletIds: Set.of(walletIds),
|
||||
selectedWalletIds: Set.of(walletIds),
|
||||
),
|
||||
error: (error, _) => const ClientWalletAccessState(),
|
||||
loading: () => const ClientWalletAccessState(),
|
||||
);
|
||||
}
|
||||
|
||||
void hydrate(Set<int> selectedWalletIds) {
|
||||
state = state.copyWith(
|
||||
originalWalletIds: Set.of(selectedWalletIds),
|
||||
selectedWalletIds: Set.of(selectedWalletIds),
|
||||
);
|
||||
}
|
||||
|
||||
void setSearchQuery(String value) {
|
||||
state = state.copyWith(searchQuery: value);
|
||||
}
|
||||
|
||||
void toggleWallet(int walletId) {
|
||||
final next = Set<int>.of(state.selectedWalletIds);
|
||||
if (!next.add(walletId)) {
|
||||
next.remove(walletId);
|
||||
}
|
||||
state = state.copyWith(selectedWalletIds: next);
|
||||
}
|
||||
|
||||
void discardChanges() {
|
||||
state = state.copyWith(selectedWalletIds: Set.of(state.originalWalletIds));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> executeSaveClientWalletAccess(
|
||||
MutationTarget ref, {
|
||||
required int clientId,
|
||||
}) {
|
||||
final mutation = saveClientWalletAccessMutation(clientId);
|
||||
return mutation.run(ref, (tsx) async {
|
||||
final repository = tsx.get(clientWalletAccessRepositoryProvider);
|
||||
final controller = tsx.get(
|
||||
clientWalletAccessControllerProvider(clientId).notifier,
|
||||
);
|
||||
final selectedWalletIds = tsx
|
||||
.get(clientWalletAccessControllerProvider(clientId))
|
||||
.selectedWalletIds;
|
||||
await repository.saveSelectedWalletIds(clientId, selectedWalletIds);
|
||||
controller.hydrate(selectedWalletIds);
|
||||
});
|
||||
}
|
||||
|
||||
String formatWalletAddress(List<int> bytes) {
|
||||
final hex = bytes
|
||||
.map((byte) => byte.toRadixString(16).padLeft(2, '0'))
|
||||
.join();
|
||||
return '0x$hex';
|
||||
}
|
||||
|
||||
@@ -1,280 +1,280 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wallet_access.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(clientWalletAccessRepository)
|
||||
final clientWalletAccessRepositoryProvider =
|
||||
ClientWalletAccessRepositoryProvider._();
|
||||
|
||||
final class ClientWalletAccessRepositoryProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
ClientWalletAccessRepository,
|
||||
ClientWalletAccessRepository,
|
||||
ClientWalletAccessRepository
|
||||
>
|
||||
with $Provider<ClientWalletAccessRepository> {
|
||||
ClientWalletAccessRepositoryProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'clientWalletAccessRepositoryProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletAccessRepositoryHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<ClientWalletAccessRepository> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
ClientWalletAccessRepository create(Ref ref) {
|
||||
return clientWalletAccessRepository(ref);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(ClientWalletAccessRepository value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<ClientWalletAccessRepository>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletAccessRepositoryHash() =>
|
||||
r'bbc332284bc36a8b5d807bd5c45362b6b12b19e7';
|
||||
|
||||
@ProviderFor(clientWalletOptions)
|
||||
final clientWalletOptionsProvider = ClientWalletOptionsProvider._();
|
||||
|
||||
final class ClientWalletOptionsProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<List<ClientWalletOption>>,
|
||||
List<ClientWalletOption>,
|
||||
FutureOr<List<ClientWalletOption>>
|
||||
>
|
||||
with
|
||||
$FutureModifier<List<ClientWalletOption>>,
|
||||
$FutureProvider<List<ClientWalletOption>> {
|
||||
ClientWalletOptionsProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'clientWalletOptionsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletOptionsHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<List<ClientWalletOption>> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<List<ClientWalletOption>> create(Ref ref) {
|
||||
return clientWalletOptions(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletOptionsHash() =>
|
||||
r'32183c2b281e2a41400de07f2381132a706815ab';
|
||||
|
||||
@ProviderFor(clientWalletAccessSelection)
|
||||
final clientWalletAccessSelectionProvider =
|
||||
ClientWalletAccessSelectionFamily._();
|
||||
|
||||
final class ClientWalletAccessSelectionProvider
|
||||
extends
|
||||
$FunctionalProvider<AsyncValue<Set<int>>, Set<int>, FutureOr<Set<int>>>
|
||||
with $FutureModifier<Set<int>>, $FutureProvider<Set<int>> {
|
||||
ClientWalletAccessSelectionProvider._({
|
||||
required ClientWalletAccessSelectionFamily super.from,
|
||||
required int super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessSelectionProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletAccessSelectionHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'clientWalletAccessSelectionProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<Set<int>> $createElement($ProviderPointer pointer) =>
|
||||
$FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<Set<int>> create(Ref ref) {
|
||||
final argument = this.argument as int;
|
||||
return clientWalletAccessSelection(ref, argument);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ClientWalletAccessSelectionProvider &&
|
||||
other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletAccessSelectionHash() =>
|
||||
r'f33705ee7201cd9b899cc058d6642de85a22b03e';
|
||||
|
||||
final class ClientWalletAccessSelectionFamily extends $Family
|
||||
with $FunctionalFamilyOverride<FutureOr<Set<int>>, int> {
|
||||
ClientWalletAccessSelectionFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessSelectionProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ClientWalletAccessSelectionProvider call(int clientId) =>
|
||||
ClientWalletAccessSelectionProvider._(argument: clientId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'clientWalletAccessSelectionProvider';
|
||||
}
|
||||
|
||||
@ProviderFor(ClientWalletAccessController)
|
||||
final clientWalletAccessControllerProvider =
|
||||
ClientWalletAccessControllerFamily._();
|
||||
|
||||
final class ClientWalletAccessControllerProvider
|
||||
extends
|
||||
$NotifierProvider<
|
||||
ClientWalletAccessController,
|
||||
ClientWalletAccessState
|
||||
> {
|
||||
ClientWalletAccessControllerProvider._({
|
||||
required ClientWalletAccessControllerFamily super.from,
|
||||
required int super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessControllerProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletAccessControllerHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'clientWalletAccessControllerProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
ClientWalletAccessController create() => ClientWalletAccessController();
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(ClientWalletAccessState value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<ClientWalletAccessState>(value),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ClientWalletAccessControllerProvider &&
|
||||
other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletAccessControllerHash() =>
|
||||
r'45bff81382fec3e8610190167b55667a7dfc1111';
|
||||
|
||||
final class ClientWalletAccessControllerFamily extends $Family
|
||||
with
|
||||
$ClassFamilyOverride<
|
||||
ClientWalletAccessController,
|
||||
ClientWalletAccessState,
|
||||
ClientWalletAccessState,
|
||||
ClientWalletAccessState,
|
||||
int
|
||||
> {
|
||||
ClientWalletAccessControllerFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessControllerProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ClientWalletAccessControllerProvider call(int clientId) =>
|
||||
ClientWalletAccessControllerProvider._(argument: clientId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'clientWalletAccessControllerProvider';
|
||||
}
|
||||
|
||||
abstract class _$ClientWalletAccessController
|
||||
extends $Notifier<ClientWalletAccessState> {
|
||||
late final _$args = ref.$arg as int;
|
||||
int get clientId => _$args;
|
||||
|
||||
ClientWalletAccessState build(int clientId);
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref =
|
||||
this.ref as $Ref<ClientWalletAccessState, ClientWalletAccessState>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<ClientWalletAccessState, ClientWalletAccessState>,
|
||||
ClientWalletAccessState,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, () => build(_$args));
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wallet_access.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(clientWalletAccessRepository)
|
||||
final clientWalletAccessRepositoryProvider =
|
||||
ClientWalletAccessRepositoryProvider._();
|
||||
|
||||
final class ClientWalletAccessRepositoryProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
ClientWalletAccessRepository,
|
||||
ClientWalletAccessRepository,
|
||||
ClientWalletAccessRepository
|
||||
>
|
||||
with $Provider<ClientWalletAccessRepository> {
|
||||
ClientWalletAccessRepositoryProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'clientWalletAccessRepositoryProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletAccessRepositoryHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<ClientWalletAccessRepository> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
ClientWalletAccessRepository create(Ref ref) {
|
||||
return clientWalletAccessRepository(ref);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(ClientWalletAccessRepository value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<ClientWalletAccessRepository>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletAccessRepositoryHash() =>
|
||||
r'bbc332284bc36a8b5d807bd5c45362b6b12b19e7';
|
||||
|
||||
@ProviderFor(clientWalletOptions)
|
||||
final clientWalletOptionsProvider = ClientWalletOptionsProvider._();
|
||||
|
||||
final class ClientWalletOptionsProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<List<ClientWalletOption>>,
|
||||
List<ClientWalletOption>,
|
||||
FutureOr<List<ClientWalletOption>>
|
||||
>
|
||||
with
|
||||
$FutureModifier<List<ClientWalletOption>>,
|
||||
$FutureProvider<List<ClientWalletOption>> {
|
||||
ClientWalletOptionsProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'clientWalletOptionsProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletOptionsHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<List<ClientWalletOption>> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<List<ClientWalletOption>> create(Ref ref) {
|
||||
return clientWalletOptions(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletOptionsHash() =>
|
||||
r'32183c2b281e2a41400de07f2381132a706815ab';
|
||||
|
||||
@ProviderFor(clientWalletAccessSelection)
|
||||
final clientWalletAccessSelectionProvider =
|
||||
ClientWalletAccessSelectionFamily._();
|
||||
|
||||
final class ClientWalletAccessSelectionProvider
|
||||
extends
|
||||
$FunctionalProvider<AsyncValue<Set<int>>, Set<int>, FutureOr<Set<int>>>
|
||||
with $FutureModifier<Set<int>>, $FutureProvider<Set<int>> {
|
||||
ClientWalletAccessSelectionProvider._({
|
||||
required ClientWalletAccessSelectionFamily super.from,
|
||||
required int super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessSelectionProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletAccessSelectionHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'clientWalletAccessSelectionProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<Set<int>> $createElement($ProviderPointer pointer) =>
|
||||
$FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<Set<int>> create(Ref ref) {
|
||||
final argument = this.argument as int;
|
||||
return clientWalletAccessSelection(ref, argument);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ClientWalletAccessSelectionProvider &&
|
||||
other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletAccessSelectionHash() =>
|
||||
r'f33705ee7201cd9b899cc058d6642de85a22b03e';
|
||||
|
||||
final class ClientWalletAccessSelectionFamily extends $Family
|
||||
with $FunctionalFamilyOverride<FutureOr<Set<int>>, int> {
|
||||
ClientWalletAccessSelectionFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessSelectionProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ClientWalletAccessSelectionProvider call(int clientId) =>
|
||||
ClientWalletAccessSelectionProvider._(argument: clientId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'clientWalletAccessSelectionProvider';
|
||||
}
|
||||
|
||||
@ProviderFor(ClientWalletAccessController)
|
||||
final clientWalletAccessControllerProvider =
|
||||
ClientWalletAccessControllerFamily._();
|
||||
|
||||
final class ClientWalletAccessControllerProvider
|
||||
extends
|
||||
$NotifierProvider<
|
||||
ClientWalletAccessController,
|
||||
ClientWalletAccessState
|
||||
> {
|
||||
ClientWalletAccessControllerProvider._({
|
||||
required ClientWalletAccessControllerFamily super.from,
|
||||
required int super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessControllerProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$clientWalletAccessControllerHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'clientWalletAccessControllerProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
ClientWalletAccessController create() => ClientWalletAccessController();
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(ClientWalletAccessState value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<ClientWalletAccessState>(value),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ClientWalletAccessControllerProvider &&
|
||||
other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$clientWalletAccessControllerHash() =>
|
||||
r'45bff81382fec3e8610190167b55667a7dfc1111';
|
||||
|
||||
final class ClientWalletAccessControllerFamily extends $Family
|
||||
with
|
||||
$ClassFamilyOverride<
|
||||
ClientWalletAccessController,
|
||||
ClientWalletAccessState,
|
||||
ClientWalletAccessState,
|
||||
ClientWalletAccessState,
|
||||
int
|
||||
> {
|
||||
ClientWalletAccessControllerFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'clientWalletAccessControllerProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ClientWalletAccessControllerProvider call(int clientId) =>
|
||||
ClientWalletAccessControllerProvider._(argument: clientId, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'clientWalletAccessControllerProvider';
|
||||
}
|
||||
|
||||
abstract class _$ClientWalletAccessController
|
||||
extends $Notifier<ClientWalletAccessState> {
|
||||
late final _$args = ref.$arg as int;
|
||||
int get clientId => _$args;
|
||||
|
||||
ClientWalletAccessState build(int clientId);
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref =
|
||||
this.ref as $Ref<ClientWalletAccessState, ClientWalletAccessState>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<ClientWalletAccessState, ClientWalletAccessState>,
|
||||
ClientWalletAccessState,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, () => build(_$args));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
import 'package:arbiter/features/connection/evm/wallet_access.dart';
|
||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'wallet_access_list.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<List<ua_sdk.WalletAccessEntry>?> walletAccessList(Ref ref) async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return await listAllWalletAccesses(connection);
|
||||
} catch (e, st) {
|
||||
talker.handle(e, st);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
import 'package:arbiter/features/connection/evm/wallet_access.dart';
|
||||
import 'package:arbiter/proto/user_agent/sdk_client.pb.dart' as ua_sdk;
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'wallet_access_list.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<List<ua_sdk.WalletAccessEntry>?> walletAccessList(Ref ref) async {
|
||||
final connection = await ref.watch(connectionManagerProvider.future);
|
||||
if (connection == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return await listAllWalletAccesses(connection);
|
||||
} catch (e, st) {
|
||||
talker.handle(e, st);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +1,51 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wallet_access_list.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(walletAccessList)
|
||||
final walletAccessListProvider = WalletAccessListProvider._();
|
||||
|
||||
final class WalletAccessListProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<List<ua_sdk.WalletAccessEntry>?>,
|
||||
List<ua_sdk.WalletAccessEntry>?,
|
||||
FutureOr<List<ua_sdk.WalletAccessEntry>?>
|
||||
>
|
||||
with
|
||||
$FutureModifier<List<ua_sdk.WalletAccessEntry>?>,
|
||||
$FutureProvider<List<ua_sdk.WalletAccessEntry>?> {
|
||||
WalletAccessListProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'walletAccessListProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$walletAccessListHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<List<ua_sdk.WalletAccessEntry>?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<List<ua_sdk.WalletAccessEntry>?> create(Ref ref) {
|
||||
return walletAccessList(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$walletAccessListHash() => r'143387471489ebc36de76b2a8ddcb6d857cbad17';
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wallet_access_list.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(walletAccessList)
|
||||
final walletAccessListProvider = WalletAccessListProvider._();
|
||||
|
||||
final class WalletAccessListProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<List<ua_sdk.WalletAccessEntry>?>,
|
||||
List<ua_sdk.WalletAccessEntry>?,
|
||||
FutureOr<List<ua_sdk.WalletAccessEntry>?>
|
||||
>
|
||||
with
|
||||
$FutureModifier<List<ua_sdk.WalletAccessEntry>?>,
|
||||
$FutureProvider<List<ua_sdk.WalletAccessEntry>?> {
|
||||
WalletAccessListProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'walletAccessListProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$walletAccessListHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<List<ua_sdk.WalletAccessEntry>?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<List<ua_sdk.WalletAccessEntry>?> create(Ref ref) {
|
||||
return walletAccessList(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$walletAccessListHash() => r'143387471489ebc36de76b2a8ddcb6d857cbad17';
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
import 'package:arbiter/features/connection/server_info_storage.dart';
|
||||
import 'package:cryptography/cryptography.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'server_info.g.dart';
|
||||
|
||||
@riverpod
|
||||
ServerInfoStorage serverInfoStorage(Ref ref) {
|
||||
return const SecureServerInfoStorage();
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class ServerInfo extends _$ServerInfo {
|
||||
@override
|
||||
Future<StoredServerInfo?> build() {
|
||||
final storage = ref.watch(serverInfoStorageProvider);
|
||||
return storage.load();
|
||||
}
|
||||
|
||||
Future<void> save({
|
||||
required String address,
|
||||
required int port,
|
||||
required List<int> caCert,
|
||||
}) async {
|
||||
final storage = ref.read(serverInfoStorageProvider);
|
||||
final fingerprint = await _fingerprint(caCert);
|
||||
final serverInfo = StoredServerInfo(
|
||||
address: address,
|
||||
port: port,
|
||||
caCertFingerprint: fingerprint,
|
||||
);
|
||||
|
||||
state = await AsyncValue.guard(() async {
|
||||
await storage.save(serverInfo);
|
||||
return serverInfo;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> clear() async {
|
||||
final storage = ref.read(serverInfoStorageProvider);
|
||||
state = await AsyncValue.guard(() async {
|
||||
await storage.clear();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
Future<String> _fingerprint(List<int> caCert) async {
|
||||
final digest = await Sha256().hash(caCert);
|
||||
return digest.bytes
|
||||
.map((byte) => byte.toRadixString(16).padLeft(2, '0'))
|
||||
.join();
|
||||
}
|
||||
}
|
||||
import 'package:arbiter/features/connection/server_info_storage.dart';
|
||||
import 'package:cryptography/cryptography.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'server_info.g.dart';
|
||||
|
||||
@riverpod
|
||||
ServerInfoStorage serverInfoStorage(Ref ref) {
|
||||
return const SecureServerInfoStorage();
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class ServerInfo extends _$ServerInfo {
|
||||
@override
|
||||
Future<StoredServerInfo?> build() {
|
||||
final storage = ref.watch(serverInfoStorageProvider);
|
||||
return storage.load();
|
||||
}
|
||||
|
||||
Future<void> save({
|
||||
required String address,
|
||||
required int port,
|
||||
required List<int> caCert,
|
||||
}) async {
|
||||
final storage = ref.read(serverInfoStorageProvider);
|
||||
final fingerprint = await _fingerprint(caCert);
|
||||
final serverInfo = StoredServerInfo(
|
||||
address: address,
|
||||
port: port,
|
||||
caCertFingerprint: fingerprint,
|
||||
);
|
||||
|
||||
state = await AsyncValue.guard(() async {
|
||||
await storage.save(serverInfo);
|
||||
return serverInfo;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> clear() async {
|
||||
final storage = ref.read(serverInfoStorageProvider);
|
||||
state = await AsyncValue.guard(() async {
|
||||
await storage.clear();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
Future<String> _fingerprint(List<int> caCert) async {
|
||||
final digest = await Sha256().hash(caCert);
|
||||
return digest.bytes
|
||||
.map((byte) => byte.toRadixString(16).padLeft(2, '0'))
|
||||
.join();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,102 +1,102 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'server_info.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(serverInfoStorage)
|
||||
final serverInfoStorageProvider = ServerInfoStorageProvider._();
|
||||
|
||||
final class ServerInfoStorageProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
ServerInfoStorage,
|
||||
ServerInfoStorage,
|
||||
ServerInfoStorage
|
||||
>
|
||||
with $Provider<ServerInfoStorage> {
|
||||
ServerInfoStorageProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'serverInfoStorageProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$serverInfoStorageHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<ServerInfoStorage> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
ServerInfoStorage create(Ref ref) {
|
||||
return serverInfoStorage(ref);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(ServerInfoStorage value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<ServerInfoStorage>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$serverInfoStorageHash() => r'fc06865e7314b1a2493c5de1a9347923a3d21c5c';
|
||||
|
||||
@ProviderFor(ServerInfo)
|
||||
final serverInfoProvider = ServerInfoProvider._();
|
||||
|
||||
final class ServerInfoProvider
|
||||
extends $AsyncNotifierProvider<ServerInfo, StoredServerInfo?> {
|
||||
ServerInfoProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'serverInfoProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$serverInfoHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
ServerInfo create() => ServerInfo();
|
||||
}
|
||||
|
||||
String _$serverInfoHash() => r'6e94f52de03259695a2166b766004eec60ff45fa';
|
||||
|
||||
abstract class _$ServerInfo extends $AsyncNotifier<StoredServerInfo?> {
|
||||
FutureOr<StoredServerInfo?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref =
|
||||
this.ref as $Ref<AsyncValue<StoredServerInfo?>, StoredServerInfo?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<StoredServerInfo?>, StoredServerInfo?>,
|
||||
AsyncValue<StoredServerInfo?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'server_info.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(serverInfoStorage)
|
||||
final serverInfoStorageProvider = ServerInfoStorageProvider._();
|
||||
|
||||
final class ServerInfoStorageProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
ServerInfoStorage,
|
||||
ServerInfoStorage,
|
||||
ServerInfoStorage
|
||||
>
|
||||
with $Provider<ServerInfoStorage> {
|
||||
ServerInfoStorageProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'serverInfoStorageProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$serverInfoStorageHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$ProviderElement<ServerInfoStorage> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $ProviderElement(pointer);
|
||||
|
||||
@override
|
||||
ServerInfoStorage create(Ref ref) {
|
||||
return serverInfoStorage(ref);
|
||||
}
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(ServerInfoStorage value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<ServerInfoStorage>(value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _$serverInfoStorageHash() => r'fc06865e7314b1a2493c5de1a9347923a3d21c5c';
|
||||
|
||||
@ProviderFor(ServerInfo)
|
||||
final serverInfoProvider = ServerInfoProvider._();
|
||||
|
||||
final class ServerInfoProvider
|
||||
extends $AsyncNotifierProvider<ServerInfo, StoredServerInfo?> {
|
||||
ServerInfoProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'serverInfoProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$serverInfoHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
ServerInfo create() => ServerInfo();
|
||||
}
|
||||
|
||||
String _$serverInfoHash() => r'6e94f52de03259695a2166b766004eec60ff45fa';
|
||||
|
||||
abstract class _$ServerInfo extends $AsyncNotifier<StoredServerInfo?> {
|
||||
FutureOr<StoredServerInfo?> build();
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
final ref =
|
||||
this.ref as $Ref<AsyncValue<StoredServerInfo?>, StoredServerInfo?>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<AsyncValue<StoredServerInfo?>, StoredServerInfo?>,
|
||||
AsyncValue<StoredServerInfo?>,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleCreate(ref, build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
import 'package:arbiter/proto/shared/vault.pbenum.dart';
|
||||
import 'package:arbiter/proto/user_agent/vault/vault.pb.dart' as ua_vault;
|
||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'vault_state.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<VaultState?> vaultState(Ref ref) async {
|
||||
final conn = await ref.watch(connectionManagerProvider.future);
|
||||
if (conn == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final resp = await conn.ask(
|
||||
UserAgentRequest(vault: ua_vault.Request(queryState: Empty())),
|
||||
);
|
||||
if (!resp.hasVault()) {
|
||||
talker.warning('Expected vault state response, got ${resp.whichPayload()}');
|
||||
return null;
|
||||
}
|
||||
|
||||
final vaultResponse = resp.vault;
|
||||
if (!vaultResponse.hasState()) {
|
||||
talker.warning(
|
||||
'Expected vault state payload, got ${vaultResponse.whichPayload()}',
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
final vaultState = vaultResponse.state;
|
||||
|
||||
return vaultState;
|
||||
}
|
||||
import 'package:arbiter/proto/shared/vault.pbenum.dart';
|
||||
import 'package:arbiter/proto/user_agent/vault/vault.pb.dart' as ua_vault;
|
||||
import 'package:arbiter/proto/user_agent.pb.dart';
|
||||
import 'package:arbiter/providers/connection/connection_manager.dart';
|
||||
import 'package:mtcore/markettakers.dart';
|
||||
import 'package:protobuf/well_known_types/google/protobuf/empty.pb.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'vault_state.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<VaultState?> vaultState(Ref ref) async {
|
||||
final conn = await ref.watch(connectionManagerProvider.future);
|
||||
if (conn == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final resp = await conn.ask(
|
||||
UserAgentRequest(vault: ua_vault.Request(queryState: Empty())),
|
||||
);
|
||||
if (!resp.hasVault()) {
|
||||
talker.warning('Expected vault state response, got ${resp.whichPayload()}');
|
||||
return null;
|
||||
}
|
||||
|
||||
final vaultResponse = resp.vault;
|
||||
if (!vaultResponse.hasState()) {
|
||||
talker.warning(
|
||||
'Expected vault state payload, got ${vaultResponse.whichPayload()}',
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
final vaultState = vaultResponse.state;
|
||||
|
||||
return vaultState;
|
||||
}
|
||||
|
||||
@@ -1,49 +1,49 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'vault_state.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(vaultState)
|
||||
final vaultStateProvider = VaultStateProvider._();
|
||||
|
||||
final class VaultStateProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<VaultState?>,
|
||||
VaultState?,
|
||||
FutureOr<VaultState?>
|
||||
>
|
||||
with $FutureModifier<VaultState?>, $FutureProvider<VaultState?> {
|
||||
VaultStateProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'vaultStateProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$vaultStateHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<VaultState?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<VaultState?> create(Ref ref) {
|
||||
return vaultState(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$vaultStateHash() => r'f7247826d92ed583c475dd7f956b1ffea1f9a7da';
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'vault_state.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(vaultState)
|
||||
final vaultStateProvider = VaultStateProvider._();
|
||||
|
||||
final class VaultStateProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<VaultState?>,
|
||||
VaultState?,
|
||||
FutureOr<VaultState?>
|
||||
>
|
||||
with $FutureModifier<VaultState?>, $FutureProvider<VaultState?> {
|
||||
VaultStateProvider._()
|
||||
: super(
|
||||
from: null,
|
||||
argument: null,
|
||||
retry: null,
|
||||
name: r'vaultStateProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$vaultStateHash();
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<VaultState?> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<VaultState?> create(Ref ref) {
|
||||
return vaultState(ref);
|
||||
}
|
||||
}
|
||||
|
||||
String _$vaultStateHash() => r'f7247826d92ed583c475dd7f956b1ffea1f9a7da';
|
||||
|
||||
Reference in New Issue
Block a user