feat(useragent): initial impl

This commit is contained in:
hdbg
2026-03-04 15:27:27 +01:00
parent ccd657c9ec
commit 62c4bc5ade
78 changed files with 10635 additions and 223 deletions

View File

@@ -0,0 +1,60 @@
import 'package:hooks_riverpod/experimental/mutation.dart';
import 'package:mtcore/markettakers.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:arbiter/features/pk_manager.dart';
import 'package:arbiter/features/simple_ed25519.dart';
part 'key.g.dart';
@riverpod
KeyManager keyManager(Ref ref) {
return SimpleEd25519Manager();
}
@riverpod
class Key extends _$Key {
@override
Future<KeyHandle?> build() async {
final manager = SimpleEd25519Manager();
final keyHandle = await manager.get();
return keyHandle;
}
Future<void> create() async {
if (state.value != null) {
return;
}
state = await AsyncValue.guard(() async {
final manager = SimpleEd25519Manager();
final newKeyHandle = await manager.create();
return newKeyHandle;
});
}
}
class KeyBootstrapper implements StageFactory {
final MutationTarget ref;
KeyBootstrapper({required this.ref});
@override
String get title => "Setting up your identity";
@override
Future<bool> get isAlreadyCompleted async {
final key = await ref.container.read(keyProvider.future);
return key != null;
}
@override
Future<void> start(StageController controller) async {
controller.setIndefiniteProgress();
final key = ref.container.read(keyProvider.notifier);
await key.create();
}
@override
void dispose() {}
}

View File

@@ -0,0 +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: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$keyHash();
@$internal
@override
Key create() => Key();
}
String _$keyHash() => r'6d66204174c4d2d5c76e27f3a8de8f9a9c88a3e0';
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);
}
}