From f2d748d08262955f228e4103771c160516a92f05 Mon Sep 17 00:00:00 2001 From: Sandeep Date: Wed, 21 Sep 2022 17:45:36 +0800 Subject: [PATCH 1/2] unified websocket -- using the same websocket instance from the core packages --- .../src/services/api/__tests__/ticks-service.js | 4 ++-- packages/bot-skeleton/src/services/api/appId.js | 12 ------------ .../src/services/tradeEngine/trade/Balance.js | 3 +-- .../src/services/tradeEngine/trade/index.js | 15 ++++++++++++--- .../src/services/tradeEngine/utils/cliTools.js | 4 ++-- .../src/services/tradeEngine/utils/interpreter.js | 7 ------- packages/bot-web-ui/src/app/app.jsx | 3 ++- 7 files changed, 19 insertions(+), 29 deletions(-) delete mode 100644 packages/bot-skeleton/src/services/api/appId.js diff --git a/packages/bot-skeleton/src/services/api/__tests__/ticks-service.js b/packages/bot-skeleton/src/services/api/__tests__/ticks-service.js index 4fdb8fed1ffa..c7d04207b141 100644 --- a/packages/bot-skeleton/src/services/api/__tests__/ticks-service.js +++ b/packages/bot-skeleton/src/services/api/__tests__/ticks-service.js @@ -1,10 +1,10 @@ /* eslint-disable no-unused-expressions */ -import { generateDerivApiInstance } from '../appId'; import TicksService from '../ticks_service'; +import { WS } from '@deriv/shared'; jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; -const ticksService = new TicksService(generateDerivApiInstance()); +const ticksService = new TicksService(WS.get()); const isTick = t => Number.isInteger(t.epoch) && Number.isFinite(t.quote); diff --git a/packages/bot-skeleton/src/services/api/appId.js b/packages/bot-skeleton/src/services/api/appId.js deleted file mode 100644 index ed7417a9d34d..000000000000 --- a/packages/bot-skeleton/src/services/api/appId.js +++ /dev/null @@ -1,12 +0,0 @@ -import DerivAPIBasic from '@deriv/deriv-api/dist/DerivAPIBasic'; -import { getAppId, getSocketURL, website_name } from '@deriv/shared'; -import { getLanguage } from '@deriv/translations'; - -export const generateDerivApiInstance = () => { - const socket_url = `wss://${getSocketURL()}/websockets/v3?app_id=${getAppId()}&l=${getLanguage()}&brand=${website_name.toLowerCase()}`; - const deriv_socket = new WebSocket(socket_url); - const deriv_api = new DerivAPIBasic({ - connection: deriv_socket, - }); - return deriv_api; -}; diff --git a/packages/bot-skeleton/src/services/tradeEngine/trade/Balance.js b/packages/bot-skeleton/src/services/tradeEngine/trade/Balance.js index 19f3aad85318..641c73473a6e 100644 --- a/packages/bot-skeleton/src/services/tradeEngine/trade/Balance.js +++ b/packages/bot-skeleton/src/services/tradeEngine/trade/Balance.js @@ -14,8 +14,7 @@ export default Engine => } = data; balance_string = getFormattedText(b, currency); - - info({ accountID: this.accountInfo.loginid, balance: balance_string }); + info({ accountID: this.accountInfo?.loginid, balance: balance_string }); } }); } diff --git a/packages/bot-skeleton/src/services/tradeEngine/trade/index.js b/packages/bot-skeleton/src/services/tradeEngine/trade/index.js index 145bfcf67219..404982f22538 100644 --- a/packages/bot-skeleton/src/services/tradeEngine/trade/index.js +++ b/packages/bot-skeleton/src/services/tradeEngine/trade/index.js @@ -130,19 +130,28 @@ export default class TradeEngine extends Balance(Purchase(Sell(OpenContract(Prop }, 1500); } if (data.msg_type === 'authorize') { - this.accountInfo = data; + const { authorize = {} } = data; + this.accountInfo = authorize; this.token = token; // Only subscribe to balance in browser, not for tests. if (document) { - doUntilDone(() => this.api.send({ balance: 1, subscribe: 1 })).then(r => { + doUntilDone(() => this.api.send({ balance: 1 })).then(r => { this.balance = Number(r.balance.balance); resolve(); }); } else { resolve(); } - doUntilDone(() => this.api.send({ transaction: 1, subscribe: 1 })); + if (!globalObserver.getState('transaction_subscription_id')) { + doUntilDone(() => this.api.send({ transaction: 1, subscribe: 1 })) + .then(({ transaction }) => { + globalObserver.setState({ transaction_subscription_id: transaction.id }); + }) + .catch(err => { + this.$scope.observer.emit('Error', err); + }); + } } }); }); diff --git a/packages/bot-skeleton/src/services/tradeEngine/utils/cliTools.js b/packages/bot-skeleton/src/services/tradeEngine/utils/cliTools.js index bac5c53d459d..6c04283ce5f3 100644 --- a/packages/bot-skeleton/src/services/tradeEngine/utils/cliTools.js +++ b/packages/bot-skeleton/src/services/tradeEngine/utils/cliTools.js @@ -1,10 +1,10 @@ import TicksService from '../../api/ticks_service'; import Observer from '../../../utils/observer'; -import { generateDerivApiInstance } from '../../api/appId'; +import { WS } from '@deriv/shared'; export const createScope = () => { const observer = new Observer(); - const api = generateDerivApiInstance(); + const api = WS.get(); const ticksService = new TicksService(api); const stopped = false; return { observer, api, ticksService, stopped }; diff --git a/packages/bot-skeleton/src/services/tradeEngine/utils/interpreter.js b/packages/bot-skeleton/src/services/tradeEngine/utils/interpreter.js index d43cb67f01d0..0cb220e467c0 100644 --- a/packages/bot-skeleton/src/services/tradeEngine/utils/interpreter.js +++ b/packages/bot-skeleton/src/services/tradeEngine/utils/interpreter.js @@ -180,13 +180,6 @@ const Interpreter = () => { } function terminateSession() { - const { connection } = $scope.api; - if (connection.readyState === 0) { - connection.addEventListener('open', () => connection.close()); - } else if (connection.readyState === 1) { - connection.close(); - } - $scope.stopped = true; $scope.is_error_triggered = false; globalObserver.emit('bot.stop'); diff --git a/packages/bot-web-ui/src/app/app.jsx b/packages/bot-web-ui/src/app/app.jsx index 365468c0c6f0..4d02db44f6d3 100644 --- a/packages/bot-web-ui/src/app/app.jsx +++ b/packages/bot-web-ui/src/app/app.jsx @@ -14,7 +14,7 @@ import { Toolbar, NetworkToastPopup, } from 'Components'; -import { LocalStore } from '@deriv/shared'; +import { LocalStore, setWebsocket } from '@deriv/shared'; import { MobxContentProvider } from 'Stores/connect'; import RootStore from 'Stores'; import GTM from 'Utils/gtm'; @@ -31,6 +31,7 @@ const App = ({ passthrough }) => { const { onMount, onUnmount, showDigitalOptionsMaltainvestError } = app; React.useEffect(() => { + setWebsocket(WS); /** * Inject: External Script Hotjar - for DBot only */ From 034366df5ce6a73a6b51d53d6781e512c09092ea Mon Sep 17 00:00:00 2001 From: Sandeep Date: Thu, 22 Sep 2022 12:48:36 +0800 Subject: [PATCH 2/2] added reset transaction_subscription_id on close of instance --- packages/bot-skeleton/src/services/tradeEngine/trade/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/bot-skeleton/src/services/tradeEngine/trade/index.js b/packages/bot-skeleton/src/services/tradeEngine/trade/index.js index 404982f22538..8a0b80abab21 100644 --- a/packages/bot-skeleton/src/services/tradeEngine/trade/index.js +++ b/packages/bot-skeleton/src/services/tradeEngine/trade/index.js @@ -74,6 +74,9 @@ export default class TradeEngine extends Balance(Purchase(Sell(OpenContract(Prop forget_proposal_ids: [], }; this.store = createStore(rootReducer, applyMiddleware(thunk)); + this.api.connection.onclose = () => { + globalObserver.setState({ transaction_subscription_id: null }); + }; } init(...args) {