From 3e35681cb9722f02423e413cd7ad47a000867ac0 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sat, 11 Apr 2026 19:26:00 -0300 Subject: [PATCH] Revert "relay: check for subscription limits and error." This reverts commit 637412fd38a36ae090685b6401366b6c925e2697. --- relay.go | 73 -------------------------------------------------------- 1 file changed, 73 deletions(-) diff --git a/relay.go b/relay.go index 3393e8c..4539538 100644 --- a/relay.go +++ b/relay.go @@ -20,7 +20,6 @@ import ( ws "github.com/coder/websocket" "github.com/puzpuzpuz/xsync/v3" - "github.com/tidwall/gjson" ) var subscriptionIDCounter atomic.Int64 @@ -74,9 +73,6 @@ type Relay struct { okCallbacksMutex sync.Mutex subscriptionChannelCloseQueue chan *Subscription - subscriptionLimitCheckMutex sync.Mutex - realSubscriptionsLimit int - // custom things that aren't often used // AssumeValid bool // this will skip verifying signatures for events received from this relay @@ -581,69 +577,6 @@ func (r *Relay) publish(ctx context.Context, id ID, env Envelope) error { } } -var ErrTooManySubscriptions = errors.New("subscription limit reached") - -func (r *Relay) checkSubscriptionLimit(ctx context.Context) error { - current := r.Subscriptions.Size() - tempLimit := 20 - - // special case troublesome relays - if strings.HasPrefix(r.URL, "wss://relay.bullishbounty.com") { - r.realSubscriptionsLimit = 10 - if current >= r.realSubscriptionsLimit { - return ErrTooManySubscriptions - } - } - - if current < tempLimit { - return nil - } - - r.subscriptionLimitCheckMutex.Lock() - if r.realSubscriptionsLimit == 0 { - r.realSubscriptionsLimit = r.fetchSubscriptionLimit(ctx) - } - r.subscriptionLimitCheckMutex.Unlock() - - if current < r.realSubscriptionsLimit { - return ErrTooManySubscriptions - } - - return nil -} - -func (r *Relay) fetchSubscriptionLimit(ctx context.Context) int { - if _, ok := ctx.Deadline(); !ok { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, 7*time.Second) - defer cancel() - } - req, err := http.NewRequestWithContext(ctx, "GET", "http"+r.URL[2:], nil) - if err != nil { - return 40 - } - req.Header.Add("Accept", "application/nostr+json") - req.Header.Add("User-Agent", "nostrlib/go") - resp, err := http.DefaultClient.Do(req) - if err != nil { - return 40 - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - return 40 - } - result := gjson.GetBytes(body, "limitations.max_subscriptions") - if !result.Exists() { - return 40 - } - limit := result.Int() - if limit == 0 { - return 40 - } - return int(limit) -} - // Subscribe sends a "REQ" command to the relay r as in NIP-01. // Events are returned through the channel sub.Events. // The subscription is closed when context ctx is cancelled ("CLOSE" in NIP-01). @@ -654,9 +587,6 @@ func (r *Relay) Subscribe(ctx context.Context, filter Filter, opts SubscriptionO if !r.IsConnected() { return nil, ErrDisconnected } - if err := r.checkSubscriptionLimit(ctx); err != nil { - return nil, err - } sub := r.PrepareSubscription(ctx, filter, opts) @@ -818,9 +748,6 @@ func (r *Relay) countInternal(ctx context.Context, filter Filter, opts Subscript hasAuthed := false for { - if err := r.checkSubscriptionLimit(ctx); err != nil { - return CountEnvelope{}, err - } sub := r.PrepareSubscription(ctx, filter, opts) sub.countResult = make(chan CountEnvelope, 1)