mirror of
https://gitlab.com/veilid/veilidchat.git
synced 2025-08-14 08:55:26 -04:00
big identity refactor
This commit is contained in:
parent
bae58d5f5c
commit
ddc02f6771
46 changed files with 2143 additions and 1300 deletions
|
@ -14,14 +14,18 @@ class ActiveAccountInfo {
|
|||
});
|
||||
//
|
||||
|
||||
TypedKey get superIdentityRecordKey => localAccount.superIdentity.recordKey;
|
||||
TypedKey get accountRecordKey =>
|
||||
userLogin.accountRecordInfo.accountRecord.recordKey;
|
||||
|
||||
KeyPair get conversationWriter {
|
||||
final identityKey = localAccount.identityMaster.identityPublicKey;
|
||||
final identitySecret = userLogin.identitySecret;
|
||||
return KeyPair(key: identityKey, secret: identitySecret.value);
|
||||
}
|
||||
TypedKey get identityTypedPublicKey =>
|
||||
localAccount.superIdentity.currentInstance.typedPublicKey;
|
||||
PublicKey get identityPublicKey =>
|
||||
localAccount.superIdentity.currentInstance.publicKey;
|
||||
SecretKey get identitySecretKey => userLogin.identitySecret.value;
|
||||
KeyPair get identityWriter =>
|
||||
KeyPair(key: identityPublicKey, secret: identitySecretKey);
|
||||
Future<VeilidCryptoSystem> get identityCryptoSystem =>
|
||||
localAccount.superIdentity.currentInstance.cryptoSystem;
|
||||
|
||||
Future<VeilidCrypto> makeConversationCrypto(
|
||||
TypedKey remoteIdentityPublicKey) async {
|
||||
|
|
|
@ -11,25 +11,31 @@ part 'local_account.freezed.dart';
|
|||
// Local Accounts are stored in a table locally and not backed by a DHT key
|
||||
// and represents the accounts that have been added/imported
|
||||
// on the current device.
|
||||
// Stores a copy of the IdentityMaster associated with the account
|
||||
// Stores a copy of the most recent SuperIdentity associated with the account
|
||||
// and the identitySecretKey optionally encrypted by an unlock code
|
||||
// This is the root of the account information tree for VeilidChat
|
||||
//
|
||||
@freezed
|
||||
class LocalAccount with _$LocalAccount {
|
||||
const factory LocalAccount({
|
||||
// The master key record for the account, containing the identityPublicKey
|
||||
required IdentityMaster identityMaster,
|
||||
// The encrypted identity secret that goes with
|
||||
// The super identity key record for the account,
|
||||
// containing the publicKey in the currentIdentity
|
||||
required SuperIdentity superIdentity,
|
||||
|
||||
// The encrypted currentIdentity secret that goes with
|
||||
// the identityPublicKey with appended salt
|
||||
@Uint8ListJsonConverter() required Uint8List identitySecretBytes,
|
||||
|
||||
// The kind of encryption input used on the account
|
||||
required EncryptionKeyType encryptionKeyType,
|
||||
|
||||
// If account is not hidden, password can be retrieved via
|
||||
required bool biometricsEnabled,
|
||||
|
||||
// Keep account hidden unless account password is entered
|
||||
// (tries all hidden accounts with auth method (no biometrics))
|
||||
required bool hiddenAccount,
|
||||
|
||||
// Display name for account until it is unlocked
|
||||
required String name,
|
||||
}) = _LocalAccount;
|
||||
|
|
|
@ -20,9 +20,10 @@ LocalAccount _$LocalAccountFromJson(Map<String, dynamic> json) {
|
|||
|
||||
/// @nodoc
|
||||
mixin _$LocalAccount {
|
||||
// The master key record for the account, containing the identityPublicKey
|
||||
IdentityMaster get identityMaster =>
|
||||
throw _privateConstructorUsedError; // The encrypted identity secret that goes with
|
||||
// The super identity key record for the account,
|
||||
// containing the publicKey in the currentIdentity
|
||||
SuperIdentity get superIdentity =>
|
||||
throw _privateConstructorUsedError; // The encrypted currentIdentity secret that goes with
|
||||
// the identityPublicKey with appended salt
|
||||
@Uint8ListJsonConverter()
|
||||
Uint8List get identitySecretBytes =>
|
||||
|
@ -49,14 +50,14 @@ abstract class $LocalAccountCopyWith<$Res> {
|
|||
_$LocalAccountCopyWithImpl<$Res, LocalAccount>;
|
||||
@useResult
|
||||
$Res call(
|
||||
{IdentityMaster identityMaster,
|
||||
{SuperIdentity superIdentity,
|
||||
@Uint8ListJsonConverter() Uint8List identitySecretBytes,
|
||||
EncryptionKeyType encryptionKeyType,
|
||||
bool biometricsEnabled,
|
||||
bool hiddenAccount,
|
||||
String name});
|
||||
|
||||
$IdentityMasterCopyWith<$Res> get identityMaster;
|
||||
$SuperIdentityCopyWith<$Res> get superIdentity;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
@ -72,7 +73,7 @@ class _$LocalAccountCopyWithImpl<$Res, $Val extends LocalAccount>
|
|||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? identityMaster = null,
|
||||
Object? superIdentity = null,
|
||||
Object? identitySecretBytes = null,
|
||||
Object? encryptionKeyType = null,
|
||||
Object? biometricsEnabled = null,
|
||||
|
@ -80,10 +81,10 @@ class _$LocalAccountCopyWithImpl<$Res, $Val extends LocalAccount>
|
|||
Object? name = null,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
identityMaster: null == identityMaster
|
||||
? _value.identityMaster
|
||||
: identityMaster // ignore: cast_nullable_to_non_nullable
|
||||
as IdentityMaster,
|
||||
superIdentity: null == superIdentity
|
||||
? _value.superIdentity
|
||||
: superIdentity // ignore: cast_nullable_to_non_nullable
|
||||
as SuperIdentity,
|
||||
identitySecretBytes: null == identitySecretBytes
|
||||
? _value.identitySecretBytes
|
||||
: identitySecretBytes // ignore: cast_nullable_to_non_nullable
|
||||
|
@ -109,9 +110,9 @@ class _$LocalAccountCopyWithImpl<$Res, $Val extends LocalAccount>
|
|||
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$IdentityMasterCopyWith<$Res> get identityMaster {
|
||||
return $IdentityMasterCopyWith<$Res>(_value.identityMaster, (value) {
|
||||
return _then(_value.copyWith(identityMaster: value) as $Val);
|
||||
$SuperIdentityCopyWith<$Res> get superIdentity {
|
||||
return $SuperIdentityCopyWith<$Res>(_value.superIdentity, (value) {
|
||||
return _then(_value.copyWith(superIdentity: value) as $Val);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -125,7 +126,7 @@ abstract class _$$LocalAccountImplCopyWith<$Res>
|
|||
@override
|
||||
@useResult
|
||||
$Res call(
|
||||
{IdentityMaster identityMaster,
|
||||
{SuperIdentity superIdentity,
|
||||
@Uint8ListJsonConverter() Uint8List identitySecretBytes,
|
||||
EncryptionKeyType encryptionKeyType,
|
||||
bool biometricsEnabled,
|
||||
|
@ -133,7 +134,7 @@ abstract class _$$LocalAccountImplCopyWith<$Res>
|
|||
String name});
|
||||
|
||||
@override
|
||||
$IdentityMasterCopyWith<$Res> get identityMaster;
|
||||
$SuperIdentityCopyWith<$Res> get superIdentity;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
@ -147,7 +148,7 @@ class __$$LocalAccountImplCopyWithImpl<$Res>
|
|||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? identityMaster = null,
|
||||
Object? superIdentity = null,
|
||||
Object? identitySecretBytes = null,
|
||||
Object? encryptionKeyType = null,
|
||||
Object? biometricsEnabled = null,
|
||||
|
@ -155,10 +156,10 @@ class __$$LocalAccountImplCopyWithImpl<$Res>
|
|||
Object? name = null,
|
||||
}) {
|
||||
return _then(_$LocalAccountImpl(
|
||||
identityMaster: null == identityMaster
|
||||
? _value.identityMaster
|
||||
: identityMaster // ignore: cast_nullable_to_non_nullable
|
||||
as IdentityMaster,
|
||||
superIdentity: null == superIdentity
|
||||
? _value.superIdentity
|
||||
: superIdentity // ignore: cast_nullable_to_non_nullable
|
||||
as SuperIdentity,
|
||||
identitySecretBytes: null == identitySecretBytes
|
||||
? _value.identitySecretBytes
|
||||
: identitySecretBytes // ignore: cast_nullable_to_non_nullable
|
||||
|
@ -187,7 +188,7 @@ class __$$LocalAccountImplCopyWithImpl<$Res>
|
|||
@JsonSerializable()
|
||||
class _$LocalAccountImpl implements _LocalAccount {
|
||||
const _$LocalAccountImpl(
|
||||
{required this.identityMaster,
|
||||
{required this.superIdentity,
|
||||
@Uint8ListJsonConverter() required this.identitySecretBytes,
|
||||
required this.encryptionKeyType,
|
||||
required this.biometricsEnabled,
|
||||
|
@ -197,10 +198,11 @@ class _$LocalAccountImpl implements _LocalAccount {
|
|||
factory _$LocalAccountImpl.fromJson(Map<String, dynamic> json) =>
|
||||
_$$LocalAccountImplFromJson(json);
|
||||
|
||||
// The master key record for the account, containing the identityPublicKey
|
||||
// The super identity key record for the account,
|
||||
// containing the publicKey in the currentIdentity
|
||||
@override
|
||||
final IdentityMaster identityMaster;
|
||||
// The encrypted identity secret that goes with
|
||||
final SuperIdentity superIdentity;
|
||||
// The encrypted currentIdentity secret that goes with
|
||||
// the identityPublicKey with appended salt
|
||||
@override
|
||||
@Uint8ListJsonConverter()
|
||||
|
@ -221,7 +223,7 @@ class _$LocalAccountImpl implements _LocalAccount {
|
|||
|
||||
@override
|
||||
String toString() {
|
||||
return 'LocalAccount(identityMaster: $identityMaster, identitySecretBytes: $identitySecretBytes, encryptionKeyType: $encryptionKeyType, biometricsEnabled: $biometricsEnabled, hiddenAccount: $hiddenAccount, name: $name)';
|
||||
return 'LocalAccount(superIdentity: $superIdentity, identitySecretBytes: $identitySecretBytes, encryptionKeyType: $encryptionKeyType, biometricsEnabled: $biometricsEnabled, hiddenAccount: $hiddenAccount, name: $name)';
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -229,8 +231,8 @@ class _$LocalAccountImpl implements _LocalAccount {
|
|||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$LocalAccountImpl &&
|
||||
(identical(other.identityMaster, identityMaster) ||
|
||||
other.identityMaster == identityMaster) &&
|
||||
(identical(other.superIdentity, superIdentity) ||
|
||||
other.superIdentity == superIdentity) &&
|
||||
const DeepCollectionEquality()
|
||||
.equals(other.identitySecretBytes, identitySecretBytes) &&
|
||||
(identical(other.encryptionKeyType, encryptionKeyType) ||
|
||||
|
@ -246,7 +248,7 @@ class _$LocalAccountImpl implements _LocalAccount {
|
|||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
identityMaster,
|
||||
superIdentity,
|
||||
const DeepCollectionEquality().hash(identitySecretBytes),
|
||||
encryptionKeyType,
|
||||
biometricsEnabled,
|
||||
|
@ -269,7 +271,7 @@ class _$LocalAccountImpl implements _LocalAccount {
|
|||
|
||||
abstract class _LocalAccount implements LocalAccount {
|
||||
const factory _LocalAccount(
|
||||
{required final IdentityMaster identityMaster,
|
||||
{required final SuperIdentity superIdentity,
|
||||
@Uint8ListJsonConverter() required final Uint8List identitySecretBytes,
|
||||
required final EncryptionKeyType encryptionKeyType,
|
||||
required final bool biometricsEnabled,
|
||||
|
@ -279,9 +281,10 @@ abstract class _LocalAccount implements LocalAccount {
|
|||
factory _LocalAccount.fromJson(Map<String, dynamic> json) =
|
||||
_$LocalAccountImpl.fromJson;
|
||||
|
||||
@override // The master key record for the account, containing the identityPublicKey
|
||||
IdentityMaster get identityMaster;
|
||||
@override // The encrypted identity secret that goes with
|
||||
@override // The super identity key record for the account,
|
||||
// containing the publicKey in the currentIdentity
|
||||
SuperIdentity get superIdentity;
|
||||
@override // The encrypted currentIdentity secret that goes with
|
||||
// the identityPublicKey with appended salt
|
||||
@Uint8ListJsonConverter()
|
||||
Uint8List get identitySecretBytes;
|
||||
|
|
|
@ -8,7 +8,7 @@ part of 'local_account.dart';
|
|||
|
||||
_$LocalAccountImpl _$$LocalAccountImplFromJson(Map<String, dynamic> json) =>
|
||||
_$LocalAccountImpl(
|
||||
identityMaster: IdentityMaster.fromJson(json['identity_master']),
|
||||
superIdentity: SuperIdentity.fromJson(json['super_identity']),
|
||||
identitySecretBytes: const Uint8ListJsonConverter()
|
||||
.fromJson(json['identity_secret_bytes']),
|
||||
encryptionKeyType:
|
||||
|
@ -20,7 +20,7 @@ _$LocalAccountImpl _$$LocalAccountImplFromJson(Map<String, dynamic> json) =>
|
|||
|
||||
Map<String, dynamic> _$$LocalAccountImplToJson(_$LocalAccountImpl instance) =>
|
||||
<String, dynamic>{
|
||||
'identity_master': instance.identityMaster.toJson(),
|
||||
'super_identity': instance.superIdentity.toJson(),
|
||||
'identity_secret_bytes':
|
||||
const Uint8ListJsonConverter().toJson(instance.identitySecretBytes),
|
||||
'encryption_key_type': instance.encryptionKeyType.toJson(),
|
||||
|
|
|
@ -7,12 +7,13 @@ part 'user_login.g.dart';
|
|||
|
||||
// Represents a currently logged in account
|
||||
// User logins are stored in the user_logins tablestore table
|
||||
// indexed by the accountMasterKey
|
||||
// indexed by the accountSuperIdentityRecordKey
|
||||
@freezed
|
||||
class UserLogin with _$UserLogin {
|
||||
const factory UserLogin({
|
||||
// Master record key for the user used to index the local accounts table
|
||||
required TypedKey accountMasterRecordKey,
|
||||
// SuperIdentity record key for the user
|
||||
// used to index the local accounts table
|
||||
required TypedKey superIdentityRecordKey,
|
||||
// The identity secret as unlocked from the local accounts table
|
||||
required TypedSecret identitySecret,
|
||||
// The account record key, owner key and secret pulled from the identity
|
||||
|
|
|
@ -20,8 +20,9 @@ UserLogin _$UserLoginFromJson(Map<String, dynamic> json) {
|
|||
|
||||
/// @nodoc
|
||||
mixin _$UserLogin {
|
||||
// Master record key for the user used to index the local accounts table
|
||||
Typed<FixedEncodedString43> get accountMasterRecordKey =>
|
||||
// SuperIdentity record key for the user
|
||||
// used to index the local accounts table
|
||||
Typed<FixedEncodedString43> get superIdentityRecordKey =>
|
||||
throw _privateConstructorUsedError; // The identity secret as unlocked from the local accounts table
|
||||
Typed<FixedEncodedString43> get identitySecret =>
|
||||
throw _privateConstructorUsedError; // The account record key, owner key and secret pulled from the identity
|
||||
|
@ -41,7 +42,7 @@ abstract class $UserLoginCopyWith<$Res> {
|
|||
_$UserLoginCopyWithImpl<$Res, UserLogin>;
|
||||
@useResult
|
||||
$Res call(
|
||||
{Typed<FixedEncodedString43> accountMasterRecordKey,
|
||||
{Typed<FixedEncodedString43> superIdentityRecordKey,
|
||||
Typed<FixedEncodedString43> identitySecret,
|
||||
AccountRecordInfo accountRecordInfo,
|
||||
Timestamp lastActive});
|
||||
|
@ -62,15 +63,15 @@ class _$UserLoginCopyWithImpl<$Res, $Val extends UserLogin>
|
|||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? accountMasterRecordKey = null,
|
||||
Object? superIdentityRecordKey = null,
|
||||
Object? identitySecret = null,
|
||||
Object? accountRecordInfo = null,
|
||||
Object? lastActive = null,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
accountMasterRecordKey: null == accountMasterRecordKey
|
||||
? _value.accountMasterRecordKey
|
||||
: accountMasterRecordKey // ignore: cast_nullable_to_non_nullable
|
||||
superIdentityRecordKey: null == superIdentityRecordKey
|
||||
? _value.superIdentityRecordKey
|
||||
: superIdentityRecordKey // ignore: cast_nullable_to_non_nullable
|
||||
as Typed<FixedEncodedString43>,
|
||||
identitySecret: null == identitySecret
|
||||
? _value.identitySecret
|
||||
|
@ -105,7 +106,7 @@ abstract class _$$UserLoginImplCopyWith<$Res>
|
|||
@override
|
||||
@useResult
|
||||
$Res call(
|
||||
{Typed<FixedEncodedString43> accountMasterRecordKey,
|
||||
{Typed<FixedEncodedString43> superIdentityRecordKey,
|
||||
Typed<FixedEncodedString43> identitySecret,
|
||||
AccountRecordInfo accountRecordInfo,
|
||||
Timestamp lastActive});
|
||||
|
@ -125,15 +126,15 @@ class __$$UserLoginImplCopyWithImpl<$Res>
|
|||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? accountMasterRecordKey = null,
|
||||
Object? superIdentityRecordKey = null,
|
||||
Object? identitySecret = null,
|
||||
Object? accountRecordInfo = null,
|
||||
Object? lastActive = null,
|
||||
}) {
|
||||
return _then(_$UserLoginImpl(
|
||||
accountMasterRecordKey: null == accountMasterRecordKey
|
||||
? _value.accountMasterRecordKey
|
||||
: accountMasterRecordKey // ignore: cast_nullable_to_non_nullable
|
||||
superIdentityRecordKey: null == superIdentityRecordKey
|
||||
? _value.superIdentityRecordKey
|
||||
: superIdentityRecordKey // ignore: cast_nullable_to_non_nullable
|
||||
as Typed<FixedEncodedString43>,
|
||||
identitySecret: null == identitySecret
|
||||
? _value.identitySecret
|
||||
|
@ -155,7 +156,7 @@ class __$$UserLoginImplCopyWithImpl<$Res>
|
|||
@JsonSerializable()
|
||||
class _$UserLoginImpl implements _UserLogin {
|
||||
const _$UserLoginImpl(
|
||||
{required this.accountMasterRecordKey,
|
||||
{required this.superIdentityRecordKey,
|
||||
required this.identitySecret,
|
||||
required this.accountRecordInfo,
|
||||
required this.lastActive});
|
||||
|
@ -163,9 +164,10 @@ class _$UserLoginImpl implements _UserLogin {
|
|||
factory _$UserLoginImpl.fromJson(Map<String, dynamic> json) =>
|
||||
_$$UserLoginImplFromJson(json);
|
||||
|
||||
// Master record key for the user used to index the local accounts table
|
||||
// SuperIdentity record key for the user
|
||||
// used to index the local accounts table
|
||||
@override
|
||||
final Typed<FixedEncodedString43> accountMasterRecordKey;
|
||||
final Typed<FixedEncodedString43> superIdentityRecordKey;
|
||||
// The identity secret as unlocked from the local accounts table
|
||||
@override
|
||||
final Typed<FixedEncodedString43> identitySecret;
|
||||
|
@ -178,7 +180,7 @@ class _$UserLoginImpl implements _UserLogin {
|
|||
|
||||
@override
|
||||
String toString() {
|
||||
return 'UserLogin(accountMasterRecordKey: $accountMasterRecordKey, identitySecret: $identitySecret, accountRecordInfo: $accountRecordInfo, lastActive: $lastActive)';
|
||||
return 'UserLogin(superIdentityRecordKey: $superIdentityRecordKey, identitySecret: $identitySecret, accountRecordInfo: $accountRecordInfo, lastActive: $lastActive)';
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -186,8 +188,8 @@ class _$UserLoginImpl implements _UserLogin {
|
|||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$UserLoginImpl &&
|
||||
(identical(other.accountMasterRecordKey, accountMasterRecordKey) ||
|
||||
other.accountMasterRecordKey == accountMasterRecordKey) &&
|
||||
(identical(other.superIdentityRecordKey, superIdentityRecordKey) ||
|
||||
other.superIdentityRecordKey == superIdentityRecordKey) &&
|
||||
(identical(other.identitySecret, identitySecret) ||
|
||||
other.identitySecret == identitySecret) &&
|
||||
(identical(other.accountRecordInfo, accountRecordInfo) ||
|
||||
|
@ -198,7 +200,7 @@ class _$UserLoginImpl implements _UserLogin {
|
|||
|
||||
@JsonKey(ignore: true)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, accountMasterRecordKey,
|
||||
int get hashCode => Object.hash(runtimeType, superIdentityRecordKey,
|
||||
identitySecret, accountRecordInfo, lastActive);
|
||||
|
||||
@JsonKey(ignore: true)
|
||||
|
@ -217,7 +219,7 @@ class _$UserLoginImpl implements _UserLogin {
|
|||
|
||||
abstract class _UserLogin implements UserLogin {
|
||||
const factory _UserLogin(
|
||||
{required final Typed<FixedEncodedString43> accountMasterRecordKey,
|
||||
{required final Typed<FixedEncodedString43> superIdentityRecordKey,
|
||||
required final Typed<FixedEncodedString43> identitySecret,
|
||||
required final AccountRecordInfo accountRecordInfo,
|
||||
required final Timestamp lastActive}) = _$UserLoginImpl;
|
||||
|
@ -225,8 +227,9 @@ abstract class _UserLogin implements UserLogin {
|
|||
factory _UserLogin.fromJson(Map<String, dynamic> json) =
|
||||
_$UserLoginImpl.fromJson;
|
||||
|
||||
@override // Master record key for the user used to index the local accounts table
|
||||
Typed<FixedEncodedString43> get accountMasterRecordKey;
|
||||
@override // SuperIdentity record key for the user
|
||||
// used to index the local accounts table
|
||||
Typed<FixedEncodedString43> get superIdentityRecordKey;
|
||||
@override // The identity secret as unlocked from the local accounts table
|
||||
Typed<FixedEncodedString43> get identitySecret;
|
||||
@override // The account record key, owner key and secret pulled from the identity
|
||||
|
|
|
@ -8,8 +8,8 @@ part of 'user_login.dart';
|
|||
|
||||
_$UserLoginImpl _$$UserLoginImplFromJson(Map<String, dynamic> json) =>
|
||||
_$UserLoginImpl(
|
||||
accountMasterRecordKey: Typed<FixedEncodedString43>.fromJson(
|
||||
json['account_master_record_key']),
|
||||
superIdentityRecordKey: Typed<FixedEncodedString43>.fromJson(
|
||||
json['super_identity_record_key']),
|
||||
identitySecret:
|
||||
Typed<FixedEncodedString43>.fromJson(json['identity_secret']),
|
||||
accountRecordInfo:
|
||||
|
@ -19,7 +19,7 @@ _$UserLoginImpl _$$UserLoginImplFromJson(Map<String, dynamic> json) =>
|
|||
|
||||
Map<String, dynamic> _$$UserLoginImplToJson(_$UserLoginImpl instance) =>
|
||||
<String, dynamic>{
|
||||
'account_master_record_key': instance.accountMasterRecordKey.toJson(),
|
||||
'super_identity_record_key': instance.superIdentityRecordKey.toJson(),
|
||||
'identity_secret': instance.identitySecret.toJson(),
|
||||
'account_record_info': instance.accountRecordInfo.toJson(),
|
||||
'last_active': instance.lastActive.toJson(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue