@strkfarm/sdk 1.1.53 → 1.1.55

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.
@@ -55712,6 +55712,9 @@ ${JSON.stringify(data, null, 2)}`;
55712
55712
  async getVaultPositions() {
55713
55713
  throw new Error("Not implemented");
55714
55714
  }
55715
+ async getPendingRewards() {
55716
+ return [];
55717
+ }
55715
55718
  };
55716
55719
 
55717
55720
  // src/node/headless.browser.ts
@@ -55795,6 +55798,10 @@ ${JSON.stringify(data, null, 2)}`;
55795
55798
  const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
55796
55799
  logger2.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
55797
55800
  const data = _data.data["defiSpring"];
55801
+ if (!data) {
55802
+ logger2.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
55803
+ return [];
55804
+ }
55798
55805
  const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
55799
55806
  logger2.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
55800
55807
  return [{
@@ -61810,10 +61817,16 @@ ${JSON.stringify(data, null, 2)}`;
61810
61817
  });
61811
61818
  return [baseFlow];
61812
61819
  }
61820
+ async getPendingRewards() {
61821
+ const vesuHarvests = new VesuHarvests(this.config);
61822
+ return await vesuHarvests.getUnHarvestedRewards(this.address);
61823
+ }
61813
61824
  async harvest(acc) {
61814
- const vesuHarvest = new VesuHarvests(this.config);
61815
- const harvests = await vesuHarvest.getUnHarvestedRewards(this.address);
61816
- const harvest = harvests[0];
61825
+ const pendingRewards = await this.getPendingRewards();
61826
+ if (pendingRewards.length == 0) {
61827
+ throw new Error(`No pending rewards found`);
61828
+ }
61829
+ const harvest = pendingRewards[0];
61817
61830
  const avnu = new AvnuWrapper();
61818
61831
  let swapInfo = {
61819
61832
  token_from_address: harvest.token.address,
@@ -80565,13 +80578,14 @@ spurious results.`);
80565
80578
  amount1
80566
80579
  };
80567
80580
  }
80568
- async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
80581
+ async getPendingRewards() {
80569
80582
  const ekuboHarvests = new EkuboHarvests(this.config);
80570
- const unClaimedRewards = (await ekuboHarvests.getUnHarvestedRewards(
80571
- this.address
80572
- )).filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
80573
- if (unClaimedRewards.length == 0) {
80574
- logger2.verbose(`${_EkuboCLVault.name}: harvest => no unclaimed rewards found`);
80583
+ return await ekuboHarvests.getUnHarvestedRewards(this.address);
80584
+ }
80585
+ async harvest(acc, maxIterations = 20, priceRatioPrecision = 4) {
80586
+ const pendingRewards = await this.getPendingRewards();
80587
+ if (pendingRewards.length == 0) {
80588
+ logger2.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
80575
80589
  return [];
80576
80590
  }
80577
80591
  const poolKey = await this.getPoolKey();
@@ -80579,10 +80593,10 @@ spurious results.`);
80579
80593
  const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
80580
80594
  const bounds = await this.getCurrentBounds();
80581
80595
  logger2.verbose(
80582
- `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${unClaimedRewards.length}`
80596
+ `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
80583
80597
  );
80584
80598
  const calls = [];
80585
- const chosenClaim = unClaimedRewards[0];
80599
+ const chosenClaim = pendingRewards[0];
80586
80600
  logger2.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
80587
80601
  logger2.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
80588
80602
  for (let claim of [chosenClaim]) {
@@ -94156,9 +94170,15 @@ spurious results.`);
94156
94170
  const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
94157
94171
  return manageCall;
94158
94172
  }
94159
- async getHarvestCall() {
94173
+ async getPendingRewards() {
94160
94174
  const vesuHarvest = new VesuHarvests(this.config);
94161
- const harvestInfo = await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
94175
+ return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
94176
+ }
94177
+ async getHarvestCall() {
94178
+ const harvestInfo = await this.getPendingRewards();
94179
+ if (harvestInfo.length == 0) {
94180
+ throw new Error(`No pending rewards found`);
94181
+ }
94162
94182
  if (harvestInfo.length != 1) {
94163
94183
  throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
94164
94184
  }
@@ -4110,6 +4110,9 @@ var BaseStrategy = class extends CacheClass {
4110
4110
  async getVaultPositions() {
4111
4111
  throw new Error("Not implemented");
4112
4112
  }
4113
+ async getPendingRewards() {
4114
+ return [];
4115
+ }
4113
4116
  };
4114
4117
 
4115
4118
  // src/node/headless.browser.ts
@@ -4195,6 +4198,10 @@ var VesuHarvests = class _VesuHarvests extends Harvests {
4195
4198
  const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
4196
4199
  logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
4197
4200
  const data = _data.data["defiSpring"];
4201
+ if (!data) {
4202
+ logger.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
4203
+ return [];
4204
+ }
4198
4205
  const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
4199
4206
  logger.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
4200
4207
  return [{
@@ -10210,10 +10217,16 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
10210
10217
  });
10211
10218
  return [baseFlow];
10212
10219
  }
10220
+ async getPendingRewards() {
10221
+ const vesuHarvests = new VesuHarvests(this.config);
10222
+ return await vesuHarvests.getUnHarvestedRewards(this.address);
10223
+ }
10213
10224
  async harvest(acc) {
10214
- const vesuHarvest = new VesuHarvests(this.config);
10215
- const harvests = await vesuHarvest.getUnHarvestedRewards(this.address);
10216
- const harvest = harvests[0];
10225
+ const pendingRewards = await this.getPendingRewards();
10226
+ if (pendingRewards.length == 0) {
10227
+ throw new Error(`No pending rewards found`);
10228
+ }
10229
+ const harvest = pendingRewards[0];
10217
10230
  const avnu = new AvnuWrapper();
10218
10231
  let swapInfo = {
10219
10232
  token_from_address: harvest.token.address,
@@ -16642,13 +16655,14 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16642
16655
  amount1
16643
16656
  };
16644
16657
  }
16645
- async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
16658
+ async getPendingRewards() {
16646
16659
  const ekuboHarvests = new EkuboHarvests(this.config);
16647
- const unClaimedRewards = (await ekuboHarvests.getUnHarvestedRewards(
16648
- this.address
16649
- )).filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
16650
- if (unClaimedRewards.length == 0) {
16651
- logger.verbose(`${_EkuboCLVault.name}: harvest => no unclaimed rewards found`);
16660
+ return await ekuboHarvests.getUnHarvestedRewards(this.address);
16661
+ }
16662
+ async harvest(acc, maxIterations = 20, priceRatioPrecision = 4) {
16663
+ const pendingRewards = await this.getPendingRewards();
16664
+ if (pendingRewards.length == 0) {
16665
+ logger.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
16652
16666
  return [];
16653
16667
  }
16654
16668
  const poolKey = await this.getPoolKey();
@@ -16656,10 +16670,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16656
16670
  const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
16657
16671
  const bounds = await this.getCurrentBounds();
16658
16672
  logger.verbose(
16659
- `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${unClaimedRewards.length}`
16673
+ `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
16660
16674
  );
16661
16675
  const calls = [];
16662
- const chosenClaim = unClaimedRewards[0];
16676
+ const chosenClaim = pendingRewards[0];
16663
16677
  logger.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
16664
16678
  logger.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
16665
16679
  for (let claim of [chosenClaim]) {
@@ -30246,9 +30260,15 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
30246
30260
  const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
30247
30261
  return manageCall;
30248
30262
  }
30249
- async getHarvestCall() {
30263
+ async getPendingRewards() {
30250
30264
  const vesuHarvest = new VesuHarvests(this.config);
30251
- const harvestInfo = await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
30265
+ return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
30266
+ }
30267
+ async getHarvestCall() {
30268
+ const harvestInfo = await this.getPendingRewards();
30269
+ if (harvestInfo.length == 0) {
30270
+ throw new Error(`No pending rewards found`);
30271
+ }
30252
30272
  if (harvestInfo.length != 1) {
30253
30273
  throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
30254
30274
  }
package/dist/index.d.ts CHANGED
@@ -375,6 +375,20 @@ declare class AutoCompounderSTRK {
375
375
  }>;
376
376
  }
377
377
 
378
+ interface HarvestInfo {
379
+ rewardsContract: ContractAddr;
380
+ token: ContractAddr;
381
+ startDate: Date;
382
+ endDate: Date;
383
+ claim: {
384
+ id: number;
385
+ amount: Web3Number;
386
+ claimee: ContractAddr;
387
+ };
388
+ actualReward: Web3Number;
389
+ proof: string[];
390
+ }
391
+
378
392
  interface CacheData$1 {
379
393
  timestamp: number;
380
394
  ttl: number;
@@ -417,6 +431,7 @@ declare class BaseStrategy<TVLInfo, ActionInfo> extends CacheClass {
417
431
  depositCall(amountInfo: ActionInfo, receiver: ContractAddr): Promise<Call[]>;
418
432
  withdrawCall(amountInfo: ActionInfo, receiver: ContractAddr, owner: ContractAddr): Promise<Call[]>;
419
433
  getVaultPositions(): Promise<VaultPosition[]>;
434
+ getPendingRewards(): Promise<HarvestInfo[]>;
420
435
  }
421
436
 
422
437
  interface PoolProps {
@@ -615,6 +630,7 @@ declare class VesuRebalance extends BaseStrategy<SingleTokenInfo, SingleActionAm
615
630
  */
616
631
  getRebalanceCall(pools: Awaited<ReturnType<typeof this.getRebalancedPositions>>["changes"], isOverWeightAdjustment: boolean): Promise<starknet.Call | null>;
617
632
  getInvestmentFlows(pools: PoolInfoFull[]): Promise<IInvestmentFlow[]>;
633
+ getPendingRewards(): Promise<HarvestInfo[]>;
618
634
  harvest(acc: Account): Promise<starknet.Call[]>;
619
635
  /**
620
636
  * Calculates the fees deducted in different vTokens based on the current and previous state.
@@ -631,20 +647,6 @@ declare class VesuRebalance extends BaseStrategy<SingleTokenInfo, SingleActionAm
631
647
  */
632
648
  declare const VesuRebalanceStrategies: IStrategyMetadata<VesuRebalanceSettings>[];
633
649
 
634
- interface HarvestInfo {
635
- rewardsContract: ContractAddr;
636
- token: ContractAddr;
637
- startDate: Date;
638
- endDate: Date;
639
- claim: {
640
- id: number;
641
- amount: Web3Number;
642
- claimee: ContractAddr;
643
- };
644
- actualReward: Web3Number;
645
- proof: string[];
646
- }
647
-
648
650
  interface EkuboPoolKey {
649
651
  token0: ContractAddr;
650
652
  token1: ContractAddr;
@@ -833,7 +835,8 @@ declare class EkuboCLVault extends BaseStrategy<DualTokenInfo, DualActionAmount>
833
835
  amount0: Web3Number;
834
836
  amount1: Web3Number;
835
837
  }>;
836
- harvest(acc: Account, maxIterations?: number, priceRatioPrecision?: number, minRewardAmount?: Web3Number): Promise<Call[]>;
838
+ getPendingRewards(): Promise<HarvestInfo[]>;
839
+ harvest(acc: Account, maxIterations?: number, priceRatioPrecision?: number): Promise<Call[]>;
837
840
  /**
838
841
  * @description This funciton requires atleast one of the pool tokens to be reward token
839
842
  * i.e. STRK.
@@ -1378,6 +1381,7 @@ declare class UniversalStrategy<S extends UniversalStrategySettings> extends Bas
1378
1381
  getBringLiquidityCall(params: {
1379
1382
  amount: Web3Number;
1380
1383
  }): Promise<Call>;
1384
+ getPendingRewards(): Promise<HarvestInfo[]>;
1381
1385
  getHarvestCall(): Promise<{
1382
1386
  call: Call;
1383
1387
  reward: Web3Number;
package/dist/index.js CHANGED
@@ -4114,6 +4114,9 @@ var BaseStrategy = class extends CacheClass {
4114
4114
  async getVaultPositions() {
4115
4115
  throw new Error("Not implemented");
4116
4116
  }
4117
+ async getPendingRewards() {
4118
+ return [];
4119
+ }
4117
4120
  };
4118
4121
 
4119
4122
  // src/node/headless.browser.ts
@@ -4199,6 +4202,10 @@ var VesuHarvests = class _VesuHarvests extends Harvests {
4199
4202
  const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
4200
4203
  logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
4201
4204
  const data = _data.data["defiSpring"];
4205
+ if (!data) {
4206
+ logger.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
4207
+ return [];
4208
+ }
4202
4209
  const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
4203
4210
  logger.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
4204
4211
  return [{
@@ -10214,10 +10221,16 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
10214
10221
  });
10215
10222
  return [baseFlow];
10216
10223
  }
10224
+ async getPendingRewards() {
10225
+ const vesuHarvests = new VesuHarvests(this.config);
10226
+ return await vesuHarvests.getUnHarvestedRewards(this.address);
10227
+ }
10217
10228
  async harvest(acc) {
10218
- const vesuHarvest = new VesuHarvests(this.config);
10219
- const harvests = await vesuHarvest.getUnHarvestedRewards(this.address);
10220
- const harvest = harvests[0];
10229
+ const pendingRewards = await this.getPendingRewards();
10230
+ if (pendingRewards.length == 0) {
10231
+ throw new Error(`No pending rewards found`);
10232
+ }
10233
+ const harvest = pendingRewards[0];
10221
10234
  const avnu = new AvnuWrapper();
10222
10235
  let swapInfo = {
10223
10236
  token_from_address: harvest.token.address,
@@ -16642,13 +16655,14 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16642
16655
  amount1
16643
16656
  };
16644
16657
  }
16645
- async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
16658
+ async getPendingRewards() {
16646
16659
  const ekuboHarvests = new EkuboHarvests(this.config);
16647
- const unClaimedRewards = (await ekuboHarvests.getUnHarvestedRewards(
16648
- this.address
16649
- )).filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
16650
- if (unClaimedRewards.length == 0) {
16651
- logger.verbose(`${_EkuboCLVault.name}: harvest => no unclaimed rewards found`);
16660
+ return await ekuboHarvests.getUnHarvestedRewards(this.address);
16661
+ }
16662
+ async harvest(acc, maxIterations = 20, priceRatioPrecision = 4) {
16663
+ const pendingRewards = await this.getPendingRewards();
16664
+ if (pendingRewards.length == 0) {
16665
+ logger.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
16652
16666
  return [];
16653
16667
  }
16654
16668
  const poolKey = await this.getPoolKey();
@@ -16656,10 +16670,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16656
16670
  const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
16657
16671
  const bounds = await this.getCurrentBounds();
16658
16672
  logger.verbose(
16659
- `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${unClaimedRewards.length}`
16673
+ `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
16660
16674
  );
16661
16675
  const calls = [];
16662
- const chosenClaim = unClaimedRewards[0];
16676
+ const chosenClaim = pendingRewards[0];
16663
16677
  logger.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
16664
16678
  logger.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
16665
16679
  for (let claim of [chosenClaim]) {
@@ -30246,9 +30260,15 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
30246
30260
  const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
30247
30261
  return manageCall;
30248
30262
  }
30249
- async getHarvestCall() {
30263
+ async getPendingRewards() {
30250
30264
  const vesuHarvest = new VesuHarvests(this.config);
30251
- const harvestInfo = await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
30265
+ return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
30266
+ }
30267
+ async getHarvestCall() {
30268
+ const harvestInfo = await this.getPendingRewards();
30269
+ if (harvestInfo.length == 0) {
30270
+ throw new Error(`No pending rewards found`);
30271
+ }
30252
30272
  if (harvestInfo.length != 1) {
30253
30273
  throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
30254
30274
  }
package/dist/index.mjs CHANGED
@@ -4008,6 +4008,9 @@ var BaseStrategy = class extends CacheClass {
4008
4008
  async getVaultPositions() {
4009
4009
  throw new Error("Not implemented");
4010
4010
  }
4011
+ async getPendingRewards() {
4012
+ return [];
4013
+ }
4011
4014
  };
4012
4015
 
4013
4016
  // src/node/headless.browser.ts
@@ -4093,6 +4096,10 @@ var VesuHarvests = class _VesuHarvests extends Harvests {
4093
4096
  const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
4094
4097
  logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
4095
4098
  const data = _data.data["defiSpring"];
4099
+ if (!data) {
4100
+ logger.verbose(`${_VesuHarvests.name}: no defiSpring data found`);
4101
+ return [];
4102
+ }
4096
4103
  const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
4097
4104
  logger.verbose(`${_VesuHarvests.name}: actualReward: ${actualReward.toString()}`);
4098
4105
  return [{
@@ -10108,10 +10115,16 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
10108
10115
  });
10109
10116
  return [baseFlow];
10110
10117
  }
10118
+ async getPendingRewards() {
10119
+ const vesuHarvests = new VesuHarvests(this.config);
10120
+ return await vesuHarvests.getUnHarvestedRewards(this.address);
10121
+ }
10111
10122
  async harvest(acc) {
10112
- const vesuHarvest = new VesuHarvests(this.config);
10113
- const harvests = await vesuHarvest.getUnHarvestedRewards(this.address);
10114
- const harvest = harvests[0];
10123
+ const pendingRewards = await this.getPendingRewards();
10124
+ if (pendingRewards.length == 0) {
10125
+ throw new Error(`No pending rewards found`);
10126
+ }
10127
+ const harvest = pendingRewards[0];
10115
10128
  const avnu = new AvnuWrapper();
10116
10129
  let swapInfo = {
10117
10130
  token_from_address: harvest.token.address,
@@ -16540,13 +16553,14 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16540
16553
  amount1
16541
16554
  };
16542
16555
  }
16543
- async harvest(acc, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount = new Web3Number(0, 18)) {
16556
+ async getPendingRewards() {
16544
16557
  const ekuboHarvests = new EkuboHarvests(this.config);
16545
- const unClaimedRewards = (await ekuboHarvests.getUnHarvestedRewards(
16546
- this.address
16547
- )).filter((claim) => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
16548
- if (unClaimedRewards.length == 0) {
16549
- logger.verbose(`${_EkuboCLVault.name}: harvest => no unclaimed rewards found`);
16558
+ return await ekuboHarvests.getUnHarvestedRewards(this.address);
16559
+ }
16560
+ async harvest(acc, maxIterations = 20, priceRatioPrecision = 4) {
16561
+ const pendingRewards = await this.getPendingRewards();
16562
+ if (pendingRewards.length == 0) {
16563
+ logger.verbose(`${_EkuboCLVault.name}: harvest => no pending rewards found`);
16550
16564
  return [];
16551
16565
  }
16552
16566
  const poolKey = await this.getPoolKey();
@@ -16554,10 +16568,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
16554
16568
  const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
16555
16569
  const bounds = await this.getCurrentBounds();
16556
16570
  logger.verbose(
16557
- `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${unClaimedRewards.length}`
16571
+ `${_EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
16558
16572
  );
16559
16573
  const calls = [];
16560
- const chosenClaim = unClaimedRewards[0];
16574
+ const chosenClaim = pendingRewards[0];
16561
16575
  logger.info(`${_EkuboCLVault.name}: harvest => doing one at a time`);
16562
16576
  logger.info(`${_EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
16563
16577
  for (let claim of [chosenClaim]) {
@@ -30144,9 +30158,15 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
30144
30158
  const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
30145
30159
  return manageCall;
30146
30160
  }
30147
- async getHarvestCall() {
30161
+ async getPendingRewards() {
30148
30162
  const vesuHarvest = new VesuHarvests(this.config);
30149
- const harvestInfo = await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
30163
+ return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
30164
+ }
30165
+ async getHarvestCall() {
30166
+ const harvestInfo = await this.getPendingRewards();
30167
+ if (harvestInfo.length == 0) {
30168
+ throw new Error(`No pending rewards found`);
30169
+ }
30150
30170
  if (harvestInfo.length != 1) {
30151
30171
  throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
30152
30172
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strkfarm/sdk",
3
- "version": "1.1.53",
3
+ "version": "1.1.55",
4
4
  "description": "STRKFarm TS SDK (Meant for our internal use, but feel free to use it)",
5
5
  "typings": "dist/index.d.ts",
6
6
  "types": "dist/index.d.ts",
@@ -108,6 +108,10 @@ export class VesuHarvests extends Harvests {
108
108
  logger.verbose(`${VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
109
109
 
110
110
  const data = _data.data['defiSpring'];
111
+ if (!data) {
112
+ logger.verbose(`${VesuHarvests.name}: no defiSpring data found`);
113
+ return [];
114
+ }
111
115
 
112
116
  // get the actual reward
113
117
  const actualReward = Web3Number.fromWei(data.amount, 18).minus(claimed_amount);
@@ -1,5 +1,6 @@
1
1
  import { ContractAddr, Web3Number } from "@/dataTypes";
2
2
  import { IConfig, TokenInfo, VaultPosition } from "@/interfaces";
3
+ import { HarvestInfo } from "@/modules/harvests";
3
4
  import { CacheClass } from "@/utils/cacheClass";
4
5
  import { Call } from "starknet";
5
6
 
@@ -55,4 +56,8 @@ export class BaseStrategy<TVLInfo, ActionInfo> extends CacheClass {
55
56
  async getVaultPositions(): Promise<VaultPosition[]> {
56
57
  throw new Error("Not implemented");
57
58
  }
59
+
60
+ async getPendingRewards(): Promise<HarvestInfo[]> {
61
+ return [];
62
+ }
58
63
  }
@@ -1597,32 +1597,30 @@ export class EkuboCLVault extends BaseStrategy<
1597
1597
  };
1598
1598
  }
1599
1599
 
1600
- async harvest(acc: Account, maxIterations = 20, priceRatioPrecision = 4, minRewardAmount: Web3Number = new Web3Number(0, 18)): Promise<Call[]> {
1600
+ async getPendingRewards(): Promise<HarvestInfo[]> {
1601
1601
  const ekuboHarvests = new EkuboHarvests(this.config);
1602
-
1603
- // get unclaimed rewards and filter out those less than the minimum reward amount
1604
- const unClaimedRewards = (await ekuboHarvests.getUnHarvestedRewards(
1605
- this.address
1606
- )).filter(claim => claim.actualReward.greaterThanOrEqualTo(minRewardAmount));
1607
-
1608
- if (unClaimedRewards.length == 0) {
1609
- logger.verbose(`${EkuboCLVault.name}: harvest => no unclaimed rewards found`);
1602
+ return await ekuboHarvests.getUnHarvestedRewards(this.address);
1603
+ }
1604
+
1605
+ async harvest(acc: Account, maxIterations = 20, priceRatioPrecision = 4): Promise<Call[]> {
1606
+ const pendingRewards = await this.getPendingRewards();
1607
+ if (pendingRewards.length == 0) {
1608
+ logger.verbose(`${EkuboCLVault.name}: harvest => no pending rewards found`);
1610
1609
  return [];
1611
1610
  }
1612
-
1613
1611
  // get necessary info for the harvest
1614
1612
  const poolKey = await this.getPoolKey();
1615
1613
  const token0Info = await Global.getTokenInfoFromAddr(poolKey.token0);
1616
1614
  const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
1617
1615
  const bounds = await this.getCurrentBounds();
1618
1616
  logger.verbose(
1619
- `${EkuboCLVault.name}: harvest => unClaimedRewards: ${unClaimedRewards.length}`
1617
+ `${EkuboCLVault.name}: harvest => unClaimedRewards: ${pendingRewards.length}`
1620
1618
  );
1621
1619
 
1622
1620
  // execute the harvest
1623
1621
  const calls: Call[] = [];
1624
1622
  // do one at a time.
1625
- const chosenClaim = unClaimedRewards[0];
1623
+ const chosenClaim = pendingRewards[0];
1626
1624
  logger.info(`${EkuboCLVault.name}: harvest => doing one at a time`);
1627
1625
  logger.info(`${EkuboCLVault.name}: harvest => chosenClaim -> Claim ID: ${chosenClaim.claim.id}, Amount: ${chosenClaim.claim.amount.toString()}, actualAmount: ${chosenClaim.actualReward.toString()}, addr: ${chosenClaim.claim.claimee.toString()}`);
1628
1626
  for (let claim of [chosenClaim]) {
@@ -11,7 +11,7 @@ import { ApproveCallParams, AvnuSwapCallParams, BaseAdapter, CommonAdapter, Flas
11
11
  import { Global } from "@/global";
12
12
  import { AvnuWrapper, ERC20 } from "@/modules";
13
13
  import { AVNU_MIDDLEWARE, VESU_SINGLETON } from "./universal-adapters/adapter-utils";
14
- import { VesuHarvests } from "@/modules/harvests";
14
+ import { HarvestInfo, VesuHarvests } from "@/modules/harvests";
15
15
 
16
16
  export interface UniversalManageCall {
17
17
  proofs: string[];
@@ -729,9 +729,16 @@ export class UniversalStrategy<
729
729
  return manageCall;
730
730
  }
731
731
 
732
- async getHarvestCall() {
732
+ async getPendingRewards(): Promise<HarvestInfo[]> {
733
733
  const vesuHarvest = new VesuHarvests(this.config);
734
- const harvestInfo = await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
734
+ return await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
735
+ }
736
+
737
+ async getHarvestCall() {
738
+ const harvestInfo = await this.getPendingRewards();
739
+ if (harvestInfo.length == 0) {
740
+ throw new Error(`No pending rewards found`);
741
+ }
735
742
  if (harvestInfo.length != 1) {
736
743
  throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
737
744
  }
@@ -25,7 +25,7 @@ import {
25
25
  SingleTokenInfo
26
26
  } from "./base-strategy";
27
27
  import { getAPIUsingHeadlessBrowser } from "@/node/headless";
28
- import { VesuHarvests } from "@/modules/harvests";
28
+ import { HarvestInfo, VesuHarvests } from "@/modules/harvests";
29
29
  import VesuPoolIDs from "@/data/vesu_pools.json";
30
30
  import { COMMON_CONTRACTS, ENDPOINTS } from "./constants";
31
31
 
@@ -763,10 +763,17 @@ export class VesuRebalance extends BaseStrategy<
763
763
  return [baseFlow];
764
764
  }
765
765
 
766
+ async getPendingRewards(): Promise<HarvestInfo[]> {
767
+ const vesuHarvests = new VesuHarvests(this.config);
768
+ return await vesuHarvests.getUnHarvestedRewards(this.address);
769
+ }
770
+
766
771
  async harvest(acc: Account) {
767
- const vesuHarvest = new VesuHarvests(this.config);
768
- const harvests = await vesuHarvest.getUnHarvestedRewards(this.address);
769
- const harvest = harvests[0];
772
+ const pendingRewards = await this.getPendingRewards();
773
+ if (pendingRewards.length == 0) {
774
+ throw new Error(`No pending rewards found`);
775
+ }
776
+ const harvest = pendingRewards[0];
770
777
  const avnu = new AvnuWrapper();
771
778
  let swapInfo: SwapInfo = {
772
779
  token_from_address: harvest.token.address,