diff --git a/src/Nostr.Client/Client/NostrClientStreams.cs b/src/Nostr.Client/Client/NostrClientStreams.cs index 7983c84d..7e648c2e 100644 --- a/src/Nostr.Client/Client/NostrClientStreams.cs +++ b/src/Nostr.Client/Client/NostrClientStreams.cs @@ -15,10 +15,18 @@ public class NostrClientStreams internal readonly Subject UnknownRawSubject = new(); /// - /// Requested Nostr events + /// Requested Nostr events (includes all events, signature not validated) /// public IObservable EventStream => EventSubject.AsObservable(); + /// + /// Requested Nostr events with valid signatures only. + /// Events with invalid or missing signatures are filtered out. + /// + public IObservable ValidEventStream => EventSubject + .AsObservable() + .Where(x => x.IsSignatureValid); + /// /// Human-readable messages /// diff --git a/src/Nostr.Client/Responses/NostrEventResponse.cs b/src/Nostr.Client/Responses/NostrEventResponse.cs index 8aadf7e6..ff93bed5 100644 --- a/src/Nostr.Client/Responses/NostrEventResponse.cs +++ b/src/Nostr.Client/Responses/NostrEventResponse.cs @@ -14,5 +14,12 @@ public class NostrEventResponse : NostrResponse [ArrayProperty(2)] [JsonConverter(typeof(NostrEventConverter))] public NostrEvent? Event { get; init; } + + /// + /// Check if the event signature is valid. + /// Returns false if event is null or signature verification fails. + /// + [JsonIgnore] + public bool IsSignatureValid => Event?.IsSignatureValid() ?? false; } }