discovery.ts
1 2 3 export async function makeApiCall(url: string): Promise<Response> { 4 const response = await fetch(url, { 5 method: 'GET', 6 headers: { 'Content-Type': 'application/json' } 7 }) 8 9 return response 10 } 11 12 import { getApiUrl, type NetworkType } from '../../lib/config' 13 14 // Module-level network tracking 15 let currentNetworkType: NetworkType = 'mainnet'; 16 17 export function setCurrentNetwork(network: NetworkType) { 18 currentNetworkType = network; 19 } 20 21 export async function getLatestBlockHeight(): Promise<number> { 22 const blockStateUrl = getApiUrl(currentNetworkType, '/block-state/block-height') 23 const response = await makeApiCall(blockStateUrl) 24 const latestHeight = await response.json() 25 26 if (typeof latestHeight === 'number' && latestHeight > 0) { 27 return latestHeight 28 } 29 30 return 0 31 } 32 33 export async function getTotalTransactions(): Promise<number> { 34 const url = getApiUrl(currentNetworkType, '/node/transactions/count') 35 const response = await makeApiCall(url) 36 const total = await response.json() 37 38 if (typeof total === 'number' && total >= 0) { 39 return total 40 } 41 42 return 0 43 } 44 45 export async function getTotalPayloadSize(): Promise<number> { 46 const url = getApiUrl(currentNetworkType, '/node/payloads/total-size') 47 const response = await makeApiCall(url) 48 const size = await response.json() 49 50 if (typeof size === 'number' && size >= 0) { 51 return size 52 } 53 54 return 0 55 } 56 57 export async function getSuccessRate(): Promise<number> { 58 const url = getApiUrl(currentNetworkType, '/status/success-rate') 59 const response = await makeApiCall(url) 60 const rate = await response.json() 61 62 if (typeof rate === 'number' && rate >= 0 && rate <= 1) { 63 return rate 64 } 65 66 return 0 67 } 68 69 70