@1delta/margin-fetcher 0.0.284 → 0.0.286
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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +646 -354
- package/dist/index.js.map +1 -1
- package/dist/lending/public-data/init/publicCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/euler/eulerDataApi.d.ts +36 -0
- package/dist/lending/user-data/euler/eulerDataApi.d.ts.map +1 -0
- package/dist/lending/user-data/euler/userCallBuild.d.ts +6 -6
- package/dist/lending/user-data/euler/userCallBuild.d.ts.map +1 -1
- package/dist/lending/user-data/euler/userCallParse.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/e2e.d.ts +3 -1
- package/dist/lending/user-data/fetch-balances/e2e.d.ts.map +1 -1
- package/dist/lending/user-data/fetch-balances/parse.d.ts.map +1 -1
- package/dist/utils/multicall.d.ts +15 -0
- package/dist/utils/multicall.d.ts.map +1 -1
- package/dist/vaults/classification.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchFromApi.d.ts +18 -0
- package/dist/vaults/euler-earn/fetchFromApi.d.ts.map +1 -0
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts +2 -0
- package/dist/vaults/euler-earn/fetchFromSubgraph.d.ts.map +1 -1
- package/dist/vaults/euler-earn/fetchPublic.d.ts +10 -8
- package/dist/vaults/euler-earn/fetchPublic.d.ts.map +1 -1
- package/dist/vaults/euler-earn/index.d.ts +2 -1
- package/dist/vaults/euler-earn/index.d.ts.map +1 -1
- package/dist/vaults/fetchVaultsAll.d.ts +6 -1
- package/dist/vaults/fetchVaultsAll.d.ts.map +1 -1
- package/dist/vaults/index.d.ts +1 -0
- package/dist/vaults/index.d.ts.map +1 -1
- package/dist/vaults/lookup.d.ts.map +1 -1
- package/dist/vaults/upshift/api.d.ts +67 -0
- package/dist/vaults/upshift/api.d.ts.map +1 -0
- package/dist/vaults/upshift/fetchPublic.d.ts +20 -0
- package/dist/vaults/upshift/fetchPublic.d.ts.map +1 -0
- package/dist/vaults/upshift/index.d.ts +4 -0
- package/dist/vaults/upshift/index.d.ts.map +1 -0
- package/dist/vaults/upshift/types.d.ts +79 -0
- package/dist/vaults/upshift/types.d.ts.map +1 -0
- package/dist/yields/intrinsic/fetchers/accountable.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/accountable.d.ts.map +1 -0
- package/dist/yields/intrinsic/fetchers/monadLst.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/monadLst.d.ts.map +1 -0
- package/dist/yields/intrinsic/fetchers/upshift.d.ts +3 -0
- package/dist/yields/intrinsic/fetchers/upshift.d.ts.map +1 -0
- package/dist/yields/intrinsic/index.d.ts.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, AbiEncodingLengthMismatchError, concatHex, pad, InvalidAddressError, stringToHex, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-Z3MGRQJR.js';
|
|
2
2
|
import './chunk-BYTNVMX7.js';
|
|
3
3
|
import './chunk-PR4QN5HX.js';
|
|
4
|
-
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type,
|
|
4
|
+
import { Lender, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isFluid, isGearboxV3, isYLDR, isCompoundV3Type, isLista, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
|
|
5
5
|
export { isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
|
|
6
|
+
import { aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, aaveReserves, compoundV3Reserves, morphoTypeMarkets, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, aaveOracles, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, fetchTokenLists, fetchTokenList, aaveV4Oracles } from '@1delta/data-sdk';
|
|
6
7
|
import lodash from 'lodash';
|
|
7
8
|
import { getEvmClient, getEvmChain, getEvmClientUniversal, multicallRetryUniversal } from '@1delta/providers';
|
|
8
9
|
import { MetaMorphoAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, GearboxCreditAccountCompressorV310Abi } from '@1delta/abis';
|
|
@@ -6246,165 +6247,6 @@ var IrgetterAbi = [
|
|
|
6246
6247
|
}
|
|
6247
6248
|
];
|
|
6248
6249
|
|
|
6249
|
-
// ../data-sdk/dist/index.mjs
|
|
6250
|
-
var GLOBAL_CHAIN_DATA_KEY = "__1delta_chain_registry__";
|
|
6251
|
-
globalThis[GLOBAL_CHAIN_DATA_KEY] = {};
|
|
6252
|
-
var GLOBAL_LENDER_DATA_KEY = "__1delta_lender_registry__";
|
|
6253
|
-
globalThis[GLOBAL_LENDER_DATA_KEY] = {
|
|
6254
|
-
aaveTokens: {},
|
|
6255
|
-
aavePools: {},
|
|
6256
|
-
compoundV3Pools: {},
|
|
6257
|
-
morphoPools: {},
|
|
6258
|
-
compoundV3BaseData: {},
|
|
6259
|
-
compoundV2Pools: {},
|
|
6260
|
-
compoundV2Tokens: {},
|
|
6261
|
-
compoundV2TokenArray: {},
|
|
6262
|
-
initConfig: {},
|
|
6263
|
-
aaveReserves: {},
|
|
6264
|
-
compoundV2Reserves: {},
|
|
6265
|
-
compoundV3Reserves: {},
|
|
6266
|
-
aaveOracles: {},
|
|
6267
|
-
compoundV2Oracles: {},
|
|
6268
|
-
compoundV3OraclesData: {},
|
|
6269
|
-
morphoOracles: {},
|
|
6270
|
-
morphoTypeOracles: {},
|
|
6271
|
-
morphoTypeMarkets: {},
|
|
6272
|
-
morphoTypeVaults: {},
|
|
6273
|
-
aaveOraclesConfig: {},
|
|
6274
|
-
compoundV2OraclesConfig: {},
|
|
6275
|
-
aaveWethGateway: {},
|
|
6276
|
-
morphoBundler3: {},
|
|
6277
|
-
listaNativeProvider: {},
|
|
6278
|
-
compoundV3Bulker: {},
|
|
6279
|
-
eulerConfigs: {},
|
|
6280
|
-
eulerVaults: {},
|
|
6281
|
-
dolomiteConfigs: {},
|
|
6282
|
-
dolomiteEmode: {},
|
|
6283
|
-
aaveV4Spokes: {},
|
|
6284
|
-
aaveV4Oracles: {},
|
|
6285
|
-
aaveV4Peripherals: {},
|
|
6286
|
-
siloMarkets: {},
|
|
6287
|
-
siloPeripherals: {},
|
|
6288
|
-
siloMarketsV3: {},
|
|
6289
|
-
siloPeripheralsV3: {},
|
|
6290
|
-
fluidResolvers: {},
|
|
6291
|
-
fluidVaults: {},
|
|
6292
|
-
gearboxResolvers: {
|
|
6293
|
-
addressProviderV310: "",
|
|
6294
|
-
marketCompressorV310: "",
|
|
6295
|
-
chains: {}
|
|
6296
|
-
}
|
|
6297
|
-
};
|
|
6298
|
-
function getGlobalData2() {
|
|
6299
|
-
return globalThis[GLOBAL_LENDER_DATA_KEY];
|
|
6300
|
-
}
|
|
6301
|
-
var aaveTokens = () => getGlobalData2()?.aaveTokens;
|
|
6302
|
-
var aavePools = () => getGlobalData2()?.aavePools;
|
|
6303
|
-
var aaveOracles = () => getGlobalData2()?.aaveOracles;
|
|
6304
|
-
var compoundV2Oracles = () => getGlobalData2()?.compoundV2Oracles;
|
|
6305
|
-
var compoundV3OraclesData = () => getGlobalData2()?.compoundV3OraclesData;
|
|
6306
|
-
var morphoTypeMarkets = () => getGlobalData2()?.morphoTypeMarkets;
|
|
6307
|
-
var morphoTypeVaults = () => getGlobalData2()?.morphoTypeVaults;
|
|
6308
|
-
var aaveReserves = () => getGlobalData2()?.aaveReserves;
|
|
6309
|
-
var compoundV3Reserves = () => getGlobalData2()?.compoundV3Reserves;
|
|
6310
|
-
var compoundV2Reserves = () => getGlobalData2()?.compoundV2Reserves;
|
|
6311
|
-
var compoundV3Pools = () => getGlobalData2()?.compoundV3Pools;
|
|
6312
|
-
var morphoPools = () => getGlobalData2()?.morphoPools;
|
|
6313
|
-
var compoundV3BaseData = () => getGlobalData2()?.compoundV3BaseData;
|
|
6314
|
-
var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
|
|
6315
|
-
var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
|
|
6316
|
-
var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
|
|
6317
|
-
var initConfig = () => getGlobalData2()?.initConfig;
|
|
6318
|
-
var aaveOraclesConfig = () => getGlobalData2()?.aaveOraclesConfig;
|
|
6319
|
-
var compoundV2OraclesConfig = () => getGlobalData2()?.compoundV2OraclesConfig;
|
|
6320
|
-
var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
|
|
6321
|
-
var eulerVaults = () => getGlobalData2()?.eulerVaults;
|
|
6322
|
-
var dolomiteConfigs = () => getGlobalData2()?.dolomiteConfigs;
|
|
6323
|
-
var dolomiteEmode = () => getGlobalData2()?.dolomiteEmode;
|
|
6324
|
-
var aaveV4Spokes = () => getGlobalData2()?.aaveV4Spokes;
|
|
6325
|
-
var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
|
|
6326
|
-
var siloMarkets = () => getGlobalData2()?.siloMarkets;
|
|
6327
|
-
var siloMarketsV3 = () => getGlobalData2()?.siloMarketsV3;
|
|
6328
|
-
var fluidResolvers = () => getGlobalData2()?.fluidResolvers;
|
|
6329
|
-
var gearboxResolvers = () => getGlobalData2()?.gearboxResolvers;
|
|
6330
|
-
var gearboxMarketCompressor = () => getGlobalData2()?.gearboxResolvers?.marketCompressorV310 || void 0;
|
|
6331
|
-
var GEARBOX_ACCOUNT_COMPRESSOR_V310 = "0x4115708Fc8fe6bB392De2e0C21c2C81dA2222394";
|
|
6332
|
-
var gearboxAccountCompressor = () => GEARBOX_ACCOUNT_COMPRESSOR_V310;
|
|
6333
|
-
var gearboxMarketConfigurators = (chainId) => getGlobalData2()?.gearboxResolvers?.chains?.[chainId]?.marketConfigurators;
|
|
6334
|
-
function aaveV4SpokeLenderKey(spoke) {
|
|
6335
|
-
if (!spoke || !spoke.startsWith("0x") || spoke.length !== 42) {
|
|
6336
|
-
throw new Error(`aaveV4SpokeLenderKey: invalid spoke address ${spoke}`);
|
|
6337
|
-
}
|
|
6338
|
-
return `AAVE_V4_${spoke.slice(2).toUpperCase()}`;
|
|
6339
|
-
}
|
|
6340
|
-
function parseAaveV4SpokeLenderKey(lenderKey) {
|
|
6341
|
-
const match = lenderKey.match(/^AAVE_V4_([0-9A-F]{40})$/);
|
|
6342
|
-
if (!match) return void 0;
|
|
6343
|
-
return { spokeAddrLower: "0x" + match[1].toLowerCase() };
|
|
6344
|
-
}
|
|
6345
|
-
function siloV2LenderKey(siloConfig) {
|
|
6346
|
-
if (!siloConfig || !siloConfig.startsWith("0x") || siloConfig.length !== 42) {
|
|
6347
|
-
throw new Error(`siloV2LenderKey: invalid siloConfig address ${siloConfig}`);
|
|
6348
|
-
}
|
|
6349
|
-
return `SILO_V2_${siloConfig.slice(2).toUpperCase()}`;
|
|
6350
|
-
}
|
|
6351
|
-
function parseSiloV2LenderKey(lenderKey) {
|
|
6352
|
-
const match = lenderKey.match(/^SILO_V2_([0-9A-F]{40})$/);
|
|
6353
|
-
if (!match) return void 0;
|
|
6354
|
-
return { siloConfigAddrLower: "0x" + match[1].toLowerCase() };
|
|
6355
|
-
}
|
|
6356
|
-
function getSiloV2MarketEntry(chainId, lenderKey) {
|
|
6357
|
-
const parsed = parseSiloV2LenderKey(lenderKey);
|
|
6358
|
-
if (!parsed) return void 0;
|
|
6359
|
-
const list = getGlobalData2()?.siloMarkets?.[chainId];
|
|
6360
|
-
if (!list) return void 0;
|
|
6361
|
-
return list.find(
|
|
6362
|
-
(m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower
|
|
6363
|
-
);
|
|
6364
|
-
}
|
|
6365
|
-
function siloV3LenderKey(siloConfig) {
|
|
6366
|
-
if (!siloConfig || !siloConfig.startsWith("0x") || siloConfig.length !== 42) {
|
|
6367
|
-
throw new Error(`siloV3LenderKey: invalid siloConfig address ${siloConfig}`);
|
|
6368
|
-
}
|
|
6369
|
-
return `SILO_V3_${siloConfig.slice(2).toUpperCase()}`;
|
|
6370
|
-
}
|
|
6371
|
-
function parseSiloV3LenderKey(lenderKey) {
|
|
6372
|
-
const match = lenderKey.match(/^SILO_V3_([0-9A-F]{40})$/);
|
|
6373
|
-
if (!match) return void 0;
|
|
6374
|
-
return { siloConfigAddrLower: "0x" + match[1].toLowerCase() };
|
|
6375
|
-
}
|
|
6376
|
-
function getSiloV3MarketEntry(chainId, lenderKey) {
|
|
6377
|
-
const parsed = parseSiloV3LenderKey(lenderKey);
|
|
6378
|
-
if (!parsed) return void 0;
|
|
6379
|
-
const list = getGlobalData2()?.siloMarketsV3?.[chainId];
|
|
6380
|
-
if (!list) return void 0;
|
|
6381
|
-
return list.find(
|
|
6382
|
-
(m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower
|
|
6383
|
-
);
|
|
6384
|
-
}
|
|
6385
|
-
function gearboxV3LenderKey(creditManager) {
|
|
6386
|
-
if (!creditManager || !creditManager.startsWith("0x") || creditManager.length !== 42) {
|
|
6387
|
-
throw new Error(
|
|
6388
|
-
`gearboxV3LenderKey: invalid creditManager address ${creditManager}`
|
|
6389
|
-
);
|
|
6390
|
-
}
|
|
6391
|
-
return `GEARBOX_V3_${creditManager.slice(2).toUpperCase()}`;
|
|
6392
|
-
}
|
|
6393
|
-
var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
|
|
6394
|
-
async function fetchTokenList(chainId) {
|
|
6395
|
-
const data = await fetch(getListUrl(chainId));
|
|
6396
|
-
if (!data.ok) throw new Error(`HTTP error! status: ${data.status}`);
|
|
6397
|
-
return (await data.json()).list;
|
|
6398
|
-
}
|
|
6399
|
-
async function fetchTokenLists(chainIds) {
|
|
6400
|
-
const promises = chainIds.map(async (chainId) => {
|
|
6401
|
-
const list = await fetchTokenList(chainId);
|
|
6402
|
-
return [chainId, list];
|
|
6403
|
-
});
|
|
6404
|
-
const results = await Promise.all(promises);
|
|
6405
|
-
return Object.fromEntries(results);
|
|
6406
|
-
}
|
|
6407
|
-
|
|
6408
6250
|
// src/utils/marketUid.ts
|
|
6409
6251
|
function createMarketUid(chainId, lender, refAddress) {
|
|
6410
6252
|
if (!refAddress || !lender || !chainId) {
|
|
@@ -7913,8 +7755,6 @@ var buildAaveV3StyleLenderReserveCall = (chainId, lender) => {
|
|
|
7913
7755
|
}
|
|
7914
7756
|
}
|
|
7915
7757
|
};
|
|
7916
|
-
|
|
7917
|
-
// src/lending/public-data/addresses/init.ts
|
|
7918
7758
|
function getInitLensAddress(chainId) {
|
|
7919
7759
|
return addressesInitCore.PublicLens[chainId];
|
|
7920
7760
|
}
|
|
@@ -9021,6 +8861,7 @@ var INIT_POOL_NAME_OVERRIDES = {
|
|
|
9021
8861
|
"0x592c91ac727da556dc90ddf5630e1901efcd0c92": "Init FBTC Isolated"
|
|
9022
8862
|
};
|
|
9023
8863
|
var INIT_DEFAULT_LIQUIDATION_PENALTY = 0.05;
|
|
8864
|
+
var INIT_POOLS_FROZEN = true;
|
|
9024
8865
|
var INIT_EMODE_LABELS = {
|
|
9025
8866
|
[1]: "Default",
|
|
9026
8867
|
[2]: "Blue Chip Volatile",
|
|
@@ -9095,8 +8936,12 @@ var getInitReservesDataConverter = (lender, chainId, prices, additionalYields, t
|
|
|
9095
8936
|
rewards: [],
|
|
9096
8937
|
config: {},
|
|
9097
8938
|
closeFactor: 1,
|
|
9098
|
-
|
|
9099
|
-
|
|
8939
|
+
// Reserve still exists (positions must remain visible & withdrawable);
|
|
8940
|
+
// only new deposits/borrows are blocked → active but frozen.
|
|
8941
|
+
isActive: true,
|
|
8942
|
+
isFrozen: INIT_POOLS_FROZEN,
|
|
8943
|
+
borrowingEnabled: false ,
|
|
8944
|
+
depositsEnabled: !INIT_POOLS_FROZEN,
|
|
9100
8945
|
params
|
|
9101
8946
|
};
|
|
9102
8947
|
});
|
|
@@ -13639,8 +13484,6 @@ function buildMorphoTypeCall(chainId, lender, marketsOVerride) {
|
|
|
13639
13484
|
return buildListaCall(chainId, marketsOVerride);
|
|
13640
13485
|
return buildMorphoCall(chainId, marketsOVerride);
|
|
13641
13486
|
}
|
|
13642
|
-
|
|
13643
|
-
// src/lending/public-data/morpho/getMarketsFromChain.ts
|
|
13644
13487
|
function getMorphoMarketDataConverter(lender, chainId, prices, additionalYields = {
|
|
13645
13488
|
intrinsicYields: {},
|
|
13646
13489
|
lenderRewards: {},
|
|
@@ -18482,8 +18325,6 @@ var vaultLensAbi = [
|
|
|
18482
18325
|
stateMutability: "view"
|
|
18483
18326
|
}
|
|
18484
18327
|
];
|
|
18485
|
-
|
|
18486
|
-
// src/lending/public-data/euler/publicCallBuild.ts
|
|
18487
18328
|
var buildEulerV2LenderReserveCall = (chainId, lender) => {
|
|
18488
18329
|
if (!ENABLED_EULER_V2_CHAINS.includes(chainId)) return [];
|
|
18489
18330
|
const config = eulerConfigs()?.[lender]?.[chainId];
|
|
@@ -18950,8 +18791,6 @@ var getEulerV2ReservesDataConverter = (lender, chainId, prices, additionalYields
|
|
|
18950
18791
|
expectedNumberOfCalls
|
|
18951
18792
|
];
|
|
18952
18793
|
};
|
|
18953
|
-
|
|
18954
|
-
// src/lending/public-data/aave-v4-type/publicCallBuild.ts
|
|
18955
18794
|
var BASE_CALLS_PER_RESERVE = 5;
|
|
18956
18795
|
var CALLS_PER_SPOKE_TAIL = 1;
|
|
18957
18796
|
var MAX_HUB_ASSETS = 25;
|
|
@@ -19062,8 +18901,6 @@ var getAaveV4ExpectedCallCount = (chainId, lender) => {
|
|
|
19062
18901
|
}
|
|
19063
18902
|
return count;
|
|
19064
18903
|
};
|
|
19065
|
-
|
|
19066
|
-
// src/lending/public-data/aave-v4-type/fetcher/normalize.ts
|
|
19067
18904
|
function toTokenAmount2(raw, decimals) {
|
|
19068
18905
|
if (raw === 0n) return "0";
|
|
19069
18906
|
const negative = raw < 0n;
|
|
@@ -19620,8 +19457,6 @@ var InterestRateModelV2Abi = [
|
|
|
19620
19457
|
]
|
|
19621
19458
|
}
|
|
19622
19459
|
];
|
|
19623
|
-
|
|
19624
|
-
// src/lending/public-data/silo-v2/publicCallBuild.ts
|
|
19625
19460
|
var SILO_V2_CALLS_PER_SIDE = 3;
|
|
19626
19461
|
var SILO_V2_CALLS_PER_PAIR = SILO_V2_CALLS_PER_SIDE * 2;
|
|
19627
19462
|
function buildSiloV2LenderReserveCall(_chainId, lender) {
|
|
@@ -19868,8 +19703,6 @@ var getSiloV2ReservesDataConverter = (lender, chainId, prices, additionalYields,
|
|
|
19868
19703
|
SILO_V2_CALLS_PER_PAIR
|
|
19869
19704
|
];
|
|
19870
19705
|
};
|
|
19871
|
-
|
|
19872
|
-
// src/lending/public-data/silo-v3/publicCallBuild.ts
|
|
19873
19706
|
var SILO_V3_CALLS_PER_SIDE = 3;
|
|
19874
19707
|
var SILO_V3_CALLS_PER_PAIR = SILO_V3_CALLS_PER_SIDE * 2;
|
|
19875
19708
|
function buildSiloV3LenderReserveCall(_chainId, lender) {
|
|
@@ -19900,8 +19733,6 @@ function buildSiloV3LenderReserveCall(_chainId, lender) {
|
|
|
19900
19733
|
}
|
|
19901
19734
|
return calls;
|
|
19902
19735
|
}
|
|
19903
|
-
|
|
19904
|
-
// src/lending/public-data/silo-v3/publicCallParse.ts
|
|
19905
19736
|
var ZERO_ADDRESS3 = "0x0000000000000000000000000000000000000000";
|
|
19906
19737
|
var getSiloV3ReservesDataConverter = (lender, chainId, prices, additionalYields, tokenList = {}) => {
|
|
19907
19738
|
const market = getSiloV3MarketEntry(chainId, lender);
|
|
@@ -20259,8 +20090,6 @@ function parseVault(vault, chainId, prices, additionalYields, tokenList) {
|
|
|
20259
20090
|
}
|
|
20260
20091
|
};
|
|
20261
20092
|
}
|
|
20262
|
-
|
|
20263
|
-
// src/lending/public-data/dolomite/publicCallBuild.ts
|
|
20264
20093
|
var getDolomiteMarketIds = (chainId) => {
|
|
20265
20094
|
const markets = dolomiteConfigs()?.[chainId]?.markets;
|
|
20266
20095
|
return markets ? Object.keys(markets) : [];
|
|
@@ -20445,8 +20274,6 @@ var getDolomitePublicDataConverter = (lender, chainId, _prices, additionalYields
|
|
|
20445
20274
|
expectedNumberOfCalls
|
|
20446
20275
|
];
|
|
20447
20276
|
};
|
|
20448
|
-
|
|
20449
|
-
// src/lending/public-data/gearbox/publicCallBuild.ts
|
|
20450
20277
|
var buildGearboxCall = (chainId, _lender) => {
|
|
20451
20278
|
const compressor = gearboxMarketCompressor();
|
|
20452
20279
|
const configurators = gearboxMarketConfigurators(chainId);
|
|
@@ -20467,8 +20294,6 @@ var buildGearboxCall = (chainId, _lender) => {
|
|
|
20467
20294
|
}
|
|
20468
20295
|
];
|
|
20469
20296
|
};
|
|
20470
|
-
|
|
20471
|
-
// src/lending/public-data/gearbox/publicCallParse.ts
|
|
20472
20297
|
var RAY_TO_PERCENT = 1e25;
|
|
20473
20298
|
var scaleGearboxRate = (raw) => {
|
|
20474
20299
|
if (raw === void 0 || raw === null) return 0;
|
|
@@ -21113,8 +20938,6 @@ async function fetchSiloMarkets(chainId, options) {
|
|
|
21113
20938
|
(s) => s.protocol?.protocolVersion === options.protocolVersion
|
|
21114
20939
|
);
|
|
21115
20940
|
}
|
|
21116
|
-
|
|
21117
|
-
// src/lending/public-data/silo-v2/convertPublic.ts
|
|
21118
20941
|
function convertSiloMarketsToPublicResponse(apiItems, chainId, prices, additionalYields = {
|
|
21119
20942
|
intrinsicYields: {},
|
|
21120
20943
|
lenderRewards: {},
|
|
@@ -21254,8 +21077,6 @@ function bigintToLtv(v) {
|
|
|
21254
21077
|
return Number.isFinite(n) ? n / 1e18 : 0;
|
|
21255
21078
|
}
|
|
21256
21079
|
}
|
|
21257
|
-
|
|
21258
|
-
// src/lending/public-data/silo-v3/convertPublic.ts
|
|
21259
21080
|
var ZERO_ADDRESS4 = "0x0000000000000000000000000000000000000000";
|
|
21260
21081
|
function convertSiloV3MarketsToPublicResponse(apiItems, chainId, prices, additionalYields = {
|
|
21261
21082
|
intrinsicYields: {},
|
|
@@ -22004,68 +21825,100 @@ function createCompoundV2Entry(i, data, key, assetsIn, vToken, meta, claimableRe
|
|
|
22004
21825
|
};
|
|
22005
21826
|
}
|
|
22006
21827
|
|
|
21828
|
+
// src/lending/user-data/euler/eulerDataApi.ts
|
|
21829
|
+
var EULER_DATA_API_BASE = "https://v3.euler.finance/v3";
|
|
21830
|
+
var EULER_API_REQUEST_TIMEOUT_MS = 1e4;
|
|
21831
|
+
var EULER_API_CHAINS = /* @__PURE__ */ new Set([
|
|
21832
|
+
"1",
|
|
21833
|
+
// Ethereum
|
|
21834
|
+
"56",
|
|
21835
|
+
// BSC
|
|
21836
|
+
"130",
|
|
21837
|
+
// Unichain
|
|
21838
|
+
"146",
|
|
21839
|
+
// Sonic
|
|
21840
|
+
"239",
|
|
21841
|
+
// TAC
|
|
21842
|
+
"999",
|
|
21843
|
+
// HyperEVM
|
|
21844
|
+
"1923",
|
|
21845
|
+
// Swell
|
|
21846
|
+
"8453",
|
|
21847
|
+
// Base
|
|
21848
|
+
"9745",
|
|
21849
|
+
// Plasma
|
|
21850
|
+
"42161",
|
|
21851
|
+
// Arbitrum
|
|
21852
|
+
"43114",
|
|
21853
|
+
// Avalanche
|
|
21854
|
+
"60808",
|
|
21855
|
+
// BOB
|
|
21856
|
+
"80094"
|
|
21857
|
+
// Berachain
|
|
21858
|
+
]);
|
|
21859
|
+
var eulerApiSupportsChain = (chainId) => EULER_API_CHAINS.has(chainId);
|
|
21860
|
+
async function fetchEulerPositionsFromApi(chainId, owner, forceFresh = true) {
|
|
21861
|
+
if (!eulerApiSupportsChain(chainId)) return void 0;
|
|
21862
|
+
const controller = new AbortController();
|
|
21863
|
+
const timeout = setTimeout(
|
|
21864
|
+
() => controller.abort(),
|
|
21865
|
+
EULER_API_REQUEST_TIMEOUT_MS
|
|
21866
|
+
);
|
|
21867
|
+
try {
|
|
21868
|
+
const positions = [];
|
|
21869
|
+
const limit = 100;
|
|
21870
|
+
let offset = 0;
|
|
21871
|
+
for (let page = 0; page < 10; page++) {
|
|
21872
|
+
const url = `${EULER_DATA_API_BASE}/accounts/${owner.toLowerCase()}/positions?chainId=${chainId}&forceFresh=${forceFresh}&limit=${limit}&offset=${offset}`;
|
|
21873
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
21874
|
+
if (!response.ok) return offset === 0 ? void 0 : positions;
|
|
21875
|
+
const body = await response.json();
|
|
21876
|
+
const page_ = body?.data ?? [];
|
|
21877
|
+
positions.push(...page_);
|
|
21878
|
+
const total = body?.meta?.total;
|
|
21879
|
+
offset += limit;
|
|
21880
|
+
if (page_.length < limit || typeof total === "number" && offset >= total)
|
|
21881
|
+
break;
|
|
21882
|
+
}
|
|
21883
|
+
return positions;
|
|
21884
|
+
} catch {
|
|
21885
|
+
return void 0;
|
|
21886
|
+
} finally {
|
|
21887
|
+
clearTimeout(timeout);
|
|
21888
|
+
}
|
|
21889
|
+
}
|
|
21890
|
+
|
|
22007
21891
|
// src/lending/user-data/euler/userCallBuild.ts
|
|
22008
|
-
Array.from(
|
|
21892
|
+
var ALL_EULER_SUB_ACCOUNT_INDEXES = Array.from(
|
|
22009
21893
|
{ length: 256 },
|
|
22010
21894
|
(_3, i) => i
|
|
22011
21895
|
);
|
|
22012
|
-
var
|
|
22013
|
-
var
|
|
22014
|
-
|
|
22015
|
-
|
|
22016
|
-
|
|
22017
|
-
|
|
22018
|
-
|
|
22019
|
-
|
|
22020
|
-
|
|
22021
|
-
|
|
22022
|
-
|
|
22023
|
-
"1923": `${EULER_SUBGRAPH_BASE}/euler-v2-swell/latest/gn`,
|
|
22024
|
-
"5000": `${EULER_SUBGRAPH_BASE}/euler-v2-mantle/latest/gn`,
|
|
22025
|
-
"8453": `${EULER_SUBGRAPH_BASE}/euler-v2-base/latest/gn`,
|
|
22026
|
-
"9745": `${EULER_SUBGRAPH_BASE}/euler-v2-plasma/latest/gn`,
|
|
22027
|
-
"42161": `${EULER_SUBGRAPH_BASE}/euler-v2-arbitrum/latest/gn`,
|
|
22028
|
-
"43114": `${EULER_SUBGRAPH_BASE}/euler-v2-avalanche/latest/gn`,
|
|
22029
|
-
"57073": `${EULER_SUBGRAPH_BASE}/euler-v2-ink/latest/gn`,
|
|
22030
|
-
"60808": `${EULER_SUBGRAPH_BASE}/euler-v2-bob/latest/gn`,
|
|
22031
|
-
"80094": `${EULER_SUBGRAPH_BASE}/euler-v2-berachain/latest/gn`
|
|
22032
|
-
};
|
|
22033
|
-
var SUBGRAPH_CACHE_TTL_MS = 3e4;
|
|
22034
|
-
var subgraphCache = /* @__PURE__ */ new Map();
|
|
22035
|
-
function fetchEulerSubAccountIndexes(chainId, owner) {
|
|
21896
|
+
var ACCOUNT_CACHE_TTL_MS = 5e3;
|
|
21897
|
+
var accountCache = /* @__PURE__ */ new Map();
|
|
21898
|
+
function indexesFromApiPositions(positions, owner) {
|
|
21899
|
+
const set = /* @__PURE__ */ new Set();
|
|
21900
|
+
for (const p of positions) {
|
|
21901
|
+
if (p.account) set.add(getSubAccountIndex(p.account, owner));
|
|
21902
|
+
}
|
|
21903
|
+
if (set.size === 0) set.add(0);
|
|
21904
|
+
return [...set];
|
|
21905
|
+
}
|
|
21906
|
+
function fetchEulerActiveIndexesViaApi(chainId, owner) {
|
|
22036
21907
|
const key = `${chainId}:${owner.toLowerCase()}`;
|
|
22037
|
-
const cached =
|
|
21908
|
+
const cached = accountCache.get(key);
|
|
22038
21909
|
if (cached) return cached.promise;
|
|
22039
|
-
const promise =
|
|
22040
|
-
|
|
22041
|
-
|
|
22042
|
-
|
|
22043
|
-
);
|
|
22044
|
-
subgraphCache.set(key, { promise, timer });
|
|
21910
|
+
const promise = fetchEulerPositionsFromApi(chainId, owner).then(
|
|
21911
|
+
(positions) => positions === void 0 ? void 0 : indexesFromApiPositions(positions, owner)
|
|
21912
|
+
).catch(() => void 0);
|
|
21913
|
+
const timer = setTimeout(() => accountCache.delete(key), ACCOUNT_CACHE_TTL_MS);
|
|
21914
|
+
accountCache.set(key, { promise, timer });
|
|
22045
21915
|
return promise;
|
|
22046
21916
|
}
|
|
22047
|
-
async function
|
|
22048
|
-
|
|
22049
|
-
|
|
22050
|
-
|
|
22051
|
-
|
|
22052
|
-
id
|
|
22053
|
-
subAccount
|
|
22054
|
-
}
|
|
22055
|
-
}`;
|
|
22056
|
-
const response = await fetch(url, {
|
|
22057
|
-
method: "POST",
|
|
22058
|
-
headers: { "Content-Type": "application/json" },
|
|
22059
|
-
body: JSON.stringify({ query: query3 })
|
|
22060
|
-
});
|
|
22061
|
-
if (!response.ok) return [0];
|
|
22062
|
-
const data = await response.json();
|
|
22063
|
-
const accounts = data?.data?.accounts;
|
|
22064
|
-
if (!accounts || accounts.length === 0) return [0];
|
|
22065
|
-
return accounts.map((a) => {
|
|
22066
|
-
const addr = a.subAccount || a.id;
|
|
22067
|
-
return getSubAccountIndex(addr, owner);
|
|
22068
|
-
});
|
|
21917
|
+
async function fetchEulerSubAccountIndexes(chainId, owner) {
|
|
21918
|
+
return await fetchEulerActiveIndexesViaApi(chainId, owner) ?? [0];
|
|
21919
|
+
}
|
|
21920
|
+
async function resolveEulerBuildIndexes(chainId, owner) {
|
|
21921
|
+
return await fetchEulerActiveIndexesViaApi(chainId, owner) ?? ALL_EULER_SUB_ACCOUNT_INDEXES;
|
|
22069
21922
|
}
|
|
22070
21923
|
var RESOLVED_STORE_TTL_MS = 6e4;
|
|
22071
21924
|
var resolvedIndexesStore = /* @__PURE__ */ new Map();
|
|
@@ -22107,7 +21960,7 @@ var buildEulerUserCall = async (chainId, lender, account, subAccountIndexes) =>
|
|
|
22107
21960
|
const accountLensAddress = config.accountLens;
|
|
22108
21961
|
const evcAddress = config.evc;
|
|
22109
21962
|
if (!accountLensAddress || !evcAddress) return [];
|
|
22110
|
-
const indexes = subAccountIndexes ?? await
|
|
21963
|
+
const indexes = subAccountIndexes ?? await resolveEulerBuildIndexes(chainId, account);
|
|
22111
21964
|
const sortedIndices = resolveSubAccountIndexes(account, indexes);
|
|
22112
21965
|
storeResolvedIndexes(chainId, account, indexes);
|
|
22113
21966
|
return sortedIndices.map((i) => ({
|
|
@@ -22116,8 +21969,6 @@ var buildEulerUserCall = async (chainId, lender, account, subAccountIndexes) =>
|
|
|
22116
21969
|
params: [evcAddress, getSubAccountAddress(account, i)]
|
|
22117
21970
|
}));
|
|
22118
21971
|
};
|
|
22119
|
-
|
|
22120
|
-
// src/lending/user-data/aave-v4-type/userCallBuild.ts
|
|
22121
21972
|
var USER_CALLS_PER_RESERVE = 4;
|
|
22122
21973
|
function resolveSpokeEntry2(chainId, lender) {
|
|
22123
21974
|
const parsed = parseAaveV4SpokeLenderKey(lender);
|
|
@@ -22158,8 +22009,6 @@ var buildAaveV4UserCall = (chainId, lender, account) => {
|
|
|
22158
22009
|
}
|
|
22159
22010
|
return calls;
|
|
22160
22011
|
};
|
|
22161
|
-
|
|
22162
|
-
// src/lending/user-data/silo-v2/userCallBuild.ts
|
|
22163
22012
|
var ASSET_TYPE_PROTECTED = 0;
|
|
22164
22013
|
var ASSET_TYPE_COLLATERAL = 1;
|
|
22165
22014
|
var SILO_V2_USER_CALLS_PER_SIDE = 5;
|
|
@@ -22207,8 +22056,6 @@ var buildSiloV2UserCall = (chainId, lender, account) => {
|
|
|
22207
22056
|
}
|
|
22208
22057
|
return calls;
|
|
22209
22058
|
};
|
|
22210
|
-
|
|
22211
|
-
// src/lending/user-data/silo-v3/userCallBuild.ts
|
|
22212
22059
|
var ASSET_TYPE_PROTECTED2 = 0;
|
|
22213
22060
|
var ASSET_TYPE_COLLATERAL2 = 1;
|
|
22214
22061
|
var SILO_V3_USER_CALLS_PER_SIDE = 5;
|
|
@@ -22256,8 +22103,6 @@ var buildSiloV3UserCall = (chainId, lender, account) => {
|
|
|
22256
22103
|
}
|
|
22257
22104
|
return calls;
|
|
22258
22105
|
};
|
|
22259
|
-
|
|
22260
|
-
// src/lending/user-data/fluid/userCallBuild.ts
|
|
22261
22106
|
var FLUID_USER_CALL_COUNT = 1;
|
|
22262
22107
|
var buildFluidUserCall = (chainId, _lender, account) => {
|
|
22263
22108
|
const resolvers = fluidResolvers()?.[chainId];
|
|
@@ -22270,14 +22115,12 @@ var buildFluidUserCall = (chainId, _lender, account) => {
|
|
|
22270
22115
|
}
|
|
22271
22116
|
];
|
|
22272
22117
|
};
|
|
22273
|
-
|
|
22274
|
-
// src/lending/user-data/gearbox/userCallBuild.ts
|
|
22275
22118
|
var CA_QUERY_LIMIT = 128;
|
|
22276
22119
|
var GEARBOX_V3_USER_CALL_COUNT = 1;
|
|
22277
22120
|
var buildGearboxV3UserCall = (chainId, _lender, account) => {
|
|
22278
22121
|
const compressor = gearboxAccountCompressor();
|
|
22279
22122
|
const configurators = gearboxMarketConfigurators(chainId);
|
|
22280
|
-
if (!configurators) return [];
|
|
22123
|
+
if (!compressor || !configurators) return [];
|
|
22281
22124
|
const curatorAddrs = Object.keys(configurators);
|
|
22282
22125
|
if (curatorAddrs.length === 0) return [];
|
|
22283
22126
|
return [
|
|
@@ -22309,18 +22152,16 @@ var buildGearboxV3UserCall = (chainId, _lender, account) => {
|
|
|
22309
22152
|
}
|
|
22310
22153
|
];
|
|
22311
22154
|
};
|
|
22312
|
-
|
|
22313
|
-
// src/lending/user-data/dolomite/userCallBuild.ts
|
|
22314
|
-
var SUBGRAPH_CACHE_TTL_MS2 = 3e4;
|
|
22155
|
+
var SUBGRAPH_CACHE_TTL_MS = 3e4;
|
|
22315
22156
|
var SUBGRAPH_TIMEOUT_MS2 = 1e4;
|
|
22316
|
-
var
|
|
22157
|
+
var subgraphCache = /* @__PURE__ */ new Map();
|
|
22317
22158
|
function fetchDolomiteAccountNumbers(chainId, owner) {
|
|
22318
22159
|
const key = `${chainId}:${owner.toLowerCase()}`;
|
|
22319
|
-
const cached =
|
|
22160
|
+
const cached = subgraphCache.get(key);
|
|
22320
22161
|
if (cached) return cached.promise;
|
|
22321
22162
|
const promise = fetchAccountNumbersFromSubgraph(chainId, owner).then((ns) => dedupeWithDefault(ns)).catch(() => ["0"]);
|
|
22322
|
-
const timer = setTimeout(() =>
|
|
22323
|
-
|
|
22163
|
+
const timer = setTimeout(() => subgraphCache.delete(key), SUBGRAPH_CACHE_TTL_MS);
|
|
22164
|
+
subgraphCache.set(key, { promise, timer });
|
|
22324
22165
|
return promise;
|
|
22325
22166
|
}
|
|
22326
22167
|
function dedupeWithDefault(numbers) {
|
|
@@ -23575,7 +23416,6 @@ var getEulerUserDataConverter = (lender, chainId, account, metaMap, subAccountIn
|
|
|
23575
23416
|
if (!result) continue;
|
|
23576
23417
|
const evcInfo = result.evcAccountInfo ?? result[0];
|
|
23577
23418
|
const vaultAccounts = result.vaultAccountInfo ?? result[1] ?? [];
|
|
23578
|
-
if (vaultAccounts.length === 0) continue;
|
|
23579
23419
|
const subAccountId = String(sortedIndices[idx]);
|
|
23580
23420
|
const enabledControllers = (evcInfo?.enabledControllers ?? []).map((a) => a.toLowerCase());
|
|
23581
23421
|
const controller = enabledControllers.length > 0 ? enabledControllers[0] : void 0;
|
|
@@ -23623,7 +23463,7 @@ var getEulerUserDataConverter = (lender, chainId, account, metaMap, subAccountIn
|
|
|
23623
23463
|
isAllowed: assets > 0n || borrowed > 0n
|
|
23624
23464
|
};
|
|
23625
23465
|
}
|
|
23626
|
-
if (Object.keys(positions).length > 0) {
|
|
23466
|
+
if (Object.keys(positions).length > 0 || controller) {
|
|
23627
23467
|
lendingPositions[subAccountId] = positions;
|
|
23628
23468
|
histData[subAccountId] = { totalDebt24h, totalDeposits24h };
|
|
23629
23469
|
}
|
|
@@ -23993,8 +23833,6 @@ function createAaveV4Entry(base, data, key, meta, spokeAddr) {
|
|
|
23993
23833
|
addedDebt: Number(currentDebt) * priceHist
|
|
23994
23834
|
};
|
|
23995
23835
|
}
|
|
23996
|
-
|
|
23997
|
-
// src/lending/user-data/silo-v2/userCallParse.ts
|
|
23998
23836
|
var getSiloV2UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
23999
23837
|
const market = getSiloV2MarketEntry(chainId, lender);
|
|
24000
23838
|
if (!market) return [() => void 0, 0];
|
|
@@ -24107,8 +23945,6 @@ function toBigInt6(v) {
|
|
|
24107
23945
|
return 0n;
|
|
24108
23946
|
}
|
|
24109
23947
|
}
|
|
24110
|
-
|
|
24111
|
-
// src/lending/user-data/silo-v3/userCallParse.ts
|
|
24112
23948
|
var getSiloV3UserDataConverter = (lender, chainId, account, metaMap) => {
|
|
24113
23949
|
const market = getSiloV3MarketEntry(chainId, lender);
|
|
24114
23950
|
if (!market) return [() => void 0, 0];
|
|
@@ -24354,8 +24190,6 @@ var getFluidUserDataConverter = (lender, chainId, account, meta) => {
|
|
|
24354
24190
|
FLUID_USER_CALL_COUNT
|
|
24355
24191
|
];
|
|
24356
24192
|
};
|
|
24357
|
-
|
|
24358
|
-
// src/lending/user-data/gearbox/userCallParse.ts
|
|
24359
24193
|
function toBigInt9(v) {
|
|
24360
24194
|
if (v === void 0 || v === null || v === "0x") return 0n;
|
|
24361
24195
|
if (typeof v === "bigint") return v;
|
|
@@ -24550,8 +24384,6 @@ var getGearboxV3UserDataConverter = (_lender, chainId, account, meta) => {
|
|
|
24550
24384
|
GEARBOX_V3_USER_CALL_COUNT
|
|
24551
24385
|
];
|
|
24552
24386
|
};
|
|
24553
|
-
|
|
24554
|
-
// src/lending/user-data/dolomite/userCallParse.ts
|
|
24555
24387
|
var getDolomiteUserDataConverter = (lender, chainId, account, metaMap) => {
|
|
24556
24388
|
const numbers = getResolvedDolomiteAccountNumbers(chainId, account) ?? ["0"];
|
|
24557
24389
|
const expectedNumberOfCalls = numbers.length;
|
|
@@ -24631,12 +24463,7 @@ function normalizeUnderlying3(token) {
|
|
|
24631
24463
|
// src/lending/user-data/fetch-balances/parse.ts
|
|
24632
24464
|
function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
24633
24465
|
if (isAaveV4Type(lender))
|
|
24634
|
-
return getAaveV4UserDataConverter(
|
|
24635
|
-
lender,
|
|
24636
|
-
chainId,
|
|
24637
|
-
account,
|
|
24638
|
-
meta?.[lender]
|
|
24639
|
-
);
|
|
24466
|
+
return getAaveV4UserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
24640
24467
|
if (isYLDR(lender))
|
|
24641
24468
|
return getYldrUserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
24642
24469
|
if (isAaveV2Type(lender))
|
|
@@ -24661,7 +24488,13 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
24661
24488
|
meta?.[lender]
|
|
24662
24489
|
);
|
|
24663
24490
|
if (isEulerType(lender))
|
|
24664
|
-
return getEulerUserDataConverter(
|
|
24491
|
+
return getEulerUserDataConverter(
|
|
24492
|
+
lender,
|
|
24493
|
+
chainId,
|
|
24494
|
+
account,
|
|
24495
|
+
meta?.[lender],
|
|
24496
|
+
params?.subAccountIndexes
|
|
24497
|
+
);
|
|
24665
24498
|
if (isSiloV2Type(lender))
|
|
24666
24499
|
return getSiloV2UserDataConverter(lender, chainId, account, meta?.[lender]);
|
|
24667
24500
|
if (isSiloV3Type(lender))
|
|
@@ -24671,7 +24504,12 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
24671
24504
|
if (isGearboxV3(lender))
|
|
24672
24505
|
return getGearboxV3UserDataConverter(lender, chainId, account, meta);
|
|
24673
24506
|
if (isDolomite(lender))
|
|
24674
|
-
return getDolomiteUserDataConverter(
|
|
24507
|
+
return getDolomiteUserDataConverter(
|
|
24508
|
+
lender,
|
|
24509
|
+
chainId,
|
|
24510
|
+
account,
|
|
24511
|
+
meta?.[lender]
|
|
24512
|
+
);
|
|
24675
24513
|
return getCompoundV2UserDataConverter(
|
|
24676
24514
|
lender,
|
|
24677
24515
|
chainId,
|
|
@@ -24679,13 +24517,16 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
|
|
|
24679
24517
|
meta?.[lender]
|
|
24680
24518
|
);
|
|
24681
24519
|
}
|
|
24682
|
-
var hasBalanceOrPositions = (entry) => {
|
|
24520
|
+
var hasBalanceOrPositions = (entry, keepActiveControllerMode = false) => {
|
|
24683
24521
|
const hasBalance = entry.balanceData.deposits > 0 || entry.balanceData.debt > 0;
|
|
24684
24522
|
const hasPositions = entry.positions && entry.positions.length > 0;
|
|
24685
|
-
|
|
24523
|
+
const hasActiveMode = keepActiveControllerMode && !!entry.userConfig?.selectedMode && entry.userConfig.selectedMode !== String(LENDER_MODE_NO_MODE);
|
|
24524
|
+
return hasBalance || hasPositions || hasActiveMode;
|
|
24686
24525
|
};
|
|
24687
|
-
var filterEmptyUserData = (userData) => {
|
|
24688
|
-
const filteredData = userData.data.filter(
|
|
24526
|
+
var filterEmptyUserData = (userData, keepActiveControllerMode = false) => {
|
|
24527
|
+
const filteredData = userData.data.filter(
|
|
24528
|
+
(e) => hasBalanceOrPositions(e, keepActiveControllerMode)
|
|
24529
|
+
);
|
|
24689
24530
|
if (filteredData.length === 0) return null;
|
|
24690
24531
|
return { ...userData, data: filteredData };
|
|
24691
24532
|
};
|
|
@@ -24714,7 +24555,12 @@ var convertLenderUserDataResult = (chainId, queriesRaw, rawResults, lenderState)
|
|
|
24714
24555
|
}
|
|
24715
24556
|
});
|
|
24716
24557
|
} else {
|
|
24717
|
-
const filtered = filterEmptyUserData(
|
|
24558
|
+
const filtered = filterEmptyUserData(
|
|
24559
|
+
convertedData,
|
|
24560
|
+
// Euler: retain a controller-only (empty) sub-account so its active
|
|
24561
|
+
// controller mode reaches the leverage-open builder.
|
|
24562
|
+
isEulerType(query3.lender)
|
|
24563
|
+
);
|
|
24718
24564
|
if (filtered) {
|
|
24719
24565
|
filtered.lender = query3.lender;
|
|
24720
24566
|
lenderData[query3.lender] = filtered;
|
|
@@ -24845,6 +24691,72 @@ var multicallViemAbiArray = async (chainId, abi, calls, getEvmClient16, retry =
|
|
|
24845
24691
|
);
|
|
24846
24692
|
}
|
|
24847
24693
|
};
|
|
24694
|
+
var multicallShardedAbiArray = async (chainId, abi, calls, getEvmClient16, poolSize, retries = maxRetries, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, logs = false) => {
|
|
24695
|
+
if (poolSize <= 1) {
|
|
24696
|
+
return multicallViemAbiArray(
|
|
24697
|
+
chainId,
|
|
24698
|
+
abi,
|
|
24699
|
+
calls,
|
|
24700
|
+
getEvmClient16,
|
|
24701
|
+
true,
|
|
24702
|
+
0,
|
|
24703
|
+
retries,
|
|
24704
|
+
allowFailure,
|
|
24705
|
+
batchSize,
|
|
24706
|
+
logs
|
|
24707
|
+
);
|
|
24708
|
+
}
|
|
24709
|
+
const abiIsArray = isArray(abi[0]);
|
|
24710
|
+
const contracts = calls.map(({ address, name, params }, i) => ({
|
|
24711
|
+
abi: abiIsArray ? abi?.[i] : abi,
|
|
24712
|
+
address,
|
|
24713
|
+
functionName: name,
|
|
24714
|
+
args: params
|
|
24715
|
+
}));
|
|
24716
|
+
const batches = [];
|
|
24717
|
+
for (let i = 0; i < contracts.length; i += batchSize) {
|
|
24718
|
+
batches.push({ start: i, items: contracts.slice(i, i + batchSize) });
|
|
24719
|
+
}
|
|
24720
|
+
const results = new Array(contracts.length);
|
|
24721
|
+
const runBatch = async (batch, rpcId, attemptsLeft, size) => {
|
|
24722
|
+
try {
|
|
24723
|
+
const provider = getEvmClient16(chainId, rpcId);
|
|
24724
|
+
const returnData = await provider.multicall({
|
|
24725
|
+
allowFailure,
|
|
24726
|
+
batchSize: size,
|
|
24727
|
+
contracts: batch.items
|
|
24728
|
+
});
|
|
24729
|
+
const mapped = allowFailure ? returnData.map(
|
|
24730
|
+
({ result, status }) => status !== "success" ? "0x" : result
|
|
24731
|
+
) : returnData;
|
|
24732
|
+
for (let j = 0; j < mapped.length; j++) {
|
|
24733
|
+
results[batch.start + j] = mapped[j];
|
|
24734
|
+
}
|
|
24735
|
+
} catch (error) {
|
|
24736
|
+
if (logs) console.log("error in sharded multicall batch", error);
|
|
24737
|
+
if (attemptsLeft <= 0) throw error;
|
|
24738
|
+
return runBatch(
|
|
24739
|
+
batch,
|
|
24740
|
+
rpcId + 1,
|
|
24741
|
+
attemptsLeft - 1,
|
|
24742
|
+
Math.max(1, Math.floor(size / 2))
|
|
24743
|
+
);
|
|
24744
|
+
}
|
|
24745
|
+
};
|
|
24746
|
+
const workers = Math.max(1, Math.min(poolSize, batches.length));
|
|
24747
|
+
let cursor = 0;
|
|
24748
|
+
const worker = async (workerId) => {
|
|
24749
|
+
while (true) {
|
|
24750
|
+
const idx = cursor++;
|
|
24751
|
+
if (idx >= batches.length) break;
|
|
24752
|
+
await runBatch(batches[idx], workerId, retries, batchSize);
|
|
24753
|
+
}
|
|
24754
|
+
};
|
|
24755
|
+
await Promise.all(
|
|
24756
|
+
Array.from({ length: workers }, (_3, w) => worker(w))
|
|
24757
|
+
);
|
|
24758
|
+
return results;
|
|
24759
|
+
};
|
|
24848
24760
|
function prepareMulticallInputs(abi, calls) {
|
|
24849
24761
|
const abiIsArray = isArray(abi[0]);
|
|
24850
24762
|
return calls.map(({ address, name, params }, i) => ({
|
|
@@ -29435,7 +29347,7 @@ function unflattenLenderData(pools) {
|
|
|
29435
29347
|
}
|
|
29436
29348
|
return result;
|
|
29437
29349
|
}
|
|
29438
|
-
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false) => {
|
|
29350
|
+
var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowFailure = true, batchSize = MULTICALL_DEFAULT_BATCH_SIZE, retries = 3, logs = false, concurrency = 1) => {
|
|
29439
29351
|
const queries = organizeUserQueries(queriesRaw);
|
|
29440
29352
|
const builtCalls = await Promise.all(
|
|
29441
29353
|
queries.map(async (query3) => {
|
|
@@ -29451,13 +29363,12 @@ var getLenderUserDataResult = async (chainId, queriesRaw, getEvmClient16, allowF
|
|
|
29451
29363
|
})
|
|
29452
29364
|
);
|
|
29453
29365
|
const calls = builtCalls.flat();
|
|
29454
|
-
return await
|
|
29366
|
+
return await multicallShardedAbiArray(
|
|
29455
29367
|
chainId,
|
|
29456
29368
|
calls.map((call) => call.abi),
|
|
29457
29369
|
calls.map((call) => call.call),
|
|
29458
29370
|
getEvmClient16,
|
|
29459
|
-
|
|
29460
|
-
0,
|
|
29371
|
+
concurrency,
|
|
29461
29372
|
retries,
|
|
29462
29373
|
allowFailure,
|
|
29463
29374
|
batchSize,
|
|
@@ -31190,8 +31101,6 @@ function getMaxAmountClose(borrowDiscountedCollateral, adjustedDebt, ltvIn, bfOu
|
|
|
31190
31101
|
if (denominator <= 0) return Infinity;
|
|
31191
31102
|
return (borrowDiscountedCollateral - 1.01 /* SAFE_HF */ * adjustedDebt) / denominator;
|
|
31192
31103
|
}
|
|
31193
|
-
|
|
31194
|
-
// src/yields/helpers.ts
|
|
31195
31104
|
function averageDataLastN(arr, n = 7) {
|
|
31196
31105
|
const last = arr.slice(-n);
|
|
31197
31106
|
if (last.length === 0) return 0;
|
|
@@ -32913,6 +32822,126 @@ var hastraPrimeFetcher = {
|
|
|
32913
32822
|
}
|
|
32914
32823
|
};
|
|
32915
32824
|
|
|
32825
|
+
// src/yields/intrinsic/fetchers/lombard.ts
|
|
32826
|
+
var LBTC_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/estimated-apy";
|
|
32827
|
+
var lombardLbtcFetcher = {
|
|
32828
|
+
label: "LBTC",
|
|
32829
|
+
fetch: async () => {
|
|
32830
|
+
const res = await fetch(LBTC_APY_URL, {
|
|
32831
|
+
headers: { accept: "application/json" }
|
|
32832
|
+
}).then((r) => r.json());
|
|
32833
|
+
const frac = Number(res?.lbtc_estimated_apy);
|
|
32834
|
+
return { LBTC: Number.isFinite(frac) ? frac * 100 : 0 };
|
|
32835
|
+
}
|
|
32836
|
+
};
|
|
32837
|
+
var LOMBARD_VAULT_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/vault/apy/history";
|
|
32838
|
+
var createLombardVaultFetcher = (wrapper, key) => ({
|
|
32839
|
+
label: `LOMBARD_VAULT:${wrapper}`,
|
|
32840
|
+
fetch: async () => {
|
|
32841
|
+
const url = `${LOMBARD_VAULT_APY_URL}?vault_wrapper=${wrapper}&interval=APY_INTERVAL_1M`;
|
|
32842
|
+
const res = await fetch(url, {
|
|
32843
|
+
headers: { accept: "application/json" }
|
|
32844
|
+
}).then((r) => r.json());
|
|
32845
|
+
const latest = Array.isArray(res?.snapshots) ? res.snapshots[0] : void 0;
|
|
32846
|
+
const frac = Number(latest?.total_apy);
|
|
32847
|
+
return { [key]: Number.isFinite(frac) ? frac * 100 : 0 };
|
|
32848
|
+
}
|
|
32849
|
+
});
|
|
32850
|
+
var lombardLbtcvFetcher = createLombardVaultFetcher(
|
|
32851
|
+
"VAULT_WRAPPER_BTCE",
|
|
32852
|
+
"LBTCv"
|
|
32853
|
+
);
|
|
32854
|
+
var ACCOUNTABLE_LIST_URL = "https://yield.accountable.capital/api/loan";
|
|
32855
|
+
async function symbolToAssetGroup(chainId) {
|
|
32856
|
+
const list = await fetchTokenList(chainId);
|
|
32857
|
+
const bySymbol = /* @__PURE__ */ new Map();
|
|
32858
|
+
const ambiguous = /* @__PURE__ */ new Set();
|
|
32859
|
+
for (const t of Object.values(list)) {
|
|
32860
|
+
const symbol = t?.symbol?.toLowerCase();
|
|
32861
|
+
const group = t?.assetGroup;
|
|
32862
|
+
if (!symbol || !group) continue;
|
|
32863
|
+
const existing = bySymbol.get(symbol);
|
|
32864
|
+
if (existing && existing !== group) {
|
|
32865
|
+
ambiguous.add(symbol);
|
|
32866
|
+
} else {
|
|
32867
|
+
bySymbol.set(symbol, group);
|
|
32868
|
+
}
|
|
32869
|
+
}
|
|
32870
|
+
for (const s of ambiguous) bySymbol.delete(s);
|
|
32871
|
+
return bySymbol;
|
|
32872
|
+
}
|
|
32873
|
+
var accountableFetcher = {
|
|
32874
|
+
label: "ACCOUNTABLE",
|
|
32875
|
+
fetch: async () => {
|
|
32876
|
+
const res = await fetch(ACCOUNTABLE_LIST_URL, {
|
|
32877
|
+
headers: { Accept: "application/json" }
|
|
32878
|
+
}).then((r) => r.json());
|
|
32879
|
+
const loans = res?.items ?? [];
|
|
32880
|
+
const chains = Array.from(
|
|
32881
|
+
new Set(
|
|
32882
|
+
loans.map((l) => l?.chain_id).filter((c) => typeof c === "number").map(String)
|
|
32883
|
+
)
|
|
32884
|
+
);
|
|
32885
|
+
const maps = /* @__PURE__ */ new Map();
|
|
32886
|
+
await Promise.all(
|
|
32887
|
+
chains.map(async (chainId) => {
|
|
32888
|
+
const map = await symbolToAssetGroup(chainId).catch(
|
|
32889
|
+
() => /* @__PURE__ */ new Map()
|
|
32890
|
+
);
|
|
32891
|
+
maps.set(chainId, map);
|
|
32892
|
+
})
|
|
32893
|
+
);
|
|
32894
|
+
const out = {};
|
|
32895
|
+
for (const loan of loans) {
|
|
32896
|
+
const chainId = loan?.chain_id != null ? String(loan.chain_id) : void 0;
|
|
32897
|
+
const symbol = loan?.shares_symbol?.toLowerCase();
|
|
32898
|
+
if (!chainId || !symbol) continue;
|
|
32899
|
+
const assetGroup = maps.get(chainId)?.get(symbol);
|
|
32900
|
+
if (!assetGroup) continue;
|
|
32901
|
+
const apy = Number(loan.net_apy ?? loan.apy_7d ?? 0);
|
|
32902
|
+
if (!Number.isFinite(apy)) continue;
|
|
32903
|
+
out[assetGroup] = apyToAprPercent(apy);
|
|
32904
|
+
}
|
|
32905
|
+
return out;
|
|
32906
|
+
}
|
|
32907
|
+
};
|
|
32908
|
+
|
|
32909
|
+
// src/yields/intrinsic/fetchers/upshift.ts
|
|
32910
|
+
var UPSHIFT_VAULTS_URL = "https://app.upshift.finance/api/proxy/vaults";
|
|
32911
|
+
var EARN_AUSD_VAULT = "0x36eDbF0C834591BFdfCaC0Ef9605528c75c406aA";
|
|
32912
|
+
var earnAUSD = "earnAUSD::earnAUSD";
|
|
32913
|
+
var upshiftFetcher = {
|
|
32914
|
+
label: "UPSHIFT",
|
|
32915
|
+
fetch: async () => {
|
|
32916
|
+
const res = await fetch(UPSHIFT_VAULTS_URL).then((r) => r.json());
|
|
32917
|
+
const vaults = res?.data ?? [];
|
|
32918
|
+
const vault = vaults.find(
|
|
32919
|
+
(v) => String(v?.address).toLowerCase() === EARN_AUSD_VAULT.toLowerCase()
|
|
32920
|
+
);
|
|
32921
|
+
const apy = Number(vault?.apy?.apy ?? 0);
|
|
32922
|
+
return { [earnAUSD]: apyToAprPercent(apy) };
|
|
32923
|
+
}
|
|
32924
|
+
};
|
|
32925
|
+
|
|
32926
|
+
// src/yields/intrinsic/fetchers/monadLst.ts
|
|
32927
|
+
var SMON_POOL_ID = "73c511a9-4dc0-4397-babe-e578fd75f0dd";
|
|
32928
|
+
var SHMON_POOL_ID = "ee40513c-9356-4c53-9f26-446b484a8ae2";
|
|
32929
|
+
var SMON_KEY = "Kintsu Staked Monad::sMON";
|
|
32930
|
+
var SHMON_KEY = "ShMonad::shMON";
|
|
32931
|
+
var monadLstFetcher = {
|
|
32932
|
+
label: "MONAD_LST",
|
|
32933
|
+
fetch: async () => {
|
|
32934
|
+
const [sMon, shMon] = await Promise.allSettled([
|
|
32935
|
+
fetchDefiLlamaApy(SMON_POOL_ID),
|
|
32936
|
+
fetchDefiLlamaApy(SHMON_POOL_ID)
|
|
32937
|
+
]);
|
|
32938
|
+
const out = {};
|
|
32939
|
+
if (sMon.status === "fulfilled") out[SMON_KEY] = sMon.value;
|
|
32940
|
+
if (shMon.status === "fulfilled") out[SHMON_KEY] = shMon.value;
|
|
32941
|
+
return out;
|
|
32942
|
+
}
|
|
32943
|
+
};
|
|
32944
|
+
|
|
32916
32945
|
// src/yields/intrinsic/index.ts
|
|
32917
32946
|
async function fetchIntrinsicYields() {
|
|
32918
32947
|
const wstethPromise = safeFetch(wstethFetcher.label, wstethFetcher.fetch);
|
|
@@ -32982,7 +33011,12 @@ async function fetchIntrinsicYields() {
|
|
|
32982
33011
|
lbgtFetcher,
|
|
32983
33012
|
psxdcFetcher,
|
|
32984
33013
|
coreLstFetcher,
|
|
32985
|
-
hastraPrimeFetcher
|
|
33014
|
+
hastraPrimeFetcher,
|
|
33015
|
+
lombardLbtcFetcher,
|
|
33016
|
+
lombardLbtcvFetcher,
|
|
33017
|
+
accountableFetcher,
|
|
33018
|
+
upshiftFetcher,
|
|
33019
|
+
monadLstFetcher
|
|
32986
33020
|
];
|
|
32987
33021
|
const results = await Promise.all([
|
|
32988
33022
|
wstethPromise,
|
|
@@ -33653,8 +33687,6 @@ var morphoFetcher = {
|
|
|
33653
33687
|
parse: parseMorphoResults,
|
|
33654
33688
|
getAbi: getMorphoAbi
|
|
33655
33689
|
};
|
|
33656
|
-
|
|
33657
|
-
// src/prices/oracle-prices/fetchers/compoundV2.ts
|
|
33658
33690
|
var CompoundV2OracleAbi = [
|
|
33659
33691
|
{
|
|
33660
33692
|
inputs: [{ internalType: "address", name: "cToken", type: "address" }],
|
|
@@ -34206,8 +34238,6 @@ var aaveV4Fetcher = {
|
|
|
34206
34238
|
parse: parseAaveV4Results,
|
|
34207
34239
|
getAbi: getAaveV4Abi
|
|
34208
34240
|
};
|
|
34209
|
-
|
|
34210
|
-
// src/prices/oracle-prices/fetchers/siloV2.ts
|
|
34211
34241
|
var SiloOracleAbi = [
|
|
34212
34242
|
{
|
|
34213
34243
|
inputs: [
|
|
@@ -34377,8 +34407,6 @@ var siloV2Fetcher = {
|
|
|
34377
34407
|
parse: parseSiloV2Results,
|
|
34378
34408
|
getAbi: getSiloV2Abi
|
|
34379
34409
|
};
|
|
34380
|
-
|
|
34381
|
-
// src/prices/oracle-prices/fetchers/siloV3.ts
|
|
34382
34410
|
var SiloOracleAbi2 = [
|
|
34383
34411
|
{
|
|
34384
34412
|
inputs: [
|
|
@@ -34753,8 +34781,6 @@ var dolomiteFetcher = {
|
|
|
34753
34781
|
parse: parseDolomiteResults,
|
|
34754
34782
|
getAbi: getDolomiteAbi
|
|
34755
34783
|
};
|
|
34756
|
-
|
|
34757
|
-
// src/prices/oracle-prices/fetchers/siloV2Graphql.ts
|
|
34758
34784
|
async function fetchSiloV2GraphQLMarkets(chainId) {
|
|
34759
34785
|
if (!SILO_API_SUPPORTED_CHAIN_IDS.has(chainId)) return null;
|
|
34760
34786
|
try {
|
|
@@ -34897,8 +34923,6 @@ function parseSiloV2GraphQLResults(items, context) {
|
|
|
34897
34923
|
}
|
|
34898
34924
|
return out;
|
|
34899
34925
|
}
|
|
34900
|
-
|
|
34901
|
-
// src/prices/oracle-prices/fetchers/siloV3Graphql.ts
|
|
34902
34926
|
async function fetchSiloV3GraphQLMarkets(chainId) {
|
|
34903
34927
|
if (!SILO_API_SUPPORTED_CHAIN_IDS.has(chainId)) return null;
|
|
34904
34928
|
try {
|
|
@@ -36217,8 +36241,6 @@ function withIdleExposure(exposures, totalAssetsFormatted, pricePerUnit) {
|
|
|
36217
36241
|
out.sort((a, b) => b.weightPct - a.weightPct);
|
|
36218
36242
|
return out;
|
|
36219
36243
|
}
|
|
36220
|
-
|
|
36221
|
-
// src/vaults/fluid/publicCallBuild.ts
|
|
36222
36244
|
var buildFluidFTokensCall = (chainId) => {
|
|
36223
36245
|
const resolvers = fluidResolvers()?.[chainId];
|
|
36224
36246
|
if (!resolvers) return [];
|
|
@@ -36441,8 +36463,6 @@ async function fetchFluidExposures(chainId, multicallRetry, prices, tokenList) {
|
|
|
36441
36463
|
}
|
|
36442
36464
|
return out;
|
|
36443
36465
|
}
|
|
36444
|
-
|
|
36445
|
-
// src/vaults/gearbox/publicCallBuild.ts
|
|
36446
36466
|
var buildGearboxV3PoolsCall = (chainId) => {
|
|
36447
36467
|
const compressor = gearboxMarketCompressor();
|
|
36448
36468
|
const configurators = gearboxMarketConfigurators(chainId);
|
|
@@ -38021,6 +38041,7 @@ var EULER_EARN_SUBGRAPH_URLS = {
|
|
|
38021
38041
|
[Chain.AVALANCHE_C_CHAIN]: eulerSubgraphUrl("euler-v2-avalanche")
|
|
38022
38042
|
};
|
|
38023
38043
|
var hasEulerEarnVaultSubgraph = (chainId) => chainId in EULER_EARN_SUBGRAPH_URLS;
|
|
38044
|
+
var getEulerEarnSubgraphUrl = (chainId) => EULER_EARN_SUBGRAPH_URLS[chainId];
|
|
38024
38045
|
var EULER_EARN_VAULTS_QUERY = `
|
|
38025
38046
|
{
|
|
38026
38047
|
eulerEarnVaults(first: 200, skip: 0) {
|
|
@@ -38249,10 +38270,176 @@ async function fetchEulerEarnVaultsFromSubgraph(chainId, prices = {}, tokenList
|
|
|
38249
38270
|
}
|
|
38250
38271
|
return out;
|
|
38251
38272
|
}
|
|
38273
|
+
var EULER_DATA_API_BASE2 = "https://v3.euler.finance/v3";
|
|
38274
|
+
var API_TIMEOUT_MS = 1e4;
|
|
38275
|
+
var DETAIL_CONCURRENCY = 8;
|
|
38276
|
+
var BLOCK_TIME_SEC = {
|
|
38277
|
+
"1": 12,
|
|
38278
|
+
"56": 0.75,
|
|
38279
|
+
"130": 1,
|
|
38280
|
+
"146": 0.5,
|
|
38281
|
+
"8453": 2,
|
|
38282
|
+
"1923": 2,
|
|
38283
|
+
"42161": 0.25,
|
|
38284
|
+
"43114": 2
|
|
38285
|
+
};
|
|
38286
|
+
var DEFAULT_BLOCK_TIME_SEC = 2;
|
|
38287
|
+
var MAX_LAG_SECONDS = 30 * 60;
|
|
38288
|
+
function safeBigInt2(v) {
|
|
38289
|
+
if (v == null || v === "") return 0n;
|
|
38290
|
+
try {
|
|
38291
|
+
return BigInt(typeof v === "number" ? Math.trunc(v) : v);
|
|
38292
|
+
} catch {
|
|
38293
|
+
return 0n;
|
|
38294
|
+
}
|
|
38295
|
+
}
|
|
38296
|
+
async function getJson(url) {
|
|
38297
|
+
const controller = new AbortController();
|
|
38298
|
+
const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
|
|
38299
|
+
try {
|
|
38300
|
+
const res = await fetch(url, { signal: controller.signal });
|
|
38301
|
+
if (!res.ok) return void 0;
|
|
38302
|
+
return await res.json();
|
|
38303
|
+
} catch {
|
|
38304
|
+
return void 0;
|
|
38305
|
+
} finally {
|
|
38306
|
+
clearTimeout(timer);
|
|
38307
|
+
}
|
|
38308
|
+
}
|
|
38309
|
+
async function isEulerEarnSubgraphStale(chainId, subgraphUrl) {
|
|
38310
|
+
const [subHead, chainHead] = await Promise.all([
|
|
38311
|
+
fetchSubgraphHead(subgraphUrl),
|
|
38312
|
+
getEvmClientUniversal({ chain: chainId, rpcId: 0 }).getBlockNumber().then((b) => Number(b)).catch(() => null)
|
|
38313
|
+
]);
|
|
38314
|
+
if (subHead == null || chainHead == null) return false;
|
|
38315
|
+
const lagBlocks = chainHead - subHead;
|
|
38316
|
+
if (lagBlocks <= 0) return false;
|
|
38317
|
+
const lagSeconds = lagBlocks * (BLOCK_TIME_SEC[chainId] ?? DEFAULT_BLOCK_TIME_SEC);
|
|
38318
|
+
return lagSeconds > MAX_LAG_SECONDS;
|
|
38319
|
+
}
|
|
38320
|
+
async function fetchSubgraphHead(subgraphUrl) {
|
|
38321
|
+
const controller = new AbortController();
|
|
38322
|
+
const timer = setTimeout(() => controller.abort(), API_TIMEOUT_MS);
|
|
38323
|
+
try {
|
|
38324
|
+
const res = await fetch(subgraphUrl, {
|
|
38325
|
+
method: "POST",
|
|
38326
|
+
headers: { "Content-Type": "application/json" },
|
|
38327
|
+
body: JSON.stringify({ query: "{ _meta { block { number } } }" }),
|
|
38328
|
+
signal: controller.signal
|
|
38329
|
+
});
|
|
38330
|
+
if (!res.ok) return null;
|
|
38331
|
+
const json = await res.json();
|
|
38332
|
+
const n = json?.data?._meta?.block?.number;
|
|
38333
|
+
return typeof n === "number" ? n : null;
|
|
38334
|
+
} catch {
|
|
38335
|
+
return null;
|
|
38336
|
+
} finally {
|
|
38337
|
+
clearTimeout(timer);
|
|
38338
|
+
}
|
|
38339
|
+
}
|
|
38340
|
+
function mapApiDetail(d, chainId, prices, tokenList) {
|
|
38341
|
+
const address = (d.address ?? "").toLowerCase();
|
|
38342
|
+
const underlying = (d.asset?.address ?? "").toLowerCase();
|
|
38343
|
+
if (!address || !underlying) return null;
|
|
38344
|
+
const assetMeta = tokenList[underlying];
|
|
38345
|
+
const decimals = Number(d.decimals ?? d.asset?.decimals ?? 18);
|
|
38346
|
+
const totalAssetsRaw = String(d.totalAssets ?? "0");
|
|
38347
|
+
const totalSupplyRaw = String(d.totalShares ?? "0");
|
|
38348
|
+
const convertToAssets = d.exchangeRate != null ? String(d.exchangeRate) : deriveConvertToAssets(totalAssetsRaw, totalSupplyRaw, decimals);
|
|
38349
|
+
const supplyRate = Number(d.supplyApy ?? d.apyCurrent ?? 0) || 0;
|
|
38350
|
+
const availableRaw = safeBigInt2(d.availableAssets) || safeBigInt2(totalAssetsRaw);
|
|
38351
|
+
const totalAssetsBig = safeBigInt2(totalAssetsRaw);
|
|
38352
|
+
const liquidityRaw = (availableRaw > totalAssetsBig ? totalAssetsBig : availableRaw).toString();
|
|
38353
|
+
const totalAssetsFormatted = Number(parseRawAmount(totalAssetsRaw, decimals));
|
|
38354
|
+
const liquidityFormatted = Number(parseRawAmount(liquidityRaw, decimals));
|
|
38355
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(underlying, chainId);
|
|
38356
|
+
const priceUsd = prices[oracleKey] ?? prices[underlying] ?? 0;
|
|
38357
|
+
const totalAssetsUsd = priceUsd ? totalAssetsFormatted * priceUsd : Number(d.totalSupplyUsd ?? 0);
|
|
38358
|
+
const liquidityUsd = priceUsd ? liquidityFormatted * priceUsd : Number(d.availableAssetsUsd ?? 0);
|
|
38359
|
+
return {
|
|
38360
|
+
address,
|
|
38361
|
+
underlying,
|
|
38362
|
+
symbol: d.symbol ?? "",
|
|
38363
|
+
name: d.name ?? "",
|
|
38364
|
+
decimals,
|
|
38365
|
+
totalAssets: totalAssetsRaw,
|
|
38366
|
+
totalSupply: totalSupplyRaw,
|
|
38367
|
+
convertToAssets,
|
|
38368
|
+
supplyRate,
|
|
38369
|
+
rewardsRate: 0,
|
|
38370
|
+
depositRate: supplyRate,
|
|
38371
|
+
// The API doesn't surface the performance fee on this endpoint; the
|
|
38372
|
+
// headline APY is already net, so 0 here only affects fee display.
|
|
38373
|
+
fee: 0,
|
|
38374
|
+
owner: d.owner?.toLowerCase(),
|
|
38375
|
+
curator: d.curator?.toLowerCase(),
|
|
38376
|
+
curatorName: curatorNameFromVaultName(d.name, assetMeta?.symbol),
|
|
38377
|
+
guardian: d.guardian?.toLowerCase(),
|
|
38378
|
+
feeRecipient: d.feeReceiver?.toLowerCase() || void 0,
|
|
38379
|
+
asset: assetMeta,
|
|
38380
|
+
priceUsd: priceUsd || void 0,
|
|
38381
|
+
totalAssetsFormatted,
|
|
38382
|
+
totalAssetsUsd,
|
|
38383
|
+
liquidity: liquidityRaw,
|
|
38384
|
+
liquidityFormatted,
|
|
38385
|
+
liquidityUsd
|
|
38386
|
+
};
|
|
38387
|
+
}
|
|
38388
|
+
async function mapWithConcurrency(items, limit, fn) {
|
|
38389
|
+
const out = new Array(items.length);
|
|
38390
|
+
let cursor = 0;
|
|
38391
|
+
const worker = async () => {
|
|
38392
|
+
while (true) {
|
|
38393
|
+
const i = cursor++;
|
|
38394
|
+
if (i >= items.length) break;
|
|
38395
|
+
out[i] = await fn(items[i]);
|
|
38396
|
+
}
|
|
38397
|
+
};
|
|
38398
|
+
await Promise.all(
|
|
38399
|
+
Array.from({ length: Math.min(limit, items.length) }, () => worker())
|
|
38400
|
+
);
|
|
38401
|
+
return out;
|
|
38402
|
+
}
|
|
38403
|
+
async function fetchEulerEarnVaultsFromApi(chainId, prices = {}, tokenList = {}) {
|
|
38404
|
+
const list = await getJson(
|
|
38405
|
+
`${EULER_DATA_API_BASE2}/earn/vaults?chainId=${chainId}&limit=200`
|
|
38406
|
+
);
|
|
38407
|
+
if (!list) return void 0;
|
|
38408
|
+
const rows = list.data ?? [];
|
|
38409
|
+
if (rows.length === 0) return {};
|
|
38410
|
+
const details = await mapWithConcurrency(
|
|
38411
|
+
rows,
|
|
38412
|
+
DETAIL_CONCURRENCY,
|
|
38413
|
+
(row) => getJson(
|
|
38414
|
+
`${EULER_DATA_API_BASE2}/earn/vaults/${chainId}/${row.address}?include=strategies`
|
|
38415
|
+
).then((d) => d?.data)
|
|
38416
|
+
);
|
|
38417
|
+
const out = {};
|
|
38418
|
+
for (const d of details) {
|
|
38419
|
+
if (!d) continue;
|
|
38420
|
+
const v = mapApiDetail(d, chainId, prices, tokenList);
|
|
38421
|
+
if (v) out[v.address] = v;
|
|
38422
|
+
}
|
|
38423
|
+
return out;
|
|
38424
|
+
}
|
|
38252
38425
|
|
|
38253
38426
|
// src/vaults/euler-earn/fetchPublic.ts
|
|
38427
|
+
var isNonEmpty = (v) => !!v && Object.keys(v).length > 0;
|
|
38254
38428
|
var fetchEulerEarnVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
38255
|
-
|
|
38429
|
+
const subgraphUrl = getEulerEarnSubgraphUrl(chainId);
|
|
38430
|
+
if (!subgraphUrl) {
|
|
38431
|
+
return await fetchEulerEarnVaultsFromApi(chainId, prices, tokenList) ?? {};
|
|
38432
|
+
}
|
|
38433
|
+
const [stale, subgraph] = await Promise.all([
|
|
38434
|
+
isEulerEarnSubgraphStale(chainId, subgraphUrl).catch(() => false),
|
|
38435
|
+
fetchEulerEarnVaultsFromSubgraph(chainId, prices, tokenList).then((r) => ({ ok: true, data: r })).catch(() => ({ ok: false, data: void 0 }))
|
|
38436
|
+
]);
|
|
38437
|
+
if (!stale && subgraph.ok && isNonEmpty(subgraph.data)) {
|
|
38438
|
+
return subgraph.data;
|
|
38439
|
+
}
|
|
38440
|
+
const fromApi = await fetchEulerEarnVaultsFromApi(chainId, prices, tokenList);
|
|
38441
|
+
if (isNonEmpty(fromApi)) return fromApi;
|
|
38442
|
+
return subgraph.ok && subgraph.data ? subgraph.data : {};
|
|
38256
38443
|
};
|
|
38257
38444
|
var CHAIN_ID4 = "1";
|
|
38258
38445
|
var SWBTC = "0x8db2350d78abc13f5673a411d4700bcf87864dde";
|
|
@@ -38383,36 +38570,6 @@ var stceloFetcher = {
|
|
|
38383
38570
|
return { STCELO: apr };
|
|
38384
38571
|
}
|
|
38385
38572
|
};
|
|
38386
|
-
|
|
38387
|
-
// src/yields/intrinsic/fetchers/lombard.ts
|
|
38388
|
-
var LBTC_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/estimated-apy";
|
|
38389
|
-
var lombardLbtcFetcher = {
|
|
38390
|
-
label: "LBTC",
|
|
38391
|
-
fetch: async () => {
|
|
38392
|
-
const res = await fetch(LBTC_APY_URL, {
|
|
38393
|
-
headers: { accept: "application/json" }
|
|
38394
|
-
}).then((r) => r.json());
|
|
38395
|
-
const frac = Number(res?.lbtc_estimated_apy);
|
|
38396
|
-
return { LBTC: Number.isFinite(frac) ? frac * 100 : 0 };
|
|
38397
|
-
}
|
|
38398
|
-
};
|
|
38399
|
-
var LOMBARD_VAULT_APY_URL = "https://mainnet.prod.lombard.finance/api/v1/analytics/vault/apy/history";
|
|
38400
|
-
var createLombardVaultFetcher = (wrapper, key) => ({
|
|
38401
|
-
label: `LOMBARD_VAULT:${wrapper}`,
|
|
38402
|
-
fetch: async () => {
|
|
38403
|
-
const url = `${LOMBARD_VAULT_APY_URL}?vault_wrapper=${wrapper}&interval=APY_INTERVAL_1M`;
|
|
38404
|
-
const res = await fetch(url, {
|
|
38405
|
-
headers: { accept: "application/json" }
|
|
38406
|
-
}).then((r) => r.json());
|
|
38407
|
-
const latest = Array.isArray(res?.snapshots) ? res.snapshots[0] : void 0;
|
|
38408
|
-
const frac = Number(latest?.total_apy);
|
|
38409
|
-
return { [key]: Number.isFinite(frac) ? frac * 100 : 0 };
|
|
38410
|
-
}
|
|
38411
|
-
});
|
|
38412
|
-
var lombardLbtcvFetcher = createLombardVaultFetcher(
|
|
38413
|
-
"VAULT_WRAPPER_BTCE",
|
|
38414
|
-
"LBTCv"
|
|
38415
|
-
);
|
|
38416
38573
|
var CHAIN_ID6 = "1284";
|
|
38417
38574
|
var STDOT = "0xbc7e02c4178a7df7d3e564323a5c359dc96c4db4";
|
|
38418
38575
|
var ONE_E185 = 10n ** 18n;
|
|
@@ -45242,6 +45399,127 @@ var fetchLagoonVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
|
45242
45399
|
return out;
|
|
45243
45400
|
};
|
|
45244
45401
|
|
|
45402
|
+
// src/vaults/upshift/api.ts
|
|
45403
|
+
var UPSHIFT_VAULTS_URL2 = "https://app.upshift.finance/api/proxy/vaults";
|
|
45404
|
+
var UPSHIFT_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
45405
|
+
"1",
|
|
45406
|
+
// Ethereum
|
|
45407
|
+
"14",
|
|
45408
|
+
// Flare
|
|
45409
|
+
"56",
|
|
45410
|
+
// BNB Chain
|
|
45411
|
+
"143",
|
|
45412
|
+
// Monad
|
|
45413
|
+
"43114",
|
|
45414
|
+
// Avalanche
|
|
45415
|
+
"8453",
|
|
45416
|
+
// Base
|
|
45417
|
+
"9745",
|
|
45418
|
+
// Plasma
|
|
45419
|
+
"57073",
|
|
45420
|
+
// Ink
|
|
45421
|
+
"999"
|
|
45422
|
+
// HyperEVM
|
|
45423
|
+
]);
|
|
45424
|
+
var hasUpshiftVaults = (chainId) => UPSHIFT_CHAIN_IDS.has(String(chainId));
|
|
45425
|
+
async function fetchUpshiftApiVaults() {
|
|
45426
|
+
const response = await fetch(UPSHIFT_VAULTS_URL2, {
|
|
45427
|
+
headers: { Accept: "application/json" }
|
|
45428
|
+
});
|
|
45429
|
+
if (!response.ok) {
|
|
45430
|
+
throw new Error(
|
|
45431
|
+
`Upshift vaults API failed: ${response.status} - ${response.statusText}`
|
|
45432
|
+
);
|
|
45433
|
+
}
|
|
45434
|
+
const json = await response.json();
|
|
45435
|
+
return json?.data ?? [];
|
|
45436
|
+
}
|
|
45437
|
+
|
|
45438
|
+
// src/vaults/upshift/fetchPublic.ts
|
|
45439
|
+
var num2 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
45440
|
+
var isEvmAddress = (a) => /^0x[0-9a-fA-F]{40}$/.test(a);
|
|
45441
|
+
var derivePricePerShare = (totalAssetsRaw, totalSupplyRaw, shareDecimals) => {
|
|
45442
|
+
try {
|
|
45443
|
+
const supply = BigInt(totalSupplyRaw);
|
|
45444
|
+
if (supply === 0n) return "0";
|
|
45445
|
+
const assets = BigInt(totalAssetsRaw);
|
|
45446
|
+
return (assets * 10n ** BigInt(shareDecimals) / supply).toString();
|
|
45447
|
+
} catch {
|
|
45448
|
+
return "0";
|
|
45449
|
+
}
|
|
45450
|
+
};
|
|
45451
|
+
function parseVault8(v, chainId, prices, tokenList) {
|
|
45452
|
+
const receiptAddr = (v?.receipt?.address ?? v?.address ?? "").toLowerCase();
|
|
45453
|
+
const vaultAddr = (v?.address ?? receiptAddr).toLowerCase();
|
|
45454
|
+
const asset0 = v.depositAssets?.find((a) => a?.address);
|
|
45455
|
+
const assetAddr = (asset0?.address ?? "").toLowerCase();
|
|
45456
|
+
if (!receiptAddr || !assetAddr) return null;
|
|
45457
|
+
if (!isEvmAddress(receiptAddr) || !isEvmAddress(assetAddr)) return null;
|
|
45458
|
+
const assetMeta = tokenList[assetAddr];
|
|
45459
|
+
const decimals = Number(v.receipt?.decimals ?? v.decimals ?? 18);
|
|
45460
|
+
const assetDecimals = Number(asset0?.decimals ?? assetMeta?.decimals ?? 18);
|
|
45461
|
+
const totalAssetsRaw = v.totalAssets?.raw?.toString() ?? "0";
|
|
45462
|
+
const totalSupplyRaw = v.totalSupply?.raw?.toString() ?? "0";
|
|
45463
|
+
const totalAssetsFormatted = Number(
|
|
45464
|
+
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
45465
|
+
);
|
|
45466
|
+
const base = num2(v.apy?.apy) ?? 0;
|
|
45467
|
+
const campaign = num2(v.apy?.campaignApy);
|
|
45468
|
+
const supplyRate = base;
|
|
45469
|
+
const rewardsRate = campaign ?? 0;
|
|
45470
|
+
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
45471
|
+
const apiTvlUsd = num2(v.latest_reported_tvl) ?? 0;
|
|
45472
|
+
const impliedPriceUsd = totalAssetsFormatted > 0 ? apiTvlUsd / totalAssetsFormatted : 0;
|
|
45473
|
+
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? impliedPriceUsd;
|
|
45474
|
+
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
45475
|
+
const name = (v.name ?? "").trim();
|
|
45476
|
+
const symbol = (v.receipt?.symbol ?? "").trim();
|
|
45477
|
+
return {
|
|
45478
|
+
address: receiptAddr,
|
|
45479
|
+
vaultAddress: vaultAddr,
|
|
45480
|
+
underlying: assetAddr,
|
|
45481
|
+
symbol,
|
|
45482
|
+
name: name || symbol,
|
|
45483
|
+
decimals,
|
|
45484
|
+
assetDecimals,
|
|
45485
|
+
totalAssets: totalAssetsRaw,
|
|
45486
|
+
totalSupply: totalSupplyRaw,
|
|
45487
|
+
pricePerShare: derivePricePerShare(
|
|
45488
|
+
totalAssetsRaw,
|
|
45489
|
+
totalSupplyRaw,
|
|
45490
|
+
decimals
|
|
45491
|
+
),
|
|
45492
|
+
supplyRate,
|
|
45493
|
+
rewardsRate,
|
|
45494
|
+
depositRate: supplyRate + rewardsRate,
|
|
45495
|
+
apy: {
|
|
45496
|
+
base: num2(v.apy?.apy),
|
|
45497
|
+
campaign,
|
|
45498
|
+
points: num2(v.apy?.pointsApy),
|
|
45499
|
+
underlying: num2(v.apy?.underlyingApy)
|
|
45500
|
+
},
|
|
45501
|
+
isDepositPaused: v.isDepositPaused ?? false,
|
|
45502
|
+
isWithdrawalPaused: v.isWithdrawalPaused ?? false,
|
|
45503
|
+
asset: assetMeta,
|
|
45504
|
+
priceUsd,
|
|
45505
|
+
totalAssetsFormatted,
|
|
45506
|
+
totalAssetsUsd
|
|
45507
|
+
};
|
|
45508
|
+
}
|
|
45509
|
+
var fetchUpshiftVaults = async (chainId, prices = {}, tokenList = {}) => {
|
|
45510
|
+
if (!hasUpshiftVaults(chainId)) return {};
|
|
45511
|
+
const items = await fetchUpshiftApiVaults();
|
|
45512
|
+
const want = Number(chainId);
|
|
45513
|
+
const out = {};
|
|
45514
|
+
for (const item of items) {
|
|
45515
|
+
if (Number(item?.chainId) !== want) continue;
|
|
45516
|
+
if (item?.isVisible === false) continue;
|
|
45517
|
+
const parsed = parseVault8(item, chainId, prices, tokenList);
|
|
45518
|
+
if (parsed) out[parsed.address] = parsed;
|
|
45519
|
+
}
|
|
45520
|
+
return out;
|
|
45521
|
+
};
|
|
45522
|
+
|
|
45245
45523
|
// src/vaults/yearn/api.ts
|
|
45246
45524
|
var YEARN_YDAEMON_BASE = "https://ydaemon.yearn.fi";
|
|
45247
45525
|
var YEARN_CHAIN_IDS = /* @__PURE__ */ new Set([
|
|
@@ -45327,9 +45605,9 @@ var asBig = (v) => {
|
|
|
45327
45605
|
return null;
|
|
45328
45606
|
}
|
|
45329
45607
|
};
|
|
45330
|
-
var
|
|
45608
|
+
var num3 = (v) => typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
45331
45609
|
var toPct = (v) => {
|
|
45332
|
-
const n =
|
|
45610
|
+
const n = num3(v);
|
|
45333
45611
|
return n == null ? 0 : n * 100;
|
|
45334
45612
|
};
|
|
45335
45613
|
var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
|
|
@@ -45344,7 +45622,7 @@ var deriveTotalSupply = (totalAssetsRaw, pricePerShareRaw, decimals) => {
|
|
|
45344
45622
|
return totalAssetsRaw || "0";
|
|
45345
45623
|
}
|
|
45346
45624
|
};
|
|
45347
|
-
function
|
|
45625
|
+
function parseVault9(v, chainId, prices, tokenList) {
|
|
45348
45626
|
const address = (v?.address ?? "").toLowerCase();
|
|
45349
45627
|
const assetAddr = (v?.token?.address ?? "").toLowerCase();
|
|
45350
45628
|
if (!address || !assetAddr) return null;
|
|
@@ -45361,16 +45639,16 @@ function parseVault8(v, chainId, prices, tokenList) {
|
|
|
45361
45639
|
const totalAssetsFormatted = Number(
|
|
45362
45640
|
parseRawAmount(totalAssetsRaw, assetDecimals)
|
|
45363
45641
|
);
|
|
45364
|
-
const realized =
|
|
45365
|
-
const forward =
|
|
45642
|
+
const realized = num3(v.apr?.netAPR);
|
|
45643
|
+
const forward = num3(v.apr?.forwardAPR?.netAPR);
|
|
45366
45644
|
const isForwardApr = realized == null && forward != null;
|
|
45367
45645
|
const supplyRate = toPct(realized ?? forward);
|
|
45368
45646
|
const rewardsRate = toPct(v.apr?.extra?.stakingRewardsAPR);
|
|
45369
45647
|
const fee = toPct(v.apr?.fees?.performance);
|
|
45370
45648
|
const oracleKey = toOracleKey(assetMeta?.assetGroup) ?? toGenericPriceKey(assetAddr, chainId);
|
|
45371
|
-
const apiPrice =
|
|
45649
|
+
const apiPrice = num3(v.tvl?.price) ?? 0;
|
|
45372
45650
|
const priceUsd = prices[oracleKey] ?? prices[assetAddr] ?? apiPrice;
|
|
45373
|
-
const apiTvlUsd =
|
|
45651
|
+
const apiTvlUsd = num3(v.tvl?.tvl) ?? 0;
|
|
45374
45652
|
const totalAssetsUsd = apiTvlUsd || totalAssetsFormatted * priceUsd;
|
|
45375
45653
|
const name = (v.name ?? "").trim();
|
|
45376
45654
|
const symbol = (v.symbol ?? "").trim();
|
|
@@ -45471,7 +45749,7 @@ var fetchYearnVaults = async (chainId, multicallRetry, prices = {}, tokenList =
|
|
|
45471
45749
|
const items = await fetchYearnApiVaults(chainId);
|
|
45472
45750
|
const out = {};
|
|
45473
45751
|
for (const item of items) {
|
|
45474
|
-
const parsed =
|
|
45752
|
+
const parsed = parseVault9(item, chainId, prices, tokenList);
|
|
45475
45753
|
if (parsed) out[parsed.address] = parsed;
|
|
45476
45754
|
}
|
|
45477
45755
|
try {
|
|
@@ -45782,6 +46060,7 @@ var stampVaultClassification = (data, chainId, tokenList = {}) => {
|
|
|
45782
46060
|
stampBag(data.lst, "lst");
|
|
45783
46061
|
stampBag(data.savings, "savings");
|
|
45784
46062
|
stampBag(data.lagoon, "lagoon");
|
|
46063
|
+
stampBag(data.upshift, "upshift");
|
|
45785
46064
|
stampBag(data.yearn, "yearn");
|
|
45786
46065
|
stampBag(data.hypercore, "hypercore", false);
|
|
45787
46066
|
stampBag(data.gmx, "gmx", false);
|
|
@@ -45796,7 +46075,7 @@ var GMX_SUPPORTED_CHAINS = Object.keys(GMX_API_HOSTS);
|
|
|
45796
46075
|
var getGmxApiHost = (chainId) => GMX_API_HOSTS[chainId];
|
|
45797
46076
|
|
|
45798
46077
|
// src/vaults/gmx/api.ts
|
|
45799
|
-
var
|
|
46078
|
+
var getJson2 = async (url) => {
|
|
45800
46079
|
const res = await fetch(url, {
|
|
45801
46080
|
method: "GET",
|
|
45802
46081
|
headers: { Accept: "application/json" }
|
|
@@ -45808,12 +46087,12 @@ var fetchGmxRawData = async (chainId, period, apiUrlOverride) => {
|
|
|
45808
46087
|
const host = apiUrlOverride ?? getGmxApiHost(chainId);
|
|
45809
46088
|
if (!host) throw new Error(`GMX not supported on chain ${chainId}`);
|
|
45810
46089
|
const [apy, marketsRes, glvsRes, tokensRes] = await Promise.all([
|
|
45811
|
-
|
|
45812
|
-
|
|
46090
|
+
getJson2(`${host}/apy?period=${encodeURIComponent(period)}`),
|
|
46091
|
+
getJson2(`${host}/markets`).catch(() => ({
|
|
45813
46092
|
markets: []
|
|
45814
46093
|
})),
|
|
45815
|
-
|
|
45816
|
-
|
|
46094
|
+
getJson2(`${host}/glvs`).catch(() => ({ glvs: [] })),
|
|
46095
|
+
getJson2(`${host}/tokens`).catch(() => ({
|
|
45817
46096
|
tokens: []
|
|
45818
46097
|
}))
|
|
45819
46098
|
]);
|
|
@@ -46602,7 +46881,7 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
|
|
|
46602
46881
|
// src/vaults/gmx/fetchPublic.ts
|
|
46603
46882
|
var GMX_TOKEN_DECIMALS = 18;
|
|
46604
46883
|
var DEFAULT_PERIOD = "90d";
|
|
46605
|
-
var
|
|
46884
|
+
var num4 = (n) => typeof n === "number" && Number.isFinite(n) ? n : 0;
|
|
46606
46885
|
var minDefined = (a, b) => a == null ? b : b == null ? a : Math.min(a, b);
|
|
46607
46886
|
var glvMarketRoomUsd = (cap, priceUsd) => {
|
|
46608
46887
|
const currentUsd = Number(cap.balanceAmount) / 1e18 * priceUsd;
|
|
@@ -46636,9 +46915,9 @@ var fetchGmxVaults = async (chainId, multicallRetry, options) => {
|
|
|
46636
46915
|
indexToken: indexToken ? indexToken.toLowerCase() : void 0,
|
|
46637
46916
|
longSymbol,
|
|
46638
46917
|
shortSymbol,
|
|
46639
|
-
apy:
|
|
46640
|
-
baseApy:
|
|
46641
|
-
bonusApr:
|
|
46918
|
+
apy: num4(entry?.apy),
|
|
46919
|
+
baseApy: num4(entry?.baseApy),
|
|
46920
|
+
bonusApr: num4(entry?.bonusApr),
|
|
46642
46921
|
yieldProfile: "volatile",
|
|
46643
46922
|
denomination: denominationFor(longSymbol, shortSymbol)
|
|
46644
46923
|
};
|
|
@@ -47062,6 +47341,7 @@ function buildVaultLookup(data) {
|
|
|
47062
47341
|
addEntries(data.lst, "lst");
|
|
47063
47342
|
addEntries(data.savings, "savings");
|
|
47064
47343
|
addEntries(data.lagoon, "lagoon");
|
|
47344
|
+
addEntries(data.upshift, "upshift");
|
|
47065
47345
|
addEntries(data.yearn, "yearn");
|
|
47066
47346
|
return map;
|
|
47067
47347
|
}
|
|
@@ -47184,6 +47464,18 @@ var getVaultPublicDataAll = async (chainId, providers, multicallRetry, prices =
|
|
|
47184
47464
|
})
|
|
47185
47465
|
);
|
|
47186
47466
|
}
|
|
47467
|
+
if (requested.has("upshift")) {
|
|
47468
|
+
tasks.push(
|
|
47469
|
+
fetchUpshiftVaults(chainId, prices, tokenList).then((res) => {
|
|
47470
|
+
out.upshift = res;
|
|
47471
|
+
}).catch((e) => {
|
|
47472
|
+
warn4(
|
|
47473
|
+
`[vaults] upshift fetch failed for chain ${chainId}:`,
|
|
47474
|
+
e?.message ?? e
|
|
47475
|
+
);
|
|
47476
|
+
})
|
|
47477
|
+
);
|
|
47478
|
+
}
|
|
47187
47479
|
if (requested.has("yearn")) {
|
|
47188
47480
|
tasks.push(
|
|
47189
47481
|
fetchYearnVaults(chainId, multicallRetry, prices, tokenList).then((res) => {
|
|
@@ -47776,6 +48068,6 @@ async function fetchTokenBalances(chainId, account, tokens, options = {}) {
|
|
|
47776
48068
|
return parseTokenBalanceResult(rawResult, prepared.query);
|
|
47777
48069
|
}
|
|
47778
48070
|
|
|
47779
|
-
export { EMPTY_BALANCE, 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, MaxParamThresholds, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyVault, 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, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchLagoonApiVaults, fetchLagoonVaults, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchSiloVaults, fetchTokenBalances, fetchTokenMetadata, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, 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, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasYearnVaults, isStablecoinSymbol, isYearnV3, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, readVaultSharePrices, resolveStCeloDepositGroup, selectAssetGroupPrices, stampVaultClassification, unflattenLenderData };
|
|
48071
|
+
export { EMPTY_BALANCE, 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, MaxParamThresholds, STABLECOIN_SYMBOLS, STCELO_MANAGER_ADDRESS, UPSHIFT_CHAIN_IDS, UPSHIFT_VAULTS_URL2 as UPSHIFT_VAULTS_URL, VAULT_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachPricesToFlashLiquidity, buildFluidFTokensCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyVault, 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, convertLenderUserDataResult, createMarketUid, createMulticallRpcCall, createRawRpcCalls, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, detectInterfaceKinds, encodeBalanceFetcherCalldata, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchLagoonApiVaults, fetchLagoonVaults, fetchListaVaultsFromChain, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchSiloVaults, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, fuseLenderData, generateLendingPools, getAavesForChain, getAssetConfig, getBalanceForMarketUid, getBorrowCapacity, 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, getResolvedDolomiteAccountNumbers, getStCeloValidatorGroups, getSubAccountAddress, getSubAccountIndex, getVaultPublicDataAll, getVaultWithdrawalRequests, hasEulerEarnVaultSubgraph, hasLagoonVaults, hasMorphoPositionIndex, hasMorphoUserApi, hasMorphoUserSubgraph, hasUpshiftVaults, hasYearnVaults, isStablecoinSymbol, isYearnV3, keysFromMaps, multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTokenBalanceResult, positivePart2 as positivePart, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, readVaultSharePrices, resolveStCeloDepositGroup, selectAssetGroupPrices, stampVaultClassification, unflattenLenderData };
|
|
47780
48072
|
//# sourceMappingURL=index.js.map
|
|
47781
48073
|
//# sourceMappingURL=index.js.map
|