{"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","filter","disabledTokens","includes","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","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.efea512b91de83781983.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 */\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 { mapTokenResultToIToken, mapBalanceResultToIBalance, mapMetricsResultToTokenMetrics } from './mappers';\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 const getTransactionInfo = (trxId: string) =>\r\n new Promise((resolve, reject) => {\r\n ssc.getTransactionInfo(trxId, async (err, result) => {\r\n if (result) {\r\n if (result.logs) {\r\n const logs = JSON.parse(result.logs);\r\n\r\n if (logs.errors && logs.errors.length > 0) {\r\n resolve({\r\n ...result,\r\n errors: logs.errors,\r\n error: logs.errors[0],\r\n });\r\n }\r\n }\r\n\r\n resolve(result);\r\n } else {\r\n reject(err);\r\n }\r\n });\r\n });\r\n\r\nexport async function checkTransaction(trxId: string, retries: number) {\r\n try {\r\n return await getTransactionInfo(trxId);\r\n } catch (e) {\r\n if (retries > 0) {\r\n await delay(5000);\r\n\r\n try {\r\n return await checkTransaction(trxId, retries - 1);\r\n } catch (e) {\r\n return await checkTransaction(trxId, retries - 1);\r\n }\r\n } else {\r\n throw new Error('Transaction not found.');\r\n }\r\n }\r\n}\r\n\r\nexport async function loadCoins(): Promise {\r\n const url = `${environment.CONVERTER_API_HE}coins/`;\r\n\r\n const response = await http.fetch(url, {\r\n method: 'GET',\r\n });\r\n\r\n return response.json() as Promise;\r\n}\r\n\r\nexport async function loadCoinPairs(): Promise {\r\n const url = `${environment.CONVERTER_API_HE}pairs/`;\r\n\r\n const response = await http.fetch(url, {\r\n method: 'GET',\r\n });\r\n\r\n return response.json() as Promise;\r\n}\r\n\r\nexport async function loadTokenMetrics(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 metrics = [];\r\n const results = await ssc.find('market', 'metrics', queryConfig); \r\n \r\n for (const res of results) {\r\n metrics.push(mapMetricsResultToTokenMetrics(res));\r\n }\r\n\r\n return metrics;\r\n}\r\n\r\nexport async function loadTokenMarketHistory(symbol: string, timestampStart?: string, timestampEnd?: string): Promise {\r\n let url = `${environment.HISTORY_API_HE}marketHistory?symbol=${symbol.toUpperCase()}`;\r\n\r\n if (timestampStart) {\r\n url += `×tampStart=${timestampStart}`;\r\n }\r\n\r\n if (timestampEnd) {\r\n url += `×tampEnd=${timestampEnd}`;\r\n }\r\n\r\n const response = await http.fetch(url, {\r\n method: 'GET',\r\n });\r\n\r\n return response.json() as Promise;\r\n}\r\n\r\nexport async function loadUserBalances(account: string, symbols = [], limit = 1000, offset = 0) : Promise {\r\n const queryConfig: any = {};\r\n queryConfig.symbol = { $in: symbols };\r\n queryConfig.account = account;\r\n\r\n const results: any[] = await ssc.find('tokens', 'balances', queryConfig, limit, offset, '', false); \r\n let balances: IBalance[] = []; \r\n for (const res of results) {\r\n balances.push(mapBalanceResultToIBalance(res));\r\n }\r\n\r\n return balances;\r\n}\r\n\r\nexport async function loadTokens(symbols = [], limit = 50, 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 results: any[] = await ssc.find('tokens', 'tokens', queryConfig, limit, offset, [{ index: 'symbol', descending: false }]);\r\n let tokens: IToken[] = [];\r\n\r\n if (results) {\r\n results = results.filter(t => !environment.disabledTokens.includes(t.symbol));\r\n\r\n for (const res of results) {\r\n tokens.push(mapTokenResultToIToken(res));\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport async function loadHivepBalance() {\r\n try {\r\n const result: any = await ssc.findOne('tokens', 'balances', { account: 'honey-swap', symbol: 'SWAP.HIVE' });\r\n\r\n return result;\r\n } catch (e) {\r\n return null;\r\n }\r\n}\r\n\r\nexport async function getScotConfigForAccount(account: string) {\r\n try {\r\n const result = await http.fetch(`${environment.SCOT_API_HE}@${account}`);\r\n\r\n return result.json();\r\n } catch (e) {\r\n return null;\r\n }\r\n}\r\n\r\nexport async function loadAccountHistory(account: string, symbol?: string, timestampStart?: string, timestampEnd?: string, limit?: number, offset?: number): Promise {\r\n let url = `${environment.HISTORY_API_HE}accountHistory?account=${account}`;\r\n\r\n if (symbol) {\r\n url += `&symbol=${symbol.toUpperCase()}`;\r\n }\r\n\r\n if (timestampStart) {\r\n url += `×tampStart=${timestampStart}`;\r\n }\r\n\r\n if (timestampEnd) {\r\n url += `×tampEnd=${timestampEnd}`;\r\n }\r\n\r\n if (limit) {\r\n url += `&limit=${limit}`;\r\n }\r\n\r\n if (offset) {\r\n url += `&offset=${offset}`;\r\n }\r\n\r\n const response = await http.fetch(url, {\r\n method: 'GET',\r\n });\r\n\r\n return response.json() as Promise;\r\n}\r\n\r\nexport async function loadBuyBook(symbol, limit = 10, offset = 0) {\r\n return ssc.find('market', 'buyBook', { symbol: symbol }, limit, offset, [{ index: 'priceDec', descending: true }], false);\r\n}\r\n\r\nexport async function loadSellBook(symbol, limit = 10, offset = 0) {\r\n return ssc.find('market', 'sellBook', { symbol: symbol }, limit, offset, [{ index: 'priceDec', descending: false }], false);\r\n}\r\n","import { Container } from 'aurelia-framework';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { ToastMessage, ToastService } from './../services/toast-service';\r\nimport { checkTransaction } from 'common/hive-engine-api';\r\nimport { environment } from 'environment';\r\nimport { hiveSignerJson } from 'common/hive';\r\nimport { HttpClient } from 'aurelia-fetch-client';\r\nimport trim from 'trim-character';\r\nimport { Chain, SwapStatus, SwapStep } from './enums';\r\nimport { DefaultChainId } from './constants';\r\n\r\nconst http: HttpClient = new HttpClient();\r\nconst toastService: ToastService = Container.instance.get(ToastService);\r\nconst i18n: I18N = Container.instance.get(I18N);\r\n\r\nexport function queryParam(ary) {\r\n return Object.keys(ary).map(function (key) {\r\n if (Array.isArray(ary[key])) {\r\n const arrayParts = [];\r\n\r\n for (let i = 0; i < ary[key].length; i++) {\r\n arrayParts.push(encodeURIComponent(key + '[]') + '=' + encodeURIComponent(ary[key][i]));\r\n }\r\n\r\n return arrayParts.join('&');\r\n }\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(ary[key]);\r\n }).join('&');\r\n}\r\n\r\nexport function addCommas(nStr, currency?) {\r\n nStr += '';\r\n\r\n const x = nStr.split('.');\r\n let x1 = x[0];\r\n let x2 = x.length > 1 ? '.' + x[1] : '';\r\n const rgx = /(\\d+)(\\d{3})/;\r\n\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n }\r\n\r\n if (x2 == '' && currency == 1) {\r\n x2 = '.00';\r\n }\r\n\r\n return x1 + x2;\r\n}\r\n\r\nexport function usdFormat(val, decimal_limit?, price?, withoutFormatting = false) { \r\n const usd = val * price;\r\n\r\n if (decimal_limit != null && !isNaN(parseInt(decimal_limit))) {\r\n if (withoutFormatting) {\r\n return usd.toFixed(decimal_limit);\r\n } else {\r\n return '$' + addCommas(usd.toFixed(decimal_limit));\r\n }\r\n }\r\n\r\n if (usd >= 1) {\r\n if (withoutFormatting) {\r\n return usd.toFixed(2);\r\n } else {\r\n return '$' + addCommas(usd.toFixed(2));\r\n }\r\n } else if (usd >= 0.1) {\r\n if (withoutFormatting) {\r\n return usd.toFixed(3);\r\n } else {\r\n return '$' + usd.toFixed(3);\r\n }\r\n } else {\r\n if (withoutFormatting) {\r\n return usd.toFixed(5);\r\n } else {\r\n return '$' + usd.toFixed(5);\r\n }\r\n }\r\n}\r\n\r\nexport function largeNumber(val) {\r\n val = parseFloat(val);\r\n\r\n if (val >= 1000000000000) {\r\n return addCommas(+(val / 1000000000000).toFixed(0)) + ' T';\r\n } else if (val >= 1000000000) {\r\n return addCommas(+(val / 1000000000).toFixed(3)) + ' B';\r\n } else if (val >= 1000000) {\r\n return addCommas(+(val / 1000000).toFixed(3)) + ' M';\r\n } else {\r\n return addCommas(+val.toFixed(3));\r\n }\r\n}\r\n\r\nexport function popupCenter(url, title, w, h) {\r\n /* istanbul ignore next */\r\n const dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : window.screenX;\r\n\r\n /* istanbul ignore next */\r\n const dualScreenTop = window.screenTop != undefined ? window.screenTop : window.screenY;\r\n\r\n /* istanbul ignore next */\r\n const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;\r\n\r\n /* istanbul ignore next */\r\n const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;\r\n\r\n const systemZoom = width / window.screen.availWidth;\r\n const left = (width - w) / 2 / systemZoom + dualScreenLeft\r\n const top = (height - h) / 2 / systemZoom + dualScreenTop\r\n const newWindow = window.open(url, title, 'scrollbars=yes, width=' + w / systemZoom + ', height=' + h / systemZoom + ', top=' + top + ', left=' + left);\r\n\r\n if (newWindow?.focus) {\r\n newWindow.focus();\r\n }\r\n\r\n return newWindow;\r\n}\r\n\r\n\r\nexport function tryParse(json: any) {\r\n try {\r\n return JSON.parse(json);\r\n } catch (err) {\r\n return null;\r\n }\r\n}\r\n\r\nexport function toFixedNoRounding(number, n) {\r\n // Ref: https://helloacm.com/javascripts-tofixed-implementation-without-rounding/\r\n // make 3 digits without rounding e.g. 3.1499 => 3.149 and 3.1 => 3.100 \r\n const reg = new RegExp('^-?\\\\d+(?:\\\\.\\\\d{0,' + n + '})?', 'g')\r\n const a = number.toString().match(reg)[0];\r\n const dot = a.indexOf('.');\r\n if (dot === -1) { // integer, insert decimal dot and pad up zeros\r\n return a + '.' + '0'.repeat(n);\r\n }\r\n const b = n - (a.length - dot) + 1;\r\n /* istanbul ignore next */\r\n return b > 0 ? (a + '0'.repeat(b)) : a;\r\n}\r\n\r\nexport function createTransaction(username: string, contractName: string, contractAction: string, payload: any, title: string, successKey: string, errorKey: string) {\r\n return new Promise((resolve) => {\r\n const transactionData = {\r\n contractName: `${contractName}`,\r\n contractAction: `${contractAction}`,\r\n contractPayload: payload\r\n };\r\n \r\n if (window.hive_keychain) {\r\n window.hive_keychain.requestCustomJson(username, environment.chainId, 'Active', JSON.stringify(transactionData), title, async (response) => {\r\n if (response.success && response.result) {\r\n try {\r\n const transaction = await checkTransaction(response.result.id, 3); \r\n const toast = new ToastMessage();\r\n \r\n toast.message = i18n.tr(successKey, {\r\n ns: 'notifications'\r\n });\r\n \r\n toastService.success(toast);\r\n \r\n resolve(transaction);\r\n } catch (e) {\r\n /* istanbul ignore next */\r\n const toast = new ToastMessage();\r\n \r\n /* istanbul ignore next */\r\n toast.message = i18n.tr(errorKey, {\r\n ns: 'notifications'\r\n });\r\n \r\n /* istanbul ignore next */\r\n toastService.error(toast);\r\n \r\n /* istanbul ignore next */\r\n resolve(false);\r\n }\r\n } else {\r\n resolve(false);\r\n }\r\n });\r\n } else {\r\n /* istanbul ignore next */\r\n hiveSignerJson(username, 'active', transactionData, () => {\r\n resolve(true);\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport function sleep(wait = 1000) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, wait);\r\n });\r\n}\r\n\r\n/* istanbul ignore next */\r\nexport function trimUsername(username) {\r\n if (username)\r\n username = trim(username, '@');\r\n\r\n return username;\r\n}\r\n\r\nexport async function getPrices() {\r\n try {\r\n const request = await http.fetch(`https://api.coingecko.com/api/v3/simple/price?ids=HIVE&vs_currencies=USD`, {\r\n headers: {\r\n 'Origin': 'https://dswap.trade',\r\n 'Referer': 'https://dswap.trade/?p=conversion_history',\r\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'\r\n }\r\n });\r\n\r\n return request.json();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nexport async function getPeggedTokenPriceByChain(chain: Chain) {\r\n let price: number;\r\n if (chain === Chain.Hive) {\r\n const response = await getPrices();\r\n price = response.hive.usd;\r\n } else if (chain === Chain.Steem) {\r\n //symbol = environment.marketMakerFeeToken_SE;\r\n }\r\n\r\n return price;\r\n}\r\n\r\nexport async function getHivePrice() {\r\n try {\r\n const response = await getPrices();\r\n\r\n window.hive_price = parseFloat(response.hive.usd);\r\n\r\n return window.hive_price;\r\n } catch {\r\n window.hive_price = 0;\r\n\r\n return 0;\r\n }\r\n}\r\n\r\nexport async function totalStakeRequiredToAddMarket(marketMakerUser: IMarketMakerUser) {\r\n let stakeRequired = environment.marketMakerStakeRequiredPerMarket;\r\n\r\n if (marketMakerUser.isPremium) {\r\n stakeRequired += environment.marketMakerStakeRequiredPremium + (marketMakerUser.markets * environment.marketMakerStakeRequiredPerMarket)\r\n } else {\r\n stakeRequired += marketMakerUser.markets * environment.marketMakerStakeRequiredPerMarket\r\n }\r\n\r\n return stakeRequired;\r\n}\r\n\r\nexport async function totalStakeRequiredToEnableMarket(marketMakerUser: IMarketMakerUser) {\r\n let stakeRequired = environment.marketMakerStakeRequiredPerMarket;\r\n\r\n if (marketMakerUser.isPremium) {\r\n stakeRequired = environment.marketMakerStakeRequiredPremium + (marketMakerUser.markets * environment.marketMakerStakeRequiredPerMarket)\r\n } \r\n\r\n return stakeRequired;\r\n}\r\n\r\nexport async function getDswapChains() {\r\n let chains: IDSwapChain[] = [];\r\n chains.push({ id: Chain.Hive, name: \"Hive Engine\", name_short: \"Hive\" });\r\n chains.push({ id: Chain.Steem, name: \"Steem Engine\", name_short: \"Steem\" });\r\n\r\n return chains;\r\n}\r\n\r\nexport async function getFeeTokenSymbolByChain(chain: Chain) {\r\n let symbol: string;\r\n if (chain === Chain.Hive) {\r\n symbol = environment.marketMakerFeeToken;\r\n } else if (chain === Chain.Steem) {\r\n symbol = environment.marketMakerFeeToken_SE;\r\n }\r\n\r\n return symbol;\r\n}\r\n\r\nexport async function getPeggedTokenSymbolByChain(chain: Chain) {\r\n let symbol: string;\r\n if (chain === Chain.Hive) {\r\n symbol = environment.peggedToken;\r\n } else if (chain === Chain.Steem) {\r\n symbol = environment.peggedToken_SE;\r\n }\r\n\r\n return symbol;\r\n}\r\n\r\nexport async function getChainByState(state: IState) {\r\n let chainId: any;\r\n if (state) {\r\n if (state.loggedIn && state.account.dswapChainId) {\r\n chainId = state.account.dswapChainId;\r\n } else if (state.dswapChainId) {\r\n chainId = state.dswapChainId;\r\n } else {\r\n chainId = DefaultChainId;\r\n }\r\n } else {\r\n chainId = DefaultChainId;\r\n } \r\n return chainId;\r\n}\r\n\r\nexport async function getBlockExplorerByChain(chain: Chain) {\r\n let symbol: string;\r\n if (chain === Chain.Hive) {\r\n symbol = environment.BLOCK_EXPLORER_HE;\r\n } else if (chain === Chain.Steem) {\r\n symbol = environment.BLOCK_EXPLORER_SE;\r\n }\r\n\r\n return symbol;\r\n}\r\n\r\nexport function getSwapStatusById(swapStatusId: number) {\r\n let swapStatusName = \"\";\r\n\r\n switch (swapStatusId) {\r\n case SwapStatus.Init:\r\n swapStatusName = \"Init\";\r\n break;\r\n case SwapStatus.InProgress:\r\n swapStatusName = \"In progress\";\r\n break;\r\n case SwapStatus.Failure:\r\n swapStatusName = \"Failure\";\r\n break;\r\n case SwapStatus.Success:\r\n swapStatusName = \"Success\";\r\n break; \r\n }\r\n\r\n return swapStatusName;\r\n}\r\n\r\nexport async function getSwapStepById(swapStepId: number) {\r\n let swapStepName = \"\";\r\n\r\n switch (swapStepId) {\r\n case SwapStep.ValidateSwapRequest:\r\n swapStepName = \"Validation\";\r\n break;\r\n case SwapStep.ConvertToSwapBaseToken:\r\n swapStepName = \"Convert to base token\";\r\n break;\r\n case SwapStep.ConvertToSwapOutput:\r\n swapStepName = \"Convert to output token\";\r\n break;\r\n case SwapStep.TransferToDestionationAccount:\r\n swapStepName = \"Transfer tokens to receiver\";\r\n break;\r\n }\r\n\r\n return swapStepName;\r\n}\r\n\r\nexport async function getSwapTokenByCrypto(crypto) {\r\n return \"SWAP.\" + crypto;\r\n}\r\n\r\nexport function getRandomID() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nexport function isPeggedToken(token: IToken) {\r\n return token.symbol.includes(\"SWAP\") || token.name.includes(\"Pegged\");\r\n}\r\n\r\nexport function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n}\r\n"],"sourceRoot":""}