diff --git a/handlers.go b/handlers.go index dcf4523..db37976 100644 --- a/handlers.go +++ b/handlers.go @@ -217,12 +217,16 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) { if env.Event.Kind == 5 { // this always returns "blocked: " whenever it returns an error writeErr = srl.handleDeleteRequest(ctx, &env.Event) - } else if nostr.IsEphemeralKind(env.Event.Kind) { - // this will also always return a prefixed reason - writeErr = srl.handleEphemeral(ctx, &env.Event) - } else { - // this will also always return a prefixed reason - skipBroadcast, writeErr = srl.handleNormal(ctx, &env.Event) + } + + if writeErr == nil { + if nostr.IsEphemeralKind(env.Event.Kind) { + // this will also always return a prefixed reason + writeErr = srl.handleEphemeral(ctx, &env.Event) + } else { + // this will also always return a prefixed reason + skipBroadcast, writeErr = srl.handleNormal(ctx, &env.Event) + } } var reason string diff --git a/relay_test.go b/relay_test.go index 09e7cbb..8258de9 100644 --- a/relay_test.go +++ b/relay_test.go @@ -151,33 +151,64 @@ func TestBasicRelayFunctionality(t *testing.T) { t.Fatalf("failed to publish deletion event: %v", err) } - // Try to query the deleted event - sub, err := client2.Subscribe(ctx, []nostr.Filter{{ - IDs: []string{evt3.ID}, - }}) - if err != nil { - t.Fatalf("failed to subscribe: %v", err) - } - defer sub.Unsub() + { + // Try to query the deleted event + sub, err := client2.Subscribe(ctx, []nostr.Filter{{ + IDs: []string{evt3.ID}, + }}) + if err != nil { + t.Fatalf("failed to subscribe: %v", err) + } + defer sub.Unsub() - // Should get EOSE without receiving the deleted event - gotEvent := false - for { - select { - case <-sub.Events: - gotEvent = true - case <-sub.EndOfStoredEvents: - if gotEvent { - t.Error("should not have received deleted event") + // Should get EOSE without receiving the deleted event + gotEvent := false + DeletedLoop: + for { + select { + case <-sub.Events: + gotEvent = true + case <-sub.EndOfStoredEvents: + if gotEvent { + t.Error("should not have received deleted event") + } + break DeletedLoop + case <-ctx.Done(): + t.Fatal("timeout waiting for EOSE") + } + } + } + + { + // Try to query the deletion itself + sub, err := client2.Subscribe(ctx, []nostr.Filter{{ + Kinds: []int{5}, + }}) + if err != nil { + t.Fatalf("failed to subscribe: %v", err) + } + defer sub.Unsub() + + // Should get EOSE without receiving the deleted event + gotEvent := false + DeletionLoop: + for { + select { + case <-sub.Events: + gotEvent = true + case <-sub.EndOfStoredEvents: + if !gotEvent { + t.Error("should have received deletion event") + } + break DeletionLoop + case <-ctx.Done(): + t.Fatal("timeout waiting for EOSE") } - return - case <-ctx.Done(): - t.Fatal("timeout waiting for EOSE") } } }) - // test 4: teplaceable events + // test 4: replaceable events t.Run("replaceable events", func(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel()