sdk: pubkey feeds, live and past pages.

This commit is contained in:
fiatjaf
2025-01-20 12:59:27 -03:00
parent 40538486d5
commit f992c6e7ea
5 changed files with 159 additions and 88 deletions

View File

@@ -2,12 +2,8 @@ package sdk
import (
"context"
"fmt"
"strconv"
"sync"
"time"
"github.com/nbd-wtf/go-nostr"
)
var outboxShortTermCache = [256]ostcEntry{}
@@ -45,54 +41,3 @@ func (sys *System) FetchOutboxRelays(ctx context.Context, pubkey string, n int)
return relays
}
func (sys *System) ExpandQueriesByAuthorAndRelays(
ctx context.Context,
filter nostr.Filter,
) (map[string]nostr.Filter, error) {
n := len(filter.Authors)
if n == 0 {
return nil, fmt.Errorf("no authors in filter")
}
relaysForPubkey := make(map[string][]string, n)
mu := sync.Mutex{}
wg := sync.WaitGroup{}
wg.Add(n)
for _, pubkey := range filter.Authors {
go func(pubkey string) {
defer wg.Done()
relayURLs := sys.FetchOutboxRelays(ctx, pubkey, 3)
c := 0
for _, r := range relayURLs {
relay, err := sys.Pool.EnsureRelay(r)
if err != nil {
continue
}
mu.Lock()
relaysForPubkey[pubkey] = append(relaysForPubkey[pubkey], relay.URL)
mu.Unlock()
c++
if c == 3 {
return
}
}
}(pubkey)
}
wg.Wait()
filterForRelay := make(map[string]nostr.Filter, n) // { [relay]: filter }
for pubkey, relays := range relaysForPubkey {
for _, relay := range relays {
flt, ok := filterForRelay[relay]
if !ok {
flt = filter.Clone()
filterForRelay[relay] = flt
}
flt.Authors = append(flt.Authors, pubkey)
}
}
return filterForRelay, nil
}