{"version":3,"sources":["webpack:///./src/store/store.ts","webpack:///./src/services/log.ts","webpack:///./src/store/actions.ts","webpack:///./src/services/swap-service.ts","webpack:///./src/store/state.ts","webpack:///./src/services/toast-service.ts","webpack:///./src/services/token-service.ts"],"names":["store","instance","get","log","getLogger","login","state","username","dswapChainId","newState","account","name","loggedIn","copiedInitialsTate","logout","token","balances","scotTokens","pendingUnstakes","notifications","nfts","marketMakerUser","creationBlock","creationTimestamp","enabledMarkets","isEnabled","isOnCooldown","isPremium","isPremiumFeePaid","lastTickBlock","lastTickTimestamp","markets","timeLimit","_id","setAccount","Object","assign","async","getCurrentFirebaseUser","doc","chainId","Hive","firebaseHive","apps","find","x","firestore","collection","Steem","firebaseSteem","exists","firebaseUser","data","filter","notification","read","e","console","error","getMarketMakerUser","environment","isDebug","debugAccount","currentChainId","mmUser","creationTimestamp_string","unix","format","lastTickTimestamp_string","timeLimitTime","duration","timeLimit_string","days","hours","minutes","registerAction","boolean","loading","Boolean","tokens","http","SwapService","i18n","toast","hes","user","configure","config","useStandardConfiguration","withBaseUrl","FIREBASE_API_HE","this","storeSubscription","subscribe","model","response","Id","toastFailure","overrideOptions","timeout","message","tr","ns","initialState","$action","params","buyBook","sellBook","tradeHistory","conversionHistory","buyTotal","sellTotal","pendingWithdrawals","nft","instances","nftSellBook","tokensLoaded","hivePriceUsd","hivePriceUsdDate","activePageId","ToastService","defaultOptions","class","position","theme","layout","title","titleColor","messageColor","iconColor","backgroundColor","close","closeOnEscape","closeOnClick","overlay","transitionIn","transitionOut","progressBar","settings","options","destroy","show","mergeToastSettings","toastRef","closedBy","hide","info","callback","progress","success","warning","question","toastMessageIsRequired","length","Error","ToastMessage","TokenService","includeMetrics","chain","symbols","swapEnabledTokens","dTokens","enrichTokensWithMetrics","addEnabledCryptoTokens","cryptoTokens","swapEnabledCrypto","sort","reverse","c","swapTokenSymbol","symbol","cryptoToken","replace","isCrypto","unshift","metrics","m","marketCap","lastPrice","parseFloat","circulatingSupply","Date","now","volumeExpiration","volume","prices","hive","usd","lastPriceUsd","precision","userBalances","t","balance","userBalance","stake","getUserBalances","includeBalance","dToken","retrieveSingleToken","getUserBalanceOfToken","tokenRes","getDSwapTokens","map","enrichTokensWithUserBalances","allTokens","mmTokens","disabledTokens","includes","push","disabledTokens_SE"],"mappings":"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","file":"app~3e511cab.a74848cf17c7a237b773.chunk.js","sourcesContent":["import { Container } from 'aurelia-framework';\r\nimport { Store } from 'aurelia-store';\r\nimport { first } from 'rxjs/operators';\r\n\r\nconst store: Store = Container.instance.get(Store) as Store;\r\n\r\nexport async function getStateOnce(): Promise {\r\n // eslint-disable-next-line no-async-promise-executor\r\n return new Promise(async (resolve, reject) => {\r\n store.state.pipe(first()).subscribe((state: IState) => resolve(state), (e) => reject(e));\r\n });\r\n}\r\n\r\nexport const getCurrentState = () => (store as any)._state.getValue() as IState;\r\n\r\nexport default store;\r\n","import { LogManager } from 'aurelia-framework';\r\n\r\nexport const log = LogManager.getLogger('dswap');\r\n","import { Container } from 'aurelia-framework';\r\n/* eslint-disable no-undef */\r\nimport { initialState } from './state';\r\nimport store from './store';\r\n\r\nimport firebase from 'firebase/app';\r\nimport { log } from 'services/log';\r\n\r\nimport moment from 'moment';\r\nimport { loadUserBalances } from 'common/hive-engine-api';\r\nimport { dispatchify } from 'aurelia-store';\r\nimport { getUser } from 'common/market-maker-api';\r\nimport { environment } from 'environment';\r\nimport { Chain } from 'common/enums';\r\nimport { firebaseHiveAppName, firebaseSteemAppName } from 'common/constants';\r\nimport { getChainByState } from '../common/functions';\r\n\r\nexport function loading(state: IState, boolean: boolean) {\r\n const newState = { ...state };\r\n\r\n newState.loading = Boolean(boolean);\r\n\r\n return newState;\r\n}\r\n\r\nexport function login(state: IState, username: string, dswapChainId: number): IState {\r\n const newState = { ...state };\r\n if (newState?.account) {\r\n newState.account.name = username;\r\n newState.account.dswapChainId = dswapChainId;\r\n\r\n newState.loggedIn = true;\r\n } else {\r\n const copiedInitialsTate = { ...initialState };\r\n\r\n newState.account = copiedInitialsTate.account;\r\n newState.account.name = username;\r\n newState.account.dswapChainId = dswapChainId;\r\n newState.loggedIn = true;\r\n }\r\n\r\n return newState;\r\n}\r\n\r\nexport function logout(state: IState): IState {\r\n const newState = { ...state };\r\n\r\n newState.account = {\r\n name: '',\r\n token: {},\r\n account: {},\r\n balances: [],\r\n scotTokens: [],\r\n pendingUnstakes: [],\r\n notifications: [],\r\n nfts: [],\r\n dswapChainId: 0\r\n };\r\n\r\n newState.loggedIn = false;\r\n newState.marketMakerUser = {\r\n account: '',\r\n creationBlock: 0,\r\n creationTimestamp: 0,\r\n enabledMarkets: 0,\r\n isEnabled: false,\r\n isOnCooldown: false,\r\n isPremium: false,\r\n isPremiumFeePaid: false,\r\n lastTickBlock: 0,\r\n lastTickTimestamp: 0,\r\n markets: 0,\r\n timeLimit: 0,\r\n _id: 0 \r\n };\r\n\r\n return newState;\r\n}\r\n\r\nexport function setAccount(state: IState, account: Partial): IState {\r\n const newState = { ...state }; \r\n if (newState?.account) {\r\n newState.account = Object.assign(newState.account, account);\r\n }\r\n\r\n return newState;\r\n}\r\n\r\nexport function setTokens(state: IState, tokens: any[]): IState {\r\n const newState = { ...state };\r\n\r\n newState.tokens = tokens;\r\n\r\n return newState;\r\n}\r\n\r\nexport async function getCurrentFirebaseUser(state: IState): Promise { \r\n const newState = { ...state };\r\n\r\n if (!newState.loggedIn) {\r\n return newState;\r\n }\r\n\r\n try {\r\n let doc: any;\r\n let chainId = newState.account.dswapChainId;\r\n if (chainId == Chain.Hive) {\r\n let firebaseHive = firebase.apps.find(x => x.name === firebaseHiveAppName);\r\n doc = await firebaseHive\r\n .firestore()\r\n .collection('users')\r\n .doc(newState.account.name)\r\n .get();\r\n } else if (chainId === Chain.Steem) {\r\n let firebaseSteem = firebase.apps.find(x => x.name === firebaseSteemAppName);\r\n doc = await firebaseSteem\r\n .firestore()\r\n .collection('users')\r\n .doc(newState.account.name)\r\n .get();\r\n }\r\n\r\n if (doc.exists) {\r\n newState.firebaseUser = doc.data();\r\n\r\n if (newState?.firebaseUser?.notifications) {\r\n newState.firebaseUser.notifications = newState.firebaseUser.notifications.filter(\r\n notification => !notification.read,\r\n );\r\n }\r\n }\r\n } catch (e) {\r\n console.log('error firebase user');\r\n log.error(e);\r\n }\r\n\r\n return newState;\r\n}\r\n\r\nexport async function getMarketMakerUser(state: IState): Promise {\r\n const newState = { ...state };\r\n\r\n if (!newState.loggedIn) {\r\n return newState;\r\n }\r\n\r\n try {\r\n let account = environment.isDebug && environment.debugAccount ? environment.debugAccount : newState.account.name;\r\n let currentChainId = await getChainByState(newState);\r\n\r\n let mmUser = await getUser(account, currentChainId);\r\n\r\n if (mmUser) {\r\n mmUser.creationTimestamp_string = moment.unix(mmUser.creationTimestamp / 1000).format('YYYY-MM-DD HH:mm:ss');\r\n mmUser.lastTickTimestamp_string = moment.unix(mmUser.lastTickTimestamp / 1000).format('YYYY-MM-DD HH:mm:ss');\r\n\r\n let timeLimitTime = moment.duration(mmUser.timeLimit);\r\n mmUser.timeLimit_string = timeLimitTime.days() + \" days \" + timeLimitTime.hours() + \" hours \" + timeLimitTime.minutes() + \" minutes\";\r\n }\r\n newState.marketMakerUser = mmUser;\r\n } catch (e) {\r\n log.error(e);\r\n }\r\n\r\n return newState;\r\n}\r\n\r\nexport function resetInstance(state: IState): IState {\r\n const newState = { ...state };\r\n\r\n newState.instance = null;\r\n\r\n return newState;\r\n}\r\n\r\nstore.registerAction('loading', loading);\r\nstore.registerAction('login', login);\r\nstore.registerAction('logout', logout);\r\nstore.registerAction('setAccount', setAccount);\r\nstore.registerAction('setTokens', setTokens);\r\nstore.registerAction('getCurrentFirebaseUser', getCurrentFirebaseUser);\r\nstore.registerAction('getMarketMakerUser', getMarketMakerUser);\r\nstore.registerAction('resetInstance', resetInstance);\r\n","import { Subscription } from 'rxjs';\r\nimport { lazy, autoinject } from 'aurelia-framework';\r\nimport { HttpClient, json } from 'aurelia-fetch-client';\r\nimport { environment } from 'environment';\r\nimport firebase from 'firebase/app';\r\nimport { ToastMessage, ToastService } from './toast-service';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { Store } from 'aurelia-store';\r\nimport { loadCoins, loadTokenMetrics, loadUserBalances, loadTokens } from 'common/hive-engine-api';\r\nimport { HiveEngineService } from './hive-engine-service';\r\nimport { getPrices, usdFormat } from 'common/functions';\r\nimport { Chain } from '../common/enums';\r\nimport { loadUserBalancesSE, loadTokensSE, loadTokenMetricsSE } from '../common/steem-engine-api';\r\nimport { calculateSwapInput, calculateSwapOutput, swapRequest } from '../common/dswap-api';\r\n\r\nconst http = new HttpClient();\r\n\r\n@autoinject()\r\nexport class SwapService {\r\n public state: IState;\r\n\r\n public user = {\r\n name: '',\r\n account: {}\r\n };\r\n\r\n public storeSubscription: Subscription;\r\n\r\n constructor(private i18n: I18N,\r\n private store: Store,\r\n private toast: ToastService,\r\n private hes: HiveEngineService) {\r\n http.configure(config => {\r\n config\r\n .useStandardConfiguration()\r\n .withBaseUrl(environment.FIREBASE_API_HE)\r\n });\r\n\r\n this.storeSubscription = this.store.state.subscribe(state => {\r\n if (state) {\r\n this.state = state;\r\n\r\n this.user = state.account as any;\r\n }\r\n });\r\n }\r\n\r\n async SwapRequest(model: ISwapRequestModel) {\r\n //let toastWait = new ToastMessage();\r\n //toastWait.message = this.i18n.tr('swapRequestInProgress', {\r\n // ns: 'notifications'\r\n //});\r\n //toastWait.overrideOptions.timeout = 2000;\r\n //this.toast.warning(toastWait);\r\n\r\n let response = await swapRequest(model);\r\n console.log(response);\r\n if (!response || !response.Id) {\r\n let toastFailure = new ToastMessage();\r\n toastFailure.overrideOptions.timeout = 2000;\r\n toastFailure.message = this.i18n.tr('swapRequestQueueFailed', {\r\n ns: 'errors'\r\n });\r\n\r\n this.toast.error(toastFailure);\r\n } else { \r\n //let toastSuccess = new ToastMessage();\r\n\r\n //toastSuccess.message = this.i18n.tr('swapRequestInProgress', {\r\n // ns: 'notifications'\r\n //});\r\n\r\n //this.toast.success(toastSuccess);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n async CalculateSwapOutput(model: ISwapCalcValuesModel) {\r\n let response = await calculateSwapOutput(model);\r\n if (!response) {\r\n let toastFailure = new ToastMessage();\r\n toastFailure.overrideOptions.timeout = 2000;\r\n toastFailure.message = this.i18n.tr('calculateSwapOutputFailed', {\r\n ns: 'errors'\r\n });\r\n\r\n this.toast.error(toastFailure);\r\n } \r\n\r\n return response;\r\n }\r\n\r\n async CalculateSwapInput(model: ISwapCalcValuesModel) {\r\n let response = await calculateSwapInput(model);\r\n if (!response) {\r\n let toastFailure = new ToastMessage();\r\n toastFailure.overrideOptions.timeout = 2000;\r\n toastFailure.message = this.i18n.tr('calculateSwapInputFailed', {\r\n ns: 'errors'\r\n });\r\n\r\n this.toast.error(toastFailure);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n}\r\n","import { DefaultChainId } from \"common/constants\";\r\n\r\nexport const initialState: IState = {\r\n $action: {\r\n name: '',\r\n params: {}\r\n },\r\n account: {\r\n name: '',\r\n token: {},\r\n account: {},\r\n balances: [],\r\n scotTokens: [],\r\n pendingUnstakes: [],\r\n notifications: [],\r\n nfts: [],\r\n dswapChainId: 0\r\n },\r\n firebaseUser: {},\r\n marketMakerUser: {\r\n account: '',\r\n creationBlock: 0,\r\n creationTimestamp: 0,\r\n enabledMarkets: 0,\r\n isEnabled: false,\r\n isOnCooldown: false,\r\n isPremium: false,\r\n isPremiumFeePaid: false,\r\n lastTickBlock: 0,\r\n lastTickTimestamp: 0,\r\n markets: 0,\r\n timeLimit: 0,\r\n _id: 0\r\n },\r\n loggedIn: false,\r\n loading: false,\r\n tokens: [],\r\n buyBook: [],\r\n sellBook: [],\r\n tradeHistory: [],\r\n conversionHistory: [],\r\n buyTotal: 0,\r\n sellTotal: 0,\r\n pendingWithdrawals: [],\r\n nft: null,\r\n nfts: [],\r\n instance: null,\r\n instances: [],\r\n nftSellBook: [],\r\n tokensLoaded: false,\r\n hivePriceUsd: '',\r\n hivePriceUsdDate: null,\r\n activePageId: 'home',\r\n dswapChainId: DefaultChainId\r\n};\r\n","import { autoinject } from 'aurelia-dependency-injection';\r\nimport izitoast, { IziToastSettings, IziToastProgress } from 'izitoast';\r\n\r\n@autoinject()\r\nexport class ToastService implements Toast {\r\n\r\n private defaultOptions: ToastOptions = {\r\n class: 'se-toast',\r\n position: 'bottomCenter',\r\n theme: 'light',\r\n layout: 1,\r\n title: '',\r\n titleColor: '#FFFFFF',\r\n messageColor: '#FFFFFF',\r\n iconColor: '#FFFFFF',\r\n backgroundColor: '#09A47A',\r\n close: true,\r\n closeOnEscape: true,\r\n closeOnClick: true,\r\n timeout: 3000,\r\n overlay: false,\r\n transitionIn: 'fadeInUp',\r\n transitionOut: 'fadeOutDown',\r\n progressBar: true\r\n };\r\n\r\n constructor() {\r\n izitoast.settings(this.defaultOptions);\r\n }\r\n\r\n setDefaultOptions(options: ToastOptions): void {\r\n this.defaultOptions = { ...this.defaultOptions, ...options };\r\n izitoast.settings(this.defaultOptions);\r\n }\r\n\r\n getDefaultOptions(): ToastOptions {\r\n return this.defaultOptions;\r\n }\r\n\r\n destroyAllToasts(): void {\r\n izitoast.destroy();\r\n }\r\n\r\n show(toast: ToastMessage): boolean | void {\r\n return izitoast.show(this.mergeToastSettings(toast));\r\n }\r\n\r\n hide(toastRef: string | HTMLDivElement, toast?: ToastMessage, closedBy?: string): void {\r\n izitoast.hide(this.mergeToastSettings(toast, false), toastRef, closedBy);\r\n }\r\n\r\n public info(toast: ToastMessage): void {\r\n izitoast.info(this.mergeToastSettings(toast));\r\n }\r\n\r\n progress(toastRef: HTMLDivElement, toast?: ToastMessage, callback?: () => void): ToastProgress {\r\n return izitoast.progress(this.mergeToastSettings(toast, false), toastRef, callback);\r\n }\r\n\r\n success(toast: ToastMessage): void {\r\n izitoast.success(this.mergeToastSettings(toast));\r\n }\r\n\r\n warning(toast: ToastMessage): void {\r\n izitoast.warning(this.mergeToastSettings(toast));\r\n }\r\n\r\n error(toast: ToastMessage): void {\r\n toast.overrideOptions.timeout = toast.overrideOptions.timeout || false;\r\n toast.overrideOptions.layout = toast.overrideOptions.layout || 2;\r\n izitoast.error(this.mergeToastSettings(toast));\r\n }\r\n\r\n question(toast: ToastMessage): void {\r\n izitoast.question(this.mergeToastSettings(toast));\r\n }\r\n\r\n private mergeToastSettings(toast: ToastMessage, toastMessageIsRequired = false): IziToastSettings {\r\n if (toastMessageIsRequired && (!toast || !toast.message || !toast.message.length)) {\r\n throw new Error('Toast message cannot be empty if \"toastMessageIsRequired\" is true!');\r\n }\r\n return toast ? { ...toast.overrideOptions, ...{ message: toast.message || '', title: toast.title || '' } } : {};\r\n }\r\n}\r\n\r\nexport type Omit = Pick>;\r\n\r\nexport interface ToastOptions extends Omit { }\r\n\r\nexport interface ToastProgress extends IziToastProgress { }\r\n\r\nexport class ToastMessage {\r\n constructor(\r\n public message?: string,\r\n public title?: string,\r\n public overrideOptions: ToastOptions = {}\r\n ) { }\r\n}\r\n\r\nexport interface Toast {\r\n setDefaultOptions(options: ToastOptions): void;\r\n getDefaultOptions(): ToastOptions;\r\n destroyAllToasts(): void;\r\n show(toast: ToastMessage): void | boolean;\r\n hide(toastRef: HTMLDivElement | string, toast?: ToastMessage, closedBy?: string): void;\r\n progress(toastRef: HTMLDivElement, toast?: ToastMessage, callback?: () => void): ToastProgress;\r\n info(toast: ToastMessage): void;\r\n success(toast: ToastMessage): void;\r\n warning(toast: ToastMessage): void;\r\n error(toast: ToastMessage): void;\r\n question(toast: ToastMessage): void;\r\n}\r\n","import { Subscription } from 'rxjs';\r\nimport { lazy, autoinject } from 'aurelia-framework';\r\nimport { HttpClient, json } from 'aurelia-fetch-client';\r\nimport { environment } from 'environment';\r\nimport firebase from 'firebase/app';\r\nimport { ToastMessage, ToastService } from './toast-service';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { Store } from 'aurelia-store';\r\nimport { loadCoins, loadTokenMetrics, loadUserBalances, loadTokens } from 'common/hive-engine-api';\r\nimport { HiveEngineService } from './hive-engine-service';\r\nimport { getPrices, usdFormat, getSwapTokenByCrypto } from 'common/functions';\r\nimport { Chain } from '../common/enums';\r\nimport { loadUserBalancesSE, loadTokensSE, loadTokenMetricsSE } from '../common/steem-engine-api';\r\n\r\nconst http = new HttpClient();\r\n\r\n@autoinject()\r\nexport class TokenService {\r\n public state: IState;\r\n\r\n public user = {\r\n name: '',\r\n account: {}\r\n };\r\n\r\n public storeSubscription: Subscription;\r\n\r\n constructor(private i18n: I18N,\r\n private store: Store,\r\n private toast: ToastService,\r\n private hes: HiveEngineService) {\r\n http.configure(config => {\r\n config\r\n .useStandardConfiguration()\r\n .withBaseUrl(environment.FIREBASE_API_HE)\r\n });\r\n \r\n this.storeSubscription = this.store.state.subscribe(state => {\r\n if (state) {\r\n this.state = state;\r\n\r\n this.user = state.account as any; \r\n }\r\n }); \r\n }\r\n\r\n async getDSwapTokens(includeMetrics = true, chain: Chain = Chain.Hive) {\r\n const symbols = environment.swapEnabledTokens;\r\n \r\n let dTokens = await loadTokens([], 1000); \r\n\r\n if (includeMetrics)\r\n await this.enrichTokensWithMetrics(dTokens, symbols, chain);\r\n\r\n await this.addEnabledCryptoTokens(dTokens);\r\n\r\n this.state.tokens = dTokens;\r\n\r\n return dTokens;\r\n } \r\n\r\n async addEnabledCryptoTokens(dTokens: IToken[]) {\r\n var cryptoTokens = environment.swapEnabledCrypto;\r\n\r\n if (cryptoTokens) {\r\n cryptoTokens = cryptoTokens.sort().reverse();\r\n for (const c of cryptoTokens) {\r\n let swapTokenSymbol = await getSwapTokenByCrypto(c);\r\n\r\n let token = dTokens.find(x => x.symbol == swapTokenSymbol);\r\n if (token) {\r\n let cryptoToken = { ...token };\r\n cryptoToken.symbol = c;\r\n cryptoToken.name = cryptoToken.name.replace(\" Pegged\", \"\").replace(\" pegged\", \"\");\r\n cryptoToken.isCrypto = true;\r\n\r\n dTokens.unshift(cryptoToken);\r\n }\r\n } \r\n }\r\n }\r\n\r\n async enrichTokensWithMetrics(dTokens: IToken[], symbols: string[], chain: Chain) {\r\n let metrics = [];\r\n\r\n if (chain === Chain.Hive) {\r\n metrics = await loadTokenMetrics(symbols);\r\n } else if (chain === Chain.Steem) {\r\n metrics = await loadTokenMetricsSE(symbols);\r\n }\r\n \r\n for(const m of metrics) {\r\n let token = dTokens.find(x => x.symbol == m.symbol);\r\n if (token) {\r\n m.marketCap = m.lastPrice * parseFloat(token.circulatingSupply);\r\n\r\n if (Date.now() / 1000 < m.volumeExpiration) {\r\n m.volume = parseFloat(m.volume);\r\n }\r\n\r\n if (!this.state.hivePriceUsd) {\r\n let prices = await getPrices(); \r\n if (prices)\r\n this.state.hivePriceUsd = prices.hive.usd; \r\n }\r\n\r\n m.lastPriceUsd = usdFormat(parseFloat(m.lastPrice), token.precision, this.state.hivePriceUsd, true); \r\n\r\n token.metrics = m; \r\n }\r\n }\r\n }\r\n\r\n async enrichTokensWithUserBalances(symbols) {\r\n let account = environment.isDebug && environment.debugAccount ? environment.debugAccount : this.user.name;\r\n let userBalances = await loadUserBalances(account, symbols);\r\n for(let t of this.state.tokens) {\r\n let balance = userBalances.find(x => x.symbol == t.symbol);\r\n if (balance) {\r\n t.userBalance = balance;\r\n } else {\r\n t.userBalance = { _id: 0, account: account, balance: 0, stake: \"0\", symbol: t.symbol };\r\n }\r\n }\r\n }\r\n\r\n async getUserBalanceOfToken(symbol, chain: Chain) {\r\n let account = environment.isDebug && environment.debugAccount ? environment.debugAccount : this.user.name;\r\n let userBalances = await this.getUserBalances(account, symbol, chain); \r\n let balance = userBalances.find(x => x.symbol == symbol);\r\n if (balance) {\r\n return balance;\r\n } \r\n\r\n return { _id: 0, account: account, balance: 0, stake: \"0\", symbol: symbol };\r\n }\r\n\r\n async getUserBalances(account, symbol, chain: Chain) {\r\n if (chain === Chain.Hive) {\r\n return loadUserBalances(account, [symbol]);\r\n } else if (chain === Chain.Steem) {\r\n return loadUserBalancesSE(account, [symbol]);\r\n }\r\n }\r\n\r\n async getTokenDetails(symbol, chain: Chain, includeMetrics = true, includeBalance = true) { \r\n let dToken: any;\r\n if (this.state.tokens && this.state.tokens.length > 0) { \r\n dToken = this.state.tokens.find(x => x.symbol == symbol);\r\n\r\n if (!dToken)\r\n dToken = await this.retrieveSingleToken(symbol, chain);\r\n } else {\r\n dToken = await this.retrieveSingleToken(symbol, chain);\r\n }\r\n\r\n if (includeMetrics)\r\n await this.enrichTokensWithMetrics([dToken], [symbol], chain);\r\n\r\n if (includeBalance)\r\n dToken.userBalance = await this.getUserBalanceOfToken(symbol, chain);\r\n\r\n return dToken;\r\n }\r\n\r\n async retrieveSingleToken(symbol, chain: Chain) {\r\n let dToken: any;\r\n if (chain === Chain.Hive) {\r\n let tokenRes = await loadTokens([symbol])\r\n if (tokenRes)\r\n dToken = tokenRes[0];\r\n } else if (chain === Chain.Steem) {\r\n let tokenRes = await loadTokensSE([symbol])\r\n if (tokenRes)\r\n dToken = tokenRes[0];\r\n } \r\n return dToken;\r\n }\r\n\r\n async getDSwapTokenBalances(chain: Chain) {\r\n if (!this.state.tokens) {\r\n await this.getDSwapTokens(true, chain);\r\n }\r\n\r\n if (!this.state.tokens.find((x) => x.userBalance != null)) {\r\n let symbols = this.state.tokens.map(x => x.symbol);\r\n await this.enrichTokensWithUserBalances(symbols);\r\n } \r\n \r\n return this.state.tokens;\r\n }\r\n\r\n async getMarketMakerTokens(symbols = [], chain: Chain) {\r\n let allTokens: any;\r\n let mmTokens = [];\r\n\r\n if (chain === Chain.Hive) {\r\n allTokens = await loadTokens(symbols, 1000);\r\n for (const token of allTokens) {\r\n if (environment.disabledTokens.includes(token.symbol)) {\r\n continue;\r\n }\r\n\r\n mmTokens.push(token);\r\n }\r\n } else if (chain === Chain.Steem) {\r\n allTokens = await loadTokensSE(symbols, 1000);\r\n for (const token of allTokens) {\r\n if (environment.disabledTokens_SE.includes(token.symbol)) {\r\n continue;\r\n }\r\n\r\n mmTokens.push(token);\r\n }\r\n }\r\n\r\n return mmTokens;\r\n }\r\n}\r\n"],"sourceRoot":""}