diff --git a/src/components/nostr/kinds/RelayMembersRenderer.tsx b/src/components/nostr/kinds/RelayMembersRenderer.tsx new file mode 100644 index 0000000..537c23b --- /dev/null +++ b/src/components/nostr/kinds/RelayMembersRenderer.tsx @@ -0,0 +1,81 @@ +import { Shield, Users } from "lucide-react"; +import { getTagValues } from "@/lib/nostr-utils"; +import { + BaseEventProps, + BaseEventContainer, + ClickableEventTitle, +} from "./BaseEventRenderer"; +import { PubkeyListFull } from "../lists"; +import type { NostrEvent } from "@/types/nostr"; + +/** + * Kind 13534 Renderer - Relay Members (Feed View) + * NIP-43 relay membership list + * + * Uses "member" tags instead of standard "p" tags: + * ["member", ""] + */ +export function RelayMembersRenderer({ event }: BaseEventProps) { + const members = getTagValues(event, "member"); + + if (members.length === 0) { + return ( + +
+ Empty membership list +
+
+ ); + } + + return ( + +
+ + + Relay Members + + +
+
+ + + {members.length} {members.length === 1 ? "member" : "members"} + +
+
+
+
+ ); +} + +/** + * Kind 13534 Detail View - Full relay membership list + */ +export function RelayMembersDetailRenderer({ event }: { event: NostrEvent }) { + const members = getTagValues(event, "member"); + + return ( +
+
+ + Relay Members +
+ + {members.length > 0 ? ( + } + /> + ) : ( +
+ Empty membership list +
+ )} +
+ ); +} diff --git a/src/components/nostr/kinds/index.tsx b/src/components/nostr/kinds/index.tsx index 0494f88..a41c085 100644 --- a/src/components/nostr/kinds/index.tsx +++ b/src/components/nostr/kinds/index.tsx @@ -67,6 +67,10 @@ import { ZapstoreAppSetDetailRenderer } from "./ZapstoreAppSetDetailRenderer"; import { ZapstoreReleaseRenderer } from "./ZapstoreReleaseRenderer"; import { ZapstoreReleaseDetailRenderer } from "./ZapstoreReleaseDetailRenderer"; import { GroupMetadataRenderer } from "./GroupMetadataRenderer"; +import { + RelayMembersRenderer, + RelayMembersDetailRenderer, +} from "./RelayMembersRenderer"; // NIP-51 List Renderers import { MuteListRenderer, MuteListDetailRenderer } from "./MuteListRenderer"; import { PinListRenderer, PinListDetailRenderer } from "./PinListRenderer"; @@ -178,6 +182,7 @@ const kindRenderers: Record> = { 10101: WikiAuthorsRenderer, // Good Wiki Authors (NIP-51) 10102: WikiRelaysRenderer, // Good Wiki Relays (NIP-51) 10317: Kind10317Renderer, // User Grasp List (NIP-34) + 13534: RelayMembersRenderer, // Relay Members (NIP-43) 30000: FollowSetRenderer, // Follow Sets (NIP-51) 30002: GenericRelayListRenderer, // Relay Sets (NIP-51) 30003: BookmarkSetRenderer, // Bookmark Sets (NIP-51) @@ -268,6 +273,7 @@ const detailRenderers: Record< 10101: WikiAuthorsDetailRenderer, // Good Wiki Authors Detail (NIP-51) 10102: WikiRelaysDetailRenderer, // Good Wiki Relays Detail (NIP-51) 10317: Kind10317DetailRenderer, // User Grasp List Detail (NIP-34) + 13534: RelayMembersDetailRenderer, // Relay Members Detail (NIP-43) 30000: FollowSetDetailRenderer, // Follow Sets Detail (NIP-51) 30003: BookmarkSetDetailRenderer, // Bookmark Sets Detail (NIP-51) 30004: ArticleCurationSetDetailRenderer, // Article Curation Sets Detail (NIP-51) diff --git a/src/constants/kinds.ts b/src/constants/kinds.ts index 462cc1a..fda5f80 100644 --- a/src/constants/kinds.ts +++ b/src/constants/kinds.ts @@ -887,13 +887,13 @@ export const EVENT_KINDS: Record = { nip: "47", icon: Wallet, }, - // 13534: { - // kind: 13534, - // name: "Membership Lists", - // description: "Membership Lists", - // nip: "43", - // icon: Users, - // }, + 13534: { + kind: 13534, + name: "Relay Members", + description: "Relay membership list", + nip: "43", + icon: Shield, + }, // 17375: { // kind: 17375, // name: "Cashu Wallet Event", @@ -950,27 +950,27 @@ export const EVENT_KINDS: Record = { nip: "98", icon: Key, }, - // 28934: { - // kind: 28934, - // name: "Join Request", - // description: "Join Request", - // nip: "43", - // icon: UserPlus, - // }, - // 28935: { - // kind: 28935, - // name: "Invite Request", - // description: "Invite Request", - // nip: "43", - // icon: Mail, - // }, - // 28936: { - // kind: 28936, - // name: "Leave Request", - // description: "Leave Request", - // nip: "43", - // icon: UserMinus, - // }, + 28934: { + kind: 28934, + name: "Join Request", + description: "Relay join request with invite code", + nip: "43", + icon: UserPlus, + }, + 28935: { + kind: 28935, + name: "Invite Request", + description: "Request invite code from relay", + nip: "43", + icon: Mail, + }, + 28936: { + kind: 28936, + name: "Leave Request", + description: "Request to revoke relay access", + nip: "43", + icon: UserMinus, + }, // Group Control 9000: {