src/commands/resolve.ts 2.4 K raw
1
import { getContentHashRecord, getRecords } from "@ensdomains/ensjs/public";
2
import { normalize } from "viem/ens";
3
import {
4
	ensClient,
5
	getNameAndAddress,
6
	type ResolveOptions,
7
	spinner,
8
} from "../utils";
9
10
export async function resolve(options: ResolveOptions) {
11
	spinner.start();
12
13
	const { name, address, input } = await getNameAndAddress(options);
14
15
	if (!name || !address) {
16
		spinner.stop();
17
		console.log("404: Name not found");
18
		return;
19
	}
20
21
	// Note: If resolverAddress is provided, inform user it's for reference
22
	if (options.resolverAddress) {
23
		spinner.stop();
24
		console.log(`Note: Using custom resolver: ${options.resolverAddress}`);
25
		console.log(
26
			"(Custom resolver support for read operations is limited in current ENS.js version)\n",
27
		);
28
		spinner.start();
29
	}
30
31
	// Handle TXT
32
	if (options.txt) {
33
		try {
34
			const res = await ensClient.getEnsText({
35
				name: normalize(name as string),
36
				key: options.txt,
37
			});
38
			spinner.stop();
39
			console.log(res);
40
		} catch (error) {
41
			const e = error as { shortMessage: string };
42
			spinner.stop();
43
			console.error("Error fetching TXT record:", e.shortMessage);
44
			console.error(
45
				"If you are receiving HTTP errors consider setting ETH_RPC_URL as an environemnt variable",
46
			);
47
		}
48
		return;
49
	}
50
51
	// Handle contenthash
52
	if (options.contenthash) {
53
		try {
54
			const contentHash = await getContentHashRecord(ensClient, {
55
				name: name as string,
56
			});
57
			spinner.stop();
58
			console.log(contentHash?.decoded || "Not found");
59
		} catch (error) {
60
			const e = error as { shortMessage: string };
61
			spinner.stop();
62
			console.error("Error fetching content hash:", e.shortMessage);
63
			console.error(
64
				"If you are receiving HTTP errors consider setting ETH_RPC_URL as an environemnt variable",
65
			);
66
		}
67
		return;
68
	}
69
70
	if (options.chain) {
71
		try {
72
			const result = await getRecords(ensClient, {
73
				name: name as string,
74
				coins: [options.chain],
75
			});
76
			spinner.stop();
77
			console.log(result.coins[0]?.value || "Not found");
78
		} catch (error) {
79
			const e = error as { shortMessage: string };
80
			spinner.stop();
81
			console.error("Error fetching chain record:", e.shortMessage);
82
			console.error(
83
				"If you are receiving HTTP errors consider setting ETH_RPC_URL as an environemnt variable",
84
			);
85
		}
86
		spinner.stop();
87
		return;
88
	}
89
	// Print basic resolve if no args passed
90
	if (input === "name") {
91
		spinner.stop();
92
		console.log(address);
93
	} else {
94
		spinner.stop();
95
		console.log(name);
96
	}
97
	return;
98
}