nip46: handle ok=false from RPC calls better for instant failure.

This commit is contained in:
fiatjaf
2025-06-27 13:51:01 -03:00
parent 56568bdeed
commit 028a1637fb
+16 -5
View File
@@ -265,24 +265,35 @@ func (bunker *BunkerClient) RPC(ctx context.Context, method string, params []str
bunker.listeners.Delete(id) bunker.listeners.Delete(id)
close(respWaiter) close(respWaiter)
}() }()
hasWorked := make(chan struct{}) relayConnectionWorked := make(chan struct{})
bunkerConnectionWorked := make(chan struct{})
for _, url := range bunker.relays { for _, url := range bunker.relays {
go func(url string) { go func(url string) {
relay, err := bunker.pool.EnsureRelay(url) relay, err := bunker.pool.EnsureRelay(url)
if err == nil { if err == nil {
select { select {
case hasWorked <- struct{}{}: case relayConnectionWorked <- struct{}{}:
default: default:
} }
relay.Publish(ctx, evt) if err := relay.Publish(ctx, evt); err == nil {
select {
case bunkerConnectionWorked <- struct{}{}:
default:
}
}
} }
}(url) }(url)
} }
select { select {
case <-hasWorked: case <-relayConnectionWorked:
// continue select {
case <-bunkerConnectionWorked:
// continue
case <-ctx.Done():
return "", fmt.Errorf("couldn't reach the bunker, it is probably offline")
}
case <-ctx.Done(): case <-ctx.Done():
return "", fmt.Errorf("couldn't connect to any relay") return "", fmt.Errorf("couldn't connect to any relay")
} }