diff --git a/handlers.go b/handlers.go index 631c439..4b7dae1 100644 --- a/handlers.go +++ b/handlers.go @@ -205,7 +205,7 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) { ovw(ctx, &env.Event) } if !skipBroadcast { - srl.notifyListeners(&env.Event) + srl.notifyListeners(&env.Event, nil) } } else { reason = writeErr.Error() diff --git a/listener.go b/listener.go index 13fab40..6cff65d 100644 --- a/listener.go +++ b/listener.go @@ -86,6 +86,11 @@ func (rl *Relay) removeListenerId(ws *WebSocket, id string) { func (rl *Relay) notifyListeners(event *nostr.Event) { for _, listener := range rl.listeners { if listener.filter.Matches(event) { + for _, pb := range rl.PreventBroadcast { + if pb(listener.ws, event) { + return + } + } listener.ws.WriteJSON(nostr.EventEnvelope{SubscriptionID: &listener.subscriptionId, Event: *event}) } } diff --git a/relay.go b/relay.go index 1bd48dc..69297db 100644 --- a/relay.go +++ b/relay.go @@ -64,6 +64,7 @@ type Relay struct { OnDisconnect []func(ctx context.Context) OverwriteRelayInformation []func(ctx context.Context, r *http.Request, info nip11.RelayInformationDocument) nip11.RelayInformationDocument OverwriteResponseEvent []func(ctx context.Context, event *nostr.Event) + PreventBroadcast []func(ws *WebSocket, event *nostr.Event) bool // these are used when this relays acts as a router routes []Route