2023-05-29 15:24:57 -04:00
|
|
|
import 'dart:typed_data';
|
|
|
|
|
|
|
|
import 'package:change_case/change_case.dart';
|
2023-07-05 18:48:06 -04:00
|
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
2023-05-29 15:24:57 -04:00
|
|
|
|
|
|
|
import 'veilid.dart';
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
part 'veilid_state.freezed.dart';
|
|
|
|
part 'veilid_state.g.dart';
|
|
|
|
|
2023-05-29 15:24:57 -04:00
|
|
|
//////////////////////////////////////
|
|
|
|
/// AttachmentState
|
|
|
|
|
|
|
|
enum AttachmentState {
|
|
|
|
detached,
|
|
|
|
attaching,
|
|
|
|
attachedWeak,
|
|
|
|
attachedGood,
|
|
|
|
attachedStrong,
|
|
|
|
fullyAttached,
|
|
|
|
overAttached,
|
|
|
|
detaching;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory AttachmentState.fromJson(dynamic j) =>
|
|
|
|
AttachmentState.values.byName((j as String).toCamelCase());
|
2023-07-30 15:57:06 -04:00
|
|
|
|
|
|
|
String toJson() => name.toPascalCase();
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
/// VeilidLogLevel
|
|
|
|
|
|
|
|
enum VeilidLogLevel {
|
|
|
|
error,
|
|
|
|
warn,
|
|
|
|
info,
|
|
|
|
debug,
|
|
|
|
trace;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory VeilidLogLevel.fromJson(dynamic j) =>
|
|
|
|
VeilidLogLevel.values.byName((j as String).toCamelCase());
|
2023-07-30 15:57:06 -04:00
|
|
|
|
|
|
|
String toJson() => name.toPascalCase();
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
@freezed
|
|
|
|
class LatencyStats with _$LatencyStats {
|
|
|
|
const factory LatencyStats({
|
|
|
|
required TimestampDuration fastest,
|
|
|
|
required TimestampDuration average,
|
|
|
|
required TimestampDuration slowest,
|
|
|
|
}) = _LatencyStats;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory LatencyStats.fromJson(dynamic json) =>
|
|
|
|
_$LatencyStatsFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
@freezed
|
|
|
|
class TransferStats with _$TransferStats {
|
|
|
|
const factory TransferStats({
|
|
|
|
required BigInt total,
|
|
|
|
required BigInt maximum,
|
|
|
|
required BigInt average,
|
|
|
|
required BigInt minimum,
|
|
|
|
}) = _TransferStats;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory TransferStats.fromJson(dynamic json) =>
|
|
|
|
_$TransferStatsFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
@freezed
|
|
|
|
class TransferStatsDownUp with _$TransferStatsDownUp {
|
|
|
|
const factory TransferStatsDownUp({
|
|
|
|
required TransferStats down,
|
|
|
|
required TransferStats up,
|
|
|
|
}) = _TransferStatsDownUp;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory TransferStatsDownUp.fromJson(dynamic json) =>
|
|
|
|
_$TransferStatsDownUpFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
@freezed
|
|
|
|
class RPCStats with _$RPCStats {
|
|
|
|
const factory RPCStats({
|
|
|
|
required int messagesSent,
|
|
|
|
required int messagesRcvd,
|
|
|
|
required int questionsInFlight,
|
|
|
|
required Timestamp? lastQuestion,
|
|
|
|
required Timestamp? lastSeenTs,
|
|
|
|
required Timestamp? firstConsecutiveSeenTs,
|
|
|
|
required int recentLostAnswers,
|
|
|
|
required int failedToSend,
|
|
|
|
}) = _RPCStats;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory RPCStats.fromJson(dynamic json) =>
|
|
|
|
_$RPCStatsFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
@freezed
|
|
|
|
class PeerStats with _$PeerStats {
|
|
|
|
const factory PeerStats({
|
|
|
|
required Timestamp timeAdded,
|
|
|
|
required RPCStats rpcStats,
|
2023-07-30 15:57:06 -04:00
|
|
|
required TransferStatsDownUp transfer,
|
|
|
|
LatencyStats? latency,
|
2023-07-05 18:48:06 -04:00
|
|
|
}) = _PeerStats;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory PeerStats.fromJson(dynamic json) =>
|
|
|
|
_$PeerStatsFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
////////////
|
|
|
|
|
2023-07-05 18:48:06 -04:00
|
|
|
@freezed
|
|
|
|
class PeerTableData with _$PeerTableData {
|
|
|
|
const factory PeerTableData({
|
|
|
|
required List<TypedKey> nodeIds,
|
|
|
|
required String peerAddress,
|
|
|
|
required PeerStats peerStats,
|
|
|
|
}) = _PeerTableData;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory PeerTableData.fromJson(dynamic json) =>
|
|
|
|
_$PeerTableDataFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
/// VeilidUpdate
|
|
|
|
|
2023-07-05 23:53:08 -04:00
|
|
|
@Freezed(unionKey: 'kind', unionValueCase: FreezedUnionCase.pascal)
|
|
|
|
sealed class VeilidUpdate with _$VeilidUpdate {
|
|
|
|
const factory VeilidUpdate.log({
|
|
|
|
required VeilidLogLevel logLevel,
|
|
|
|
required String message,
|
|
|
|
String? backtrace,
|
|
|
|
}) = VeilidLog;
|
|
|
|
const factory VeilidUpdate.appMessage({
|
2023-07-30 15:57:06 -04:00
|
|
|
@Uint8ListJsonConverter() required Uint8List message,
|
|
|
|
TypedKey? sender,
|
2024-03-08 00:17:38 -05:00
|
|
|
String? routeId,
|
2023-07-05 23:53:08 -04:00
|
|
|
}) = VeilidAppMessage;
|
|
|
|
const factory VeilidUpdate.appCall({
|
2023-07-30 15:57:06 -04:00
|
|
|
@Uint8ListJsonConverter() required Uint8List message,
|
|
|
|
required String callId,
|
|
|
|
TypedKey? sender,
|
2024-03-08 00:17:38 -05:00
|
|
|
String? routeId,
|
2023-07-05 23:53:08 -04:00
|
|
|
}) = VeilidAppCall;
|
|
|
|
const factory VeilidUpdate.attachment(
|
|
|
|
{required AttachmentState state,
|
|
|
|
required bool publicInternetReady,
|
|
|
|
required bool localNetworkReady}) = VeilidUpdateAttachment;
|
|
|
|
const factory VeilidUpdate.network(
|
|
|
|
{required bool started,
|
|
|
|
required BigInt bpsDown,
|
|
|
|
required BigInt bpsUp,
|
|
|
|
required List<PeerTableData> peers}) = VeilidUpdateNetwork;
|
|
|
|
const factory VeilidUpdate.config({
|
|
|
|
required VeilidConfig config,
|
|
|
|
}) = VeilidUpdateConfig;
|
|
|
|
const factory VeilidUpdate.routeChange({
|
|
|
|
required List<String> deadRoutes,
|
|
|
|
required List<String> deadRemoteRoutes,
|
|
|
|
}) = VeilidUpdateRouteChange;
|
|
|
|
const factory VeilidUpdate.valueChange({
|
|
|
|
required TypedKey key,
|
|
|
|
required List<ValueSubkeyRange> subkeys,
|
|
|
|
required int count,
|
2024-02-27 20:30:37 -05:00
|
|
|
required ValueData value,
|
2023-07-05 23:53:08 -04:00
|
|
|
}) = VeilidUpdateValueChange;
|
|
|
|
|
2024-02-16 11:19:26 -05:00
|
|
|
factory VeilidUpdate.fromJson(dynamic json) =>
|
|
|
|
_$VeilidUpdateFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
/// VeilidStateAttachment
|
|
|
|
|
2023-07-05 23:53:08 -04:00
|
|
|
@freezed
|
|
|
|
class VeilidStateAttachment with _$VeilidStateAttachment {
|
|
|
|
const factory VeilidStateAttachment(
|
|
|
|
{required AttachmentState state,
|
|
|
|
required bool publicInternetReady,
|
|
|
|
required bool localNetworkReady}) = _VeilidStateAttachment;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory VeilidStateAttachment.fromJson(dynamic json) =>
|
|
|
|
_$VeilidStateAttachmentFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
/// VeilidStateNetwork
|
|
|
|
|
2023-07-05 23:53:08 -04:00
|
|
|
@freezed
|
|
|
|
class VeilidStateNetwork with _$VeilidStateNetwork {
|
|
|
|
const factory VeilidStateNetwork(
|
|
|
|
{required bool started,
|
|
|
|
required BigInt bpsDown,
|
|
|
|
required BigInt bpsUp,
|
|
|
|
required List<PeerTableData> peers}) = _VeilidStateNetwork;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory VeilidStateNetwork.fromJson(dynamic json) =>
|
|
|
|
_$VeilidStateNetworkFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
/// VeilidStateConfig
|
|
|
|
|
2023-07-05 23:53:08 -04:00
|
|
|
@freezed
|
|
|
|
class VeilidStateConfig with _$VeilidStateConfig {
|
|
|
|
const factory VeilidStateConfig({
|
|
|
|
required VeilidConfig config,
|
|
|
|
}) = _VeilidStateConfig;
|
2023-05-29 15:24:57 -04:00
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory VeilidStateConfig.fromJson(dynamic json) =>
|
|
|
|
_$VeilidStateConfigFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
/// VeilidState
|
|
|
|
|
2023-07-05 23:53:08 -04:00
|
|
|
@freezed
|
|
|
|
class VeilidState with _$VeilidState {
|
|
|
|
const factory VeilidState({
|
|
|
|
required VeilidStateAttachment attachment,
|
|
|
|
required VeilidStateNetwork network,
|
|
|
|
required VeilidStateConfig config,
|
|
|
|
}) = _VeilidState;
|
|
|
|
|
2023-07-25 01:04:22 -04:00
|
|
|
factory VeilidState.fromJson(dynamic json) =>
|
|
|
|
_$VeilidStateFromJson(json as Map<String, dynamic>);
|
2023-05-29 15:24:57 -04:00
|
|
|
}
|