ens-proxy/api/text.ts

65 lines
1.8 KiB
TypeScript
Raw Normal View History

2022-08-22 14:42:40 +02:00
import type { VercelRequest, VercelResponse } from '@vercel/node'
2022-08-18 15:04:49 +02:00
import { gql, OperationResult } from 'urql'
2022-08-22 14:09:50 +02:00
import { fetchData, getProvider } from './_utils'
2022-08-18 15:04:49 +02:00
const ProfileTextRecordsQuery = gql<{
domains: [{ resolver: { texts: string[] } }]
}>`
query ProfileTextRecords($name: String!) {
domains(where: { name: $name }) {
resolver {
texts
}
}
}
`
2022-08-18 15:51:38 +02:00
export async function getEnsTextRecords(
ensName: string
): Promise<{ key: string; value: string }[]> {
// 1. Check which text records are set for the domain with ENS subgraph,
// to prevent unnecessary contract calls.
const result: OperationResult<{
domains: [{ resolver: { texts: string[] } }]
}> = await fetchData(
ProfileTextRecordsQuery,
{ name: ensName },
{
url: `https://api.thegraph.com/subgraphs/name/ensdomains/ens`,
requestPolicy: 'cache-and-network'
}
)
2022-08-22 14:42:40 +02:00
console.log('result?.data?.domains[0]?.resolver', result)
2022-08-18 16:09:42 +02:00
if (!result?.data?.domains[0]?.resolver) throw 'No ENS text records found'
2022-08-18 15:51:38 +02:00
// 2. Retrieve the text records.
const { texts } = result.data.domains[0].resolver
const records = []
2022-08-22 14:09:50 +02:00
const provider = await getProvider()
const resolver = await provider.getResolver(ensName)
2022-08-18 15:51:38 +02:00
for (let index = 0; index < texts?.length; index++) {
const key = texts[index]
2022-08-22 14:09:50 +02:00
const value = await resolver.getText(key)
2022-08-18 15:51:38 +02:00
records.push({ key, value })
}
return records
}
export default async function ensTextApi(
2022-08-22 14:42:40 +02:00
request: VercelRequest,
response: VercelResponse
2022-08-18 15:51:38 +02:00
) {
2022-08-18 15:04:49 +02:00
try {
const ensName = String(request.query.name)
2022-08-18 15:51:38 +02:00
const records = await getEnsTextRecords(ensName)
2022-08-18 15:04:49 +02:00
2022-08-22 12:57:25 +02:00
response.setHeader('Cache-Control', 'max-age=0, s-maxage=86400')
2022-08-18 15:04:49 +02:00
response.status(200).send(records)
} catch (error) {
response.status(500).send(`${error}`)
}
}