TailscaleNode.fromJson constructor
Parses one node from Go's ipnstate.PeerStatus JSON shape.
Missing or malformed fields fall back to safe defaults (empty strings,
false, 0) rather than throwing.
Implementation
factory TailscaleNode.fromJson(Map<String, dynamic> json) {
return TailscaleNode(
publicKey: json['PublicKey'] as String? ?? '',
stableNodeId: json['ID'] as String? ?? '',
hostName: json['HostName'] as String? ?? '',
dnsName: json['DNSName'] as String? ?? '',
os: json['OS'] as String? ?? '',
tailscaleIPs: _parseIPs(json['TailscaleIPs']),
online: json['Online'] as bool? ?? false,
active: json['Active'] as bool? ?? false,
rxBytes: json['RxBytes'] as int? ?? 0,
txBytes: json['TxBytes'] as int? ?? 0,
exitNode: json['ExitNode'] as bool? ?? false,
exitNodeOption: json['ExitNodeOption'] as bool? ?? false,
lastSeen: _parseTime(json['LastSeen']),
relay: json['Relay'] as String?,
curAddr: json['CurAddr'] as String?,
);
}