/** * Title: GRIDS Basic Page Script * Description: Page Script for /grids-basic.html * Author: Peter Harpending * Date: 2025-12-29 * Last-Updated: 2025-12-29 * * @module */ main(); /** * Runs on page load */ async function main () { let n_input = document.getElementById('grids-n') as HTMLInputElement; let r_input = document.getElementById('grids-r') as HTMLInputElement; let a_input = document.getElementById('grids-a') as HTMLInputElement; let p_input = document.getElementById('grids-p') as HTMLInputElement; let submit_btn = document.getElementById('grids-submit') as HTMLInputElement; let grids_url_elt = document.getElementById('grids-url') as HTMLTextAreaElement; let grids_png_elt = document.getElementById('grids-png') as HTMLImageElement; // Page initialization submit_btn.addEventListener( 'click', async function(e) { await on_submit(n_input, r_input, a_input, p_input, grids_url_elt, grids_png_elt) } ); // enable buttons submit_btn.disabled = false; } async function on_submit (n_input : HTMLInputElement, r_input : HTMLInputElement, a_input : HTMLInputElement, p_input : HTMLInputElement, grids_url_elt : HTMLTextAreaElement, grids_png_elt : HTMLImageElement) : Promise { // pull out values let network_id : string = n_input.value; let recipient : string = r_input.value; let amount : number = parseInt(a_input.value); let payload : string = p_input.value; let result: Safe = await grids_request(network_id, recipient, amount, payload); // show url field and png if (result.ok) { let url : string = result.result.url; let png_base64 : string = result.result.png_base64; let src_prefix : string = 'data:image/png;base64,' let src = src_prefix + png_base64; grids_url_elt.innerText = url; grids_png_elt.src = src; grids_url_elt.hidden = false; grids_png_elt.hidden = false; } else { alert('ERROR: ' + result.error); } } type Safe = {ok: true, result: t} | {ok: false, error: string}; type GridsResult = {url : string, png_base64: string}; /** * gets the grids url */ async function grids_request (net_id : string, recipient : string, amount : number, payload : string) : Promise> { // format for network transmission let obj : object = {'network_id' : net_id, 'recipient' : recipient, 'amount' : amount, 'payload' : payload}; let obj_text : string = JSON.stringify(obj, undefined, 4); let url = '/grids-spend'; let req_options = {method: 'POST', headers: {'content-type': 'application/json'}, body: obj_text}; let result: Safe = {ok : false, error : 'IT DO BE LIKE THAT MISTA STANCIL'}; try { let response : Response = await fetch(url, req_options); if (response.ok) result = await response.json() as Safe; else { console.log('bad http response:', response); result = {ok: false, error: 'BAD HTTP RESPONSE'}; } } catch (x: any) { console.log('network error:', x); result = {ok: false, error: 'NETWORK ERROR'}; } return result; }