@1delta/margin-fetcher 0.0.305 → 0.0.307
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.js +27 -59
- package/dist/index.js.map +1 -1
- package/dist/lending/user-data/morpho/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/utils/createGeneralUserState.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchPublic.d.ts +14 -13
- package/dist/vaults/euler-earn/fetchPublic.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -11413,7 +11413,9 @@ function createBaseTypeUserState(payload, lenderData, totalDeposits24h = 0, tota
|
|
|
11413
11413
|
collateralAllActive += (userConfigForAsset?.collateralFactor ?? 1) * depositsUSDOracle;
|
|
11414
11414
|
}
|
|
11415
11415
|
depositInterest += depositRate * depositsUSD;
|
|
11416
|
-
|
|
11416
|
+
const posStableRate = Number(pos.stableBorrowRate);
|
|
11417
|
+
const effStableBorrowRate = Number.isFinite(posStableRate) && posStableRate > 0 ? posStableRate : stableBorrowRate;
|
|
11418
|
+
borrowInterest += debtStableUSD * effStableBorrowRate + debtUSD * variableBorrowRate;
|
|
11417
11419
|
}
|
|
11418
11420
|
const nav = deposits - debt;
|
|
11419
11421
|
const balanceData2 = {
|
|
@@ -23177,10 +23179,12 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
|
|
|
23177
23179
|
};
|
|
23178
23180
|
};
|
|
23179
23181
|
let sumFixedRaw = 0n;
|
|
23182
|
+
let weightedAprNumerator = 0;
|
|
23180
23183
|
for (const loan of brokerData.fixedLoans) {
|
|
23181
23184
|
const trancheRaw = BigInt(loan.outstanding) + BigInt(loan.accruedInterest);
|
|
23182
23185
|
sumFixedRaw += trancheRaw;
|
|
23183
23186
|
const trancheToken = parseRawAmount(trancheRaw.toString(), loanDecimals);
|
|
23187
|
+
weightedAprNumerator += Number(trancheToken) * loan.apr;
|
|
23184
23188
|
mkTermPosition(`${loanMarketUid}#${loan.posId}`, trancheToken, {
|
|
23185
23189
|
loanId: loan.posId,
|
|
23186
23190
|
termId: loan.termId,
|
|
@@ -23203,12 +23207,18 @@ function createMorphoEntryFromMarketWithLens(balanceInfo, metaMap, chainId, lend
|
|
|
23203
23207
|
dataForLoanAsset.debtStable = fixedToken;
|
|
23204
23208
|
dataForLoanAsset.debtStableUSD = Number(fixedToken) * priceLoan;
|
|
23205
23209
|
dataForLoanAsset.debtStableUSDOracle = Number(fixedToken) * oraclePriceLoan;
|
|
23210
|
+
const fixedTokenNum = Number(fixedToken);
|
|
23211
|
+
dataForLoanAsset.stableBorrowRate = fixedTokenNum > 0 ? (weightedAprNumerator / fixedTokenNum).toString() : "0";
|
|
23206
23212
|
aggregateDebtToken = parseRawAmount(totalRaw.toString(), loanDecimals);
|
|
23207
23213
|
if (dynRaw > 0n) {
|
|
23208
23214
|
mkTermPosition(`${loanMarketUid}#dynamic`, dynToken, {
|
|
23209
23215
|
loanId: LISTA_DYNAMIC_LOAN_ID,
|
|
23210
23216
|
isDynamic: true,
|
|
23211
|
-
debt: dynToken
|
|
23217
|
+
debt: dynToken,
|
|
23218
|
+
// the flexible loan accrues at the underlying Moolah market's variable borrow rate
|
|
23219
|
+
// (PERCENT). Expired fixed positions refinance into this dynamic loan, so without
|
|
23220
|
+
// this the migrated debt would (incorrectly) report a 0% borrow rate.
|
|
23221
|
+
apr: loanAssetMeta?.variableBorrowRate ?? 0
|
|
23212
23222
|
});
|
|
23213
23223
|
}
|
|
23214
23224
|
}
|
|
@@ -38153,7 +38163,7 @@ function computeWeightedSupplyApy(strategies, totalAssetsRaw, feePercent, evkInd
|
|
|
38153
38163
|
}
|
|
38154
38164
|
if (weightedRay === ZERO) return 0;
|
|
38155
38165
|
const apyRayPerAsset = weightedRay / totalAssets;
|
|
38156
|
-
const grossPercent = Number(apyRayPerAsset) / RAY_TO_PERCENT3;
|
|
38166
|
+
const grossPercent = apyToAprPercent(Number(apyRayPerAsset) / RAY_TO_PERCENT3);
|
|
38157
38167
|
const netPercent = grossPercent * (1 - feePercent / 100);
|
|
38158
38168
|
return Number.isFinite(netPercent) ? netPercent : 0;
|
|
38159
38169
|
}
|
|
@@ -38327,18 +38337,6 @@ async function fetchEulerEarnVaultsFromSubgraph(chainId, prices = {}, tokenList
|
|
|
38327
38337
|
var EULER_DATA_API_BASE2 = "https://v3.euler.finance/v3";
|
|
38328
38338
|
var API_TIMEOUT_MS = 1e4;
|
|
38329
38339
|
var DETAIL_CONCURRENCY = 8;
|
|
38330
|
-
var BLOCK_TIME_SEC = {
|
|
38331
|
-
"1": 12,
|
|
38332
|
-
"56": 0.75,
|
|
38333
|
-
"130": 1,
|
|
38334
|
-
"146": 0.5,
|
|
38335
|
-
"8453": 2,
|
|
38336
|
-
"1923": 2,
|
|
38337
|
-
"42161": 0.25,
|
|
38338
|
-
"43114": 2
|
|
38339
|
-
};
|
|
38340
|
-
var DEFAULT_BLOCK_TIME_SEC = 2;
|
|
38341
|
-
var MAX_LAG_SECONDS = 30 * 60;
|
|
38342
38340
|
function safeBigInt2(v) {
|
|
38343
38341
|
if (v == null || v === "") return 0n;
|
|
38344
38342
|
try {
|
|
@@ -38366,37 +38364,6 @@ async function getJson(url) {
|
|
|
38366
38364
|
clearTimeout(timer);
|
|
38367
38365
|
}
|
|
38368
38366
|
}
|
|
38369
|
-
async function isEulerEarnSubgraphStale(chainId, subgraphUrl) {
|
|
38370
|
-
const [subHead, chainHead] = await Promise.all([
|
|
38371
|
-
fetchSubgraphHead(subgraphUrl),
|
|
38372
|
-
getEvmClientUniversal({ chain: chainId, rpcId: 0 }).getBlockNumber().then((b) => Number(b)).catch(() => null)
|
|
38373
|
-
]);
|
|
38374
|
-
if (subHead == null || chainHead == null) return true;
|
|
38375
|
-
const lagBlocks = chainHead - subHead;
|
|
38376
|
-
if (lagBlocks <= 0) return false;
|
|
38377
|
-
const lagSeconds = lagBlocks * (BLOCK_TIME_SEC[chainId] ?? DEFAULT_BLOCK_TIME_SEC);
|
|
38378
|
-
return lagSeconds > MAX_LAG_SECONDS;
|
|
38379
|
-
}
|
|
38380
|
-
async function fetchSubgraphHead(subgraphUrl) {
|
|
38381
|
-
const controller = new AbortController();
|
|
38382
|
-
const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
|
|
38383
|
-
try {
|
|
38384
|
-
const res = await fetch(subgraphUrl, {
|
|
38385
|
-
method: "POST",
|
|
38386
|
-
headers: { "Content-Type": "application/json" },
|
|
38387
|
-
body: JSON.stringify({ query: "{ _meta { block { number } } }" }),
|
|
38388
|
-
signal: controller.signal
|
|
38389
|
-
});
|
|
38390
|
-
if (!res.ok) return null;
|
|
38391
|
-
const json = await res.json();
|
|
38392
|
-
const n = json?.data?._meta?.block?.number;
|
|
38393
|
-
return typeof n === "number" ? n : null;
|
|
38394
|
-
} catch {
|
|
38395
|
-
return null;
|
|
38396
|
-
} finally {
|
|
38397
|
-
clearTimeout(timer);
|
|
38398
|
-
}
|
|
38399
|
-
}
|
|
38400
38367
|
function mapApiDetail(d, chainId, prices, tokenList) {
|
|
38401
38368
|
const address = (d.address ?? "").toLowerCase();
|
|
38402
38369
|
const underlying = (d.asset?.address ?? "").toLowerCase();
|
|
@@ -38498,20 +38465,21 @@ async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {})
|
|
|
38498
38465
|
// src/vaults/euler-earn/fetchPublic.ts
|
|
38499
38466
|
var isNonEmpty = (v) => !!v && Object.keys(v).length > 0;
|
|
38500
38467
|
var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}, multicallRetry) => {
|
|
38501
|
-
const
|
|
38502
|
-
|
|
38503
|
-
|
|
38504
|
-
|
|
38505
|
-
|
|
38506
|
-
isEulerEarnSubgraphStale(chainId, subgraphUrl).catch(() => false),
|
|
38507
|
-
fetchEulerEarnVaultsFromSubgraph(chainId, prices, tokenList, multicallRetry).then((r) => ({ ok: true, data: r })).catch(() => ({ ok: false, data: void 0 }))
|
|
38508
|
-
]);
|
|
38509
|
-
if (!stale && subgraph.ok && isNonEmpty(subgraph.data)) {
|
|
38510
|
-
return subgraph.data;
|
|
38511
|
-
}
|
|
38512
|
-
const fromApi = await fetchEulerEarnVaultsFromApi(chainId, prices, tokenList);
|
|
38468
|
+
const fromApi = await fetchEulerEarnVaultsFromApi(
|
|
38469
|
+
chainId,
|
|
38470
|
+
prices,
|
|
38471
|
+
tokenList
|
|
38472
|
+
).catch(() => void 0);
|
|
38513
38473
|
if (isNonEmpty(fromApi)) return fromApi;
|
|
38514
|
-
|
|
38474
|
+
const subgraphUrl = getEulerEarnSubgraphUrl(chainId);
|
|
38475
|
+
if (!subgraphUrl) return fromApi ?? {};
|
|
38476
|
+
const fromSubgraph = await fetchEulerEarnVaultsFromSubgraph(
|
|
38477
|
+
chainId,
|
|
38478
|
+
prices,
|
|
38479
|
+
tokenList,
|
|
38480
|
+
multicallRetry
|
|
38481
|
+
).catch(() => void 0);
|
|
38482
|
+
return isNonEmpty(fromSubgraph) ? fromSubgraph : fromApi ?? {};
|
|
38515
38483
|
};
|
|
38516
38484
|
var CHAIN_ID4 = "1";
|
|
38517
38485
|
var SWBTC = "0x8db2350d78abc13f5673a411d4700bcf87864dde";
|