Suggestion: export kinds as named types (#447)

* including kinds for nip17 and nip59

* including kinds as types

* solving linter with prettier
This commit is contained in:
António Conselheiro 2024-10-23 10:39:39 -03:00 committed by GitHub
parent d7dcc75ebe
commit aba266b8e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 106 additions and 2 deletions

View File

@ -1,5 +1,6 @@
import { test, expect } from 'bun:test' import { expect, test } from 'bun:test'
import { classifyKind } from './kinds.ts' import { classifyKind, isKind, Repost, ShortTextNote } from './kinds.ts'
import { finalizeEvent, generateSecretKey } from './pure.ts'
test('kind classification', () => { test('kind classification', () => {
expect(classifyKind(1)).toBe('regular') expect(classifyKind(1)).toBe('regular')
@ -19,3 +20,22 @@ test('kind classification', () => {
expect(classifyKind(40000)).toBe('unknown') expect(classifyKind(40000)).toBe('unknown')
expect(classifyKind(255)).toBe('unknown') expect(classifyKind(255)).toBe('unknown')
}) })
test('kind type guard', () => {
const privateKey = generateSecretKey()
const repostedEvent = finalizeEvent(
{
kind: ShortTextNote,
tags: [
['e', 'replied event id'],
['p', 'replied event pubkey'],
],
content: 'Replied to a post',
created_at: 1617932115,
},
privateKey,
)
expect(isKind(repostedEvent, ShortTextNote)).toBeTrue()
expect(isKind(repostedEvent, Repost)).toBeFalse()
})

View File

@ -1,3 +1,5 @@
import { NostrEvent, validateEvent } from './pure.ts'
/** Events are **regular**, which means they're all expected to be stored by relays. */ /** Events are **regular**, which means they're all expected to be stored by relays. */
export function isRegularKind(kind: number): boolean { export function isRegularKind(kind: number): boolean {
return (1000 <= kind && kind < 10000) || [1, 2, 4, 5, 6, 7, 8, 16, 40, 41, 42, 43, 44].includes(kind) return (1000 <= kind && kind < 10000) || [1, 2, 4, 5, 6, 7, 8, 16, 40, 41, 42, 43, 44].includes(kind)
@ -30,80 +32,162 @@ export function classifyKind(kind: number): KindClassification {
return 'unknown' return 'unknown'
} }
export function isKind<T extends number>(event: unknown, kind: T | Array<T>): event is NostrEvent & { kind: T } {
const kindAsArray: number[] = kind instanceof Array ? kind : [kind]
return (validateEvent(event) && kindAsArray.includes(event.kind)) || false
}
export const Metadata = 0 export const Metadata = 0
export type Metadata = typeof Metadata
export const ShortTextNote = 1 export const ShortTextNote = 1
export type ShortTextNote = typeof ShortTextNote
export const RecommendRelay = 2 export const RecommendRelay = 2
export type RecommendRelay = typeof RecommendRelay
export const Contacts = 3 export const Contacts = 3
export type Contacts = typeof Contacts
export const EncryptedDirectMessage = 4 export const EncryptedDirectMessage = 4
export type EncryptedDirectMessage = typeof EncryptedDirectMessage
export const EventDeletion = 5 export const EventDeletion = 5
export type EventDeletion = typeof EventDeletion
export const Repost = 6 export const Repost = 6
export type Repost = typeof Repost
export const Reaction = 7 export const Reaction = 7
export type Reaction = typeof Reaction
export const BadgeAward = 8 export const BadgeAward = 8
export type BadgeAward = typeof BadgeAward
export const Seal = 13 export const Seal = 13
export type Seal = typeof Seal
export const PrivateDirectMessage = 14 export const PrivateDirectMessage = 14
export type PrivateDirectMessage = typeof PrivateDirectMessage
export const GenericRepost = 16 export const GenericRepost = 16
export type GenericRepost = typeof GenericRepost
export const ChannelCreation = 40 export const ChannelCreation = 40
export type ChannelCreation = typeof ChannelCreation
export const ChannelMetadata = 41 export const ChannelMetadata = 41
export type ChannelMetadata = typeof ChannelMetadata
export const ChannelMessage = 42 export const ChannelMessage = 42
export type ChannelMessage = typeof ChannelMessage
export const ChannelHideMessage = 43 export const ChannelHideMessage = 43
export type ChannelHideMessage = typeof ChannelHideMessage
export const ChannelMuteUser = 44 export const ChannelMuteUser = 44
export type ChannelMuteUser = typeof ChannelMuteUser
export const OpenTimestamps = 1040 export const OpenTimestamps = 1040
export type OpenTimestamps = typeof OpenTimestamps
export const GiftWrap = 1059 export const GiftWrap = 1059
export type GiftWrap = typeof GiftWrap
export const FileMetadata = 1063 export const FileMetadata = 1063
export type FileMetadata = typeof FileMetadata
export const LiveChatMessage = 1311 export const LiveChatMessage = 1311
export type LiveChatMessage = typeof LiveChatMessage
export const ProblemTracker = 1971 export const ProblemTracker = 1971
export type ProblemTracker = typeof ProblemTracker
export const Report = 1984 export const Report = 1984
export type Report = typeof Report
export const Reporting = 1984 export const Reporting = 1984
export type Reporting = typeof Reporting
export const Label = 1985 export const Label = 1985
export type Label = typeof Label
export const CommunityPostApproval = 4550 export const CommunityPostApproval = 4550
export type CommunityPostApproval = typeof CommunityPostApproval
export const JobRequest = 5999 export const JobRequest = 5999
export type JobRequest = typeof JobRequest
export const JobResult = 6999 export const JobResult = 6999
export type JobResult = typeof JobResult
export const JobFeedback = 7000 export const JobFeedback = 7000
export type JobFeedback = typeof JobFeedback
export const ZapGoal = 9041 export const ZapGoal = 9041
export type ZapGoal = typeof ZapGoal
export const ZapRequest = 9734 export const ZapRequest = 9734
export type ZapRequest = typeof ZapRequest
export const Zap = 9735 export const Zap = 9735
export type Zap = typeof Zap
export const Highlights = 9802 export const Highlights = 9802
export type Highlights = typeof Highlights
export const Mutelist = 10000 export const Mutelist = 10000
export type Mutelist = typeof Mutelist
export const Pinlist = 10001 export const Pinlist = 10001
export type Pinlist = typeof Pinlist
export const RelayList = 10002 export const RelayList = 10002
export type RelayList = typeof RelayList
export const BookmarkList = 10003 export const BookmarkList = 10003
export type BookmarkList = typeof BookmarkList
export const CommunitiesList = 10004 export const CommunitiesList = 10004
export type CommunitiesList = typeof CommunitiesList
export const PublicChatsList = 10005 export const PublicChatsList = 10005
export type PublicChatsList = typeof PublicChatsList
export const BlockedRelaysList = 10006 export const BlockedRelaysList = 10006
export type BlockedRelaysList = typeof BlockedRelaysList
export const SearchRelaysList = 10007 export const SearchRelaysList = 10007
export type SearchRelaysList = typeof SearchRelaysList
export const InterestsList = 10015 export const InterestsList = 10015
export type InterestsList = typeof InterestsList
export const UserEmojiList = 10030 export const UserEmojiList = 10030
export type UserEmojiList = typeof UserEmojiList
export const DirectMessageRelaysList = 10050 export const DirectMessageRelaysList = 10050
export type DirectMessageRelaysList = typeof DirectMessageRelaysList
export const FileServerPreference = 10096 export const FileServerPreference = 10096
export type FileServerPreference = typeof FileServerPreference
export const NWCWalletInfo = 13194 export const NWCWalletInfo = 13194
export type NWCWalletInfo = typeof NWCWalletInfo
export const LightningPubRPC = 21000 export const LightningPubRPC = 21000
export type LightningPubRPC = typeof LightningPubRPC
export const ClientAuth = 22242 export const ClientAuth = 22242
export type ClientAuth = typeof ClientAuth
export const NWCWalletRequest = 23194 export const NWCWalletRequest = 23194
export type NWCWalletRequest = typeof NWCWalletRequest
export const NWCWalletResponse = 23195 export const NWCWalletResponse = 23195
export type NWCWalletResponse = typeof NWCWalletResponse
export const NostrConnect = 24133 export const NostrConnect = 24133
export type NostrConnect = typeof NostrConnect
export const HTTPAuth = 27235 export const HTTPAuth = 27235
export type HTTPAuth = typeof HTTPAuth
export const Followsets = 30000 export const Followsets = 30000
export type Followsets = typeof Followsets
export const Genericlists = 30001 export const Genericlists = 30001
export type Genericlists = typeof Genericlists
export const Relaysets = 30002 export const Relaysets = 30002
export type Relaysets = typeof Relaysets
export const Bookmarksets = 30003 export const Bookmarksets = 30003
export type Bookmarksets = typeof Bookmarksets
export const Curationsets = 30004 export const Curationsets = 30004
export type Curationsets = typeof Curationsets
export const ProfileBadges = 30008 export const ProfileBadges = 30008
export type ProfileBadges = typeof ProfileBadges
export const BadgeDefinition = 30009 export const BadgeDefinition = 30009
export type BadgeDefinition = typeof BadgeDefinition
export const Interestsets = 30015 export const Interestsets = 30015
export type Interestsets = typeof Interestsets
export const CreateOrUpdateStall = 30017 export const CreateOrUpdateStall = 30017
export type CreateOrUpdateStall = typeof CreateOrUpdateStall
export const CreateOrUpdateProduct = 30018 export const CreateOrUpdateProduct = 30018
export type CreateOrUpdateProduct = typeof CreateOrUpdateProduct
export const LongFormArticle = 30023 export const LongFormArticle = 30023
export type LongFormArticle = typeof LongFormArticle
export const DraftLong = 30024 export const DraftLong = 30024
export type DraftLong = typeof DraftLong
export const Emojisets = 30030 export const Emojisets = 30030
export type Emojisets = typeof Emojisets
export const Application = 30078 export const Application = 30078
export type Application = typeof Application
export const LiveEvent = 30311 export const LiveEvent = 30311
export type LiveEvent = typeof LiveEvent
export const UserStatuses = 30315 export const UserStatuses = 30315
export type UserStatuses = typeof UserStatuses
export const ClassifiedListing = 30402 export const ClassifiedListing = 30402
export type ClassifiedListing = typeof ClassifiedListing
export const DraftClassifiedListing = 30403 export const DraftClassifiedListing = 30403
export type DraftClassifiedListing = typeof DraftClassifiedListing
export const Date = 31922 export const Date = 31922
export type Date = typeof Date
export const Time = 31923 export const Time = 31923
export type Time = typeof Time
export const Calendar = 31924 export const Calendar = 31924
export type Calendar = typeof Calendar
export const CalendarEventRSVP = 31925 export const CalendarEventRSVP = 31925
export type CalendarEventRSVP = typeof CalendarEventRSVP
export const Handlerrecommendation = 31989 export const Handlerrecommendation = 31989
export type Handlerrecommendation = typeof Handlerrecommendation
export const Handlerinformation = 31990 export const Handlerinformation = 31990
export type Handlerinformation = typeof Handlerinformation
export const CommunityDefinition = 34550 export const CommunityDefinition = 34550
export type CommunityDefinition = typeof CommunityDefinition