@@ -3,8 +3,13 @@ import _ from 'lodash';
33import * as ccxt from 'ccxt' ;
44import { logger } from '../logger' ;
55
6+ type CcxtInstance = {
7+ exchangeName : string ;
8+ api : any ;
9+ } ;
10+
611class ExchangeAPI {
7- exchanges : any [ ] ;
12+ exchanges : CcxtInstance [ ] ;
813 constructor ( ) {
914 this . exchanges = [ ] ;
1015 }
@@ -61,20 +66,28 @@ class ExchangeAPI {
6166 }
6267
6368 /* CCXT API STUFF */
69+ _isExchangeLoaded ( exchange : string ) : boolean {
70+ const exchangeName = exchange . toLowerCase ( ) ;
71+
72+ if ( this . exchanges . find ( ( e ) => e . exchangeName === exchangeName ) ) {
73+ return true ;
74+ }
75+
76+ return false ;
77+ }
6478
6579 loadExchangeAPI ( exchange : string ) : any {
6680 try {
6781 const exchangeName = exchange . toLowerCase ( ) ;
6882
6983 // Check if CCXT API already loaded
70- let exchangeData = this . exchanges . find ( ( e ) => e . exchange === exchangeName ) ;
84+ const exchangeData = this . exchanges . find ( ( e ) => e . exchangeName === exchangeName ) ;
7185
72- // CCTX API load from buffer or add to the buffer
73- if ( ! exchangeData ) {
74- exchangeData = this . initNewExchanges ( exchangeName ) ;
86+ if ( exchangeData ?. api ) {
87+ return exchangeData . api ;
7588 }
7689
77- return exchangeData . api ;
90+ return this . initNewExchanges ( exchangeName ) . api ;
7891 } catch ( e ) {
7992 logger . error ( 'CCXT load API error ' , e ) ;
8093 }
@@ -86,7 +99,9 @@ class ExchangeAPI {
8699 if ( _ . isObject ( ccxt [ exchangeName ] ) ) {
87100 const api = new ccxt [ exchangeName ] ( ) ;
88101
89- this . exchanges . push ( { exchangeName, api } ) ;
102+ if ( ! this . _isExchangeLoaded ( exchange ) ) {
103+ this . exchanges . push ( { exchangeName, api } ) ;
104+ }
90105
91106 return { exchangeName, api } ;
92107 }
0 commit comments