decodeNevent static method
Decode nevent and return Nevent object
Implementation
static Nevent decodeNevent(String neventStr) {
var decoder = Bech32Decoder();
var bech32Result = decoder.convert(neventStr, neventStr.length);
if (bech32Result.hrp != Hrps.kNevent) {
throw ArgumentError(
"Invalid HRP: expected '${Hrps.kNevent}', got '${bech32Result.hrp}'");
}
var data = Nip19Utils.convertBits(bech32Result.data, 5, 8, false);
final tlv = Nip19TLV.parseTLV(data);
String? eventId;
List<String> relays = [];
String? author;
int? kind;
for (var t in tlv) {
switch (t.type) {
case 0: // event id (special)
if (t.value.length == 32) {
eventId = hex.encode(t.value);
}
break;
case 1: // relay
try {
relays.add(utf8.decode(t.value));
} catch (e) {
// Ignore invalid UTF-8 per spec
}
break;
case 2: // author pubkey
if (t.value.length == 32) {
author = hex.encode(t.value);
}
break;
case 3: // kind
if (t.value.length == 4) {
kind = (t.value[0] << 24) |
(t.value[1] << 16) |
(t.value[2] << 8) |
t.value[3];
}
break;
default:
// Ignore unrecognized TLV types per spec
break;
}
}
// Validate required fields
if (eventId == null) {
throw ArgumentError('Missing required event ID field (type 0)');
}
return Nevent(
eventId: eventId,
author: author,
kind: kind,
relays: relays.isEmpty ? null : relays,
);
}