@defisaver/positions-sdk 2.1.145 → 2.1.147-spark-ltv0-fallback-dev

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.
@@ -19,6 +19,19 @@ export declare const sparkGetEmodeMutableProps: ({ eModeCategory, eModeCategorie
19
19
  liquidationRatio: string;
20
20
  collateralFactor: string;
21
21
  };
22
+ /**
23
+ * @description Per-asset effective LTV and liquidation threshold (LLTV) for the user, eMode-aware.
24
+ * Mirrors SparkRatioHelper._getUserAccountDataWithLtvZeroFallback: unlike Aave v3 (eMode ltv-zero
25
+ * bitmap), Spark's LTV-0 state lives on the RESERVE config (asset offboarding zeroes the reserve ltv),
26
+ * so a zeroed reserve keeps `ltv` 0 even inside the active eMode category, while its `lltv` stays the
27
+ * eMode liquidation threshold there (liquidations only consider LLTV). The returned `ltv` is identical
28
+ * to sparkGetEmodeMutableProps().collateralFactor whenever the reserve ltv is non-zero, so a ratio
29
+ * built on this matches the regular safety ratio whenever no collateral is LTV-0.
30
+ */
31
+ export declare const sparkGetUserReserveLtvAndLltv: ({ eModeCategory, eModeCategoriesData, assetsData, }: SparkHelperCommon, _asset: string) => {
32
+ ltv: string;
33
+ lltv: string;
34
+ };
22
35
  export declare const sparkGetAggregatedPositionData: ({ usedAssets, eModeCategory, eModeCategoriesData, assetsData, selectedMarket, network, ...rest }: SparkHelperCommon) => SparkAggregatedPositionData;
23
36
  export declare const getApyAfterValuesEstimation: (selectedMarket: SparkMarketData, actions: [{
24
37
  action: string;
@@ -23,7 +23,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.getApyAfterValuesEstimation = exports.sparkGetAggregatedPositionData = exports.sparkGetEmodeMutableProps = exports.sparkGetSuppliableAsCollAssets = exports.sparkGetSuppliableAssets = exports.sparkGetCollSuppliedAssets = exports.sparkIsInIsolationMode = void 0;
26
+ exports.getApyAfterValuesEstimation = exports.sparkGetAggregatedPositionData = exports.sparkGetUserReserveLtvAndLltv = exports.sparkGetEmodeMutableProps = exports.sparkGetSuppliableAsCollAssets = exports.sparkGetSuppliableAssets = exports.sparkGetCollSuppliedAssets = exports.sparkIsInIsolationMode = void 0;
27
27
  const decimal_js_1 = __importDefault(require("decimal.js"));
28
28
  const tokens_1 = require("@defisaver/tokens");
29
29
  const moneymarket_1 = require("../../moneymarket");
@@ -68,6 +68,37 @@ const sparkGetEmodeMutableProps = ({ eModeCategory, eModeCategoriesData, assetsD
68
68
  return ({ liquidationRatio, collateralFactor });
69
69
  };
70
70
  exports.sparkGetEmodeMutableProps = sparkGetEmodeMutableProps;
71
+ /**
72
+ * @description Offset subtracted from the liquidation threshold (LLTV) when crediting LTV-0 collateral
73
+ * in the safety-ratio fallback. Matches SparkView.getSafetyRatioWithLtvZeroFallback ('LLTV - 5%').
74
+ * Values are fractions (e.g. 0.8), so 5% === 0.05.
75
+ */
76
+ const LTV_ZERO_FALLBACK_LLTV_OFFSET = '0.05';
77
+ /**
78
+ * @description Per-asset effective LTV and liquidation threshold (LLTV) for the user, eMode-aware.
79
+ * Mirrors SparkRatioHelper._getUserAccountDataWithLtvZeroFallback: unlike Aave v3 (eMode ltv-zero
80
+ * bitmap), Spark's LTV-0 state lives on the RESERVE config (asset offboarding zeroes the reserve ltv),
81
+ * so a zeroed reserve keeps `ltv` 0 even inside the active eMode category, while its `lltv` stays the
82
+ * eMode liquidation threshold there (liquidations only consider LLTV). The returned `ltv` is identical
83
+ * to sparkGetEmodeMutableProps().collateralFactor whenever the reserve ltv is non-zero, so a ratio
84
+ * built on this matches the regular safety ratio whenever no collateral is LTV-0.
85
+ */
86
+ const sparkGetUserReserveLtvAndLltv = ({ eModeCategory, eModeCategoriesData, assetsData, }, _asset) => {
87
+ const asset = (0, utils_1.getNativeAssetFromWrapped)(_asset);
88
+ const assetData = assetsData[asset];
89
+ const eModeCategoryData = eModeCategoriesData === null || eModeCategoriesData === void 0 ? void 0 : eModeCategoriesData[eModeCategory];
90
+ if (eModeCategory === 0
91
+ || !eModeCategoryData
92
+ || !eModeCategoryData.collateralAssets.includes(asset)
93
+ || new decimal_js_1.default(eModeCategoryData.collateralFactor || 0).eq(0)) {
94
+ return { ltv: assetData.collateralFactor, lltv: assetData.liquidationRatio };
95
+ }
96
+ // In the active eMode category the fallback trigger is still the reserve-level ltv (the contract
97
+ // checks the reserve config's ltv), so an offboarded asset must not pick up the category-wide eMode ltv.
98
+ const ltv = new decimal_js_1.default(assetData.collateralFactor || 0).eq(0) ? '0' : eModeCategoryData.collateralFactor;
99
+ return { ltv, lltv: eModeCategoryData.liquidationRatio };
100
+ };
101
+ exports.sparkGetUserReserveLtvAndLltv = sparkGetUserReserveLtvAndLltv;
71
102
  const sparkGetAggregatedPositionData = (_a) => {
72
103
  var { usedAssets, eModeCategory, eModeCategoriesData, assetsData, selectedMarket, network } = _a, rest = __rest(_a, ["usedAssets", "eModeCategory", "eModeCategoriesData", "assetsData", "selectedMarket", "network"]);
73
104
  const data = Object.assign({ usedAssets, eModeCategory, eModeCategoriesData, assetsData, selectedMarket, network }, rest);
@@ -81,6 +112,17 @@ const sparkGetAggregatedPositionData = (_a) => {
81
112
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
82
113
  payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
83
114
  payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
115
+ // Safety ratio as evaluated by the automation bots: LTV-0 collateral is credited at (LLTV - 5%)
116
+ // instead of 0 (SparkView.getSafetyRatioWithLtvZeroFallback). Equals `ratio` when no collateral
117
+ // is LTV-0. Computed off-chain here so it is available for after-value simulations too.
118
+ payload.borrowLimitWithLtvZeroFallbackUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ symbol, suppliedUsd }) => {
119
+ const { ltv, lltv } = (0, exports.sparkGetUserReserveLtvAndLltv)(data, symbol);
120
+ const effectiveLtv = new decimal_js_1.default(ltv).eq(0)
121
+ ? decimal_js_1.default.max(0, new decimal_js_1.default(lltv).sub(LTV_ZERO_FALLBACK_LLTV_OFFSET))
122
+ : new decimal_js_1.default(ltv);
123
+ return new decimal_js_1.default(suppliedUsd).mul(effectiveLtv);
124
+ });
125
+ payload.safetyRatioWithLtvZeroFallback = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitWithLtvZeroFallbackUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
84
126
  const { netApy, incentiveUsd, totalInterestUsd } = (0, staking_1.calculateNetApy)({ usedAssets, assetsData });
85
127
  payload.netApy = netApy;
86
128
  payload.incentiveUsd = incentiveUsd;
@@ -32,8 +32,9 @@ const getLiquityV2ViewContract = (provider, network, isLegacy) => {
32
32
  const _getLiquityV2MarketData = (provider, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
33
33
  var _a;
34
34
  const { marketAddress, debtToken, collateralToken, isLegacy, } = selectedMarket;
35
- const viewContract = getLiquityV2ViewContract(provider, network, isLegacy);
36
- const data = yield viewContract.read.getMarketData([marketAddress]);
35
+ const data = isLegacy
36
+ ? yield (0, contracts_1.LiquityV2LegacyViewContractViem)(provider, network).read.getMarketData([marketAddress])
37
+ : (yield (0, contracts_1.LiquityV2ViewContractViem)(provider, network).simulate.getMarketData([marketAddress])).result;
37
38
  const hintHelperAddress = data.hintHelpers;
38
39
  const troveNFTAddress = data.troveNFT;
39
40
  const borrowerOperationsAddress = data.borrowerOperations;
@@ -285,11 +286,15 @@ const _getDebtInFrontForInterestRateLiquityV2 = (markets_2, selectedMarket_1, pr
285
286
  const getDebtInFrontForInterestRateLiquityV2 = (markets_2, selectedMarket_1, provider_1, network_1, isLegacy_1, interestRate_1, ...args_1) => __awaiter(void 0, [markets_2, selectedMarket_1, provider_1, network_1, isLegacy_1, interestRate_1, ...args_1], void 0, function* (markets, selectedMarket, provider, network, isLegacy, interestRate, debtInFrontBeingMoved = '0') { return _getDebtInFrontForInterestRateLiquityV2(markets, selectedMarket, (0, viem_1.getViemProvider)(provider, network), network, isLegacy, interestRate, debtInFrontBeingMoved); });
286
287
  exports.getDebtInFrontForInterestRateLiquityV2 = getDebtInFrontForInterestRateLiquityV2;
287
288
  const _getLiquityV2TroveData = (provider_1, network_1, _a, ...args_1) => __awaiter(void 0, [provider_1, network_1, _a, ...args_1], void 0, function* (provider, network, { selectedMarket, assetsData, troveId, allMarketsData, }, fetchDebtInFront = true) {
288
- const viewContract = getLiquityV2ViewContract(provider, network, selectedMarket.isLegacy);
289
289
  const { minCollRatio, batchCollRatio } = allMarketsData[selectedMarket.value].marketData;
290
290
  const { collateralToken, marketAddress, debtToken } = selectedMarket;
291
+ const troveInfoPromise = selectedMarket.isLegacy
292
+ ? (0, contracts_1.LiquityV2LegacyViewContractViem)(provider, network).read.getTroveInfo([marketAddress, BigInt(troveId)])
293
+ : (0, contracts_1.LiquityV2ViewContractViem)(provider, network).simulate
294
+ .getTroveInfo([marketAddress, BigInt(troveId)])
295
+ .then(({ result }) => result);
291
296
  const [_data, debtInFront] = yield Promise.all([
292
- viewContract.read.getTroveInfo([marketAddress, BigInt(troveId)]),
297
+ troveInfoPromise,
293
298
  fetchDebtInFront ? getDebtInFrontLiquityV2(allMarketsData, selectedMarket.value, provider, network, selectedMarket.isLegacy, troveId) : Promise.resolve('0'),
294
299
  ]);
295
300
  const data = Object.assign(Object.assign({}, _data), { TCRatio: _data.TCRatio.toString() === utils_1.MAXUINT ? '0' : _data.TCRatio.toString() });
@@ -11,6 +11,7 @@ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925: (networkId?: Netwo
11
11
  export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
12
12
  export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
13
13
  export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
14
+ export declare const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
14
15
  export declare const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260827: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
15
16
  export declare const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260924: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
16
17
  export declare const MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261022: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
@@ -26,6 +27,16 @@ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260924: (networkId?:
26
27
  export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261022: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
27
28
  export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261119: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
28
29
  export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217: (networkId?: NetworkNumber) => MorphoMidnightMarketData;
30
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925: () => MorphoMidnightMarketData;
31
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030: () => MorphoMidnightMarketData;
32
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127: () => MorphoMidnightMarketData;
33
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225: () => MorphoMidnightMarketData;
34
+ export declare const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20270129: () => MorphoMidnightMarketData;
35
+ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260925: () => MorphoMidnightMarketData;
36
+ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030: () => MorphoMidnightMarketData;
37
+ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127: () => MorphoMidnightMarketData;
38
+ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225: () => MorphoMidnightMarketData;
39
+ export declare const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129: () => MorphoMidnightMarketData;
29
40
  export declare const MorphoMidnightMarkets: (networkId: NetworkNumber) => {
30
41
  readonly morphomidnightcbbtcusdc_860_20260731_base: MorphoMidnightMarketData;
31
42
  readonly morphomidnightcbbtcusdc_860_20260828_base: MorphoMidnightMarketData;
@@ -33,6 +44,7 @@ export declare const MorphoMidnightMarkets: (networkId: NetworkNumber) => {
33
44
  readonly morphomidnightcbbtcusdc_860_20261030_base: MorphoMidnightMarketData;
34
45
  readonly morphomidnightcbbtcusdc_860_20261127_base: MorphoMidnightMarketData;
35
46
  readonly morphomidnightcbbtcusdc_860_20261225_base: MorphoMidnightMarketData;
47
+ readonly morphomidnightcbbtcusdc_860_20270129_base: MorphoMidnightMarketData;
36
48
  readonly morphomidnighttenorcbbtcusdc_20260827_base: MorphoMidnightMarketData;
37
49
  readonly morphomidnighttenorcbbtcusdc_20260924_base: MorphoMidnightMarketData;
38
50
  readonly morphomidnighttenorcbbtcusdc_20261022_base: MorphoMidnightMarketData;
@@ -43,11 +55,21 @@ export declare const MorphoMidnightMarkets: (networkId: NetworkNumber) => {
43
55
  readonly morphomidnighttenorwethusdc_20261022_base: MorphoMidnightMarketData;
44
56
  readonly morphomidnighttenorwethusdc_20261119_base: MorphoMidnightMarketData;
45
57
  readonly morphomidnighttenorwethusdc_20261217_base: MorphoMidnightMarketData;
58
+ readonly morphomidnighttenorwethusdc_20260925_base: MorphoMidnightMarketData;
59
+ readonly morphomidnighttenorwethusdc_20261030_base: MorphoMidnightMarketData;
60
+ readonly morphomidnighttenorwethusdc_20261127_base: MorphoMidnightMarketData;
61
+ readonly morphomidnighttenorwethusdc_20261225_base: MorphoMidnightMarketData;
62
+ readonly morphomidnighttenorwethusdc_20270129_base: MorphoMidnightMarketData;
46
63
  readonly morphomidnighttenorcbethweth_20260827_base: MorphoMidnightMarketData;
47
64
  readonly morphomidnighttenorcbethweth_20260924_base: MorphoMidnightMarketData;
48
65
  readonly morphomidnighttenorcbethweth_20261022_base: MorphoMidnightMarketData;
49
66
  readonly morphomidnighttenorcbethweth_20261119_base: MorphoMidnightMarketData;
50
67
  readonly morphomidnighttenorcbethweth_20261217_base: MorphoMidnightMarketData;
68
+ readonly morphomidnighttenorcbethweth_20260925_base: MorphoMidnightMarketData;
69
+ readonly morphomidnighttenorcbethweth_20261030_base: MorphoMidnightMarketData;
70
+ readonly morphomidnighttenorcbethweth_20261127_base: MorphoMidnightMarketData;
71
+ readonly morphomidnighttenorcbethweth_20261225_base: MorphoMidnightMarketData;
72
+ readonly morphomidnighttenorcbethweth_20270129_base: MorphoMidnightMarketData;
51
73
  };
52
74
  export declare const isTenorMidnightMarket: (market: Pick<MorphoMidnightMarketData, "curator"> | string) => boolean;
53
75
  export declare const findMorphoMidnightMarket: (marketId: string, network?: NetworkNumber) => MorphoMidnightMarketData | undefined;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.morphoMidnightMarketCollateralParams = exports.findMorphoMidnightMarket = exports.isTenorMidnightMarket = exports.MorphoMidnightMarkets = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261119 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261022 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260924 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260827 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261217 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261119 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261022 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260924 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260827 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261217 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261119 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261022 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260924 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260827 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731 = exports.MIDNIGHT_BASE = void 0;
3
+ exports.morphoMidnightMarketCollateralParams = exports.findMorphoMidnightMarket = exports.isTenorMidnightMarket = exports.MorphoMidnightMarkets = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260925 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20270129 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261119 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261022 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260924 = exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260827 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261217 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261119 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261022 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260924 = exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260827 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261217 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261119 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20261022 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260924 = exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260827 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260925 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260828 = exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731 = exports.MIDNIGHT_BASE = void 0;
4
4
  const types_1 = require("../../types");
5
5
  const constants_1 = require("../../constants");
6
6
  /**
@@ -159,6 +159,31 @@ const MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225 = (networkId = types_1.NetworkNumb
159
159
  curator: 'Morpho',
160
160
  });
161
161
  exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225 = MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225;
162
+ const MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129 = (networkId = types_1.NetworkNumber.Base) => ({
163
+ // This public term is also listed by Tenor, but has no Tenor curator vault and
164
+ // therefore uses the same Morpho market ID as the generic market entry.
165
+ chainIds: [types_1.NetworkNumber.Base],
166
+ label: 'Morpho Midnight cbBTC/USDC',
167
+ shortLabel: 'cbBTC/USDC',
168
+ url: 'cbbtc-usdc-20270129',
169
+ value: types_1.MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270129_Base,
170
+ midnight: exports.MIDNIGHT_BASE,
171
+ loanToken: USDC_BASE,
172
+ collaterals: [{
173
+ token: CBBTC_BASE,
174
+ lltv: 0.86,
175
+ liquidationCursor: '300000000000000000',
176
+ oracle: '0x663BECd10daE6C4A3Dcd89F1d76c1174199639B9',
177
+ }],
178
+ maturity: 1801234800, // 2027-01-29T15:00:00Z
179
+ rcfThreshold: '3000000000',
180
+ enterGate: constants_1.ZERO_ADDRESS,
181
+ liquidatorGate: constants_1.ZERO_ADDRESS,
182
+ marketId: '0xfbbdc1b3e507fc738bca29973750ecb3f2357159191fa4d01f59cea1a895dcfd',
183
+ protocolName: 'morpho-midnight',
184
+ curator: 'Morpho',
185
+ });
186
+ exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129 = MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129;
162
187
  // ── Tenor-curated ────────────────────────────────────────────────────────────────────────────────
163
188
  // Tenor Midnight markets are the same structs as Morpho's (`MorphoMidnightMarketData`), on the same core
164
189
  // contract; only the order book differs. Identify them on Morpho's `/v0/midnight/markets` by `market_id`
@@ -613,6 +638,84 @@ const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217 = (networkId = types_1.Netwo
613
638
  curator: 'Tenor',
614
639
  });
615
640
  exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217 = MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217;
641
+ // Tenor rolls the WETH/USDC and cbETH/WETH ladders monthly. These terms supersede the
642
+ // older Aug–Dec ladder in Tenor's UI, but remain distinct on-chain markets and order books.
643
+ const createTenorWethUsdcRollingMarket = (value, url, maturity, marketId) => ({
644
+ chainIds: [types_1.NetworkNumber.Base],
645
+ label: 'Tenor WETH/USDC',
646
+ shortLabel: 'Tenor WETH/USDC',
647
+ url,
648
+ value,
649
+ midnight: exports.MIDNIGHT_BASE,
650
+ loanToken: USDC_BASE,
651
+ collaterals: [{
652
+ token: WETH_BASE,
653
+ lltv: 0.86,
654
+ liquidationCursor: '300000000000000000',
655
+ oracle: '0xFEa2D58cEfCb9fcb597723c6bAE66fFE4193aFE4',
656
+ }],
657
+ hiddenCollaterals: [{
658
+ token: TENOR_WETH_USDC_VAULT_BASE,
659
+ lltv: 0.98,
660
+ liquidationCursor: '300000000000000000',
661
+ oracle: '0x784519B1b59A1e1498f077066bB9336672bcc3EE',
662
+ }],
663
+ maturity,
664
+ rcfThreshold: '3000000000',
665
+ enterGate: constants_1.ZERO_ADDRESS,
666
+ liquidatorGate: constants_1.ZERO_ADDRESS,
667
+ marketId,
668
+ protocolName: 'morpho-midnight',
669
+ curator: 'Tenor',
670
+ });
671
+ const createTenorCbEthWethRollingMarket = (value, url, maturity, marketId) => ({
672
+ chainIds: [types_1.NetworkNumber.Base],
673
+ label: 'Tenor cbETH/WETH',
674
+ shortLabel: 'Tenor cbETH/WETH',
675
+ url,
676
+ value,
677
+ midnight: exports.MIDNIGHT_BASE,
678
+ loanToken: WETH_BASE,
679
+ collaterals: [{
680
+ token: CBETH_BASE,
681
+ lltv: 0.945,
682
+ liquidationCursor: '300000000000000000',
683
+ oracle: '0xB03855Ad5AFD6B8db8091DD5551CAC4ed621d9E6',
684
+ }],
685
+ hiddenCollaterals: [{
686
+ token: TENOR_CBETH_WETH_VAULT_BASE,
687
+ lltv: 0.98,
688
+ liquidationCursor: '300000000000000000',
689
+ oracle: '0xa02f629871be35d6db0F88C944cF955554Ec87c0',
690
+ }],
691
+ maturity,
692
+ rcfThreshold: '4000000000000000000',
693
+ enterGate: constants_1.ZERO_ADDRESS,
694
+ liquidatorGate: constants_1.ZERO_ADDRESS,
695
+ marketId,
696
+ protocolName: 'morpho-midnight',
697
+ curator: 'Tenor',
698
+ });
699
+ const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925 = () => createTenorWethUsdcRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Base, 'tenor-weth-usdc-20260925', 1790348400, '0x436fa08b0c46b961d3021117919919d9224157f6a9efd8e371c04008feeb0597');
700
+ exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925 = MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925;
701
+ const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030 = () => createTenorWethUsdcRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261030_Base, 'tenor-weth-usdc-20261030', 1793372400, '0x379ae30c5fcb8988c4aac92ddabb13e15c247dd0104157257e6ecf686b7a69dd');
702
+ exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030 = MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030;
703
+ const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127 = () => createTenorWethUsdcRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261127_Base, 'tenor-weth-usdc-20261127', 1795791600, '0xb0513c347a3535d22afcbe697feb5790ab4254b4f885a6e9e77926682c6cc3f5');
704
+ exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127 = MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127;
705
+ const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225 = () => createTenorWethUsdcRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261225_Base, 'tenor-weth-usdc-20261225', 1798210800, '0xdc209b64f909313bd3f54133ac5716a0a3ea03f7faa6332f75d906de16bd2893');
706
+ exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225 = MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225;
707
+ const MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20270129 = () => createTenorWethUsdcRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20270129_Base, 'tenor-weth-usdc-20270129', 1801234800, '0x5f21188cf50dcd269250911a64824736d09770d56796cae432a529a679351475');
708
+ exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20270129 = MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20270129;
709
+ const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260925 = () => createTenorCbEthWethRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20260925_Base, 'tenor-cbeth-weth-20260925', 1790348400, '0x65db922379427ec777fc55650b8f6cc31ab3a3f2f86a9798fc898c81cf936e17');
710
+ exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260925 = MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260925;
711
+ const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030 = () => createTenorCbEthWethRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261030_Base, 'tenor-cbeth-weth-20261030', 1793372400, '0xcdea4ca06837feca3026b23a95f0bd96c3eabdc77d1211472ce0346fcc200649');
712
+ exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030 = MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030;
713
+ const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127 = () => createTenorCbEthWethRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261127_Base, 'tenor-cbeth-weth-20261127', 1795791600, '0xbb9ee13ffe52f4d52311775b1bd4fa309e402fd01ddfa165023c42dd6e5c051d');
714
+ exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127 = MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127;
715
+ const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225 = () => createTenorCbEthWethRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261225_Base, 'tenor-cbeth-weth-20261225', 1798210800, '0x80530386795c88ba8c1ea6d686ae6168525c819ce4e0ea6017cb59afe34fb6d2');
716
+ exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225 = MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225;
717
+ const MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129 = () => createTenorCbEthWethRollingMarket(types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20270129_Base, 'tenor-cbeth-weth-20270129', 1801234800, '0x3cfda244eeec7e5cda2a07ef23e2a5e3fe6ba17882417cafbf3f3c432377ff1d');
718
+ exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129 = MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129;
616
719
  const MorphoMidnightMarkets = (networkId) => ({
617
720
  // BASE — Morpho-curated
618
721
  [types_1.MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20260731_Base]: (0, exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20260731)(networkId),
@@ -621,6 +724,7 @@ const MorphoMidnightMarkets = (networkId) => ({
621
724
  [types_1.MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261030_Base]: (0, exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261030)(networkId),
622
725
  [types_1.MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261127_Base]: (0, exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261127)(networkId),
623
726
  [types_1.MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20261225_Base]: (0, exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20261225)(networkId),
727
+ [types_1.MorphoMidnightVersions.MorphoMidnightCbBTCUSDC_860_20270129_Base]: (0, exports.MORPHO_MIDNIGHT_CBBTC_USDC_860_20270129)(networkId),
624
728
  // BASE — Tenor-curated
625
729
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbBTCUSDC_20260827_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260827)(networkId),
626
730
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbBTCUSDC_20260924_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBBTC_USDC_860_20260924)(networkId),
@@ -632,11 +736,21 @@ const MorphoMidnightMarkets = (networkId) => ({
632
736
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261022_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261022)(networkId),
633
737
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261119_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261119)(networkId),
634
738
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261217_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261217)(networkId),
739
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20260925_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20260925)(),
740
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261030_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261030)(),
741
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261127_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261127)(),
742
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20261225_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20261225)(),
743
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorWETHUSDC_20270129_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_WETH_USDC_860_20270129)(),
635
744
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20260827_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260827)(networkId),
636
745
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20260924_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260924)(networkId),
637
746
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261022_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261022)(networkId),
638
747
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261119_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261119)(networkId),
639
748
  [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261217_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261217)(networkId),
749
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20260925_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20260925)(),
750
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261030_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261030)(),
751
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261127_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261127)(),
752
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20261225_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20261225)(),
753
+ [types_1.MorphoMidnightVersions.MorphoMidnightTenorCbETHWETH_20270129_Base]: (0, exports.MORPHO_MIDNIGHT_TENOR_CBETH_WETH_945_20270129)(),
640
754
  });
641
755
  exports.MorphoMidnightMarkets = MorphoMidnightMarkets;
642
756
  // Which markets Tenor's router quotes, by id, for the quote helpers that only receive one.
@@ -6,6 +6,7 @@ export declare enum MorphoMidnightVersions {
6
6
  MorphoMidnightCbBTCUSDC_860_20261030_Base = "morphomidnightcbbtcusdc_860_20261030_base",
7
7
  MorphoMidnightCbBTCUSDC_860_20261127_Base = "morphomidnightcbbtcusdc_860_20261127_base",
8
8
  MorphoMidnightCbBTCUSDC_860_20261225_Base = "morphomidnightcbbtcusdc_860_20261225_base",
9
+ MorphoMidnightCbBTCUSDC_860_20270129_Base = "morphomidnightcbbtcusdc_860_20270129_base",
9
10
  MorphoMidnightTenorCbBTCUSDC_20260827_Base = "morphomidnighttenorcbbtcusdc_20260827_base",
10
11
  MorphoMidnightTenorCbBTCUSDC_20260924_Base = "morphomidnighttenorcbbtcusdc_20260924_base",
11
12
  MorphoMidnightTenorCbBTCUSDC_20261022_Base = "morphomidnighttenorcbbtcusdc_20261022_base",
@@ -16,11 +17,21 @@ export declare enum MorphoMidnightVersions {
16
17
  MorphoMidnightTenorWETHUSDC_20261022_Base = "morphomidnighttenorwethusdc_20261022_base",
17
18
  MorphoMidnightTenorWETHUSDC_20261119_Base = "morphomidnighttenorwethusdc_20261119_base",
18
19
  MorphoMidnightTenorWETHUSDC_20261217_Base = "morphomidnighttenorwethusdc_20261217_base",
20
+ MorphoMidnightTenorWETHUSDC_20260925_Base = "morphomidnighttenorwethusdc_20260925_base",
21
+ MorphoMidnightTenorWETHUSDC_20261030_Base = "morphomidnighttenorwethusdc_20261030_base",
22
+ MorphoMidnightTenorWETHUSDC_20261127_Base = "morphomidnighttenorwethusdc_20261127_base",
23
+ MorphoMidnightTenorWETHUSDC_20261225_Base = "morphomidnighttenorwethusdc_20261225_base",
24
+ MorphoMidnightTenorWETHUSDC_20270129_Base = "morphomidnighttenorwethusdc_20270129_base",
19
25
  MorphoMidnightTenorCbETHWETH_20260827_Base = "morphomidnighttenorcbethweth_20260827_base",
20
26
  MorphoMidnightTenorCbETHWETH_20260924_Base = "morphomidnighttenorcbethweth_20260924_base",
21
27
  MorphoMidnightTenorCbETHWETH_20261022_Base = "morphomidnighttenorcbethweth_20261022_base",
22
28
  MorphoMidnightTenorCbETHWETH_20261119_Base = "morphomidnighttenorcbethweth_20261119_base",
23
- MorphoMidnightTenorCbETHWETH_20261217_Base = "morphomidnighttenorcbethweth_20261217_base"
29
+ MorphoMidnightTenorCbETHWETH_20261217_Base = "morphomidnighttenorcbethweth_20261217_base",
30
+ MorphoMidnightTenorCbETHWETH_20260925_Base = "morphomidnighttenorcbethweth_20260925_base",
31
+ MorphoMidnightTenorCbETHWETH_20261030_Base = "morphomidnighttenorcbethweth_20261030_base",
32
+ MorphoMidnightTenorCbETHWETH_20261127_Base = "morphomidnighttenorcbethweth_20261127_base",
33
+ MorphoMidnightTenorCbETHWETH_20261225_Base = "morphomidnighttenorcbethweth_20261225_base",
34
+ MorphoMidnightTenorCbETHWETH_20270129_Base = "morphomidnighttenorcbethweth_20270129_base"
24
35
  }
25
36
  export type MorphoMidnightCurator = 'Morpho' | 'Tenor';
26
37
  export interface MorphoMidnightCollateralParams {
@@ -12,6 +12,7 @@ var MorphoMidnightVersions;
12
12
  MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261030_Base"] = "morphomidnightcbbtcusdc_860_20261030_base";
13
13
  MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261127_Base"] = "morphomidnightcbbtcusdc_860_20261127_base";
14
14
  MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20261225_Base"] = "morphomidnightcbbtcusdc_860_20261225_base";
15
+ MorphoMidnightVersions["MorphoMidnightCbBTCUSDC_860_20270129_Base"] = "morphomidnightcbbtcusdc_860_20270129_base";
15
16
  // Tenor-hosted Midnight markets (same core, different order book)
16
17
  MorphoMidnightVersions["MorphoMidnightTenorCbBTCUSDC_20260827_Base"] = "morphomidnighttenorcbbtcusdc_20260827_base";
17
18
  MorphoMidnightVersions["MorphoMidnightTenorCbBTCUSDC_20260924_Base"] = "morphomidnighttenorcbbtcusdc_20260924_base";
@@ -23,11 +24,21 @@ var MorphoMidnightVersions;
23
24
  MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20261022_Base"] = "morphomidnighttenorwethusdc_20261022_base";
24
25
  MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20261119_Base"] = "morphomidnighttenorwethusdc_20261119_base";
25
26
  MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20261217_Base"] = "morphomidnighttenorwethusdc_20261217_base";
27
+ MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20260925_Base"] = "morphomidnighttenorwethusdc_20260925_base";
28
+ MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20261030_Base"] = "morphomidnighttenorwethusdc_20261030_base";
29
+ MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20261127_Base"] = "morphomidnighttenorwethusdc_20261127_base";
30
+ MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20261225_Base"] = "morphomidnighttenorwethusdc_20261225_base";
31
+ MorphoMidnightVersions["MorphoMidnightTenorWETHUSDC_20270129_Base"] = "morphomidnighttenorwethusdc_20270129_base";
26
32
  MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20260827_Base"] = "morphomidnighttenorcbethweth_20260827_base";
27
33
  MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20260924_Base"] = "morphomidnighttenorcbethweth_20260924_base";
28
34
  MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20261022_Base"] = "morphomidnighttenorcbethweth_20261022_base";
29
35
  MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20261119_Base"] = "morphomidnighttenorcbethweth_20261119_base";
30
36
  MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20261217_Base"] = "morphomidnighttenorcbethweth_20261217_base";
37
+ MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20260925_Base"] = "morphomidnighttenorcbethweth_20260925_base";
38
+ MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20261030_Base"] = "morphomidnighttenorcbethweth_20261030_base";
39
+ MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20261127_Base"] = "morphomidnighttenorcbethweth_20261127_base";
40
+ MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20261225_Base"] = "morphomidnighttenorcbethweth_20261225_base";
41
+ MorphoMidnightVersions["MorphoMidnightTenorCbETHWETH_20270129_Base"] = "morphomidnighttenorcbethweth_20270129_base";
31
42
  })(MorphoMidnightVersions || (exports.MorphoMidnightVersions = MorphoMidnightVersions = {}));
32
43
  /**
33
44
  * How much weight `borrowRate` / `debtBase` / `debtInterest` carry on a given position. They fall back to
@@ -85,6 +85,8 @@ export interface SparkAggregatedPositionData {
85
85
  leftToBorrowUsd: string;
86
86
  ratio: string;
87
87
  collRatio: string;
88
+ borrowLimitWithLtvZeroFallbackUsd: string;
89
+ safetyRatioWithLtvZeroFallback: string;
88
90
  netApy: string;
89
91
  incentiveUsd: string;
90
92
  totalInterestUsd: string;
@@ -104,6 +106,7 @@ export interface SparkPositionData extends MMPositionData {
104
106
  ratio: string;
105
107
  minRatio: string;
106
108
  collRatio: string;
109
+ safetyRatioWithLtvZeroFallback?: string;
107
110
  suppliedUsd: string;
108
111
  borrowedUsd: string;
109
112
  borrowLimitUsd: string;