decodeNevent static method

Nevent decodeNevent(
  1. String neventStr
)

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,
  );
}