diff --git a/src/main/resources/q-apps/q-apps.js b/src/main/resources/q-apps/q-apps.js index 06d8f69a..ff39ce72 100644 --- a/src/main/resources/q-apps/q-apps.js +++ b/src/main/resources/q-apps/q-apps.js @@ -1,10 +1,32 @@ -function httpGet(url) { +function httpGet(event, url) { var request = new XMLHttpRequest(); request.open("GET", url, false); request.send(null); return request.responseText; } +function httpGetAsyncWithEvent(event, url) { + fetch(url) + .then((response) => response.text()) + .then((responseText) => { + + if (responseText == null) { + // Pass to parent (UI), in case they can fulfil this request + event.data.requestedHandler = "UI"; + parent.postMessage(event.data, '*', [event.ports[0]]); + return; + } + + handleResponse(event, responseText); + + }) + .catch((error) => { + let res = new Object(); + res.error = error; + handleResponse(JSON.stringify(res), responseText); + }) +} + function handleResponse(event, response) { if (event == null) { return; @@ -143,15 +165,15 @@ window.addEventListener("message", (event) => { switch (data.action) { case "GET_ACCOUNT_DATA": - response = httpGet("/addresses/" + data.address); + response = httpGetAsyncWithEvent(event, "/addresses/" + data.address); break; case "GET_ACCOUNT_NAMES": - response = httpGet("/names/address/" + data.address); + response = httpGetAsyncWithEvent(event, "/names/address/" + data.address); break; case "GET_NAME_DATA": - response = httpGet("/names/" + data.name); + response = httpGetAsyncWithEvent(event, "/names/" + data.name); break; case "GET_QDN_RESOURCE_URL": @@ -174,7 +196,7 @@ window.addEventListener("message", (event) => { if (data.limit != null) url = url.concat("&limit=" + data.limit); if (data.offset != null) url = url.concat("&offset=" + data.offset); if (data.reverse != null) url = url.concat("&reverse=" + new Boolean(data.reverse).toString()); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "SEARCH_QDN_RESOURCES": @@ -190,7 +212,7 @@ window.addEventListener("message", (event) => { if (data.limit != null) url = url.concat("&limit=" + data.limit); if (data.offset != null) url = url.concat("&offset=" + data.offset); if (data.reverse != null) url = url.concat("&reverse=" + new Boolean(data.reverse).toString()); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "FETCH_QDN_RESOURCE": @@ -200,19 +222,19 @@ window.addEventListener("message", (event) => { if (data.filepath != null) url = url.concat("&filepath=" + data.filepath); if (data.rebuild != null) url = url.concat("&rebuild=" + new Boolean(data.rebuild).toString()) if (data.encoding != null) url = url.concat("&encoding=" + data.encoding); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "GET_QDN_RESOURCE_STATUS": url = "/arbitrary/resource/status/" + data.service + "/" + data.name; if (data.identifier != null) url = url.concat("/" + data.identifier); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "GET_QDN_RESOURCE_PROPERTIES": let identifier = (data.identifier != null) ? data.identifier : "default"; url = "/arbitrary/resource/properties/" + data.service + "/" + data.name + "/" + identifier; - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "SEARCH_CHAT_MESSAGES": @@ -227,7 +249,7 @@ window.addEventListener("message", (event) => { if (data.limit != null) url = url.concat("&limit=" + data.limit); if (data.offset != null) url = url.concat("&offset=" + data.offset); if (data.reverse != null) url = url.concat("&reverse=" + new Boolean(data.reverse).toString()); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "LIST_GROUPS": @@ -235,23 +257,23 @@ window.addEventListener("message", (event) => { if (data.limit != null) url = url.concat("&limit=" + data.limit); if (data.offset != null) url = url.concat("&offset=" + data.offset); if (data.reverse != null) url = url.concat("&reverse=" + new Boolean(data.reverse).toString()); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "GET_BALANCE": url = "/addresses/balance/" + data.address; if (data.assetId != null) url = url.concat("&assetId=" + data.assetId); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "GET_AT": url = "/at" + data.atAddress; - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "GET_AT_DATA": url = "/at/" + data.atAddress + "/data"; - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "LIST_ATS": @@ -260,19 +282,18 @@ window.addEventListener("message", (event) => { if (data.limit != null) url = url.concat("&limit=" + data.limit); if (data.offset != null) url = url.concat("&offset=" + data.offset); if (data.reverse != null) url = url.concat("&reverse=" + new Boolean(data.reverse).toString()); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "FETCH_BLOCK": if (data.signature != null) { url = "/blocks/" + data.signature; - } - else if (data.height != null) { + } else if (data.height != null) { url = "/blocks/byheight/" + data.height; } url = url.concat("?"); if (data.includeOnlineSignatures != null) url = url.concat("&includeOnlineSignatures=" + data.includeOnlineSignatures); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "FETCH_BLOCK_RANGE": @@ -280,7 +301,7 @@ window.addEventListener("message", (event) => { if (data.count != null) url = url.concat("&count=" + data.count); if (data.reverse != null) url = url.concat("&reverse=" + data.reverse); if (data.includeOnlineSignatures != null) url = url.concat("&includeOnlineSignatures=" + data.includeOnlineSignatures); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "SEARCH_TRANSACTIONS": @@ -294,14 +315,14 @@ window.addEventListener("message", (event) => { if (data.limit != null) url = url.concat("&limit=" + data.limit); if (data.offset != null) url = url.concat("&offset=" + data.offset); if (data.reverse != null) url = url.concat("&reverse=" + new Boolean(data.reverse).toString()); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; case "GET_PRICE": url = "/crosschain/price/" + data.blockchain + "?"; if (data.maxtrades != null) url = url.concat("&maxtrades=" + data.maxtrades); if (data.inverse != null) url = url.concat("&inverse=" + data.inverse); - response = httpGet(url); + response = httpGetAsyncWithEvent(event, url); break; default: @@ -311,15 +332,6 @@ window.addEventListener("message", (event) => { return; } - if (response == null) { - // Pass to parent (UI), in case they can fulfil this request - event.data.requestedHandler = "UI"; - parent.postMessage(event.data, '*', [event.ports[0]]); - return; - } - - handleResponse(event, response); - }, false);