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