@curvefi/llamalend-api 2.0.1 → 2.0.3

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.
Files changed (32) hide show
  1. package/lib/constants/abis/ControllerV2.json +1891 -0
  2. package/lib/index.d.ts +2 -2
  3. package/lib/lendMarkets/LendMarketTemplate.d.ts +9 -5
  4. package/lib/lendMarkets/LendMarketTemplate.js +3 -1
  5. package/lib/lendMarkets/fetch/fetchLendMarkets.js +6 -1
  6. package/lib/lendMarkets/interfaces/v1/leverageV1.d.ts +2 -0
  7. package/lib/lendMarkets/interfaces/v2/leverageV2.d.ts +2 -0
  8. package/lib/lendMarkets/interfaces/v2/loanV2.d.ts +1 -1
  9. package/lib/lendMarkets/lendMarketConstructor.d.ts +1 -1
  10. package/lib/lendMarkets/lendMarketConstructor.js +6 -1
  11. package/lib/lendMarkets/modules/common/leverageZapV1Base.d.ts +2 -0
  12. package/lib/lendMarkets/modules/common/leverageZapV1Base.js +22 -0
  13. package/lib/lendMarkets/modules/common/loanBase.d.ts +0 -1
  14. package/lib/lendMarkets/modules/common/loanBase.js +8 -23
  15. package/lib/lendMarkets/modules/v1/loanV1.d.ts +1 -0
  16. package/lib/lendMarkets/modules/v1/loanV1.js +19 -0
  17. package/lib/lendMarkets/modules/v2/loanV2.d.ts +5 -0
  18. package/lib/lendMarkets/modules/v2/loanV2.js +57 -0
  19. package/lib/llamalend.d.ts +1 -1
  20. package/package.json +9 -3
  21. package/src/constants/abis/ControllerV2.json +1891 -0
  22. package/src/lendMarkets/LendMarketTemplate.ts +15 -9
  23. package/src/lendMarkets/fetch/fetchLendMarkets.ts +7 -1
  24. package/src/lendMarkets/interfaces/v1/leverageV1.ts +2 -0
  25. package/src/lendMarkets/interfaces/v2/leverageV2.ts +2 -0
  26. package/src/lendMarkets/interfaces/v2/loanV2.ts +1 -1
  27. package/src/lendMarkets/lendMarketConstructor.ts +6 -2
  28. package/src/lendMarkets/modules/common/leverageZapV1Base.ts +28 -0
  29. package/src/lendMarkets/modules/common/loanBase.ts +9 -24
  30. package/src/lendMarkets/modules/v1/loanV1.ts +12 -1
  31. package/src/lendMarkets/modules/v2/loanV2.ts +55 -1
  32. package/src/llamalend.ts +1 -1
package/lib/index.d.ts CHANGED
@@ -26,7 +26,7 @@ export declare function createLlamalend(): {
26
26
  readonly signerAddress: string;
27
27
  LendMarketTemplate: typeof LendMarketTemplate;
28
28
  MintMarketTemplate: typeof MintMarketTemplate;
29
- getLendMarket: (lendMarketId: string) => LendMarketTemplate;
29
+ getLendMarket: (lendMarketId: string) => LendMarketTemplate<"v1"> | LendMarketTemplate<"v2">;
30
30
  getMintMarket: (mintMarketId: string) => MintMarketTemplate;
31
31
  totalSupply: () => Promise<{
32
32
  total: string;
@@ -128,7 +128,7 @@ declare const _default: {
128
128
  readonly signerAddress: string;
129
129
  LendMarketTemplate: typeof LendMarketTemplate;
130
130
  MintMarketTemplate: typeof MintMarketTemplate;
131
- getLendMarket: (lendMarketId: string) => LendMarketTemplate;
131
+ getLendMarket: (lendMarketId: string) => LendMarketTemplate<"v1"> | LendMarketTemplate<"v2">;
132
132
  getMintMarket: (mintMarketId: string) => MintMarketTemplate;
133
133
  totalSupply: () => Promise<{
134
134
  total: string;
@@ -4,11 +4,14 @@ import { ILeverageZapV2 } from "./interfaces/leverageZapV2.js";
4
4
  import { IUserPosition, IWallet, IPrices, IAmm, IVault } from "./interfaces/common";
5
5
  import { IStatsV1, ILoanV1, ILeverageV1 } from "./interfaces/v1";
6
6
  import { IStatsV2, ILoanV2, ILeverageV2 } from "./interfaces/v2";
7
- export declare class LendMarketTemplate {
7
+ type LoanForVersion<V extends 'v1' | 'v2'> = V extends 'v1' ? ILoanV1 : ILoanV2;
8
+ type StatsForVersion<V extends 'v1' | 'v2'> = V extends 'v1' ? IStatsV1 : IStatsV2;
9
+ type LeverageForVersion<V extends 'v1' | 'v2'> = V extends 'v1' ? ILeverageV1 : ILeverageV2;
10
+ export declare class LendMarketTemplate<V extends 'v1' | 'v2' = 'v1' | 'v2'> {
8
11
  private llamalend;
9
12
  id: string;
10
13
  name: string;
11
- version: 'v1' | 'v2';
14
+ version: V;
12
15
  addresses: {
13
16
  amm: string;
14
17
  controller: string;
@@ -41,10 +44,11 @@ export declare class LendMarketTemplate {
41
44
  prices: IPrices;
42
45
  amm: IAmm;
43
46
  vault: IVault;
44
- stats: IStatsV1 | IStatsV2;
45
- loan: ILoanV1 | ILoanV2;
46
- leverage: ILeverageV1 | ILeverageV2;
47
+ stats: StatsForVersion<V>;
48
+ loan: LoanForVersion<V>;
49
+ leverage: LeverageForVersion<V>;
47
50
  leverageZapV2: ILeverageZapV2;
48
51
  constructor(id: string, marketData: IOneWayMarket, llamalend: Llamalend);
49
52
  getLlamalend(): Llamalend;
50
53
  }
54
+ export {};
@@ -29,7 +29,7 @@ export class LendMarketTemplate {
29
29
  constructor(id, marketData, llamalend) {
30
30
  this.swapDataCache = {};
31
31
  this.llamalend = llamalend;
32
- this.version = marketData.version || 'v1';
32
+ this.version = (marketData.version || 'v1');
33
33
  this.id = id;
34
34
  this.name = marketData.name;
35
35
  this.addresses = marketData.addresses;
@@ -251,6 +251,7 @@ export class LendMarketTemplate {
251
251
  borrowMoreApprove: leverageZapV1.leverageCreateLoanApprove.bind(leverageZapV1),
252
252
  borrowMoreRouteImage: leverageZapV1.leverageBorrowMoreRouteImage.bind(leverageZapV1),
253
253
  borrowMore: leverageZapV1.leverageBorrowMore.bind(leverageZapV1),
254
+ borrowMoreFutureLeverage: leverageZapV1.leverageBorrowMoreFutureLeverage.bind(leverageZapV1),
254
255
  repayExpectedBorrowed: leverageZapV1.leverageRepayExpectedBorrowed.bind(leverageZapV1),
255
256
  repayPriceImpact: leverageZapV1.leverageRepayPriceImpact.bind(leverageZapV1),
256
257
  repayIsFull: leverageZapV1.leverageRepayIsFull.bind(leverageZapV1),
@@ -262,6 +263,7 @@ export class LendMarketTemplate {
262
263
  repayApprove: leverageZapV1.leverageRepayApprove.bind(leverageZapV1),
263
264
  repayRouteImage: leverageZapV1.leverageRepayRouteImage.bind(leverageZapV1),
264
265
  repay: leverageZapV1.leverageRepay.bind(leverageZapV1),
266
+ repayFutureLeverage: leverageZapV1.leverageRepayFutureLeverage.bind(leverageZapV1),
265
267
  estimateGas: {
266
268
  createLoanApprove: leverageZapV1.leverageCreateLoanApproveEstimateGas.bind(leverageZapV1),
267
269
  createLoan: leverageZapV1.leverageCreateLoanEstimateGas.bind(leverageZapV1),
@@ -10,14 +10,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { getFactoryMarketDataV1, getFactoryMarketDataV2, getFactoryMarketDataByAPI } from "./fetchFactoryData.js";
11
11
  import LlammaABI from '../../constants/abis/Llamma.json' with { type: 'json' };
12
12
  import ControllerABI from '../../constants/abis/Controller.json' with { type: 'json' };
13
+ import ControllerV2ABI from '../../constants/abis/ControllerV2.json' with { type: 'json' };
13
14
  import MonetaryPolicyABI from '../../constants/abis/MonetaryPolicy.json' with { type: 'json' };
14
15
  import VaultABI from '../../constants/abis/Vault.json' with { type: 'json' };
15
16
  import GaugeABI from '../../constants/abis/GaugeV5.json' with { type: 'json' };
16
17
  import SidechainGaugeABI from '../../constants/abis/SidechainGauge.json' with { type: 'json' };
18
+ const controllerAbiMap = {
19
+ 'v1': ControllerABI,
20
+ 'v2': ControllerV2ABI,
21
+ };
17
22
  const registerMarkets = (llamalend, names, amms, controllers, borrowed_tokens, collateral_tokens, monetary_policies, vaults, gauges, COIN_DATA, version) => {
18
23
  amms.forEach((amm, index) => {
19
24
  llamalend.setContract(amms[index], LlammaABI);
20
- llamalend.setContract(controllers[index], ControllerABI);
25
+ llamalend.setContract(controllers[index], controllerAbiMap[version]);
21
26
  llamalend.setContract(monetary_policies[index], MonetaryPolicyABI);
22
27
  llamalend.setContract(vaults[index], VaultABI);
23
28
  if (gauges[index]) {
@@ -62,6 +62,7 @@ export interface ILeverageV1 {
62
62
  borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
63
63
  borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
64
64
  borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
65
+ borrowMoreFutureLeverage: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
65
66
  repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
66
67
  totalBorrowed: string;
67
68
  borrowedFromStateCollateral: string;
@@ -79,6 +80,7 @@ export interface ILeverageV1 {
79
80
  repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
80
81
  repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
81
82
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
83
+ repayFutureLeverage: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
82
84
  estimateGas: {
83
85
  createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
84
86
  createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
@@ -62,6 +62,7 @@ export interface ILeverageV2 {
62
62
  borrowMoreApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
63
63
  borrowMoreRouteImage: (userBorrowed: TAmount, debt: TAmount) => Promise<string>;
64
64
  borrowMore: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number) => Promise<string>;
65
+ borrowMoreFutureLeverage: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
65
66
  repayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
66
67
  totalBorrowed: string;
67
68
  borrowedFromStateCollateral: string;
@@ -79,6 +80,7 @@ export interface ILeverageV2 {
79
80
  repayApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<string[]>;
80
81
  repayRouteImage: (stateCollateral: TAmount, userCollateral: TAmount) => Promise<string>;
81
82
  repay: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<string>;
83
+ repayFutureLeverage: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string, slippage?: number) => Promise<string>;
82
84
  estimateGas: {
83
85
  createLoanApprove: (userCollateral: TAmount, userBorrowed: TAmount) => Promise<TGas>;
84
86
  createLoan: (userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, range: number, slippage?: number) => Promise<number>;
@@ -42,7 +42,7 @@ export interface ILoanV2 {
42
42
  repayPrices: (debt: TAmount, address?: string) => Promise<string[]>;
43
43
  repayIsApproved: (debt: TAmount) => Promise<boolean>;
44
44
  repayApprove: (debt: TAmount) => Promise<string[]>;
45
- repayHealth: (debt: TAmount, full?: boolean, address?: string) => Promise<string>;
45
+ repayHealth: (debt: TAmount, shrink?: boolean, full?: boolean, address?: string) => Promise<string>;
46
46
  repay: (debt: TAmount, address?: string) => Promise<string>;
47
47
  repayFutureLeverage: (debt: TAmount, userAddress?: string) => Promise<string>;
48
48
  fullRepayIsApproved: (address?: string) => Promise<boolean>;
@@ -1,3 +1,3 @@
1
1
  import { LendMarketTemplate } from "./LendMarketTemplate.js";
2
2
  import type { Llamalend } from "../llamalend.js";
3
- export declare const getLendMarket: (this: Llamalend, lendMarketId: string) => LendMarketTemplate;
3
+ export declare const getLendMarket: (this: Llamalend, lendMarketId: string) => LendMarketTemplate<"v1"> | LendMarketTemplate<"v2">;
@@ -4,7 +4,12 @@ export const getLendMarket = function (lendMarketId) {
4
4
  const marketData = this.constants.ONE_WAY_MARKETS[lendMarketId] || this.constants.ONE_WAY_MARKETS_V2[lendMarketId];
5
5
  if (!marketData)
6
6
  throw new Error(`Lend market with id ${lendMarketId} not found`);
7
- this.lendMarkets[lendMarketId] = new LendMarketTemplate(lendMarketId, marketData, this);
7
+ if (marketData.version === 'v2') {
8
+ this.lendMarkets[lendMarketId] = new LendMarketTemplate(lendMarketId, marketData, this);
9
+ }
10
+ else {
11
+ this.lendMarkets[lendMarketId] = new LendMarketTemplate(lendMarketId, marketData, this);
12
+ }
8
13
  }
9
14
  return this.lendMarkets[lendMarketId];
10
15
  };
@@ -93,6 +93,7 @@ export declare class LeverageZapV1BaseModule {
93
93
  private _leverageBorrowMore;
94
94
  leverageBorrowMoreEstimateGas(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<number>;
95
95
  leverageBorrowMore(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, slippage?: number): Promise<string>;
96
+ leverageBorrowMoreFutureLeverage(userCollateral: TAmount, userBorrowed: TAmount, debt: TAmount, userAddress?: string, slippage?: number): Promise<string>;
96
97
  private _leverageRepayExpectedBorrowed;
97
98
  leverageRepayExpectedBorrowed: (stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number) => Promise<{
98
99
  totalBorrowed: string;
@@ -115,4 +116,5 @@ export declare class LeverageZapV1BaseModule {
115
116
  private _leverageRepay;
116
117
  leverageRepayEstimateGas(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number): Promise<number>;
117
118
  leverageRepay(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, slippage?: number): Promise<string>;
119
+ leverageRepayFutureLeverage(stateCollateral: TAmount, userCollateral: TAmount, userBorrowed: TAmount, userAddress?: string): Promise<string>;
118
120
  }
@@ -626,6 +626,17 @@ export class LeverageZapV1BaseModule {
626
626
  return yield this._leverageBorrowMore(userCollateral, userBorrowed, debt, slippage, false);
627
627
  });
628
628
  }
629
+ leverageBorrowMoreFutureLeverage(userCollateral_1, userBorrowed_1, debt_1) {
630
+ return __awaiter(this, arguments, void 0, function* (userCollateral, userBorrowed, debt, userAddress = '', slippage = 0.1) {
631
+ userAddress = _getAddress.call(this.llamalend, userAddress);
632
+ this._checkLeverageZap();
633
+ const { stateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(userAddress);
634
+ const expected = yield this.leverageBorrowMoreExpectedCollateral(userCollateral, userBorrowed, debt, slippage, userAddress);
635
+ const futureCollateralState = BN(stateCollateral).plus(expected.totalCollateral);
636
+ const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(expected.collateralFromUserBorrowed);
637
+ return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
638
+ });
639
+ }
629
640
  leverageRepayPriceImpact(stateCollateral, userCollateral) {
630
641
  return __awaiter(this, void 0, void 0, function* () {
631
642
  this._checkLeverageZap();
@@ -767,4 +778,15 @@ export class LeverageZapV1BaseModule {
767
778
  return yield this._leverageRepay(stateCollateral, userCollateral, userBorrowed, slippage, false);
768
779
  });
769
780
  }
781
+ leverageRepayFutureLeverage(stateCollateral_1, userCollateral_1, userBorrowed_1) {
782
+ return __awaiter(this, arguments, void 0, function* (stateCollateral, userCollateral, userBorrowed, userAddress = '') {
783
+ userAddress = _getAddress.call(this.llamalend, userAddress);
784
+ this._checkLeverageZap();
785
+ const { stateCollateral: currentStateCollateral, totalDepositFromUser } = yield this.market.userPosition.getCurrentLeverageParams(userAddress);
786
+ const collateralFromUserBorrowed = yield this.market.amm.swapExpected(0, 1, userBorrowed);
787
+ const futureCollateralState = BN(currentStateCollateral).minus(stateCollateral);
788
+ const futureTotalDepositFromUserPrecise = BN(totalDepositFromUser).plus(userCollateral).plus(collateralFromUserBorrowed);
789
+ return futureCollateralState.div(futureTotalDepositFromUserPrecise).toString();
790
+ });
791
+ }
770
792
  }
@@ -71,7 +71,6 @@ export declare class LoanBaseModule {
71
71
  repayIsApproved(debt: number | string): Promise<boolean>;
72
72
  private repayApproveEstimateGas;
73
73
  repayApprove(debt: number | string): Promise<string[]>;
74
- repayHealth(debt: number | string, full?: boolean, address?: string): Promise<string>;
75
74
  private _repay;
76
75
  repayEstimateGas(debt: number | string, address?: string): Promise<TGas>;
77
76
  repay(debt: number | string, address?: string): Promise<string>;
@@ -162,10 +162,8 @@ export class LoanBaseModule {
162
162
  const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
163
163
  const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
164
164
  const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
165
- // TODO: verify parameters
166
- let _health = yield contract.health_calculator(this.llamalend.constants.ZERO_ADDRESS, _collateral, _debt, full, range, this.llamalend.constantOptions);
167
- _health = _health * BigInt(100);
168
- return formatUnits(_health);
165
+ const _health = yield contract.health_calculator(this.llamalend.constants.ZERO_ADDRESS, _collateral, _debt, full, range, this.llamalend.constantOptions);
166
+ return formatUnits(_health * BigInt(100));
169
167
  });
170
168
  }
171
169
  createLoanIsApproved(collateral) {
@@ -254,9 +252,8 @@ export class LoanBaseModule {
254
252
  const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
255
253
  const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
256
254
  const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
257
- let _health = yield contract.health_calculator(address, _collateral, _debt, full, 0, this.llamalend.constantOptions);
258
- _health = _health * BigInt(100);
259
- return formatUnits(_health);
255
+ const _health = yield contract.health_calculator(address, _collateral, _debt, full, 0, this.llamalend.constantOptions);
256
+ return formatUnits(_health * BigInt(100));
260
257
  });
261
258
  }
262
259
  borrowMoreIsApproved(collateral) {
@@ -345,9 +342,8 @@ export class LoanBaseModule {
345
342
  address = _getAddress.call(this.llamalend, address);
346
343
  const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
347
344
  const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
348
- let _health = yield contract.health_calculator(address, _collateral, 0, full, 0, this.llamalend.constantOptions);
349
- _health = _health * BigInt(100);
350
- return formatUnits(_health);
345
+ const _health = yield contract.health_calculator(address, _collateral, 0, full, 0, this.llamalend.constantOptions);
346
+ return formatUnits(_health * BigInt(100));
351
347
  });
352
348
  }
353
349
  addCollateralIsApproved(collateral) {
@@ -444,9 +440,8 @@ export class LoanBaseModule {
444
440
  address = _getAddress.call(this.llamalend, address);
445
441
  const _collateral = parseUnits(collateral, this.market.collateral_token.decimals) * BigInt(-1);
446
442
  const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
447
- let _health = yield contract.health_calculator(address, _collateral, 0, full, 0, this.llamalend.constantOptions);
448
- _health = _health * BigInt(100);
449
- return formatUnits(_health);
443
+ const _health = yield contract.health_calculator(address, _collateral, 0, full, 0, this.llamalend.constantOptions);
444
+ return formatUnits(_health * BigInt(100));
450
445
  });
451
446
  }
452
447
  _removeCollateral(collateral, estimateGas) {
@@ -532,16 +527,6 @@ export class LoanBaseModule {
532
527
  return yield ensureAllowance.call(this.llamalend, [this.market.borrowed_token.address], [debt], this.market.addresses.controller);
533
528
  });
534
529
  }
535
- repayHealth(debt_1) {
536
- return __awaiter(this, arguments, void 0, function* (debt, full = true, address = "") {
537
- address = _getAddress.call(this.llamalend, address);
538
- const _debt = parseUnits(debt) * BigInt(-1);
539
- const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
540
- let _health = yield contract.health_calculator(address, 0, _debt, full, 0, this.llamalend.constantOptions);
541
- _health = _health * BigInt(100);
542
- return formatUnits(_health);
543
- });
544
- }
545
530
  _repay(debt, address, estimateGas) {
546
531
  return __awaiter(this, void 0, void 0, function* () {
547
532
  address = _getAddress.call(this.llamalend, address);
@@ -1,4 +1,5 @@
1
1
  import { LoanBaseModule } from "../common/loanBase.js";
2
2
  import { ILoanV1 } from "../../interfaces/v1/loanV1";
3
3
  export declare class LoanV1Module extends LoanBaseModule implements ILoanV1 {
4
+ repayHealth(debt: number | string, full?: boolean, address?: string): Promise<string>;
4
5
  }
@@ -1,3 +1,22 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { LoanBaseModule } from "../common/loanBase.js";
11
+ import { _getAddress, formatUnits, parseUnits } from "../../../utils";
2
12
  export class LoanV1Module extends LoanBaseModule {
13
+ repayHealth(debt_1) {
14
+ return __awaiter(this, arguments, void 0, function* (debt, full = true, address = "") {
15
+ address = _getAddress.call(this.llamalend, address);
16
+ const _debt = parseUnits(debt) * BigInt(-1);
17
+ const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
18
+ const _health = yield contract.health_calculator(address, 0, _debt, full, 0, this.llamalend.constantOptions);
19
+ return formatUnits(_health * BigInt(100));
20
+ });
21
+ }
3
22
  }
@@ -1,4 +1,9 @@
1
1
  import { LoanBaseModule } from "../common/loanBase.js";
2
2
  import { ILoanV2 } from "../../interfaces/v2";
3
3
  export declare class LoanV2Module extends LoanBaseModule implements ILoanV2 {
4
+ createLoanHealth(collateral: number | string, debt: number | string, range: number, full?: boolean): Promise<string>;
5
+ addCollateralHealth(collateral: number | string, full?: boolean, address?: string): Promise<string>;
6
+ removeCollateralHealth(collateral: number | string, full?: boolean, address?: string): Promise<string>;
7
+ borrowMoreHealth(collateral: number | string, debt: number | string, full?: boolean, address?: string): Promise<string>;
8
+ repayHealth(debt: number | string, shrink?: boolean, full?: boolean, address?: string): Promise<string>;
4
9
  }
@@ -1,3 +1,60 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { LoanBaseModule } from "../common/loanBase.js";
11
+ import { _getAddress, formatUnits, parseUnits } from "../../../utils";
2
12
  export class LoanV2Module extends LoanBaseModule {
13
+ createLoanHealth(collateral_1, debt_1, range_1) {
14
+ return __awaiter(this, arguments, void 0, function* (collateral, debt, range, full = true) {
15
+ const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
16
+ const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
17
+ const address = _getAddress.call(this.llamalend, '');
18
+ const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
19
+ const _health = yield contract.create_loan_health_preview(_collateral, _debt, range, address, full, this.llamalend.constantOptions);
20
+ return formatUnits(_health * BigInt(100));
21
+ });
22
+ }
23
+ addCollateralHealth(collateral_1) {
24
+ return __awaiter(this, arguments, void 0, function* (collateral, full = true, address = "") {
25
+ address = _getAddress.call(this.llamalend, address);
26
+ const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
27
+ const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
28
+ const _health = yield contract.add_collateral_health_preview(_collateral, address, address, full, this.llamalend.constantOptions);
29
+ return formatUnits(_health * BigInt(100));
30
+ });
31
+ }
32
+ removeCollateralHealth(collateral_1) {
33
+ return __awaiter(this, arguments, void 0, function* (collateral, full = true, address = "") {
34
+ address = _getAddress.call(this.llamalend, address);
35
+ const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
36
+ const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
37
+ const _health = yield contract.remove_collateral_health_preview(_collateral, address, full, this.llamalend.constantOptions);
38
+ return formatUnits(_health * BigInt(100));
39
+ });
40
+ }
41
+ borrowMoreHealth(collateral_1, debt_1) {
42
+ return __awaiter(this, arguments, void 0, function* (collateral, debt, full = true, address = "") {
43
+ address = _getAddress.call(this.llamalend, address);
44
+ const _collateral = parseUnits(collateral, this.market.collateral_token.decimals);
45
+ const _debt = parseUnits(debt, this.market.borrowed_token.decimals);
46
+ const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
47
+ const _health = yield contract.borrow_more_health_preview(_collateral, _debt, address, full, this.llamalend.constantOptions);
48
+ return formatUnits(_health * BigInt(100));
49
+ });
50
+ }
51
+ repayHealth(debt_1) {
52
+ return __awaiter(this, arguments, void 0, function* (debt, shrink = false, full = true, address = "") {
53
+ address = _getAddress.call(this.llamalend, address);
54
+ const _debt = parseUnits(debt);
55
+ const contract = this.llamalend.contracts[this.market.addresses.controller].contract;
56
+ const _health = yield contract.repay_health_preview(0, _debt, address, address, shrink, full, this.llamalend.constantOptions);
57
+ return formatUnits(_health * BigInt(100));
58
+ });
59
+ }
3
60
  }
@@ -21,7 +21,7 @@ declare class Llamalend implements ILlamalend {
21
21
  [addres: string]: MintMarketTemplate;
22
22
  };
23
23
  lendMarkets: {
24
- [addres: string]: LendMarketTemplate;
24
+ [address: string]: LendMarketTemplate<'v1'> | LendMarketTemplate<'v2'>;
25
25
  };
26
26
  feeData: {
27
27
  gasPrice?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/llamalend-api",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "JavaScript library for Curve Lending",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",
@@ -20,7 +20,9 @@
20
20
  "watch": "tsc --watch",
21
21
  "watch:lib": "rm -rf lib && tsc --watch --project tsconfig.build.json"
22
22
  },
23
- "engines": { "node": "24" },
23
+ "engines": {
24
+ "node": "24"
25
+ },
24
26
  "type": "module",
25
27
  "devDependencies": {
26
28
  "@eslint/eslintrc": "^3.3.1",
@@ -35,10 +37,14 @@
35
37
  "chai": "^5.3.3",
36
38
  "eslint": "^9.38.0",
37
39
  "globals": "^16.4.0",
38
- "mocha": "^11.7.4",
40
+ "mocha": "^11.7.5",
39
41
  "typescript": "^5.9.3",
40
42
  "vue-eslint-parser": "^10.2.0"
41
43
  },
44
+ "overrides": {
45
+ "serialize-javascript": "^7.0.4",
46
+ "diff": "^8.0.3"
47
+ },
42
48
  "dependencies": {
43
49
  "@curvefi/ethcall": "6.0.16",
44
50
  "bignumber.js": "9.3.1",