From 028a1637fbd0a3f126b4b5678132397474e7f6f1 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 27 Jun 2025 13:51:01 -0300 Subject: [PATCH] nip46: handle ok=false from RPC calls better for instant failure. --- nip46/client.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/nip46/client.go b/nip46/client.go index e3c6bb2..eb19a3d 100644 --- a/nip46/client.go +++ b/nip46/client.go @@ -265,24 +265,35 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str bunker.listeners.Delete(id) close(respWaiter) }() - hasWorked := make(chan struct{}) + relayConnectionWorked := make(chan struct{}) + bunkerConnectionWorked := make(chan struct{}) for _, url := range bunker.relays { go func(url string) { relay, err := bunker.pool.EnsureRelay(url) if err == nil { select { - case hasWorked <- struct{}{}: + case relayConnectionWorked <- struct{}{}: default: } - relay.Publish(ctx, evt) + if err := relay.Publish(ctx, evt); err == nil { + select { + case bunkerConnectionWorked <- struct{}{}: + default: + } + } } }(url) } select { - case <-hasWorked: - // continue + case <-relayConnectionWorked: + select { + case <-bunkerConnectionWorked: + // continue + case <-ctx.Done(): + return "", fmt.Errorf("couldn't reach the bunker, it is probably offline") + } case <-ctx.Done(): return "", fmt.Errorf("couldn't connect to any relay") }