From b04a615ae7777fc34d981e0b3d2d0eaad24b0130 Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Fri, 8 Feb 2019 15:52:56 +0800 Subject: [PATCH 1/4] Remove tokens when invalid --- src/botPage/common/symbolApi/index.js | 28 ++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/botPage/common/symbolApi/index.js b/src/botPage/common/symbolApi/index.js index ef2f1d1035..6ed3269760 100644 --- a/src/botPage/common/symbolApi/index.js +++ b/src/botPage/common/symbolApi/index.js @@ -1,7 +1,7 @@ import ActiveSymbols from './activeSymbols'; import config from '../../common/const'; import { getObjectValue } from '../../../common/utils/tools'; -import { getTokenList } from '../../../common/utils/storageManager'; +import { getTokenList, removeAllTokens } from '../../../common/utils/storageManager'; const noop = () => {}; @@ -44,7 +44,7 @@ export default class _Symbol { constructor(api) { this.api = api; this.initPromise = new Promise(resolve => { - const getActiveSymbolsPromise = () => { + const getActiveSymbolsLogic = () => { this.api.getActiveSymbolsBrief().then(r => { this.activeSymbols = new ActiveSymbols(r.active_symbols); this.api.getAssetIndex().then(r2 => { @@ -53,17 +53,19 @@ export default class _Symbol { }, noop); }, noop); }; - // Authorize when possible for accurate offered symbols, assetindex - const getAuthorisePromise = () => { - const tokenList = getTokenList(); - if (tokenList.length) { - return this.api.authorize(tokenList[0].token); - } - return new Promise(r => r()); - }; - getAuthorisePromise() - .then(() => getActiveSymbolsPromise(), noop) - .catch(() => getActiveSymbolsPromise(), noop); + // Authorize the WS connection when possible for accurate offered Symbols & AssetIndex + const tokenList = getTokenList(); + if (tokenList.length) { + this.api + .authorize(tokenList[0].token) + .then(getActiveSymbolsLogic()) + .catch(() => { + removeAllTokens(); + getActiveSymbolsLogic(); + }); + } else { + getActiveSymbolsLogic(); + } }); } /* eslint-disable class-methods-use-this */ From 188a44f8a84e022e58b398f7ab4e93d184a4e10d Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Fri, 8 Feb 2019 15:53:44 +0800 Subject: [PATCH 2/4] openHome() instead of open(), as Elev.io pages are sometimes not shared across domains --- src/botPage/view/blockly/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 862b613f58..47ec73cead 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -448,7 +448,7 @@ Blockly.ContextMenu.show = (e, menuOptions, rtl) => { if (window._elev) { menuOptions.some(option => { if (option.text === Blockly.Msg.HELP) { - option.callback = () => window._elev.open(); // eslint-disable-line no-param-reassign, no-underscore-dangle + option.callback = () => window._elev.openHome(); // eslint-disable-line no-param-reassign, no-underscore-dangle return true; } return false; From 11046410dc10e8758a1f32250ea241b0f0de98be Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Fri, 8 Feb 2019 16:08:25 +0800 Subject: [PATCH 3/4] Catch errors, remove invalid token --- src/botPage/view/blockly/blocks/shared.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/botPage/view/blockly/blocks/shared.js b/src/botPage/view/blockly/blocks/shared.js index 753bb8b284..432c9c5fd1 100644 --- a/src/botPage/view/blockly/blocks/shared.js +++ b/src/botPage/view/blockly/blocks/shared.js @@ -3,7 +3,12 @@ import { symbolApi } from '../../shared'; import config from '../../../common/const'; import { generateLiveApiInstance } from '../../../../common/appId'; import { translate } from '../../../../common/i18n'; -import { get as getStorage, set as setStorage, getTokenList } from '../../../../common/utils/storageManager'; +import { + get as getStorage, + set as setStorage, + getTokenList, + removeAllTokens, +} from '../../../../common/utils/storageManager'; let purchaseChoices = [[translate('Click to select'), '']]; @@ -136,7 +141,6 @@ export const dependentFieldMapping = { export const getAvailableDurations = (symbol, selectedContractType) => { const contractsForStore = JSON.parse(getStorage('contractsForStore') || '[]'); - const tokenList = getTokenList(); const defaultDurations = [ [translate('Ticks'), 't'], [translate('Seconds'), 's'], @@ -144,13 +148,20 @@ export const getAvailableDurations = (symbol, selectedContractType) => { [translate('Hours'), 'h'], [translate('Days'), 'd'], ]; + const getContractsForSymbolFromApi = async underlyingSymbol => { // Refactor this when reducing WS connections - let api = generateLiveApiInstance(); + const api = generateLiveApiInstance(); // Try to authorize for accurate contracts response + let tokenList = getTokenList(); if (tokenList.length) { - await api.authorize(tokenList[0].token); + try { + await api.authorize(tokenList[0].token); + } catch (e) { + removeAllTokens(); + tokenList = []; + } } const response = await api.getContractsForSymbol(underlyingSymbol); @@ -176,7 +187,6 @@ export const getAvailableDurations = (symbol, selectedContractType) => { setStorage('contractsForStore', JSON.stringify(contractsForStore)); } api.disconnect(); - api = null; return contractsForSymbol; }; const getDurationsForContract = contractsForSymbol => { From b996958f6ba2641a8344ac70635792c14b4ecea7 Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Fri, 8 Feb 2019 16:26:21 +0800 Subject: [PATCH 4/4] Lift tokenlist --- src/botPage/view/blockly/blocks/shared.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/blocks/shared.js b/src/botPage/view/blockly/blocks/shared.js index 432c9c5fd1..15c2e9ab92 100644 --- a/src/botPage/view/blockly/blocks/shared.js +++ b/src/botPage/view/blockly/blocks/shared.js @@ -141,6 +141,7 @@ export const dependentFieldMapping = { export const getAvailableDurations = (symbol, selectedContractType) => { const contractsForStore = JSON.parse(getStorage('contractsForStore') || '[]'); + let tokenList = getTokenList(); const defaultDurations = [ [translate('Ticks'), 't'], [translate('Seconds'), 's'], @@ -154,7 +155,6 @@ export const getAvailableDurations = (symbol, selectedContractType) => { const api = generateLiveApiInstance(); // Try to authorize for accurate contracts response - let tokenList = getTokenList(); if (tokenList.length) { try { await api.authorize(tokenList[0].token);