import axios from "axios"; import invariant from "tiny-invariant"; import { ChainId, getNodeApiKey, WALLET_SERVICE_URL } from "../constants"; import { Wallet } from "../wallet"; import { EarnBase, EarnPosition, LendingMarketDetails, YieldFarmDetails, } from "./EarnPosition"; import { LendingMarket } from "./LendingMarket"; import { YieldFarm } from "./YieldFarm"; import { YieldFarmSynthetix } from "./YieldFarmSynthetix"; export * from "./EarnPosition"; export * from "./LendingMarket"; export * from "./YieldFarm"; export * from "./YieldFarmSynthetix"; export const parseEarn = ( position: EarnBase, wallet?: Wallet ): EarnPosition => { switch (position._type) { case "Aave-V2": return new LendingMarket(position as LendingMarketDetails, wallet); case "LG3": return new YieldFarm(position as YieldFarmDetails, wallet); case "SNX": return new YieldFarmSynthetix(position as YieldFarmDetails, wallet); default: invariant( false, `Unexpected position type: ${position._type}. Is your package up to date?` ); } }; export const fetchEarnPositions = async ( chain: ChainId, wallet?: Wallet, apiKey?: string ) => { const positions = await axios.get(`${WALLET_SERVICE_URL}yield`, { params: { chain, }, headers: { "x-api-key": apiKey ?? getNodeApiKey(), }, }); return positions.data.map((el) => parseEarn(el, wallet)); };