@xarmian/envoi-sdk
Version:
SDK for enVoi, a naming service for Voi Network
132 lines (129 loc) • 5.59 kB
JavaScript
import { init } from '../index.js';
const MAINNET_NODE = {
token: '',
url: 'https://mainnet-api.voi.nodely.dev',
port: 443
};
async function main() {
const sdk = init(MAINNET_NODE);
const command = process.argv[2]?.toLowerCase();
const query = process.argv[3];
if (!command || !query || !['name', 'address', 'search', 'token'].includes(command)) {
console.log(`
Usage: resolve <command> <query>
Commands:
name <address[,address,...]> Resolve addresses to names using both HTTP and chain resolvers
address <name[,name,...]> Resolve names to addresses using both HTTP and chain resolvers
search <pattern> Search for names matching a pattern using the HTTP resolver
token <token_id[,token_id,...]> Get information about token IDs using the HTTP resolver
Examples:
resolve name BRB3JP4LIW5Q755FJCGVAOA4W3THJ7BR3K6F26EVCGMETLEAZOQRHHJNLQ
resolve name BRB3JP4LIW5Q755FJCGVAOA4W3THJ7BR3K6F26EVCGMETLEAZOQRHHJNLQ,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
resolve address en.voi
resolve address en.voi,test.voi
resolve search voi
resolve token 80067632360305829899847207196844336417360777167721505904064743996533051131418
resolve token 80067632360305829899847207196844336417360777167721505904064743996533051131418,80067632360305829899847207196844336417360777167721505904064743996533051131419
`);
process.exit(1);
}
try {
let httpResults = [];
let searchResults = [];
let tokenInfos = [];
const queries = query.split(',');
switch (command) {
case 'name': {
httpResults = await sdk.http.getNameFromAddress(queries);
const chainResult = await sdk.chain.getNameFromAddress(queries[0]); // Chain resolver doesn't support multiple yet
console.log('\nResolving address(es) to name(s)...');
console.log('\nHTTP Results:');
queries.forEach((addr, i) => {
console.log(`${addr}: ${httpResults[i] || '(not found)'}`);
});
if (queries.length === 1) {
console.log('\nChain Result:', chainResult || '(not found)');
}
break;
}
case 'address': {
httpResults = await sdk.http.getAddressFromName(queries);
const chainResult = await sdk.chain.getAddressFromName(queries[0]); // Chain resolver doesn't support multiple yet
console.log('\nResolving name(s) to address(es)...');
console.log('\nHTTP Results:');
queries.forEach((name, i) => {
console.log(`${name}: ${httpResults[i] || '(not found)'}`);
});
if (queries.length === 1) {
console.log('\nChain Result:', chainResult || '(not found)');
}
break;
}
case 'search': {
console.log('\nSearching for names matching:', query);
searchResults = await sdk.http.search(query);
if (searchResults.length === 0) {
console.log('No results found');
}
else {
console.log('\nResults:');
searchResults.forEach((result, index) => {
console.log(`\n${index + 1}. ${result.name}`);
console.log(` Address: ${result.address}`);
if (result.metadata) {
console.log(' Metadata:', JSON.stringify(result.metadata, null, 2));
}
});
}
break;
}
case 'token': {
console.log('\nResolving token ID(s)...');
tokenInfos = await sdk.http.getTokenInfo(queries);
if (tokenInfos.length === 0) {
console.log('No tokens found via HTTP');
}
else {
console.log('\nHTTP Results:');
tokenInfos.forEach((info, index) => {
if (index > 0)
console.log(''); // Add spacing between tokens
console.log(`Token ${index + 1}:`);
console.log(' Name:', info.name);
console.log(' Address:', info.address);
console.log(' Token ID:', info.token_id);
if (info.metadata) {
console.log(' Metadata:', JSON.stringify(info.metadata, null, 2));
}
});
}
// For single token ID, also try chain resolution
if (queries.length === 1) {
const chainName = await sdk.chain.getNameFromToken(queries[0]);
console.log('\nChain Result:');
console.log(' Name:', chainName || '(not found)');
}
break;
}
}
}
catch (err) {
if (err instanceof Error) {
console.error('\nError:', err.message);
}
else {
console.error('\nAn unknown error occurred');
}
process.exit(1);
}
}
main().catch((err) => {
if (err instanceof Error) {
console.error('\nFatal error:', err.message);
}
else {
console.error('\nAn unknown fatal error occurred');
}
process.exit(1);
});