@1delta/margin-fetcher 5.0.28 → 5.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +368 -18
- package/dist/index.js +274 -55
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -21931,7 +21931,7 @@ async function fetchTellerMarkets(chainId) {
|
|
|
21931
21931
|
}
|
|
21932
21932
|
return null;
|
|
21933
21933
|
};
|
|
21934
|
-
const
|
|
21934
|
+
const num16 = (i) => {
|
|
21935
21935
|
const b = big18(i);
|
|
21936
21936
|
return b === null ? null : Number(b);
|
|
21937
21937
|
};
|
|
@@ -21941,9 +21941,9 @@ async function fetchTellerMarkets(chainId) {
|
|
|
21941
21941
|
config,
|
|
21942
21942
|
available: big18(base),
|
|
21943
21943
|
committed: big18(base + 1),
|
|
21944
|
-
minRateBps:
|
|
21944
|
+
minRateBps: num16(base + 2),
|
|
21945
21945
|
collateralPerPrincipal: big18(base + 3),
|
|
21946
|
-
maxLoanDuration:
|
|
21946
|
+
maxLoanDuration: num16(base + 4),
|
|
21947
21947
|
marketId: big18(base + 5),
|
|
21948
21948
|
totalAssets: big18(base + 6)
|
|
21949
21949
|
};
|
|
@@ -22906,20 +22906,20 @@ async function fetchInverseMarkets(lender, chainId) {
|
|
|
22906
22906
|
if (Object.keys(byAddr).length > 0) {
|
|
22907
22907
|
const rows = markets.map((market) => {
|
|
22908
22908
|
const m = byAddr[market.address.toLowerCase()];
|
|
22909
|
-
const
|
|
22909
|
+
const num16 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
22910
22910
|
return {
|
|
22911
22911
|
market,
|
|
22912
|
-
totalDebt:
|
|
22913
|
-
dolaLiquidity:
|
|
22914
|
-
leftToBorrow:
|
|
22915
|
-
price:
|
|
22912
|
+
totalDebt: num16(m?.totalDebt),
|
|
22913
|
+
dolaLiquidity: num16(m?.dolaLiquidity),
|
|
22914
|
+
leftToBorrow: num16(m?.leftToBorrow),
|
|
22915
|
+
price: num16(m?.price),
|
|
22916
22916
|
borrowPaused: typeof m?.borrowPaused === "boolean" ? m.borrowPaused : null,
|
|
22917
|
-
dailyBorrows:
|
|
22917
|
+
dailyBorrows: num16(m?.dailyBorrows),
|
|
22918
22918
|
// The API serves it as a DECIMAL (`replenishmentIncentive: 0.1`),
|
|
22919
22919
|
// unlike the on-chain bps — normalize here, and fall back to the
|
|
22920
22920
|
// curated metadata value when the field is missing.
|
|
22921
22921
|
replenishmentIncentiveBps: (() => {
|
|
22922
|
-
const dec2 =
|
|
22922
|
+
const dec2 = num16(m?.replenishmentIncentive);
|
|
22923
22923
|
if (dec2 !== null) return Math.round(dec2 * 1e4);
|
|
22924
22924
|
const meta = Number(market.replenishmentIncentiveBps);
|
|
22925
22925
|
return Number.isFinite(meta) ? meta : null;
|
|
@@ -66281,8 +66281,6 @@ function splitUid(uid) {
|
|
|
66281
66281
|
if (!venue || !chainId || !ref) return void 0;
|
|
66282
66282
|
return { venue, chainId, ref };
|
|
66283
66283
|
}
|
|
66284
|
-
|
|
66285
|
-
// src/earn/labels.ts
|
|
66286
66284
|
var VENUE_KIND_LABELS = {
|
|
66287
66285
|
lending: "Lending markets",
|
|
66288
66286
|
vault: "Vaults"
|
|
@@ -66350,38 +66348,40 @@ var RATE_SOURCE_LABELS = {
|
|
|
66350
66348
|
oracle: "Oracle",
|
|
66351
66349
|
realized: "Realized"
|
|
66352
66350
|
};
|
|
66353
|
-
var
|
|
66354
|
-
|
|
66355
|
-
|
|
66356
|
-
|
|
66357
|
-
|
|
66358
|
-
|
|
66359
|
-
|
|
66360
|
-
|
|
66361
|
-
SKY: "Sky",
|
|
66362
|
-
USDD: "USDD",
|
|
66363
|
-
LIQUITY_V2: "Liquity V2",
|
|
66364
|
-
SILO_V2: "Silo V2",
|
|
66365
|
-
SILO_V3: "Silo V3",
|
|
66366
|
-
EXACTLY: "Exactly",
|
|
66367
|
-
TELLER: "Teller",
|
|
66368
|
-
TERM_FINANCE: "Term Finance",
|
|
66369
|
-
TERMMAX: "TermMax",
|
|
66370
|
-
LLAMALEND: "LlamaLend",
|
|
66371
|
-
CURVANCE: "Curvance",
|
|
66372
|
-
INVERSE: "Inverse",
|
|
66373
|
-
FRANKENCOIN: "Frankencoin",
|
|
66374
|
-
RIVER: "River",
|
|
66375
|
-
RESUPPLY: "Resupply",
|
|
66376
|
-
TANGENT: "Tangent",
|
|
66377
|
-
DOLOMITE: "Dolomite",
|
|
66351
|
+
var SYNTHETIC_FAMILIES = ["AAVE_V4", "COMPOUND_V3", "SWAYLEND"];
|
|
66352
|
+
var FAMILY_KEYS = [
|
|
66353
|
+
.../* @__PURE__ */ new Set([
|
|
66354
|
+
...Object.values(Lender),
|
|
66355
|
+
...SYNTHETIC_FAMILIES
|
|
66356
|
+
])
|
|
66357
|
+
].sort((a, b) => a.length - b.length || a.localeCompare(b));
|
|
66358
|
+
var BRAND_OVERRIDES = {
|
|
66378
66359
|
LISTA_DAO: "Lista",
|
|
66379
66360
|
FLUX_FINANCE: "Flux",
|
|
66380
|
-
|
|
66381
|
-
|
|
66382
|
-
|
|
66383
|
-
|
|
66384
|
-
|
|
66361
|
+
TERMMAX: "TermMax",
|
|
66362
|
+
LLAMALEND: "LlamaLend",
|
|
66363
|
+
USDD: "USDD",
|
|
66364
|
+
USDAF: "USDaf",
|
|
66365
|
+
DTRINITY: "dTRINITY",
|
|
66366
|
+
DFORCE: "dForce",
|
|
66367
|
+
OVIX: "0VIX",
|
|
66368
|
+
WE_PIGGY: "WePiggy",
|
|
66369
|
+
ZEROLEND: "ZeroLend",
|
|
66370
|
+
HYPERLEND: "HyperLend",
|
|
66371
|
+
HYPURRFI: "HypurrFi",
|
|
66372
|
+
HYPERYIELD: "HyperYield",
|
|
66373
|
+
LAYERBANK_V3: "LayerBank V3",
|
|
66374
|
+
TAKOTAKO: "TakoTako",
|
|
66375
|
+
SWAYLEND: "Swaylend",
|
|
66376
|
+
BENQI: "BENQI",
|
|
66377
|
+
YLDR: "YLDR",
|
|
66378
|
+
YEI: "YEI",
|
|
66379
|
+
RMM: "RMM",
|
|
66380
|
+
PAC: "PAC"
|
|
66381
|
+
};
|
|
66382
|
+
function titleCaseKey(key3) {
|
|
66383
|
+
return key3.split(/[_-]/).filter(Boolean).map((s) => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase()).join(" ");
|
|
66384
|
+
}
|
|
66385
66385
|
var VAULT_PROVIDER_BRANDS = {
|
|
66386
66386
|
fluid: "Fluid",
|
|
66387
66387
|
gearbox: "Gearbox",
|
|
@@ -66405,21 +66405,23 @@ function isInstanceSegment(seg) {
|
|
|
66405
66405
|
if (/^0X[0-9A-F]+$/i.test(seg)) return true;
|
|
66406
66406
|
return seg.length >= 8 && /^[0-9A-F]+$/i.test(seg);
|
|
66407
66407
|
}
|
|
66408
|
-
function
|
|
66409
|
-
if (venue.startsWith(
|
|
66410
|
-
|
|
66411
|
-
|
|
66408
|
+
function venueBrandKey(venue) {
|
|
66409
|
+
if (venue.startsWith(VAULT_VENUE_PREFIX)) return venue;
|
|
66410
|
+
const key3 = venue.toUpperCase();
|
|
66411
|
+
for (const family of FAMILY_KEYS) {
|
|
66412
|
+
if (key3 === family || key3.startsWith(family + "_")) return family;
|
|
66412
66413
|
}
|
|
66413
|
-
const segments =
|
|
66414
|
+
const segments = key3.split("_");
|
|
66414
66415
|
const cut = segments.findIndex(isInstanceSegment);
|
|
66415
|
-
|
|
66416
|
-
|
|
66417
|
-
|
|
66418
|
-
|
|
66419
|
-
|
|
66420
|
-
|
|
66416
|
+
return (cut > 0 ? segments.slice(0, cut) : segments).join("_");
|
|
66417
|
+
}
|
|
66418
|
+
function venueBrand(venue) {
|
|
66419
|
+
if (venue.startsWith(VAULT_VENUE_PREFIX)) {
|
|
66420
|
+
const provider = venue.slice(VAULT_VENUE_PREFIX.length);
|
|
66421
|
+
return VAULT_PROVIDER_BRANDS[provider] ?? titleCaseKey(provider);
|
|
66421
66422
|
}
|
|
66422
|
-
|
|
66423
|
+
const family = venueBrandKey(venue);
|
|
66424
|
+
return BRAND_OVERRIDES[family] ?? titleCaseKey(family);
|
|
66423
66425
|
}
|
|
66424
66426
|
var EARN_LABELS = {
|
|
66425
66427
|
venueKind: VENUE_KIND_LABELS,
|
|
@@ -66458,6 +66460,21 @@ function isIlliquid(input) {
|
|
|
66458
66460
|
if (input.liquidityUsd === void 0) return false;
|
|
66459
66461
|
return input.liquidityUsd <= 0;
|
|
66460
66462
|
}
|
|
66463
|
+
var CATEGORY_PROVIDERS = /* @__PURE__ */ new Set(["savings", "lst"]);
|
|
66464
|
+
function resolveEarnIdentity(venue, brand) {
|
|
66465
|
+
const isVault = venue.startsWith(VAULT_VENUE_PREFIX);
|
|
66466
|
+
const provider = isVault ? venue.slice(VAULT_VENUE_PREFIX.length) : venue;
|
|
66467
|
+
const providerBrand = venueBrand(venue);
|
|
66468
|
+
const key3 = venueBrandKey(venue);
|
|
66469
|
+
if (isVault && CATEGORY_PROVIDERS.has(provider)) {
|
|
66470
|
+
return { protocol: { key: key3, name: brand?.trim() || providerBrand } };
|
|
66471
|
+
}
|
|
66472
|
+
const name = brand?.trim();
|
|
66473
|
+
if (!name || name.toLowerCase() === providerBrand.toLowerCase()) {
|
|
66474
|
+
return { protocol: { key: key3, name: providerBrand } };
|
|
66475
|
+
}
|
|
66476
|
+
return { protocol: { key: key3, name: providerBrand }, curator: { name } };
|
|
66477
|
+
}
|
|
66461
66478
|
|
|
66462
66479
|
// src/earn/normalize.ts
|
|
66463
66480
|
function num12(v) {
|
|
@@ -66604,6 +66621,15 @@ function earnMarketFromVault(row, chainId, opts = {}) {
|
|
|
66604
66621
|
venueKind: "vault",
|
|
66605
66622
|
// Curator first (it names the actual operator), then the provider brand.
|
|
66606
66623
|
brand: str5(row.curatorName) ?? venueBrand(vaultVenue(provider)),
|
|
66624
|
+
// What the vault is BUILT ON, kept apart from who runs it — see
|
|
66625
|
+
// `resolveEarnIdentity` for why this is not simply provider-vs-brand.
|
|
66626
|
+
...withCuratorEntity(
|
|
66627
|
+
resolveEarnIdentity(
|
|
66628
|
+
vaultVenue(provider),
|
|
66629
|
+
str5(row.curatorName)
|
|
66630
|
+
),
|
|
66631
|
+
str5(row.curatorEntity)
|
|
66632
|
+
),
|
|
66607
66633
|
name: str5(info.name) ?? str5(row.displayName) ?? str5(row.name),
|
|
66608
66634
|
ref: address,
|
|
66609
66635
|
logoURI: str5(info.logoURI) ?? str5(row.underlyingInfo?.asset?.logoURI),
|
|
@@ -66739,6 +66765,10 @@ function amount(raw, formatted, usd, decimals) {
|
|
|
66739
66765
|
usd: num12(usd)
|
|
66740
66766
|
};
|
|
66741
66767
|
}
|
|
66768
|
+
function withCuratorEntity(id, entity) {
|
|
66769
|
+
if (!id.curator || !entity) return id;
|
|
66770
|
+
return { ...id, curator: { ...id.curator, entity } };
|
|
66771
|
+
}
|
|
66742
66772
|
function sum(a, b) {
|
|
66743
66773
|
if (a === void 0 && b === void 0) return void 0;
|
|
66744
66774
|
return (a ?? 0) + (b ?? 0);
|
|
@@ -69675,6 +69705,10 @@ function earnMarketFromPool(row, fallbackChainId) {
|
|
|
69675
69705
|
// The family brand ('Morpho Blue'), not the per-market key. The specific
|
|
69676
69706
|
// market identity survives on `name`.
|
|
69677
69707
|
brand: venueBrand(venue),
|
|
69708
|
+
// Same resolver as the vault half, so `protocol.key` means one thing
|
|
69709
|
+
// across the listing: the STABLE family key, never the per-market venue.
|
|
69710
|
+
// No lender publishes a curator today, hence the undefined.
|
|
69711
|
+
...resolveEarnIdentity(venue, void 0),
|
|
69678
69712
|
name: str5(row.name),
|
|
69679
69713
|
// Never re-derived — the uid's third segment as the origin minted it.
|
|
69680
69714
|
ref: marketUid.split(":")[2],
|
|
@@ -69953,6 +69987,191 @@ function supportsCancel(provider, meta) {
|
|
|
69953
69987
|
return typeof meta.withdrawQueue === "string" && meta.withdrawQueue.length > 0;
|
|
69954
69988
|
}
|
|
69955
69989
|
|
|
69956
|
-
|
|
69990
|
+
// src/earn/positions.ts
|
|
69991
|
+
function buildLendingPositionUid(lender, chainId) {
|
|
69992
|
+
if (!lender || !chainId) {
|
|
69993
|
+
throw new Error(
|
|
69994
|
+
`Invalid lending positionUid parameters: lender=${lender}, chainId=${chainId}`
|
|
69995
|
+
);
|
|
69996
|
+
}
|
|
69997
|
+
if (isVaultVenue(lender)) {
|
|
69998
|
+
throw new Error(
|
|
69999
|
+
`Lender '${lender}' uses the reserved vault venue namespace`
|
|
70000
|
+
);
|
|
70001
|
+
}
|
|
70002
|
+
return `${lender}:${chainId}`;
|
|
70003
|
+
}
|
|
70004
|
+
function isVaultPosition(p) {
|
|
70005
|
+
return p.venueKind === "vault";
|
|
70006
|
+
}
|
|
70007
|
+
function isLendingPosition(p) {
|
|
70008
|
+
return p.venueKind === "lending";
|
|
70009
|
+
}
|
|
70010
|
+
function legEarnUid(marketUid) {
|
|
70011
|
+
if (!marketUid) return void 0;
|
|
70012
|
+
const parts = marketUid.split(":");
|
|
70013
|
+
if (parts.length !== 3 || parts.some((p) => !p)) return void 0;
|
|
70014
|
+
if (isVaultVenue(parts[0])) return void 0;
|
|
70015
|
+
return marketUid;
|
|
70016
|
+
}
|
|
70017
|
+
function num15(v) {
|
|
70018
|
+
const n = typeof v === "number" ? v : Number(v);
|
|
70019
|
+
return Number.isFinite(n) ? n : 0;
|
|
70020
|
+
}
|
|
70021
|
+
function legAsset(pos) {
|
|
70022
|
+
const asset = pos.underlyingInfo?.asset ?? {};
|
|
70023
|
+
const address = typeof asset.address === "string" ? asset.address.toLowerCase() : (
|
|
70024
|
+
// Fall back to the uid's third segment, which IS the underlying for
|
|
70025
|
+
// the default-format lenders and merely a harmless label for the rest.
|
|
70026
|
+
pos.marketUid?.split(":")[2] ?? ""
|
|
70027
|
+
);
|
|
70028
|
+
const decimals = typeof asset.decimals === "number" ? asset.decimals : void 0;
|
|
70029
|
+
const symbol = typeof asset.symbol === "string" ? asset.symbol : void 0;
|
|
70030
|
+
return { address, symbol, decimals };
|
|
70031
|
+
}
|
|
70032
|
+
function toLeg(pos) {
|
|
70033
|
+
const depositsUsd = num15(pos.depositsUSD);
|
|
70034
|
+
const debtUsd = num15(pos.debtUSD) + num15(pos.debtStableUSD);
|
|
70035
|
+
const hasSupply = depositsUsd !== 0 || num15(pos.deposits) !== 0;
|
|
70036
|
+
const hasDebt = debtUsd !== 0 || num15(pos.debt) !== 0 || num15(pos.debtStable) !== 0;
|
|
70037
|
+
return {
|
|
70038
|
+
earnUid: legEarnUid(pos.marketUid),
|
|
70039
|
+
marketUid: pos.marketUid,
|
|
70040
|
+
...pos.loanId ? { loanId: pos.loanId } : {},
|
|
70041
|
+
asset: legAsset(pos),
|
|
70042
|
+
side: hasSupply && hasDebt ? "both" : hasDebt ? "borrow" : "supply",
|
|
70043
|
+
deposits: pos.deposits ?? "0",
|
|
70044
|
+
depositsUsd,
|
|
70045
|
+
debt: pos.debt ?? "0",
|
|
70046
|
+
debtUsd,
|
|
70047
|
+
collateralEnabled: pos.collateralEnabled ?? false,
|
|
70048
|
+
...pos.withdrawable !== void 0 ? { withdrawable: pos.withdrawable } : {}
|
|
70049
|
+
};
|
|
70050
|
+
}
|
|
70051
|
+
function isCountable(leg) {
|
|
70052
|
+
return leg.loanId === void 0;
|
|
70053
|
+
}
|
|
70054
|
+
function earnPositionFromLenderEntry(entry) {
|
|
70055
|
+
const subs = entry.data ?? [];
|
|
70056
|
+
const subAccounts = subs.map((sub) => {
|
|
70057
|
+
const legs = (sub.positions ?? []).map(toLeg);
|
|
70058
|
+
const counted = legs.filter(isCountable);
|
|
70059
|
+
const suppliedUsd2 = counted.reduce((a, l) => a + l.depositsUsd, 0);
|
|
70060
|
+
const borrowedUsd2 = counted.reduce((a, l) => a + l.debtUsd, 0);
|
|
70061
|
+
return {
|
|
70062
|
+
accountId: sub.accountId,
|
|
70063
|
+
health: sub.health ?? null,
|
|
70064
|
+
suppliedUsd: suppliedUsd2,
|
|
70065
|
+
borrowedUsd: borrowedUsd2,
|
|
70066
|
+
netUsd: suppliedUsd2 - borrowedUsd2,
|
|
70067
|
+
legs
|
|
70068
|
+
};
|
|
70069
|
+
});
|
|
70070
|
+
const active = subAccounts.filter((s) => s.legs.length > 0 || s.netUsd !== 0);
|
|
70071
|
+
const crossMargin = active.length <= 1;
|
|
70072
|
+
const suppliedUsd = num15(entry.balanceData?.deposits);
|
|
70073
|
+
const borrowedUsd = num15(entry.balanceData?.debt);
|
|
70074
|
+
return {
|
|
70075
|
+
positionUid: buildLendingPositionUid(entry.lender, entry.chainId),
|
|
70076
|
+
chainId: entry.chainId,
|
|
70077
|
+
venue: entry.lender,
|
|
70078
|
+
venueKind: "lending",
|
|
70079
|
+
lender: entry.lender,
|
|
70080
|
+
account: entry.account,
|
|
70081
|
+
brand: entry.lenderInfo?.name,
|
|
70082
|
+
name: entry.lenderInfo?.name,
|
|
70083
|
+
...entry.lenderInfo?.logoUri ? { logoURI: entry.lenderInfo.logoUri } : {},
|
|
70084
|
+
suppliedUsd,
|
|
70085
|
+
borrowedUsd,
|
|
70086
|
+
netUsd: num15(entry.balanceData?.nav),
|
|
70087
|
+
apr: num15(entry.aprData?.apr),
|
|
70088
|
+
depositApr: num15(entry.aprData?.depositApr),
|
|
70089
|
+
borrowApr: num15(entry.aprData?.borrowApr),
|
|
70090
|
+
// Only a cross-margin account HAS one health factor. Publishing the first
|
|
70091
|
+
// sub-account's as the row's would be a number about a different position.
|
|
70092
|
+
health: crossMargin ? active[0]?.health ?? null : null,
|
|
70093
|
+
leverage: num15(entry.leverage),
|
|
70094
|
+
crossMargin,
|
|
70095
|
+
legs: subAccounts.flatMap((s) => s.legs),
|
|
70096
|
+
subAccounts: active,
|
|
70097
|
+
...entry.incomplete ? { incomplete: true } : {},
|
|
70098
|
+
...entry.stale ? { stale: true, staleAgeMs: entry.staleAgeMs } : {}
|
|
70099
|
+
};
|
|
70100
|
+
}
|
|
70101
|
+
function vaultSharesToAssets(sharesRaw, meta) {
|
|
70102
|
+
if (sharesRaw === 0n) return 0n;
|
|
70103
|
+
const totalSupply = BigInt(meta.totalSupply || "0");
|
|
70104
|
+
if (totalSupply === 0n) return 0n;
|
|
70105
|
+
return sharesRaw * BigInt(meta.totalAssets || "0") / totalSupply;
|
|
70106
|
+
}
|
|
70107
|
+
function earnPositionFromVaultBalance(meta, chainId, input, format) {
|
|
70108
|
+
const assetsRaw = vaultSharesToAssets(input.sharesRaw, meta);
|
|
70109
|
+
const assetDecimals = meta.assetDecimals ?? meta.decimals;
|
|
70110
|
+
const assets = format(assetsRaw, assetDecimals);
|
|
70111
|
+
const priceUsd = input.priceUsd ?? 0;
|
|
70112
|
+
const suppliedUsd = priceUsd * parseFloat(assets);
|
|
70113
|
+
const market = input.market;
|
|
70114
|
+
const uid = buildVaultEarnUid(meta.provider, chainId, meta.address);
|
|
70115
|
+
return {
|
|
70116
|
+
positionUid: uid,
|
|
70117
|
+
earnUid: uid,
|
|
70118
|
+
chainId,
|
|
70119
|
+
venue: `vault.${meta.provider}`,
|
|
70120
|
+
venueKind: "vault",
|
|
70121
|
+
provider: meta.provider,
|
|
70122
|
+
vault: meta.address,
|
|
70123
|
+
// The catalogue's identity resolution (curator, brand, branded icon) beats
|
|
70124
|
+
// the raw share-token name where it resolved.
|
|
70125
|
+
name: market?.name ?? meta.name,
|
|
70126
|
+
...market?.brand ? { brand: market.brand } : {},
|
|
70127
|
+
...market?.logoURI ?? meta.logoURI ? { logoURI: market?.logoURI ?? meta.logoURI } : {},
|
|
70128
|
+
asset: {
|
|
70129
|
+
address: meta.underlying,
|
|
70130
|
+
...market?.asset.symbol ? { symbol: market.asset.symbol } : {},
|
|
70131
|
+
decimals: assetDecimals,
|
|
70132
|
+
priceUsd
|
|
70133
|
+
},
|
|
70134
|
+
sharesRaw: input.sharesRaw.toString(),
|
|
70135
|
+
shares: format(input.sharesRaw, meta.decimals),
|
|
70136
|
+
assetsRaw: assetsRaw.toString(),
|
|
70137
|
+
assets,
|
|
70138
|
+
shareDecimals: meta.decimals,
|
|
70139
|
+
suppliedUsd,
|
|
70140
|
+
// A vault share is a supply-only instrument — there is no borrow leg to
|
|
70141
|
+
// report, and `0` here is a fact rather than a missing read.
|
|
70142
|
+
borrowedUsd: 0,
|
|
70143
|
+
netUsd: suppliedUsd,
|
|
70144
|
+
// For a vault the position's APR IS the venue's rate — there is no borrow
|
|
70145
|
+
// leg to net off, so unlike the lending half the two never diverge.
|
|
70146
|
+
...market?.rate?.total !== void 0 ? { apr: market.rate.total } : {},
|
|
70147
|
+
...market?.rate ? { rate: market.rate } : {},
|
|
70148
|
+
...market?.exit ? { exit: market.exit } : {},
|
|
70149
|
+
...market?.availability ? { availability: market.availability } : {},
|
|
70150
|
+
...market?.capabilities ? { capabilities: market.capabilities } : {},
|
|
70151
|
+
...meta.yieldProfile ? { yieldProfile: meta.yieldProfile } : {},
|
|
70152
|
+
...meta.denomination ? { denomination: meta.denomination } : {}
|
|
70153
|
+
};
|
|
70154
|
+
}
|
|
70155
|
+
function earnPositionTotals(items) {
|
|
70156
|
+
let suppliedUsd = 0;
|
|
70157
|
+
let borrowedUsd = 0;
|
|
70158
|
+
let lendingUsd = 0;
|
|
70159
|
+
let vaultUsd = 0;
|
|
70160
|
+
for (const it of items) {
|
|
70161
|
+
suppliedUsd += it.suppliedUsd;
|
|
70162
|
+
borrowedUsd += it.borrowedUsd;
|
|
70163
|
+
if (it.venueKind === "vault") vaultUsd += it.netUsd;
|
|
70164
|
+
else lendingUsd += it.netUsd;
|
|
70165
|
+
}
|
|
70166
|
+
return {
|
|
70167
|
+
suppliedUsd,
|
|
70168
|
+
borrowedUsd,
|
|
70169
|
+
netUsd: suppliedUsd - borrowedUsd,
|
|
70170
|
+
lendingUsd,
|
|
70171
|
+
vaultUsd
|
|
70172
|
+
};
|
|
70173
|
+
}
|
|
70174
|
+
|
|
70175
|
+
export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EARN_DESCRIPTIONS, EARN_LABELS, EMPTY_BALANCE, EXACTLY_LENDER_KEY, FRACTION_RATE_PROVIDERS, GMX_API_HOSTS, GMX_READ_CONTRACTS, GMX_SUPPORTED_CHAINS, HYPERCORE_VAULT_REGISTRY, IDLE_MARKET_ID, INTERFACE_IDS, LAGOON_API_URL, LAGOON_CHAIN_IDS, MORPHO_LENS, MULTICALL_FAILURE, MaxParamThresholds, PASSTHROUGH_RATE_EPSILON, PENDLE_ASSETS_URL, PENDLE_CHAIN_IDS, PENDLE_MARKETS_URL, SDK_FRACTION_RATE_PROVIDERS, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, TELLER_CALLS_PER_BID, TERMMAX_CALLS_PER_ACCOUNT, DECIMAL_BASE as TERMMAX_DECIMAL_BASE, TERMMAX_LIQUIDATION_PENALTY, TERMMAX_LIQUIDATION_WINDOW_SECS, TERMMAX_LIQUIDATOR_BONUS, TERMMAX_PARTIAL_CLOSE_FACTOR, TERMMAX_PARTIAL_LIQUIDATION_THRESHOLD_USD, TERM_ADAPTERS, TERM_PROFILES, TERM_SHEET_SCHEMA_VERSION, TermMaxApiSource, TermSubgraphSource, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL, VAULT_PROVIDER_PROFILE, VAULT_PROVIDER_TRAITS, VAULT_SHARE_PRICE_PROBE, VAULT_VENUE_PREFIX, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLendingPositionUid, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultEarnUid, buildVaultLookup, buildVaultTermSheet, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, clearPendleMarketsCache, collectFeedObservations, computeBorrowDelta2 as computeBorrowDelta, computeCloseTradeDeltas, computeCollateralSwapDeltas, computeDebtSwapDeltas, computeDepositDelta2 as computeDepositDelta, computeEModeAnalysis, computeOpenTradeDeltas, computePostTradeMetrics, computeRepayDelta2 as computeRepayDelta, computeSumerBorrowDelta, computeSumerDepositDelta, computeSumerRepayDelta, computeSumerWaterfall, computeSumerWithdrawDelta, computeVaultApr, computeWithdrawDelta2 as computeWithdrawDelta, computeZapTradeDeltas, consensusReference, convertDssMarketsToResponse, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertFraxlendPairsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, dssIlkBytes32, dssKeyParts, dssLenderKey, duration, earnDescription, earnLabel, earnMarketFromPool, earnMarketFromVault, earnMarketLabel, earnPositionFromLenderEntry, earnPositionFromVaultBalance, earnPositionTotals, earnUidFromMarketUid, earnVenueKind, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchFraxlendPairs, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendleApiAssets, fetchPendleApiMarkets, fetchPendlePrices, fetchPendlePtMarkets, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, formatRaw, frankencoinKeyParts, frankencoinLenderKey, fraxlendAssetPerCollateral, fraxlendKeyParts, fraxlendLenderKey, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, getCachedLiquityTroves, getCachedTellerBids, getCachedTermMaxDiscovery, getCachedTermMaxMarket, getCachedTermMaxMarkets, getCoreValidators, getFluidFTokensConverter, getGmxApiHost, getGmxReadContracts, getGmxUserPositions, getHealthFactor, getHypercoreUserPositions, getHypercoreVaultRegistry, getLenderAssets, getLenderPublicData, getLenderPublicDataAll, getLenderPublicDataViaApi, getLenderUserDataMulti, getLenderUserDataResult, getLendersForChain, getLstDelegation, getLstValidators, getLstWithdrawalRegistry, getLstWithdrawalRequests, getMaxAmountClose, getMaxAmountCollateralSwap, getMaxAmountDebtSwap, getMaxAmountOpen, getMergedUserData, getMorphoTypeMarketConverter, getReadFailurePolicy, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getTermProfile, getVaultPublicDataAll, getVaultWithdrawalRequests, hasCritical, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasPendleMarkets, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, implausibleRatePercent, inverseKeyParts, inverseLenderKey, isBoundNeed, isFailedCall, isIlliquid, isLendingPosition, isLiveMarket as isLivePendleMarket, isStablecoinSymbol, isVaultPosition, isVaultVenue, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseEarnUid, parseMergedResult, parseMulticallRpcResponses, parseExpirySeconds as parsePendleExpirySeconds, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, assetKey as pendleAssetKey, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, ratePercent, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveEarnIdentity, resolveStCeloDepositGroup, resolveVaultProfileId, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, splitChainScopedAddress as splitPendleChainScopedAddress, stampCapabilities, stampVaultClassification, stampVaultTermSheets, supplyDescription, supplyFindings, supplyHeadline, swapRoutedProvidersArePriceConsistent, tellerBpsToPercent, tellerImpliedLtv, tellerLenderKey, tellerPoolFromLenderKey, termLenderKey, termMaxApiBase, borrowNif as termMaxBorrowNif, curveApr as termMaxCurveApr, curveAprNumber as termMaxCurveAprNumber, daysToMaturity as termMaxDaysToMaturity, lendNif as termMaxLendNif, mintGtFeeRatio as termMaxMintGtFeeRatio, ratioToNumber as termMaxRatioToNumber, ratioToPercent as termMaxRatioToPercent, tickToAprNumber, tickToPrice, toDigest, toTermSheetInput, toVaultTermInput, tryParseEarnUid, unflattenLenderData, updateFeedStats, usdValue, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData, vaultSharesToAssets, vaultTermInputFromEarnMarket, vaultTermInputFromSourceRow, vaultTraits, vaultVenue, venueBrand, venueBrandKey };
|
|
69957
70176
|
//# sourceMappingURL=index.js.map
|
|
69958
70177
|
//# sourceMappingURL=index.js.map
|