UNPKG

@rsksmart/rsk-cli

Version:

CLI tool for Rootstock network using Viem

128 lines (127 loc) 5.35 kB
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 }; } } }