{"version":3,"sources":["webpack:///./src/common/market-maker-api.ts","webpack:///./src/common/mappers.ts","webpack:///./src/common/hive.ts","webpack:///./src/common/firebase.ts","webpack:///./src/common/hive-engine-api.ts","webpack:///./src/common/functions.ts"],"names":["async","loadMarkets","symbols","limit","offset","queryConfig","length","symbol","$in","markets","results","find","res","push","loadMarketsByUser","account","chain","Hive","Steem","arr","creationTimestamp_string","unix","creationTimestamp","format","getUser","user","creationBlock","enabledMarkets","isEnabled","isOnCooldown","isPremium","isPremiumFeePaid","lastTickBlock","lastTickTimestamp","timeLimit","_id","mapTokenResultToIToken","token","circulatingSupply","maxSupply","metadata","mapMetadataToTokenMetadata","name","precision","supply","isCrypto","metadataParsed","JSON","parse","desc","icon","url","mapMetricsResultToTokenMetrics","metrics","highestBid","parseFloat","lastPrice","lastPriceUsd","lowestAsk","marketCap","priceChangeHive","priceChangePercent","volume","volumeExpiration","mapBalanceResultToIBalance","balance","stake","getAccount","username","api","getAccountsAsync","e","Error","hiveSignerJson","auth_type","data","callback","encodeURI","chainId","stringify","window","_hs_callback","authStateChanged","Promise","resolve","firebaseHive","apps","x","auth","onAuthStateChanged","currentUser","getIdTokenResult","uid","firebaseSteem","initializeApp","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","measurementId","http","checkTransaction","trxId","retries","reject","getTransactionInfo","err","result","logs","errors","error","t","setTimeout","loadCoins","CONVERTER_API_HE","fetch","method","json","loadCoinPairs","loadTokenMetrics","loadTokenMarketHistory","timestampStart","timestampEnd","HISTORY_API_HE","toUpperCase","loadUserBalances","balances","loadTokens","index","descending","tokens","disabledTokens","settings","disabled_tokens","fetchSettings","filter","includes","TRIBALDEX_API_URL","loadAccountHistory","instance","get","queryParam","ary","Object","keys","map","key","Array","isArray","arrayParts","i","encodeURIComponent","join","addCommas","nStr","currency","split","x1","x2","rgx","test","replace","usdFormat","val","decimal_limit","price","withoutFormatting","usd","isNaN","parseInt","toFixed","popupCenter","title","w","h","dualScreenLeft","undefined","screenLeft","screenX","dualScreenTop","screenTop","screenY","width","innerWidth","document","documentElement","clientWidth","screen","height","innerHeight","clientHeight","systemZoom","availWidth","left","top","newWindow","open","focus","getPrices","headers","getPeggedTokenPriceByChain","hive","getHivePrice","response","hive_price","totalStakeRequiredToAddMarket","marketMakerUser","stakeRequired","marketMakerStakeRequiredPerMarket","marketMakerStakeRequiredPremium","totalStakeRequiredToEnableMarket","getDswapChains","chains","id","name_short","getFeeTokenSymbolByChain","marketMakerFeeToken","marketMakerFeeToken_SE","getPeggedTokenSymbolByChain","peggedToken","peggedToken_SE","getChainByState","state","loggedIn","dswapChainId","getBlockExplorerByChain","BLOCK_EXPLORER_HE","BLOCK_EXPLORER_SE","getSwapStatusById","swapStatusId","swapStatusName","Init","InProgress","Failure","Success","SuccessPartial","Cancelled","Expired","getSwapStepById","swapStepId","swapStepName","ValidateSwapRequest","ConvertToSwapBaseToken","ConvertToSwapOutput","TransferToDestionationAccount","getSwapTokenByCrypto","crypto","getRandomID","c","r","Math","random","toString","isPeggedToken","isNumeric","n","isFinite"],"mappings":"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","file":"app~8a883ac2.7820c7ec19883e7b2907.chunk.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { usdFormat, getPrices } from 'common/functions';\r\n/* eslint-disable no-undef */\r\nimport { HttpClient } from 'aurelia-fetch-client';\r\nimport { queryParam } from 'common/functions';\r\nimport { environment } from 'environment';\r\nimport { ssc } from './ssc';\r\nimport { sscse } from './ssc-se';\r\nimport { mapTokenResultToIToken, mapBalanceResultToIBalance, mapMetricsResultToTokenMetrics } from './mappers';\r\nimport moment from 'moment';\r\nimport { Chain } from './enums';\r\n\r\nconst http = new HttpClient();\r\n\r\nexport async function request(url: string, params: any = {}) {\r\n // Cache buster\r\n params.v = new Date().getTime();\r\n\r\n url = url + queryParam(params);\r\n\r\n return http.fetch(url, {\r\n method: 'GET',\r\n });\r\n}\r\n\r\nconst delay = t => new Promise(resolve => setTimeout(resolve, t));\r\n\r\nexport async function loadMarkets(symbols = [], limit = 1000, offset = 0): Promise {\r\n const queryConfig: any = {};\r\n\r\n if (symbols.length) {\r\n queryConfig.symbol = { $in: symbols };\r\n }\r\n\r\n let markets : IMarketMakerMarket[] = [];\r\n const results = await ssc.find('botcontroller', 'markets', queryConfig);\r\n \r\n for (const res of results) {\r\n markets.push(res);\r\n }\r\n\r\n return markets;\r\n}\r\n\r\nexport async function loadMarketsByUser(account: any, symbols = [], chain: Chain): Promise { \r\n const queryConfig: any = {};\r\n\r\n if (account) {\r\n queryConfig.account = account;\r\n } else {\r\n return null;\r\n }\r\n\r\n if (symbols.length) {\r\n queryConfig.symbol = { $in: symbols };\r\n }\r\n\r\n let markets: IMarketMakerMarket[] = [];\r\n let results: any;\r\n if (chain == Chain.Hive) {\r\n results = await ssc.find('botcontroller', 'markets', queryConfig);\r\n } else if (chain == Chain.Steem) {\r\n results = await sscse.find('botcontroller', 'markets', queryConfig);\r\n }\r\n\r\n if (results) {\r\n for (const res of results) {\r\n let arr = res;\r\n arr.creationTimestamp_string = moment.unix(arr.creationTimestamp / 1000).format('YYYY-MM-DD HH:mm:ss');\r\n markets.push(res);\r\n }\r\n }\r\n\r\n return markets;\r\n}\r\n\r\nexport async function getUser(account: string, chain: Chain): Promise {\r\n const queryConfig: any = { account: account };\r\n\r\n let user: IMarketMakerUser = {\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 let results: any;\r\n if (chain == Chain.Hive) {\r\n results = await ssc.find('botcontroller', 'users', queryConfig);\r\n } else if (chain == Chain.Steem) {\r\n results = await sscse.find('botcontroller', 'users', queryConfig);\r\n }\r\n if (results) {\r\n user = results[0];\r\n }\r\n\r\n return user;\r\n}\r\n","export function mapTokenResultToIToken(token) { \r\n let mapped : IToken = {\r\n _id: token._id,\r\n circulatingSupply: token.circulatingSupply, \r\n maxSupply: token.maxSupply,\r\n metadata: mapMetadataToTokenMetadata(token.metadata),\r\n name: token.name,\r\n precision: token.precision, \r\n supply: token.supply,\r\n symbol: token.symbol,\r\n isCrypto: false\r\n }\r\n\r\n return mapped;\r\n}\r\n\r\nexport function mapMetadataToTokenMetadata(metadata) {\r\n let metadataParsed = JSON.parse(metadata);\r\n\r\n let mapped: ITokenMetadata = {\r\n desc: metadataParsed.desc,\r\n icon: metadataParsed.icon,\r\n url: metadataParsed.url\r\n };\r\n\r\n return mapped;\r\n}\r\n\r\nexport function mapMetricsResultToTokenMetrics(metrics) {\r\n let mapped: ITokenMetrics = {\r\n highestBid: parseFloat(metrics.highestBid),\r\n lastPrice: parseFloat(metrics.lastPrice),\r\n lastPriceUsd: metrics.lastPrice,\r\n lowestAsk: parseFloat(metrics.lowestAsk),\r\n marketCap: 0,\r\n priceChangeHive: parseFloat(metrics.priceChangeHive),\r\n priceChangePercent: parseFloat(metrics.priceChangePercent),\r\n symbol: metrics.symbol,\r\n volume: metrics.volume,\r\n volumeExpiration: metrics.volumeExpiration \r\n }\r\n\r\n return mapped;\r\n}\r\n\r\nexport function mapBalanceResultToIBalance(balance) {\r\n let mapped: IBalance = {\r\n _id: balance._id,\r\n account: balance.account,\r\n balance: balance.balance,\r\n stake: balance.stake,\r\n symbol: balance.symbol\r\n };\r\n\r\n return mapped;\r\n}\r\n","import { environment } from 'environment';\r\nimport { AuthType } from './types';\r\nimport hive from '@hiveio/hive-js';\r\nimport { popupCenter } from './functions';\r\n\r\nexport async function getAccount(username: string) {\r\n try {\r\n const user = await hive.api.getAccountsAsync([username]);\r\n \r\n return user && user.length > 0 ? user[0] : null;\r\n } catch (e) {\r\n throw new Error(e);\r\n }\r\n}\r\n\r\nexport async function hiveSignerJson(username: string, auth_type: AuthType, data: any, callback?) {\r\n let url = 'https://hivesigner.com/sign/custom-json?';\r\n\r\n if (auth_type == 'active') {\r\n url += 'required_posting_auths=' + encodeURI('[]');\r\n url += '&required_auths=' + encodeURI('[\"' + username + '\"]');\r\n url += `&authority=active`;\r\n } else {\r\n url += 'required_posting_auths=' + encodeURI('[\"' + username + '\"]');\r\n }\r\n\r\n url += '&id=' + environment.chainId;\r\n url += '&json=' + encodeURI(JSON.stringify(data));\r\n\r\n popupCenter(url, 'hivesigner', 500, 560);\r\n\r\n if (callback) {\r\n window._hs_callback = callback;\r\n }\r\n}\r\n\r\nexport async function hiveConnectJsonId(username: string, auth_type: AuthType, id: string, data: any, callback) {\r\n let url = 'https://hivesigner.com/sign/custom-json?';\r\n\r\n if (auth_type == 'active') {\r\n url += 'required_posting_auths=' + encodeURI('[]');\r\n url += '&required_auths=' + encodeURI('[\"' + username + '\"]');\r\n url += `&authority=active`;\r\n } else {\r\n url += 'required_posting_auths=' + encodeURI('[\"' + username + '\"]');\r\n }\r\n\r\n url += '&id=' + id;\r\n url += '&json=' + encodeURI(JSON.stringify(data));\r\n\r\n popupCenter(url, 'hivesigner', 500, 560);\r\n\r\n this._hs_callback = callback;\r\n}\r\n\r\nexport async function hiveConnectTransfer(from: string, to: string, amount: string, memo: string, callback: any) {\r\n let url = 'https://hivesigner.com/sign/transfer?';\r\n url += '&from=' + encodeURI(from);\r\n url += '&to=' + encodeURI(to);\r\n url += '&amount=' + encodeURI(amount);\r\n url += '&memo=' + encodeURI(memo);\r\n\r\n popupCenter(url, 'hivesigner', 500, 560);\r\n window._hs_callback = callback;\r\n}\r\n","import { login, setAccount, logout } from 'store/actions';\r\nimport { dispatchify } from 'aurelia-store';\r\n\r\nimport firebase from 'firebase/app';\r\nimport 'firebase/auth';\r\nimport 'firebase/firestore';\r\nimport { Chain } from './enums';\r\nimport { firebaseSteemAppName, firebaseHiveAppName } from './constants';\r\n\r\nconst firebaseConfig = {\r\n apiKey: 'AIzaSyDTgQorxwEGSXCgmQaQpI4f1lEADwTgMbk',\r\n authDomain: 'tribaldex-d22e0.firebaseapp.com',\r\n databaseURL: 'https://tribaldex-d22e0.firebaseio.com',\r\n projectId: 'tribaldex-d22e0',\r\n storageBucket: 'tribaldex-d22e0.appspot.com',\r\n messagingSenderId: '884996152894',\r\n appId: '1:884996152894:web:c0ef769b4556858b717b6f',\r\n measurementId: 'G-EPE7FWN2MB'\r\n};\r\n\r\nconst firebaseConfigSteem = {\r\n apiKey: \"AIzaSyDDPjgEMwAD1PU3PG5Dinci2QjRmQ5Pi4k\",\r\n authDomain: \"steem-engine-dex.firebaseapp.com\",\r\n databaseURL: \"https://steem-engine-dex.firebaseio.com\",\r\n projectId: \"steem-engine-dex\",\r\n storageBucket: \"steem-engine-dex.appspot.com\",\r\n messagingSenderId: \"947796838950\",\r\n appId: \"1:947796838950:web:af5b8ba241cc4910\"\r\n};\r\n\r\nfirebase.initializeApp(firebaseConfig);\r\nfirebase.initializeApp(firebaseConfigSteem, \"firebaseSteem\");\r\n\r\nexport async function authStateChanged() { \r\n\r\n return new Promise(resolve => {\r\n let firebaseHive = firebase.apps.find(x => x.name === firebaseHiveAppName);\r\n firebaseHive.auth().onAuthStateChanged(async user => { \r\n // eslint-disable-next-line no-undef\r\n const token = await firebaseHive.auth()?.currentUser?.getIdTokenResult(true);\r\n\r\n if (user) {\r\n dispatchify(login)(user.uid, Chain.Hive);\r\n if (token) {\r\n dispatchify(setAccount)({ token });\r\n }\r\n resolve();\r\n } else {\r\n dispatchify(logout)();\r\n resolve();\r\n }\r\n });\r\n\r\n let firebaseSteem = firebase.apps.find(x => x.name === firebaseSteemAppName);\r\n firebaseSteem.auth().onAuthStateChanged(async user => {\r\n // eslint-disable-next-line no-undef\r\n const token = await firebaseSteem.auth()?.currentUser?.getIdTokenResult(true);\r\n\r\n if (user) {\r\n dispatchify(login)(user.uid, Chain.Steem);\r\n if (token) {\r\n dispatchify(setAccount)({ token });\r\n }\r\n resolve();\r\n } else {\r\n dispatchify(logout)();\r\n resolve();\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport async function getFirebaseUser(username: string) {\r\n let firebaseHive = firebase.apps.find(x => x.name === firebaseHiveAppName);\r\n const doc = await firebaseHive\r\n .firestore()\r\n .collection('users')\r\n .doc(username)\r\n .get();\r\n\r\n return doc.exists ? doc.data() : null;\r\n}\r\n\r\nexport async function getFirebaseUserSteem(username: string) {\r\n let firebaseSteem = firebase.apps.find(x => x.name === firebaseSteemAppName);\r\n const doc = await firebaseSteem\r\n .firestore()\r\n .collection('users')\r\n .doc(username)\r\n .get();\r\n\r\n return doc.exists ? doc.data() : null;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { usdFormat, getPrices } from 'common/functions';\n/* eslint-disable no-undef */\nimport { HttpClient } from 'aurelia-fetch-client';\nimport { queryParam } from 'common/functions';\nimport { environment } from 'environment';\nimport { ssc } from './ssc';\nimport { mapTokenResultToIToken, mapBalanceResultToIBalance, mapMetricsResultToTokenMetrics } from './mappers';\nimport { env } from 'process';\n\nconst http = new HttpClient();\n\nexport async function request(url: string, params: any = {}) {\n // Cache buster\n params.v = new Date().getTime();\n\n url = url + queryParam(params);\n\n return http.fetch(url, {\n method: 'GET',\n });\n}\n\nconst delay = t => new Promise(resolve => setTimeout(resolve, t));\n\nexport const getTransactionInfo = (trxId: string) =>\n new Promise((resolve, reject) => {\n ssc.getTransactionInfo(trxId, async (err, result) => {\n if (result) {\n if (result.logs) {\n const logs = JSON.parse(result.logs);\n\n if (logs.errors && logs.errors.length > 0) {\n resolve({\n ...result,\n errors: logs.errors,\n error: logs.errors[0],\n });\n }\n }\n\n resolve(result);\n } else {\n reject(err);\n }\n });\n });\n\nexport async function checkTransaction(trxId: string, retries: number) {\n try {\n return await getTransactionInfo(trxId);\n } catch (e) {\n if (retries > 0) {\n await delay(5000);\n\n try {\n return await checkTransaction(trxId, retries - 1);\n } catch (e) {\n return await checkTransaction(trxId, retries - 1);\n }\n } else {\n throw new Error('Transaction not found.');\n }\n }\n}\n\nexport async function loadCoins(): Promise {\n const url = `${environment.CONVERTER_API_HE}coins/`;\n\n const response = await http.fetch(url, {\n method: 'GET',\n });\n\n return response.json() as Promise;\n}\n\nexport async function loadCoinPairs(): Promise {\n const url = `${environment.CONVERTER_API_HE}pairs/`;\n\n const response = await http.fetch(url, {\n method: 'GET',\n });\n\n return response.json() as Promise;\n}\n\nexport async function loadTokenMetrics(symbols = [], limit = 1000, offset = 0): Promise {\n const queryConfig: any = {};\n\n if (symbols.length) {\n queryConfig.symbol = { $in: symbols };\n }\n\n let metrics = [];\n const results = await ssc.find('market', 'metrics', queryConfig); \n \n for (const res of results) {\n metrics.push(mapMetricsResultToTokenMetrics(res));\n }\n\n return metrics;\n}\n\nexport async function loadTokenMarketHistory(symbol: string, timestampStart?: string, timestampEnd?: string): Promise {\n let url = `${environment.HISTORY_API_HE}marketHistory?symbol=${symbol.toUpperCase()}`;\n\n if (timestampStart) {\n url += `×tampStart=${timestampStart}`;\n }\n\n if (timestampEnd) {\n url += `×tampEnd=${timestampEnd}`;\n }\n\n const response = await http.fetch(url, {\n method: 'GET',\n });\n\n return response.json() as Promise;\n}\n\nexport async function loadUserBalances(account: string, symbols = [], limit = 1000, offset = 0) : Promise {\n const queryConfig: any = {};\n queryConfig.symbol = { $in: symbols };\n queryConfig.account = account;\n\n const results: any[] = await ssc.find('tokens', 'balances', queryConfig, limit, offset, '', false); \n let balances: IBalance[] = []; \n for (const res of results) {\n balances.push(mapBalanceResultToIBalance(res));\n }\n\n return balances;\n}\n\nexport async function loadTokens(symbols = [], limit = 50, offset = 0): Promise {\n const queryConfig: any = {};\n\n if (symbols.length) {\n queryConfig.symbol = { $in: symbols };\n }\n\n let results: any[] = await ssc.find('tokens', 'tokens', queryConfig, limit, offset, [{ index: 'symbol', descending: false }]);\n let tokens: IToken[] = [];\n\n if (results) {\n let disabledTokens = null;\n if (!environment.settings) {\n environment.settings = await fetchSettings();\n\n if (environment.settings && environment.settings.disabled_tokens) {\n disabledTokens = environment.settings.disabled_tokens;\n } else {\n disabledTokens = environment.disabledTokens;\n }\n } else {\n disabledTokens = environment.settings.disabled_tokens;\n }\n \n results = results.filter(t => !disabledTokens.includes(t.symbol));\n\n for (const res of results) {\n tokens.push(mapTokenResultToIToken(res));\n }\n }\n\n return tokens;\n}\n\nexport async function fetchSettings() {\n let url = `${environment.TRIBALDEX_API_URL}settings`;\n\n const response = await http.fetch(url, {\n method: 'GET',\n });\n\n return response.json() as Promise;\n}\n\nexport async function loadHivepBalance() {\n try {\n const result: any = await ssc.findOne('tokens', 'balances', { account: 'honey-swap', symbol: 'SWAP.HIVE' });\n\n return result;\n } catch (e) {\n return null;\n }\n}\n\nexport async function getScotConfigForAccount(account: string) {\n try {\n const result = await http.fetch(`${environment.SCOT_API_HE}@${account}`);\n\n return result.json();\n } catch (e) {\n return null;\n }\n}\n\nexport async function loadAccountHistory(account: string, symbol?: string, timestampStart?: string, timestampEnd?: string, limit?: number, offset?: number): Promise {\n let url = `${environment.HISTORY_API_HE}accountHistory?account=${account}`;\n\n if (symbol) {\n url += `&symbol=${symbol.toUpperCase()}`;\n }\n\n if (timestampStart) {\n url += `×tampStart=${timestampStart}`;\n }\n\n if (timestampEnd) {\n url += `×tampEnd=${timestampEnd}`;\n }\n\n if (limit) {\n url += `&limit=${limit}`;\n }\n\n if (offset) {\n url += `&offset=${offset}`;\n }\n\n const response = await http.fetch(url, {\n method: 'GET',\n });\n\n return response.json() as Promise;\n}\n\nexport async function loadBuyBook(symbol, limit = 10, offset = 0) {\n return ssc.find('market', 'buyBook', { symbol: symbol }, limit, offset, [{ index: 'priceDec', descending: true }], false);\n}\n\nexport async function loadSellBook(symbol, limit = 10, offset = 0) {\n return ssc.find('market', 'sellBook', { symbol: symbol }, limit, offset, [{ index: 'priceDec', descending: false }], false);\n}\n","import { Container } from 'aurelia-framework';\nimport { I18N } from 'aurelia-i18n';\nimport { ToastMessage, ToastService } from './../services/toast-service';\nimport { checkTransaction } from 'common/hive-engine-api';\nimport { environment } from 'environment';\nimport { hiveSignerJson } from 'common/hive';\nimport { HttpClient } from 'aurelia-fetch-client';\nimport trim from 'trim-character';\nimport { Chain, SwapStatus, SwapStep } from './enums';\nimport { DefaultChainId } from './constants';\n\nconst http: HttpClient = new HttpClient();\nconst toastService: ToastService = Container.instance.get(ToastService);\nconst i18n: I18N = Container.instance.get(I18N);\n\nexport function queryParam(ary) {\n return Object.keys(ary).map(function (key) {\n if (Array.isArray(ary[key])) {\n const arrayParts = [];\n\n for (let i = 0; i < ary[key].length; i++) {\n arrayParts.push(encodeURIComponent(key + '[]') + '=' + encodeURIComponent(ary[key][i]));\n }\n\n return arrayParts.join('&');\n }\n return encodeURIComponent(key) + '=' + encodeURIComponent(ary[key]);\n }).join('&');\n}\n\nexport function addCommas(nStr, currency?) {\n nStr += '';\n\n const x = nStr.split('.');\n let x1 = x[0];\n let x2 = x.length > 1 ? '.' + x[1] : '';\n const rgx = /(\\d+)(\\d{3})/;\n\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\n }\n\n if (x2 == '' && currency == 1) {\n x2 = '.00';\n }\n\n return x1 + x2;\n}\n\nexport function usdFormat(val, decimal_limit?, price?, withoutFormatting = false) { \n const usd = val * price;\n\n if (decimal_limit != null && !isNaN(parseInt(decimal_limit))) {\n if (withoutFormatting) {\n return usd.toFixed(decimal_limit);\n } else {\n return '$' + addCommas(usd.toFixed(decimal_limit));\n }\n }\n\n if (usd >= 1) {\n if (withoutFormatting) {\n return usd.toFixed(2);\n } else {\n return '$' + addCommas(usd.toFixed(2));\n }\n } else if (usd >= 0.1) {\n if (withoutFormatting) {\n return usd.toFixed(3);\n } else {\n return '$' + usd.toFixed(3);\n }\n } else {\n if (withoutFormatting) {\n return usd.toFixed(5);\n } else {\n return '$' + usd.toFixed(5);\n }\n }\n}\n\nexport function largeNumber(val) {\n val = parseFloat(val);\n\n if (val >= 1000000000000) {\n return addCommas(+(val / 1000000000000).toFixed(0)) + ' T';\n } else if (val >= 1000000000) {\n return addCommas(+(val / 1000000000).toFixed(3)) + ' B';\n } else if (val >= 1000000) {\n return addCommas(+(val / 1000000).toFixed(3)) + ' M';\n } else {\n return addCommas(+val.toFixed(3));\n }\n}\n\nexport function popupCenter(url, title, w, h) {\n /* istanbul ignore next */\n const dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : window.screenX;\n\n /* istanbul ignore next */\n const dualScreenTop = window.screenTop != undefined ? window.screenTop : window.screenY;\n\n /* istanbul ignore next */\n const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;\n\n /* istanbul ignore next */\n const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;\n\n const systemZoom = width / window.screen.availWidth;\n const left = (width - w) / 2 / systemZoom + dualScreenLeft\n const top = (height - h) / 2 / systemZoom + dualScreenTop\n const newWindow = window.open(url, title, 'scrollbars=yes, width=' + w / systemZoom + ', height=' + h / systemZoom + ', top=' + top + ', left=' + left);\n\n if (newWindow?.focus) {\n newWindow.focus();\n }\n\n return newWindow;\n}\n\n\nexport function tryParse(json: any) {\n try {\n return JSON.parse(json);\n } catch (err) {\n return null;\n }\n}\n\nexport function toFixedNoRounding(number, n) {\n // Ref: https://helloacm.com/javascripts-tofixed-implementation-without-rounding/\n // make 3 digits without rounding e.g. 3.1499 => 3.149 and 3.1 => 3.100 \n const reg = new RegExp('^-?\\\\d+(?:\\\\.\\\\d{0,' + n + '})?', 'g')\n const a = number.toString().match(reg)[0];\n const dot = a.indexOf('.');\n if (dot === -1) { // integer, insert decimal dot and pad up zeros\n return a + '.' + '0'.repeat(n);\n }\n const b = n - (a.length - dot) + 1;\n /* istanbul ignore next */\n return b > 0 ? (a + '0'.repeat(b)) : a;\n}\n\nexport function createTransaction(username: string, contractName: string, contractAction: string, payload: any, title: string, successKey: string, errorKey: string) {\n return new Promise((resolve) => {\n const transactionData = {\n contractName: `${contractName}`,\n contractAction: `${contractAction}`,\n contractPayload: payload\n };\n \n if (window.hive_keychain) {\n window.hive_keychain.requestCustomJson(username, environment.chainId, 'Active', JSON.stringify(transactionData), title, async (response) => {\n if (response.success && response.result) {\n try {\n const transaction = await checkTransaction(response.result.id, 3); \n const toast = new ToastMessage();\n \n toast.message = i18n.tr(successKey, {\n ns: 'notifications'\n });\n \n toastService.success(toast);\n \n resolve(transaction);\n } catch (e) {\n /* istanbul ignore next */\n const toast = new ToastMessage();\n \n /* istanbul ignore next */\n toast.message = i18n.tr(errorKey, {\n ns: 'notifications'\n });\n \n /* istanbul ignore next */\n toastService.error(toast);\n \n /* istanbul ignore next */\n resolve(false);\n }\n } else {\n resolve(false);\n }\n });\n } else {\n /* istanbul ignore next */\n hiveSignerJson(username, 'active', transactionData, () => {\n resolve(true);\n });\n }\n });\n}\n\nexport function sleep(wait = 1000) {\n return new Promise((resolve) => {\n setTimeout(resolve, wait);\n });\n}\n\n/* istanbul ignore next */\nexport function trimUsername(username) {\n if (username)\n username = trim(username, '@');\n\n return username;\n}\n\nexport async function getPrices() {\n try {\n const request = await http.fetch(`https://api.coingecko.com/api/v3/simple/price?ids=HIVE&vs_currencies=USD`, {\n headers: {\n 'Origin': 'https://dswap.trade',\n 'Referer': 'https://dswap.trade/?p=conversion_history',\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'\n }\n });\n\n return request.json();\n } catch {\n return null;\n }\n}\n\nexport async function getPeggedTokenPriceByChain(chain: Chain) {\n let price: number;\n if (chain === Chain.Hive) {\n const response = await getPrices();\n price = response.hive.usd;\n } else if (chain === Chain.Steem) {\n //symbol = environment.marketMakerFeeToken_SE;\n }\n\n return price;\n}\n\nexport async function getHivePrice() {\n try {\n const response = await getPrices();\n\n window.hive_price = parseFloat(response.hive.usd);\n\n return window.hive_price;\n } catch {\n window.hive_price = 0;\n\n return 0;\n }\n}\n\nexport async function totalStakeRequiredToAddMarket(marketMakerUser: IMarketMakerUser) {\n let stakeRequired = environment.marketMakerStakeRequiredPerMarket;\n\n if (marketMakerUser.isPremium) {\n stakeRequired += environment.marketMakerStakeRequiredPremium + (marketMakerUser.markets * environment.marketMakerStakeRequiredPerMarket)\n } else {\n stakeRequired += marketMakerUser.markets * environment.marketMakerStakeRequiredPerMarket\n }\n\n return stakeRequired;\n}\n\nexport async function totalStakeRequiredToEnableMarket(marketMakerUser: IMarketMakerUser) {\n let stakeRequired = environment.marketMakerStakeRequiredPerMarket;\n\n if (marketMakerUser.isPremium) {\n stakeRequired = environment.marketMakerStakeRequiredPremium + (marketMakerUser.markets * environment.marketMakerStakeRequiredPerMarket)\n } \n\n return stakeRequired;\n}\n\nexport async function getDswapChains() {\n let chains: IDSwapChain[] = [];\n chains.push({ id: Chain.Hive, name: \"Hive Engine\", name_short: \"Hive\" });\n chains.push({ id: Chain.Steem, name: \"Steem Engine\", name_short: \"Steem\" });\n\n return chains;\n}\n\nexport async function getFeeTokenSymbolByChain(chain: Chain) {\n let symbol: string;\n if (chain === Chain.Hive) {\n symbol = environment.marketMakerFeeToken;\n } else if (chain === Chain.Steem) {\n symbol = environment.marketMakerFeeToken_SE;\n }\n\n return symbol;\n}\n\nexport async function getPeggedTokenSymbolByChain(chain: Chain) {\n let symbol: string;\n if (chain === Chain.Hive) {\n symbol = environment.peggedToken;\n } else if (chain === Chain.Steem) {\n symbol = environment.peggedToken_SE;\n }\n\n return symbol;\n}\n\nexport async function getChainByState(state: IState) {\n let chainId: any;\n if (state) {\n if (state.loggedIn && state.account.dswapChainId) {\n chainId = state.account.dswapChainId;\n } else if (state.dswapChainId) {\n chainId = state.dswapChainId;\n } else {\n chainId = DefaultChainId;\n }\n } else {\n chainId = DefaultChainId;\n } \n return chainId;\n}\n\nexport async function getBlockExplorerByChain(chain: Chain) {\n let symbol: string;\n if (chain === Chain.Hive) {\n symbol = environment.BLOCK_EXPLORER_HE;\n } else if (chain === Chain.Steem) {\n symbol = environment.BLOCK_EXPLORER_SE;\n }\n\n return symbol;\n}\n\nexport function getSwapStatusById(swapStatusId: number) {\n let swapStatusName = \"\";\n\n switch (swapStatusId) {\n case SwapStatus.Init:\n swapStatusName = \"Init\";\n break;\n case SwapStatus.InProgress:\n swapStatusName = \"In progress\";\n break;\n case SwapStatus.Failure:\n swapStatusName = \"Failure\";\n break;\n case SwapStatus.Success:\n swapStatusName = \"Success\";\n break; \n case SwapStatus.SuccessPartial:\n swapStatusName = \"Success (partial)\";\n break; \n case SwapStatus.Cancelled:\n swapStatusName = \"Cancelled\";\n break; \n case SwapStatus.Expired:\n swapStatusName = \"Expired\";\n break; \n }\n\n return swapStatusName;\n}\n\nexport async function getSwapStepById(swapStepId: number) {\n let swapStepName = \"\";\n\n switch (swapStepId) {\n case SwapStep.ValidateSwapRequest:\n swapStepName = \"Validation\";\n break;\n case SwapStep.ConvertToSwapBaseToken:\n swapStepName = \"Convert to base token\";\n break;\n case SwapStep.ConvertToSwapOutput:\n swapStepName = \"Convert to output token\";\n break;\n case SwapStep.TransferToDestionationAccount:\n swapStepName = \"Transfer tokens to receiver\";\n break;\n }\n\n return swapStepName;\n}\n\nexport async function getSwapTokenByCrypto(crypto) {\n return \"SWAP.\" + crypto;\n}\n\nexport function getRandomID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nexport function isPeggedToken(token: IToken) {\n return token.symbol.includes(\"SWAP\") || token.name.includes(\"Pegged\");\n}\n\nexport function isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n"],"sourceRoot":""}