UNPKG

juna

Version:

A cross platform NFT lending client for serious lenders

68 lines (64 loc) 2.96 kB
import { LendingPlatform, Loan, LoanStatus, Offer, OfferType } from "../../types"; import { currencyFromAddress } from "../../support/currencies"; import { ArcadeLoan, ArcadeOffer } from "./types"; import { CollectionRegistry } from "../../support/CollectionRegistry"; import { addDaysToDate, calculateDurationInDays } from "../../helpers"; const arcadeStatusMapper = (status: string): LoanStatus => { switch (status) { case "Active": return LoanStatus.ongoing; case "Repaid": return LoanStatus.repaid; default: return LoanStatus.defaulted; } }; export const arcadeLoanMapper = (arcadeLoan: ArcadeLoan): Loan => { const currency = currencyFromAddress(arcadeLoan.payableCurrency); const durationInDays = calculateDurationInDays(parseInt(arcadeLoan.durationSecs)); const principal = parseInt(arcadeLoan.principal) / 10 ** currency.decimals; const apr = (parseInt(arcadeLoan.interestRate) / 1e18 / 10000) * (365 / durationInDays); // console.log(arcadeLoan); return { id: arcadeLoan.loanId, platform: LendingPlatform.arcade, borrower: arcadeLoan.borrowerId.toLowerCase() as `0x${string}`, lender: arcadeLoan.lenderId.toLowerCase() as `0x${string}`, status: arcadeStatusMapper(arcadeLoan.state), startDate: new Date(parseInt(arcadeLoan.startDate) * 1e3), endDate: arcadeLoan.closedAt ? new Date(arcadeLoan.closedAt * 1e3) : addDaysToDate(new Date(parseInt(arcadeLoan.startDate) * 1e3), durationInDays), currency: currency, principal: parseInt(arcadeLoan.principal) / 10 ** currency.decimals, interestPayment: (principal * apr * durationInDays) / 365, durationInDays: durationInDays, apr: apr, collateral: arcadeLoan.collateral.map((collateral) => ({ collectionAddress: collateral.collectionAddress, collectionName: CollectionRegistry.getCollectionDetails(collateral.collectionAddress).name, nftId: parseInt(collateral.tokenId), })), }; }; export const arcadeOfferMapper = (arcadeOffer: ArcadeOffer): Offer => { const currency = currencyFromAddress(arcadeOffer.payableCurrency); const durationInDays = calculateDurationInDays(arcadeOffer.durationSecs); return { id: arcadeOffer.id.toString(), platform: LendingPlatform.arcade, lender: arcadeOffer.creatorId, offerDate: new Date(arcadeOffer.createdAt), expiryDate: new Date(arcadeOffer.expiresAt), type: arcadeOffer.collateralId === "-1" ? OfferType.collectionOffer : OfferType.singleItemOffer, currency: currency, principal: parseFloat(arcadeOffer.principal) / 10 ** currency.decimals, durationInDays: durationInDays, apr: (parseInt(arcadeOffer.interestRate) / 1e18 / 10000) * (365.25 / durationInDays), collateral: { collectionAddress: arcadeOffer.collateralAddress, collectionName: CollectionRegistry.getCollectionDetails(arcadeOffer.collateralAddress).name, nftId: arcadeOffer.collateralId, }, }; };