diff --git a/src/components/nostr/RelayLink.tsx b/src/components/nostr/RelayLink.tsx index 3b62ca3..6961ef1 100644 --- a/src/components/nostr/RelayLink.tsx +++ b/src/components/nostr/RelayLink.tsx @@ -12,6 +12,7 @@ export interface RelayLinkProps { url: string; read?: boolean; write?: boolean; + showInboxOutbox?: boolean; className?: string; urlClassname?: string; iconClassname?: string; @@ -28,6 +29,7 @@ export function RelayLink({ iconClassname, read = false, write = false, + showInboxOutbox = true, className, }: RelayLinkProps) { const { addWindow } = useGrimoire(); @@ -56,7 +58,7 @@ export function RelayLink({ {url}
- {read && ( + {showInboxOutbox && read && (
@@ -81,7 +83,7 @@ export function RelayLink({ )} - {write && ( + {showInboxOutbox && write && (
diff --git a/src/components/nostr/kinds/GenericRelayListRenderer.tsx b/src/components/nostr/kinds/GenericRelayListRenderer.tsx new file mode 100644 index 0000000..70d4328 --- /dev/null +++ b/src/components/nostr/kinds/GenericRelayListRenderer.tsx @@ -0,0 +1,40 @@ +import { BaseEventProps, BaseEventContainer } from "./BaseEventRenderer"; +import { getRelaysFromList } from "applesauce-core/helpers/lists"; +import { RelayLink } from "../RelayLink"; + +/** + * Generic Relay List Renderer + * Works for NIP-51 relay list kinds: 10006, 10007, 10012, 10050, 30002 + * These lists contain simple "relay" tags without read/write distinction + */ +export function GenericRelayListRenderer({ event }: BaseEventProps) { + // Extract relay URLs from the list (supports both public and encrypted) + const relays = getRelaysFromList(event, "all"); + + if (relays.length === 0) { + return ( + +
+ No relays configured +
+
+ ); + } + + return ( + +
+ {relays.map((url) => ( + + ))} +
+
+ ); +} diff --git a/src/components/nostr/kinds/index.tsx b/src/components/nostr/kinds/index.tsx index 3aa61ea..a0fd4fa 100644 --- a/src/components/nostr/kinds/index.tsx +++ b/src/components/nostr/kinds/index.tsx @@ -12,6 +12,7 @@ import { Kind9802Renderer } from "./Kind9802Renderer"; import { Kind10002Renderer } from "./Kind10002Renderer"; import { Kind30023Renderer } from "./Kind30023Renderer"; import { Kind39701Renderer } from "./Kind39701Renderer"; +import { GenericRelayListRenderer } from "./GenericRelayListRenderer"; import { NostrEvent } from "@/types/nostr"; import { BaseEventContainer, type BaseEventProps } from "./BaseEventRenderer"; @@ -33,6 +34,11 @@ const kindRenderers: Record> = { 9735: Kind9735Renderer, // Zap Receipt 9802: Kind9802Renderer, // Highlight 10002: Kind10002Renderer, // Relay List Metadata (NIP-65) + 10006: GenericRelayListRenderer, // Blocked Relays (NIP-51) + 10007: GenericRelayListRenderer, // Search Relays (NIP-51) + 10012: GenericRelayListRenderer, // Favorite Relays (NIP-51) + 10050: GenericRelayListRenderer, // DM Relay List (NIP-51) + 30002: GenericRelayListRenderer, // Relay Sets (NIP-51) 30023: Kind30023Renderer, // Long-form Article 39701: Kind39701Renderer, // Web Bookmarks (NIP-B0) };