{"version":3,"file":"coingecko.service-721f1974.js","sources":["../../node_modules/date-fns/esm/fromUnixTime/index.js","../../node_modules/date-fns/esm/getTime/index.js","../../node_modules/date-fns/esm/getUnixTime/index.js","../../node_modules/date-fns/esm/startOfHour/index.js","../../src/components/_global/BalChart/BalChart.vue","../../src/services/coingecko/api/price.service.ts","../../src/services/coingecko/coingecko.client.ts","../../src/services/coingecko/coingecko.service.ts"],"sourcesContent":["import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp (in seconds). Decimal values will be discarded.\n *\n * @param {Number} unixTime - the given Unix timestamp (in seconds)\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * const result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n requiredArgs(1, arguments);\n var unixTime = toInteger(dirtyUnixTime);\n return toDate(unixTime * 1000);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * const result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n return timestamp;\n}","import getTime from \"../getTime/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * const result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n requiredArgs(1, arguments);\n return Math.floor(getTime(dirtyDate) / 1000);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setMinutes(0, 0, 0);\n return date;\n}","\n\n\n \n \n \n \n
\n\n","import { fromUnixTime, getUnixTime, startOfHour } from 'date-fns';\nimport { groupBy, invert, last } from 'lodash';\n\nimport { twentyFourHoursInSecs } from '@/composables/useTime';\nimport { TOKENS } from '@/constants/tokens';\nimport { getAddressFromPoolId } from '@/lib/utils';\nimport { retryPromiseWithDelay } from '@/lib/utils/promise';\nimport { configService as _configService } from '@/services/config/config.service';\n\nimport { CoingeckoClient } from '../coingecko.client';\nimport { CoingeckoService, getPlatformId } from '../coingecko.service';\nimport { getAddress } from '@ethersproject/address';\n\n/**\n * TYPES\n */\nexport interface HistoricalPriceResponse {\n market_caps: number[][];\n prices: number[][];\n total_volumes: number[][];\n}\nexport type HistoricalPrices = { [timestamp: string]: number[] };\n\nexport class PriceService {\n client: CoingeckoClient;\n fiatParam: string;\n appNetwork: string;\n platformId: string;\n\n constructor(\n service: CoingeckoService,\n private readonly configService = _configService\n ) {\n this.client = service.client;\n this.fiatParam = service.supportedFiat;\n this.appNetwork = this.configService.network.key;\n this.platformId = getPlatformId(this.appNetwork);\n }\n\n async getTokensHistorical(\n addresses: string[],\n days: number,\n addressesPerRequest = 1,\n aggregateBy: 'hour' | 'day' = 'day'\n ): Promise {\n try {\n if (addresses.length / addressesPerRequest > 10)\n throw new Error('To many requests for rate limit.');\n\n const now = Math.floor(Date.now() / 1000);\n const end =\n aggregateBy === 'hour' ? now : now - (now % twentyFourHoursInSecs);\n const start = end - days * twentyFourHoursInSecs;\n\n addresses = addresses\n .map(getAddressFromPoolId)\n .map(address => this.addressMapIn(address));\n const requests: Promise[] = [];\n\n addresses.forEach(address => {\n const endpoint = `/coins/${\n this.platformId\n }/contract/${address.toLowerCase()}/market_chart/range?vs_currency=${\n this.fiatParam\n }&from=${start}&to=${end}`;\n const request = retryPromiseWithDelay(\n this.client.get(endpoint),\n 2, // retryCount\n 2000 // delayTime\n );\n requests.push(request);\n });\n\n const paginatedResults = await Promise.all(requests);\n const results = this.parseHistoricalPrices(\n paginatedResults,\n addresses,\n start,\n aggregateBy\n );\n return results;\n } catch (error) {\n console.error('Unable to fetch token prices', addresses, error);\n throw error;\n }\n }\n\n private parseHistoricalPrices(\n results: HistoricalPriceResponse[],\n addresses: string[],\n start: number,\n aggregateBy: 'day' | 'hour' = 'day'\n ): HistoricalPrices {\n const assetPrices = Object.fromEntries(\n addresses.map((address, index) => {\n address = this.addressMapOut(address);\n const result = results[index].prices;\n const prices = {};\n\n if (aggregateBy === 'hour') {\n const pricesByHour = groupBy(result, r =>\n getUnixTime(startOfHour(fromUnixTime(r[0] / 1000)))\n );\n for (const key of Object.keys(pricesByHour)) {\n const price = (last(pricesByHour[key]) || [])[1] || 0;\n prices[Number(key) * 1000] = price;\n }\n } else if (aggregateBy === 'day') {\n for (const key in result) {\n const [timestamp, price] = result[key];\n prices[timestamp] = price;\n }\n }\n\n return [address, prices];\n })\n );\n\n const prices = {};\n for (const asset in assetPrices) {\n const assetPrice = assetPrices[asset];\n for (const timestamp in assetPrice) {\n const price = assetPrice[timestamp];\n if (!(timestamp in prices)) {\n prices[timestamp] = [];\n }\n prices[timestamp].push(price);\n }\n }\n return prices;\n }\n\n /**\n * Map address to mainnet address if app network is a testnet\n */\n public addressMapIn(address: string): string {\n const addressMap = TOKENS?.PriceChainMap;\n if (!addressMap) return address;\n return getAddress(addressMap[address.toLowerCase()] || address);\n }\n\n /**\n * Map mainnet address back to testnet address\n */\n public addressMapOut(address: string): string {\n const addressMap = TOKENS?.PriceChainMap;\n if (!addressMap) return address;\n return getAddress(invert(addressMap)[address.toLowerCase()] || address);\n }\n}\n","import axios from 'axios';\n\nexport class CoingeckoClient {\n baseUrl: string;\n\n constructor() {\n this.baseUrl = 'https://api.coingecko.com/api/v3';\n }\n\n async get(endpoint: string): Promise {\n const { data } = await axios.get(this.baseUrl + endpoint);\n return data;\n }\n}\n\nexport const coingeckoClient = new CoingeckoClient();\n","import { SUPPORTED_FIAT } from '@/constants/currency';\n\nimport { PriceService } from './api/price.service';\nimport { coingeckoClient } from './coingecko.client';\nimport config from '@/lib/config';\n\nexport const getNativeAssetId = (chainId: string): string => {\n const mapping = Object.fromEntries(\n Object.values(config).map(c => {\n return [c.chainId.toString(), c.thirdParty.coingecko.nativeAssetId];\n })\n );\n\n return mapping[chainId] || 'ethereum';\n};\n\nexport const getPlatformId = (chainId: string): string => {\n const mapping = Object.fromEntries(\n Object.values(config).map(c => {\n return [c.chainId.toString(), c.thirdParty.coingecko.platformId];\n })\n );\n\n return mapping[chainId] || 'ethereum';\n};\n\nexport class CoingeckoService {\n supportedFiat: string;\n prices: PriceService;\n\n constructor(\n public readonly client = coingeckoClient,\n priceServiceClass = PriceService\n ) {\n this.supportedFiat = SUPPORTED_FIAT.join(',');\n this.prices = new priceServiceClass(this);\n }\n}\n\nexport const coingeckoService = new CoingeckoService();\n"],"names":["fromUnixTime","dirtyUnixTime","requiredArgs","unixTime","toInteger","toDate","getTime","dirtyDate","date","timestamp","getUnixTime","startOfHour","initEcharts","chartInstance","ref","currentValue","change","fNum","useNumbers","tailwind","useTailwind","darkMode","useDarkMode","chartConfig","computed","props","legendName","latestValue","last","_a","d","value","params","param","i","k","_b","styleOverrides","style","watch","setCurrentValueToLatest","updateCurrentValue","currentDayValue","numeral","currentChartValue","emit","startValue","onMounted","handleMouseLeave","handleMouseEnter","handleAxisMoved","dataIndex","seriesIndex","bnum","prev","current","_change","PriceService","service","configService","_configService","__publicField","getPlatformId","addresses","days","addressesPerRequest","aggregateBy","now","end","twentyFourHoursInSecs","start","getAddressFromPoolId","address","requests","endpoint","request","retryPromiseWithDelay","paginatedResults","error","results","assetPrices","index","result","prices","pricesByHour","groupBy","r","key","price","asset","assetPrice","addressMap","TOKENS","getAddress","invert","CoingeckoClient","data","axios","coingeckoClient","chainId","config","c","CoingeckoService","client","priceServiceClass","SUPPORTED_FIAT","coingeckoService"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}