|
@ -75,7 +75,13 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
abortController.abort(); |
|
|
abortController.abort(); |
|
|
}, this.configurationService.get('REQUEST_TIMEOUT')); |
|
|
}, this.configurationService.get('REQUEST_TIMEOUT')); |
|
|
|
|
|
|
|
|
const { name } = await got(`${this.apiUrl}/coins/${symbol}`, { |
|
|
let url = `${this.apiUrl}/coins/${symbol}`; |
|
|
|
|
|
if (symbol.startsWith('nft:')) { |
|
|
|
|
|
response.assetSubClass = AssetSubClass.NFT; |
|
|
|
|
|
url = `${this.apiUrl}/nfts/${symbol.replace('nft:', '')}`; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const { name } = await got(url, { |
|
|
headers: this.headers, |
|
|
headers: this.headers, |
|
|
// @ts-ignore
|
|
|
// @ts-ignore
|
|
|
signal: abortController.signal |
|
|
signal: abortController.signal |
|
@ -124,18 +130,22 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
abortController.abort(); |
|
|
abortController.abort(); |
|
|
}, requestTimeout); |
|
|
}, requestTimeout); |
|
|
|
|
|
|
|
|
const { prices } = await got( |
|
|
let url = `${this.apiUrl}/coins/${symbol}/market_chart/range?vs_currency=${DEFAULT_CURRENCY.toLowerCase()}&from=${getUnixTime(from)}&to=${getUnixTime(to)}`; |
|
|
`${ |
|
|
let field = 'prices'; |
|
|
this.apiUrl |
|
|
|
|
|
}/coins/${symbol}/market_chart/range?vs_currency=${DEFAULT_CURRENCY.toLowerCase()}&from=${getUnixTime( |
|
|
if (symbol.startsWith('nft:')) { |
|
|
from |
|
|
// note: pro only
|
|
|
)}&to=${getUnixTime(to)}`,
|
|
|
url = `${this.apiUrl}/nfts/${symbol.replace('nft:', '')}/market_chart?days=max`; |
|
|
{ |
|
|
field = 'floor_prices_usd'; |
|
|
|
|
|
} |
|
|
|
|
|
console.log(url); |
|
|
|
|
|
|
|
|
|
|
|
const res = await got(url, { |
|
|
headers: this.headers, |
|
|
headers: this.headers, |
|
|
// @ts-ignore
|
|
|
// @ts-ignore
|
|
|
signal: abortController.signal |
|
|
signal: abortController.signal |
|
|
} |
|
|
}).json<any>(); |
|
|
).json<any>(); |
|
|
const prices = res[field]; |
|
|
|
|
|
|
|
|
const result: { |
|
|
const result: { |
|
|
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; |
|
|
[symbol: string]: { [date: string]: IDataProviderHistoricalResponse }; |
|
@ -185,10 +195,12 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
abortController.abort(); |
|
|
abortController.abort(); |
|
|
}, requestTimeout); |
|
|
}, requestTimeout); |
|
|
|
|
|
|
|
|
|
|
|
// note: simple price endpoint currently does not support list of nfts
|
|
|
|
|
|
// (submitted a ticket with this request)
|
|
|
const quotes = await got( |
|
|
const quotes = await got( |
|
|
`${this.apiUrl}/simple/price?ids=${symbols.join( |
|
|
`${this.apiUrl}/simple/price?ids=${symbols |
|
|
',' |
|
|
.filter((s) => !s.startsWith('nft:')) |
|
|
)}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()}`,
|
|
|
.join(',')}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()}`,
|
|
|
{ |
|
|
{ |
|
|
headers: this.headers, |
|
|
headers: this.headers, |
|
|
// @ts-ignore
|
|
|
// @ts-ignore
|
|
@ -205,6 +217,24 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
marketState: 'open' |
|
|
marketState: 'open' |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// nfts
|
|
|
|
|
|
for (const symbol of symbols.filter((s) => s.startsWith('nft:'))) { |
|
|
|
|
|
const s = symbol.replace('nft:', ''); |
|
|
|
|
|
const { floor_price } = await got(`${this.apiUrl}/nfts/${s}`, { |
|
|
|
|
|
headers: this.headers, |
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
|
signal: abortController.signal |
|
|
|
|
|
}).json<any>(); |
|
|
|
|
|
console.log(floor_price); |
|
|
|
|
|
response[symbol] = { |
|
|
|
|
|
currency: DEFAULT_CURRENCY, |
|
|
|
|
|
dataProviderInfo: this.getDataProviderInfo(), |
|
|
|
|
|
dataSource: DataSource.COINGECKO, |
|
|
|
|
|
marketPrice: floor_price[DEFAULT_CURRENCY.toLowerCase()], |
|
|
|
|
|
marketState: 'open' |
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
let message = error; |
|
|
let message = error; |
|
|
|
|
|
|
|
@ -216,7 +246,7 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
|
|
|
|
|
|
Logger.error(message, 'CoinGeckoService'); |
|
|
Logger.error(message, 'CoinGeckoService'); |
|
|
} |
|
|
} |
|
|
|
|
|
console.log(response); |
|
|
return response; |
|
|
return response; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -234,13 +264,17 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
abortController.abort(); |
|
|
abortController.abort(); |
|
|
}, this.configurationService.get('REQUEST_TIMEOUT')); |
|
|
}, this.configurationService.get('REQUEST_TIMEOUT')); |
|
|
|
|
|
|
|
|
const { coins } = await got(`${this.apiUrl}/search?query=${query}`, { |
|
|
// note: this search does return nfts in a separate array
|
|
|
|
|
|
const { coins, nfts } = await got( |
|
|
|
|
|
`${this.apiUrl}/search?query=${query}`, |
|
|
|
|
|
{ |
|
|
headers: this.headers, |
|
|
headers: this.headers, |
|
|
// @ts-ignore
|
|
|
// @ts-ignore
|
|
|
signal: abortController.signal |
|
|
signal: abortController.signal |
|
|
}).json<any>(); |
|
|
} |
|
|
|
|
|
).json<any>(); |
|
|
|
|
|
|
|
|
items = coins.map(({ id: symbol, name }) => { |
|
|
let itemsCoins = coins.map(({ id: symbol, name }) => { |
|
|
return { |
|
|
return { |
|
|
name, |
|
|
name, |
|
|
symbol, |
|
|
symbol, |
|
@ -251,6 +285,18 @@ export class CoinGeckoService implements DataProviderInterface { |
|
|
dataSource: this.getName() |
|
|
dataSource: this.getName() |
|
|
}; |
|
|
}; |
|
|
}); |
|
|
}); |
|
|
|
|
|
let itemsNfts = nfts.map(({ id: symbol, name }) => { |
|
|
|
|
|
return { |
|
|
|
|
|
name, |
|
|
|
|
|
symbol: `nft:${symbol}`, |
|
|
|
|
|
assetClass: AssetClass.LIQUIDITY, |
|
|
|
|
|
assetSubClass: AssetSubClass.NFT, |
|
|
|
|
|
currency: DEFAULT_CURRENCY, |
|
|
|
|
|
dataProviderInfo: this.getDataProviderInfo(), |
|
|
|
|
|
dataSource: this.getName() |
|
|
|
|
|
}; |
|
|
|
|
|
}); |
|
|
|
|
|
items = itemsCoins.concat(itemsNfts); |
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
let message = error; |
|
|
let message = error; |
|
|
|
|
|
|
|
|