37 lines
675 B
Go
37 lines
675 B
Go
package nostr
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
gn "github.com/nbd-wtf/go-nostr"
|
|
)
|
|
|
|
var ErrNoRelayAccepted = errors.New("no relay accepted event")
|
|
|
|
// Publish sends an already-signed event to all relays in the pool.
|
|
// Success if at least one relay accepts.
|
|
func Publish(ctx context.Context, p *Pool, ev *gn.Event) error {
|
|
var lastErr error
|
|
accepted := 0
|
|
for _, url := range p.URLs() {
|
|
r, err := p.Connect(ctx, url)
|
|
if err != nil {
|
|
lastErr = err
|
|
continue
|
|
}
|
|
if err := r.Publish(ctx, *ev); err != nil {
|
|
lastErr = err
|
|
continue
|
|
}
|
|
accepted++
|
|
}
|
|
if accepted == 0 {
|
|
if lastErr != nil {
|
|
return lastErr
|
|
}
|
|
return ErrNoRelayAccepted
|
|
}
|
|
return nil
|
|
}
|