@1delta/data-sdk 0.0.41 → 0.0.43

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
@@ -38,37 +38,42 @@ function getChainEntries(chainIds) {
38
38
  return entries;
39
39
  }
40
40
 
41
- // src/lending.ts
41
+ // src/lending/registry.ts
42
42
  var GLOBAL_LENDER_DATA_KEY = "__1delta_lender_registry__";
43
- globalThis[GLOBAL_LENDER_DATA_KEY] = {
43
+ var LENDER_DATA_DEFAULTS = () => ({
44
44
  aaveTokens: {},
45
45
  aavePools: {},
46
- compoundV3Pools: {},
47
- morphoPools: {},
48
- compoundV3BaseData: {},
46
+ aaveReserves: {},
47
+ aaveOracles: {},
48
+ aaveOraclesConfig: {},
49
+ aaveWethGateway: {},
50
+ aaveV4Spokes: {},
51
+ aaveV4Oracles: {},
52
+ aaveV4Peripherals: {},
49
53
  compoundV2Pools: {},
50
54
  compoundV2Tokens: {},
51
55
  compoundV2TokenArray: {},
52
- initConfig: {},
53
- aaveReserves: {},
54
56
  compoundV2Reserves: {},
55
- compoundV3Reserves: {},
56
- aaveOracles: {},
57
57
  compoundV2Oracles: {},
58
+ compoundV2OraclesConfig: {},
59
+ compoundV3Pools: {},
60
+ compoundV3BaseData: {},
61
+ compoundV3Reserves: {},
58
62
  compoundV3OraclesData: {},
63
+ compoundV3Bulker: {},
64
+ morphoPools: {},
59
65
  morphoOracles: {},
60
66
  morphoTypeOracles: {},
61
67
  morphoTypeMarkets: {},
62
68
  morphoTypeVaults: {},
63
- aaveOraclesConfig: {},
64
- compoundV2OraclesConfig: {},
65
- aaveWethGateway: {},
66
69
  morphoBundler3: {},
70
+ initConfig: {},
67
71
  listaNativeProvider: {},
68
72
  midnightConfig: {},
69
73
  midnightMarkets: {},
70
74
  termConfig: {},
71
75
  termMarkets: {},
76
+ termMaxConfig: {},
72
77
  exactlyConfig: {},
73
78
  exactlyMarkets: {},
74
79
  tellerConfig: {},
@@ -78,7 +83,6 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
78
83
  riverConfig: {},
79
84
  riverMarkets: {},
80
85
  inverseConfig: {},
81
- termMaxConfig: {},
82
86
  inverseMarkets: {},
83
87
  usddConfig: {},
84
88
  usddMarkets: {},
@@ -90,14 +94,11 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
90
94
  llamaLendMarkets: {},
91
95
  resupplyConfig: {},
92
96
  curvanceConfig: {},
93
- compoundV3Bulker: {},
97
+ fraxlendConfig: {},
94
98
  eulerConfigs: {},
95
99
  eulerVaults: {},
96
100
  dolomiteConfigs: {},
97
101
  dolomiteEmode: {},
98
- aaveV4Spokes: {},
99
- aaveV4Oracles: {},
100
- aaveV4Peripherals: {},
101
102
  siloMarkets: {},
102
103
  siloPeripherals: {},
103
104
  siloMarketsV3: {},
@@ -109,166 +110,200 @@ globalThis[GLOBAL_LENDER_DATA_KEY] = {
109
110
  marketCompressorV310: "",
110
111
  chains: {}
111
112
  }
112
- };
113
+ });
114
+ globalThis[GLOBAL_LENDER_DATA_KEY] = LENDER_DATA_DEFAULTS();
115
+ var LENDER_DATA_SLOTS = Object.keys(LENDER_DATA_DEFAULTS());
113
116
  function getGlobalData2() {
114
117
  return globalThis[GLOBAL_LENDER_DATA_KEY];
115
118
  }
116
- function initializeLenderData({
117
- aaveTokensOverride,
118
- aavePoolsOverride,
119
- aaveOraclesOverride,
120
- compoundV2OraclesOverride,
121
- compoundV3OraclesDataOverride,
122
- compoundV3PoolsOverride,
123
- compoundV3BaseDataOverride,
124
- morphoPoolsOverride,
125
- compoundV2TokensOverride,
126
- compoundV2TokenArrayOverride,
127
- compoundV2PoolsOverride,
128
- initConfigOverride,
129
- aaveReservesOverride,
130
- compoundV3ReservesOverride,
131
- compoundV2ReservesOverride,
132
- morphoOraclesOverride,
133
- morphoTypeOraclesOverride,
134
- morphoTypeMarketsOverride,
135
- morphoTypeVaultsOverride,
136
- aaveOraclesConfigOverride,
137
- compoundV2OraclesConfigOverride,
138
- aaveWethGatewayOverride,
139
- morphoBundler3Override,
140
- listaNativeProviderOverride,
141
- midnightConfigOverride,
142
- midnightMarketsOverride,
143
- termConfigOverride,
144
- termMarketsOverride,
145
- exactlyConfigOverride,
146
- exactlyMarketsOverride,
147
- tellerConfigOverride,
148
- tellerPoolsOverride,
149
- liquityConfigOverride,
150
- liquityMarketsOverride,
151
- riverConfigOverride,
152
- riverMarketsOverride,
153
- inverseConfigOverride,
154
- termMaxConfigOverride,
155
- inverseMarketsOverride,
156
- usddConfigOverride,
157
- usddMarketsOverride,
158
- skyConfigOverride,
159
- skyMarketsOverride,
160
- frankencoinConfigOverride,
161
- frankencoinMarketsOverride,
162
- llamaLendConfigOverride,
163
- llamaLendMarketsOverride,
164
- resupplyConfigOverride,
165
- curvanceConfigOverride,
166
- compoundV3BulkerOverride,
167
- eulerConfigsOverride,
168
- eulerVaultsOverride,
169
- dolomiteConfigsOverride,
170
- dolomiteEmodeOverride,
171
- aaveV4SpokesOverride,
172
- aaveV4OraclesOverride,
173
- aaveV4PeripheralsOverride,
174
- siloMarketsOverride,
175
- siloPeripheralsOverride,
176
- siloMarketsV3Override,
177
- siloPeripheralsV3Override,
178
- fluidResolversOverride,
179
- fluidVaultsOverride,
180
- gearboxResolversOverride
181
- }) {
119
+ function initializeLenderData(overrides) {
182
120
  const data = getGlobalData2();
183
- if (aaveTokensOverride) data.aaveTokens = aaveTokensOverride;
184
- if (aaveOraclesOverride) data.aaveOracles = aaveOraclesOverride;
185
- if (compoundV2OraclesOverride) data.compoundV2Oracles = compoundV2OraclesOverride;
186
- if (compoundV3OraclesDataOverride) data.compoundV3OraclesData = compoundV3OraclesDataOverride;
187
- if (aavePoolsOverride) data.aavePools = aavePoolsOverride;
188
- if (compoundV3PoolsOverride) data.compoundV3Pools = compoundV3PoolsOverride;
189
- if (morphoPoolsOverride) data.morphoPools = morphoPoolsOverride;
190
- if (compoundV3BaseDataOverride) data.compoundV3BaseData = compoundV3BaseDataOverride;
191
- if (compoundV2TokensOverride) data.compoundV2Tokens = compoundV2TokensOverride;
192
- if (compoundV2TokenArrayOverride) data.compoundV2TokenArray = compoundV2TokenArrayOverride;
193
- if (compoundV2PoolsOverride) data.compoundV2Pools = compoundV2PoolsOverride;
194
- if (initConfigOverride) data.initConfig = initConfigOverride;
195
- if (aaveReservesOverride) data.aaveReserves = aaveReservesOverride;
196
- if (compoundV3ReservesOverride) data.compoundV3Reserves = compoundV3ReservesOverride;
197
- if (compoundV2ReservesOverride) data.compoundV2Reserves = compoundV2ReservesOverride;
198
- if (morphoOraclesOverride) data.morphoOracles = morphoOraclesOverride;
199
- if (morphoTypeOraclesOverride) data.morphoTypeOracles = morphoTypeOraclesOverride;
200
- if (morphoTypeMarketsOverride) data.morphoTypeMarkets = morphoTypeMarketsOverride;
201
- if (morphoTypeVaultsOverride) data.morphoTypeVaults = morphoTypeVaultsOverride;
202
- if (aaveOraclesConfigOverride) data.aaveOraclesConfig = aaveOraclesConfigOverride;
203
- if (compoundV2OraclesConfigOverride) data.compoundV2OraclesConfig = compoundV2OraclesConfigOverride;
204
- if (aaveWethGatewayOverride) data.aaveWethGateway = aaveWethGatewayOverride;
205
- if (morphoBundler3Override) data.morphoBundler3 = morphoBundler3Override;
206
- if (listaNativeProviderOverride) data.listaNativeProvider = listaNativeProviderOverride;
207
- if (midnightConfigOverride) data.midnightConfig = midnightConfigOverride;
208
- if (midnightMarketsOverride) data.midnightMarkets = midnightMarketsOverride;
209
- if (termConfigOverride) data.termConfig = termConfigOverride;
210
- if (termMarketsOverride) data.termMarkets = termMarketsOverride;
211
- if (exactlyConfigOverride) data.exactlyConfig = exactlyConfigOverride;
212
- if (exactlyMarketsOverride) data.exactlyMarkets = exactlyMarketsOverride;
213
- if (tellerConfigOverride) data.tellerConfig = tellerConfigOverride;
214
- if (tellerPoolsOverride) data.tellerPools = tellerPoolsOverride;
215
- if (liquityConfigOverride) data.liquityConfig = liquityConfigOverride;
216
- if (liquityMarketsOverride) data.liquityMarkets = liquityMarketsOverride;
217
- if (riverConfigOverride) data.riverConfig = riverConfigOverride;
218
- if (riverMarketsOverride) data.riverMarkets = riverMarketsOverride;
219
- if (inverseConfigOverride) data.inverseConfig = inverseConfigOverride;
220
- if (termMaxConfigOverride) data.termMaxConfig = termMaxConfigOverride;
221
- if (inverseMarketsOverride) data.inverseMarkets = inverseMarketsOverride;
222
- if (usddConfigOverride) data.usddConfig = usddConfigOverride;
223
- if (usddMarketsOverride) data.usddMarkets = usddMarketsOverride;
224
- if (skyConfigOverride) data.skyConfig = skyConfigOverride;
225
- if (skyMarketsOverride) data.skyMarkets = skyMarketsOverride;
226
- if (frankencoinConfigOverride) data.frankencoinConfig = frankencoinConfigOverride;
227
- if (frankencoinMarketsOverride) data.frankencoinMarkets = frankencoinMarketsOverride;
228
- if (llamaLendConfigOverride) data.llamaLendConfig = llamaLendConfigOverride;
229
- if (llamaLendMarketsOverride) data.llamaLendMarkets = llamaLendMarketsOverride;
230
- if (resupplyConfigOverride) data.resupplyConfig = resupplyConfigOverride;
231
- if (curvanceConfigOverride) data.curvanceConfig = curvanceConfigOverride;
232
- if (compoundV3BulkerOverride) data.compoundV3Bulker = compoundV3BulkerOverride;
233
- if (eulerConfigsOverride) data.eulerConfigs = eulerConfigsOverride;
234
- if (eulerVaultsOverride) data.eulerVaults = eulerVaultsOverride;
235
- if (dolomiteConfigsOverride) data.dolomiteConfigs = dolomiteConfigsOverride;
236
- if (dolomiteEmodeOverride) data.dolomiteEmode = dolomiteEmodeOverride;
237
- if (aaveV4SpokesOverride) data.aaveV4Spokes = aaveV4SpokesOverride;
238
- if (aaveV4OraclesOverride) data.aaveV4Oracles = aaveV4OraclesOverride;
239
- if (aaveV4PeripheralsOverride) data.aaveV4Peripherals = aaveV4PeripheralsOverride;
240
- if (siloMarketsOverride) data.siloMarkets = siloMarketsOverride;
241
- if (siloPeripheralsOverride) data.siloPeripherals = siloPeripheralsOverride;
242
- if (siloMarketsV3Override) data.siloMarketsV3 = siloMarketsV3Override;
243
- if (siloPeripheralsV3Override) data.siloPeripheralsV3 = siloPeripheralsV3Override;
244
- if (fluidResolversOverride) data.fluidResolvers = fluidResolversOverride;
245
- if (fluidVaultsOverride) data.fluidVaults = fluidVaultsOverride;
246
- if (gearboxResolversOverride) data.gearboxResolvers = gearboxResolversOverride;
121
+ const given = overrides;
122
+ for (const slot of LENDER_DATA_SLOTS) {
123
+ const value = given[`${slot}Override`];
124
+ if (value) data[slot] = value;
125
+ }
247
126
  }
127
+
128
+ // src/lending/aave.ts
248
129
  var aaveTokens = () => getGlobalData2()?.aaveTokens;
249
130
  var aavePools = () => getGlobalData2()?.aavePools;
250
131
  var aaveOracles = () => getGlobalData2()?.aaveOracles;
132
+ var aaveReserves = () => getGlobalData2()?.aaveReserves;
133
+ var aaveOraclesConfig = () => getGlobalData2()?.aaveOraclesConfig;
134
+ var aaveWethGateway = () => getGlobalData2()?.aaveWethGateway;
135
+
136
+ // src/lending/aaveV4.ts
137
+ var aaveV4Spokes = () => getGlobalData2()?.aaveV4Spokes;
138
+ var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
139
+ var aaveV4Peripherals = () => getGlobalData2()?.aaveV4Peripherals;
140
+ function getAaveV4SpokeEntry(chainId, lenderKey) {
141
+ const parsed = parseAaveV4SpokeLenderKey(lenderKey);
142
+ if (!parsed) return void 0;
143
+ return getGlobalData2()?.aaveV4Spokes?.[chainId]?.[parsed.spokeAddrLower];
144
+ }
145
+ function getAaveV4GatewayAddresses(chainId, lender, hubOverride) {
146
+ const c = getGlobalData2()?.aaveV4Peripherals?.[chainId];
147
+ if (!c) return {};
148
+ let hubAddr = hubOverride?.toLowerCase();
149
+ if (!hubAddr) {
150
+ const spokeEntry = getAaveV4SpokeEntry(chainId, lender);
151
+ hubAddr = spokeEntry?.reserves?.[0]?.hub?.toLowerCase();
152
+ }
153
+ const perHub = hubAddr && c.perHub?.[hubAddr] || void 0;
154
+ return {
155
+ nativeGateway: perHub?.nativeGateway ?? c.nativeGateway,
156
+ signatureGateway: perHub?.signatureGateway ?? c.signatureGateway
157
+ };
158
+ }
159
+ function getAaveV4SpokePeripherals(chainId, lenderKey) {
160
+ const parsed = parseAaveV4SpokeLenderKey(lenderKey);
161
+ if (!parsed) return void 0;
162
+ return getGlobalData2()?.aaveV4Peripherals?.[chainId]?.perSpoke?.[parsed.spokeAddrLower];
163
+ }
164
+ function getAaveV4PositionManagers(chainId, lenderKey) {
165
+ const meta = getAaveV4SpokePeripherals(chainId, lenderKey);
166
+ if (!meta?.positionManagers) return [];
167
+ return meta.positionManagers.filter((pm) => pm.active !== false && pm.address).map((pm) => pm.address.toLowerCase());
168
+ }
169
+ function findAaveV4PositionManager(chainId, lenderKey, nameQuery) {
170
+ const meta = getAaveV4SpokePeripherals(chainId, lenderKey);
171
+ if (!meta?.positionManagers) return void 0;
172
+ const q = nameQuery.toLowerCase();
173
+ const hit = meta.positionManagers.find(
174
+ (pm) => pm.active !== false && pm.address && (pm.name ?? "").toLowerCase().includes(q)
175
+ );
176
+ return hit?.address?.toLowerCase();
177
+ }
178
+ function aaveV4SpokeLenderKey(spoke) {
179
+ if (!spoke || !spoke.startsWith("0x") || spoke.length !== 42) {
180
+ throw new Error(`aaveV4SpokeLenderKey: invalid spoke address ${spoke}`);
181
+ }
182
+ return `AAVE_V4_${spoke.slice(2).toUpperCase()}`;
183
+ }
184
+ function parseAaveV4SpokeLenderKey(lenderKey) {
185
+ const match = lenderKey.match(/^AAVE_V4_([0-9A-F]{40})$/);
186
+ if (!match) return void 0;
187
+ return { spokeAddrLower: "0x" + match[1].toLowerCase() };
188
+ }
189
+
190
+ // src/lending/compoundV2.ts
191
+ var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
192
+ var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
193
+ var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
194
+ var compoundV2Reserves = () => getGlobalData2()?.compoundV2Reserves;
251
195
  var compoundV2Oracles = () => getGlobalData2()?.compoundV2Oracles;
196
+ var compoundV2OraclesConfig = () => getGlobalData2()?.compoundV2OraclesConfig;
197
+
198
+ // src/lending/compoundV3.ts
199
+ var compoundV3Pools = () => getGlobalData2()?.compoundV3Pools;
200
+ var compoundV3BaseData = () => getGlobalData2()?.compoundV3BaseData;
201
+ var compoundV3Reserves = () => getGlobalData2()?.compoundV3Reserves;
252
202
  var compoundV3OraclesData = () => getGlobalData2()?.compoundV3OraclesData;
203
+ var compoundV3Bulker = () => getGlobalData2()?.compoundV3Bulker;
204
+
205
+ // src/lending/morpho.ts
206
+ var morphoPools = () => getGlobalData2()?.morphoPools;
253
207
  var morphoOracles = () => getGlobalData2()?.morphoOracles;
254
208
  var morphoTypeOracles = () => getGlobalData2()?.morphoTypeOracles;
255
209
  var morphoTypeMarkets = () => getGlobalData2()?.morphoTypeMarkets;
256
210
  var morphoTypeVaults = () => getGlobalData2()?.morphoTypeVaults;
257
- var aaveReserves = () => getGlobalData2()?.aaveReserves;
258
- var compoundV3Reserves = () => getGlobalData2()?.compoundV3Reserves;
259
- var compoundV2Reserves = () => getGlobalData2()?.compoundV2Reserves;
260
- var compoundV3Pools = () => getGlobalData2()?.compoundV3Pools;
261
- var morphoPools = () => getGlobalData2()?.morphoPools;
262
- var compoundV3BaseData = () => getGlobalData2()?.compoundV3BaseData;
263
- var compoundV2Pools = () => getGlobalData2()?.compoundV2Pools;
264
- var compoundV2Tokens = () => getGlobalData2()?.compoundV2Tokens;
265
- var compoundV2TokenArray = () => getGlobalData2()?.compoundV2TokenArray;
266
- var initConfig = () => getGlobalData2()?.initConfig;
267
- var aaveOraclesConfig = () => getGlobalData2()?.aaveOraclesConfig;
268
- var compoundV2OraclesConfig = () => getGlobalData2()?.compoundV2OraclesConfig;
269
- var aaveWethGateway = () => getGlobalData2()?.aaveWethGateway;
270
211
  var morphoBundler3 = () => getGlobalData2()?.morphoBundler3;
212
+
213
+ // src/lending/euler.ts
214
+ var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
215
+ var eulerVaults = () => getGlobalData2()?.eulerVaults;
216
+
217
+ // src/lending/silo.ts
218
+ var siloMarkets = () => getGlobalData2()?.siloMarkets;
219
+ var siloPeripherals = () => getGlobalData2()?.siloPeripherals;
220
+ var siloMarketsV3 = () => getGlobalData2()?.siloMarketsV3;
221
+ var siloPeripheralsV3 = () => getGlobalData2()?.siloPeripheralsV3;
222
+ function siloV2LenderKey(siloConfig) {
223
+ if (!siloConfig || !siloConfig.startsWith("0x") || siloConfig.length !== 42) {
224
+ throw new Error(`siloV2LenderKey: invalid siloConfig address ${siloConfig}`);
225
+ }
226
+ return `SILO_V2_${siloConfig.slice(2).toUpperCase()}`;
227
+ }
228
+ function parseSiloV2LenderKey(lenderKey) {
229
+ const match = lenderKey.match(/^SILO_V2_([0-9A-F]{40})$/);
230
+ if (!match) return void 0;
231
+ return { siloConfigAddrLower: "0x" + match[1].toLowerCase() };
232
+ }
233
+ function getSiloV2MarketEntry(chainId, lenderKey) {
234
+ const parsed = parseSiloV2LenderKey(lenderKey);
235
+ if (!parsed) return void 0;
236
+ const list = getGlobalData2()?.siloMarkets?.[chainId];
237
+ if (!list) return void 0;
238
+ return list.find((m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower);
239
+ }
240
+ function siloV3LenderKey(siloConfig) {
241
+ if (!siloConfig || !siloConfig.startsWith("0x") || siloConfig.length !== 42) {
242
+ throw new Error(`siloV3LenderKey: invalid siloConfig address ${siloConfig}`);
243
+ }
244
+ return `SILO_V3_${siloConfig.slice(2).toUpperCase()}`;
245
+ }
246
+ function parseSiloV3LenderKey(lenderKey) {
247
+ const match = lenderKey.match(/^SILO_V3_([0-9A-F]{40})$/);
248
+ if (!match) return void 0;
249
+ return { siloConfigAddrLower: "0x" + match[1].toLowerCase() };
250
+ }
251
+ function getSiloV3MarketEntry(chainId, lenderKey) {
252
+ const parsed = parseSiloV3LenderKey(lenderKey);
253
+ if (!parsed) return void 0;
254
+ const list = getGlobalData2()?.siloMarketsV3?.[chainId];
255
+ if (!list) return void 0;
256
+ return list.find((m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower);
257
+ }
258
+
259
+ // src/lending/fluid.ts
260
+ var fluidResolvers = () => getGlobalData2()?.fluidResolvers;
261
+ var fluidVaults = () => getGlobalData2()?.fluidVaults;
262
+ var fluidChains = () => Object.keys(getGlobalData2()?.fluidResolvers ?? {});
263
+ var fluidVaultEntries = (chainId) => Object.entries(getGlobalData2()?.fluidVaults?.[chainId] ?? {});
264
+
265
+ // src/lending/gearbox.ts
266
+ var gearboxResolvers = () => getGlobalData2()?.gearboxResolvers;
267
+ var gearboxChains = () => Object.keys(getGlobalData2()?.gearboxResolvers?.chains ?? {});
268
+ var gearboxMarketCompressor = () => getGlobalData2()?.gearboxResolvers?.marketCompressorV310 || void 0;
269
+ var gearboxAddressProviderV310 = () => getGlobalData2()?.gearboxResolvers?.addressProviderV310 || void 0;
270
+ var gearboxBotListV3 = (chainId) => getGlobalData2()?.gearboxResolvers?.chains?.[chainId]?.botList || void 0;
271
+ var GEARBOX_ACCOUNT_COMPRESSOR_V310 = "0x4115708Fc8fe6bB392De2e0C21c2C81dA2222394";
272
+ var gearboxAccountCompressor = () => GEARBOX_ACCOUNT_COMPRESSOR_V310;
273
+ var gearboxMarketConfigurators = (chainId) => getGlobalData2()?.gearboxResolvers?.chains?.[chainId]?.marketConfigurators;
274
+ function gearboxV3LenderKey(creditManager) {
275
+ if (!creditManager || !creditManager.startsWith("0x") || creditManager.length !== 42) {
276
+ throw new Error(`gearboxV3LenderKey: invalid creditManager address ${creditManager}`);
277
+ }
278
+ return `GEARBOX_V3_${creditManager.slice(2).toUpperCase()}`;
279
+ }
280
+ function parseGearboxV3LenderKey(lenderKey) {
281
+ const match = lenderKey.match(/^GEARBOX_V3_([0-9A-F]{40})$/);
282
+ if (!match) return void 0;
283
+ return { creditManagerAddrLower: "0x" + match[1].toLowerCase() };
284
+ }
285
+
286
+ // src/lending/dolomite.ts
287
+ var dolomiteConfigs = () => getGlobalData2()?.dolomiteConfigs;
288
+ var dolomiteChains = () => Object.keys(getGlobalData2()?.dolomiteConfigs ?? {});
289
+ var dolomiteEmode = () => getGlobalData2()?.dolomiteEmode;
290
+ var dolomiteMarketIdByToken = (chainId, token) => {
291
+ const markets = getGlobalData2()?.dolomiteConfigs?.[chainId]?.markets;
292
+ if (!markets) return void 0;
293
+ const lower = token.toLowerCase();
294
+ for (const marketId in markets) {
295
+ if (markets[marketId]?.toLowerCase() === lower) return marketId;
296
+ }
297
+ return void 0;
298
+ };
299
+
300
+ // src/lending/initProtocol.ts
301
+ var initConfig = () => getGlobalData2()?.initConfig;
302
+
303
+ // src/lending/lista.ts
271
304
  var listaNativeProvider = () => getGlobalData2()?.listaNativeProvider;
305
+
306
+ // src/lending/midnight.ts
272
307
  var midnightConfig = () => getGlobalData2()?.midnightConfig;
273
308
  var MIDNIGHT_API_OVERRIDE_KEY = "__1delta_midnight_api_base__";
274
309
  var setMidnightApiBase = (url) => {
@@ -287,6 +322,8 @@ var midnightMarketById = (chainId, marketId) => {
287
322
  const lower = marketId.toLowerCase();
288
323
  return midnightMarketsByChain(chainId).find((m) => m.marketId.toLowerCase() === lower);
289
324
  };
325
+
326
+ // src/lending/term.ts
290
327
  var termConfig = () => getGlobalData2()?.termConfig;
291
328
  var TERM_API_OVERRIDE_KEY = "__1delta_term_api_base__";
292
329
  var setTermApiBase = (url) => {
@@ -305,6 +342,25 @@ var termMarketById = (chainId, termRepoId) => {
305
342
  const lower = termRepoId.toLowerCase();
306
343
  return termMarketsByChain(chainId).find((m) => m.termRepoId.toLowerCase() === lower);
307
344
  };
345
+
346
+ // src/lending/termMax.ts
347
+ var termMaxConfig = () => getGlobalData2()?.termMaxConfig;
348
+ var termMaxConfigByChain = (chainId) => getGlobalData2()?.termMaxConfig?.[String(chainId)];
349
+ var termMaxChainIds = () => Object.keys(getGlobalData2()?.termMaxConfig ?? {});
350
+ var termMaxApiBaseUrl = (chainId) => termMaxConfigByChain(chainId)?.apiBaseUrl || "https://api.termmax.ts.finance";
351
+ function termMaxLenderKey(market) {
352
+ if (!market || !market.startsWith("0x") || market.length !== 42) {
353
+ throw new Error(`termMaxLenderKey: invalid market address ${market}`);
354
+ }
355
+ return `TERMMAX_${market.slice(2).toUpperCase()}`;
356
+ }
357
+ function parseTermMaxLenderKey(lenderKey) {
358
+ const match = lenderKey.match(/^TERMMAX_([0-9A-Fa-f]{40})$/);
359
+ if (!match) return void 0;
360
+ return { marketAddrLower: "0x" + match[1].toLowerCase() };
361
+ }
362
+
363
+ // src/lending/exactly.ts
308
364
  var exactlyConfig = () => getGlobalData2()?.exactlyConfig;
309
365
  var exactlyMarkets = () => getGlobalData2()?.exactlyMarkets;
310
366
  var exactlyMarketsByChain = (chainId) => getGlobalData2()?.exactlyMarkets?.[String(chainId)] ?? [];
@@ -316,6 +372,8 @@ var exactlyMarketByAsset = (chainId, asset) => {
316
372
  const lower = asset.toLowerCase();
317
373
  return exactlyMarketsByChain(chainId).find((m) => m.asset.toLowerCase() === lower);
318
374
  };
375
+
376
+ // src/lending/teller.ts
319
377
  var tellerConfig = () => getGlobalData2()?.tellerConfig;
320
378
  var tellerPools = () => getGlobalData2()?.tellerPools;
321
379
  var tellerConfigByChain = (chainId) => getGlobalData2()?.tellerConfig?.[String(chainId)];
@@ -324,6 +382,8 @@ var tellerPoolByAddress = (chainId, pool) => {
324
382
  const lower = pool.toLowerCase();
325
383
  return tellerPoolsByChain(chainId).find((p) => p.pool.toLowerCase() === lower);
326
384
  };
385
+
386
+ // src/lending/liquity.ts
327
387
  var liquityConfig = () => getGlobalData2()?.liquityConfig;
328
388
  var liquityConfigFor = (lender, chainId) => getGlobalData2()?.liquityConfig?.[lender]?.[String(chainId)];
329
389
  var liquityMarkets = () => getGlobalData2()?.liquityMarkets;
@@ -338,15 +398,21 @@ var liquityLendersByChain = (chainId) => {
338
398
  const chain = String(chainId);
339
399
  return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.collateralRegistry);
340
400
  };
401
+
402
+ // src/lending/river.ts
341
403
  var riverConfig = () => getGlobalData2()?.riverConfig;
342
404
  var riverConfigFor = (lender, chainId) => getGlobalData2()?.riverConfig?.[lender]?.[String(chainId)];
343
405
  var riverMarkets = () => getGlobalData2()?.riverMarkets;
344
406
  var riverChainData = (lender, chainId) => getGlobalData2()?.riverMarkets?.[lender]?.[String(chainId)];
407
+ var riverMarketByIndex = (lender, chainId, index) => riverChainData(lender, chainId)?.markets?.find((m) => m.index === Number(index));
408
+ var riverLendersByChain = (chainId) => {
409
+ const cfg = getGlobalData2()?.riverConfig ?? {};
410
+ const chain = String(chainId);
411
+ return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.xapp);
412
+ };
413
+
414
+ // src/lending/inverse.ts
345
415
  var inverseConfig = () => getGlobalData2()?.inverseConfig;
346
- var termMaxConfig = () => getGlobalData2()?.termMaxConfig;
347
- var termMaxConfigByChain = (chainId) => getGlobalData2()?.termMaxConfig?.[String(chainId)];
348
- var termMaxChainIds = () => Object.keys(getGlobalData2()?.termMaxConfig ?? {});
349
- var termMaxApiBaseUrl = (chainId) => termMaxConfigByChain(chainId)?.apiBaseUrl || "https://api.termmax.ts.finance";
350
416
  var inverseConfigFor = (lender, chainId) => getGlobalData2()?.inverseConfig?.[lender]?.[String(chainId)];
351
417
  var inverseMarkets = () => getGlobalData2()?.inverseMarkets;
352
418
  var inverseChainData = (lender, chainId) => getGlobalData2()?.inverseMarkets?.[lender]?.[String(chainId)];
@@ -354,17 +420,59 @@ var inverseMarketByAddress = (lender, chainId, address) => {
354
420
  const lower = address.toLowerCase();
355
421
  return inverseChainData(lender, chainId)?.markets?.find((m) => m.address.toLowerCase() === lower);
356
422
  };
357
- var riverMarketByIndex = (lender, chainId, index) => riverChainData(lender, chainId)?.markets?.find((m) => m.index === Number(index));
358
- var riverLendersByChain = (chainId) => {
359
- const cfg = getGlobalData2()?.riverConfig ?? {};
360
- const chain = String(chainId);
361
- return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.xapp);
362
- };
363
423
  var inverseLendersByChain = (chainId) => {
364
424
  const cfg = getGlobalData2()?.inverseConfig ?? {};
365
425
  const chain = String(chainId);
366
- return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.dola);
426
+ return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.dola);
427
+ };
428
+
429
+ // src/lending/frankencoin.ts
430
+ var frankencoinConfig = () => getGlobalData2()?.frankencoinConfig;
431
+ var frankencoinConfigFor = (lender, chainId) => getGlobalData2()?.frankencoinConfig?.[lender]?.[String(chainId)];
432
+ var frankencoinMarkets = () => getGlobalData2()?.frankencoinMarkets;
433
+ var frankencoinChainData = (lender, chainId) => getGlobalData2()?.frankencoinMarkets?.[lender]?.[String(chainId)];
434
+ var frankencoinMarketByPosition = (lender, chainId, position) => {
435
+ const lower = position.toLowerCase();
436
+ return frankencoinChainData(lender, chainId)?.markets?.find((m) => m.position.toLowerCase() === lower);
437
+ };
438
+ var frankencoinLendersByChain = (chainId) => {
439
+ const cfg = getGlobalData2()?.frankencoinConfig ?? {};
440
+ const chain = String(chainId);
441
+ return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.mintingHub);
442
+ };
443
+
444
+ // src/lending/dss.ts
445
+ var usddConfig = () => getGlobalData2()?.usddConfig;
446
+ var usddConfigFor = (lender, chainId) => getGlobalData2()?.usddConfig?.[lender]?.[String(chainId)];
447
+ var usddMarkets = () => getGlobalData2()?.usddMarkets;
448
+ var usddChainData = (lender, chainId) => getGlobalData2()?.usddMarkets?.[lender]?.[String(chainId)];
449
+ var usddMarketByIlk = (lender, chainId, ilk) => usddChainData(lender, chainId)?.markets?.find((m) => m.ilk === ilk);
450
+ var usddLendersByChain = (chainId) => {
451
+ const cfg = getGlobalData2()?.usddConfig ?? {};
452
+ const chain = String(chainId);
453
+ return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.vat);
454
+ };
455
+ var skyConfig = () => getGlobalData2()?.skyConfig;
456
+ var skyConfigFor = (lender, chainId) => getGlobalData2()?.skyConfig?.[lender]?.[String(chainId)];
457
+ var skyMarkets = () => getGlobalData2()?.skyMarkets;
458
+ var skyChainData = (lender, chainId) => getGlobalData2()?.skyMarkets?.[lender]?.[String(chainId)];
459
+ var skyLendersByChain = (chainId) => {
460
+ const cfg = getGlobalData2()?.skyConfig ?? {};
461
+ const chain = String(chainId);
462
+ return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.vat);
463
+ };
464
+ var isSkyKey = (lender) => lender === "SKY" || !!lender?.startsWith("SKY_");
465
+ var dssConfigFor = (lender, chainId) => isSkyKey(lender) ? skyConfigFor(lender, chainId) : usddConfigFor(lender, chainId);
466
+ var dssChainData = (lender, chainId) => isSkyKey(lender) ? skyChainData(lender, chainId) : usddChainData(lender, chainId);
467
+ var dssMarketByIlk = (lender, chainId, ilk) => {
468
+ const norm = (s) => s.replace(/-/g, "_");
469
+ const want = norm(ilk);
470
+ return dssChainData(lender, chainId)?.markets?.find((m) => norm(m.ilk) === want);
367
471
  };
472
+ var dssDebtToken = (cfg) => cfg?.debtToken ?? cfg?.usdd;
473
+ var dssDebtJoin = (cfg) => cfg?.debtJoin ?? cfg?.usddJoin;
474
+
475
+ // src/lending/llamalend.ts
368
476
  var llamaLendConfig = () => getGlobalData2()?.llamaLendConfig;
369
477
  var llamaLendConfigFor = (lender, chainId) => getGlobalData2()?.llamaLendConfig?.[lender]?.[String(chainId)];
370
478
  var llamaLendMarkets = () => getGlobalData2()?.llamaLendMarkets;
@@ -400,48 +508,19 @@ var llamaLendSupportsLeverage = (lender, chainId, controller) => {
400
508
  return Boolean(cfg?.leverageZapOdos || cfg?.leverageZap1inch);
401
509
  };
402
510
  var llamaLendApiBaseUrl = (lender, chainId) => llamaLendConfigFor(lender, chainId)?.apiBaseUrl || "https://api.curve.finance";
403
- var usddConfig = () => getGlobalData2()?.usddConfig;
404
- var usddConfigFor = (lender, chainId) => getGlobalData2()?.usddConfig?.[lender]?.[String(chainId)];
405
- var usddMarkets = () => getGlobalData2()?.usddMarkets;
406
- var usddChainData = (lender, chainId) => getGlobalData2()?.usddMarkets?.[lender]?.[String(chainId)];
407
- var usddMarketByIlk = (lender, chainId, ilk) => usddChainData(lender, chainId)?.markets?.find((m) => m.ilk === ilk);
408
- var usddLendersByChain = (chainId) => {
409
- const cfg = getGlobalData2()?.usddConfig ?? {};
410
- const chain = String(chainId);
411
- return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.vat);
412
- };
413
- var skyConfig = () => getGlobalData2()?.skyConfig;
414
- var skyConfigFor = (lender, chainId) => getGlobalData2()?.skyConfig?.[lender]?.[String(chainId)];
415
- var skyMarkets = () => getGlobalData2()?.skyMarkets;
416
- var skyChainData = (lender, chainId) => getGlobalData2()?.skyMarkets?.[lender]?.[String(chainId)];
417
- var skyLendersByChain = (chainId) => {
418
- const cfg = getGlobalData2()?.skyConfig ?? {};
419
- const chain = String(chainId);
420
- return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.vat);
421
- };
422
- var isSkyKey = (lender) => lender === "SKY" || !!lender?.startsWith("SKY_");
423
- var dssConfigFor = (lender, chainId) => isSkyKey(lender) ? skyConfigFor(lender, chainId) : usddConfigFor(lender, chainId);
424
- var dssChainData = (lender, chainId) => isSkyKey(lender) ? skyChainData(lender, chainId) : usddChainData(lender, chainId);
425
- var dssMarketByIlk = (lender, chainId, ilk) => {
426
- const norm = (s) => s.replace(/-/g, "_");
427
- const want = norm(ilk);
428
- return dssChainData(lender, chainId)?.markets?.find((m) => norm(m.ilk) === want);
429
- };
430
- var dssDebtToken = (cfg) => cfg?.debtToken ?? cfg?.usdd;
431
- var dssDebtJoin = (cfg) => cfg?.debtJoin ?? cfg?.usddJoin;
432
- var frankencoinConfig = () => getGlobalData2()?.frankencoinConfig;
433
- var frankencoinConfigFor = (lender, chainId) => getGlobalData2()?.frankencoinConfig?.[lender]?.[String(chainId)];
434
- var frankencoinMarkets = () => getGlobalData2()?.frankencoinMarkets;
435
- var frankencoinChainData = (lender, chainId) => getGlobalData2()?.frankencoinMarkets?.[lender]?.[String(chainId)];
436
- var frankencoinMarketByPosition = (lender, chainId, position) => {
437
- const lower = position.toLowerCase();
438
- return frankencoinChainData(lender, chainId)?.markets?.find((m) => m.position.toLowerCase() === lower);
439
- };
440
- var frankencoinLendersByChain = (chainId) => {
441
- const cfg = getGlobalData2()?.frankencoinConfig ?? {};
442
- const chain = String(chainId);
443
- return Object.keys(cfg).filter((lender) => !!cfg[lender]?.[chain]?.mintingHub);
444
- };
511
+ function llamaLendLenderKey(controller) {
512
+ if (!controller || !controller.startsWith("0x") || controller.length !== 42) {
513
+ throw new Error(`llamaLendLenderKey: invalid controller address ${controller}`);
514
+ }
515
+ return `LLAMALEND_${controller.slice(2).toUpperCase()}`;
516
+ }
517
+ function parseLlamaLendLenderKey(lenderKey) {
518
+ const match = lenderKey.match(/^LLAMALEND_([0-9A-Fa-f]{40})$/);
519
+ if (!match) return void 0;
520
+ return { controllerAddrLower: "0x" + match[1].toLowerCase() };
521
+ }
522
+
523
+ // src/lending/resupply.ts
445
524
  var RESUPPLY_ETHEREUM_CONFIG = {
446
525
  registry: "0x10101010E0C3171D894B71B3400668aF311e7D94",
447
526
  reusd: "0x57aB1E0003F623289CD798B1824Be09a793e4Bec",
@@ -454,6 +533,18 @@ var RESUPPLY_ETHEREUM_CONFIG = {
454
533
  insurancePool: "0x00000000efe883b3304aFf71eaCf72Dbc3e1b577",
455
534
  sreusd: "0x557AB1e003951A73c12D16F0fEA8490E39C33C35",
456
535
  priceWatcher: "0xAaaa0013e2ec451F76816d1e0a02ABA596dd9251",
536
+ /**
537
+ * reUSD's own USD price feed — `PriceWatcher.oracle()`, read on-chain
538
+ * 2026-08-08. Its `price()` returns an 18-decimal USD price (0.98983 at
539
+ * the read), and it is the number the protocol itself watches to drive the
540
+ * off-peg amplifier in the borrow rate.
541
+ *
542
+ * Held as config rather than hopped through the PriceWatcher on every
543
+ * refresh (the Inverse `oracle` precedent). Governance-mutable in
544
+ * principle, so re-read `PriceWatcher.oracle()` if reUSD prices ever look
545
+ * frozen.
546
+ */
547
+ reusdOracle: "0x07Ac1E016D4335FB833666ed5C43846162d2B7e8",
457
548
  debtDecimals: 18
458
549
  };
459
550
  var RESUPPLY_BUILTIN = {
@@ -477,6 +568,8 @@ var resupplyLendersByChain = (chainId) => {
477
568
  }
478
569
  return [...keys];
479
570
  };
571
+
572
+ // src/lending/curvance.ts
480
573
  var CURVANCE_MONAD_CONFIG = {
481
574
  centralRegistry: "0x1310f352f1389969Ece6741671c4B919523912fF",
482
575
  oracleManager: "0x65ADF8aE8420A58278De066593E6fF1713A137c5",
@@ -495,11 +588,17 @@ var CURVANCE_MONAD_CONFIG = {
495
588
  },
496
589
  positionManagers: {
497
590
  // muBOND | AUSD
498
- "0x830D40CDFdc494BC1A2729a7381bfCe44326c944": { simplePositionManager: "0xA3d212D4705caf42C35d6EaE0C85E94c4cd329E4" },
591
+ "0x830D40CDFdc494BC1A2729a7381bfCe44326c944": {
592
+ simplePositionManager: "0xA3d212D4705caf42C35d6EaE0C85E94c4cd329E4"
593
+ },
499
594
  // loAZND | AUSD
500
- "0x7C822B093A116654F824Ec2A35CD23a3749E4f90": { simplePositionManager: "0x9e4638fd67bE15360bfebC5e07AECfF33dfda917" },
595
+ "0x7C822B093A116654F824Ec2A35CD23a3749E4f90": {
596
+ simplePositionManager: "0x9e4638fd67bE15360bfebC5e07AECfF33dfda917"
597
+ },
501
598
  // ezETH | WETH
502
- "0x83840d837E7A3E00bBb0B8501E60E989A8987c37": { simplePositionManager: "0xd8d3E46E52C3AB8FD98D04143984C763B4Bbc584" },
599
+ "0x83840d837E7A3E00bBb0B8501E60E989A8987c37": {
600
+ simplePositionManager: "0xd8d3E46E52C3AB8FD98D04143984C763B4Bbc584"
601
+ },
503
602
  // shMON | WMON
504
603
  "0xE1C24B2E93230FBe33d32Ba38ECA3218284143e2": {
505
604
  nativeVaultPositionManager: "0x2fAA792502aC5a329DcCc1580C5308fCc0a772fe",
@@ -511,38 +610,66 @@ var CURVANCE_MONAD_CONFIG = {
511
610
  simplePositionManager: "0x669786FF3da7544c98FE74eE1006D787118d1770"
512
611
  },
513
612
  // sMON | WMON
514
- "0xe5970cDB1916B2cCF6185C86C174EEE2d330D05B": { simplePositionManager: "0x3d6ba6C90E1738cb01C46E72F284C7Bd57eB11EC" },
613
+ "0xe5970cDB1916B2cCF6185C86C174EEE2d330D05B": {
614
+ simplePositionManager: "0x3d6ba6C90E1738cb01C46E72F284C7Bd57eB11EC"
615
+ },
515
616
  // sAUSD | AUSD
516
617
  "0xBBE7A3c45aDBb16F6490767b663428c34aA341Eb": {
517
618
  simplePositionManager: "0x491e8712885E4e0b98864F13393ced8c1a61FD57",
518
619
  vaultPositionManager: "0xe94AC990873C3B59A417d25C1ec1398807FB41A1"
519
620
  },
520
621
  // earnAUSD | AUSD
521
- "0xd6365555f6a697C7C295bA741100AA644cE28545": { simplePositionManager: "0xd807efC94376618B4d9CE6eAaf89607006d3B881" },
622
+ "0xd6365555f6a697C7C295bA741100AA644cE28545": {
623
+ simplePositionManager: "0xd807efC94376618B4d9CE6eAaf89607006d3B881"
624
+ },
522
625
  // WMON | AUSD
523
- "0x05e70717fA8BD0F21a9F826d093d99f6Da4f1554": { simplePositionManager: "0x2619BB5Acfe51317c4C36a63578FD56148e68C74" },
626
+ "0x05e70717fA8BD0F21a9F826d093d99f6Da4f1554": {
627
+ simplePositionManager: "0x2619BB5Acfe51317c4C36a63578FD56148e68C74"
628
+ },
524
629
  // WMON | USDC
525
- "0xa6A2A92F126b79Ee0804845ee6B52899b4491093": { simplePositionManager: "0x960c49E523e6A87282D2bC5032d0AeCb35Dc20ef" },
630
+ "0xa6A2A92F126b79Ee0804845ee6B52899b4491093": {
631
+ simplePositionManager: "0x960c49E523e6A87282D2bC5032d0AeCb35Dc20ef"
632
+ },
526
633
  // WBTC | USDC
527
- "0x01C4a0d396EFE982B1B103BE9910321d34e1aEA9": { simplePositionManager: "0x8cA51d155C07e91B206Cf11C8D52d5aB082657F6" },
634
+ "0x01C4a0d396EFE982B1B103BE9910321d34e1aEA9": {
635
+ simplePositionManager: "0x8cA51d155C07e91B206Cf11C8D52d5aB082657F6"
636
+ },
528
637
  // WETH | USDC
529
- "0xb3E9E0134354cc91b7FB9F9d6C3ab0dE7854BB49": { simplePositionManager: "0x3A1B2Dc11a81Fe106eC667BaB4056fC72498ff73" },
638
+ "0xb3E9E0134354cc91b7FB9F9d6C3ab0dE7854BB49": {
639
+ simplePositionManager: "0x3A1B2Dc11a81Fe106eC667BaB4056fC72498ff73"
640
+ },
530
641
  // gMON | WMON
531
- "0xb00aFF53a4Df2b4E2f97a3d9ffaDb55564C8E42F": { simplePositionManager: "0x77B90040E6dFE8A62293Cd91CAeE35296EC266Ee" },
642
+ "0xb00aFF53a4Df2b4E2f97a3d9ffaDb55564C8E42F": {
643
+ simplePositionManager: "0x77B90040E6dFE8A62293Cd91CAeE35296EC266Ee"
644
+ },
532
645
  // syzUSD | AUSD
533
- "0x90fc1A4abC4ee5f8a9560dE069067D9606d2909C": { simplePositionManager: "0x9352318f75e8Cb7C47C5B086D56d3e6D761b7419" },
646
+ "0x90fc1A4abC4ee5f8a9560dE069067D9606d2909C": {
647
+ simplePositionManager: "0x9352318f75e8Cb7C47C5B086D56d3e6D761b7419"
648
+ },
534
649
  // wsrUSD | AUSD
535
- "0x627a15859d09C1550e2934991AA95aFc6896e3Ef": { simplePositionManager: "0xF8613b7b4e8bFb5E7155fb4D3bc9f9B93d895C31" },
650
+ "0x627a15859d09C1550e2934991AA95aFc6896e3Ef": {
651
+ simplePositionManager: "0xF8613b7b4e8bFb5E7155fb4D3bc9f9B93d895C31"
652
+ },
536
653
  // YZM | AUSD
537
- "0x4409e2161B6f9A25ACbC471a37390654Ed272249": { simplePositionManager: "0xb85dEf309F7eEEb8f581909c7afB623dDf59AdD9" },
654
+ "0x4409e2161B6f9A25ACbC471a37390654Ed272249": {
655
+ simplePositionManager: "0xb85dEf309F7eEEb8f581909c7afB623dDf59AdD9"
656
+ },
538
657
  // vUSD | AUSD
539
- "0x2DB9AB1bB00d7000b21A2EbcE7D1a9b91F351E72": { simplePositionManager: "0xCb1709fAF66A73b4f6026b531Bef9AF971368f50" },
658
+ "0x2DB9AB1bB00d7000b21A2EbcE7D1a9b91F351E72": {
659
+ simplePositionManager: "0xCb1709fAF66A73b4f6026b531Bef9AF971368f50"
660
+ },
540
661
  // eBTC | WBTC
541
- "0xBc4cd7bbd8d38027A88838B88BA04561FA778C35": { simplePositionManager: "0x5e339724818c4b46E1Bc6966FeB4ea2924Ca17D9" },
662
+ "0xBc4cd7bbd8d38027A88838B88BA04561FA778C35": {
663
+ simplePositionManager: "0x5e339724818c4b46E1Bc6966FeB4ea2924Ca17D9"
664
+ },
542
665
  // savUSD | USDC
543
- "0x38104e87Eb96ce5ef1C23a06878dB0D657B4a699": { simplePositionManager: "0x7B918FF5EDc44B29ced4d3dc52Fb8b859025325c" },
666
+ "0x38104e87Eb96ce5ef1C23a06878dB0D657B4a699": {
667
+ simplePositionManager: "0x7B918FF5EDc44B29ced4d3dc52Fb8b859025325c"
668
+ },
544
669
  // savUSD | AUSD
545
- "0x4B0a39eCC3e5A5dA3ce6D492D4D255cD1F0209F7": { simplePositionManager: "0xb8F6f480E645dBa96Df9eD3948D900725bA9e9Ec" }
670
+ "0x4B0a39eCC3e5A5dA3ce6D492D4D255cD1F0209F7": {
671
+ simplePositionManager: "0xb8F6f480E645dBa96Df9eD3948D900725bA9e9Ec"
672
+ }
546
673
  }
547
674
  };
548
675
  var CURVANCE_BUILTIN = {
@@ -583,158 +710,123 @@ var curvancePositionManager = (lender, chainId, marketManager, kind) => {
583
710
  if (kind) return pms[kind];
584
711
  return pms.simplePositionManager ?? pms.vaultPositionManager ?? pms.nativeVaultPositionManager ?? pms.pendlePtPositionManager;
585
712
  };
586
- var compoundV3Bulker = () => getGlobalData2()?.compoundV3Bulker;
587
- var eulerConfigs = () => getGlobalData2()?.eulerConfigs;
588
- var eulerVaults = () => getGlobalData2()?.eulerVaults;
589
- var dolomiteConfigs = () => getGlobalData2()?.dolomiteConfigs;
590
- var dolomiteChains = () => Object.keys(getGlobalData2()?.dolomiteConfigs ?? {});
591
- var dolomiteEmode = () => getGlobalData2()?.dolomiteEmode;
592
- var dolomiteMarketIdByToken = (chainId, token) => {
593
- const markets = getGlobalData2()?.dolomiteConfigs?.[chainId]?.markets;
594
- if (!markets) return void 0;
595
- const lower = token.toLowerCase();
596
- for (const marketId in markets) {
597
- if (markets[marketId]?.toLowerCase() === lower) return marketId;
598
- }
599
- return void 0;
713
+
714
+ // src/lending/fraxlend.ts
715
+ var FRAXLEND_ETHEREUM_CONFIG = {
716
+ deployer: "0xD6E9D27C75Afd88ad24Cd5EdccdC76fd2fc3A751",
717
+ /**
718
+ * `0xA49fD918…` — approved on exactly 3 of the 71 pairs (the 95 % LTV
719
+ * yield-bearing-stablecoin carry markets, flagged below). It is NOT an
720
+ * aggregator router: on those pairs the collateral is an ERC-4626 over the
721
+ * pair's own asset, so the "swap" is a vault deposit and `path` is just
722
+ * `[asset, collateral]`.
723
+ *
724
+ * The legacy 2022 grants (`0xc14d5506…` = FraxswapRouterV2, `0x1c6ca5de…`)
725
+ * sit only on dead FraxlendV1 pairs and are deliberately not carried here.
726
+ */
727
+ leverageSwapper: "0xA49fD918238b1a7003659138Fb91f194306B595b",
728
+ pairs: [
729
+ // --- the book: 62 % of supply, 69 % of borrows, and NO swapper ---
730
+ {
731
+ address: "0xaB3cb84c310186B2Fa4B4503624A5D90b5DcB22D",
732
+ symbol: "ffrxUSD(sfrxETH)-58",
733
+ label: "frxUSD / sfrxETH"
734
+ },
735
+ {
736
+ address: "0x78bB3aEC3d855431bd9289fD98dA13F9ebB7ef15",
737
+ symbol: "fFRAX(sfrxETH)-16",
738
+ label: "FRAX / sfrxETH"
739
+ },
740
+ // --- LEVERAGE-ENABLED (swapper approved at curation; still probe live) ---
741
+ {
742
+ address: "0xC045A53936D793839BFCA146058976ef4285161E",
743
+ symbol: "ffrxUSD(sfrxUSD)-69",
744
+ label: "frxUSD / sfrxUSD"
745
+ },
746
+ {
747
+ address: "0x28Cdf6Ce79702AAeFbF217cF98cbD11f5639B9f1",
748
+ symbol: "ffrxUSD(sUSDe)-59",
749
+ label: "frxUSD / sUSDe"
750
+ },
751
+ {
752
+ address: "0x8087346b8865e5B0bF9F8A49742c2D83f6a50a6c",
753
+ symbol: "ffrxUSD(scrvUSD)-61",
754
+ label: "frxUSD / scrvUSD"
755
+ },
756
+ // --- the rest of the listed set ---
757
+ {
758
+ address: "0x470c677AF6CCE089ac38245332BfA03b22b4caeD",
759
+ symbol: "ffrxUSD(WFRAX)-68",
760
+ label: "frxUSD / WFRAX"
761
+ },
762
+ {
763
+ // A Frax BOND collateral with a real maturity, and it sits at ~100 %
764
+ // utilization — withdrawals will revert on liquidity, which is a
765
+ // supply-side UX problem, not a config error.
766
+ address: "0x1c0C222989a37247D974937782cebc8bF4f25733",
767
+ symbol: "fFRAX(FXB_20261231)-24",
768
+ label: "FRAX / FXB Dec-2026"
769
+ },
770
+ {
771
+ address: "0x8E5f09de0cD7841239410F929A905E214443d9E0",
772
+ symbol: "ffrxUSD(WBTC)-62",
773
+ label: "frxUSD / WBTC"
774
+ },
775
+ {
776
+ address: "0xb5a46f712F03808aE5c4B885C6F598fA06442684",
777
+ symbol: "fFRAX(wstETH)-28",
778
+ label: "FRAX / wstETH"
779
+ },
780
+ {
781
+ address: "0xc6CadA314389430d396C7b0C70c6281e99ca7fe8",
782
+ symbol: "fFRAX(UNI)-19",
783
+ label: "FRAX / UNI"
784
+ },
785
+ {
786
+ address: "0xb5Ae5b75C0DF5632c572A657109375646Ce66f90",
787
+ symbol: "fFRAX(sUSDe)-31",
788
+ label: "FRAX / sUSDe"
789
+ },
790
+ {
791
+ address: "0xA201E7bBb7Ca60ab88514d12dD91fC6748E6D050",
792
+ symbol: "ffrxUSD(srRoyUSDC)-70",
793
+ label: "frxUSD / srRoyUSDC"
794
+ },
795
+ {
796
+ address: "0x7093F6141293F7C4F67E5efD922aC934402E452d",
797
+ symbol: "fFRAX(LINK)-27",
798
+ label: "FRAX / LINK"
799
+ }
800
+ ]
600
801
  };
601
- var aaveV4Spokes = () => getGlobalData2()?.aaveV4Spokes;
602
- var aaveV4Oracles = () => getGlobalData2()?.aaveV4Oracles;
603
- var aaveV4Peripherals = () => getGlobalData2()?.aaveV4Peripherals;
604
- var siloMarkets = () => getGlobalData2()?.siloMarkets;
605
- var siloPeripherals = () => getGlobalData2()?.siloPeripherals;
606
- var siloMarketsV3 = () => getGlobalData2()?.siloMarketsV3;
607
- var siloPeripheralsV3 = () => getGlobalData2()?.siloPeripheralsV3;
608
- var fluidResolvers = () => getGlobalData2()?.fluidResolvers;
609
- var fluidVaults = () => getGlobalData2()?.fluidVaults;
610
- var fluidChains = () => Object.keys(getGlobalData2()?.fluidResolvers ?? {});
611
- var gearboxResolvers = () => getGlobalData2()?.gearboxResolvers;
612
- var gearboxChains = () => Object.keys(getGlobalData2()?.gearboxResolvers?.chains ?? {});
613
- var gearboxMarketCompressor = () => getGlobalData2()?.gearboxResolvers?.marketCompressorV310 || void 0;
614
- var gearboxAddressProviderV310 = () => getGlobalData2()?.gearboxResolvers?.addressProviderV310 || void 0;
615
- var gearboxBotListV3 = (chainId) => getGlobalData2()?.gearboxResolvers?.chains?.[chainId]?.botList || void 0;
616
- var GEARBOX_ACCOUNT_COMPRESSOR_V310 = "0x4115708Fc8fe6bB392De2e0C21c2C81dA2222394";
617
- var gearboxAccountCompressor = () => GEARBOX_ACCOUNT_COMPRESSOR_V310;
618
- var gearboxMarketConfigurators = (chainId) => getGlobalData2()?.gearboxResolvers?.chains?.[chainId]?.marketConfigurators;
619
- var fluidVaultEntries = (chainId) => Object.entries(getGlobalData2()?.fluidVaults?.[chainId] ?? {});
620
- function getAaveV4SpokeEntry(chainId, lenderKey) {
621
- const parsed = parseAaveV4SpokeLenderKey(lenderKey);
622
- if (!parsed) return void 0;
623
- return getGlobalData2()?.aaveV4Spokes?.[chainId]?.[parsed.spokeAddrLower];
624
- }
625
- function getAaveV4GatewayAddresses(chainId, lender, hubOverride) {
626
- const c = getGlobalData2()?.aaveV4Peripherals?.[chainId];
627
- if (!c) return {};
628
- let hubAddr = hubOverride?.toLowerCase();
629
- if (!hubAddr) {
630
- const spokeEntry = getAaveV4SpokeEntry(chainId, lender);
631
- hubAddr = spokeEntry?.reserves?.[0]?.hub?.toLowerCase();
632
- }
633
- const perHub = hubAddr && c.perHub?.[hubAddr] || void 0;
634
- return {
635
- nativeGateway: perHub?.nativeGateway ?? c.nativeGateway,
636
- signatureGateway: perHub?.signatureGateway ?? c.signatureGateway
637
- };
638
- }
639
- function getAaveV4SpokePeripherals(chainId, lenderKey) {
640
- const parsed = parseAaveV4SpokeLenderKey(lenderKey);
641
- if (!parsed) return void 0;
642
- return getGlobalData2()?.aaveV4Peripherals?.[chainId]?.perSpoke?.[parsed.spokeAddrLower];
643
- }
644
- function getAaveV4PositionManagers(chainId, lenderKey) {
645
- const meta = getAaveV4SpokePeripherals(chainId, lenderKey);
646
- if (!meta?.positionManagers) return [];
647
- return meta.positionManagers.filter((pm) => pm.active !== false && pm.address).map((pm) => pm.address.toLowerCase());
648
- }
649
- function findAaveV4PositionManager(chainId, lenderKey, nameQuery) {
650
- const meta = getAaveV4SpokePeripherals(chainId, lenderKey);
651
- if (!meta?.positionManagers) return void 0;
652
- const q = nameQuery.toLowerCase();
653
- const hit = meta.positionManagers.find(
654
- (pm) => pm.active !== false && pm.address && (pm.name ?? "").toLowerCase().includes(q)
655
- );
656
- return hit?.address?.toLowerCase();
657
- }
658
- function aaveV4SpokeLenderKey(spoke) {
659
- if (!spoke || !spoke.startsWith("0x") || spoke.length !== 42) {
660
- throw new Error(`aaveV4SpokeLenderKey: invalid spoke address ${spoke}`);
661
- }
662
- return `AAVE_V4_${spoke.slice(2).toUpperCase()}`;
663
- }
664
- function parseAaveV4SpokeLenderKey(lenderKey) {
665
- const match = lenderKey.match(/^AAVE_V4_([0-9A-F]{40})$/);
666
- if (!match) return void 0;
667
- return { spokeAddrLower: "0x" + match[1].toLowerCase() };
668
- }
669
- function siloV2LenderKey(siloConfig) {
670
- if (!siloConfig || !siloConfig.startsWith("0x") || siloConfig.length !== 42) {
671
- throw new Error(`siloV2LenderKey: invalid siloConfig address ${siloConfig}`);
672
- }
673
- return `SILO_V2_${siloConfig.slice(2).toUpperCase()}`;
674
- }
675
- function parseSiloV2LenderKey(lenderKey) {
676
- const match = lenderKey.match(/^SILO_V2_([0-9A-F]{40})$/);
677
- if (!match) return void 0;
678
- return { siloConfigAddrLower: "0x" + match[1].toLowerCase() };
679
- }
680
- function getSiloV2MarketEntry(chainId, lenderKey) {
681
- const parsed = parseSiloV2LenderKey(lenderKey);
682
- if (!parsed) return void 0;
683
- const list = getGlobalData2()?.siloMarkets?.[chainId];
684
- if (!list) return void 0;
685
- return list.find((m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower);
686
- }
687
- function siloV3LenderKey(siloConfig) {
688
- if (!siloConfig || !siloConfig.startsWith("0x") || siloConfig.length !== 42) {
689
- throw new Error(`siloV3LenderKey: invalid siloConfig address ${siloConfig}`);
690
- }
691
- return `SILO_V3_${siloConfig.slice(2).toUpperCase()}`;
692
- }
693
- function parseSiloV3LenderKey(lenderKey) {
694
- const match = lenderKey.match(/^SILO_V3_([0-9A-F]{40})$/);
695
- if (!match) return void 0;
696
- return { siloConfigAddrLower: "0x" + match[1].toLowerCase() };
697
- }
698
- function getSiloV3MarketEntry(chainId, lenderKey) {
699
- const parsed = parseSiloV3LenderKey(lenderKey);
700
- if (!parsed) return void 0;
701
- const list = getGlobalData2()?.siloMarketsV3?.[chainId];
702
- if (!list) return void 0;
703
- return list.find((m) => m.siloConfig.toLowerCase() === parsed.siloConfigAddrLower);
704
- }
705
- function gearboxV3LenderKey(creditManager) {
706
- if (!creditManager || !creditManager.startsWith("0x") || creditManager.length !== 42) {
707
- throw new Error(`gearboxV3LenderKey: invalid creditManager address ${creditManager}`);
708
- }
709
- return `GEARBOX_V3_${creditManager.slice(2).toUpperCase()}`;
710
- }
711
- function parseGearboxV3LenderKey(lenderKey) {
712
- const match = lenderKey.match(/^GEARBOX_V3_([0-9A-F]{40})$/);
713
- if (!match) return void 0;
714
- return { creditManagerAddrLower: "0x" + match[1].toLowerCase() };
715
- }
716
- function termMaxLenderKey(market) {
717
- if (!market || !market.startsWith("0x") || market.length !== 42) {
718
- throw new Error(`termMaxLenderKey: invalid market address ${market}`);
802
+ var FRAXLEND_BUILTIN = {
803
+ FRAXLEND: { "1": FRAXLEND_ETHEREUM_CONFIG }
804
+ };
805
+ var fraxlendConfig = () => getGlobalData2()?.fraxlendConfig;
806
+ var fraxlendConfigFor = (lender, chainId) => {
807
+ const published = getGlobalData2()?.fraxlendConfig?.[lender]?.[String(chainId)];
808
+ if (published?.pairs?.length) return published;
809
+ return FRAXLEND_BUILTIN[lender]?.[String(chainId)];
810
+ };
811
+ var fraxlendLendersByChain = (chainId) => {
812
+ const chain = String(chainId);
813
+ const cfg = getGlobalData2()?.fraxlendConfig ?? {};
814
+ const keys = /* @__PURE__ */ new Set();
815
+ for (const lender of Object.keys(cfg)) {
816
+ if (cfg[lender]?.[chain]?.pairs?.length) keys.add(lender);
719
817
  }
720
- return `TERMMAX_${market.slice(2).toUpperCase()}`;
721
- }
722
- function parseTermMaxLenderKey(lenderKey) {
723
- const match = lenderKey.match(/^TERMMAX_([0-9A-Fa-f]{40})$/);
724
- if (!match) return void 0;
725
- return { marketAddrLower: "0x" + match[1].toLowerCase() };
726
- }
727
- function llamaLendLenderKey(controller) {
728
- if (!controller || !controller.startsWith("0x") || controller.length !== 42) {
729
- throw new Error(`llamaLendLenderKey: invalid controller address ${controller}`);
818
+ for (const lender of Object.keys(FRAXLEND_BUILTIN)) {
819
+ if (FRAXLEND_BUILTIN[lender]?.[chain]?.pairs?.length) keys.add(lender);
730
820
  }
731
- return `LLAMALEND_${controller.slice(2).toUpperCase()}`;
732
- }
733
- function parseLlamaLendLenderKey(lenderKey) {
734
- const match = lenderKey.match(/^LLAMALEND_([0-9A-Fa-f]{40})$/);
735
- if (!match) return void 0;
736
- return { controllerAddrLower: "0x" + match[1].toLowerCase() };
737
- }
821
+ return [...keys];
822
+ };
823
+ var fraxlendPairsFor = (lender, chainId) => fraxlendConfigFor(lender, chainId)?.pairs ?? [];
824
+ var fraxlendPairKey = (chainId, pair) => `FRAXLEND_${String(chainId)}_${pair.toLowerCase()}`;
825
+ var parseFraxlendPairKey = (lender) => {
826
+ const m = /^FRAXLEND_(\d+)_(0x[0-9a-fA-F]{40})$/.exec(lender);
827
+ if (!m) return void 0;
828
+ return { chainId: m[1], pair: m[2].toLowerCase() };
829
+ };
738
830
 
739
831
  // src/tokens.ts
740
832
  var getListUrl = (chainId) => `https://raw.githubusercontent.com/1delta-DAO/token-lists/main/${chainId}.json`;
@@ -768,6 +860,7 @@ async function fetchMainTokensMap() {
768
860
  }
769
861
 
770
862
  exports.CURVANCE_MONAD_CONFIG = CURVANCE_MONAD_CONFIG;
863
+ exports.FRAXLEND_ETHEREUM_CONFIG = FRAXLEND_ETHEREUM_CONFIG;
771
864
  exports.GEARBOX_ACCOUNT_COMPRESSOR_V310 = GEARBOX_ACCOUNT_COMPRESSOR_V310;
772
865
  exports.RESUPPLY_ETHEREUM_CONFIG = RESUPPLY_ETHEREUM_CONFIG;
773
866
  exports.aaveOracles = aaveOracles;
@@ -829,6 +922,11 @@ exports.frankencoinConfigFor = frankencoinConfigFor;
829
922
  exports.frankencoinLendersByChain = frankencoinLendersByChain;
830
923
  exports.frankencoinMarketByPosition = frankencoinMarketByPosition;
831
924
  exports.frankencoinMarkets = frankencoinMarkets;
925
+ exports.fraxlendConfig = fraxlendConfig;
926
+ exports.fraxlendConfigFor = fraxlendConfigFor;
927
+ exports.fraxlendLendersByChain = fraxlendLendersByChain;
928
+ exports.fraxlendPairKey = fraxlendPairKey;
929
+ exports.fraxlendPairsFor = fraxlendPairsFor;
832
930
  exports.gearboxAccountCompressor = gearboxAccountCompressor;
833
931
  exports.gearboxAddressProviderV310 = gearboxAddressProviderV310;
834
932
  exports.gearboxBotListV3 = gearboxBotListV3;
@@ -885,6 +983,7 @@ exports.morphoTypeMarkets = morphoTypeMarkets;
885
983
  exports.morphoTypeOracles = morphoTypeOracles;
886
984
  exports.morphoTypeVaults = morphoTypeVaults;
887
985
  exports.parseAaveV4SpokeLenderKey = parseAaveV4SpokeLenderKey;
986
+ exports.parseFraxlendPairKey = parseFraxlendPairKey;
888
987
  exports.parseGearboxV3LenderKey = parseGearboxV3LenderKey;
889
988
  exports.parseLlamaLendLenderKey = parseLlamaLendLenderKey;
890
989
  exports.parseSiloV2LenderKey = parseSiloV2LenderKey;