diff --git a/package-lock.json b/package-lock.json index 0c3d99c..04d457d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@indexcoop/analytics-sdk", - "version": "0.4.0", + "version": "0.9.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@indexcoop/analytics-sdk", - "version": "0.4.0", + "version": "0.9.0", "license": "MIT", "dependencies": { "ethers": "^5.6.4" diff --git a/src/providers/analytics/provider.ts b/src/providers/analytics/provider.ts index b175495..5e18999 100644 --- a/src/providers/analytics/provider.ts +++ b/src/providers/analytics/provider.ts @@ -18,6 +18,15 @@ interface IndexAnalytics { volume24h: number } +interface IndexAnalyticsSummary { + address: string + navPrice: number + marketCap: number + change24h: number +} + +const MAINNET_CHAIN_ID = 1 + interface AnalyticsProvider { getAnalytics(address: string): Promise } @@ -86,4 +95,34 @@ export class IndexAnalyticsProvider implements AnalyticsProvider { volume24h, } } + + async getAnalyticsSummary(address: string): Promise { + const { baseCurrency, coingeckoService, provider } = this + const marketCapProvider = new IndexMarketCapProvider( + provider, + coingeckoService, + ) + const navProvider = new IndexNavProvider(provider, coingeckoService) + + const [marketCap, navPrice, coingeckoRes] = await Promise.all([ + marketCapProvider.getMarketCap(address), + navProvider.getNav(address), + coingeckoService.getTokenPrice({ + address, + chainId: MAINNET_CHAIN_ID, + baseCurrency, + include24hrChange: true, + include24hrVol: false, + }), + ]) + + const coingeckoData = coingeckoRes[address.toLowerCase()] ?? null + + return { + address, + navPrice, + marketCap, + change24h: coingeckoData?.[CoinGeckoUtils.get24hChangeLabel(baseCurrency)] ?? 0, + } + } }