@1delta/margin-fetcher 5.0.14 → 5.0.16

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 CHANGED
@@ -1,13 +1,13 @@
1
- import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, pad, encodeFunctionData, formatUnits, isAddress, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-YILYOOYB.js';
1
+ import { parseAbi, keccak256, encodeAbiParameters, formatEther, BaseError, erc20Abi, stringToHex, isAddress, pad, encodeFunctionData, formatUnits, getAddress, decodeFunctionResult, decodeAbiParameters, concat, AbiEncodingLengthMismatchError, concatHex, toBytes, slice, hexToString, InvalidAddressError, boolToHex, integerRegex, numberToHex, bytesRegex, BytesSizeMismatchError, arrayRegex, UnsupportedPackedAbiType } from './chunk-YILYOOYB.js';
2
2
  import './chunk-BYTNVMX7.js';
3
3
  import './chunk-PR4QN5HX.js';
4
- import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isUsdd, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, hasCrossMarginRisk, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
4
+ import { Lender, isExactly, isMidnight, isTerm, isTermMax, isTeller, isListaDao, isLiquityFamily, isRiver, isInverse, isDssType, isCompoundV3Type, isFluid, isGearboxV3, isLlamaLend, isFrankencoin, isResupply, isCurvance, LIQUITY_FAMILY_LENDERS, isAaveType, isCompoundV3, isMultiMarket, isSiloV2Type, isSiloV3Type, isDolomite, hasCrossMarginRisk, isEulerType, isAaveV4Type, isInit, isMorphoType, isCompoundV2Type, isVenusType, isSumerType, AAVE_V3_LENDERS, AAVE_V2_LENDERS, isAaveV2Type, isAaveV32Type, isAaveV3Type, isUsdd, isSky, isYLDR, isLista, hasSubAccounts, isTectonicType, isKineticType, isBenqiType } from '@1delta/lender-registry';
5
5
  export { hasCrossMarginRisk, isAaveType, isAaveV2Type, isAaveV32Type, isAaveV3Type, isCompoundV3, isCompoundV3Type, isInit, isMorphoType, isMultiMarket, isYLDR } from '@1delta/lender-registry';
6
- import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, llamaLendLendersByChain, usddLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, usddConfigFor, usddChainData, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
6
+ import { fetchTokenLists, fetchTokenList, aavePools, compoundV3Pools, initConfig, morphoPools, compoundV2Pools, eulerVaults, siloMarkets, siloV2LenderKey, siloMarketsV3, siloV3LenderKey, aaveV4Spokes, aaveV4SpokeLenderKey, fluidResolvers, gearboxResolvers, dolomiteConfigs, midnightConfig, termConfig, termMarketsByChain, exactlyConfig, liquityLendersByChain, riverLendersByChain, inverseLendersByChain, llamaLendLendersByChain, usddLendersByChain, skyLendersByChain, frankencoinLendersByChain, resupplyLendersByChain, curvanceLendersByChain, tellerConfigByChain, tellerPoolsByChain, termMaxConfigByChain, aaveReserves, compoundV3Reserves, liquityConfigFor, liquityBranchesByChain, riverConfigFor, riverChainData, termMaxApiBaseUrl, termMaxLenderKey, inverseConfigFor, inverseChainData, llamaLendConfigFor, llamaLendChainData, llamaLendApiBaseUrl, resupplyConfigFor, dssConfigFor, dssChainData, dssDebtToken, dssDebtJoin, frankencoinConfigFor, frankencoinChainData, aaveOracles, morphoTypeMarkets, resolveMidnightApiBase, resolveTermApiBase, llamaLendMarketByVault, getSiloV2MarketEntry, getSiloV3MarketEntry, dolomiteEmode, curvanceConfigFor, aaveTokens, morphoTypeVaults, eulerConfigs, gearboxMarketCompressor, gearboxMarketConfigurators, gearboxV3LenderKey, midnightMarketsByChain, parseAaveV4SpokeLenderKey, gearboxAccountCompressor, compoundV2Tokens, exactlyMarketsByChain, aaveOraclesConfig, compoundV2Oracles, compoundV2TokenArray, compoundV2OraclesConfig, compoundV3OraclesData, compoundV3BaseData, compoundV2Reserves, aaveV4Oracles } from '@1delta/data-sdk';
7
7
  import lodash from 'lodash';
8
8
  import { Chain } from '@1delta/chain-registry';
9
9
  import { multicallRetryUniversal, getEvmClient, getEvmChain, getEvmClientUniversal } from '@1delta/providers';
10
- import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
10
+ import { LiquityTroveManagerAbi, LiquityActivePoolAbi, LiquityStabilityPoolAbi, LiquityPriceFeedAbi, LiquitySortedTrovesAbi, RiverTroveManagerAbi, RiverStabilityPoolAbi, TellerMarketRegistryAbi, TellerV2Abi, InverseMarketAbi, InverseOracleAbi, InverseDbrAbi, Erc20Abi, LlamaLendControllerAbi, LlamaLendControllerV1Abi, LlamaLendControllerV2Abi, LlamaLendVaultAbi, LlamaLendAmmAbi, MetaMorphoAbi, ExactlyPreviewerAbi, ExactlyAuditorAbi, LenderCommitmentGroupAbi, ResupplyRegistryAbi, ResupplyPairAbi, ResupplyUtilitiesAbi, ResupplyRewardHandlerAbi, ResupplyPairEmissionsAbi, ConvexPoolUtilAbi, FrankencoinPositionAbi, FluidLendingResolverAbi, FluidVaultResolverAbi, FluidLiquidityResolverAbi, MoolahVaultAbi, UsddVatAbi, UsddJugAbi, UsddSpotAbi, MorphoLensAbi, AaveV4SpokeAbi, AaveV4OracleAbi, AaveV4HubAbi, DolomiteMarginAbi, GearboxMarketCompressorV310Abi, MorphoBlueAbi, MidnightAbi, TermRepoTokenAbi, TermRepoServicerAbi, TermRepoCollateralManagerAbi, LiquityTroveNFTAbi, LiquityCollSurplusPoolAbi, TellerCollateralManagerAbi, TermMaxViewerAbi, InverseEscrowAbi, CurvanceMarketManagerAbi, CurvanceCTokenAbi, GearboxCreditAccountCompressorV310Abi, UsddCdpManagerAbi, UsddProxyRegistryAbi, CurvanceProtocolReaderAbi, CurvanceCentralRegistryAbi, TermPriceConsumerAbi, CurvanceOracleManagerAbi, TermMaxOracleAggregatorV2Abi } from '@1delta/abis';
11
11
  export { MorphoLensAbi } from '@1delta/abis';
12
12
  import { prepareDebitDataMulticall, prepareLenderDebitMulticall, parseDebitDataResult, parseLenderDebitResult, getPermit2ContractAddress, getCompoundV3CometAddress as getCompoundV3CometAddress$1, getMorphoAddress, getAaveCollateralTokenAddress, getSiloHalfForUnderlying, bandLtvCurve, InitMarginAddresses, getLstAcceptedInputs } from '@1delta/calldata-sdk';
13
13
  import { proxyNativeFetch } from '@1delta/proxy-fetch';
@@ -6424,6 +6424,9 @@ var getLendersForChain = (c) => {
6424
6424
  for (const l of usddLendersByChain(c)) {
6425
6425
  lenders.push(l);
6426
6426
  }
6427
+ for (const l of skyLendersByChain(c)) {
6428
+ lenders.push(l);
6429
+ }
6427
6430
  for (const l of frankencoinLendersByChain(c)) {
6428
6431
  lenders.push(l);
6429
6432
  }
@@ -6454,7 +6457,7 @@ var filterLendersByProtocol = (allLenders, protocolList) => {
6454
6457
  (b) => protocolList.includes(b)
6455
6458
  );
6456
6459
  return allLenders.filter(
6457
- (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE") || liquityBases.some((b) => lender?.startsWith(b)) || protocolList.includes(Lender.RIVER) && lender?.startsWith("RIVER") || protocolList.includes(Lender.TELLER) && lender?.startsWith("TELLER") || protocolList.includes(Lender.USDD) && lender?.startsWith("USDD") || protocolList.includes(Lender.FRANKENCOIN) && lender?.startsWith("FRANKENCOIN")
6460
+ (lender) => protocolList.includes(lender) || hasMorpho && lender?.startsWith("MORPHO_BLUE") || hasMoolah && lender?.startsWith("LISTA_DAO") || hasFluid && lender?.startsWith("FLUID") || hasGearboxV3 && lender?.startsWith("GEARBOX_V3") || hasDolomite && lender?.startsWith("DOLOMITE") || liquityBases.some((b) => lender?.startsWith(b)) || protocolList.includes(Lender.RIVER) && lender?.startsWith("RIVER") || protocolList.includes(Lender.TELLER) && lender?.startsWith("TELLER") || protocolList.includes(Lender.USDD) && lender?.startsWith("USDD") || protocolList.includes(Lender.SKY) && lender?.startsWith("SKY") || protocolList.includes(Lender.FRANKENCOIN) && lender?.startsWith("FRANKENCOIN")
6458
6461
  );
6459
6462
  };
6460
6463
  var getAavesForChain = () => {
@@ -21885,7 +21888,7 @@ async function fetchTellerMarkets(chainId) {
21885
21888
  } catch {
21886
21889
  return { chainId, pools: [] };
21887
21890
  }
21888
- const big15 = (i) => {
21891
+ const big16 = (i) => {
21889
21892
  const r = results[i];
21890
21893
  if (typeof r === "bigint") return r;
21891
21894
  if (typeof r === "number") return BigInt(r);
@@ -21899,20 +21902,20 @@ async function fetchTellerMarkets(chainId) {
21899
21902
  return null;
21900
21903
  };
21901
21904
  const num12 = (i) => {
21902
- const b = big15(i);
21905
+ const b = big16(i);
21903
21906
  return b === null ? null : Number(b);
21904
21907
  };
21905
21908
  const pool0 = pools.map((config, i) => {
21906
21909
  const base = i * READS_PER_POOL;
21907
21910
  return {
21908
21911
  config,
21909
- available: big15(base),
21910
- committed: big15(base + 1),
21912
+ available: big16(base),
21913
+ committed: big16(base + 1),
21911
21914
  minRateBps: num12(base + 2),
21912
- collateralPerPrincipal: big15(base + 3),
21915
+ collateralPerPrincipal: big16(base + 3),
21913
21916
  maxLoanDuration: num12(base + 4),
21914
- marketId: big15(base + 5),
21915
- totalAssets: big15(base + 6)
21917
+ marketId: big16(base + 5),
21918
+ totalAssets: big16(base + 6)
21916
21919
  };
21917
21920
  });
21918
21921
  const attByMarket = /* @__PURE__ */ new Map();
@@ -25019,72 +25022,92 @@ function resolvePositionManagers(cfg, marketManager) {
25019
25022
  }
25020
25023
  return void 0;
25021
25024
  }
25022
- var READS_PER_ILK = 4;
25023
- var USDD_ABI_PER_READ = [UsddVatAbi, UsddJugAbi, UsddSpotAbi, erc20Abi];
25024
- var usddIlkBytes32 = (ilk) => stringToHex(ilk, { size: 32 });
25025
- async function fetchUsddMarkets(lender, chainId) {
25026
- const config = usddConfigFor(lender, chainId);
25027
- const chainData = usddChainData(lender, chainId);
25025
+ var CORE_READS_PER_ILK = 3;
25026
+ var DSS_CORE_ABI_PER_READ = [UsddVatAbi, UsddJugAbi, UsddSpotAbi];
25027
+ var dssIlkBytes32 = (ilk) => stringToHex(ilk, { size: 32 });
25028
+ async function fetchDssMarkets(lender, chainId) {
25029
+ const config = dssConfigFor(lender, chainId);
25030
+ const chainData = dssChainData(lender, chainId);
25028
25031
  const markets = chainData?.markets ?? [];
25029
25032
  if (!config || markets.length === 0) {
25030
25033
  return { lender, config, chainData, markets: [] };
25031
25034
  }
25032
- const calls = markets.flatMap((m) => {
25033
- const ilk32 = usddIlkBytes32(m.ilk);
25034
- return [
25035
+ const calls = [];
25036
+ const abi = [];
25037
+ const joinReadIndex = [];
25038
+ for (const m of markets) {
25039
+ const ilk32 = dssIlkBytes32(m.ilk);
25040
+ calls.push(
25035
25041
  { address: config.vat, name: "ilks", params: [ilk32] },
25036
25042
  { address: config.jug, name: "ilks", params: [ilk32] },
25037
- { address: config.spot, name: "ilks", params: [ilk32] },
25038
- { address: m.collToken, name: "balanceOf", params: [m.gemJoin] }
25039
- ];
25040
- });
25043
+ { address: config.spot, name: "ilks", params: [ilk32] }
25044
+ );
25045
+ abi.push(...DSS_CORE_ABI_PER_READ);
25046
+ if (isAddress(m.gemJoin ?? "", { strict: false })) {
25047
+ joinReadIndex.push(calls.length);
25048
+ calls.push({
25049
+ address: m.collToken,
25050
+ name: "balanceOf",
25051
+ params: [m.gemJoin]
25052
+ });
25053
+ abi.push(erc20Abi);
25054
+ } else {
25055
+ joinReadIndex.push(-1);
25056
+ }
25057
+ }
25041
25058
  let results = [];
25042
25059
  try {
25043
25060
  results = await multicallRetryUniversal({
25044
25061
  chain: chainId,
25045
25062
  calls,
25046
- abi: markets.flatMap(() => USDD_ABI_PER_READ),
25063
+ abi,
25047
25064
  allowFailure: true
25048
25065
  });
25049
25066
  } catch {
25050
25067
  return { lender, config, chainData, markets: [] };
25051
25068
  }
25052
- const big15 = (v) => {
25069
+ const big16 = (v) => {
25053
25070
  if (typeof v === "bigint") return v;
25054
25071
  if (typeof v === "number") return BigInt(v);
25055
25072
  return null;
25056
25073
  };
25057
- const field12 = (res, name, idx) => big15(res?.[name] ?? res?.[idx]);
25074
+ const field13 = (res, name, idx) => big16(res?.[name] ?? res?.[idx]);
25075
+ let cursor = 0;
25058
25076
  const out = markets.map((market, i) => {
25059
- const base = i * READS_PER_ILK;
25077
+ const base = cursor;
25078
+ cursor += CORE_READS_PER_ILK + (joinReadIndex[i] >= 0 ? 1 : 0);
25060
25079
  const vatIlk = results[base];
25061
25080
  const jugIlk = results[base + 1];
25062
25081
  const spotIlk = results[base + 2];
25063
25082
  return {
25064
25083
  market,
25065
- Art: field12(vatIlk, "Art", 0),
25066
- rate: field12(vatIlk, "rate", 1),
25067
- spot: field12(vatIlk, "spot", 2),
25068
- line: field12(vatIlk, "line", 3),
25069
- dust: field12(vatIlk, "dust", 4),
25070
- duty: field12(jugIlk, "duty", 0),
25071
- mat: field12(spotIlk, "mat", 1),
25072
- joinBalance: big15(results[base + 3])
25084
+ Art: field13(vatIlk, "Art", 0),
25085
+ rate: field13(vatIlk, "rate", 1),
25086
+ spot: field13(vatIlk, "spot", 2),
25087
+ line: field13(vatIlk, "line", 3),
25088
+ dust: field13(vatIlk, "dust", 4),
25089
+ duty: field13(jugIlk, "duty", 0),
25090
+ mat: field13(spotIlk, "mat", 1),
25091
+ joinBalance: joinReadIndex[i] >= 0 ? big16(results[joinReadIndex[i]]) : null
25073
25092
  };
25074
25093
  });
25075
25094
  return { lender, config, chainData, markets: out };
25076
25095
  }
25077
-
25078
- // src/lending/public-data/usdd/convertPublic.ts
25079
- function usddLenderKey(lender, chainId, ilk) {
25080
- return `${lender}_${chainId}_${ilk}`;
25081
- }
25082
- function usddKeyParts(key2) {
25083
- if (!key2.startsWith("USDD_")) return void 0;
25084
- const suffix = key2.slice("USDD_".length);
25085
- const m = suffix.match(/^(\d+)_([A-Z0-9][A-Z0-9-]*)$/);
25096
+ var fetchUsddMarkets = fetchDssMarkets;
25097
+ var usddIlkBytes32 = dssIlkBytes32;
25098
+ function dssLenderKey(lender, chainId, ilk) {
25099
+ return `${lender}_${chainId}_${ilkToKeySegment(ilk)}`;
25100
+ }
25101
+ var ilkToKeySegment = (ilk) => ilk.replace(/-/g, "_");
25102
+ var keySegmentToIlk = (seg) => seg.replace(/_/g, "-");
25103
+ var DSS_KEY_PREFIXES = ["USDD", "SKY"];
25104
+ var DSS_KEY_RE = new RegExp(
25105
+ `^(${DSS_KEY_PREFIXES.join("|")})_(\\d+)_([A-Z0-9][A-Z0-9_-]*)$`
25106
+ );
25107
+ function dssKeyParts(key2) {
25108
+ const m = key2.match(DSS_KEY_RE);
25086
25109
  if (!m) return void 0;
25087
- return { lender: "USDD", chainId: m[1], ilk: m[2] };
25110
+ return { lender: m[1], chainId: m[2], ilk: keySegmentToIlk(m[3]) };
25088
25111
  }
25089
25112
  var WAD9 = 1e18;
25090
25113
  var RAY4 = 1e27;
@@ -25097,7 +25120,7 @@ function currencyFor12(address, decimals, symbol, tokens) {
25097
25120
  const lower3 = address.toLowerCase();
25098
25121
  return tokens[lower3] ?? { address: lower3, symbol, name: symbol, decimals };
25099
25122
  }
25100
- function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
25123
+ function convertDssMarketsToResponse(raw, chainId, prices = {}, _additionalYields = {
25101
25124
  intrinsicYields: {},
25102
25125
  lenderRewards: {},
25103
25126
  loaded: true
@@ -25106,15 +25129,18 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
25106
25129
  const cfg = raw?.config;
25107
25130
  const chainData = raw?.chainData;
25108
25131
  if (!cfg || !chainData) return out;
25109
- const debtAddr = cfg.usdd.toLowerCase();
25132
+ const rawDebtAddr = dssDebtToken(cfg);
25133
+ if (!rawDebtAddr) return out;
25134
+ const debtAddr = rawDebtAddr.toLowerCase();
25135
+ const debtJoin = dssDebtJoin(cfg);
25110
25136
  const debtDecimals = cfg.debtDecimals ?? 18;
25111
25137
  const debtToken = tokens[debtAddr];
25112
- const debtSymbol = debtToken?.symbol ?? "USDD";
25138
+ const debtSymbol = debtToken?.symbol ?? cfg.debtSymbol ?? "USDD";
25113
25139
  const debtPriceKey = toOracleKey(debtToken?.assetGroup) || toGenericPriceKey(debtAddr, chainId);
25114
25140
  const debtPrice = prices[debtPriceKey] || 1;
25115
25141
  for (const m of raw.markets ?? []) {
25116
25142
  const market = m.market;
25117
- const lenderKey = usddLenderKey(raw.lender, chainId, market.ilk);
25143
+ const lenderKey = dssLenderKey(raw.lender, chainId, market.ilk);
25118
25144
  const collAddr = market.collToken.toLowerCase();
25119
25145
  const collDecimals = market.collDecimals;
25120
25146
  const collToken = tokens[collAddr];
@@ -25133,13 +25159,14 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
25133
25159
  const borrowApr = duty > BigInt(1e27) ? Number(duty - BigInt(10) ** BigInt(27)) / RAY4 * YEAR_SECONDS2 * 100 : 0;
25134
25160
  const line = m.line !== null ? Number(m.line) / RAD : 0;
25135
25161
  let borrowLiquidity = Math.max(0, line - totalDebt);
25136
- const halted = line === 0;
25162
+ const offboarded = market.offboarded === true;
25163
+ const halted = line === 0 || offboarded;
25137
25164
  const entry = { data: {} };
25138
25165
  const collUid = createMarketUid(chainId, lenderKey, collAddr);
25139
25166
  entry.data[collUid] = {
25140
25167
  marketUid: collUid,
25141
25168
  name: "Collateral " + collSymbol,
25142
- poolId: market.gemJoin.toLowerCase(),
25169
+ poolId: market.gemJoin?.toLowerCase(),
25143
25170
  underlying: collAddr,
25144
25171
  asset: currencyFor12(collAddr, collDecimals, collSymbol, tokens),
25145
25172
  totalDeposits: totalColl,
@@ -25197,7 +25224,8 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
25197
25224
  totalDebtStableUSD: 0,
25198
25225
  totalDebtUSD: totalDebt * debtPrice,
25199
25226
  utilization: 0,
25200
- // The earn side is sUSDD (savings provider), not a lending deposit.
25227
+ // The earn side is the savings token (savings provider), not a lending
25228
+ // deposit.
25201
25229
  depositRate: 0,
25202
25230
  variableBorrowRate: borrowApr,
25203
25231
  stableBorrowRate: 0,
@@ -25227,6 +25255,38 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
25227
25255
  isActive: !halted,
25228
25256
  isFrozen: halted
25229
25257
  };
25258
+ const descriptor = {
25259
+ ilk: market.ilk,
25260
+ /** Per-second stability fee (ray string) — live, metadata fallback. */
25261
+ duty: duty.toString(),
25262
+ /** Liquidation ratio (ray string). */
25263
+ mat: m.mat !== null ? m.mat.toString() : market.mat,
25264
+ /** Liquidation penalty multiplier (wad string, Dog.chop). */
25265
+ chop: market.chop,
25266
+ /** Ilk debt ceiling / per-CDP floor (rad strings). */
25267
+ line: m.line !== null ? m.line.toString() : market.line,
25268
+ dust: m.dust !== null ? m.dust.toString() : market.dust,
25269
+ /** Debt accumulator (ray string) — art × rate = debt. */
25270
+ rate: m.rate !== null ? m.rate.toString() : void 0,
25271
+ /** Governance has retired the ilk: no new debt, exits only. */
25272
+ offboarded,
25273
+ addresses: {
25274
+ vat: cfg.vat,
25275
+ jug: cfg.jug,
25276
+ spot: cfg.spot,
25277
+ dog: cfg.dog,
25278
+ cdpManager: cfg.cdpManager,
25279
+ proxyActions: cfg.proxyActions,
25280
+ proxyRegistry: cfg.proxyRegistry,
25281
+ /** DaiJoin-equivalent — the debt enter/exit adapter. */
25282
+ debtJoin,
25283
+ /** @deprecated brand-specific alias of `debtJoin`. */
25284
+ usddJoin: debtJoin,
25285
+ gemJoin: market.gemJoin,
25286
+ clip: market.clip,
25287
+ pip: market.pip
25288
+ }
25289
+ };
25230
25290
  entry.params = {
25231
25291
  market: {
25232
25292
  lender: lenderKey,
@@ -25235,41 +25295,16 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
25235
25295
  collateralDecimals: collDecimals,
25236
25296
  // The gem join doubles as the market id (marketUid address) — one
25237
25297
  // adapter per ilk, like River's TroveManager.
25238
- id: market.gemJoin.toLowerCase(),
25298
+ id: market.gemJoin?.toLowerCase(),
25239
25299
  lltv: m.mat !== null ? m.mat.toString() : market.mat,
25240
25300
  oracle: market.pip ?? zeroAddress,
25241
25301
  irm: zeroAddress,
25242
25302
  collateralAddress: collAddr,
25243
25303
  loanAddress: debtAddr,
25244
- // --- USDD descriptor (metadata + live snapshot; consumed by the
25245
- // calldata builders + worker-api resolvers) ---
25246
- usdd: {
25247
- ilk: market.ilk,
25248
- /** Per-second stability fee (ray string) — live, metadata fallback. */
25249
- duty: duty.toString(),
25250
- /** Liquidation ratio (ray string). */
25251
- mat: m.mat !== null ? m.mat.toString() : market.mat,
25252
- /** Liquidation penalty multiplier (wad string, Dog.chop). */
25253
- chop: market.chop,
25254
- /** Ilk debt ceiling / per-CDP floor (rad strings). */
25255
- line: m.line !== null ? m.line.toString() : market.line,
25256
- dust: m.dust !== null ? m.dust.toString() : market.dust,
25257
- /** Debt accumulator (ray string) — art × rate = debt. */
25258
- rate: m.rate !== null ? m.rate.toString() : void 0,
25259
- addresses: {
25260
- vat: cfg.vat,
25261
- jug: cfg.jug,
25262
- spot: cfg.spot,
25263
- dog: cfg.dog,
25264
- cdpManager: cfg.cdpManager,
25265
- proxyActions: cfg.proxyActions,
25266
- proxyRegistry: cfg.proxyRegistry,
25267
- usddJoin: cfg.usddJoin,
25268
- gemJoin: market.gemJoin,
25269
- clip: market.clip,
25270
- pip: market.pip
25271
- }
25272
- }
25304
+ dss: descriptor,
25305
+ // Back-compat duplicate: worker-api + the term-sheet input list read
25306
+ // `market.usdd`. Same object, so the two can never drift.
25307
+ usdd: descriptor
25273
25308
  }
25274
25309
  };
25275
25310
  entry.chainId = chainId;
@@ -25277,6 +25312,9 @@ function convertUsddMarketsToResponse(raw, chainId, prices = {}, _additionalYiel
25277
25312
  }
25278
25313
  return out;
25279
25314
  }
25315
+ var convertUsddMarketsToResponse = convertDssMarketsToResponse;
25316
+ var usddLenderKey = dssLenderKey;
25317
+ var usddKeyParts = dssKeyParts;
25280
25318
  var READS_PER_MARKET3 = 10;
25281
25319
  var FRANKENCOIN_ABI_PER_READ = [
25282
25320
  FrankencoinPositionAbi,
@@ -25324,26 +25362,26 @@ async function fetchFrankencoinMarkets(lender, chainId) {
25324
25362
  } catch {
25325
25363
  return { lender, config, chainData, markets: [] };
25326
25364
  }
25327
- const big15 = (v) => {
25365
+ const big16 = (v) => {
25328
25366
  if (typeof v === "bigint") return v;
25329
25367
  if (typeof v === "number") return BigInt(v);
25330
25368
  return null;
25331
25369
  };
25332
25370
  const out = markets.map((market, i) => {
25333
25371
  const base = i * READS_PER_MARKET3;
25334
- const expiration = big15(results[base + 7]);
25372
+ const expiration = big16(results[base + 7]);
25335
25373
  return {
25336
25374
  market,
25337
- price: big15(results[base]),
25338
- minted: big15(results[base + 1]),
25339
- availableForClones: big15(results[base + 2]),
25340
- annualInterestPPM: big15(results[base + 3]),
25341
- currentFeePPM: big15(results[base + 4]),
25342
- reserveContribution: big15(results[base + 5]),
25343
- challengedAmount: big15(results[base + 6]),
25375
+ price: big16(results[base]),
25376
+ minted: big16(results[base + 1]),
25377
+ availableForClones: big16(results[base + 2]),
25378
+ annualInterestPPM: big16(results[base + 3]),
25379
+ currentFeePPM: big16(results[base + 4]),
25380
+ reserveContribution: big16(results[base + 5]),
25381
+ challengedAmount: big16(results[base + 6]),
25344
25382
  expiration,
25345
25383
  isClosed: typeof results[base + 8] === "boolean" ? results[base + 8] : null,
25346
- collateralBalance: big15(results[base + 9])
25384
+ collateralBalance: big16(results[base + 9])
25347
25385
  };
25348
25386
  });
25349
25387
  return { lender, config, chainData, markets: out };
@@ -26188,7 +26226,7 @@ async function getLenderDataFromApi(lender, chainId, prices, additionalYields, i
26188
26226
  if (isResupply(lender)) return await fetchResupplyMarkets(lender, chainId);
26189
26227
  if (isCurvance(lender)) return await fetchCurvanceMarkets(lender, chainId);
26190
26228
  if (isTermMax(lender)) return await fetchTermMaxMarkets(chainId);
26191
- if (isUsdd(lender)) return await fetchUsddMarkets(lender, chainId);
26229
+ if (isDssType(lender)) return await fetchDssMarkets(lender, chainId);
26192
26230
  if (isFrankencoin(lender))
26193
26231
  return await fetchFrankencoinMarkets(lender, chainId);
26194
26232
  return {};
@@ -26284,8 +26322,8 @@ function convertLenderDataFromApi(lender, chainId, data, prices, additionalYield
26284
26322
  additionalYields,
26285
26323
  list
26286
26324
  );
26287
- if (isUsdd(lender))
26288
- return convertUsddMarketsToResponse(
26325
+ if (isDssType(lender))
26326
+ return convertDssMarketsToResponse(
26289
26327
  data,
26290
26328
  chainId,
26291
26329
  prices,
@@ -26503,7 +26541,7 @@ function lenderApiOnly(lender, chainId) {
26503
26541
  if (isTermMax(lender)) return true;
26504
26542
  if (isResupply(lender)) return true;
26505
26543
  if (isCurvance(lender)) return true;
26506
- if (isUsdd(lender)) return true;
26544
+ if (isDssType(lender)) return true;
26507
26545
  if (isFrankencoin(lender)) return true;
26508
26546
  if (isLlamaLend(lender)) return true;
26509
26547
  return false;
@@ -28183,13 +28221,13 @@ var buildCurvanceUserCall = async (chainId, lender, account) => {
28183
28221
  ])
28184
28222
  ]);
28185
28223
  };
28186
- var USDD_CALLS_PER_CDP = 1;
28224
+ var DSS_CALLS_PER_CDP = 1;
28187
28225
  var MAX_CDP_WALK = 64;
28188
28226
  var CACHE_TTL_MS2 = 5 * 6e4;
28189
28227
  var discoveryCache4 = /* @__PURE__ */ new Map();
28190
- var cacheKey2 = (chainId, account) => `${chainId}:${account.toLowerCase()}`;
28191
- var getCachedUsddCdps = (chainId, account) => {
28192
- const hit = discoveryCache4.get(cacheKey2(chainId, account));
28228
+ var cacheKey2 = (lender, chainId, account) => `${lender}:${chainId}:${account.toLowerCase()}`;
28229
+ var getCachedDssCdps = (lender, chainId, account) => {
28230
+ const hit = discoveryCache4.get(cacheKey2(lender, chainId, account));
28193
28231
  if (!hit || Date.now() - hit.at > CACHE_TTL_MS2) return void 0;
28194
28232
  return hit;
28195
28233
  };
@@ -28202,10 +28240,10 @@ var big3 = (v) => {
28202
28240
  return 0n;
28203
28241
  };
28204
28242
  var field6 = (res, name, idx) => res?.[name] ?? res?.[idx];
28205
- var buildUsddUserCall = async (chainId, lender, account) => {
28206
- const cfg = usddConfigFor(lender, chainId);
28207
- const markets = usddChainData(lender, chainId)?.markets ?? [];
28208
- const stash = (d) => discoveryCache4.set(cacheKey2(chainId, account), d);
28243
+ var buildDssUserCall = async (chainId, lender, account) => {
28244
+ const cfg = dssConfigFor(lender, chainId);
28245
+ const markets = dssChainData(lender, chainId)?.markets ?? [];
28246
+ const stash = (d) => discoveryCache4.set(cacheKey2(lender, chainId, account), d);
28209
28247
  if (!cfg || markets.length === 0) {
28210
28248
  stash({ cdps: [], ilks: [], at: Date.now() });
28211
28249
  return [];
@@ -28255,7 +28293,7 @@ var buildUsddUserCall = async (chainId, lender, account) => {
28255
28293
  );
28256
28294
  if (head.count > BigInt(MAX_CDP_WALK)) {
28257
28295
  console.warn(
28258
- `USDD: owner ${head.owner} holds ${head.count} CDPs on chain ${chainId} \u2014 truncating discovery at ${MAX_CDP_WALK}`
28296
+ `${lender}: owner ${head.owner} holds ${head.count} CDPs on chain ${chainId} \u2014 truncating discovery at ${MAX_CDP_WALK}`
28259
28297
  );
28260
28298
  }
28261
28299
  for (let i = 0; i < steps && cursor !== 0n; i++) {
@@ -28289,13 +28327,13 @@ var buildUsddUserCall = async (chainId, lender, account) => {
28289
28327
  const calls = cdps.map((c) => ({
28290
28328
  address: cfg.vat,
28291
28329
  name: "urns",
28292
- params: [usddIlkBytes32(c.ilk), c.urn]
28330
+ params: [dssIlkBytes32(c.ilk), c.urn]
28293
28331
  }));
28294
28332
  for (const ilk of ilks) {
28295
28333
  calls.push({
28296
28334
  address: cfg.vat,
28297
28335
  name: "ilks",
28298
- params: [usddIlkBytes32(ilk)]
28336
+ params: [dssIlkBytes32(ilk)]
28299
28337
  });
28300
28338
  }
28301
28339
  return calls;
@@ -28530,7 +28568,7 @@ async function buildUserCall(chainId, lender, account, params, getClient) {
28530
28568
  return buildLlamaLendUserCall(chainId, lender, account);
28531
28569
  if (isResupply(lender)) return buildResupplyUserCall(chainId, lender, account);
28532
28570
  if (isCurvance(lender)) return buildCurvanceUserCall(chainId, lender, account);
28533
- if (isUsdd(lender)) return buildUsddUserCall(chainId, lender, account);
28571
+ if (isDssType(lender)) return buildDssUserCall(chainId, lender, account);
28534
28572
  if (isFrankencoin(lender))
28535
28573
  return buildFrankencoinUserCall(chainId, lender, account);
28536
28574
  if (isCompoundV3Type(lender))
@@ -28569,12 +28607,13 @@ function organizeUserQueries(queries) {
28569
28607
  const teller = queries.filter((q) => isTeller(q.lender));
28570
28608
  const termMax = queries.filter((q) => isTermMax(q.lender));
28571
28609
  const usdd = queries.filter((q) => isUsdd(q.lender));
28610
+ const sky = queries.filter((q) => isSky(q.lender));
28572
28611
  const llamaLend = queries.filter((q) => isLlamaLend(q.lender));
28573
28612
  const frankencoin = queries.filter((q) => isFrankencoin(q.lender));
28574
- if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0 && teller.length === 0 && termMax.length === 0 && usdd.length === 0 && frankencoin.length === 0 && llamaLend.length === 0)
28613
+ if (morphos.length === 0 && gearbox.length === 0 && midnight.length === 0 && term.length === 0 && exactly.length === 0 && liquity.length === 0 && river.length === 0 && teller.length === 0 && termMax.length === 0 && usdd.length === 0 && sky.length === 0 && frankencoin.length === 0 && llamaLend.length === 0)
28575
28614
  return queries;
28576
28615
  const others = queries.filter(
28577
- (q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender) && !isTeller(q.lender) && !isTermMax(q.lender) && !isUsdd(q.lender) && !isFrankencoin(q.lender) && !isLlamaLend(q.lender)
28616
+ (q) => !isMorphoType(q.lender) && !isGearboxV3(q.lender) && !isMidnight(q.lender) && !isTerm(q.lender) && !isExactly(q.lender) && !isLiquityFamily(q.lender) && !isRiver(q.lender) && !isTeller(q.lender) && !isTermMax(q.lender) && !isDssType(q.lender) && !isFrankencoin(q.lender) && !isLlamaLend(q.lender)
28578
28617
  );
28579
28618
  const morphoBlue = morphos.filter((q) => q.lender.startsWith("MORPHO_BLUE"));
28580
28619
  const moolah = morphos.filter((q) => q.lender.startsWith("LISTA_DAO"));
@@ -28651,6 +28690,14 @@ function organizeUserQueries(queries) {
28651
28690
  assets: void 0
28652
28691
  });
28653
28692
  }
28693
+ if (sky.length > 0) {
28694
+ result.push({
28695
+ lender: Lender.SKY,
28696
+ account: sky[0].account,
28697
+ params: sky.map((p) => p.lender),
28698
+ assets: void 0
28699
+ });
28700
+ }
28654
28701
  if (llamaLend.length > 0) {
28655
28702
  result.push({
28656
28703
  lender: Lender.LLAMALEND,
@@ -32190,27 +32237,29 @@ var big10 = (v) => {
32190
32237
  return 0n;
32191
32238
  };
32192
32239
  var field9 = (res, name, idx) => big10(res?.[name] ?? res?.[idx]);
32193
- var getUsddUserDataConverter = (lender, chainId, account, meta) => {
32194
- const cfg = usddConfigFor(lender, chainId);
32195
- const markets = usddChainData(lender, chainId)?.markets ?? [];
32196
- const discovery = getCachedUsddCdps(chainId, account);
32240
+ var getDssUserDataConverter = (lender, chainId, account, meta) => {
32241
+ const cfg = dssConfigFor(lender, chainId);
32242
+ const markets = dssChainData(lender, chainId)?.markets ?? [];
32243
+ const discovery = getCachedDssCdps(lender, chainId, account);
32197
32244
  const cdps = discovery?.cdps ?? [];
32198
32245
  const ilks = discovery?.ilks ?? [];
32199
- const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length * USDD_CALLS_PER_CDP + ilks.length : 0;
32246
+ const expected = cfg && markets.length > 0 && cdps.length > 0 ? cdps.length * DSS_CALLS_PER_CDP + ilks.length : 0;
32200
32247
  return [
32201
32248
  (data) => {
32202
32249
  if (!cfg || expected === 0) return void 0;
32203
32250
  if (!data || data.length < expected) return void 0;
32204
- const debtAddr = cfg.usdd.toLowerCase();
32251
+ const rawDebtAddr = dssDebtToken(cfg);
32252
+ if (!rawDebtAddr) return void 0;
32253
+ const debtAddr = rawDebtAddr.toLowerCase();
32205
32254
  const debtDecimals = cfg.debtDecimals ?? 18;
32206
32255
  const rateByIlk = /* @__PURE__ */ new Map();
32207
32256
  ilks.forEach((ilk, i) => {
32208
- const res = data[cdps.length * USDD_CALLS_PER_CDP + i];
32257
+ const res = data[cdps.length * DSS_CALLS_PER_CDP + i];
32209
32258
  if (!isFailedCall(res)) rateByIlk.set(ilk, field9(res, "rate", 1));
32210
32259
  });
32211
32260
  const perMarket = /* @__PURE__ */ new Map();
32212
32261
  cdps.forEach((cdp, i) => {
32213
- const res = data[i * USDD_CALLS_PER_CDP];
32262
+ const res = data[i * DSS_CALLS_PER_CDP];
32214
32263
  if (isFailedCall(res)) return;
32215
32264
  const ink = field9(res, "ink", 0);
32216
32265
  const art = field9(res, "art", 1);
@@ -32219,7 +32268,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
32219
32268
  if (ink === 0n && debt === 0n) return;
32220
32269
  const market = markets.find((m) => m.ilk === cdp.ilk);
32221
32270
  if (!market) return;
32222
- const key2 = usddLenderKey(lender, chainId, cdp.ilk);
32271
+ const key2 = dssLenderKey(lender, chainId, cdp.ilk);
32223
32272
  if (!perMarket.has(key2)) perMarket.set(key2, { market, positions: [] });
32224
32273
  perMarket.get(key2).positions.push({ cdp, ink, debt });
32225
32274
  });
@@ -32247,7 +32296,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
32247
32296
  const collNum = Number(collStr);
32248
32297
  const debtStr = parseRawAmount(debt.toString(), debtDecimals);
32249
32298
  const debtNum = Number(debtStr);
32250
- const usddInfo = { ...cdp };
32299
+ const dssInfo = { ...cdp };
32251
32300
  lendingPositions[cdp.cdpId] = {
32252
32301
  [collUid]: {
32253
32302
  marketUid: collUid,
@@ -32280,7 +32329,7 @@ var getUsddUserDataConverter = (lender, chainId, account, meta) => {
32280
32329
  stableBorrowRate: "0",
32281
32330
  collateralEnabled: false,
32282
32331
  claimableRewards: 0,
32283
- usddInfo
32332
+ dssInfo
32284
32333
  }
32285
32334
  };
32286
32335
  modes[cdp.cdpId] = 0;
@@ -32768,21 +32817,21 @@ function checkSubAccount(entry) {
32768
32817
  const accountId = entry?.accountId ?? "0";
32769
32818
  const balance = entry?.balanceData;
32770
32819
  const apr = entry?.aprData;
32771
- for (const field12 of BALANCE_FIELDS) {
32772
- if (isBadNumber(balance?.[field12]))
32820
+ for (const field13 of BALANCE_FIELDS) {
32821
+ if (isBadNumber(balance?.[field13]))
32773
32822
  violations.push({
32774
32823
  accountId,
32775
32824
  code: "non-finite",
32776
- detail: `balanceData.${field12} = ${balance[field12]}`,
32825
+ detail: `balanceData.${field13} = ${balance[field13]}`,
32777
32826
  requiresFailedReads: false
32778
32827
  });
32779
32828
  }
32780
- for (const field12 of APR_FIELDS) {
32781
- if (isBadNumber(apr?.[field12]))
32829
+ for (const field13 of APR_FIELDS) {
32830
+ if (isBadNumber(apr?.[field13]))
32782
32831
  violations.push({
32783
32832
  accountId,
32784
32833
  code: "non-finite",
32785
- detail: `aprData.${field12} = ${apr[field12]}`,
32834
+ detail: `aprData.${field13} = ${apr[field13]}`,
32786
32835
  requiresFailedReads: false
32787
32836
  });
32788
32837
  }
@@ -32873,8 +32922,8 @@ function getUserDataConverter(lender, chainId, account, params, meta) {
32873
32922
  return getResupplyUserDataConverter(lender, chainId, account, meta);
32874
32923
  if (isCurvance(lender))
32875
32924
  return getCurvanceUserDataConverter(lender, chainId, account, meta);
32876
- if (isUsdd(lender))
32877
- return getUsddUserDataConverter(lender, chainId, account, meta);
32925
+ if (isDssType(lender))
32926
+ return getDssUserDataConverter(lender, chainId, account, meta);
32878
32927
  if (isFrankencoin(lender))
32879
32928
  return getFrankencoinUserDataConverter(lender, chainId, account, meta);
32880
32929
  if (isCompoundV3Type(lender))
@@ -37532,7 +37581,7 @@ var getAbi2 = (lender) => {
37532
37581
  return [...InverseMarketAbi, ...InverseEscrowAbi, ...InverseDbrAbi];
37533
37582
  if (isLlamaLend(lender))
37534
37583
  return [...LlamaLendControllerAbi, ...LlamaLendAmmAbi];
37535
- if (isUsdd(lender)) return [...UsddVatAbi];
37584
+ if (isDssType(lender)) return [...UsddVatAbi];
37536
37585
  if (isFrankencoin(lender))
37537
37586
  return [...FrankencoinPositionAbi, ...erc20Abi];
37538
37587
  if (isResupply(lender))
@@ -38304,8 +38353,8 @@ function calculateOverallNetApr(totalDepositsUSD, totalDebtUSD, avgDepositApr, a
38304
38353
  return (totalDepositsUSD * avgDepositApr - totalDebtUSD * avgBorrowApr) / Math.abs(totalNetWorth) * (totalNetWorth > 0 ? 1 : -1);
38305
38354
  }
38306
38355
  function calculateWeightedAprs(items) {
38307
- const wa = (field12, weightField) => calculateWeightedAverage(
38308
- items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field12], weight: Math.abs(i[weightField]) }))
38356
+ const wa = (field13, weightField) => calculateWeightedAverage(
38357
+ items.filter((i) => i[weightField] !== 0).map((i) => ({ value: i[field13], weight: Math.abs(i[weightField]) }))
38309
38358
  );
38310
38359
  return {
38311
38360
  apr: wa("apr", "nav"),
@@ -47963,6 +48012,96 @@ var riverFetcher = {
47963
48012
  parse: parseRiverResults,
47964
48013
  getAbi: getRiverAbi
47965
48014
  };
48015
+ var dssLendersByChain = (chainId) => [
48016
+ ...skyLendersByChain(chainId),
48017
+ ...usddLendersByChain(chainId)
48018
+ ];
48019
+ function getDssCalls(chainId) {
48020
+ const results = [];
48021
+ for (const lender of dssLendersByChain(chainId)) {
48022
+ const cfg = dssConfigFor(lender, chainId);
48023
+ const markets = dssChainData(lender, chainId)?.markets ?? [];
48024
+ if (!cfg?.vat || markets.length === 0) continue;
48025
+ const debtToken = dssDebtToken(cfg);
48026
+ for (const m of markets) {
48027
+ if (!m.ilk || !m.collToken || !m.mat) continue;
48028
+ const calls = [
48029
+ { address: cfg.vat, name: "ilks", params: [dssIlkBytes32(m.ilk)] }
48030
+ ];
48031
+ results.push({
48032
+ calls,
48033
+ meta: {
48034
+ lender,
48035
+ chainId,
48036
+ ilk: m.ilk,
48037
+ collToken: m.collToken.toLowerCase(),
48038
+ debtToken: debtToken?.toLowerCase(),
48039
+ mat: String(m.mat)
48040
+ },
48041
+ lender: dssLenderKey(lender, chainId, m.ilk)
48042
+ });
48043
+ }
48044
+ }
48045
+ return results;
48046
+ }
48047
+ var RAY8 = 1e27;
48048
+ var big13 = (v) => {
48049
+ try {
48050
+ if (typeof v === "bigint") return v;
48051
+ if (v == null || v === "0x") return 0n;
48052
+ return BigInt(v);
48053
+ } catch {
48054
+ return 0n;
48055
+ }
48056
+ };
48057
+ var field12 = (res, name, idx) => {
48058
+ const v = res?.[name];
48059
+ if (typeof v === "bigint" || typeof v === "number" || typeof v === "string") {
48060
+ return big13(v);
48061
+ }
48062
+ return big13(res?.[idx]);
48063
+ };
48064
+ function parseDssResults(data, meta, context) {
48065
+ const { chainId } = context;
48066
+ const key2 = dssLenderKey(meta.lender, chainId, meta.ilk);
48067
+ const entries = [];
48068
+ const spot = field12(data?.[0], "spot", 2);
48069
+ const mat = big13(meta.mat);
48070
+ if (spot > 0n && mat > 0n) {
48071
+ const collUSD = Number(spot) / RAY8 * (Number(mat) / RAY8);
48072
+ if (collUSD > 0 && collUSD < 1e9) {
48073
+ entries.push({
48074
+ asset: meta.collToken,
48075
+ price: collUSD,
48076
+ priceUSD: collUSD,
48077
+ marketUid: createMarketUid(chainId, key2, meta.collToken),
48078
+ targetLender: key2,
48079
+ description: "Maker OSM via Vat.spot \xD7 Spot.mat (USD, ~1h delayed)"
48080
+ });
48081
+ }
48082
+ }
48083
+ if (meta.debtToken) {
48084
+ entries.push({
48085
+ asset: meta.debtToken,
48086
+ price: 1,
48087
+ priceUSD: 1,
48088
+ marketUid: createMarketUid(chainId, key2, meta.debtToken),
48089
+ targetLender: key2,
48090
+ description: "dss debt token (par)",
48091
+ staticBase: true,
48092
+ baseAsset: meta.debtToken
48093
+ });
48094
+ }
48095
+ return entries;
48096
+ }
48097
+ function getDssAbi() {
48098
+ return UsddVatAbi;
48099
+ }
48100
+ var dssFetcher = {
48101
+ getCalls: getDssCalls,
48102
+ parse: parseDssResults,
48103
+ getAbi: getDssAbi
48104
+ };
47966
48105
  var READS_PER_ASSET = 2;
47967
48106
  function getCurvanceCalls(chainId) {
47968
48107
  const results = [];
@@ -50117,6 +50256,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50117
50256
  () => riverFetcher.getCalls(chainId),
50118
50257
  getCallsErrors
50119
50258
  ) : [];
50259
+ const dssResults = isActive("dss") ? safeGetCalls("dss", () => dssFetcher.getCalls(chainId), getCallsErrors) : [];
50120
50260
  const curvanceResults = isActive("curvance") ? safeGetCalls(
50121
50261
  "curvance",
50122
50262
  () => curvanceFetcher.getCalls(chainId),
@@ -50253,6 +50393,13 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50253
50393
  getRiverAbi(),
50254
50394
  "direct"
50255
50395
  );
50396
+ const dssGroup = buildGroup(
50397
+ "dss",
50398
+ dssResults,
50399
+ dssFetcher.parse,
50400
+ dssFetcher.getAbi(),
50401
+ "direct"
50402
+ );
50256
50403
  const curvanceGroup = buildGroup(
50257
50404
  "curvance",
50258
50405
  curvanceResults,
@@ -50332,6 +50479,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50332
50479
  termGroup,
50333
50480
  liquityGroup,
50334
50481
  riverGroup,
50482
+ dssGroup,
50335
50483
  curvanceGroup,
50336
50484
  inverseGroup,
50337
50485
  tellerGroup,
@@ -50382,6 +50530,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50382
50530
  termData,
50383
50531
  liquityData,
50384
50532
  riverData,
50533
+ dssData,
50385
50534
  curvanceData,
50386
50535
  inverseData,
50387
50536
  tellerData,
@@ -50510,6 +50659,14 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50510
50659
  allowFailure,
50511
50660
  rpcOverrides
50512
50661
  ),
50662
+ executeGroup(
50663
+ dssGroup,
50664
+ chainId,
50665
+ chainBatchSize,
50666
+ retries,
50667
+ allowFailure,
50668
+ rpcOverrides
50669
+ ),
50513
50670
  executeGroup(
50514
50671
  curvanceGroup,
50515
50672
  chainId,
@@ -50669,6 +50826,7 @@ async function fetchOraclePrices(chainIds, rpcOverrides, lists = {}, retries = 3
50669
50826
  parseTrackers(termGroup, termData.results);
50670
50827
  parseTrackers(liquityGroup, liquityData.results);
50671
50828
  parseTrackers(riverGroup, riverData.results);
50829
+ parseTrackers(dssGroup, dssData.results);
50672
50830
  parseTrackers(curvanceGroup, curvanceData.results);
50673
50831
  parseTrackers(inverseGroup, inverseData.results);
50674
50832
  if (siloV2GqlEntries != null) {
@@ -51269,10 +51427,10 @@ function createAssetArrayPerChain() {
51269
51427
  return assetsPerChain;
51270
51428
  }
51271
51429
  var RELEVANT_LENDING_ASSETS = () => createAssetArrayPerChain();
51272
- function createSimpleArrayPerChain(fork, field12 = void 0) {
51430
+ function createSimpleArrayPerChain(fork, field13 = void 0) {
51273
51431
  let pools = {};
51274
51432
  Object.entries(fork ?? {}).forEach(([b2, data]) => {
51275
- Object.entries(field12 ? data[field12] : data).forEach(
51433
+ Object.entries(field13 ? data[field13] : data).forEach(
51276
51434
  ([chainId, address]) => {
51277
51435
  if (!pools[chainId]) pools[chainId] = [];
51278
51436
  pools[chainId] = uniq2([...pools[chainId], { address, pool: b2 }]);
@@ -53479,9 +53637,9 @@ query EvkByAssets($assets: [Bytes!]!) {
53479
53637
  `;
53480
53638
  var ZERO2 = 0n;
53481
53639
  var RAY_TO_PERCENT3 = 1e25;
53482
- function readAddress2(field12) {
53483
- if (!field12) return void 0;
53484
- return field12.toLowerCase();
53640
+ function readAddress2(field13) {
53641
+ if (!field13) return void 0;
53642
+ return field13.toLowerCase();
53485
53643
  }
53486
53644
  function parseVaultFee(v) {
53487
53645
  if (v.performanceFee == null) return 0;
@@ -53846,7 +54004,7 @@ var num4 = (v) => {
53846
54004
  const n = Number(v);
53847
54005
  return Number.isFinite(n) ? n : 0;
53848
54006
  };
53849
- var big13 = (v) => {
54007
+ var big14 = (v) => {
53850
54008
  try {
53851
54009
  if (v === void 0 || v === null || v === "") return "0";
53852
54010
  const s = String(v);
@@ -53882,12 +54040,12 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
53882
54040
  const assetEntry = tokenList[underlying];
53883
54041
  const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(underlying, chainId);
53884
54042
  const priceUsd = prices[priceKey];
53885
- const totalAssets = big13(r.totalAssets);
53886
- const totalSupply = big13(r.totalSupplyAmt);
54043
+ const totalAssets = big14(r.totalAssets);
54044
+ const totalSupply = big14(r.totalSupplyAmt);
53887
54045
  const totalAssetsFormatted = Number(totalAssets) / scale2;
53888
54046
  const supplyRate = num4(r.apr) * 100;
53889
54047
  const rewardsRate = num4(r?.incentiveData?.TMX_APR) * 100;
53890
- const rawLiquidity = BigInt(big13(r.redeemableAmt ?? r.idleFunds ?? "0"));
54048
+ const rawLiquidity = BigInt(big14(r.redeemableAmt ?? r.idleFunds ?? "0"));
53891
54049
  const totalAssetsBig = BigInt(totalAssets);
53892
54050
  const liquidity = (rawLiquidity > totalAssetsBig ? totalAssetsBig : rawLiquidity).toString();
53893
54051
  const liquidityFormatted = Number(liquidity) / scale2;
@@ -53923,7 +54081,7 @@ async function fetchTermMaxVaultsFromApi(chainId, prices = {}, tokenList = {}, f
53923
54081
  liquidityUsd: priceUsd ? liquidityFormatted * priceUsd : 0,
53924
54082
  version: r.version,
53925
54083
  isPaused: r.isPaused === true || void 0,
53926
- supplyCap: r.capacity ? big13(r.capacity) : void 0,
54084
+ supplyCap: r.capacity ? big14(r.capacity) : void 0,
53927
54085
  basePool: r.poolAddress ? lower2(r.poolAddress) : void 0
53928
54086
  };
53929
54087
  }
@@ -53979,7 +54137,7 @@ var Erc20DecimalsBalanceAbi = [
53979
54137
 
53980
54138
  // src/vaults/termmax/fetchFromChain.ts
53981
54139
  var DECIMAL_BASE2 = 100000000n;
53982
- var big14 = (v) => {
54140
+ var big15 = (v) => {
53983
54141
  if (v === void 0 || v === null || v === "0x") return 0n;
53984
54142
  try {
53985
54143
  return typeof v === "bigint" ? v : BigInt(v);
@@ -54043,7 +54201,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
54043
54201
  vaults.forEach((address, i) => {
54044
54202
  const at = (k) => res[i * READS_PER_VAULT + VAULT_READS.indexOf(k)];
54045
54203
  const asset = addr(at("asset"));
54046
- const totalAssets = big14(at("totalAssets"));
54204
+ const totalAssets = big15(at("totalAssets"));
54047
54205
  if (!asset || totalAssets === 0n) return;
54048
54206
  rows.push({
54049
54207
  address,
@@ -54052,11 +54210,11 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
54052
54210
  decimals: num5(at("decimals")) ?? 18,
54053
54211
  asset,
54054
54212
  totalAssets,
54055
- totalSupply: big14(at("totalSupply")),
54056
- annualizedInterest: big14(at("annualizedInterest")),
54057
- accretingPrincipal: big14(at("accretingPrincipal")),
54058
- performanceFeeRate: big14(at("performanceFeeRate")),
54059
- aprRaw: at("apr") != null ? big14(at("apr")) : void 0,
54213
+ totalSupply: big15(at("totalSupply")),
54214
+ annualizedInterest: big15(at("annualizedInterest")),
54215
+ accretingPrincipal: big15(at("accretingPrincipal")),
54216
+ performanceFeeRate: big15(at("performanceFeeRate")),
54217
+ aprRaw: at("apr") != null ? big15(at("apr")) : void 0,
54060
54218
  curator: addr(at("curator")),
54061
54219
  guardian: addr(at("guardian")),
54062
54220
  timelock: num5(at("timelock")),
@@ -54077,7 +54235,7 @@ var fetchTermMaxVaultsFromChain = async (chainId, multicallRetry, prices = {}, t
54077
54235
  const out = {};
54078
54236
  rows.forEach((r, i) => {
54079
54237
  const assetDecimals = num5(res2[i * 2]) ?? r.decimals;
54080
- const idle = big14(res2[i * 2 + 1]);
54238
+ const idle = big15(res2[i * 2 + 1]);
54081
54239
  const assetEntry = tokenList[r.asset];
54082
54240
  const priceKey = toOracleKey(assetEntry?.assetGroup) || toGenericPriceKey(r.asset, chainId);
54083
54241
  const priceUsd = prices[priceKey];
@@ -61482,23 +61640,23 @@ var priceGmMarkets = async (chainId, multicallRetry, markets, prices) => {
61482
61640
  const indexMax = price(prices, m.indexToken)?.max;
61483
61641
  if (Array.isArray(dsRes) && longMax != null && shortMax != null) {
61484
61642
  const base = i * SLOTS;
61485
- const big15 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
61643
+ const big16 = (j) => typeof dsRes[base + j] === "bigint" ? dsRes[base + j] : 0n;
61486
61644
  const cap = computeDepositCapacityUsd(
61487
- [info?.longTokenAmount, longMax, big15(0), big15(2)],
61488
- [info?.shortTokenAmount, shortMax, big15(1), big15(3)]
61645
+ [info?.longTokenAmount, longMax, big16(0), big16(2)],
61646
+ [info?.shortTokenAmount, shortMax, big16(1), big16(3)]
61489
61647
  );
61490
61648
  if (cap != null) value.depositCapacityUsd = cap;
61491
61649
  if (indexMax != null) {
61492
61650
  const divisor = m.longToken.toLowerCase() === m.shortToken.toLowerCase() ? 2n : 1n;
61493
- const reservedUsdLong = (big15(4) + big15(5)) / divisor * indexMax;
61494
- const reservedUsdShort = (big15(6) + big15(7)) / divisor;
61651
+ const reservedUsdLong = (big16(4) + big16(5)) / divisor * indexMax;
61652
+ const reservedUsdShort = (big16(6) + big16(7)) / divisor;
61495
61653
  const liq = computeLiquidityUsd(
61496
61654
  info?.longTokenUsd,
61497
61655
  info?.shortTokenUsd,
61498
61656
  reservedUsdLong,
61499
61657
  reservedUsdShort,
61500
- big15(8),
61501
- big15(9)
61658
+ big16(8),
61659
+ big16(9)
61502
61660
  );
61503
61661
  if (liq != null)
61504
61662
  value.liquidityUsd = Math.max(0, Math.min(liq, value.tvlUsd));
@@ -61697,21 +61855,21 @@ var fetchGmxExecutionFees = async (chainId, multicallRetry, gasPriceWei) => {
61697
61855
  } catch {
61698
61856
  return void 0;
61699
61857
  }
61700
- const big15 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
61701
- const base = big15(0);
61702
- const mult = big15(1);
61858
+ const big16 = (i) => typeof res[i] === "bigint" ? res[i] : 0n;
61859
+ const base = big16(0);
61860
+ const mult = big16(1);
61703
61861
  if (base === 0n && mult === 0n) return void 0;
61704
61862
  const PRECISION = 10n ** 30n;
61705
61863
  const adjusted = (opGas) => base + opGas * mult / PRECISION;
61706
61864
  const fee = (opGas) => (adjusted(opGas) * gasPriceWei).toString();
61707
- const glvExtra = big15(6) * GLV_NOMINAL_MARKET_COUNT;
61865
+ const glvExtra = big16(6) * GLV_NOMINAL_MARKET_COUNT;
61708
61866
  return {
61709
61867
  chainId,
61710
61868
  gasPriceWei: gasPriceWei.toString(),
61711
- deposit: fee(big15(2)),
61712
- withdrawal: fee(big15(3)),
61713
- glvDeposit: fee(big15(4) + glvExtra),
61714
- glvWithdrawal: fee(big15(5) + glvExtra)
61869
+ deposit: fee(big16(2)),
61870
+ withdrawal: fee(big16(3)),
61871
+ glvDeposit: fee(big16(4) + glvExtra),
61872
+ glvWithdrawal: fee(big16(5) + glvExtra)
61715
61873
  };
61716
61874
  };
61717
61875
 
@@ -63059,6 +63217,7 @@ var ROW_DESCRIPTOR_KEYS = [
63059
63217
  "inverse",
63060
63218
  "exactly",
63061
63219
  "usdd",
63220
+ "dss",
63062
63221
  "termmax",
63063
63222
  // These five were missing, and the failure is SILENT: the adapter still
63064
63223
  // runs, reads an empty descriptor and returns a sheet that looks complete
@@ -63680,9 +63839,12 @@ var TERM_PROFILES = [
63680
63839
  }
63681
63840
  }),
63682
63841
  P({
63683
- id: "usdd.cdp@v1",
63684
- name: "USDD CDP ilk",
63685
- family: "usdd",
63842
+ id: "dss.cdp@v1",
63843
+ name: "Maker-style (dss) CDP ilk",
63844
+ // One profile for the whole dss family — Sky (the original MakerDAO) and
63845
+ // its forks (USDD 2.0). The prose is identical because the mechanism is:
63846
+ // same Vat/Jug/Spot accounting, same governance-set stability fee.
63847
+ family: "dss",
63686
63848
  borrow: {
63687
63849
  description: "A Maker-style CDP with a governance-set stability fee and no utilization curve.",
63688
63850
  implications: [
@@ -64003,8 +64165,8 @@ function resolveMinDebt(input) {
64003
64165
  m.river?.minNetDebt,
64004
64166
  // Inverse FiRM.
64005
64167
  m.inverse?.minDebt,
64006
- // USDD / Maker-fork: `dust` IS the per-vault debt floor.
64007
- m.usdd?.dust,
64168
+ // dss (Sky / the USDD fork): `dust` IS the per-vault debt floor.
64169
+ m.dss?.dust ?? m.usdd?.dust,
64008
64170
  // Gearbox credit facade.
64009
64171
  m.gearbox?.minDebt,
64010
64172
  // Resupply — a hard per-position floor that also bounds partial repayment.
@@ -65170,10 +65332,10 @@ var inverseAdapter = {
65170
65332
  }
65171
65333
  })
65172
65334
  };
65173
- var usddAdapter = {
65174
- id: "usdd",
65175
- matches: isUsdd,
65176
- profileId: () => "usdd.cdp@v1",
65335
+ var dssAdapter = {
65336
+ id: "dss",
65337
+ matches: isDssType,
65338
+ profileId: () => "dss.cdp@v1",
65177
65339
  build: () => ({
65178
65340
  borrow: {
65179
65341
  rate: { kind: "variable-managed", source: "governance", isLocked: false },
@@ -65587,7 +65749,7 @@ var TERM_ADAPTERS = [
65587
65749
  liquityAdapter,
65588
65750
  riverAdapter,
65589
65751
  inverseAdapter,
65590
- usddAdapter,
65752
+ dssAdapter,
65591
65753
  compoundV3Adapter,
65592
65754
  fluidAdapter,
65593
65755
  gearboxAdapter,
@@ -66029,6 +66191,6 @@ function validateTermSheets(sheets) {
66029
66191
  return sheets.flatMap((s) => validateTermSheet(s));
66030
66192
  }
66031
66193
 
66032
- export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EMPTY_BALANCE, EXACTLY_LENDER_KEY, 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, 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_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, 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, convertExactlyMarketsToResponse, convertFrankencoinMarketsToResponse, convertInverseMarketsToResponse, convertLenderUserDataResult, convertLiquityMarketsToResponse, convertLlamaLendMarketsToResponse, convertResupplyMarketsToResponse, convertRiverMarketsToResponse, convertTellerMarketsToResponse, convertTermMarketsToResponse, convertTermMaxMarketsToResponse, convertUsddMarketsToResponse, createMarketUid, createMidnightBookSource, createMulticallRpcCall, createRawRpcCalls, createTermBookSource, createTermMaxDataSource, decodeListaMarkets, decodeMarkets, decodePackedListaUserDataset, decodePackedMorphoUserDataset, deriveBorrowTags, deriveSupplyTags, detectInterfaceKinds, duration, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, frankencoinKeyParts, frankencoinLenderKey, 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, hasUpshiftVaults, hasYearnVaults, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveStCeloDepositGroup, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, stampVaultClassification, supplyDescription, supplyFindings, supplyHeadline, 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, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData };
66194
+ export { ApiBookSource, DEFAULT_MIDNIGHT_API, DEFAULT_OUTLIER_GUARD, DEFAULT_PROFILE_ID, DEFAULT_STALE_REJECT_SECONDS, DEFAULT_TERMMAX_API, EMPTY_BALANCE, EXACTLY_LENDER_KEY, 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, 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_SHARE_PRICE_PROBE, VOLATILE_VAULT_OVERRIDES, YEARN_CHAIN_IDS, YEARN_YDAEMON_BASE, __resetResupplyUserCaches, accountDepositListKey, accountWithdrawalListKey, appendSnapshot, applyPositionDelta, attachImplications, attachPricesToFlashLiquidity, borrowDescription, borrowFindings, borrowHeadline, buildExposures2 as buildExposures, buildFluidFTokensCall, buildLiquityUserCall, buildLoopResult, buildMorphoTypeCall, buildMorphoTypeUserCallWithLens, buildPortfolioTotals, buildSumerAccumulators, buildSummaries, buildTellerUserCall, buildTermMaxUserCall, buildTermSheet, buildTermSheetsForGroup, buildVaultLookup, calculateLeverage, calculateNetApr, calculateOverallNetApr, calculateWeightedAverage, classifyFreshness, classifyReliability, classifyVault, 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, 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, encodeBalanceFetcherCalldata, enrichTermSheet, enrichmentIndexFromRows, exactlyPairLtv, exactlyPenaltyRateToAprPercent, exactlyWadRateToPercent, feePhrase, feedKeyOf, feedStatKey, fetchDolomiteAccountNumbers, fetchDssMarkets, fetchEulerEarnVaults, fetchEulerEarnVaultsFromSubgraph, fetchEulerSubAccountIndexes, fetchExactlyMarkets, fetchFlashLiquidityForChain, fetchFluidFTokens, fetchFrankencoinMarkets, fetchGeneralYields, fetchGeneralYieldsByMarketUid, fetchGmxExecutionFees, fetchGmxTickerPrices, fetchGmxVaults, fetchHypercoreVaults, fetchInverseMarkets, fetchLagoonApiVaults, fetchLagoonVaults, fetchLiquityMarkets, fetchListaVaultsFromChain, fetchLlamaLendMarkets, fetchMorphoUserBalances, fetchMorphoUserPositionMarkets, fetchMorphoVaults, fetchMorphoVaultsFromApi, fetchMorphoVaultsFromChain, fetchOraclePrices, fetchPendlePrices, fetchResupplyMarkets, fetchRiverMarkets, fetchSiloVaults, fetchTellerMarkets, fetchTermMarkets, fetchTermMaxMarkets, fetchTokenBalances, fetchTokenMetadata, fetchUpshiftApiVaults, fetchUpshiftVaults, fetchUsddMarkets, fetchYearnApiVaults, fetchYearnVaults, filterActiveLenders, filterLendersByProtocol, finalizeInfo, findingsFor, frankencoinKeyParts, frankencoinLenderKey, 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, hasUpshiftVaults, hasYearnVaults, ilkToKeySegment, inverseKeyParts, inverseLenderKey, isFailedCall, isStablecoinSymbol, isYearnV3, keySegmentToIlk, keysFromMaps, lenderApiOnly, lenderFamily, liquityCandidateTroveIds, liquityKeyParts, liquityLenderKey, llamaLendKeyParts, llamaLendLenderKey, mergeDeep, multicall3Abi2 as multicall3Abi, nanTo, needsLenderApproval, needsTokenApproval, noOpResult, normalizeToBytes, parseBalanceFetcherResult, parseMergedResult, parseMulticallRpcResponses, parseRawRpcBatchResponses, parseRawRpcResponses, parseTermMaxLtv, parseTokenBalanceResult, pct, positivePart2 as positivePart, predictInverseEscrow, prepareLenderUserDataRpcCalls, prepareMergedMulticallParams, prepareMergedRpcCalls, prepareMulticallInputs, prepareTokenBalanceRpcCalls, priceGlvVaults, priceGmMarkets, probeAaveFeedTimestamps, pruneFeedStats, rankFindings, readVaultSharePrices, rejectOutliers as rejectPriceOutliers, resolveAdapter, resolveDerivation, resolveStCeloDepositGroup, resupplyKeyParts, resupplyLenderKey, resupplyMarketLabel, riverKeyParts, riverLenderKey, selectAssetGroupPrices, shortDate, stampVaultClassification, supplyDescription, supplyFindings, supplyHeadline, 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, unflattenLenderData, updateFeedStats, usddIlkBytes32, usddKeyParts, usddLenderKey, validateTermSheet, validateTermSheets, validateUserData };
66033
66195
  //# sourceMappingURL=index.js.map
66034
66196
  //# sourceMappingURL=index.js.map