//Setup export default async function({login, q, imports, data, account}, {enabled = false, extras = false} = {}) { //Plugin execution try { //Check if plugin is enabled and requirements are met if ((!q.crypto) || (!imports.metadata.plugins.crypto.enabled(enabled, {extras}))) return null //Load inputs let {id, days, vs_currency, precision} = imports.metadata.plugins.crypto.inputs({data, account, q}) if (!id) throw {error: {message: "Crypto currency id is not set"}} console.debug(`metrics/compute/${login}/plugins > crypto > querying api for crypto`) const { data: coin, } = await imports.axios.get(`https://api.coingecko.com/api/v3/coins/${id}`, { params: { market_data: true, }, }) if (!coin) throw {error: {message: "Crypto currency not found"}} const { data: {prices}, } = await imports.axios.get(`https://api.coingecko.com/api/v3/coins/${id}/market_chart`, { params: { vs_currency, days, precision, }, }) const chart = imports.Graph.timeline( prices.map((y, _) => ({x: new Date(y[0]), y: y[1]})), { low: Math.min(...prices.map((y, _) => y[1])), high: Math.max(...prices.map((y, _) => y[1])), points: false, text: false, width: 480 * (1 + data.large), height: 200, }, ) //Results return { chart, id, precision, days: {"1": "Today", "14": "2 Weeks", "30": "1 Month", max: "All-time"}[days], symbol: coin.symbol, name: coin.name, current_price: coin.market_data.current_price[vs_currency], price_change_percentage_24h: coin.market_data.price_change_percentage_24h, vs_currency, logo: coin.image.small, } } //Handle errors catch (error) { throw imports.format.error(error) } }