From eaaa3d9da9cf67fe3ab3915df21e6e7283295728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20G=C3=B3mez?= Date: Thu, 11 Dec 2025 16:21:33 +0100 Subject: [PATCH] feat: more comprehensive kind descriptions --- TODO.md | 1 + src/constants/kinds.ts | 738 +++++++++++++++++++++++++++++++++-------- 2 files changed, 599 insertions(+), 140 deletions(-) diff --git a/TODO.md b/TODO.md index e40465d..3d36644 100644 --- a/TODO.md +++ b/TODO.md @@ -110,3 +110,4 @@ Show timestamps/dates for notes in feed views for better chronological context. - **App-wide error boundary** - Splash crash screen for unhandled errors - **Collapsible relay list** - Show user relay links without inbox/outbox icons initially - **NIP badges everywhere** - Use consistent NIP badge components for linking to NIP documentation +- **External spec event kind support** - Add references and documentation links for commented-out event kinds from external specs (Blossom, Marmot Protocol, NKBIP, nostrocket, Corny Chat, NUD, etc.) in `src/constants/kinds.ts`. Consider adding a separate registry or documentation for non-official-NIP event kinds. diff --git a/src/constants/kinds.ts b/src/constants/kinds.ts index 46c5673..91cd94d 100644 --- a/src/constants/kinds.ts +++ b/src/constants/kinds.ts @@ -1,46 +1,61 @@ import { - User, - MessageSquare, - Radio, - Users, - Lock, - Trash2, - Repeat, - Heart, + Activity, + AlertCircle, + ArrowRight, Award, - MessageCircle, + BarChart3, + Bookmark, + Calendar, + Cloud, + Coins, + Compass, Eye, EyeOff, - Image, - Video, - Hash, - FileText, - AlertCircle, - ShoppingBag, - Zap, - Pin, - Bookmark, - Settings, - List, - Smile, FileCode, - GitBranch, + FileEdit, + FileText, + Filter, Flag, - Tag, - Calendar, - Wallet, - Package, - Map, + Gavel, + GitBranch, + Grid3x3, + Hash, + Heart, Highlighter, - BarChart3, - Timer, - ListChecks, - Mic, + Image, + Info, Key, - Cloud, - UserCheck, - UserX, + List, + ListChecks, + ListFilter, + Lock, + Mail, + MessageCircle, + MessageSquare, + Mic, + Package, + PackageOpen, + Pin, + Play, + Presentation, + Radio, + Repeat, + Settings, Shield, + ShoppingBag, + Smile, + Star, + Tag, + Trash2, + User, + UserCheck, + UserMinus, + UserPlus, + Users, + UserX, + Video, + Wallet, + Zap, type LucideIcon, } from "lucide-react"; @@ -208,6 +223,36 @@ export const EVENT_KINDS: Record = { icon: Video, }, + // References (NKBIP-03) - External spec, commented out + // 30: { + // kind: 30, + // name: "Internal Reference", + // description: "Internal reference", + // nip: "NKBIP-03", + // icon: Link, + // }, + // 31: { + // kind: 31, + // name: "External Reference", + // description: "External web reference", + // nip: "NKBIP-03", + // icon: ExternalLink, + // }, + // 32: { + // kind: 32, + // name: "Hardcopy Reference", + // description: "Hardcopy reference", + // nip: "NKBIP-03", + // icon: BookOpen, + // }, + // 33: { + // kind: 33, + // name: "Prompt Reference", + // description: "Prompt reference", + // nip: "NKBIP-03", + // icon: MessageSquareText, + // }, + // Channels 40: { kind: 40, @@ -261,6 +306,47 @@ export const EVENT_KINDS: Record = { icon: Package, }, + // Marmot Protocol - External spec, commented out + // 443: { + // kind: 443, + // name: "KeyPackage", + // description: "KeyPackage", + // nip: "Marmot", + // icon: Key, + // }, + // 444: { + // kind: 444, + // name: "Welcome Message", + // description: "Welcome Message", + // nip: "Marmot", + // icon: Mail, + // }, + // 445: { + // kind: 445, + // name: "Group Event", + // description: "Group Event", + // nip: "Marmot", + // icon: Users, + // }, + + // Merge Requests + 818: { + kind: 818, + name: "Merge Request", + description: "Merge Requests", + nip: "54", + icon: GitBranch, + }, + + // Marketplace + 1018: { + kind: 1018, + name: "Poll Response", + description: "Response to a poll", + nip: "88", + icon: ListChecks, + }, + // Data vending machine 5000: { kind: 5000, @@ -329,13 +415,6 @@ export const EVENT_KINDS: Record = { nip: "88", icon: ListChecks, }, - 1018: { - kind: 1018, - name: "Poll Response", - description: "Response to a poll", - nip: "88", - icon: ListChecks, - }, 1111: { kind: 1111, name: "Comment", @@ -355,7 +434,7 @@ export const EVENT_KINDS: Record = { name: "Voice Message", description: "Voice Message", nip: "A0", - icon: MessageCircle, + icon: Mic, }, 1311: { kind: 1311, @@ -389,32 +468,62 @@ export const EVENT_KINDS: Record = { }, 1619: { kind: 1619, - name: "Git Status", - description: "Git repository status", + name: "PR Updates", + description: "Pull Request Updates", nip: "34", icon: GitBranch, }, 1621: { kind: 1621, name: "Issue", - description: "Git Issues", + description: "Issues", nip: "34", icon: AlertCircle, }, 1622: { kind: 1622, - name: "Release", - description: "Git Release Artifacts", + name: "Git Replies", + description: "Git Replies (deprecated)", nip: "34", - icon: Package, + icon: MessageCircle, }, - 818: { - kind: 818, - name: "Merge Request", - description: "Merge Requests", - nip: "54", - icon: GitBranch, + 1630: { + kind: 1630, + name: "Status", + description: "Status", + nip: "34", + icon: Activity, }, + 1631: { + kind: 1631, + name: "Status", + description: "Status", + nip: "34", + icon: Activity, + }, + 1632: { + kind: 1632, + name: "Status", + description: "Status", + nip: "34", + icon: Activity, + }, + 1633: { + kind: 1633, + name: "Status", + description: "Status", + nip: "34", + icon: Activity, + }, + + // Problem tracking - External spec (nostrocket), commented out + // 1971: { + // kind: 1971, + // name: "Problem Tracker", + // description: "Problem Tracker", + // nip: "nostrocket", + // icon: Bug, + // }, // Moderation 1984: { @@ -431,15 +540,20 @@ export const EVENT_KINDS: Record = { nip: "32", icon: Tag, }, - - // Community - 4550: { - kind: 4550, - name: "Community Post", - description: "Community Post Approval", - nip: "72", - icon: Users, - }, + // 1986: { + // kind: 1986, + // name: "Relay Reviews", + // description: "Relay reviews", + // nip: "", + // icon: Star, + // }, + // 1987: { + // kind: 1987, + // name: "AI Embeddings", + // description: "AI Embeddings / Vector lists", + // nip: "NKBIP-02", + // icon: Brain, + // }, // Torrents 2003: { @@ -456,6 +570,93 @@ export const EVENT_KINDS: Record = { nip: "35", icon: MessageCircle, }, + // 2022: { + // kind: 2022, + // name: "Coinjoin Pool", + // description: "Coinjoin Pool", + // nip: "joinstr", + // icon: Coins, + // }, + + // Community + 4550: { + kind: 4550, + name: "Community Post", + description: "Community Post Approval", + nip: "72", + icon: Users, + }, + + // Cashu + 7374: { + kind: 7374, + name: "Reserved Cashu Token", + description: "Reserved Cashu Wallet Tokens", + nip: "60", + icon: Wallet, + }, + 7375: { + kind: 7375, + name: "Cashu Token", + description: "Cashu Wallet Tokens", + nip: "60", + icon: Wallet, + }, + 7376: { + kind: 7376, + name: "Cashu History", + description: "Cashu Wallet History", + nip: "60", + icon: Wallet, + }, + + // Geocaching - External spec, commented out + // 7516: { + // kind: 7516, + // name: "Geocache Log", + // description: "Geocache log", + // nip: "geocaching", + // icon: MapPin, + // }, + // 7517: { + // kind: 7517, + // name: "Geocache Proof", + // description: "Geocache proof of find", + // nip: "geocaching", + // icon: MapPinCheck, + // }, + + // User management + 8000: { + kind: 8000, + name: "Add User", + description: "Add User", + nip: "43", + icon: UserPlus, + }, + 8001: { + kind: 8001, + name: "Remove User", + description: "Remove User", + nip: "43", + icon: UserMinus, + }, + + // Zaps + 9321: { + kind: 9321, + name: "Nutzap", + description: "Nutzap", + nip: "61", + icon: Zap, + }, + // 9467: { + // kind: 9467, + // name: "Tidal Login", + // description: "Tidal login", + // nip: "Tidal-nostr", + // icon: LogIn, + // }, // Zaps 9041: { @@ -541,10 +742,24 @@ export const EVENT_KINDS: Record = { 10009: { kind: 10009, name: "User Groups", - description: "User groups list", + description: "User groups", nip: "51", icon: Users, }, + 10012: { + kind: 10012, + name: "Favorite Relays", + description: "Favorite relays list", + nip: "51", + icon: Star, + }, + 10013: { + kind: 10013, + name: "Private Event Relay", + description: "Private event relay list", + nip: "37", + icon: Lock, + }, 10015: { kind: 10015, name: "Interests", @@ -552,6 +767,20 @@ export const EVENT_KINDS: Record = { nip: "51", icon: Heart, }, + 10019: { + kind: 10019, + name: "Nutzap Mint Rec", + description: "Nutzap Mint Recommendation", + nip: "61", + icon: Coins, + }, + 10020: { + kind: 10020, + name: "Media Follows", + description: "Media follows", + nip: "51", + icon: Play, + }, 10030: { kind: 10030, name: "Emoji List", @@ -559,36 +788,155 @@ export const EVENT_KINDS: Record = { nip: "51", icon: Smile, }, + 10050: { + kind: 10050, + name: "DM Relay List", + description: "Relay list to receive DMs", + nip: "51", + icon: Mail, + }, + // 10051: { + // kind: 10051, + // name: "KeyPackage Relays", + // description: "KeyPackage Relays List", + // nip: "Marmot", + // icon: Key, + // }, + // 10063: { + // kind: 10063, + // name: "User Server List", + // description: "User server list", + // nip: "Blossom", + // icon: Server, + // }, 10096: { kind: 10096, name: "File Storage", - description: "File storage server list", + description: "File storage server list (deprecated)", nip: "96", icon: Cloud, }, + 10166: { + kind: 10166, + name: "Relay Monitor", + description: "Relay Monitor Announcement", + nip: "66", + icon: Activity, + }, + // 10312: { + // kind: 10312, + // name: "Room Presence", + // description: "Room Presence", + // nip: "53", + // icon: Users, + // }, + // 10377: { + // kind: 10377, + // name: "Proxy Announce", + // description: "Proxy Announcement", + // nip: "Nostr Epoxy", + // icon: Network, + // }, + // 11111: { + // kind: 11111, + // name: "Transport Method", + // description: "Transport Method Announcement", + // nip: "Nostr Epoxy", + // icon: Truck, + // }, - // Cashu - 7374: { - kind: 7374, - name: "Cashu Token", - description: "Cashu Wallet Tokens", - nip: "60", + // Wallet & Auth + 13194: { + kind: 13194, + name: "Wallet Info", + description: "Wallet Info", + nip: "47", icon: Wallet, }, - 7375: { - kind: 7375, - name: "Cashu Quote", - description: "Cashu Mint Quote", - nip: "60", + // 13534: { + // kind: 13534, + // name: "Membership Lists", + // description: "Membership Lists", + // nip: "43", + // icon: Users, + // }, + // 17375: { + // kind: 17375, + // name: "Cashu Wallet Event", + // description: "Cashu Wallet Event", + // nip: "60", + // icon: Wallet, + // }, + // 21000: { + // kind: 21000, + // name: "Lightning Pub RPC", + // description: "Lightning Pub RPC", + // nip: "Lightning.Pub", + // icon: Zap, + // }, + 22242: { + kind: 22242, + name: "Client Auth", + description: "Client Authentication", + nip: "42", + icon: Key, + }, + 23194: { + kind: 23194, + name: "Wallet Request", + description: "Wallet Request", + nip: "47", icon: Wallet, }, - 7376: { - kind: 7376, - name: "Cashu Request", - description: "Cashu Melt Quote", - nip: "60", + 23195: { + kind: 23195, + name: "Wallet Response", + description: "Wallet Response", + nip: "47", icon: Wallet, }, + 24133: { + kind: 24133, + name: "Nostr Connect", + description: "Nostr Connect", + nip: "46", + icon: Key, + }, + // 24242: { + // kind: 24242, + // name: "Blossom Blobs", + // description: "Blobs stored on mediaservers", + // nip: "Blossom", + // icon: Database, + // }, + 27235: { + kind: 27235, + name: "HTTP Auth", + description: "HTTP Authentication", + 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, + // }, // Group Control 9000: { @@ -655,50 +1003,6 @@ export const EVENT_KINDS: Record = { icon: Settings, }, - // Wallet & Auth - 13194: { - kind: 13194, - name: "Wallet Info", - description: "Wallet Info", - nip: "47", - icon: Wallet, - }, - 22242: { - kind: 22242, - name: "Client Auth", - description: "Client Authentication", - nip: "42", - icon: Key, - }, - 23194: { - kind: 23194, - name: "Wallet Request", - description: "Wallet Request", - nip: "47", - icon: Wallet, - }, - 23195: { - kind: 23195, - name: "Wallet Response", - description: "Wallet Response", - nip: "47", - icon: Wallet, - }, - 24133: { - kind: 24133, - name: "Nostr Connect", - description: "Nostr Connect", - nip: "46", - icon: Key, - }, - 27235: { - kind: 27235, - name: "HTTP Auth", - description: "HTTP Authentication", - nip: "98", - icon: Key, - }, - // Replaceable events (kind 30000+) 30000: { kind: 30000, @@ -710,7 +1014,7 @@ export const EVENT_KINDS: Record = { 30001: { kind: 30001, name: "Generic Lists", - description: "Generic lists", + description: "Generic lists (deprecated)", nip: "51", icon: List, }, @@ -728,6 +1032,27 @@ export const EVENT_KINDS: Record = { nip: "51", icon: Bookmark, }, + 30004: { + kind: 30004, + name: "Curation Sets", + description: "Curation sets", + nip: "51", + icon: ListFilter, + }, + 30005: { + kind: 30005, + name: "Video Sets", + description: "Video sets", + nip: "51", + icon: Video, + }, + 30007: { + kind: 30007, + name: "Kind Mute Sets", + description: "Kind mute sets", + nip: "51", + icon: Filter, + }, 30008: { kind: 30008, name: "Profile Badges", @@ -742,6 +1067,13 @@ export const EVENT_KINDS: Record = { nip: "58", icon: Award, }, + 30015: { + kind: 30015, + name: "Interest Sets", + description: "Interest sets", + nip: "51", + icon: Heart, + }, 30017: { kind: 30017, name: "Stall", @@ -756,6 +1088,20 @@ export const EVENT_KINDS: Record = { nip: "15", icon: ShoppingBag, }, + 30019: { + kind: 30019, + name: "Marketplace UI/UX", + description: "Marketplace UI/UX", + nip: "15", + icon: Grid3x3, + }, + 30020: { + kind: 30020, + name: "Product Auction", + description: "Product sold as an auction", + nip: "15", + icon: Gavel, + }, 30023: { kind: 30023, name: "Article", @@ -777,6 +1123,27 @@ export const EVENT_KINDS: Record = { nip: "51", icon: Smile, }, + // 30040: { + // kind: 30040, + // name: "Publication Index", + // description: "Curated Publication Index", + // nip: "NKBIP-01", + // icon: Library, + // }, + // 30041: { + // kind: 30041, + // name: "Publication Content", + // description: "Curated Publication Content", + // nip: "NKBIP-01", + // icon: FileText, + // }, + 30063: { + kind: 30063, + name: "Release Artifacts", + description: "Release artifact sets", + nip: "51", + icon: Package, + }, 30078: { kind: 30078, name: "App Data", @@ -784,6 +1151,20 @@ export const EVENT_KINDS: Record = { nip: "78", icon: Settings, }, + 30166: { + kind: 30166, + name: "Relay Discovery", + description: "Relay Discovery", + nip: "66", + icon: Compass, + }, + 30267: { + kind: 30267, + name: "App Curation", + description: "App curation sets", + nip: "51", + icon: Grid3x3, + }, 30311: { kind: 30311, name: "Live Event", @@ -793,17 +1174,17 @@ export const EVENT_KINDS: Record = { }, 30312: { kind: 30312, - name: "Live Chat Msg", - description: "Live Chat Message (Deprecated)", + name: "Interactive Room", + description: "Interactive Room", nip: "53", - icon: MessageCircle, + icon: Users, }, 30313: { kind: 30313, - name: "Live Status", - description: "Live Event Status", + name: "Conference Event", + description: "Conference Event", nip: "53", - icon: Timer, + icon: Presentation, }, 30315: { kind: 30315, @@ -812,6 +1193,13 @@ export const EVENT_KINDS: Record = { nip: "38", icon: MessageSquare, }, + // 30388: { + // kind: 30388, + // name: "Slide Set", + // description: "Slide Set", + // nip: "Corny Chat", + // icon: Presentation, + // }, 30402: { kind: 30402, name: "Classified", @@ -833,6 +1221,13 @@ export const EVENT_KINDS: Record = { nip: "34", icon: GitBranch, }, + 30618: { + kind: 30618, + name: "Repo State", + description: "Repository state announcements", + nip: "34", + icon: GitBranch, + }, 30818: { kind: 30818, name: "Wiki", @@ -843,10 +1238,31 @@ export const EVENT_KINDS: Record = { 30819: { kind: 30819, name: "Wiki Redirect", - description: "Redirects to a wiki article", + description: "Redirects", nip: "54", - icon: FileText, + icon: ArrowRight, }, + 31234: { + kind: 31234, + name: "Draft Event", + description: "Draft Event", + nip: "37", + icon: FileEdit, + }, + // 31388: { + // kind: 31388, + // name: "Link Set", + // description: "Link Set", + // nip: "Corny Chat", + // icon: Link, + // }, + // 31890: { + // kind: 31890, + // name: "Feed", + // description: "Feed", + // nip: "NUD: Custom Feeds", + // icon: Rss, + // }, 31922: { kind: 31922, name: "Calendar Event", @@ -882,6 +1298,20 @@ export const EVENT_KINDS: Record = { nip: "89", icon: Settings, }, + 31990: { + kind: 31990, + name: "Handler Info", + description: "Handler information", + nip: "89", + icon: Info, + }, + // 32267: { + // kind: 32267, + // name: "Software App", + // description: "Software Application", + // nip: "", + // icon: AppWindow, + // }, 34550: { kind: 34550, name: "Community", @@ -889,12 +1319,26 @@ export const EVENT_KINDS: Record = { nip: "72", icon: Users, }, - 37516: { - kind: 37516, - name: "Geocache", - description: "Geocache listing", - nip: "geocaching", - icon: Map, + // 37516: { + // kind: 37516, + // name: "Geocache", + // description: "Geocache listing", + // nip: "geocaching", + // icon: Map, + // }, + 38172: { + kind: 38172, + name: "Cashu Mint", + description: "Cashu Mint Announcement", + nip: "87", + icon: Coins, + }, + 38173: { + kind: 38173, + name: "Fedimint Announce", + description: "Fedimint Announcement", + nip: "87", + icon: Coins, }, 38383: { kind: 38383, @@ -903,6 +1347,20 @@ export const EVENT_KINDS: Record = { nip: "69", icon: ShoppingBag, }, + 39089: { + kind: 39089, + name: "Starter Packs", + description: "Starter packs", + nip: "51", + icon: PackageOpen, + }, + 39092: { + kind: 39092, + name: "Media Starter Packs", + description: "Media starter packs", + nip: "51", + icon: Play, + }, 39701: { kind: 39701, name: "Web Bookmarks",