Files
smesh/src/types.ts
2025-03-27 22:37:06 +08:00

117 lines
2.7 KiB
TypeScript

import { Event, VerifiedEvent } from 'nostr-tools'
export type TProfile = {
username: string
pubkey: string
original_username?: string
banner?: string
avatar?: string
nip05?: string
about?: string
website?: string
lud06?: string
lud16?: string
lightningAddress?: string
created_at?: number
}
export type TMailboxRelayScope = 'read' | 'write' | 'both'
export type TMailboxRelay = {
url: string
scope: TMailboxRelayScope
}
export type TRelayList = {
write: string[]
read: string[]
originalRelays: TMailboxRelay[]
}
export type TRelayInfo = {
name?: string
description?: string
icon?: string
pubkey?: string
contact?: string
supported_nips?: number[]
software?: string
version?: string
tags?: string[]
payments_url?: string
limitation?: {
auth_required?: boolean
payment_required?: boolean
}
}
export type TWebMetadata = {
title?: string | null
description?: string | null
image?: string | null
}
export type TRelaySet = {
id: string
name: string
relayUrls: string[]
}
export type TConfig = {
relayGroups: TRelaySet[]
theme: TThemeSetting
}
export type TThemeSetting = 'light' | 'dark' | 'system'
export type TTheme = 'light' | 'dark'
export type TDraftEvent = Pick<Event, 'content' | 'created_at' | 'kind' | 'tags'>
export type TNip07 = {
getPublicKey: () => Promise<string>
signEvent: (draftEvent: TDraftEvent) => Promise<VerifiedEvent>
nip04?: {
encrypt?: (pubkey: string, plainText: string) => Promise<string>
decrypt?: (pubkey: string, cipherText: string) => Promise<string>
}
}
export interface ISigner {
getPublicKey: () => Promise<string>
signEvent: (draftEvent: TDraftEvent) => Promise<VerifiedEvent>
nip04Encrypt: (pubkey: string, plainText: string) => Promise<string>
nip04Decrypt: (pubkey: string, cipherText: string) => Promise<string>
}
export type TSignerType = 'nsec' | 'nip-07' | 'bunker' | 'browser-nsec' | 'ncryptsec' | 'npub'
export type TAccount = {
pubkey: string
signerType: TSignerType
ncryptsec?: string
nsec?: string
bunker?: string
bunkerClientSecretKey?: string
npub?: string
}
export type TAccountPointer = Pick<TAccount, 'pubkey' | 'signerType'>
export type TFeedType = 'following' | 'relays' | 'temporary'
export type TLanguage = 'en' | 'zh' | 'pl'
export type TImageInfo = { url: string; blurHash?: string; dim?: { width: number; height: number } }
export type TNoteListMode = 'posts' | 'postsAndReplies' | 'pictures'
export type TNotificationType = 'all' | 'mentions' | 'reactions' | 'zaps'
export type TPageRef = { scrollToTop: () => void }
export type TNip66RelayInfo = TRelayInfo & {
url: string
shortUrl: string
hasNip11: boolean
triedNip11: boolean
relayType?: string
countryCode?: string
}