eventKinds.js raw

   1  /**
   2   * Nostr Event Kinds Database
   3   * Auto-generated from https://git.mleku.dev/mleku/nostr/raw/branch/main/encoders/kind/kinds.json
   4   * Version: 2025-12-21
   5   * Source: https://github.com/nostr-protocol/nips
   6   *
   7   * DO NOT EDIT - This file is auto-generated by scripts/fetch-kinds.js
   8   */
   9  
  10  export const eventKinds = [
  11    {
  12      "kind": 0,
  13      "name": "Metadata",
  14      "description": "User profile information (name, about, picture, nip05, etc.)",
  15      "nip": "01",
  16      "isReplaceable": true,
  17      "template": {
  18        "kind": 0,
  19        "content": "",
  20        "tags": []
  21      }
  22    },
  23    {
  24      "kind": 1,
  25      "name": "Short Text Note",
  26      "description": "Short-form text post (like a tweet)",
  27      "nip": "01",
  28      "template": {
  29        "kind": 1,
  30        "content": "",
  31        "tags": []
  32      }
  33    },
  34    {
  35      "kind": 2,
  36      "name": "Recommend Relay",
  37      "description": "Relay recommendation",
  38      "nip": "01",
  39      "deprecated": true,
  40      "template": {
  41        "kind": 2,
  42        "content": "",
  43        "tags": []
  44      }
  45    },
  46    {
  47      "kind": 3,
  48      "name": "Follows",
  49      "description": "Following list with optional relay hints",
  50      "nip": "02",
  51      "isReplaceable": true,
  52      "template": {
  53        "kind": 3,
  54        "content": "",
  55        "tags": []
  56      }
  57    },
  58    {
  59      "kind": 4,
  60      "name": "Encrypted Direct Message",
  61      "description": "Private message using NIP-04 encryption",
  62      "nip": "04",
  63      "deprecated": true,
  64      "template": {
  65        "kind": 4,
  66        "content": "",
  67        "tags": []
  68      }
  69    },
  70    {
  71      "kind": 5,
  72      "name": "Event Deletion Request",
  73      "description": "Request to delete events",
  74      "nip": "09",
  75      "template": {
  76        "kind": 5,
  77        "content": "",
  78        "tags": []
  79      }
  80    },
  81    {
  82      "kind": 6,
  83      "name": "Repost",
  84      "description": "Share/repost another text note",
  85      "nip": "18",
  86      "template": {
  87        "kind": 6,
  88        "content": "",
  89        "tags": []
  90      }
  91    },
  92    {
  93      "kind": 7,
  94      "name": "Reaction",
  95      "description": "Like, emoji reaction to an event",
  96      "nip": "25",
  97      "template": {
  98        "kind": 7,
  99        "content": "",
 100        "tags": []
 101      }
 102    },
 103    {
 104      "kind": 8,
 105      "name": "Badge Award",
 106      "description": "Award a badge to someone",
 107      "nip": "58",
 108      "template": {
 109        "kind": 8,
 110        "content": "",
 111        "tags": []
 112      }
 113    },
 114    {
 115      "kind": 9,
 116      "name": "Chat Message",
 117      "description": "Chat message",
 118      "nip": "C7",
 119      "template": {
 120        "kind": 9,
 121        "content": "",
 122        "tags": []
 123      }
 124    },
 125    {
 126      "kind": 10,
 127      "name": "Group Chat Threaded Reply",
 128      "description": "Threaded reply in group chat",
 129      "nip": "29",
 130      "deprecated": true,
 131      "template": {
 132        "kind": 10,
 133        "content": "",
 134        "tags": []
 135      }
 136    },
 137    {
 138      "kind": 11,
 139      "name": "Thread",
 140      "description": "Thread event",
 141      "nip": "7D",
 142      "template": {
 143        "kind": 11,
 144        "content": "",
 145        "tags": []
 146      }
 147    },
 148    {
 149      "kind": 12,
 150      "name": "Group Thread Reply",
 151      "description": "Reply in group thread",
 152      "nip": "29",
 153      "deprecated": true,
 154      "template": {
 155        "kind": 12,
 156        "content": "",
 157        "tags": []
 158      }
 159    },
 160    {
 161      "kind": 13,
 162      "name": "Seal",
 163      "description": "Sealed/encrypted event wrapper",
 164      "nip": "59",
 165      "template": {
 166        "kind": 13,
 167        "content": "",
 168        "tags": []
 169      }
 170    },
 171    {
 172      "kind": 14,
 173      "name": "Direct Message",
 174      "description": "Private direct message using NIP-17",
 175      "nip": "17",
 176      "template": {
 177        "kind": 14,
 178        "content": "",
 179        "tags": []
 180      }
 181    },
 182    {
 183      "kind": 15,
 184      "name": "File Message",
 185      "description": "File message in DMs",
 186      "nip": "17",
 187      "template": {
 188        "kind": 15,
 189        "content": "",
 190        "tags": []
 191      }
 192    },
 193    {
 194      "kind": 16,
 195      "name": "Generic Repost",
 196      "description": "Repost any event kind",
 197      "nip": "18",
 198      "template": {
 199        "kind": 16,
 200        "content": "",
 201        "tags": []
 202      }
 203    },
 204    {
 205      "kind": 17,
 206      "name": "Reaction to Website",
 207      "description": "Reaction to a website URL",
 208      "nip": "25",
 209      "template": {
 210        "kind": 17,
 211        "content": "",
 212        "tags": []
 213      }
 214    },
 215    {
 216      "kind": 20,
 217      "name": "Picture",
 218      "description": "Picture-first feed post",
 219      "nip": "68",
 220      "template": {
 221        "kind": 20,
 222        "content": "",
 223        "tags": []
 224      }
 225    },
 226    {
 227      "kind": 21,
 228      "name": "Video Event",
 229      "description": "Horizontal video event",
 230      "nip": "71",
 231      "template": {
 232        "kind": 21,
 233        "content": "",
 234        "tags": []
 235      }
 236    },
 237    {
 238      "kind": 22,
 239      "name": "Short-form Video",
 240      "description": "Short-form portrait video (like TikTok)",
 241      "nip": "71",
 242      "template": {
 243        "kind": 22,
 244        "content": "",
 245        "tags": []
 246      }
 247    },
 248    {
 249      "kind": 40,
 250      "name": "Channel Creation",
 251      "description": "Create a public chat channel",
 252      "nip": "28",
 253      "template": {
 254        "kind": 40,
 255        "content": "",
 256        "tags": []
 257      }
 258    },
 259    {
 260      "kind": 41,
 261      "name": "Channel Metadata",
 262      "description": "Set channel name, about, picture",
 263      "nip": "28",
 264      "template": {
 265        "kind": 41,
 266        "content": "",
 267        "tags": []
 268      }
 269    },
 270    {
 271      "kind": 42,
 272      "name": "Channel Message",
 273      "description": "Post message in channel",
 274      "nip": "28",
 275      "template": {
 276        "kind": 42,
 277        "content": "",
 278        "tags": []
 279      }
 280    },
 281    {
 282      "kind": 43,
 283      "name": "Channel Hide Message",
 284      "description": "Hide a message in channel",
 285      "nip": "28",
 286      "template": {
 287        "kind": 43,
 288        "content": "",
 289        "tags": []
 290      }
 291    },
 292    {
 293      "kind": 44,
 294      "name": "Channel Mute User",
 295      "description": "Mute a user in channel",
 296      "nip": "28",
 297      "template": {
 298        "kind": 44,
 299        "content": "",
 300        "tags": []
 301      }
 302    },
 303    {
 304      "kind": 62,
 305      "name": "Request to Vanish",
 306      "description": "Request permanent deletion of all user data",
 307      "nip": "62",
 308      "template": {
 309        "kind": 62,
 310        "content": "",
 311        "tags": []
 312      }
 313    },
 314    {
 315      "kind": 64,
 316      "name": "Chess (PGN)",
 317      "description": "Chess game in PGN format",
 318      "nip": "64",
 319      "template": {
 320        "kind": 64,
 321        "content": "",
 322        "tags": []
 323      }
 324    },
 325    {
 326      "kind": 443,
 327      "name": "KeyPackage",
 328      "description": "Marmot protocol key package",
 329      "nip": null,
 330      "spec": "Marmot",
 331      "template": {
 332        "kind": 443,
 333        "content": "",
 334        "tags": []
 335      }
 336    },
 337    {
 338      "kind": 444,
 339      "name": "Welcome Message",
 340      "description": "Marmot protocol welcome message",
 341      "nip": null,
 342      "spec": "Marmot",
 343      "template": {
 344        "kind": 444,
 345        "content": "",
 346        "tags": []
 347      }
 348    },
 349    {
 350      "kind": 445,
 351      "name": "Group Event",
 352      "description": "Marmot protocol group event",
 353      "nip": null,
 354      "spec": "Marmot",
 355      "template": {
 356        "kind": 445,
 357        "content": "",
 358        "tags": []
 359      }
 360    },
 361    {
 362      "kind": 818,
 363      "name": "Merge Requests",
 364      "description": "Git merge request",
 365      "nip": "54",
 366      "template": {
 367        "kind": 818,
 368        "content": "",
 369        "tags": []
 370      }
 371    },
 372    {
 373      "kind": 1018,
 374      "name": "Poll Response",
 375      "description": "Response to a poll",
 376      "nip": "88",
 377      "template": {
 378        "kind": 1018,
 379        "content": "",
 380        "tags": []
 381      }
 382    },
 383    {
 384      "kind": 1021,
 385      "name": "Bid",
 386      "description": "Auction bid",
 387      "nip": "15",
 388      "template": {
 389        "kind": 1021,
 390        "content": "",
 391        "tags": []
 392      }
 393    },
 394    {
 395      "kind": 1022,
 396      "name": "Bid Confirmation",
 397      "description": "Confirmation of auction bid",
 398      "nip": "15",
 399      "template": {
 400        "kind": 1022,
 401        "content": "",
 402        "tags": []
 403      }
 404    },
 405    {
 406      "kind": 1040,
 407      "name": "OpenTimestamps",
 408      "description": "OpenTimestamps attestation",
 409      "nip": "03",
 410      "template": {
 411        "kind": 1040,
 412        "content": "",
 413        "tags": []
 414      }
 415    },
 416    {
 417      "kind": 1059,
 418      "name": "Gift Wrap",
 419      "description": "Encrypted gift-wrapped event",
 420      "nip": "59",
 421      "template": {
 422        "kind": 1059,
 423        "content": "",
 424        "tags": []
 425      }
 426    },
 427    {
 428      "kind": 1060,
 429      "name": "Gift Wrap (Kind 4)",
 430      "description": "Gift wrap variant for NIP-04 compatibility",
 431      "nip": "59",
 432      "template": {
 433        "kind": 1060,
 434        "content": "",
 435        "tags": []
 436      }
 437    },
 438    {
 439      "kind": 1063,
 440      "name": "File Metadata",
 441      "description": "Metadata for shared files",
 442      "nip": "94",
 443      "template": {
 444        "kind": 1063,
 445        "content": "",
 446        "tags": []
 447      }
 448    },
 449    {
 450      "kind": 1068,
 451      "name": "Poll",
 452      "description": "Create a poll",
 453      "nip": "88",
 454      "template": {
 455        "kind": 1068,
 456        "content": "",
 457        "tags": []
 458      }
 459    },
 460    {
 461      "kind": 1111,
 462      "name": "Comment",
 463      "description": "Comment on events or external content",
 464      "nip": "22",
 465      "template": {
 466        "kind": 1111,
 467        "content": "",
 468        "tags": []
 469      }
 470    },
 471    {
 472      "kind": 1222,
 473      "name": "Voice Message",
 474      "description": "Voice message",
 475      "nip": "A0",
 476      "template": {
 477        "kind": 1222,
 478        "content": "",
 479        "tags": []
 480      }
 481    },
 482    {
 483      "kind": 1244,
 484      "name": "Voice Message Comment",
 485      "description": "Comment on voice message",
 486      "nip": "A0",
 487      "template": {
 488        "kind": 1244,
 489        "content": "",
 490        "tags": []
 491      }
 492    },
 493    {
 494      "kind": 1311,
 495      "name": "Live Chat Message",
 496      "description": "Message in live stream chat",
 497      "nip": "53",
 498      "template": {
 499        "kind": 1311,
 500        "content": "",
 501        "tags": []
 502      }
 503    },
 504    {
 505      "kind": 1337,
 506      "name": "Code Snippet",
 507      "description": "Code snippet post",
 508      "nip": "C0",
 509      "template": {
 510        "kind": 1337,
 511        "content": "",
 512        "tags": []
 513      }
 514    },
 515    {
 516      "kind": 1517,
 517      "name": "Bitcoin Block",
 518      "description": "Bitcoin block data",
 519      "nip": null,
 520      "spec": "Nostrocket",
 521      "template": {
 522        "kind": 1517,
 523        "content": "",
 524        "tags": []
 525      }
 526    },
 527    {
 528      "kind": 1617,
 529      "name": "Patches",
 530      "description": "Git patches",
 531      "nip": "34",
 532      "template": {
 533        "kind": 1617,
 534        "content": "",
 535        "tags": []
 536      }
 537    },
 538    {
 539      "kind": 1618,
 540      "name": "Pull Requests",
 541      "description": "Git pull request",
 542      "nip": "34",
 543      "template": {
 544        "kind": 1618,
 545        "content": "",
 546        "tags": []
 547      }
 548    },
 549    {
 550      "kind": 1619,
 551      "name": "Pull Request Updates",
 552      "description": "Updates to git pull request",
 553      "nip": "34",
 554      "template": {
 555        "kind": 1619,
 556        "content": "",
 557        "tags": []
 558      }
 559    },
 560    {
 561      "kind": 1621,
 562      "name": "Issues",
 563      "description": "Git issues",
 564      "nip": "34",
 565      "template": {
 566        "kind": 1621,
 567        "content": "",
 568        "tags": []
 569      }
 570    },
 571    {
 572      "kind": 1622,
 573      "name": "Git Replies",
 574      "description": "Replies on git objects",
 575      "nip": "34",
 576      "deprecated": true,
 577      "template": {
 578        "kind": 1622,
 579        "content": "",
 580        "tags": []
 581      }
 582    },
 583    {
 584      "kind": 1630,
 585      "name": "Status",
 586      "description": "Git status",
 587      "nip": "34",
 588      "template": {
 589        "kind": 1630,
 590        "content": "",
 591        "tags": []
 592      }
 593    },
 594    {
 595      "kind": 1631,
 596      "name": "Status",
 597      "description": "Git status",
 598      "nip": "34",
 599      "template": {
 600        "kind": 1631,
 601        "content": "",
 602        "tags": []
 603      }
 604    },
 605    {
 606      "kind": 1632,
 607      "name": "Status",
 608      "description": "Git status",
 609      "nip": "34",
 610      "template": {
 611        "kind": 1632,
 612        "content": "",
 613        "tags": []
 614      }
 615    },
 616    {
 617      "kind": 1633,
 618      "name": "Status",
 619      "description": "Git status",
 620      "nip": "34",
 621      "template": {
 622        "kind": 1633,
 623        "content": "",
 624        "tags": []
 625      }
 626    },
 627    {
 628      "kind": 1808,
 629      "name": "Live Stream",
 630      "description": "Live streaming event",
 631      "nip": null,
 632      "spec": "zap.stream",
 633      "template": {
 634        "kind": 1808,
 635        "content": "",
 636        "tags": []
 637      }
 638    },
 639    {
 640      "kind": 1971,
 641      "name": "Problem Tracker",
 642      "description": "Problem tracking",
 643      "nip": null,
 644      "spec": "Nostrocket",
 645      "template": {
 646        "kind": 1971,
 647        "content": "",
 648        "tags": []
 649      }
 650    },
 651    {
 652      "kind": 1984,
 653      "name": "Reporting",
 654      "description": "Report content or users",
 655      "nip": "56",
 656      "template": {
 657        "kind": 1984,
 658        "content": "",
 659        "tags": []
 660      }
 661    },
 662    {
 663      "kind": 1985,
 664      "name": "Label",
 665      "description": "Label/tag content with namespace",
 666      "nip": "32",
 667      "template": {
 668        "kind": 1985,
 669        "content": "",
 670        "tags": []
 671      }
 672    },
 673    {
 674      "kind": 1986,
 675      "name": "Relay Reviews",
 676      "description": "Reviews of relays",
 677      "nip": null,
 678      "template": {
 679        "kind": 1986,
 680        "content": "",
 681        "tags": []
 682      }
 683    },
 684    {
 685      "kind": 1987,
 686      "name": "AI Embeddings",
 687      "description": "AI embeddings/vector lists",
 688      "nip": null,
 689      "spec": "NKBIP-02",
 690      "template": {
 691        "kind": 1987,
 692        "content": "",
 693        "tags": []
 694      }
 695    },
 696    {
 697      "kind": 2003,
 698      "name": "Torrent",
 699      "description": "Torrent magnet link",
 700      "nip": "35",
 701      "template": {
 702        "kind": 2003,
 703        "content": "",
 704        "tags": []
 705      }
 706    },
 707    {
 708      "kind": 2004,
 709      "name": "Torrent Comment",
 710      "description": "Comment on torrent",
 711      "nip": "35",
 712      "template": {
 713        "kind": 2004,
 714        "content": "",
 715        "tags": []
 716      }
 717    },
 718    {
 719      "kind": 2022,
 720      "name": "Coinjoin Pool",
 721      "description": "Coinjoin coordination",
 722      "nip": null,
 723      "spec": "joinstr",
 724      "template": {
 725        "kind": 2022,
 726        "content": "",
 727        "tags": []
 728      }
 729    },
 730    {
 731      "kind": 4550,
 732      "name": "Community Post Approval",
 733      "description": "Approve post in community",
 734      "nip": "72",
 735      "template": {
 736        "kind": 4550,
 737        "content": "",
 738        "tags": []
 739      }
 740    },
 741    {
 742      "kind": 5000,
 743      "name": "Job Request",
 744      "description": "Data vending machine job request (start of range)",
 745      "nip": "90",
 746      "template": {
 747        "kind": 5000,
 748        "content": "",
 749        "tags": []
 750      }
 751    },
 752    {
 753      "kind": 6000,
 754      "name": "Job Result",
 755      "description": "Data vending machine job result (start of range)",
 756      "nip": "90",
 757      "template": {
 758        "kind": 6000,
 759        "content": "",
 760        "tags": []
 761      }
 762    },
 763    {
 764      "kind": 7000,
 765      "name": "Job Feedback",
 766      "description": "Feedback on job request/result",
 767      "nip": "90",
 768      "template": {
 769        "kind": 7000,
 770        "content": "",
 771        "tags": []
 772      }
 773    },
 774    {
 775      "kind": 7374,
 776      "name": "Reserved Cashu Wallet Tokens",
 777      "description": "Reserved Cashu wallet tokens",
 778      "nip": "60",
 779      "template": {
 780        "kind": 7374,
 781        "content": "",
 782        "tags": []
 783      }
 784    },
 785    {
 786      "kind": 7375,
 787      "name": "Cashu Wallet Tokens",
 788      "description": "Cashu wallet tokens",
 789      "nip": "60",
 790      "template": {
 791        "kind": 7375,
 792        "content": "",
 793        "tags": []
 794      }
 795    },
 796    {
 797      "kind": 7376,
 798      "name": "Cashu Wallet History",
 799      "description": "Cashu wallet transaction history",
 800      "nip": "60",
 801      "template": {
 802        "kind": 7376,
 803        "content": "",
 804        "tags": []
 805      }
 806    },
 807    {
 808      "kind": 7516,
 809      "name": "Geocache Log",
 810      "description": "Geocaching log entry",
 811      "nip": null,
 812      "spec": "geocaching",
 813      "template": {
 814        "kind": 7516,
 815        "content": "",
 816        "tags": []
 817      }
 818    },
 819    {
 820      "kind": 7517,
 821      "name": "Geocache Proof of Find",
 822      "description": "Proof of geocache find",
 823      "nip": null,
 824      "spec": "geocaching",
 825      "template": {
 826        "kind": 7517,
 827        "content": "",
 828        "tags": []
 829      }
 830    },
 831    {
 832      "kind": 8000,
 833      "name": "Add User",
 834      "description": "Add user to group",
 835      "nip": "43",
 836      "template": {
 837        "kind": 8000,
 838        "content": "",
 839        "tags": []
 840      }
 841    },
 842    {
 843      "kind": 8001,
 844      "name": "Remove User",
 845      "description": "Remove user from group",
 846      "nip": "43",
 847      "template": {
 848        "kind": 8001,
 849        "content": "",
 850        "tags": []
 851      }
 852    },
 853    {
 854      "kind": 9000,
 855      "name": "Group Control Events",
 856      "description": "Group control events (start of range)",
 857      "nip": "29",
 858      "template": {
 859        "kind": 9000,
 860        "content": "",
 861        "tags": []
 862      }
 863    },
 864    {
 865      "kind": 9041,
 866      "name": "Zap Goal",
 867      "description": "Fundraising goal for zaps",
 868      "nip": "75",
 869      "template": {
 870        "kind": 9041,
 871        "content": "",
 872        "tags": []
 873      }
 874    },
 875    {
 876      "kind": 9321,
 877      "name": "Nutzap",
 878      "description": "Cashu nutzap",
 879      "nip": "61",
 880      "template": {
 881        "kind": 9321,
 882        "content": "",
 883        "tags": []
 884      }
 885    },
 886    {
 887      "kind": 9467,
 888      "name": "Tidal Login",
 889      "description": "Tidal streaming login",
 890      "nip": null,
 891      "spec": "Tidal-nostr",
 892      "template": {
 893        "kind": 9467,
 894        "content": "",
 895        "tags": []
 896      }
 897    },
 898    {
 899      "kind": 9734,
 900      "name": "Zap Request",
 901      "description": "Request Lightning payment",
 902      "nip": "57",
 903      "template": {
 904        "kind": 9734,
 905        "content": "",
 906        "tags": []
 907      }
 908    },
 909    {
 910      "kind": 9735,
 911      "name": "Zap",
 912      "description": "Lightning payment receipt",
 913      "nip": "57",
 914      "template": {
 915        "kind": 9735,
 916        "content": "",
 917        "tags": []
 918      }
 919    },
 920    {
 921      "kind": 9802,
 922      "name": "Highlights",
 923      "description": "Highlighted text selection",
 924      "nip": "84",
 925      "template": {
 926        "kind": 9802,
 927        "content": "",
 928        "tags": []
 929      }
 930    },
 931    {
 932      "kind": 10000,
 933      "name": "Mute List",
 934      "description": "List of muted users/content",
 935      "nip": "51",
 936      "isReplaceable": true,
 937      "template": {
 938        "kind": 10000,
 939        "content": "",
 940        "tags": []
 941      }
 942    },
 943    {
 944      "kind": 10001,
 945      "name": "Pin List",
 946      "description": "Pinned events",
 947      "nip": "51",
 948      "isReplaceable": true,
 949      "template": {
 950        "kind": 10001,
 951        "content": "",
 952        "tags": []
 953      }
 954    },
 955    {
 956      "kind": 10002,
 957      "name": "Relay List Metadata",
 958      "description": "User's preferred relays for read/write",
 959      "nip": "65",
 960      "isReplaceable": true,
 961      "template": {
 962        "kind": 10002,
 963        "content": "",
 964        "tags": []
 965      }
 966    },
 967    {
 968      "kind": 10003,
 969      "name": "Bookmark List",
 970      "description": "Bookmarked events",
 971      "nip": "51",
 972      "isReplaceable": true,
 973      "template": {
 974        "kind": 10003,
 975        "content": "",
 976        "tags": []
 977      }
 978    },
 979    {
 980      "kind": 10004,
 981      "name": "Communities List",
 982      "description": "Communities user belongs to",
 983      "nip": "51",
 984      "isReplaceable": true,
 985      "template": {
 986        "kind": 10004,
 987        "content": "",
 988        "tags": []
 989      }
 990    },
 991    {
 992      "kind": 10005,
 993      "name": "Public Chats List",
 994      "description": "Public chats user is in",
 995      "nip": "51",
 996      "isReplaceable": true,
 997      "template": {
 998        "kind": 10005,
 999        "content": "",
1000        "tags": []
1001      }
1002    },
1003    {
1004      "kind": 10006,
1005      "name": "Blocked Relays List",
1006      "description": "Relays user has blocked",
1007      "nip": "51",
1008      "isReplaceable": true,
1009      "template": {
1010        "kind": 10006,
1011        "content": "",
1012        "tags": []
1013      }
1014    },
1015    {
1016      "kind": 10007,
1017      "name": "Search Relays List",
1018      "description": "Preferred search relays",
1019      "nip": "51",
1020      "isReplaceable": true,
1021      "template": {
1022        "kind": 10007,
1023        "content": "",
1024        "tags": []
1025      }
1026    },
1027    {
1028      "kind": 10008,
1029      "name": "Relay Group Configuration",
1030      "description": "Relay group configuration",
1031      "nip": null,
1032      "isReplaceable": true,
1033      "template": {
1034        "kind": 10008,
1035        "content": "",
1036        "tags": []
1037      }
1038    },
1039    {
1040      "kind": 10009,
1041      "name": "User Groups",
1042      "description": "Groups user belongs to",
1043      "nip": "29",
1044      "isReplaceable": true,
1045      "template": {
1046        "kind": 10009,
1047        "content": "",
1048        "tags": []
1049      }
1050    },
1051    {
1052      "kind": 10012,
1053      "name": "Favorite Relays List",
1054      "description": "User's favorite relays",
1055      "nip": "51",
1056      "isReplaceable": true,
1057      "template": {
1058        "kind": 10012,
1059        "content": "",
1060        "tags": []
1061      }
1062    },
1063    {
1064      "kind": 10013,
1065      "name": "Private Event Relay List",
1066      "description": "Relays for private events",
1067      "nip": "37",
1068      "isReplaceable": true,
1069      "template": {
1070        "kind": 10013,
1071        "content": "",
1072        "tags": []
1073      }
1074    },
1075    {
1076      "kind": 10015,
1077      "name": "Interests List",
1078      "description": "User interests/topics",
1079      "nip": "51",
1080      "isReplaceable": true,
1081      "template": {
1082        "kind": 10015,
1083        "content": "",
1084        "tags": []
1085      }
1086    },
1087    {
1088      "kind": 10019,
1089      "name": "Nutzap Mint Recommendation",
1090      "description": "Recommended Cashu mints for nutzaps",
1091      "nip": "61",
1092      "isReplaceable": true,
1093      "template": {
1094        "kind": 10019,
1095        "content": "",
1096        "tags": []
1097      }
1098    },
1099    {
1100      "kind": 10020,
1101      "name": "Media Follows",
1102      "description": "Followed media accounts",
1103      "nip": "51",
1104      "isReplaceable": true,
1105      "template": {
1106        "kind": 10020,
1107        "content": "",
1108        "tags": []
1109      }
1110    },
1111    {
1112      "kind": 10030,
1113      "name": "User Emoji List",
1114      "description": "Custom emoji list",
1115      "nip": "51",
1116      "isReplaceable": true,
1117      "template": {
1118        "kind": 10030,
1119        "content": "",
1120        "tags": []
1121      }
1122    },
1123    {
1124      "kind": 10050,
1125      "name": "DM Relays List",
1126      "description": "Relays to receive DMs on",
1127      "nip": "17",
1128      "isReplaceable": true,
1129      "template": {
1130        "kind": 10050,
1131        "content": "",
1132        "tags": []
1133      }
1134    },
1135    {
1136      "kind": 10051,
1137      "name": "KeyPackage Relays List",
1138      "description": "Marmot key package relays",
1139      "nip": null,
1140      "isReplaceable": true,
1141      "spec": "Marmot",
1142      "template": {
1143        "kind": 10051,
1144        "content": "",
1145        "tags": []
1146      }
1147    },
1148    {
1149      "kind": 10063,
1150      "name": "User Server List",
1151      "description": "Blossom server list",
1152      "nip": null,
1153      "isReplaceable": true,
1154      "spec": "Blossom",
1155      "template": {
1156        "kind": 10063,
1157        "content": "",
1158        "tags": []
1159      }
1160    },
1161    {
1162      "kind": 10096,
1163      "name": "File Storage Server List",
1164      "description": "File storage servers",
1165      "nip": "96",
1166      "isReplaceable": true,
1167      "deprecated": true,
1168      "template": {
1169        "kind": 10096,
1170        "content": "",
1171        "tags": []
1172      }
1173    },
1174    {
1175      "kind": 10166,
1176      "name": "Relay Monitor Announcement",
1177      "description": "Relay monitoring announcement",
1178      "nip": "66",
1179      "isReplaceable": true,
1180      "template": {
1181        "kind": 10166,
1182        "content": "",
1183        "tags": []
1184      }
1185    },
1186    {
1187      "kind": 10312,
1188      "name": "Room Presence",
1189      "description": "Presence in live room",
1190      "nip": "53",
1191      "isReplaceable": true,
1192      "template": {
1193        "kind": 10312,
1194        "content": "",
1195        "tags": []
1196      }
1197    },
1198    {
1199      "kind": 10377,
1200      "name": "Proxy Announcement",
1201      "description": "Nostr proxy announcement",
1202      "nip": null,
1203      "isReplaceable": true,
1204      "spec": "Nostr Epoxy",
1205      "template": {
1206        "kind": 10377,
1207        "content": "",
1208        "tags": []
1209      }
1210    },
1211    {
1212      "kind": 11111,
1213      "name": "Transport Method Announcement",
1214      "description": "Transport method announcement",
1215      "nip": null,
1216      "isReplaceable": true,
1217      "spec": "Nostr Epoxy",
1218      "template": {
1219        "kind": 11111,
1220        "content": "",
1221        "tags": []
1222      }
1223    },
1224    {
1225      "kind": 12345,
1226      "name": "Relay Policy Configuration",
1227      "description": "Relay-internal policy configuration (admin only)",
1228      "nip": null,
1229      "isReplaceable": true,
1230      "spec": "orly",
1231      "template": {
1232        "kind": 12345,
1233        "content": "",
1234        "tags": []
1235      }
1236    },
1237    {
1238      "kind": 13004,
1239      "name": "JWT Binding",
1240      "description": "Link between JWT certificate and pubkey",
1241      "nip": null,
1242      "isReplaceable": true,
1243      "template": {
1244        "kind": 13004,
1245        "content": "",
1246        "tags": []
1247      }
1248    },
1249    {
1250      "kind": 13194,
1251      "name": "Wallet Service Info",
1252      "description": "NWC wallet service information",
1253      "nip": "47",
1254      "isReplaceable": true,
1255      "template": {
1256        "kind": 13194,
1257        "content": "",
1258        "tags": []
1259      }
1260    },
1261    {
1262      "kind": 13534,
1263      "name": "Membership Lists",
1264      "description": "Group membership lists",
1265      "nip": "43",
1266      "isReplaceable": true,
1267      "template": {
1268        "kind": 13534,
1269        "content": "",
1270        "tags": []
1271      }
1272    },
1273    {
1274      "kind": 14388,
1275      "name": "User Sound Effect Lists",
1276      "description": "Sound effect lists",
1277      "nip": null,
1278      "isReplaceable": true,
1279      "spec": "Corny Chat",
1280      "template": {
1281        "kind": 14388,
1282        "content": "",
1283        "tags": []
1284      }
1285    },
1286    {
1287      "kind": 17375,
1288      "name": "Cashu Wallet Event",
1289      "description": "Cashu wallet event",
1290      "nip": "60",
1291      "isReplaceable": true,
1292      "template": {
1293        "kind": 17375,
1294        "content": "",
1295        "tags": []
1296      }
1297    },
1298    {
1299      "kind": 21000,
1300      "name": "Lightning Pub RPC",
1301      "description": "Lightning.Pub RPC",
1302      "nip": null,
1303      "isEphemeral": true,
1304      "spec": "Lightning.Pub",
1305      "template": {
1306        "kind": 21000,
1307        "content": "",
1308        "tags": []
1309      }
1310    },
1311    {
1312      "kind": 22242,
1313      "name": "Client Authentication",
1314      "description": "Authenticate to relay",
1315      "nip": "42",
1316      "isEphemeral": true,
1317      "template": {
1318        "kind": 22242,
1319        "content": "",
1320        "tags": []
1321      }
1322    },
1323    {
1324      "kind": 23194,
1325      "name": "Wallet Request",
1326      "description": "NWC wallet request",
1327      "nip": "47",
1328      "isEphemeral": true,
1329      "template": {
1330        "kind": 23194,
1331        "content": "",
1332        "tags": []
1333      }
1334    },
1335    {
1336      "kind": 23195,
1337      "name": "Wallet Response",
1338      "description": "NWC wallet response",
1339      "nip": "47",
1340      "isEphemeral": true,
1341      "template": {
1342        "kind": 23195,
1343        "content": "",
1344        "tags": []
1345      }
1346    },
1347    {
1348      "kind": 23196,
1349      "name": "Wallet Notification (NIP-04)",
1350      "description": "NWC wallet notification (NIP-04 encrypted)",
1351      "nip": "47",
1352      "isEphemeral": true,
1353      "template": {
1354        "kind": 23196,
1355        "content": "",
1356        "tags": []
1357      }
1358    },
1359    {
1360      "kind": 23197,
1361      "name": "Wallet Notification",
1362      "description": "NWC wallet notification",
1363      "nip": "47",
1364      "isEphemeral": true,
1365      "template": {
1366        "kind": 23197,
1367        "content": "",
1368        "tags": []
1369      }
1370    },
1371    {
1372      "kind": 24133,
1373      "name": "Nostr Connect",
1374      "description": "Remote signer connection",
1375      "nip": "46",
1376      "isEphemeral": true,
1377      "template": {
1378        "kind": 24133,
1379        "content": "",
1380        "tags": []
1381      }
1382    },
1383    {
1384      "kind": 24242,
1385      "name": "Blobs Stored on Mediaservers",
1386      "description": "Blossom blob storage",
1387      "nip": null,
1388      "isEphemeral": true,
1389      "spec": "Blossom",
1390      "template": {
1391        "kind": 24242,
1392        "content": "",
1393        "tags": []
1394      }
1395    },
1396    {
1397      "kind": 27235,
1398      "name": "HTTP Auth",
1399      "description": "Authenticate HTTP requests",
1400      "nip": "98",
1401      "isEphemeral": true,
1402      "template": {
1403        "kind": 27235,
1404        "content": "",
1405        "tags": []
1406      }
1407    },
1408    {
1409      "kind": 28934,
1410      "name": "Join Request",
1411      "description": "Request to join group",
1412      "nip": "43",
1413      "isEphemeral": true,
1414      "template": {
1415        "kind": 28934,
1416        "content": "",
1417        "tags": []
1418      }
1419    },
1420    {
1421      "kind": 28935,
1422      "name": "Invite Request",
1423      "description": "Invite to group",
1424      "nip": "43",
1425      "isEphemeral": true,
1426      "template": {
1427        "kind": 28935,
1428        "content": "",
1429        "tags": []
1430      }
1431    },
1432    {
1433      "kind": 28936,
1434      "name": "Leave Request",
1435      "description": "Leave group request",
1436      "nip": "43",
1437      "isEphemeral": true,
1438      "template": {
1439        "kind": 28936,
1440        "content": "",
1441        "tags": []
1442      }
1443    },
1444    {
1445      "kind": 30000,
1446      "name": "Follow Sets",
1447      "description": "Categorized people lists",
1448      "nip": "51",
1449      "isAddressable": true,
1450      "template": {
1451        "kind": 30000,
1452        "content": "",
1453        "tags": [
1454          [
1455            "d",
1456            "identifier"
1457          ]
1458        ]
1459      }
1460    },
1461    {
1462      "kind": 30001,
1463      "name": "Generic Lists",
1464      "description": "Generic categorized lists",
1465      "nip": "51",
1466      "isAddressable": true,
1467      "deprecated": true,
1468      "template": {
1469        "kind": 30001,
1470        "content": "",
1471        "tags": [
1472          [
1473            "d",
1474            "identifier"
1475          ]
1476        ]
1477      }
1478    },
1479    {
1480      "kind": 30002,
1481      "name": "Relay Sets",
1482      "description": "Categorized relay lists",
1483      "nip": "51",
1484      "isAddressable": true,
1485      "template": {
1486        "kind": 30002,
1487        "content": "",
1488        "tags": [
1489          [
1490            "d",
1491            "identifier"
1492          ]
1493        ]
1494      }
1495    },
1496    {
1497      "kind": 30003,
1498      "name": "Bookmark Sets",
1499      "description": "Categorized bookmark lists",
1500      "nip": "51",
1501      "isAddressable": true,
1502      "template": {
1503        "kind": 30003,
1504        "content": "",
1505        "tags": [
1506          [
1507            "d",
1508            "identifier"
1509          ]
1510        ]
1511      }
1512    },
1513    {
1514      "kind": 30004,
1515      "name": "Curation Sets",
1516      "description": "Curated content sets",
1517      "nip": "51",
1518      "isAddressable": true,
1519      "template": {
1520        "kind": 30004,
1521        "content": "",
1522        "tags": [
1523          [
1524            "d",
1525            "identifier"
1526          ]
1527        ]
1528      }
1529    },
1530    {
1531      "kind": 30005,
1532      "name": "Video Sets",
1533      "description": "Video playlists",
1534      "nip": "51",
1535      "isAddressable": true,
1536      "template": {
1537        "kind": 30005,
1538        "content": "",
1539        "tags": [
1540          [
1541            "d",
1542            "identifier"
1543          ]
1544        ]
1545      }
1546    },
1547    {
1548      "kind": 30007,
1549      "name": "Kind Mute Sets",
1550      "description": "Muted event kinds",
1551      "nip": "51",
1552      "isAddressable": true,
1553      "template": {
1554        "kind": 30007,
1555        "content": "",
1556        "tags": [
1557          [
1558            "d",
1559            "identifier"
1560          ]
1561        ]
1562      }
1563    },
1564    {
1565      "kind": 30008,
1566      "name": "Profile Badges",
1567      "description": "Badges displayed on profile",
1568      "nip": "58",
1569      "isAddressable": true,
1570      "template": {
1571        "kind": 30008,
1572        "content": "",
1573        "tags": [
1574          [
1575            "d",
1576            "identifier"
1577          ]
1578        ]
1579      }
1580    },
1581    {
1582      "kind": 30009,
1583      "name": "Badge Definition",
1584      "description": "Define a badge/achievement",
1585      "nip": "58",
1586      "isAddressable": true,
1587      "template": {
1588        "kind": 30009,
1589        "content": "",
1590        "tags": [
1591          [
1592            "d",
1593            "identifier"
1594          ]
1595        ]
1596      }
1597    },
1598    {
1599      "kind": 30015,
1600      "name": "Interest Sets",
1601      "description": "Interest/topic sets",
1602      "nip": "51",
1603      "isAddressable": true,
1604      "template": {
1605        "kind": 30015,
1606        "content": "",
1607        "tags": [
1608          [
1609            "d",
1610            "identifier"
1611          ]
1612        ]
1613      }
1614    },
1615    {
1616      "kind": 30017,
1617      "name": "Stall",
1618      "description": "Marketplace stall definition",
1619      "nip": "15",
1620      "isAddressable": true,
1621      "template": {
1622        "kind": 30017,
1623        "content": "",
1624        "tags": [
1625          [
1626            "d",
1627            "identifier"
1628          ]
1629        ]
1630      }
1631    },
1632    {
1633      "kind": 30018,
1634      "name": "Product",
1635      "description": "Marketplace product listing",
1636      "nip": "15",
1637      "isAddressable": true,
1638      "template": {
1639        "kind": 30018,
1640        "content": "",
1641        "tags": [
1642          [
1643            "d",
1644            "identifier"
1645          ]
1646        ]
1647      }
1648    },
1649    {
1650      "kind": 30019,
1651      "name": "Marketplace UI/UX",
1652      "description": "Marketplace interface settings",
1653      "nip": "15",
1654      "isAddressable": true,
1655      "template": {
1656        "kind": 30019,
1657        "content": "",
1658        "tags": [
1659          [
1660            "d",
1661            "identifier"
1662          ]
1663        ]
1664      }
1665    },
1666    {
1667      "kind": 30020,
1668      "name": "Product Sold as Auction",
1669      "description": "Auction product listing",
1670      "nip": "15",
1671      "isAddressable": true,
1672      "template": {
1673        "kind": 30020,
1674        "content": "",
1675        "tags": [
1676          [
1677            "d",
1678            "identifier"
1679          ]
1680        ]
1681      }
1682    },
1683    {
1684      "kind": 30023,
1685      "name": "Long-form Content",
1686      "description": "Blog post, article in markdown",
1687      "nip": "23",
1688      "isAddressable": true,
1689      "template": {
1690        "kind": 30023,
1691        "content": "",
1692        "tags": [
1693          [
1694            "d",
1695            "identifier"
1696          ]
1697        ]
1698      }
1699    },
1700    {
1701      "kind": 30024,
1702      "name": "Draft Long-form Content",
1703      "description": "Draft article",
1704      "nip": "23",
1705      "isAddressable": true,
1706      "template": {
1707        "kind": 30024,
1708        "content": "",
1709        "tags": [
1710          [
1711            "d",
1712            "identifier"
1713          ]
1714        ]
1715      }
1716    },
1717    {
1718      "kind": 30030,
1719      "name": "Emoji Sets",
1720      "description": "Custom emoji sets",
1721      "nip": "51",
1722      "isAddressable": true,
1723      "template": {
1724        "kind": 30030,
1725        "content": "",
1726        "tags": [
1727          [
1728            "d",
1729            "identifier"
1730          ]
1731        ]
1732      }
1733    },
1734    {
1735      "kind": 30040,
1736      "name": "Curated Publication Index",
1737      "description": "Publication index",
1738      "nip": null,
1739      "isAddressable": true,
1740      "spec": "NKBIP-01",
1741      "template": {
1742        "kind": 30040,
1743        "content": "",
1744        "tags": [
1745          [
1746            "d",
1747            "identifier"
1748          ]
1749        ]
1750      }
1751    },
1752    {
1753      "kind": 30041,
1754      "name": "Curated Publication Content",
1755      "description": "Publication content",
1756      "nip": null,
1757      "isAddressable": true,
1758      "spec": "NKBIP-01",
1759      "template": {
1760        "kind": 30041,
1761        "content": "",
1762        "tags": [
1763          [
1764            "d",
1765            "identifier"
1766          ]
1767        ]
1768      }
1769    },
1770    {
1771      "kind": 30063,
1772      "name": "Release Artifact Sets",
1773      "description": "Software release artifacts",
1774      "nip": "51",
1775      "isAddressable": true,
1776      "template": {
1777        "kind": 30063,
1778        "content": "",
1779        "tags": [
1780          [
1781            "d",
1782            "identifier"
1783          ]
1784        ]
1785      }
1786    },
1787    {
1788      "kind": 30078,
1789      "name": "Application-specific Data",
1790      "description": "App-specific key-value storage",
1791      "nip": "78",
1792      "isAddressable": true,
1793      "template": {
1794        "kind": 30078,
1795        "content": "",
1796        "tags": [
1797          [
1798            "d",
1799            "identifier"
1800          ]
1801        ]
1802      }
1803    },
1804    {
1805      "kind": 30166,
1806      "name": "Relay Discovery",
1807      "description": "Relay discovery/monitoring",
1808      "nip": "66",
1809      "isAddressable": true,
1810      "template": {
1811        "kind": 30166,
1812        "content": "",
1813        "tags": [
1814          [
1815            "d",
1816            "identifier"
1817          ]
1818        ]
1819      }
1820    },
1821    {
1822      "kind": 30267,
1823      "name": "App Curation Sets",
1824      "description": "Curated app sets",
1825      "nip": "51",
1826      "isAddressable": true,
1827      "template": {
1828        "kind": 30267,
1829        "content": "",
1830        "tags": [
1831          [
1832            "d",
1833            "identifier"
1834          ]
1835        ]
1836      }
1837    },
1838    {
1839      "kind": 30311,
1840      "name": "Live Event",
1841      "description": "Live streaming event",
1842      "nip": "53",
1843      "isAddressable": true,
1844      "template": {
1845        "kind": 30311,
1846        "content": "",
1847        "tags": [
1848          [
1849            "d",
1850            "identifier"
1851          ]
1852        ]
1853      }
1854    },
1855    {
1856      "kind": 30312,
1857      "name": "Interactive Room",
1858      "description": "Interactive live room",
1859      "nip": "53",
1860      "isAddressable": true,
1861      "template": {
1862        "kind": 30312,
1863        "content": "",
1864        "tags": [
1865          [
1866            "d",
1867            "identifier"
1868          ]
1869        ]
1870      }
1871    },
1872    {
1873      "kind": 30313,
1874      "name": "Conference Event",
1875      "description": "Conference/meetup event",
1876      "nip": "53",
1877      "isAddressable": true,
1878      "template": {
1879        "kind": 30313,
1880        "content": "",
1881        "tags": [
1882          [
1883            "d",
1884            "identifier"
1885          ]
1886        ]
1887      }
1888    },
1889    {
1890      "kind": 30315,
1891      "name": "User Statuses",
1892      "description": "User status updates",
1893      "nip": "38",
1894      "isAddressable": true,
1895      "template": {
1896        "kind": 30315,
1897        "content": "",
1898        "tags": [
1899          [
1900            "d",
1901            "identifier"
1902          ]
1903        ]
1904      }
1905    },
1906    {
1907      "kind": 30388,
1908      "name": "Slide Set",
1909      "description": "Presentation slides",
1910      "nip": null,
1911      "isAddressable": true,
1912      "spec": "Corny Chat",
1913      "template": {
1914        "kind": 30388,
1915        "content": "",
1916        "tags": [
1917          [
1918            "d",
1919            "identifier"
1920          ]
1921        ]
1922      }
1923    },
1924    {
1925      "kind": 30402,
1926      "name": "Classified Listing",
1927      "description": "Classified ad listing",
1928      "nip": "99",
1929      "isAddressable": true,
1930      "template": {
1931        "kind": 30402,
1932        "content": "",
1933        "tags": [
1934          [
1935            "d",
1936            "identifier"
1937          ]
1938        ]
1939      }
1940    },
1941    {
1942      "kind": 30403,
1943      "name": "Draft Classified Listing",
1944      "description": "Draft classified ad",
1945      "nip": "99",
1946      "isAddressable": true,
1947      "template": {
1948        "kind": 30403,
1949        "content": "",
1950        "tags": [
1951          [
1952            "d",
1953            "identifier"
1954          ]
1955        ]
1956      }
1957    },
1958    {
1959      "kind": 30617,
1960      "name": "Repository Announcements",
1961      "description": "Git repository announcement",
1962      "nip": "34",
1963      "isAddressable": true,
1964      "template": {
1965        "kind": 30617,
1966        "content": "",
1967        "tags": [
1968          [
1969            "d",
1970            "identifier"
1971          ]
1972        ]
1973      }
1974    },
1975    {
1976      "kind": 30618,
1977      "name": "Repository State Announcements",
1978      "description": "Git repository state",
1979      "nip": "34",
1980      "isAddressable": true,
1981      "template": {
1982        "kind": 30618,
1983        "content": "",
1984        "tags": [
1985          [
1986            "d",
1987            "identifier"
1988          ]
1989        ]
1990      }
1991    },
1992    {
1993      "kind": 30818,
1994      "name": "Wiki Article",
1995      "description": "Wiki article",
1996      "nip": "54",
1997      "isAddressable": true,
1998      "template": {
1999        "kind": 30818,
2000        "content": "",
2001        "tags": [
2002          [
2003            "d",
2004            "identifier"
2005          ]
2006        ]
2007      }
2008    },
2009    {
2010      "kind": 30819,
2011      "name": "Redirects",
2012      "description": "URL redirects",
2013      "nip": "54",
2014      "isAddressable": true,
2015      "template": {
2016        "kind": 30819,
2017        "content": "",
2018        "tags": [
2019          [
2020            "d",
2021            "identifier"
2022          ]
2023        ]
2024      }
2025    },
2026    {
2027      "kind": 31234,
2028      "name": "Draft Event",
2029      "description": "Draft of any event",
2030      "nip": "37",
2031      "isAddressable": true,
2032      "template": {
2033        "kind": 31234,
2034        "content": "",
2035        "tags": [
2036          [
2037            "d",
2038            "identifier"
2039          ]
2040        ]
2041      }
2042    },
2043    {
2044      "kind": 31388,
2045      "name": "Link Set",
2046      "description": "Link collection",
2047      "nip": null,
2048      "isAddressable": true,
2049      "spec": "Corny Chat",
2050      "template": {
2051        "kind": 31388,
2052        "content": "",
2053        "tags": [
2054          [
2055            "d",
2056            "identifier"
2057          ]
2058        ]
2059      }
2060    },
2061    {
2062      "kind": 31890,
2063      "name": "Feed",
2064      "description": "Custom feed definition",
2065      "nip": null,
2066      "isAddressable": true,
2067      "spec": "NUD: Custom Feeds",
2068      "template": {
2069        "kind": 31890,
2070        "content": "",
2071        "tags": [
2072          [
2073            "d",
2074            "identifier"
2075          ]
2076        ]
2077      }
2078    },
2079    {
2080      "kind": 31922,
2081      "name": "Date-Based Calendar Event",
2082      "description": "All-day calendar event",
2083      "nip": "52",
2084      "isAddressable": true,
2085      "template": {
2086        "kind": 31922,
2087        "content": "",
2088        "tags": [
2089          [
2090            "d",
2091            "identifier"
2092          ]
2093        ]
2094      }
2095    },
2096    {
2097      "kind": 31923,
2098      "name": "Time-Based Calendar Event",
2099      "description": "Calendar event with time",
2100      "nip": "52",
2101      "isAddressable": true,
2102      "template": {
2103        "kind": 31923,
2104        "content": "",
2105        "tags": [
2106          [
2107            "d",
2108            "identifier"
2109          ]
2110        ]
2111      }
2112    },
2113    {
2114      "kind": 31924,
2115      "name": "Calendar",
2116      "description": "Calendar definition",
2117      "nip": "52",
2118      "isAddressable": true,
2119      "template": {
2120        "kind": 31924,
2121        "content": "",
2122        "tags": [
2123          [
2124            "d",
2125            "identifier"
2126          ]
2127        ]
2128      }
2129    },
2130    {
2131      "kind": 31925,
2132      "name": "Calendar Event RSVP",
2133      "description": "RSVP to calendar event",
2134      "nip": "52",
2135      "isAddressable": true,
2136      "template": {
2137        "kind": 31925,
2138        "content": "",
2139        "tags": [
2140          [
2141            "d",
2142            "identifier"
2143          ]
2144        ]
2145      }
2146    },
2147    {
2148      "kind": 31989,
2149      "name": "Handler Recommendation",
2150      "description": "Recommended app for event kind",
2151      "nip": "89",
2152      "isAddressable": true,
2153      "template": {
2154        "kind": 31989,
2155        "content": "",
2156        "tags": [
2157          [
2158            "d",
2159            "identifier"
2160          ]
2161        ]
2162      }
2163    },
2164    {
2165      "kind": 31990,
2166      "name": "Handler Information",
2167      "description": "App handler declaration",
2168      "nip": "89",
2169      "isAddressable": true,
2170      "template": {
2171        "kind": 31990,
2172        "content": "",
2173        "tags": [
2174          [
2175            "d",
2176            "identifier"
2177          ]
2178        ]
2179      }
2180    },
2181    {
2182      "kind": 32123,
2183      "name": "WaveLake Track",
2184      "description": "WaveLake music track",
2185      "nip": null,
2186      "isAddressable": true,
2187      "spec": "WaveLake",
2188      "template": {
2189        "kind": 32123,
2190        "content": "",
2191        "tags": [
2192          [
2193            "d",
2194            "identifier"
2195          ]
2196        ]
2197      }
2198    },
2199    {
2200      "kind": 32267,
2201      "name": "Software Application",
2202      "description": "Software application listing",
2203      "nip": null,
2204      "isAddressable": true,
2205      "template": {
2206        "kind": 32267,
2207        "content": "",
2208        "tags": [
2209          [
2210            "d",
2211            "identifier"
2212          ]
2213        ]
2214      }
2215    },
2216    {
2217      "kind": 32388,
2218      "name": "User Room Favorites",
2219      "description": "Favorite rooms",
2220      "nip": null,
2221      "isAddressable": true,
2222      "spec": "Corny Chat",
2223      "template": {
2224        "kind": 32388,
2225        "content": "",
2226        "tags": [
2227          [
2228            "d",
2229            "identifier"
2230          ]
2231        ]
2232      }
2233    },
2234    {
2235      "kind": 33388,
2236      "name": "High Scores",
2237      "description": "Game high scores",
2238      "nip": null,
2239      "isAddressable": true,
2240      "spec": "Corny Chat",
2241      "template": {
2242        "kind": 33388,
2243        "content": "",
2244        "tags": [
2245          [
2246            "d",
2247            "identifier"
2248          ]
2249        ]
2250      }
2251    },
2252    {
2253      "kind": 34235,
2254      "name": "Video Event Horizontal",
2255      "description": "Horizontal video event",
2256      "nip": "71",
2257      "isAddressable": true,
2258      "template": {
2259        "kind": 34235,
2260        "content": "",
2261        "tags": [
2262          [
2263            "d",
2264            "identifier"
2265          ]
2266        ]
2267      }
2268    },
2269    {
2270      "kind": 34236,
2271      "name": "Video Event Vertical",
2272      "description": "Vertical video event",
2273      "nip": "71",
2274      "isAddressable": true,
2275      "template": {
2276        "kind": 34236,
2277        "content": "",
2278        "tags": [
2279          [
2280            "d",
2281            "identifier"
2282          ]
2283        ]
2284      }
2285    },
2286    {
2287      "kind": 34388,
2288      "name": "Sound Effects",
2289      "description": "Sound effect definitions",
2290      "nip": null,
2291      "isAddressable": true,
2292      "spec": "Corny Chat",
2293      "template": {
2294        "kind": 34388,
2295        "content": "",
2296        "tags": [
2297          [
2298            "d",
2299            "identifier"
2300          ]
2301        ]
2302      }
2303    },
2304    {
2305      "kind": 34550,
2306      "name": "Community Definition",
2307      "description": "Define a community",
2308      "nip": "72",
2309      "isAddressable": true,
2310      "template": {
2311        "kind": 34550,
2312        "content": "",
2313        "tags": [
2314          [
2315            "d",
2316            "identifier"
2317          ]
2318        ]
2319      }
2320    },
2321    {
2322      "kind": 37516,
2323      "name": "Geocache Listing",
2324      "description": "Geocache location listing",
2325      "nip": null,
2326      "isAddressable": true,
2327      "spec": "geocaching",
2328      "template": {
2329        "kind": 37516,
2330        "content": "",
2331        "tags": [
2332          [
2333            "d",
2334            "identifier"
2335          ]
2336        ]
2337      }
2338    },
2339    {
2340      "kind": 38172,
2341      "name": "Cashu Mint Announcement",
2342      "description": "Cashu mint announcement",
2343      "nip": "87",
2344      "isAddressable": true,
2345      "template": {
2346        "kind": 38172,
2347        "content": "",
2348        "tags": [
2349          [
2350            "d",
2351            "identifier"
2352          ]
2353        ]
2354      }
2355    },
2356    {
2357      "kind": 38173,
2358      "name": "Fedimint Announcement",
2359      "description": "Fedimint announcement",
2360      "nip": "87",
2361      "isAddressable": true,
2362      "template": {
2363        "kind": 38173,
2364        "content": "",
2365        "tags": [
2366          [
2367            "d",
2368            "identifier"
2369          ]
2370        ]
2371      }
2372    },
2373    {
2374      "kind": 38383,
2375      "name": "Peer-to-peer Order Events",
2376      "description": "P2P trading orders",
2377      "nip": "69",
2378      "isAddressable": true,
2379      "template": {
2380        "kind": 38383,
2381        "content": "",
2382        "tags": [
2383          [
2384            "d",
2385            "identifier"
2386          ]
2387        ]
2388      }
2389    },
2390    {
2391      "kind": 39000,
2392      "name": "Group Metadata Events",
2393      "description": "Group metadata (start of range)",
2394      "nip": "29",
2395      "isAddressable": true,
2396      "template": {
2397        "kind": 39000,
2398        "content": "",
2399        "tags": [
2400          [
2401            "d",
2402            "identifier"
2403          ]
2404        ]
2405      }
2406    },
2407    {
2408      "kind": 39089,
2409      "name": "Starter Packs",
2410      "description": "Starter pack lists",
2411      "nip": "51",
2412      "isAddressable": true,
2413      "template": {
2414        "kind": 39089,
2415        "content": "",
2416        "tags": [
2417          [
2418            "d",
2419            "identifier"
2420          ]
2421        ]
2422      }
2423    },
2424    {
2425      "kind": 39092,
2426      "name": "Media Starter Packs",
2427      "description": "Media starter packs",
2428      "nip": "51",
2429      "isAddressable": true,
2430      "template": {
2431        "kind": 39092,
2432        "content": "",
2433        "tags": [
2434          [
2435            "d",
2436            "identifier"
2437          ]
2438        ]
2439      }
2440    },
2441    {
2442      "kind": 39701,
2443      "name": "Web Bookmarks",
2444      "description": "Web URL bookmarks",
2445      "nip": "B0",
2446      "isAddressable": true,
2447      "template": {
2448        "kind": 39701,
2449        "content": "",
2450        "tags": [
2451          [
2452            "d",
2453            "identifier"
2454          ]
2455        ]
2456      }
2457    },
2458    {
2459      "kind": 39998,
2460      "name": "ACL Event",
2461      "description": "Access control list event",
2462      "nip": null,
2463      "isAddressable": true,
2464      "template": {
2465        "kind": 39998,
2466        "content": "",
2467        "tags": [
2468          [
2469            "d",
2470            "identifier"
2471          ]
2472        ]
2473      }
2474    }
2475  ];
2476  
2477  // Kind ranges for classification
2478  export const kindRanges = {
2479    "regular": {
2480      "start": 1000,
2481      "end": 9999,
2482      "description": "Regular events - all versions kept, never replaced"
2483    },
2484    "replaceable": {
2485      "start": 10000,
2486      "end": 19999,
2487      "description": "Replaceable events - only latest per pubkey kept"
2488    },
2489    "ephemeral": {
2490      "start": 20000,
2491      "end": 29999,
2492      "description": "Ephemeral events - forwarded but not stored"
2493    },
2494    "parameterized": {
2495      "start": 30000,
2496      "end": 39999,
2497      "description": "Parameterized replaceable - replaced by d tag value"
2498    }
2499  };
2500  
2501  // Privileged kinds (require auth)
2502  export const privilegedKinds = [4,13,14,15,1059,1060,30078];
2503  
2504  // Directory kinds (public discovery)
2505  export const directoryKinds = [0,3,5,1984,10002,10000,10050];
2506  
2507  // Kind aliases
2508  export const kindAliases = {
2509    "SetMetadata": 0,
2510    "Follows": 3,
2511    "Contacts": 3,
2512    "Deletion": 5,
2513    "MemoryHole": 1984,
2514    "BlockList": 10000,
2515    "Article": 30023,
2516    "CategorizedPeopleList": 30000,
2517    "CategorizedBookmarksList": 30001
2518  };
2519  
2520  // Helper function to get event kind by number
2521  export function getEventKind(kindNumber) {
2522    return eventKinds.find(k => k.kind === kindNumber);
2523  }
2524  
2525  // Alias for compatibility
2526  export function getKindInfo(kind) {
2527    return getEventKind(kind);
2528  }
2529  
2530  export function getKindName(kind) {
2531    const info = getEventKind(kind);
2532    return info ? info.name : `Kind ${kind}`;
2533  }
2534  
2535  // Helper function to search event kinds by name or description
2536  export function searchEventKinds(query) {
2537    const lowerQuery = query.toLowerCase();
2538    return eventKinds.filter(k =>
2539      k.name.toLowerCase().includes(lowerQuery) ||
2540      k.description.toLowerCase().includes(lowerQuery) ||
2541      k.kind.toString().includes(query)
2542    );
2543  }
2544  
2545  // Helper function to get all event kinds grouped by category
2546  export function getEventKindsByCategory() {
2547    return {
2548      regular: eventKinds.filter(k => k.kind < 10000 && !k.isReplaceable),
2549      replaceable: eventKinds.filter(k => k.isReplaceable),
2550      ephemeral: eventKinds.filter(k => k.isEphemeral),
2551      addressable: eventKinds.filter(k => k.isAddressable)
2552    };
2553  }
2554  
2555  // Helper function to create a template event with current timestamp
2556  export function createTemplateEvent(kindNumber, userPubkey = null) {
2557    const kindInfo = getEventKind(kindNumber);
2558    if (!kindInfo) {
2559      return {
2560        kind: kindNumber,
2561        content: "",
2562        tags: [],
2563        created_at: Math.floor(Date.now() / 1000),
2564        pubkey: userPubkey || "<your_pubkey_here>"
2565      };
2566    }
2567  
2568    return {
2569      ...kindInfo.template,
2570      created_at: Math.floor(Date.now() / 1000),
2571      pubkey: userPubkey || "<your_pubkey_here>"
2572    };
2573  }
2574  
2575  export function isReplaceable(kind) {
2576    if (kind === 0 || kind === 3) return true;
2577    return kind >= 10000 && kind < 19999;
2578  }
2579  
2580  export function isEphemeral(kind) {
2581    return kind >= 20000 && kind < 29999;
2582  }
2583  
2584  export function isAddressable(kind) {
2585    return kind >= 30000 && kind <= 39999;
2586  }
2587  
2588  export function isPrivileged(kind) {
2589    return privilegedKinds.includes(kind);
2590  }
2591  
2592  // Export kind categories for filtering in UI
2593  export const kindCategories = [
2594    { id: "all", name: "All Kinds", filter: () => true },
2595    { id: "regular", name: "Regular Events (0-9999)", filter: k => k.kind < 10000 && !k.isReplaceable },
2596    { id: "replaceable", name: "Replaceable (10000-19999)", filter: k => k.isReplaceable },
2597    { id: "ephemeral", name: "Ephemeral (20000-29999)", filter: k => k.isEphemeral },
2598    { id: "addressable", name: "Addressable (30000-39999)", filter: k => k.isAddressable },
2599    { id: "social", name: "Social", filter: k => [0, 1, 3, 6, 7].includes(k.kind) },
2600    { id: "messaging", name: "Messaging", filter: k => [4, 9, 10, 11, 12, 14, 15, 40, 41, 42].includes(k.kind) },
2601    { id: "lists", name: "Lists", filter: k => k.name.toLowerCase().includes("list") || k.name.toLowerCase().includes("set") },
2602    { id: "marketplace", name: "Marketplace", filter: k => [30017, 30018, 30019, 30020, 1021, 1022, 30402, 30403].includes(k.kind) },
2603    { id: "lightning", name: "Lightning/Zaps", filter: k => [9734, 9735, 9041, 9321, 7374, 7375, 7376].includes(k.kind) },
2604    { id: "media", name: "Media", filter: k => [20, 21, 22, 1063, 1222, 1244].includes(k.kind) },
2605    { id: "git", name: "Git/Code", filter: k => [818, 1337, 1617, 1618, 1619, 1621, 1622, 30617, 30618].includes(k.kind) },
2606    { id: "calendar", name: "Calendar", filter: k => [31922, 31923, 31924, 31925].includes(k.kind) },
2607    { id: "groups", name: "Groups", filter: k => (k.kind >= 9000 && k.kind <= 9030) || (k.kind >= 39000 && k.kind <= 39009) },
2608  ];
2609