@curvefi/llamalend-api 2.0.2 → 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.
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;
@@ -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]) {
@@ -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
  };
@@ -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.2",
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",