link.ts raw

   1  import { TSearchParams } from '@/types'
   2  import { Event, nip19 } from 'nostr-tools'
   3  import { getNoteBech32Id } from './event'
   4  
   5  export const toHome = () => '/'
   6  export const toNote = (eventOrId: Event | string) => {
   7    if (typeof eventOrId === 'string') return `/notes/${eventOrId}`
   8    const nevent = getNoteBech32Id(eventOrId)
   9    return `/notes/${nevent}`
  10  }
  11  export const toNoteList = ({
  12    hashtag,
  13    search,
  14    domain,
  15    kinds
  16  }: {
  17    hashtag?: string
  18    search?: string
  19    domain?: string
  20    kinds?: number[]
  21  }) => {
  22    const path = '/notes'
  23    const query = new URLSearchParams()
  24    if (hashtag) query.set('t', hashtag.toLowerCase())
  25    if (kinds?.length) {
  26      kinds.forEach((k) => query.append('k', k.toString()))
  27    }
  28    if (search) query.set('s', search)
  29    if (domain) query.set('d', domain)
  30    return `${path}?${query.toString()}`
  31  }
  32  export const toProfile = (userId: string) => {
  33    if (userId.startsWith('npub') || userId.startsWith('nprofile')) return `/users/${userId}`
  34    const npub = nip19.npubEncode(userId)
  35    return `/users/${npub}`
  36  }
  37  export const toProfileList = ({ search, domain }: { search?: string; domain?: string }) => {
  38    const path = '/users'
  39    const query = new URLSearchParams()
  40    if (search) query.set('s', search)
  41    if (domain) query.set('d', domain)
  42    return `${path}?${query.toString()}`
  43  }
  44  export const toFollowingList = (pubkey: string) => {
  45    const npub = nip19.npubEncode(pubkey)
  46    return `/users/${npub}/following`
  47  }
  48  export const toOthersRelaySettings = (pubkey: string) => {
  49    const npub = nip19.npubEncode(pubkey)
  50    return `/users/${npub}/relays`
  51  }
  52  export const toSearch = (params?: TSearchParams) => {
  53    if (!params) return '/search'
  54    const query = new URLSearchParams()
  55    query.set('t', params.type)
  56    query.set('q', params.search)
  57    if (params.input) {
  58      query.set('i', params.input)
  59    }
  60    return `/search?${query.toString()}`
  61  }
  62  export const toExternalContent = (id: string) => `/external-content?id=${encodeURIComponent(id)}`
  63  export const toSettings = () => '/settings'
  64  export const toHelp = () => '/help'
  65  export const toRelaySettings = (tag?: 'mailbox' | 'favorite-relays') => {
  66    return '/settings/relays' + (tag ? '#' + tag : '')
  67  }
  68  export const toWallet = () => '/settings/wallet'
  69  export const toPostSettings = () => '/settings/posts'
  70  export const toGeneralSettings = () => '/settings/general'
  71  export const toAppearanceSettings = () => '/settings/appearance'
  72  export const toEmojiPackSettings = () => '/settings/emoji-packs'
  73  export const toSystemSettings = () => '/settings/system'
  74  export const toProfileEditor = () => '/profile-editor'
  75  export const toRelay = (url: string) => `/relays/${encodeURIComponent(url)}`
  76  export const toRelayReviews = (url: string) => `/relays/${encodeURIComponent(url)}/reviews`
  77  export const toMuteList = () => '/mutes'
  78  export const toRizful = () => '/rizful'
  79  export const toBookmarks = () => '/bookmarks'
  80  export const toFollowPack = (eventOrId: Event | string) => {
  81    if (typeof eventOrId === 'string') return `/follow-packs/${eventOrId}`
  82    const naddr = getNoteBech32Id(eventOrId)
  83    return `/follow-packs/${naddr}`
  84  }
  85  
  86  export const toChachiChat = (relay: string, d: string) => {
  87    return `https://chachi.chat/${relay.replace(/^wss?:\/\//, '').replace(/\/$/, '')}/${d}`
  88  }
  89  export const toNjump = (id: string) => `https://njump.me/${id}`
  90  export const toLogin = () => '/login'
  91  export const toLogout = () => '/logout'
  92  export const toChatChannel = (channelId: string) => `/chat/${channelId}`
  93  export const toDMConversation = (pubkey: string) => {
  94    const npub = pubkey.startsWith('npub') ? pubkey : nip19.npubEncode(pubkey)
  95    return `/dm/${npub}`
  96  }
  97