import { EventKind, RequestBuilder, type TaggedNostrEvent, type UsersRelays, parseRelaysFromKind } from ".." import { unixNowMs } from "@snort/shared" import { RelayListCacheExpire } from "../const" import { BackgroundLoader } from "../background-loader" export class RelayMetadataLoader extends BackgroundLoader { override name(): string { return "RelayMetadataLoader" } override onEvent(e: Readonly): UsersRelays | undefined { try { const relays = parseRelaysFromKind(e) if (!relays) return return { relays: relays, pubkey: e.pubkey, created: e.created_at, loaded: unixNowMs(), } } catch (e) { // ignored } } override getExpireCutoff(): number { return unixNowMs() - RelayListCacheExpire } protected override buildSub(missing: string[]): RequestBuilder { const rb = new RequestBuilder("relay-loader") rb.withOptions({ outboxPickN: 4, }) rb.withFilter().authors(missing).kinds([EventKind.Relays, EventKind.ContactList]) return rb } }