From e3ef24dc5eb7ba0f361c1f91c9a9c419b3a2b1a8 Mon Sep 17 00:00:00 2001 From: AlphaX-Qortal <67390536+AlphaX-Qortal@users.noreply.github.com> Date: Wed, 26 Feb 2025 09:37:46 +0100 Subject: [PATCH 1/4] Fix parsing use-embed --- plugins/plugins/core/components/qdn-action-constants.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/plugins/core/components/qdn-action-constants.js b/plugins/plugins/core/components/qdn-action-constants.js index 498388a8..626b333a 100644 --- a/plugins/plugins/core/components/qdn-action-constants.js +++ b/plugins/plugins/core/components/qdn-action-constants.js @@ -122,8 +122,9 @@ export const extensionToPointer = (repString) => { const replace36 = replace35.split('.7z').join('.7z</newpointer>') const replace37 = replace36.split('.gz').join('.gz</newpointer>') const replace38 = replace37.split('.bz2').join('.bz2</newpointer>') + const replace39 = replace38.split('service=QCHAT_IMAGE</p>').join('service=QCHAT_IMAGE</newpointer></p>') - return replace38 + return replace39 } export const encodedToChar = (encodedString) => { From 7ca9acaf3a59dfa234805e75d500a6a5be3f9665 Mon Sep 17 00:00:00 2001 From: AlphaX-Qortal <67390536+AlphaX-Qortal@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:20:46 +0100 Subject: [PATCH 2/4] Added qortal requests --- core/src/components/login-view/login-view.js | 8 +- .../components/settings-view/security-view.js | 18 +- core/src/redux/app/actions/app-core.js | 18 +- core/src/redux/app/app-action-types.js | 2 + core/src/redux/app/app-reducer.js | 21 +- .../core/components/qdn-action-types.js | 12 ++ .../plugins/core/qdn/browser/browser.src.js | 179 +++++++++++++++++- plugins/plugins/utils/classes.js | 96 ++++++++++ 8 files changed, 346 insertions(+), 8 deletions(-) diff --git a/core/src/components/login-view/login-view.js b/core/src/components/login-view/login-view.js index 74eb66c2..8a50801f 100644 --- a/core/src/components/login-view/login-view.js +++ b/core/src/components/login-view/login-view.js @@ -20,7 +20,9 @@ import { setSideEffectAction, setTabNotifications, allowQAPPAutoBalance, - removeQAPPAutoBalance + removeQAPPAutoBalance, + allowQAPPAutoTransactions, + removeQAPPAutoTransactions } from '../../redux/app/app-actions' import settings from '../../functional-components/settings-page' import './welcome-page' @@ -56,7 +58,9 @@ window.reduxAction = { allowShowSyncIndicator: allowShowSyncIndicator, removeShowSyncIndicator: removeShowSyncIndicator, allowQAPPAutoBalance: allowQAPPAutoBalance, - removeQAPPAutoBalance: removeQAPPAutoBalance + removeQAPPAutoBalance: removeQAPPAutoBalance, + allowQAPPAutoTransactions: allowQAPPAutoTransactions, + removeQAPPAutoTransactions: removeQAPPAutoTransactions } const animationDuration = 0.7 // Seconds diff --git a/core/src/components/settings-view/security-view.js b/core/src/components/settings-view/security-view.js index 4f8fd51a..c0e529fb 100644 --- a/core/src/components/settings-view/security-view.js +++ b/core/src/components/settings-view/security-view.js @@ -10,7 +10,9 @@ import { removeQAPPAutoLists, setIsOpenDevDialog, allowQAPPAutoBalance, - removeQAPPAutoBalance + removeQAPPAutoBalance, + allowQAPPAutoTransactions, + removeQAPPAutoTransactions } from '../../redux/app/app-actions' import { securityViewStyles } from '../../styles/core-css' import FileSaver from 'file-saver' @@ -87,6 +89,12 @@ class SecurityView extends connect(store)(LitElement) { </label> <mwc-checkbox style="margin-right: -15px;" id="balanceButton" @click=${(e) => this.checkForBalance(e)} ?checked=${store.getState().app.qAPPAutoBalance}></mwc-checkbox> </div> + <div class="checkbox-row"> + <label for="transactionsButton" id="transactionsButtonLabel" style="color: var(--black);"> + Always allow wallet txs to be retrieved automatically + </label> + <mwc-checkbox style="margin-right: -15px;" id="transactionsButton" @click=${(e) => this.checkForTransactions(e)} ?checked=${store.getState().app.qAPPAutoTransactions}></mwc-checkbox> + </div> <div class="checkbox-row"> <label for="authButton" id="authButtonLabel" style="color: var(--black);"> ${get('browserpage.bchange39')} @@ -124,6 +132,14 @@ class SecurityView extends connect(store)(LitElement) { } } + checkForTransactions(e) { + if (e.target.checked) { + store.dispatch(removeQAPPAutoTransactions(false)) + } else { + store.dispatch(allowQAPPAutoTransactions(true)) + } + } + checkForLists(e) { if (e.target.checked) { store.dispatch(removeQAPPAutoLists(false)) diff --git a/core/src/redux/app/actions/app-core.js b/core/src/redux/app/actions/app-core.js index ffa9aebf..e17ab3eb 100644 --- a/core/src/redux/app/actions/app-core.js +++ b/core/src/redux/app/actions/app-core.js @@ -26,7 +26,9 @@ import { ALLOW_SHOW_SYNC_INDICATOR, REMOVE_SHOW_SYNC_INDICATOR, ALLOW_QAPP_AUTO_BALANCE, - REMOVE_QAPP_AUTO_BALANCE + REMOVE_QAPP_AUTO_BALANCE, + ALLOW_QAPP_AUTO_TRANSACTIONS, + REMOVE_QAPP_AUTO_TRANSACTIONS } from '../app-action-types' export const doUpdateBlockInfo = (blockObj) => { @@ -136,6 +138,20 @@ export const removeQAPPAutoBalance = (payload) => { } } +export const allowQAPPAutoTransactions = (payload) => { + return { + type: ALLOW_QAPP_AUTO_TRANSACTIONS, + payload + } +} + +export const removeQAPPAutoTransactions = (payload) => { + return { + type: REMOVE_QAPP_AUTO_TRANSACTIONS, + payload + } +} + export const allowQAPPAutoLists = (payload) => { return { type: ALLOW_QAPP_AUTO_LISTS, diff --git a/core/src/redux/app/app-action-types.js b/core/src/redux/app/app-action-types.js index 9d26188d..aa9eea90 100644 --- a/core/src/redux/app/app-action-types.js +++ b/core/src/redux/app/app-action-types.js @@ -41,3 +41,5 @@ export const ALLOW_SHOW_SYNC_INDICATOR = 'ALLOW_SHOW_SYNC_INDICATOR' export const REMOVE_SHOW_SYNC_INDICATOR = 'REMOVE_SHOW_SYNC_INDICATOR' export const ALLOW_QAPP_AUTO_BALANCE = 'ALLOW_QAPP_AUTO_BALANCE' export const REMOVE_QAPP_AUTO_BALANCE = 'REMOVE_QAPP_AUTO_BALANCE' +export const ALLOW_QAPP_AUTO_TRANSACTIONS = 'ALLOW_QAPP_AUTO_TRANSACTIONS' +export const REMOVE_QAPP_AUTO_TRANSACTIONS = 'REMOVE_QAPP_AUTO_TRANSACTIONS' diff --git a/core/src/redux/app/app-reducer.js b/core/src/redux/app/app-reducer.js index 98ed98db..d323438f 100644 --- a/core/src/redux/app/app-reducer.js +++ b/core/src/redux/app/app-reducer.js @@ -42,7 +42,9 @@ import { ALLOW_SHOW_SYNC_INDICATOR, REMOVE_SHOW_SYNC_INDICATOR, ALLOW_QAPP_AUTO_BALANCE, - REMOVE_QAPP_AUTO_BALANCE + REMOVE_QAPP_AUTO_BALANCE, + ALLOW_QAPP_AUTO_TRANSACTIONS, + REMOVE_QAPP_AUTO_TRANSACTIONS } from './app-action-types' import { initWorkersReducer } from './reducers/init-workers' import { loginReducer } from './reducers/login-reducer' @@ -92,6 +94,7 @@ const INITIAL_STATE = { qAPPFriendsList: loadStateFromLocalStorage('qAPPFriendsList') || false, showSyncIndicator: loadStateFromLocalStorage('showSyncIndicator') || false, qAPPAutoBalance: loadStateFromLocalStorage('qAPPAutoBalance') || false, + qAPPAutoTransactions: loadStateFromLocalStorage('qAPPAutoTransactions') || false, chatLastSeen: [], newTab: null, tabInfo: {}, @@ -270,6 +273,22 @@ export default (state = INITIAL_STATE, action) => { } } + case ALLOW_QAPP_AUTO_TRANSACTIONS: { + saveStateToLocalStorage("qAPPAutoTransactions", true) + return { + ...state, + qAPPAutoTransactions: action.payload + } + } + + case REMOVE_QAPP_AUTO_TRANSACTIONS: { + saveStateToLocalStorage("qAPPAutoTransactions", false) + return { + ...state, + qAPPAutoTransactions: action.payload + } + } + case ALLOW_QAPP_AUTO_LISTS: { saveStateToLocalStorage("qAPPAutoLists", true) return { diff --git a/plugins/plugins/core/components/qdn-action-types.js b/plugins/plugins/core/components/qdn-action-types.js index b0aaf8b5..8128f67b 100644 --- a/plugins/plugins/core/components/qdn-action-types.js +++ b/plugins/plugins/core/components/qdn-action-types.js @@ -1,6 +1,15 @@ // IS_USING_PUBLIC_NODE export const IS_USING_PUBLIC_NODE = 'IS_USING_PUBLIC_NODE' +// GET_ARRR_SYNC_STATUS +export const GET_ARRR_SYNC_STATUS = 'GET_ARRR_SYNC_STATUS' + +// GET_NODE_INFO +export const GET_NODE_INFO = 'GET_NODE_INFO' + +// GET_NODE_STATUS +export const GET_NODE_STATUS = 'GET_NODE_STATUS' + // ADMIN_ACTION export const ADMIN_ACTION = 'ADMIN_ACTION' @@ -123,6 +132,9 @@ export const OPEN_PROFILE = 'OPEN_PROFILE' // GET_USER_WALLET export const GET_USER_WALLET = 'GET_USER_WALLET' +// GET_USER_WALLET_TRANSACTIONS +export const GET_USER_WALLET_TRANSACTIONS = 'GET_USER_WALLET_TRANSACTIONS' + // GET_WALLET_BALANCE export const GET_WALLET_BALANCE = 'GET_WALLET_BALANCE' diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index 60a01fdc..b44bce1f 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -13,7 +13,10 @@ import { processTransactionV2, publishData, requestQueueGetAtAddresses, - tradeBotCreateRequest + tradeBotCreateRequest, + getArrrSyncStatus, + getNodeInfo, + getNodeStatus } from '../../../utils/classes' import {appendBuffer} from '../../../utils/utilities' import {QORT_DECIMALS} from '../../../../../crypto/api/constants' @@ -319,6 +322,21 @@ class WebBrowser extends LitElement { } break + case actions.GET_ARRR_SYNC_STATUS: { + response = await getArrrSyncStatus() + } + break + + case actions.GET_NODE_INFO: { + response = await getNodeInfo() + } + break + + case actions.GET_NODE_STATUS: { + response = await getNodeStatus() + } + break + case actions.ADMIN_ACTION: { let type = data.type let value = data.value @@ -2701,6 +2719,132 @@ class WebBrowser extends LitElement { } break + case actions.GET_USER_WALLET_TRANSACTIONS: { + const requiredFields = ['coin'] + const missingFields = [] + let dataSentBack = {} + let skip = false + let res3 + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field) + } + }) + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(', ') + const tryAgain = get("walletpage.wchange44") + await showErrorAndWait( + "MISSING_FIELDS", + { + id1: missingFieldsString, + id2: tryAgain + } + ) + dataSentBack['error'] = `Missing fields: ${missingFieldsString}` + response = JSON.stringify(dataSentBack) + break + } + if (window.parent.reduxStore.getState().app.qAPPAutoTransactions) { + skip = true + } + if (!skip) { + res3 = await showModalAndWait( + actions.GET_USER_WALLET_TRANSACTIONS + ) + } + if ((res3 && res3.action === 'accept') || skip) { + let coin = data.coin + if (coin === "QORT") { + let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address + try { + this.loader.show() + response = await parentEpml.request('apiCall', { + url: `/transactions/address/${qortAddress}?limit=0&reverse=true` + }) + this.loader.hide() + break + } catch (error) { + this.loader.hide() + let myMsg1 = get("browserpage.bchange21") + let myMsg2 = get("walletpage.wchange44") + await showErrorAndWait("ACTION_FAILED", {id1: myMsg1, id2: myMsg2}) + const data = {} + data['error'] = error.message ? error.message : get("browserpage.bchange21") + response = JSON.stringify(data) + } + } else { + let _url = `` + let _body = null + switch (coin) { + case 'BTC': + _url = `/crosschain/btc/wallettransactions?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.btcWallet.derivedMasterPublicKey + break + case 'LTC': + _url = `/crosschain/ltc/wallettransactions?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.ltcWallet.derivedMasterPublicKey + break + case 'DOGE': + _url = `/crosschain/doge/wallettransactions?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.dogeWallet.derivedMasterPublicKey + break + case 'DGB': + _url = `/crosschain/dgb/wallettransactions?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.dgbWallet.derivedMasterPublicKey + break + case 'RVN': + _url = `/crosschain/rvn/wallettransactions?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey + break + case 'ARRR': + _url = `/crosschain/arrr/wallettransactions?apiKey=${this.getApiKey()}` + _body = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.seed58 + break + default: + break + } + try { + this.loader.show() + const res = await parentEpml.request('apiCall', { + url: _url, + method: 'POST', + body: _body + }) + if (!res.ok) { + this.loader.hide() + let myMsg1 = get("browserpage.bchange21") + let myMsg2 = get("walletpage.wchange44") + await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) + const data = {} + data['error'] = get("browserpage.bchange21") + response = JSON.stringify(data) + break + } else { + this.loader.hide() + response = res + break + } + } catch (error) { + this.loader.hide() + let myMsg1 = get("browserpage.bchange21") + let myMsg2 = get("walletpage.wchange44") + await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) + const data = {} + data['error'] = error.message ? error.message : get("browserpage.bchange21") + response = JSON.stringify(data) + break + } + } + } else if (res3.action === 'reject') { + let myMsg1 = get("transactions.declined") + let myMsg2 = get("walletpage.wchange44") + await showErrorAndWait("DECLINED_REQUEST", { id1: myMsg1, id2: myMsg2 }) + response = '{"error": "User declined request"}' + break + } + } + break + case actions.GET_WALLET_BALANCE: { const requiredFields = ['coin'] const missingFields = [] @@ -5226,7 +5370,6 @@ async function showModalAndWait(type, data) { ${type === actions.GET_PROFILE_DATA ? ` <div class="modal-subcontainer"> <p class="modal-paragraph">${get("browserpage.bchange49")}: <span style="font-weight: bold"> ${data.property}</span></p> - </div> ` : ''} @@ -5294,6 +5437,18 @@ async function showModalAndWait(type, data) { <p class="modal-paragraph">${data.text3}</p> <p class="modal-paragraph">${get("walletpage.wchange36")}: <span>${data.fee}</span></p> ` : ''} + + ${type === actions.GET_USER_WALLET_TRANSACTIONS ? ` + <div class="modal-subcontainer"> + <p class="modal-paragraph">Do you give this application permission to retrieve your wallet transactions?</p> + <div class="checkbox-row"> + <label for="transactionsButton" id="transactionsButtonLabel" style="color: var(--black);"> + Always allow wallet txs to be retrieved automatically + </label> + <mwc-checkbox style="margin-right: -15px;" id="transactionsButton" ?checked=${window.parent.reduxStore.getState().app.qAPPAutoTransactions}></mwc-checkbox> + </div> + </div> + ` : ''} </div> <div class="modal-buttons"> <button id="cancel-button">${get("browserpage.bchange27")}</button> @@ -5365,7 +5520,7 @@ async function showModalAndWait(type, data) { }) } - const checkbox1 = modal.querySelector('#abalanceButton') + const checkbox1 = modal.querySelector('#balanceButton') if (checkbox1) { checkbox1.addEventListener('click', (e) => { if (e.target.checked) { @@ -5394,6 +5549,24 @@ async function showModalAndWait(type, data) { }) } + const labelButton3 = modal.querySelector('#transactionsButtonLabel') + if (labelButton3) { + labelButton1.addEventListener('click', () => { + this.shadowRoot.getElementById('transactionsButton').click() + }) + } + + const checkbox3 = modal.querySelector('#transactionsButton') + if (checkbox3) { + checkbox1.addEventListener('click', (e) => { + if (e.target.checked) { + window.parent.reduxStore.dispatch(window.parent.reduxAction.removeQAPPAutoTransacions(false)) + return + } + window.parent.reduxStore.dispatch(window.parent.reduxAction.allowQAPPAutoTransacions(true)) + }) + } + const labelButtonFriendsList = modal.querySelector('#friendsListLabel') if (labelButtonFriendsList) { labelButtonFriendsList.addEventListener('click', () => { diff --git a/plugins/plugins/utils/classes.js b/plugins/plugins/utils/classes.js index 751c7194..4a2dcf1d 100644 --- a/plugins/plugins/utils/classes.js +++ b/plugins/plugins/utils/classes.js @@ -1552,3 +1552,99 @@ export const cancelTradeOfferTradeBot = async (body, keyPair) => { throw new Error("Failed to Cancel Sell Order. Try again!") } } + +export const getArrrSyncStatus = async () => { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = `${myNode.protocol}://${myNode.domain}:${myNode.port}` + const myApiKey = myNode.apiKey + const url = `${nodeUrl}/crosschain/arrr/syncstatus?apiKey=${myApiKey}` + const arrrSeed = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.seed58 + + try { + const response = await fetch(url, { + method: "POST", + headers: { + Accept: "*/*" + }, + body: arrrSeed + }) + + let res + + try { + res = await response.clone().json() + } catch (e) { + res = await response.text() + } + + return res + } catch (error) { + console.error(error.message || "Error in retrieving arrr sync status") + } +} + +export const getNodeInfo = async () => { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = `${myNode.protocol}://${myNode.domain}:${myNode.port}` + const url = `${nodeUrl}/admin/info` + + try { + const response = await fetch(url, { + method: "GET", + headers: { + Accept: "*/*" + } + }) + + if (!response.ok) console.error("Failed to retrieve node info") + + let res + + try { + res = await response.clone().json() + } catch (e) { + res = await response.text() + } + + if (res.error && res.message) { + console.error(res.message) + } + + return res + } catch (error) { + console.error(error.message || "Error in retrieving node info") + } +} + + export const getNodeStatus = async () => { + const myNode = window.parent.reduxStore.getState().app.nodeConfig.knownNodes[window.parent.reduxStore.getState().app.nodeConfig.node] + const nodeUrl = `${myNode.protocol}://${myNode.domain}:${myNode.port}` + const url = `${nodeUrl}/admin/status` + + try { + const response = await fetch(url, { + method: "GET", + headers: { + Accept: "*/*" + } + }) + + if (!response.ok) console.error("Failed to retrieve node status") + + let res + + try { + res = await response.clone().json() + } catch (e) { + res = await response.text() + } + + if (res.error && res.message) { + console.error(res.message) + } + + return res + } catch (error) { + console.error(error.message || "Error in retrieving node status") + } +} From 9dbc4b085be609b487bded1744146a6338d8f4a0 Mon Sep 17 00:00:00 2001 From: AlphaX <olaf.wasilewski@gmx.de> Date: Tue, 18 Mar 2025 19:19:00 +0100 Subject: [PATCH 3/4] Fix typo --- plugins/plugins/core/qdn/browser/browser.src.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index b44bce1f..eaaa4741 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -5551,14 +5551,14 @@ async function showModalAndWait(type, data) { const labelButton3 = modal.querySelector('#transactionsButtonLabel') if (labelButton3) { - labelButton1.addEventListener('click', () => { + labelButton3.addEventListener('click', () => { this.shadowRoot.getElementById('transactionsButton').click() }) } const checkbox3 = modal.querySelector('#transactionsButton') if (checkbox3) { - checkbox1.addEventListener('click', (e) => { + checkbox3.addEventListener('click', (e) => { if (e.target.checked) { window.parent.reduxStore.dispatch(window.parent.reduxAction.removeQAPPAutoTransacions(false)) return From e4eede5087078d6fb80c08bef51ef037149849b5 Mon Sep 17 00:00:00 2001 From: AlphaX-Qortal <67390536+AlphaX-Qortal@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:19:54 +0100 Subject: [PATCH 4/4] Fix response --- .../plugins/core/qdn/browser/browser.src.js | 85 +++++++------------ 1 file changed, 31 insertions(+), 54 deletions(-) diff --git a/plugins/plugins/core/qdn/browser/browser.src.js b/plugins/plugins/core/qdn/browser/browser.src.js index eaaa4741..0cb5309c 100644 --- a/plugins/plugins/core/qdn/browser/browser.src.js +++ b/plugins/plugins/core/qdn/browser/browser.src.js @@ -2703,6 +2703,7 @@ class WebBrowser extends LitElement { break case 'ARRR': userWallet['address'] = arrrAddress + userWallet['publicKey'] = window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.seed58 break default: break @@ -2723,8 +2724,8 @@ class WebBrowser extends LitElement { const requiredFields = ['coin'] const missingFields = [] let dataSentBack = {} - let skip = false - let res3 + let skipWalletTransactions = false + let resSkipWalletTransactions requiredFields.forEach((field) => { if (!data[field]) { missingFields.push(field) @@ -2745,32 +2746,30 @@ class WebBrowser extends LitElement { break } if (window.parent.reduxStore.getState().app.qAPPAutoTransactions) { - skip = true + skipWalletTransactions = true } - if (!skip) { - res3 = await showModalAndWait( + if (!skipWalletTransactions) { + resSkipWalletTransactions = await showModalAndWait( actions.GET_USER_WALLET_TRANSACTIONS ) } - if ((res3 && res3.action === 'accept') || skip) { + if ((resSkipWalletTransactions && resSkipWalletTransactions.action === 'accept') || skipWalletTransactions) { let coin = data.coin if (coin === "QORT") { let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address try { - this.loader.show() response = await parentEpml.request('apiCall', { url: `/transactions/address/${qortAddress}?limit=0&reverse=true` }) - this.loader.hide() break } catch (error) { - this.loader.hide() let myMsg1 = get("browserpage.bchange21") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", {id1: myMsg1, id2: myMsg2}) const data = {} data['error'] = error.message ? error.message : get("browserpage.bchange21") response = JSON.stringify(data) + break } } else { let _url = `` @@ -2804,28 +2803,13 @@ class WebBrowser extends LitElement { break } try { - this.loader.show() - const res = await parentEpml.request('apiCall', { + response = await parentEpml.request('apiCall', { url: _url, method: 'POST', body: _body }) - if (!res.ok) { - this.loader.hide() - let myMsg1 = get("browserpage.bchange21") - let myMsg2 = get("walletpage.wchange44") - await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) - const data = {} - data['error'] = get("browserpage.bchange21") - response = JSON.stringify(data) - break - } else { - this.loader.hide() - response = res - break - } + break } catch (error) { - this.loader.hide() let myMsg1 = get("browserpage.bchange21") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) @@ -2835,7 +2819,7 @@ class WebBrowser extends LitElement { break } } - } else if (res3.action === 'reject') { + } else if (resSkipWalletTransactions.action === 'reject') { let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("DECLINED_REQUEST", { id1: myMsg1, id2: myMsg2 }) @@ -2849,8 +2833,8 @@ class WebBrowser extends LitElement { const requiredFields = ['coin'] const missingFields = [] let dataSentBack = {} - let skip = false - let res3 + let skipWalletBalance = false + let resSkipWalletBalance requiredFields.forEach((field) => { if (!data[field]) { missingFields.push(field) @@ -2875,32 +2859,30 @@ class WebBrowser extends LitElement { // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` if (window.parent.reduxStore.getState().app.qAPPAutoBalance) { - skip = true + skipWalletBalance = true } - if (!skip) { - res3 = await showModalAndWait( + if (!skipWalletBalance) { + resSkipWalletBalance = await showModalAndWait( actions.GET_WALLET_BALANCE ) } - if ((res3 && res3.action === 'accept') || skip) { + if ((resSkipWalletBalance && resSkipWalletBalance.action === 'accept') || skipWalletBalance) { let coin = data.coin if (coin === "QORT") { let qortAddress = window.parent.reduxStore.getState().app.selectedAddress.address try { - this.loader.show() response = await parentEpml.request('apiCall', { url: `/addresses/balance/${qortAddress}?apiKey=${this.getApiKey()}` }) - this.loader.hide() break } catch (error) { - this.loader.hide() let myMsg1 = get("browserpage.bchange21") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", {id1: myMsg1, id2: myMsg2}) const data = {} data['error'] = error.message ? error.message : get("browserpage.bchange21") response = JSON.stringify(data) + break } } else { let _url = `` @@ -2934,14 +2916,12 @@ class WebBrowser extends LitElement { break } try { - this.loader.show() const res = await parentEpml.request('apiCall', { url: _url, method: 'POST', body: _body }) if (isNaN(Number(res))) { - this.loader.hide() let myMsg1 = get("browserpage.bchange21") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) @@ -2950,12 +2930,10 @@ class WebBrowser extends LitElement { response = JSON.stringify(data) break } else { - this.loader.hide() response = (Number(res) / 1e8).toFixed(8) break } } catch (error) { - this.loader.hide() let myMsg1 = get("browserpage.bchange21") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) @@ -2965,7 +2943,7 @@ class WebBrowser extends LitElement { break } } - } else if (res3.action === 'reject') { + } else if (resSkipWalletBalance.action === 'reject') { let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("DECLINED_REQUEST", { id1: myMsg1, id2: myMsg2 }) @@ -2978,7 +2956,9 @@ class WebBrowser extends LitElement { case actions.GET_USER_WALLET_INFO: { const requiredFields = ['coin'] const missingFields = [] + let skipUserWalletInfo = false let dataSentBack = {} + let resSkipUserWalletInfo requiredFields.forEach((field) => { if (!data[field]) { missingFields.push(field) @@ -2998,16 +2978,20 @@ class WebBrowser extends LitElement { response = JSON.stringify(dataSentBack) break } - const userWallet = await showModalAndWait( - actions.GET_USER_WALLET - ) - if (userWallet.action === 'accept') { + if (window.parent.reduxStore.getState().app.qAPPAutoAuth) { + skipUserWalletInfo = true + } + if (!skipUserWalletInfo) { + resSkipUserWalletInfo = await showModalAndWait( + actions.GET_USER_WALLET + ) + } + if ((resSkipUserWalletInfo && resSkipUserWalletInfo.action === 'accept') || skipUserWalletInfo) { let coin = data.coin let walletKeys = this.getUserWallet(coin) let _url = `/crosschain/` + data.coin.toLowerCase() + `/addressinfos?apiKey=${this.getApiKey()}` let _body = { xpub58: walletKeys['publicKey'] } try { - this.loader.show() const bodyToString = JSON.stringify(_body) const res = await parentEpml.request('apiCall', { url: _url, @@ -3020,7 +3004,6 @@ class WebBrowser extends LitElement { }) response = JSON.stringify(res) } catch (error) { - this.loader.hide() let myMsg1 = get("browserpage.bchange21") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) @@ -3028,10 +3011,8 @@ class WebBrowser extends LitElement { data['error'] = error.message ? error.message : get("browserpage.bchange21") response = JSON.stringify(data) return - } finally { - this.loader.hide() } - } else if (userWallet.action === 'reject') { + } else if (resSkipUserWalletInfo.action === 'reject') { let myMsg1 = get("transactions.declined") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("DECLINED_REQUEST", { id1: myMsg1, id2: myMsg2 }) @@ -3065,7 +3046,6 @@ class WebBrowser extends LitElement { } let _url = `/crosschain/` + data.coin.toLowerCase() + `/serverinfos` try { - this.loader.show() const res = await parentEpml.request('apiCall', { url: _url, method: 'GET', @@ -3075,7 +3055,6 @@ class WebBrowser extends LitElement { }) response = JSON.stringify(res.servers) } catch (error) { - this.loader.hide() let myMsg1 = get("modals.mpchange55") let myMsg2 = get("walletpage.wchange44") await showErrorAndWait("ACTION_FAILED", { id1: myMsg1, id2: myMsg2 }) @@ -3083,8 +3062,6 @@ class WebBrowser extends LitElement { data['error'] = error.message ? error.message : get("modals.mpchange55") response = JSON.stringify(data) return - } finally { - this.loader.hide() } } break