UNPKG

@xarmian/envoi-sdk

Version:

SDK for enVoi, a naming service for Voi Network

96 lines (95 loc) 3.68 kB
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 []; } } }; }