mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import { gql, OperationContext, OperationResult } from 'urql'
|
|
import { fetchData } from './subgraph'
|
|
|
|
// make sure to only query for domains owned by account, so domains
|
|
// solely set by 3rd parties like *.gitcoin.eth won't show up
|
|
const UserEnsNames = gql<any>`
|
|
query UserEnsDomains($accountId: String!) {
|
|
domains(where: { resolvedAddress: $accountId, owner: $accountId }) {
|
|
name
|
|
}
|
|
}
|
|
`
|
|
|
|
const UserEnsAddress = gql<any>`
|
|
query UserEnsDomainsAddress($name: String!) {
|
|
domains(where: { name: $name }) {
|
|
resolvedAddress {
|
|
id
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
const ensSubgraphQueryContext: OperationContext = {
|
|
url: `https://api.thegraph.com/subgraphs/name/ensdomains/ens`,
|
|
requestPolicy: 'cache-and-network'
|
|
}
|
|
|
|
export async function getEnsName(accountId: string): Promise<string> {
|
|
const response: OperationResult<any> = await fetchData(
|
|
UserEnsNames,
|
|
{ accountId: accountId.toLowerCase() },
|
|
ensSubgraphQueryContext
|
|
)
|
|
if (!response?.data?.domains?.length) return
|
|
|
|
// Default order of response.data.domains seems to be by creation time, from oldest to newest.
|
|
// Pick the last one as that is what direct web3 calls do.
|
|
const { name } = response.data.domains.slice(-1)[0]
|
|
return name
|
|
}
|
|
|
|
export async function getEnsAddress(ensName: string): Promise<string> {
|
|
const response: OperationResult<any> = await fetchData(
|
|
UserEnsAddress,
|
|
{ name: ensName },
|
|
ensSubgraphQueryContext
|
|
)
|
|
if (!response?.data?.domains?.length) return
|
|
const { id } = response.data.domains[0].resolvedAddress
|
|
return id
|
|
}
|