import '../security/secret_store.dart'; /// Remembers the display names peers have published (their NIP-01 kind:0 /// `name`), so the inbox and chat show a human name instead of a raw key — /// even offline. Keystore-backed (no plaintext at rest). class ProfileCache { /// [accountScope] namespaces the keys per social identity (empty = the /// original identity's legacy keys). See [socialAccountScope]. ProfileCache(this._store, {String accountScope = ''}) : _prefix = accountScope.isEmpty ? 'tane.social.name.' : 'tane.social.$accountScope.name.'; final SecretStore _store; final String _prefix; /// The cached name for [pubkeyHex], or null if none is known. Future name(String pubkeyHex) async { final value = await _store.read('$_prefix$pubkeyHex'); return (value == null || value.isEmpty) ? null : value; } Future setName(String pubkeyHex, String name) => _store.write('$_prefix$pubkeyHex', name.trim()); } /// A compact, human-ish rendering of a public key when no name is known yet. String shortPubkey(String pubkeyHex) => pubkeyHex.length <= 12 ? pubkeyHex : '${pubkeyHex.substring(0, 6)}…${pubkeyHex.substring(pubkeyHex.length - 4)}';