Skip to content

Commit d536558

Browse files
committed
update spreadsheet sheet name and resolve ens names
1 parent 38e5db0 commit d536558

File tree

2 files changed

+44
-12
lines changed

2 files changed

+44
-12
lines changed

src/lib/api/fetchTorchHolders.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { TorchHolder } from "@/lib/torch"
1+
import { resolveEnsName, type TorchHolder } from "@/lib/torch"
22

33
export async function fetchTorchHolders(): Promise<TorchHolder[]> {
44
const googleApiKey = process.env.GOOGLE_API_KEY
@@ -15,7 +15,7 @@ export async function fetchTorchHolders(): Promise<TorchHolder[]> {
1515
}
1616

1717
try {
18-
const url = `https://sheets.googleapis.com/v4/spreadsheets/${sheetId}/values/Sheet1!A:E?majorDimension=ROWS&key=${googleApiKey}`
18+
const url = `https://sheets.googleapis.com/v4/spreadsheets/${sheetId}/values/Website%20Info!A:E?majorDimension=ROWS&key=${googleApiKey}`
1919
const response = await fetch(url)
2020

2121
if (!response.ok) {
@@ -34,15 +34,26 @@ export async function fetchTorchHolders(): Promise<TorchHolder[]> {
3434
// data.values[0] is the header row
3535
const rows = data.values.slice(1) || []
3636

37-
// Map rows to TorchHolder objects
38-
const holders: TorchHolder[] = rows
39-
.filter((row: string[]) => row[0]) // must have address
40-
.map((row: string[]) => ({
41-
address: row[0],
42-
name: row[1] || "",
43-
twitter: row[2] || "",
44-
role: row[3] || "",
45-
}))
37+
// Map rows to TorchHolder objects with ENS resolution
38+
const holders: TorchHolder[] = []
39+
40+
for (const row of rows) {
41+
if (!row[0]) continue // must have address or ENS name
42+
43+
const addressOrEns = row[0].trim()
44+
const resolvedAddress = await resolveEnsName(addressOrEns)
45+
46+
if (resolvedAddress) {
47+
holders.push({
48+
address: resolvedAddress,
49+
name: row[1] || "",
50+
role: row[2] || "",
51+
twitter: row[3] || "",
52+
})
53+
} else {
54+
console.warn(`Could not resolve address or ENS name: ${addressOrEns}`)
55+
}
56+
}
4657

4758
return holders
4859
} catch (error) {

src/lib/torch/index.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import blockies from "ethereum-blockies-base64"
22
import { unstable_cache as cache } from "next/cache"
3-
import type { Address } from "viem"
3+
import { type Address, isAddress } from "viem"
44
import { getPublicClient } from "@wagmi/core"
55

66
import Torch from "@/data/Torch.json"
@@ -237,3 +237,24 @@ export const getTxEtherscanUrl = (txHash: string) => {
237237
export const getAddressEtherscanUrl = (address: string) => {
238238
return `https://etherscan.io/address/${address}`
239239
}
240+
241+
export async function resolveEnsName(
242+
ensName: string
243+
): Promise<`0x${string}` | null> {
244+
try {
245+
const publicClient = getPublicClient(config)
246+
247+
if (isAddress(ensName)) {
248+
return ensName
249+
}
250+
251+
const address = await publicClient.getEnsAddress({
252+
name: ensName,
253+
})
254+
255+
return address
256+
} catch (error) {
257+
console.warn(`Failed to resolve ENS name "${ensName}":`, error)
258+
return null
259+
}
260+
}

0 commit comments

Comments
 (0)