@rsksmart/rsk-cli
Version:
CLI tool for Rootstock network using Viem
128 lines (127 loc) • 5.35 kB
JavaScript
import chalk from "chalk";
import ora from "ora";
import { resolveRNSToAddress, resolveAddressToRNS } from "../utils/rnsHelper.js";
import { validateAndFormatAddressRSK, toEip1191ChecksumAddress } from "../utils/index.js";
function logMessage(params, message, color = chalk.white) {
if (!params.isExternal) {
console.log(color(message));
}
}
function logInfo(params, message) {
logMessage(params, message, chalk.blue);
}
function startSpinner(params, spinner, message) {
if (!params.isExternal) {
spinner.start(message);
}
}
function stopSpinner(params, spinner) {
if (!params.isExternal) {
spinner.stop();
}
}
function succeedSpinner(params, spinner, message) {
if (!params.isExternal) {
spinner.succeed(message);
}
}
function failSpinner(params, spinner, message) {
if (!params.isExternal) {
spinner.fail(message);
}
}
export async function resolveCommand(params = { name: "", testnet: false, reverse: false }) {
const spinner = ora();
try {
if (params.reverse) {
const formattedAddress = validateAndFormatAddressRSK(params.name, params.testnet);
if (!formattedAddress) {
const errorMessage = "Invalid address format for reverse lookup";
failSpinner(params, spinner, chalk.red(`❌ ${errorMessage}`));
return params.isExternal ? { success: false, error: errorMessage } : undefined;
}
startSpinner(params, spinner, chalk.white("🔍 Looking up name for address..."));
const resolverName = await resolveAddressToRNS({
address: formattedAddress,
testnet: params.testnet,
isExternal: params.isExternal
});
stopSpinner(params, spinner);
if (resolverName) {
succeedSpinner(params, spinner, chalk.green("✅ Name found successfully"));
const displayAddress = toEip1191ChecksumAddress(formattedAddress, params.testnet);
logMessage(params, chalk.white(`📄 Address:`) + " " + chalk.green(displayAddress));
logMessage(params, chalk.white(`🏷️ Name:`) + " " + chalk.green(resolverName));
if (params.isExternal) {
return {
success: true,
data: {
address: displayAddress,
name: resolverName,
network: params.testnet ? "Rootstock Testnet" : "Rootstock Mainnet"
}
};
}
}
else {
failSpinner(params, spinner, chalk.yellow("⚠️ No name found for this address"));
logInfo(params, "💡 To enable reverse lookup for your address, you need to set a reverse record in the RNS manager");
if (params.isExternal) {
return {
success: false,
error: "No name found for this address"
};
}
}
}
else {
let domainName = params.name;
if (!domainName.endsWith(".rsk")) {
domainName = domainName + ".rsk";
}
startSpinner(params, spinner, chalk.white(`🔍 Resolving ${domainName}...`));
const resolvedAddress = await resolveRNSToAddress({
name: domainName,
testnet: params.testnet,
isExternal: params.isExternal
});
stopSpinner(params, spinner);
if (resolvedAddress) {
succeedSpinner(params, spinner, chalk.green("✅ Domain resolved successfully"));
logMessage(params, chalk.white(`🏷️ Domain:`) + " " + chalk.green(domainName));
logMessage(params, chalk.white(`📄 Address:`) + " " + chalk.green(resolvedAddress));
logMessage(params, chalk.white(`🌐 Network:`) + " " + chalk.green(params.testnet ? "Rootstock Testnet" : "Rootstock Mainnet"));
if (params.isExternal) {
return {
success: true,
data: {
name: domainName,
address: resolvedAddress,
network: params.testnet ? "Rootstock Testnet" : "Rootstock Mainnet"
}
};
}
}
else {
failSpinner(params, spinner, chalk.yellow(`⚠️ No address found for ${domainName}`));
logInfo(params, "💡 This domain may not be registered or has no address configured");
if (params.isExternal) {
return {
success: false,
error: `No address found for ${domainName}`
};
}
}
}
}
catch (error) {
stopSpinner(params, spinner);
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
if (params.isExternal) {
return {
success: false,
error: errorMessage
};
}
}
}