@xarmian/envoi-sdk
Version:
SDK for enVoi, a naming service for Voi Network
96 lines (95 loc) • 3.68 kB
JavaScript
import { API_BASE_URL } from './config.js';
async function fetchWithTimeout(url, options = {}, timeout = 5000) {
const controller = new AbortController();
const id = setTimeout(() => controller.abort(), timeout);
try {
const response = await fetch(url, {
...options,
signal: controller.signal,
});
clearTimeout(id);
return response;
}
catch (error) {
clearTimeout(id);
throw error;
}
}
export function createHttpClient() {
return {
getNameFromAddress: async (address) => {
try {
const addresses = Array.isArray(address) ? address : [address];
const url = `${API_BASE_URL}/api/name/${addresses.join(',')}`;
const response = await fetchWithTimeout(url);
if (!response.ok) {
return Array(addresses.length).fill('');
}
const data = await response.json();
return data.results.map(result => result.name || '');
}
catch (error) {
console.error('Error fetching name from address:', error);
return Array(Array.isArray(address) ? address.length : 1).fill('');
}
},
getAddressFromName: async (name) => {
try {
const names = Array.isArray(name) ? name : [name];
const url = `${API_BASE_URL}/api/address/${names.join(',')}`;
const response = await fetchWithTimeout(url);
if (!response.ok) {
return Array(names.length).fill('');
}
const data = await response.json();
return data.results.map(result => result.address || '');
}
catch (error) {
console.error('Error fetching address from name:', error);
return Array(Array.isArray(name) ? name.length : 1).fill('');
}
},
search: async (query) => {
try {
const url = `${API_BASE_URL}/api/search?pattern=${encodeURIComponent(query)}`;
const response = await fetchWithTimeout(url);
if (!response.ok) {
return [];
}
const data = await response.json();
return data.results.map(result => ({
name: result.name,
address: result.address,
metadata: result.metadata
}));
}
catch (error) {
console.error('Error searching names:', error);
return [];
}
},
getTokenInfo: async (tokenId, avatarFormat = 'thumb') => {
try {
const tokenIds = Array.isArray(tokenId) ? tokenId : [tokenId];
const url = `${API_BASE_URL}/api/token/${tokenIds.join(',')}?avatar=${avatarFormat}`;
const response = await fetchWithTimeout(url);
if (!response.ok) {
return [];
}
const data = await response.json();
return data.results
.filter(result => result.token_id)
.map(result => ({
token_id: result.token_id,
name: result.name,
address: result.address,
metadata: result.metadata
}));
}
catch (error) {
console.error('Error fetching token info:', error);
return [];
}
}
};
}