132 lines
3.6 KiB
TypeScript
132 lines
3.6 KiB
TypeScript
/**
|
|
* Title: GRIDS Basic Page Script
|
|
* Description: Page Script for /grids-basic.html
|
|
* Author: Peter Harpending <peterharpending@qpq.swiss>
|
|
* 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<void>
|
|
{
|
|
// 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<GridsResult> = 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<t> = {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<Safe<GridsResult>>
|
|
{
|
|
// 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<GridsResult> =
|
|
{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<GridsResult>;
|
|
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;
|
|
}
|