55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package sdk
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/nbd-wtf/go-nostr"
|
|
"github.com/nbd-wtf/go-nostr/sdk/cache"
|
|
)
|
|
|
|
type System struct {
|
|
RelaysCache cache.Cache32[[]Relay]
|
|
FollowsCache cache.Cache32[[]Follow]
|
|
MetadataCache cache.Cache32[ProfileMetadata]
|
|
Pool *nostr.SimplePool
|
|
RelayListRelays []string
|
|
FollowListRelays []string
|
|
MetadataRelays []string
|
|
}
|
|
|
|
func (sys System) FetchRelays(ctx context.Context, pubkey string) []Relay {
|
|
if v, ok := sys.RelaysCache.Get(pubkey); ok {
|
|
return v
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(ctx, time.Second*5)
|
|
defer cancel()
|
|
res := FetchRelaysForPubkey(ctx, sys.Pool, pubkey, sys.RelayListRelays...)
|
|
sys.RelaysCache.SetWithTTL(pubkey, res, time.Hour*6)
|
|
return res
|
|
}
|
|
|
|
func (sys System) FetchOutboxRelays(ctx context.Context, pubkey string) []string {
|
|
relays := sys.FetchRelays(ctx, pubkey)
|
|
result := make([]string, 0, len(relays))
|
|
for _, relay := range relays {
|
|
if relay.Outbox {
|
|
result = append(result, relay.URL)
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (sys System) FetchProfileMetadata(ctx context.Context, pubkey string) ProfileMetadata {
|
|
if v, ok := sys.MetadataCache.Get(pubkey); ok {
|
|
return v
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(ctx, time.Second*5)
|
|
defer cancel()
|
|
res := FetchProfileMetadata(ctx, sys.Pool, pubkey, sys.MetadataRelays...)
|
|
sys.MetadataCache.SetWithTTL(pubkey, res, time.Hour*6)
|
|
return res
|
|
}
|