var hashToTest = ""; var protocol = ""; const $results = document.querySelector('#results'); function returnHtmlLink(gateway) { let gatewayTitle = gateway.split(hashToTest)[0]; return '' + gateway + ''; } function addNode(gateway, online, title) { const para = document.createElement('div'); let node; if (online) { node = document.createElement('strong'); node.innerHTML = '✅ - Online - ' + returnHtmlLink(gateway); } else { node = document.createElement('div'); node.innerText = '❌ - Offline - ' + gateway; } node.setAttribute('title', title); para.appendChild(node); $results.appendChild(para); } function updateStats(total, checked) { document.getElementById('stats').innerText = checked + '/' + total + ' gateways checked'; } function checkGateways(gateways) { const total = gateways.length; let checked = 0; gateways.forEach((gateway) => { gateway = gateway.replace('/ipfs/', protocol); const gatewayAndHash = gateway.replace(':hash', hashToTest); // opt-out from gateway redirects done by browser extension const testUrl = gatewayAndHash + '#x-ipfs-companion-no-redirect'; fetch(testUrl) .then(res => res.text()) .then((text) => { const matched = true; // TODO : Check if the response is good. addNode(gatewayAndHash, matched, matched ? 'All good' : 'Output did not match expected output'); checked++; updateStats(total, checked); }).catch((err) => { window.err = err; addNode(gatewayAndHash, false, err); checked++; updateStats(total, checked); }); }); } function start_ipfs() { while ($results.lastChild) { $results.removeChild($results.lastChild); } hashToTest = document.querySelector("#input_ipfs").value; protocol = "/ipfs/"; fetch('./json/gateways.json') .then(res => res.json()) .then(gateways => checkGateways(gateways)); } function start_ipns() { while ($results.lastChild) { $results.removeChild($results.lastChild); } hashToTest = document.querySelector("#input_ipns").value; protocol = "/ipns/"; fetch('./json/gateways.json') .then(res => res.json()) .then(gateways => checkGateways(gateways)); }