Files
smesh/src/constants.ts
2025-11-27 00:02:13 +08:00

446 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { kinds } from 'nostr-tools'
export const JUMBLE_API_BASE_URL = 'https://api.jumble.social'
export const RECOMMENDED_BLOSSOM_SERVERS = [
'https://blossom.band/',
'https://blossom.primal.net/',
'https://nostr.media/'
]
export const StorageKey = {
VERSION: 'version',
THEME_SETTING: 'themeSetting',
RELAY_SETS: 'relaySets',
ACCOUNTS: 'accounts',
CURRENT_ACCOUNT: 'currentAccount',
ADD_CLIENT_TAG: 'addClientTag',
NOTE_LIST_MODE: 'noteListMode',
NOTIFICATION_TYPE: 'notificationType',
DEFAULT_ZAP_SATS: 'defaultZapSats',
DEFAULT_ZAP_COMMENT: 'defaultZapComment',
QUICK_ZAP: 'quickZap',
LAST_READ_NOTIFICATION_TIME_MAP: 'lastReadNotificationTimeMap',
ACCOUNT_FEED_INFO_MAP: 'accountFeedInfoMap',
AUTOPLAY: 'autoplay',
HIDE_UNTRUSTED_INTERACTIONS: 'hideUntrustedInteractions',
HIDE_UNTRUSTED_NOTIFICATIONS: 'hideUntrustedNotifications',
TRANSLATION_SERVICE_CONFIG_MAP: 'translationServiceConfigMap',
MEDIA_UPLOAD_SERVICE_CONFIG_MAP: 'mediaUploadServiceConfigMap',
HIDE_UNTRUSTED_NOTES: 'hideUntrustedNotes',
DEFAULT_SHOW_NSFW: 'defaultShowNsfw',
DISMISSED_TOO_MANY_RELAYS_ALERT: 'dismissedTooManyRelaysAlert',
SHOW_KINDS: 'showKinds',
SHOW_KINDS_VERSION: 'showKindsVersion',
HIDE_CONTENT_MENTIONING_MUTED_USERS: 'hideContentMentioningMutedUsers',
NOTIFICATION_LIST_STYLE: 'notificationListStyle',
MEDIA_AUTO_LOAD_POLICY: 'mediaAutoLoadPolicy',
SHOWN_CREATE_WALLET_GUIDE_TOAST_PUBKEYS: 'shownCreateWalletGuideToastPubkeys',
SIDEBAR_COLLAPSE: 'sidebarCollapse',
PRIMARY_COLOR: 'primaryColor',
ENABLE_SINGLE_COLUMN_LAYOUT: 'enableSingleColumnLayout',
FAVICON_URL_TEMPLATE: 'faviconUrlTemplate',
FILTER_OUT_ONION_RELAYS: 'filterOutOnionRelays',
MEDIA_UPLOAD_SERVICE: 'mediaUploadService', // deprecated
HIDE_UNTRUSTED_EVENTS: 'hideUntrustedEvents', // deprecated
ACCOUNT_RELAY_LIST_EVENT_MAP: 'accountRelayListEventMap', // deprecated
ACCOUNT_FOLLOW_LIST_EVENT_MAP: 'accountFollowListEventMap', // deprecated
ACCOUNT_MUTE_LIST_EVENT_MAP: 'accountMuteListEventMap', // deprecated
ACCOUNT_MUTE_DECRYPTED_TAGS_MAP: 'accountMuteDecryptedTagsMap', // deprecated
ACCOUNT_PROFILE_EVENT_MAP: 'accountProfileEventMap', // deprecated
ACTIVE_RELAY_SET_ID: 'activeRelaySetId', // deprecated
FEED_TYPE: 'feedType' // deprecated
}
export const ApplicationDataKey = {
NOTIFICATIONS_SEEN_AT: 'seen_notifications_at'
}
export const BIG_RELAY_URLS = [
'wss://relay.damus.io/',
'wss://relay.nostr.band/',
'wss://relay.primal.net/',
'wss://nos.lol/'
]
export const SEARCHABLE_RELAY_URLS = ['wss://relay.nostr.band/', 'wss://search.nos.today/']
export const TRENDING_NOTES_RELAY_URLS = ['wss://trending.relays.land/']
export const GROUP_METADATA_EVENT_KIND = 39000
export const ExtendedKind = {
EXTERNAL_CONTENT_REACTION: 17,
PICTURE: 20,
VIDEO: 21,
SHORT_VIDEO: 22,
POLL: 1068,
POLL_RESPONSE: 1018,
COMMENT: 1111,
VOICE: 1222,
VOICE_COMMENT: 1244,
FAVORITE_RELAYS: 10012,
BLOSSOM_SERVER_LIST: 10063,
FOLLOW_PACK: 39089,
RELAY_REVIEW: 31987,
GROUP_METADATA: 39000,
ADDRESSABLE_NORMAL_VIDEO: 34235,
ADDRESSABLE_SHORT_VIDEO: 34236
}
export const ALLOWED_FILTER_KINDS = [
kinds.ShortTextNote,
kinds.Repost,
kinds.GenericRepost,
ExtendedKind.PICTURE,
ExtendedKind.VIDEO,
ExtendedKind.SHORT_VIDEO,
ExtendedKind.POLL,
ExtendedKind.COMMENT,
ExtendedKind.VOICE,
ExtendedKind.VOICE_COMMENT,
kinds.Highlights,
kinds.LongFormArticle,
ExtendedKind.ADDRESSABLE_NORMAL_VIDEO,
ExtendedKind.ADDRESSABLE_SHORT_VIDEO
]
export const SUPPORTED_KINDS = [
...ALLOWED_FILTER_KINDS,
ExtendedKind.RELAY_REVIEW,
kinds.Emojisets,
ExtendedKind.FOLLOW_PACK
]
export const URL_REGEX =
/https?:\/\/[\w\p{L}\p{N}\p{M}&.\-/?=#@%+_:!~*]+[^\s.,;:'")\]}!?"']/giu
export const WS_URL_REGEX =
/wss?:\/\/[\w\p{L}\p{N}\p{M}&.\-/?=#@%+_:!~*]+[^\s.,;:'")\]}!?"']/giu
export const EMAIL_REGEX = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
export const EMOJI_SHORT_CODE_REGEX = /:[a-zA-Z0-9_-]+:/g
export const EMBEDDED_EVENT_REGEX = /nostr:(note1[a-z0-9]{58}|nevent1[a-z0-9]+|naddr1[a-z0-9]+)/g
export const EMBEDDED_MENTION_REGEX = /nostr:(npub1[a-z0-9]{58}|nprofile1[a-z0-9]+)/g
export const HASHTAG_REGEX = /#[\p{L}\p{N}\p{M}_]+/gu
export const LN_INVOICE_REGEX = /(ln(?:bc|tb|bcrt))([0-9]+[munp]?)?1([02-9ac-hj-np-z]+)/g
export const EMOJI_REGEX =
/[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F900}-\u{1F9FF}]|[\u{1FA70}-\u{1FAFF}]|[\u{1F004}]|[\u{1F0CF}]|[\u{1F18E}]|[\u{3030}]|[\u{2B50}]|[\u{2B55}]|[\u{2934}-\u{2935}]|[\u{2B05}-\u{2B07}]|[\u{2B1B}-\u{2B1C}]|[\u{3297}]|[\u{3299}]|[\u{303D}]|[\u{00A9}]|[\u{00AE}]|[\u{2122}]|[\u{23E9}-\u{23EF}]|[\u{23F0}]|[\u{23F3}]|[\u{FE00}-\u{FE0F}]|[\u{200D}]/gu
export const YOUTUBE_URL_REGEX =
/https?:\/\/(?:(?:www|m)\.)?(?:youtube\.com\/(?:watch\?[^#\s]*|embed\/[\w-]+|shorts\/[\w-]+|live\/[\w-]+)|youtu\.be\/[\w-]+)(?:\?[^#\s]*)?(?:#[^\s]*)?/gi
export const X_URL_REGEX =
/https?:\/\/(?:www\.)?(twitter\.com|x\.com)\/(?:#!\/)?(\w+)\/status(?:es)?\/(\d+)(?:[?#].*)?/gi
export const JUMBLE_PUBKEY = 'f4eb8e62add1340b9cadcd9861e669b2e907cea534e0f7f3ac974c11c758a51a'
export const CODY_PUBKEY = '8125b911ed0e94dbe3008a0be48cfe5cd0c0b05923cfff917ae7e87da8400883'
export const NIP_96_SERVICE = [
'https://mockingyou.com',
'https://nostpic.com',
'https://nostr.build', // default
'https://nostrcheck.me',
'https://nostrmedia.com',
'https://files.sovbit.host'
]
export const DEFAULT_NIP_96_SERVICE = 'https://nostr.build'
export const DEFAULT_NOSTRCONNECT_RELAY = [
'wss://relay.nsec.app/',
'wss://bucket.coracle.social/',
'wss://relay.primal.net/'
]
export const DEFAULT_FAVICON_URL_TEMPLATE = 'https://{hostname}/favicon.ico'
export const POLL_TYPE = {
MULTIPLE_CHOICE: 'multiplechoice',
SINGLE_CHOICE: 'singlechoice'
} as const
export const NOTIFICATION_LIST_STYLE = {
COMPACT: 'compact',
DETAILED: 'detailed'
} as const
export const MEDIA_AUTO_LOAD_POLICY = {
ALWAYS: 'always',
WIFI_ONLY: 'wifi-only',
NEVER: 'never'
} as const
export const MAX_PINNED_NOTES = 10
export const PRIMARY_COLORS = {
DEFAULT: {
name: 'Default',
light: {
primary: '259 43% 56%',
'primary-hover': '259 43% 65%',
'primary-foreground': '0 0% 98%',
ring: '259 43% 56%'
},
dark: {
primary: '259 43% 56%',
'primary-hover': '259 43% 65%',
'primary-foreground': '240 5.9% 10%',
ring: '259 43% 56%'
}
},
RED: {
name: 'Red',
light: {
primary: '0 65% 55%',
'primary-hover': '0 65% 65%',
'primary-foreground': '0 0% 98%',
ring: '0 65% 55%'
},
dark: {
primary: '0 65% 55%',
'primary-hover': '0 65% 65%',
'primary-foreground': '240 5.9% 10%',
ring: '0 65% 55%'
}
},
ORANGE: {
name: 'Orange',
light: {
primary: '30 100% 50%',
'primary-hover': '30 100% 60%',
'primary-foreground': '0 0% 98%',
ring: '30 100% 50%'
},
dark: {
primary: '30 100% 50%',
'primary-hover': '30 100% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '30 100% 50%'
}
},
AMBER: {
name: 'Amber',
light: {
primary: '42 100% 50%',
'primary-hover': '42 100% 60%',
'primary-foreground': '0 0% 98%',
ring: '42 100% 50%'
},
dark: {
primary: '42 100% 50%',
'primary-hover': '42 100% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '42 100% 50%'
}
},
YELLOW: {
name: 'Yellow',
light: {
primary: '54 100% 50%',
'primary-hover': '54 100% 60%',
'primary-foreground': '0 0% 10%',
ring: '54 100% 50%'
},
dark: {
primary: '54 100% 50%',
'primary-hover': '54 100% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '54 100% 50%'
}
},
LIME: {
name: 'Lime',
light: {
primary: '90 60% 50%',
'primary-hover': '90 60% 60%',
'primary-foreground': '0 0% 98%',
ring: '90 60% 50%'
},
dark: {
primary: '90 60% 50%',
'primary-hover': '90 60% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '90 60% 50%'
}
},
GREEN: {
name: 'Green',
light: {
primary: '140 60% 40%',
'primary-hover': '140 60% 50%',
'primary-foreground': '0 0% 98%',
ring: '140 60% 40%'
},
dark: {
primary: '140 60% 40%',
'primary-hover': '140 60% 50%',
'primary-foreground': '240 5.9% 10%',
ring: '140 60% 40%'
}
},
EMERALD: {
name: 'Emerald',
light: {
primary: '160 70% 40%',
'primary-hover': '160 70% 50%',
'primary-foreground': '0 0% 98%',
ring: '160 70% 40%'
},
dark: {
primary: '160 70% 40%',
'primary-hover': '160 70% 50%',
'primary-foreground': '240 5.9% 10%',
ring: '160 70% 40%'
}
},
TEAL: {
name: 'Teal',
light: {
primary: '180 70% 40%',
'primary-hover': '180 70% 50%',
'primary-foreground': '0 0% 98%',
ring: '180 70% 40%'
},
dark: {
primary: '180 70% 40%',
'primary-hover': '180 70% 50%',
'primary-foreground': '240 5.9% 10%',
ring: '180 70% 40%'
}
},
CYAN: {
name: 'Cyan',
light: {
primary: '200 70% 40%',
'primary-hover': '200 70% 50%',
'primary-foreground': '0 0% 98%',
ring: '200 70% 40%'
},
dark: {
primary: '200 70% 40%',
'primary-hover': '200 70% 50%',
'primary-foreground': '240 5.9% 10%',
ring: '200 70% 40%'
}
},
SKY: {
name: 'Sky',
light: {
primary: '210 70% 50%',
'primary-hover': '210 70% 60%',
'primary-foreground': '0 0% 98%',
ring: '210 70% 50%'
},
dark: {
primary: '210 70% 50%',
'primary-hover': '210 70% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '210 70% 50%'
}
},
BLUE: {
name: 'Blue',
light: {
primary: '220 80% 50%',
'primary-hover': '220 80% 60%',
'primary-foreground': '0 0% 98%',
ring: '220 80% 50%'
},
dark: {
primary: '220 80% 50%',
'primary-hover': '220 80% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '220 80% 50%'
}
},
INDIGO: {
name: 'Indigo',
light: {
primary: '230 80% 50%',
'primary-hover': '230 80% 60%',
'primary-foreground': '0 0% 98%',
ring: '230 80% 50%'
},
dark: {
primary: '230 80% 50%',
'primary-hover': '230 80% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '230 80% 50%'
}
},
VIOLET: {
name: 'Violet',
light: {
primary: '250 80% 50%',
'primary-hover': '250 80% 60%',
'primary-foreground': '0 0% 98%',
ring: '250 80% 50%'
},
dark: {
primary: '250 80% 50%',
'primary-hover': '250 80% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '250 80% 50%'
}
},
PURPLE: {
name: 'Purple',
light: {
primary: '280 80% 50%',
'primary-hover': '280 80% 60%',
'primary-foreground': '0 0% 98%',
ring: '280 80% 50%'
},
dark: {
primary: '280 80% 50%',
'primary-hover': '280 80% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '280 80% 50%'
}
},
FUCHSIA: {
name: 'Fuchsia',
light: {
primary: '310 80% 50%',
'primary-hover': '310 80% 60%',
'primary-foreground': '0 0% 98%',
ring: '310 80% 50%'
},
dark: {
primary: '310 80% 50%',
'primary-hover': '310 80% 60%',
'primary-foreground': '240 5.9% 10%',
ring: '310 80% 50%'
}
},
PINK: {
name: 'Pink',
light: {
primary: '330 80% 60%',
'primary-hover': '330 80% 70%',
'primary-foreground': '0 0% 10%',
ring: '330 80% 60%'
},
dark: {
primary: '330 80% 60%',
'primary-hover': '330 80% 70%',
'primary-foreground': '240 5.9% 10%',
ring: '330 80% 60%'
}
},
ROSE: {
name: 'Rose',
light: {
primary: '350 80% 60%',
'primary-hover': '350 80% 70%',
'primary-foreground': '0 0% 10%',
ring: '350 80% 60%'
},
dark: {
primary: '350 80% 60%',
'primary-hover': '350 80% 70%',
'primary-foreground': '240 5.9% 10%',
ring: '350 80% 60%'
}
}
} as const
export type TPrimaryColor = keyof typeof PRIMARY_COLORS
export const LONG_PRESS_THRESHOLD = 500