From ba38c28b99a1c7be91c4f11588d1b020275cb9b1 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 15 Jan 2025 00:30:24 -0300 Subject: [PATCH] sdk: track event relays on kvstore. --- sdk/system.go | 2 ++ sdk/tracker.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/sdk/system.go b/sdk/system.go index 9f412fd..541b191 100644 --- a/sdk/system.go +++ b/sdk/system.go @@ -112,6 +112,8 @@ func NewSystem(mods ...SystemModifier) *System { sys.Pool = nostr.NewSimplePool(context.Background(), nostr.WithAuthorKindQueryMiddleware(sys.TrackQueryAttempts), nostr.WithEventMiddleware(sys.TrackEventHints), + nostr.WithEventMiddleware(sys.TrackEventRelays), + nostr.WithDuplicateMiddleware(sys.TrackEventRelaysD), nostr.WithPenaltyBox(), ) diff --git a/sdk/tracker.go b/sdk/tracker.go index 48da24e..eac395b 100644 --- a/sdk/tracker.go +++ b/sdk/tracker.go @@ -1,6 +1,7 @@ package sdk import ( + "encoding/hex" "net/url" "github.com/nbd-wtf/go-nostr" @@ -108,3 +109,31 @@ func (sys *System) TrackEventHints(ie nostr.RelayEvent) { } } } + +func (sys *System) TrackEventRelays(ie nostr.RelayEvent) { + // decode the event ID hex into bytes + idBytes, err := hex.DecodeString(ie.ID) + if err != nil || len(idBytes) < 8 { + return + } + + // store only first 8 bytes of event ID as key + key := idBytes[:8] + + // store the relay URL as value + sys.KVStore.Set(key, []byte(ie.Relay.URL)) +} + +func (sys *System) TrackEventRelaysD(relay, id string) { + // decode the event ID hex into bytes + idBytes, err := hex.DecodeString(id) + if err != nil || len(idBytes) < 8 { + return + } + + // store only first 8 bytes of event ID as key + key := idBytes[:8] + + // store the relay URL as value + sys.KVStore.Set(key, []byte(relay)) +}