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