about summary refs log tree commit diff
path: root/src/state/queries/resolve-uri.ts
blob: dc8e7fbe1e45e06f03269ddcba85c334268fd531 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import {useQuery} from '@tanstack/react-query'
import {AtUri} from '@atproto/api'

import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'

export const RQKEY = (uri: string) => ['resolved-uri', uri]

export function useResolveUriQuery(uri: string | undefined) {
  return useQuery<{uri: string; did: string}, Error>({
    staleTime: STALE.INFINITY,
    queryKey: RQKEY(uri || ''),
    async queryFn() {
      const urip = new AtUri(uri || '')
      if (!urip.host.startsWith('did:')) {
        const res = await getAgent().resolveHandle({handle: urip.host})
        urip.host = res.data.did
      }
      return {did: urip.host, uri: urip.toString()}
    },
    enabled: !!uri,
  })
}

export function useResolveDidQuery(didOrHandle: string | undefined) {
  return useResolveUriQuery(didOrHandle ? `at://${didOrHandle}/` : undefined)
}