{"version":3,"sources":["webpack:///./src/routes/faq/faq.ts?8c00","webpack:///./src/routes/dca/dca.ts"],"names":["module","exports","cb","require","DCA","dialogService","ts","store","toast","controllerFactory","i18n","taskQueue","ss","loading","loadingDCA","chartDataBuy","chartDataSell","dswapEnabled","dswapPaused","maxSlippageInputToken","maxSlippageOutputToken","dcaRecurrenceTypeAmount","dcaOrderNo","recurrenceTypeValues","this","validationController","createForCurrentScope","renderer","addRenderer","storeSubscription","state","subscribe","user","firebaseUser","loggedIn","symbol","transactionType","tokens","getDSwapTokens","Hive","refreshTokenLists","createValidationRules","buyTokenSymbol","buyTokenSelected","sellTokenSymbol","sellTokenSelected","activePageId","currentChainId","queueTask","call","$","selectpicker","marketMakerFeeToken","EXCHANGE_URL_HE","t","find","x","metadata","icon","endsWith","refreshSelectPicker","dswapDcaFee","dcaTradesActive","getActiveDCARequests","dcaTradesHistory","getHistoricalDCARequests","validationResult","validate","result","results","valid","message","tr","rule","messageKey","buyTokenAmount","sellTokenAmount","sellTokenBalance","sellToken","userBalance","balance","dcaTradeValueUsd","metrics","parseFloat","lastPriceUsd","ns","error","swapRequestDcaModel","Account","account","name","Chain","ChainTransactionId","TokenOutput","TokenInput","TokenInputAmount","SwapSourceId","DSWAP_SOURCE_ID","TokenInputMemo","RecurrenceType","recurrenceTypeValue","RecurrenceTypeAmount","OrderCount","open","viewModel","model","whenClosed","response","wasCancelled","loadDcaActive","buyTokens","sellTokens","filter","isCrypto","precision","buyToken","splice","indexOf","updateDcaSummary","chartRefBuy","detached","loadTokenHistoryData","attached","fillPeggedTokenMetrics","enrichTokensWithMetrics","getTokenBalance","calcUnitEstimateRate","token","loadUserBalances","getDSwapTokenBalances","tradePercentage","updateTradeValueUsd","tradeValueUsd","toFixed","getTokenSymbolToCheck","baseTokenSymbol","peggedTokenPrice","lastPrice","chartRefSell","console","log","percentage","ohlcData","slice","map","unix","timestamp","format","o","openPrice","h","highestPrice","l","lowestPrice","c","closePrice","num","fixed","re","RegExp","toString","match","tokenSymbol","tokenSymbolToCheck","tokenToCheck","dcaSellPerOrder","tradesActive","Init","InProgress","timestamp_month_name","CreatedAt","timestamp_day","timestamp_time","timestamp_year","SwapStatusName","SwapStatusId","dcaCancelRequests","d","Id","DCAId","CancelRequested","loadDCARequests","tradesHistory","Success","Failure","SuccessPartial","Cancelled","Expired","sortByStartDate","dcaId","dcaDetail","SwapRequests","DCARefunds","activateDcaButton","trade","button","removeClass","addClass","date","Date","getTime","array","sort","a","b","aDate","toDate","bDate","rules","ensure","required","withMessageKey","then","satisfies","value","object","addObject"],"mappings":"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","file":"app~c94864d7.a7fb2ac68d92389c9425.chunk.js","sourcesContent":["module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../../node_modules/ts-loader/index.js!./faq.ts\"));\n\t}, \"faq\");\n}","import { Redirect } from 'aurelia-router';\nimport { ToFixedValueConverter } from 'resources/value-converters/to-fixed';\nimport { Subscription } from 'rxjs';\nimport { customElement, autoinject, bindable, TaskQueue } from 'aurelia-framework';\nimport { DswapOrderDcaModal } from 'modals/dswap-order-dca';\nimport { DialogService } from 'aurelia-dialog';\nimport { Store, dispatchify } from 'aurelia-store';\nimport { ChartComponent } from 'components/chart/chart';\nimport { loadTokenMarketHistory, loadBuyBook, loadSellBook, loadTokens } from 'common/hive-engine-api';\nimport moment from 'moment';\nimport { getPrices, usdFormat, getChainByState, getPeggedTokenSymbolByChain, getSwapTokenByCrypto, getPeggedTokenPriceByChain, isNumeric, getSwapStatusById } from 'common/functions';\nimport { getCurrentFirebaseUser, getMarketMakerUser } from 'store/actions';\nimport { TokenService } from 'services/token-service';\nimport { ValidationControllerFactory, ControllerValidateResult, ValidationRules } from 'aurelia-validation';\nimport { ToastService, ToastMessage } from 'services/toast-service';\nimport { BootstrapFormRenderer } from 'resources/bootstrap-form-renderer';\nimport { I18N } from 'aurelia-i18n';\nimport { environment } from 'environment';\nimport { Chain, SwapStatus } from 'common/enums';\nimport { SwapService } from 'services/swap-service';\nimport { env } from 'process';\nimport { getDCACancelRequests, getSwapDCADetail, getSwapDCARequests } from 'common/dswap-api';\nimport { DswapSwapdetailsModal } from 'modals/dswap-swapdetails';\nimport { DswapOrderDcaCancelModal } from 'modals/dswap-order-dca-cancel';\n\n@autoinject()\n@customElement('dca')\nexport class DCA {\n public storeSubscription: Subscription;\n public state: IState;\n public buyTokens: IToken[];\n @bindable() sellTokens: IToken[];\n public buyTokenSymbol;\n public sellTokenSymbol;\n @bindable() sellTokenAmount;\n @bindable() buyTokenAmount;\n public buyToken : IToken;\n public sellToken : IToken;\n private unitEstimateRate;\n private tradeValueUsd;\n private loggedIn;\n @bindable() tradePercentage;\n @bindable() loading = false;\n @bindable() loadingDCA = false;\n \n private chartRefBuy: ChartComponent;\n private chartRefSell: ChartComponent;\n\n private chartDataBuy: any = {};\n private chartDataSell: any = {};\n private user;\n private validationController;\n private renderer; \n private dswapEnabled = false;\n private dswapPaused = false;\n private currentChainId;\n private baseTokenSymbol;\n private baseTokenAmount;\n private maxSlippageInputToken = 5.00;\n private maxSlippageOutputToken = 5.00;\n private recurrenceTypeValue;\n @bindable() dcaRecurrenceTypeAmount = 1;\n @bindable() dcaOrderNo = 2;\n private recurrenceTypeValues: string[] = [\"minute\", \"hour\", \"day\", \"week\", \"month\" ];\n private dcaSellPerOrder;\n private dswapDcaFee;\n @bindable() dcaTradesActive: ISwapRequestDCAViewModel[];\n @bindable() dcaTradesHistory: ISwapRequestDCAViewModel[];\n @bindable() dcaDetail: ISwapRequestDCADetailViewModel;\n\n constructor(private dialogService: DialogService, \n private ts: TokenService, \n private store: Store, \n private toast: ToastService, \n private controllerFactory: ValidationControllerFactory, \n private i18n: I18N,\n private taskQueue: TaskQueue,\n private ss: SwapService) {\n this.validationController = controllerFactory.createForCurrentScope();\n\n this.renderer = new BootstrapFormRenderer();\n this.validationController.addRenderer(this.renderer);\n this.storeSubscription = this.store.state.subscribe(state => {\n if (state) {\n this.state = state;\n \n this.user = { ...state.firebaseUser };\n this.loggedIn = state.loggedIn;\n }\n }); \n }\n\n async canActivate({ symbol, transactionType }) { \n try {\n if (!this.state.tokens) {\n await this.ts.getDSwapTokens(true, Chain.Hive);\n }\n await dispatchify(getCurrentFirebaseUser)();\n await dispatchify(getMarketMakerUser)();\n\n this.refreshTokenLists();\n this.createValidationRules();\n\n if (symbol && transactionType) {\n if (transactionType === \"buy\") {\n this.buyTokenSymbol = symbol;\n await this.buyTokenSelected();\n } else if (transactionType === \"sell\") {\n this.sellTokenSymbol = symbol;\n await this.sellTokenSelected();\n }\n }\n\n this.state.activePageId = \"dca\";\n this.currentChainId = await getChainByState(this.state); \n } catch {\n return new Redirect('');\n }\n }\n\n async refreshSelectPicker() {\n this.taskQueue.queueTask({\n call: () => $('.selectpicker').selectpicker(\"refresh\")\n }); \n }\n\n tokenImage(symbol) {\n if (symbol == environment.marketMakerFeeToken) {\n return environment.EXCHANGE_URL_HE + 'images/logo-small.png';\n } else {\n var t = this.state.tokens.find(x => x.symbol === symbol);\n if (t) {\n return t.metadata.icon.endsWith('.svg') ? t.metadata.icon : `https://images.hive.blog/0x0/${t.metadata.icon}`;\n }\n }\n }\n \n async attached() {\n this.refreshSelectPicker();\n this.dswapEnabled = environment.dswapEnabled;\n this.dswapPaused = environment.dswapPaused;\n this.dswapDcaFee = environment.dswapDcaFee + '%';\n this.dcaTradesActive = await this.getActiveDCARequests();\n this.dcaTradesHistory = await this.getHistoricalDCARequests();\n }\n\n async startTrade() {\n const validationResult: ControllerValidateResult = await this.validationController.validate();\n \n for (const result of validationResult.results) { \n if (!result.valid) {\n const toast = new ToastMessage();\n\n toast.message = this.i18n.tr(result.rule.messageKey, {\n buyTokenSymbol: this.buyTokenSymbol,\n sellTokenSymbol: this.sellTokenSymbol,\n buyTokenAmount: this.buyTokenAmount,\n sellTokenAmount: this.sellTokenAmount,\n sellTokenBalance: this.sellToken != null ? this.sellToken.userBalance.balance : \"\",\n dcaTradeValueUsd: this.sellToken != null && this.sellToken.metrics != null ? parseFloat(this.sellToken.metrics.lastPriceUsd) * this.sellTokenAmount : \"\",\n ns: 'errors' \n });\n \n this.toast.error(toast);\n }\n }\n\n if (validationResult.valid) {\n let swapRequestDcaModel: ISwapRequestDCAModel = {\n Account: this.state.account.name,\n Chain: Chain.Hive,\n ChainTransactionId: \"\",\n TokenOutput: this.buyTokenSymbol,\n TokenInput: this.sellTokenSymbol,\n TokenInputAmount: this.sellTokenAmount,\n SwapSourceId: environment.DSWAP_SOURCE_ID,\n TokenInputMemo: \"\",\n RecurrenceType: this.recurrenceTypeValue,\n RecurrenceTypeAmount: this.dcaRecurrenceTypeAmount,\n OrderCount: this.dcaOrderNo\n }; \n\n this.loading = true;\n this.dialogService.open({ viewModel: DswapOrderDcaModal, model: swapRequestDcaModel }).whenClosed(response => { \n this.loading = false;\n if (!response.wasCancelled) {\n this.loadDcaActive(); \n }\n });\n }\n }\n\n async refreshTokenLists(){\n if (!this.state.tokens) {\n await this.ts.getDSwapTokens(true, Chain.Hive);\n }\n\n this.buyTokens = [...this.state.tokens];\n this.sellTokens = [...this.state.tokens];\n\n // filter out crypto from buy token list for now\n // filter out 0 precision tokens to prevent loss\n this.buyTokens = this.buyTokens.filter(x => !x.isCrypto && x.precision != 0);\n this.sellTokens = this.sellTokens.filter(x => x.precision != 0);\n \n if (this.buyToken)\n this.sellTokens.splice(this.sellTokens.indexOf(this.sellTokens.find(x => x.symbol == this.buyToken.symbol)), 1);\n\n if (this.sellToken)\n this.buyTokens.splice(this.buyTokens.indexOf(this.buyTokens.find(x => x.symbol == this.sellToken.symbol)), 1);\n\n await this.refreshSelectPicker();\n }\n\n async calcUnitEstimateRate() {\n if (this.buyToken && this.sellToken) {\n //this.unitEstimateRate = (this.buyToken.metrics.lastPrice / this.sellToken.metrics.lastPrice).toFixed(8);\n\n //await this.updateTradeValueUsd(); \n }\n }\n\n async recurrenceTypeSelected(){\n\n }\n\n async sellTokenAmountChanged() {\n this.updateDcaSummary();\n }\n\n async buyTokenSelected() { \n if (this.chartRefBuy)\n this.chartRefBuy.detached();\n\n this.chartDataBuy = await this.loadTokenHistoryData(this.buyTokenSymbol);\n\n if (this.chartRefBuy)\n this.chartRefBuy.attached();\n \n this.buyToken = this.state.tokens.find(x => x.symbol == this.buyTokenSymbol);\n this.fillPeggedTokenMetrics(this.buyToken);\n this.refreshTokenLists();\n\n if (!this.buyToken.metrics) {\n await this.ts.enrichTokensWithMetrics([this.buyToken], [this.buyToken.symbol], Chain.Hive);\n }\n\n if (!this.buyToken.userBalance)\n await this.getTokenBalance(this.buyToken);\n\n if (this.buyTokenAmount && this.buyTokenAmount > 0)\n this.buyTokenAmount = 0;\n \n await this.calcUnitEstimateRate(); \n }\n\n async getTokenBalance(token) { \n if (!token || !token.loadUserBalances) {\n await this.ts.getDSwapTokenBalances(Chain.Hive);\n } \n }\n\n async tradePercentageChanged(){\n if (this.buyToken && this.sellToken) {\n this.sellTokenAmount = (this.tradePercentage / 100) * this.sellToken.userBalance.balance;\n\n await this.updateTradeValueUsd();\n }\n }\n\n async dcaRecurrenceTypeAmountChanged(){\n this.updateDcaSummary();\n }\n\n async dcaOrderNoChanged() {\n this.updateDcaSummary();\n }\n\n async updateTradeValueUsd() {\n if (this.sellToken.metrics)\n this.tradeValueUsd = (this.sellTokenAmount * parseFloat(this.sellToken.metrics.lastPriceUsd)).toFixed(4);\n }\n\n async fillPeggedTokenMetrics(token) {\n let symbolToCheck = await this.getTokenSymbolToCheck(token.symbol);\n if (symbolToCheck == this.baseTokenSymbol) {\n let peggedTokenPrice = await getPeggedTokenPriceByChain(this.currentChainId);\n token.metrics = { lastPriceUsd: peggedTokenPrice, lastPrice: peggedTokenPrice };\n }\n }\n\n async sellTokenSelected() {\n if (this.chartRefSell)\n this.chartRefSell.detached();\n\n this.chartDataSell = await this.loadTokenHistoryData(this.sellTokenSymbol);\n\n if (this.chartRefSell)\n this.chartRefSell.attached();\n \n this.sellToken = this.state.tokens.find(x => x.symbol == this.sellTokenSymbol);\n\n if (!this.sellToken.metrics) {\n await this.ts.enrichTokensWithMetrics([this.sellToken], [this.sellToken.symbol], Chain.Hive);\n }\n\n console.log(this.sellToken);\n this.fillPeggedTokenMetrics(this.sellToken);\n this.refreshTokenLists();\n\n if (!this.sellToken.userBalance)\n await this.getTokenBalance(this.sellToken);\n\n if (this.sellTokenAmount && this.sellTokenAmount > 0)\n this.sellTokenAmount = 0;\n\n await this.calcUnitEstimateRate(); \n }\n\n async slideTo(percentage) {\n this.tradePercentage = percentage;\n }\n\n async loadTokenHistoryData(token) {\n const tokenHistory = await loadTokenMarketHistory(token);\n const limitCandleStick = 30; // show last 30 days\n\n const candleStickData = tokenHistory.slice(0, limitCandleStick).map(x => {\n return {\n t: moment.unix(x.timestamp).format('YYYY-MM-DD HH:mm:ss'), //x.timestamp * 1000,\n o: x.openPrice,\n h: x.highestPrice,\n l: x.lowestPrice,\n c: x.closePrice,\n };\n });\n\n return { ohlcData: candleStickData };\n }\n\n public toFixed(num, fixed) {\n var re = new RegExp('^-?\\\\d+(?:\\.\\\\d{0,' + (fixed || -1) + '})?');\n return num.toString().match(re)[0];\n }\n\n async getTokenSymbolToCheck(tokenSymbol) {\n let tokenSymbolToCheck = tokenSymbol;\n let tokenToCheck = this.state.tokens.find(x => x.symbol == tokenSymbol);\n if (tokenToCheck && tokenToCheck.isCrypto)\n tokenSymbolToCheck = getSwapTokenByCrypto(tokenSymbol);\n\n return tokenSymbolToCheck;\n }\n\n updateDcaSummary() {\n this.dcaSellPerOrder = this.sellTokenAmount / this.dcaOrderNo;\n }\n\n // DCA overview & history\n async getActiveDCARequests(){ \n this.loadingDCA = true;\n let tradesActive = await getSwapDCARequests(this.state.account.name, 100, 0, [SwapStatus.Init, SwapStatus.InProgress]);\n for (let t of tradesActive) {\n t.timestamp_month_name = moment(t.CreatedAt).format('MMMM');\n t.timestamp_day = moment(t.CreatedAt).format('DD');\n t.timestamp_time = moment(t.CreatedAt).format('HH:mm');\n t.timestamp_year = moment(t.CreatedAt).format('YYYY');\n t.SwapStatusName = await getSwapStatusById(t.SwapStatusId);\n }\n\n let dcaCancelRequests = await getDCACancelRequests(this.state.account.name, SwapStatus.Init);\n for (let t of tradesActive) {\n for (let d of dcaCancelRequests) {\n if (t.Id == d.DCAId) {\n t.CancelRequested = true;\n }\n }\n }\n\n this.loadingDCA = false;\n \n return tradesActive;\n }\n\n async refreshDcaOverview(){\n this.loadingDCA = true;\n await this.loadDCARequests();\n this.loadingDCA = false;\n }\n\n async getHistoricalDCARequests(){\n this.loadingDCA = true;\n let tradesHistory = await getSwapDCARequests(this.state.account.name, 100, 0, [SwapStatus.Success, SwapStatus.Failure, SwapStatus.SuccessPartial, SwapStatus.Cancelled, SwapStatus.Expired]);\n for (let t of tradesHistory) {\n t.timestamp_month_name = moment(t.CreatedAt).format('MMMM');\n t.timestamp_day = moment(t.CreatedAt).format('DD');\n t.timestamp_time = moment(t.CreatedAt).format('HH:mm');\n t.timestamp_year = moment(t.CreatedAt).format('YYYY');\n t.SwapStatusName = await getSwapStatusById(t.SwapStatusId);\n }\n \n this.loadingDCA = false;\n return this.sortByStartDate(tradesHistory);\n }\n\n async loadDcaData(dcaId) {\n let dcaDetail = await getSwapDCADetail(dcaId);\n if (dcaDetail.SwapRequests){\n for (let t of dcaDetail.SwapRequests) {\n t.timestamp_month_name = moment(t.CreatedAt).format('MMMM');\n t.timestamp_day = moment(t.CreatedAt).format('DD');\n t.timestamp_time = moment(t.CreatedAt).format('HH:mm');\n t.timestamp_year = moment(t.CreatedAt).format('YYYY');\n t.SwapStatusName = await getSwapStatusById(t.SwapStatusId);\n } \n }\n\n if (dcaDetail.DCARefunds) {\n for (let t of dcaDetail.DCARefunds) {\n t.timestamp_month_name = moment(t.CreatedAt).format('MMMM');\n t.timestamp_day = moment(t.CreatedAt).format('DD');\n t.timestamp_time = moment(t.CreatedAt).format('HH:mm');\n t.timestamp_year = moment(t.CreatedAt).format('YYYY');\n t.SwapStatusName = await getSwapStatusById(t.SwapStatusId);\n } \n }\n this.dcaDetail = dcaDetail; \n \n this.activateDcaButton('details'+dcaId);\n }\n\n viewSwapDetails(trade) {\n this.dialogService.open({ viewModel: DswapSwapdetailsModal, model: trade }).whenClosed(response => {\n console.log(response);\n });\n }\n\n activateDcaButton(button) {\n $(\".btn-dca\").removeClass(\"active\");\n $(\"#btn-dca-\"+button).addClass(\"active\");\n }\n\n dcaCancel(trade) {\n this.dialogService.open({ viewModel: DswapOrderDcaCancelModal, model: trade }).whenClosed(response => {\n console.log(response);\n if (!response.wasCancelled) {\n this.loadDCARequests();\n }\n });\n }\n\n async loadDcaActive() {\n this.dcaTradesActive = await this.getActiveDCARequests();\n }\n\n async loadDcaHistory() {\n this.dcaTradesHistory = await this.getHistoricalDCARequests();\n }\n\n async loadDCARequests(){\n this.dcaTradesActive = await this.getActiveDCARequests();\n this.dcaTradesHistory = await this.getHistoricalDCARequests();\n }\n\n async refreshMyBalances(){\n this.loading = true;\n await this.ts.getDSwapTokenBalances(Chain.Hive, true);\n this.loading = false;\n }\n\n private getTime(date?: Date) {\n return date != null ? new Date(date).getTime() : 0;\n }\n \n public sortByStartDate(array: ISwapRequestDCAViewModel[]): ISwapRequestDCAViewModel[] {\n return array.sort((a: ISwapRequestDCAViewModel, b: ISwapRequestDCAViewModel) => {\n let aDate:Date = moment(a.CreatedAt,\"YYYY-MM-DD HH:mm\").toDate();//.format(\"YYYY-MM-DD HH:mm\");\n let bDate:Date = moment(b.CreatedAt,\"YYYY-MM-DD HH:mm\").toDate();//.format(\"YYYY-MM-DD HH:mm\");\n return this.getTime(bDate) - this.getTime(aDate);\n });\n }\n\n private createValidationRules() {\n const rules = ValidationRules\n .ensure('buyTokenSymbol')\n .required()\n .withMessageKey('errors:dashboardBuyTokenSymbolRequired')\n .ensure('sellTokenSymbol')\n .required()\n .withMessageKey('errors:dashboardSellTokenSymbolRequired') \n .ensure('sellTokenAmount')\n .required()\n .withMessageKey(\"errors:dashboardSellTokenAmountRequired\")\n .then()\n .ensure('sellTokenAmount').satisfies((value: any, object: any) => parseFloat(value) > 0)\n .withMessageKey('errors:dashboardAmountMustBeGreaterThanZero')\n .ensure('dcaRecurrenceTypeAmount')\n .required()\n .withMessageKey(\"errors:dcaRecurrenceTypeAmountRequired\")\n .then()\n .ensure('dcaRecurrenceTypeAmount').satisfies((value: any, object: any) => { \n if (parseFloat(value) > 0) \n return true; \n\n return false;\n })\n .withMessageKey('errors:dcaRecurrenceTypeAmountRanges') \n .ensure('dcaOrderNo')\n .required()\n .withMessageKey(\"errors:dcaOrderNoRequired\")\n .then()\n .ensure('dcaOrderNo').satisfies((value: any, object: any) => {\n if (parseFloat(value) >= 2 && parseFloat(value) <= 20){\n return true;\n }\n\n return false;\n }).withMessageKey('errors:dcaOrderNoRanges').then() \n .satisfies((value: any, object: any) => {\n if (this.sellToken.isCrypto || parseFloat(this.sellTokenAmount) <= this.sellToken.userBalance.balance){ \n return true;\n }\n\n return false;\n }).withMessageKey('errors:dashboardInsufficientBalance').then()\n .satisfies((value: any, object: any) => {\n if(parseFloat(this.sellToken.metrics.lastPriceUsd) * this.sellTokenAmount < 1) {\n return false;\n };\n return true;\n }).withMessageKey('errors:dcaMinimumOrderValueUsd')\n .rules;\n\n this.validationController.addObject(this, rules);\n }\n}\n\n\n"],"sourceRoot":""}