{"version":3,"sources":["webpack:///./src/components/chart/chart.ts","webpack:///./src/components/chart/chart.html","webpack:///./src/common/ssc-se.ts","webpack:///./src/common/ssc.ts","webpack:///./src/common/steem-engine-api.ts"],"names":["DefaultChartOptions","options","animation","legend","display","steppedLine","responsive","maintainAspectRatio","scales","yAxes","ticks","beginAtZero","plugins","zoom","pan","enabled","mode","ChartComponent","element","taskQueue","created","iteration","loading","type","data","iconWallet","this","queueMicroTask","createChart","chart","destroy","chartCandle","chartType","datasets","label","ohlcData","onComplete","event","createCustomEvent","bubbles","dispatchEvent","getOptionsOfChartType","chartRef","refreshChart","chartRefCandle","update","resize","Element","module","exports","sscse","RPC_URL_SE","ssc","RPC_URL","async","checkTransactionSE","trxId","retries","Promise","resolve","reject","getTransactionInfo","err","result","logs","JSON","parse","errors","length","error","e","Error","t","setTimeout","loadTokenMetricsSE","symbols","limit","offset","queryConfig","symbol","$in","metrics","results","find","res","push","loadUserBalancesSE","account","balances","loadTokensSE","index","descending","tokens"],"mappings":"qsBASA,MAAMA,EAAsB,CACxBC,QAAS,CACLC,UAAW,GACXC,OAAQ,CACJC,SAAS,GAEbC,aAAa,EACbC,YAAY,EACZC,qBAAqB,EACrBC,OAAQ,CACJC,MAAO,CAAC,CACJC,MAAO,CACHC,aAAa,MAKzBC,QAAS,CACLC,KAAM,CAEFC,IAAK,CAEDC,SAAS,EAITC,KAAM,MAIVH,KAAM,CAEFE,SAAS,EAITC,KAAM,UAS1B,gBAAaC,EAAb,MAcI,YAAoBC,EAA0BC,GAA1B,KAAAD,UAA0B,KAAAC,YATtC,KAAAC,SAAU,EACV,KAAAC,UAAY,EAEV,KAAAC,SAAU,EACV,KAAAC,KAAO,cACP,KAAAtB,QAAe,GACf,KAAAuB,KAAY,GACZ,KAAAC,WAAa,IAMvB,WACIC,KAAKP,UAAUQ,eAAe,KAE1BD,KAAKE,YAAY,eAEjBF,KAAKN,SAAU,IAIvB,cACIM,KAAKL,WAAa,EAItB,WACQK,KAAKG,OACLH,KAAKG,MAAMC,UAEXJ,KAAKK,aACLL,KAAKK,YAAYD,UAErBJ,KAAKN,SAAU,EAGnB,sBAAsBY,GAClB,MAAM/B,EAAU,IAAKyB,KAAKzB,WAAYD,GAwBtC,OAtBAC,EAAQsB,KAAOS,EACXN,KAAKF,OAEDvB,EAAQuB,KADK,QAAbQ,EACeN,KAAKF,KAEL,CACXS,SAAU,CAAC,CACPC,MAAO,QACPV,KAAME,KAAKF,KAAKW,aAMhClC,EAAQA,QAAQC,UAAUkC,WAAa,KACnC,MAAMC,EAAQ,IAAIC,kBAAkB,WAAY,CAC5CC,SAAS,IAGbb,KAAKR,QAAQsB,cAAcH,IAGxBpC,EAGX,YAAY+B,GACR,MAAM/B,EAAUyB,KAAKe,sBAAsBT,GAC1B,QAAbA,GACAN,KAAKG,MAAQ,IAAI,IAAMH,KAAKgB,SAAUzC,GACtCyB,KAAKiB,aAAajB,KAAKG,SAGvBH,KAAKK,YAAc,IAAI,IAAML,KAAKkB,eAAgB3C,GAClDyB,KAAKiB,aAAajB,KAAKK,cAI/B,aAAaF,GACTA,EAAMgB,SACNhB,EAAMiB,SAGV,aAAavB,GACTG,KAAKH,KAAOA,EAGhB,kBACQG,KAAKN,SAELM,KAAKiB,aAAajB,KAAKK,eAGnC,OAzFc,GAAT,I,uDACS,GAAT,I,oDACS,GAAT,I,uDACS,GAAT,I,oDACS,GAAT,I,0DAZQd,EAAc,GAF1B,cACA,YAAc,S,uBAekB8B,QAA4B,OAdhD9B,GAiGb,GAjGA,I,8CCtDA+B,EAAOC,QAAU,mgBAAihB,EAAQ,QAA0C,saAAgb,EAAQ,QAAmC,svC,kCCA/iC,8DAGO,MAAMC,EAAQ,IAHrB,OAGyB,GAAI,IAAYC,a,kCCHzC,8DAGO,MAAMC,EAAM,IAHnB,OAGuB,GAAI,IAAYC,U,kCCAvC,sMAMa,IAAI,IAsCVC,eAAeC,EAAmBC,EAAeC,GACpD,IACI,YAzB0B,CAACD,GAC/B,IAAIE,QAAQ,CAACC,EAASC,KAClB,IAAMC,mBAAmBL,EAAOF,MAAOQ,EAAKC,KACxC,GAAIA,EAAQ,CACR,GAAIA,EAAOC,KAAM,CACb,MAAMA,EAAOC,KAAKC,MAAMH,EAAOC,MAE3BA,EAAKG,QAAUH,EAAKG,OAAOC,OAAS,GACpCT,EAAQ,IACDI,EACHI,OAAQH,EAAKG,OACbE,MAAOL,EAAKG,OAAO,KAK/BR,EAAQI,QAERH,EAAOE,OAOFD,CAAmBL,GAClC,MAAOc,GACL,KAAIb,EAAU,GASV,MAAM,IAAIc,MAAM,gCAtCdC,EA8BU,IA9BL,IAAId,QAAQC,GAAWc,WAAWd,EAASa,KAgClD,IACI,aAAajB,EAAmBC,EAAOC,EAAU,GACnD,MAAOa,GACL,aAAaf,EAAmBC,EAAOC,EAAU,IAnCnDe,MA+DPlB,eAAeoB,EAAmBC,EAAU,GAAIC,EAAQ,IAAMC,EAAS,GAC1E,MAAMC,EAAmB,GAErBH,EAAQP,SACRU,EAAYC,OAAS,CAAEC,IAAKL,IAGhC,IAAIM,EAAU,GACd,MAAMC,QAAgB,IAAMC,KAAK,SAAU,UAAWL,GAEtD,IAAK,MAAMM,KAAOF,EACdD,EAAQI,KAAK,YAA+BD,IAGhD,OAAOH,EAqBJ3B,eAAegC,EAAmBC,EAAiBZ,EAAU,GAAIC,EAAQ,IAAMC,EAAS,GAC3F,MAAMC,EAAmB,GACzBA,EAAYC,OAAS,CAAEC,IAAKL,GAC5BG,EAAYS,QAAUA,EAEtB,MAAML,QAAuB,IAAMC,KAAK,SAAU,WAAYL,EAAaF,EAAOC,EAAQ,IAAI,GAC9F,IAAIW,EAAuB,GAC3B,IAAK,MAAMJ,KAAOF,EACdM,EAASH,KAAK,YAA2BD,IAG7C,OAAOI,EAGJlC,eAAemC,EAAad,EAAU,GAAIC,EAAQ,GAAIC,EAAS,GAClE,MAAMC,EAAmB,GAErBH,EAAQP,SACRU,EAAYC,OAAS,CAAEC,IAAKL,IAGhC,MAAMO,QAAuB,IAAMC,KAAK,SAAU,SAAUL,EAAaF,EAAOC,EAAQ,CAAC,CAAEa,MAAO,SAAUC,YAAY,KACxH,IAAIC,EAAmB,GAEvB,IAAK,MAAMR,KAAOF,EACdU,EAAOP,KAAK,YAAuBD,IAGvC,OAAOQ","file":"app~a41c7baa.38d2e82b79bee0154d11.chunk.js","sourcesContent":["import { customElement, bindable, TaskQueue, autoinject, DOM } from 'aurelia-framework';\r\n\r\nimport Chart from 'chart.js';\r\nimport './../../../custom_scripts/chartjs-chart-financial/scale.financialLinear.js';\r\nimport './../../../custom_scripts/chartjs-chart-financial/controller.candlestick.js';\r\nimport { faWallet } from '@fortawesome/pro-duotone-svg-icons'\r\nimport 'hammerjs'\r\nimport 'chartjs-plugin-zoom'\r\n\r\nconst DefaultChartOptions = {\r\n options: {\r\n animation: {},\r\n legend: {\r\n display: false\r\n },\r\n steppedLine: true,\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n scales: {\r\n yAxes: [{\r\n ticks: {\r\n beginAtZero: false//,\r\n //max: 100000\r\n }\r\n }]\r\n },\r\n plugins: {\r\n zoom: {\r\n // Container for pan options\r\n pan: {\r\n // Boolean to enable panning\r\n enabled: true,\r\n\r\n // Panning directions. Remove the appropriate direction to disable \r\n // Eg. 'y' would only allow panning in the y direction\r\n mode: 'xy'\r\n },\r\n\r\n // Container for zoom options\r\n zoom: {\r\n // Boolean to enable zooming\r\n enabled: true,\r\n\r\n // Zooming directions. Remove the appropriate direction to disable \r\n // Eg. 'y' would only allow zooming in the y direction\r\n mode: 'xy',\r\n }\r\n }\r\n }\r\n } \r\n};\r\n\r\n@autoinject()\r\n@customElement('chart')\r\nexport class ChartComponent {\r\n private chartRef: HTMLCanvasElement;\r\n private chartRefCandle: HTMLCanvasElement;\r\n public chart;\r\n public chartCandle;\r\n private created = false; \r\n private iteration = 1; \r\n\r\n @bindable loading = false;\r\n @bindable type = 'candlestick';\r\n @bindable options: any = {};\r\n @bindable data: any = {};\r\n @bindable iconWallet = faWallet;\r\n\r\n constructor(private element: Element, private taskQueue: TaskQueue) {\r\n\r\n }\r\n\r\n attached() {\r\n this.taskQueue.queueMicroTask(() => {\r\n // this.createChart('line');\r\n this.createChart('candlestick');\r\n\r\n this.created = true;\r\n });\r\n }\r\n\r\n dataChanged() {\r\n this.iteration += 1;\r\n //this.loading = (this.iteration === 2);\r\n }\r\n\r\n detached() {\r\n if (this.chart)\r\n this.chart.destroy();\r\n\r\n if (this.chartCandle)\r\n this.chartCandle.destroy();\r\n\r\n this.created = false;\r\n }\r\n\r\n getOptionsOfChartType(chartType) {\r\n const options = { ...this.options, ...DefaultChartOptions };\r\n\r\n options.type = chartType;\r\n if (this.data) {\r\n if (chartType == 'line') {\r\n options.data = this.data;\r\n } else { \r\n options.data = {\r\n datasets: [{\r\n label: 'DSwap',\r\n data: this.data.ohlcData\r\n }]\r\n }; \r\n }\r\n }\r\n\r\n options.options.animation.onComplete = () => {\r\n const event = DOM.createCustomEvent('complete', {\r\n bubbles: true\r\n });\r\n\r\n this.element.dispatchEvent(event);\r\n };\r\n\r\n return options;\r\n }\r\n\r\n createChart(chartType) {\r\n const options = this.getOptionsOfChartType(chartType); \r\n if (chartType == 'line') {\r\n this.chart = new Chart(this.chartRef, options);\r\n this.refreshChart(this.chart);\r\n }\r\n else { \r\n this.chartCandle = new Chart(this.chartRefCandle, options); \r\n this.refreshChart(this.chartCandle);\r\n }\r\n }\r\n\r\n refreshChart(chart) {\r\n chart.update();\r\n chart.resize();\r\n }\r\n\r\n setChartType(type) {\r\n this.type = type;\r\n }\r\n\r\n propertyChanged() {\r\n if (this.created) {\r\n //this.refreshChart(this.chart);\r\n this.refreshChart(this.chartCandle);\r\n }\r\n }\r\n}\r\n","module.exports = \"\\r\\n\";","import { environment } from 'environment';\r\nimport SSC from 'sscjs';\r\n\r\nexport const sscse = new SSC(environment.RPC_URL_SE);\r\n","import { environment } from 'environment';\r\nimport SSC from 'sscjs';\r\n\r\nexport const ssc = new SSC(environment.RPC_URL);\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 { sscse } from './ssc-se';\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 sscse.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 checkTransactionSE(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 checkTransactionSE(trxId, retries - 1);\r\n } catch (e) {\r\n return await checkTransactionSE(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 loadCoinsSE(): Promise {\r\n const url = `${environment.CONVERTER_API_SE}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 loadCoinPairsSE(): Promise {\r\n const url = `${environment.CONVERTER_API_SE}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 loadTokenMetricsSE(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 sscse.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 loadTokenMarketHistorySE(symbol: string, timestampStart?: string, timestampEnd?: string): Promise {\r\n let url = `${environment.HISTORY_API_SE}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 loadUserBalancesSE(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 sscse.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 loadTokensSE(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 const results: any[] = await sscse.find('tokens', 'tokens', queryConfig, limit, offset, [{ index: 'symbol', descending: false }]);\r\n let tokens: IToken[] = [];\r\n\r\n for (const res of results) {\r\n tokens.push(mapTokenResultToIToken(res));\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nexport async function getScotConfigForAccountSE(account: string) {\r\n try {\r\n const result = await http.fetch(`${environment.SCOT_API_SE}@${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 loadAccountHistorySE(account: string, symbol?: string, timestampStart?: string, timestampEnd?: string, limit?: number, offset?: number): Promise {\r\n let url = `${environment.HISTORY_API_SE}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"],"sourceRoot":""}