@0dotxyz/p0-ts-sdk 2.7.1-alpha.1 → 2.7.1

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/README.md CHANGED
@@ -98,7 +98,7 @@ console.log(`Compute units: ${simulation.value.unitsConsumed}`);
98
98
  ### 5. Borrow Against Collateral
99
99
 
100
100
  ```typescript
101
- // Check how much you can borrow (account health + bank borrow cap + bank liquidity)
101
+ // Check how much you can borrow
102
102
  const maxBorrow = wrappedAccount.computeMaxBorrowForBank(usdcBank.address);
103
103
  console.log(`Max borrow: $${maxBorrow.toString()}`);
104
104
 
@@ -289,16 +289,9 @@ const health = wrapped.computeHealthComponents(
289
289
  MarginRequirementType.Initial // or Maintenance
290
290
  );
291
291
 
292
- // Max amounts — bank-aware:
293
- // borrow = min(health-based, remaining borrow cap, available bank liquidity, rate-limit headroom)
294
- // withdraw = min(health-based, available bank liquidity, rate-limit headroom)
295
- // deposit = remaining deposit cap (optionally min'd with your wallet balance)
296
- // (rate-limit headroom = bank net-outflow limiter in tokens + group USD limiter, if enabled)
292
+ // Max amounts
297
293
  const maxBorrow = wrapped.computeMaxBorrowForBank(bankAddress);
298
294
  const maxWithdraw = wrapped.computeMaxWithdrawForBank(bankAddress);
299
- const maxDeposit = wrapped.computeMaxDepositForBank(bankAddress, { walletBalance: 1_000 });
300
-
301
- // Pass { ignoreBankLimits: true } to get the purely health-based borrow/withdraw amount
302
295
  ```
303
296
 
304
297
  ## 🧪 Testing
package/dist/index.cjs CHANGED
@@ -27746,11 +27746,6 @@ var klendInstructions = {
27746
27746
  };
27747
27747
  var instructions_default2 = klendInstructions;
27748
27748
 
27749
- // src/vendor/drift/types/drift-spot-market/drift-spot-market.types.ts
27750
- function isSpotBalanceTypeVariant(value, variant) {
27751
- return value === variant;
27752
- }
27753
-
27754
27749
  // src/vendor/drift/idl/drift.json
27755
27750
  var drift_default = {
27756
27751
  address: "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH",
@@ -42116,34 +42111,6 @@ function deriveDriftSpotMarketVault(marketIndex, programId = DRIFT_PROGRAM_ID) {
42116
42111
  programId
42117
42112
  );
42118
42113
  }
42119
- var ZERO = new BN9__default.default(0);
42120
- var ONE = new BN9__default.default(1);
42121
- var TEN = new BN9__default.default(10);
42122
- var PERCENTAGE_PRECISION_EXP = new BN9__default.default(6);
42123
- new BN9__default.default(10).pow(PERCENTAGE_PRECISION_EXP);
42124
- var SPOT_MARKET_RATE_PRECISION_EXP = new BN9__default.default(6);
42125
- new BN9__default.default(10).pow(SPOT_MARKET_RATE_PRECISION_EXP);
42126
- var SPOT_MARKET_UTILIZATION_PRECISION_EXP = new BN9__default.default(6);
42127
- new BN9__default.default(10).pow(
42128
- SPOT_MARKET_UTILIZATION_PRECISION_EXP
42129
- );
42130
- new BN9__default.default(31536e3);
42131
- function divCeil(a, b) {
42132
- const quotient = a.div(b);
42133
- const remainder = a.mod(b);
42134
- if (remainder.gt(ZERO)) {
42135
- return quotient.add(ONE);
42136
- }
42137
- return quotient;
42138
- }
42139
- function getDriftTokenAmount(balanceAmount, spotMarket, balanceType) {
42140
- const precisionDecrease = TEN.pow(new BN9__default.default(19 - spotMarket.decimals));
42141
- if (isSpotBalanceTypeVariant(balanceType, "deposit")) {
42142
- return balanceAmount.mul(spotMarket.cumulativeDepositInterest).div(precisionDecrease);
42143
- } else {
42144
- return divCeil(balanceAmount.mul(spotMarket.cumulativeBorrowInterest), precisionDecrease);
42145
- }
42146
- }
42147
42114
 
42148
42115
  // src/vendor/drift/utils/rewards.utils.ts
42149
42116
  async function getDriftRewards(spotMarkets, userStates, connection) {
@@ -69542,6 +69509,7 @@ function makeEndFlashLoanIx2(programId, accounts, remainingAccounts = []) {
69542
69509
  { pubkey: accounts.group, isSigner: false, isWritable: false },
69543
69510
  { pubkey: accounts.authority, isSigner: true, isWritable: false }
69544
69511
  ];
69512
+ if (!isMarginfiV0110Live(programId)) keys.splice(1, 1);
69545
69513
  keys.push(...remainingAccounts);
69546
69514
  return new web3_js.TransactionInstruction({
69547
69515
  keys,
@@ -69751,6 +69719,7 @@ function makePulseHealthIx3(programId, accounts, remainingAccounts = []) {
69751
69719
  { pubkey: accounts.marginfiAccount, isSigner: false, isWritable: true },
69752
69720
  { pubkey: accounts.group, isSigner: false, isWritable: false }
69753
69721
  ];
69722
+ if (!isMarginfiV0110Live(programId)) keys.splice(1, 1);
69754
69723
  keys.push(...remainingAccounts);
69755
69724
  return new web3_js.TransactionInstruction({
69756
69725
  keys,
@@ -69770,6 +69739,7 @@ function makeAccountTransferToNewAccountIx2(programId, accounts) {
69770
69739
  { pubkey: accounts.feeState, isSigner: false, isWritable: false },
69771
69740
  { pubkey: web3_js.SystemProgram.programId, isSigner: false, isWritable: false }
69772
69741
  ];
69742
+ if (!isMarginfiV0110Live(programId)) keys.splice(7, 1);
69773
69743
  return new web3_js.TransactionInstruction({
69774
69744
  keys,
69775
69745
  programId,
@@ -73918,20 +73888,6 @@ var MarginfiAccount = class _MarginfiAccount {
73918
73888
  ...params
73919
73889
  });
73920
73890
  }
73921
- /**
73922
- * Calculates the maximum amount that can be deposited into a bank.
73923
- *
73924
- * Deposits are not constrained by account health, only by the bank's remaining deposit cap
73925
- * and (optionally) the wallet balance.
73926
- *
73927
- * @param params - Configuration for max deposit computation
73928
- * @returns Maximum depositable amount in UI units
73929
- *
73930
- * @see {@link computeMaxDepositForBank} for implementation details
73931
- */
73932
- computeMaxDepositForBank(params) {
73933
- return computeMaxDepositForBank(params);
73934
- }
73935
73891
  /**
73936
73892
  * Gets the banks required for health check calculations.
73937
73893
  *
@@ -77791,9 +77747,7 @@ function computeMaxBorrowForBank(params) {
77791
77747
  assetShareValueMultiplierByBank,
77792
77748
  emodeImpactStatus,
77793
77749
  volatilityFactor,
77794
- activePair,
77795
- groupRateLimiter,
77796
- ignoreBankLimits
77750
+ activePair
77797
77751
  } = params;
77798
77752
  const bank = banksMap.get(bankAddress.toBase58());
77799
77753
  if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);
@@ -77853,67 +77807,15 @@ function computeMaxBorrowForBank(params) {
77853
77807
  assetShareValueMultiplier
77854
77808
  });
77855
77809
  const liabWeight = getLiabilityWeight(bank.config, 0 /* Initial */);
77856
- const originationFeeFactor = new BigNumber3__default.default(1).plus(
77857
- bank.config.interestRateConfig.protocolOriginationFee
77858
- );
77859
- const liabPriceWeighted = priceHighestBias.times(liabWeight).times(originationFeeFactor);
77860
- const healthMaxBorrow = assetWeight.eq(0) ? computeQuantityUi(balance, bank, assetShareValueMultiplier).assets.plus(
77861
- freeCollateral.minus(untiedCollateralForBank).div(liabPriceWeighted)
77862
- ) : untiedCollateralForBank.div(priceLowestBias.times(assetWeight)).plus(freeCollateral.minus(untiedCollateralForBank).div(liabPriceWeighted));
77863
- if (ignoreBankLimits) return healthMaxBorrow;
77864
- const borrowCapRemaining = new BigNumber3__default.default(computeBankBorrowCapRemaining(bank)).div(
77865
- originationFeeFactor
77866
- );
77867
- const availableLiquidity = computeBankProjectedAvailableLiquidity(
77868
- bank,
77869
- assetShareValueMultiplier
77870
- ).div(originationFeeFactor);
77871
- const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77872
- return BigNumber3__default.default.max(
77873
- 0,
77874
- BigNumber3__default.default.min(healthMaxBorrow, borrowCapRemaining, availableLiquidity, rateLimitRemaining)
77875
- );
77876
- }
77877
- function computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter) {
77878
- const nowSeconds = Date.now() / 1e3;
77879
- let remaining = new BigNumber3__default.default(Infinity);
77880
- const bankRemaining = computeBankRateLimitRemaining(bank, nowSeconds);
77881
- if (bankRemaining !== null) remaining = BigNumber3__default.default.min(remaining, bankRemaining);
77882
- const groupRemainingUsd = computeGroupRateLimitRemainingUsd(groupRateLimiter, nowSeconds);
77883
- if (groupRemainingUsd !== null) {
77884
- const price = getPrice(oraclePrice, 1 /* None */, false);
77885
- if (price.gt(0)) remaining = BigNumber3__default.default.min(remaining, groupRemainingUsd.div(price));
77810
+ if (assetWeight.eq(0)) {
77811
+ return computeQuantityUi(balance, bank, assetShareValueMultiplier).assets.plus(
77812
+ freeCollateral.minus(untiedCollateralForBank).div(priceHighestBias.times(liabWeight))
77813
+ );
77814
+ } else {
77815
+ return untiedCollateralForBank.div(priceLowestBias.times(assetWeight)).plus(freeCollateral.minus(untiedCollateralForBank).div(priceHighestBias.times(liabWeight)));
77886
77816
  }
77887
- return remaining;
77888
77817
  }
77889
77818
  function computeMaxWithdrawForBank(params) {
77890
- const {
77891
- banksMap,
77892
- bankAddress,
77893
- oraclePricesByBank,
77894
- assetShareValueMultiplierByBank,
77895
- groupRateLimiter,
77896
- venueStates,
77897
- ignoreBankLimits
77898
- } = params;
77899
- const bank = banksMap.get(bankAddress.toBase58());
77900
- if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);
77901
- const healthMaxWithdraw = computeHealthMaxWithdrawForBank(params);
77902
- if (ignoreBankLimits) return healthMaxWithdraw;
77903
- const oraclePrice = oraclePricesByBank.get(bankAddress.toBase58());
77904
- if (!oraclePrice) throw Error(`Oracle price for ${bankAddress.toBase58()} not found`);
77905
- const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());
77906
- const availableLiquidity = computeBankProjectedAvailableLiquidity(
77907
- bank,
77908
- assetShareValueMultiplier
77909
- );
77910
- const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77911
- const clamps = [healthMaxWithdraw, availableLiquidity, rateLimitRemaining];
77912
- const venueLiquidity = computeVenueAvailableLiquidity(bank, venueStates);
77913
- if (venueLiquidity !== void 0) clamps.push(venueLiquidity);
77914
- return BigNumber3__default.default.max(0, BigNumber3__default.default.min(...clamps));
77915
- }
77916
- function computeHealthMaxWithdrawForBank(params) {
77917
77819
  const {
77918
77820
  account,
77919
77821
  banksMap,
@@ -78009,17 +77911,6 @@ function computeHealthMaxWithdrawForBank(params) {
78009
77911
  const maxWithdraw = initUntiedCollateralForBank.div(initWeightedPrice);
78010
77912
  return maxWithdraw;
78011
77913
  }
78012
- function computeMaxDepositForBank(params) {
78013
- const { banksMap, bankAddress, assetShareValueMultiplierByBank, walletBalance } = params;
78014
- const bank = banksMap.get(bankAddress.toBase58());
78015
- if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);
78016
- const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());
78017
- const depositCapRemaining = new BigNumber3__default.default(computeBankDepositCapRemaining(bank)).times(
78018
- assetShareValueMultiplier ?? 1
78019
- );
78020
- if (walletBalance === void 0) return depositCapRemaining;
78021
- return BigNumber3__default.default.max(0, BigNumber3__default.default.min(depositCapRemaining, new BigNumber3__default.default(walletBalance)));
78022
- }
78023
77914
 
78024
77915
  // src/services/account/utils/misc.utils.ts
78025
77916
  function floor(value, decimals) {
@@ -79692,21 +79583,6 @@ var fetchMultipleBanks = async (program, opts) => {
79692
79583
  }
79693
79584
  return bankDatas;
79694
79585
  };
79695
- var U64_MAX = new BigNumber3__default.default("18446744073709551615");
79696
- var DRIFT_SCALED_BALANCE_DECIMALS = 9;
79697
- function isDepositLimitActive(bank) {
79698
- return !bank.config.depositLimit.eq(U64_MAX);
79699
- }
79700
- function isBorrowLimitActive(bank) {
79701
- return !bank.config.borrowLimit.eq(U64_MAX);
79702
- }
79703
- function getEffectiveDepositLimit(bank) {
79704
- const limit = bank.config.depositLimit;
79705
- if (bank.config.assetTag !== 4 /* DRIFT */) return limit;
79706
- const diff = DRIFT_SCALED_BALANCE_DECIMALS - bank.mintDecimals;
79707
- if (diff === 0) return limit;
79708
- return diff > 0 ? limit.times(10 ** diff) : limit.div(10 ** -diff);
79709
- }
79710
79586
  function computeInterestRates(bank) {
79711
79587
  const { insuranceFeeFixedApr, insuranceIrFee, protocolFixedFeeApr, protocolIrFee } = bank.config.interestRateConfig;
79712
79588
  const fixedFee = insuranceFeeFixedApr.plus(protocolFixedFeeApr);
@@ -79801,34 +79677,25 @@ function computeUtilizationRate(bank) {
79801
79677
  return liabilities.div(assets);
79802
79678
  }
79803
79679
  var SECONDS_PER_DAY = 24 * 60 * 60;
79804
- var SECONDS_PER_YEAR = SECONDS_PER_DAY * 365;
79805
- var EXECUTION_HEADROOM_SECONDS = 120;
79806
- function computeAccrualProjectionSeconds(bank, nowSeconds = Date.now() / 1e3) {
79807
- const age = Math.max(0, nowSeconds - bank.lastUpdate);
79808
- return Math.max(2 * age, age + EXECUTION_HEADROOM_SECONDS);
79809
- }
79680
+ var SECONDS_PER_YEAR = SECONDS_PER_DAY * 365.25;
79810
79681
  function computeRemainingCapacity(bank) {
79811
79682
  const totalDeposits = getTotalAssetQuantity(bank);
79812
- const remainingCapacity = isDepositLimitActive(bank) ? BigNumber3__default.default.max(
79813
- 0,
79814
- getEffectiveDepositLimit(bank).minus(totalDeposits).minus(1).integerValue(BigNumber3__default.default.ROUND_FLOOR)
79815
- ) : U64_MAX;
79683
+ const remainingCapacity = BigNumber3__default.default.max(0, bank.config.depositLimit.minus(totalDeposits));
79816
79684
  const totalBorrows = getTotalLiabilityQuantity(bank);
79817
- const remainingBorrowCapacity = isBorrowLimitActive(bank) ? BigNumber3__default.default.max(
79818
- 0,
79819
- bank.config.borrowLimit.minus(totalBorrows).minus(1).integerValue(BigNumber3__default.default.ROUND_FLOOR)
79820
- ) : U64_MAX;
79821
- const projectionSeconds = computeAccrualProjectionSeconds(bank);
79685
+ const remainingBorrowCapacity = BigNumber3__default.default.max(0, bank.config.borrowLimit.minus(totalBorrows));
79686
+ const durationSinceLastAccrual = Date.now() / 1e3 - bank.lastUpdate;
79822
79687
  const { lendingRate, borrowingRate } = computeInterestRates(bank);
79823
- const projectedLendingInterest = lendingRate.times(projectionSeconds).dividedBy(SECONDS_PER_YEAR).times(totalDeposits);
79824
- const projectedBorrowInterest = borrowingRate.times(projectionSeconds).dividedBy(SECONDS_PER_YEAR).times(totalBorrows);
79825
- const depositCapacity = remainingCapacity.minus(projectedLendingInterest);
79826
- const borrowCapacity = remainingBorrowCapacity.minus(projectedBorrowInterest);
79688
+ const outstandingLendingInterest = lendingRate.times(durationSinceLastAccrual).dividedBy(SECONDS_PER_YEAR).times(totalDeposits);
79689
+ const outstandingBorrowInterest = borrowingRate.times(durationSinceLastAccrual).dividedBy(SECONDS_PER_YEAR).times(totalBorrows);
79690
+ const depositCapacity = remainingCapacity.minus(outstandingLendingInterest.times(2));
79691
+ const borrowCapacity = remainingBorrowCapacity.minus(outstandingBorrowInterest.times(2));
79827
79692
  return {
79828
79693
  depositCapacity,
79829
79694
  borrowCapacity
79830
79695
  };
79831
79696
  }
79697
+
79698
+ // src/services/bank/utils/bank-metrics.utils.ts
79832
79699
  function isStandardBorrowable(bank) {
79833
79700
  const { assetTag, operationalState, borrowLimit } = bank.config;
79834
79701
  return (assetTag === 0 /* DEFAULT */ || assetTag === 1 /* SOL */) && operationalState === "Operational" /* Operational */ && borrowLimit.gt(0);
@@ -79838,7 +79705,9 @@ function isStandardDepositable(bank) {
79838
79705
  return (assetTag === 0 /* DEFAULT */ || assetTag === 1 /* SOL */) && operationalState === "Operational" /* Operational */;
79839
79706
  }
79840
79707
  function computeBankTotalDeposits(bank, assetShareValueMultiplier) {
79841
- const totalAssets = getTotalAssetQuantity(bank).times(assetShareValueMultiplier ?? 1);
79708
+ const totalAssets = getTotalAssetQuantity(bank).times(
79709
+ assetShareValueMultiplier ?? 1
79710
+ );
79842
79711
  return nativeToUi(totalAssets, bank.mintDecimals);
79843
79712
  }
79844
79713
  function computeBankTotalBorrows(bank) {
@@ -79869,35 +79738,14 @@ function computeBankPoolSize(bank, assetShareValueMultiplier) {
79869
79738
  const borrowCap = nativeToUi(bank.config.borrowLimit, bank.mintDecimals);
79870
79739
  return Math.max(0, Math.min(totalDeposits, borrowCap) - totalBorrows);
79871
79740
  }
79872
- function computeBankAvailableLiquidity(bank, assetShareValueMultiplier) {
79873
- const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);
79874
- const totalBorrows = computeBankTotalBorrows(bank);
79875
- return BigNumber3__default.default.max(0, new BigNumber3__default.default(totalDeposits).minus(totalBorrows));
79876
- }
79877
79741
  function computeBankDepositCapRemaining(bank) {
79878
- if (!isDepositLimitActive(bank)) return Infinity;
79879
79742
  const { depositCapacity } = computeRemainingCapacity(bank);
79880
79743
  return Math.max(0, nativeToUi(depositCapacity, bank.mintDecimals));
79881
79744
  }
79882
79745
  function computeBankBorrowCapRemaining(bank) {
79883
- if (!isBorrowLimitActive(bank)) return Infinity;
79884
79746
  const { borrowCapacity } = computeRemainingCapacity(bank);
79885
79747
  return Math.max(0, nativeToUi(borrowCapacity, bank.mintDecimals));
79886
79748
  }
79887
- function computeBankProjectedAvailableLiquidity(bank, assetShareValueMultiplier) {
79888
- const liquidity = computeBankAvailableLiquidity(bank, assetShareValueMultiplier);
79889
- const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);
79890
- const totalBorrows = computeBankTotalBorrows(bank);
79891
- const projectionYears = computeAccrualProjectionSeconds(bank) / SECONDS_PER_YEAR;
79892
- const { lendingRate, borrowingRate } = computeInterestRates(bank);
79893
- const projectedBorrowInterest = borrowingRate.times(totalBorrows).times(projectionYears);
79894
- const projectedLendingInterest = lendingRate.times(totalDeposits).times(projectionYears);
79895
- const liquidityLostToAccrual = BigNumber3__default.default.max(
79896
- 0,
79897
- projectedBorrowInterest.minus(projectedLendingInterest)
79898
- );
79899
- return BigNumber3__default.default.max(0, liquidity.minus(liquidityLostToAccrual));
79900
- }
79901
79749
  function computeBankSupplyApy(bank) {
79902
79750
  return aprToApy(computeInterestRates(bank).lendingRate.toNumber());
79903
79751
  }
@@ -79910,7 +79758,11 @@ function computeBankMetrics(params) {
79910
79758
  symbol,
79911
79759
  totalDeposits: computeBankTotalDeposits(bank, assetShareValueMultiplier),
79912
79760
  totalBorrows: computeBankTotalBorrows(bank),
79913
- totalDepositsUsd: computeBankTotalDepositsUsd(bank, oraclePrice, assetShareValueMultiplier),
79761
+ totalDepositsUsd: computeBankTotalDepositsUsd(
79762
+ bank,
79763
+ oraclePrice,
79764
+ assetShareValueMultiplier
79765
+ ),
79914
79766
  totalBorrowsUsd: computeBankTotalBorrowsUsd(bank, oraclePrice),
79915
79767
  utilizationRate: computeUtilizationRate(bank).toNumber(),
79916
79768
  poolSize: computeBankPoolSize(bank, assetShareValueMultiplier),
@@ -79938,92 +79790,6 @@ function requireTokenProgram(tokenProgramsByBank, address, makeError = (message)
79938
79790
  }
79939
79791
  return tokenProgram;
79940
79792
  }
79941
- function computeRateLimitWindowRemainingCapacity(window, nowSeconds) {
79942
- const { maxOutflow, windowDuration } = window;
79943
- if (maxOutflow.lte(0)) return null;
79944
- if (windowDuration === 0) return maxOutflow;
79945
- let { windowStart, prevWindowOutflow, curWindowOutflow } = window;
79946
- const elapsedRaw = Math.floor(nowSeconds) - windowStart;
79947
- if (elapsedRaw >= windowDuration * 2) {
79948
- windowStart = Math.floor(nowSeconds);
79949
- prevWindowOutflow = new BigNumber3__default.default(0);
79950
- curWindowOutflow = new BigNumber3__default.default(0);
79951
- } else if (elapsedRaw >= windowDuration) {
79952
- windowStart = windowStart + windowDuration;
79953
- prevWindowOutflow = curWindowOutflow;
79954
- curWindowOutflow = new BigNumber3__default.default(0);
79955
- }
79956
- const elapsed = Math.floor(nowSeconds) - windowStart;
79957
- if (elapsed < 0) return new BigNumber3__default.default(0);
79958
- if (elapsed >= windowDuration) return maxOutflow;
79959
- const remainingTime = windowDuration - elapsed;
79960
- const weightedPrev = prevWindowOutflow.abs().times(remainingTime).idiv(windowDuration).times(prevWindowOutflow.isNegative() ? -1 : 1);
79961
- const totalNetOutflow = weightedPrev.plus(curWindowOutflow);
79962
- return maxOutflow.minus(totalNetOutflow);
79963
- }
79964
- function computeRateLimiterRemainingCapacity(rateLimiter, nowSeconds) {
79965
- if (!rateLimiter) return null;
79966
- const hourly = computeRateLimitWindowRemainingCapacity(rateLimiter.hourly, nowSeconds);
79967
- const daily = computeRateLimitWindowRemainingCapacity(rateLimiter.daily, nowSeconds);
79968
- if (hourly === null) return daily;
79969
- if (daily === null) return hourly;
79970
- return BigNumber3__default.default.min(hourly, daily);
79971
- }
79972
- function computeBankRateLimitRemaining(bank, nowSeconds = Date.now() / 1e3) {
79973
- const remaining = computeRateLimiterRemainingCapacity(bank.rateLimiter, nowSeconds);
79974
- if (remaining === null) return null;
79975
- return BigNumber3__default.default.max(0, nativeToUi(remaining, bank.mintDecimals));
79976
- }
79977
- function computeGroupRateLimitRemainingUsd(rateLimiter, nowSeconds = Date.now() / 1e3) {
79978
- const remaining = computeRateLimiterRemainingCapacity(rateLimiter, nowSeconds);
79979
- if (remaining === null) return null;
79980
- return BigNumber3__default.default.max(0, remaining);
79981
- }
79982
- var VENUE_AVAILABLE_LIQUIDITY_BUFFER = 0.995;
79983
- function computeVenueAvailableLiquidity(bank, venueStates) {
79984
- const decimals = bank.mintDecimals;
79985
- switch (bank.config.assetTag) {
79986
- case 3 /* KAMINO */: {
79987
- const reserveState = venueStates?.kaminoStates?.reserveState;
79988
- if (!reserveState) return void 0;
79989
- return new BigNumber3__default.default(
79990
- nativeToUi(reserveState.liquidity.availableAmount.toString(), decimals)
79991
- ).times(VENUE_AVAILABLE_LIQUIDITY_BUFFER);
79992
- }
79993
- case 4 /* DRIFT */: {
79994
- const spotMarketState = venueStates?.driftStates?.spotMarketState;
79995
- if (!spotMarketState) return void 0;
79996
- const deposits = getDriftTokenAmount(
79997
- spotMarketState.depositBalance,
79998
- spotMarketState,
79999
- "deposit" /* DEPOSIT */
80000
- );
80001
- const borrows = getDriftTokenAmount(
80002
- spotMarketState.borrowBalance,
80003
- spotMarketState,
80004
- "borrow" /* BORROW */
80005
- );
80006
- const idle = deposits.sub(borrows);
80007
- return new BigNumber3__default.default(nativeToUi(idle.isNeg() ? "0" : idle.toString(), decimals)).times(
80008
- VENUE_AVAILABLE_LIQUIDITY_BUFFER
80009
- );
80010
- }
80011
- case 6 /* JUPLEND */: {
80012
- const reserveState = venueStates?.jupLendStates?.jupTokenReserveState;
80013
- if (!reserveState) return void 0;
80014
- const supplyWithInterestNative = reserveState.totalSupplyWithInterest.mul(reserveState.supplyExchangePrice).div(JUP_EXCHANGE_PRICES_PRECISION);
80015
- const borrowWithInterestNative = reserveState.totalBorrowWithInterest.mul(reserveState.borrowExchangePrice).div(JUP_EXCHANGE_PRICES_PRECISION);
80016
- const totalSupply = supplyWithInterestNative.add(reserveState.totalSupplyInterestFree);
80017
- const totalBorrow = borrowWithInterestNative.add(reserveState.totalBorrowInterestFree);
80018
- const idle = totalSupply.sub(totalBorrow);
80019
- return new BigNumber3__default.default(nativeToUi(idle.isNeg() ? "0" : idle.toString(), decimals)).times(
80020
- VENUE_AVAILABLE_LIQUIDITY_BUFFER
80021
- );
80022
- }
80023
- default:
80024
- return void 0;
80025
- }
80026
- }
80027
79793
 
80028
79794
  // src/services/bank/bank.service.ts
80029
79795
  async function freezeBankConfigIx(program, bankAddress, bankConfigOpt) {
@@ -82848,9 +82614,7 @@ var MarginfiAccountWrapper = class {
82848
82614
  assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,
82849
82615
  emodeImpactStatus: borrowImpact?.status,
82850
82616
  activePair: borrowImpact?.activePair,
82851
- volatilityFactor: opts?.volatilityFactor,
82852
- groupRateLimiter: this.client.group.rateLimiter,
82853
- ignoreBankLimits: opts?.ignoreBankLimits
82617
+ volatilityFactor: opts?.volatilityFactor
82854
82618
  });
82855
82619
  }
82856
82620
  /**
@@ -82868,26 +82632,7 @@ var MarginfiAccountWrapper = class {
82868
82632
  bankAddress,
82869
82633
  assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,
82870
82634
  activePair,
82871
- volatilityFactor: opts?.volatilityFactor,
82872
- groupRateLimiter: this.client.group.rateLimiter,
82873
- venueStates: this.client.bankIntegrationMap[bankAddress.toBase58()],
82874
- ignoreBankLimits: opts?.ignoreBankLimits
82875
- });
82876
- }
82877
- /**
82878
- * Computes max deposit for a bank with auto-injected client data.
82879
- *
82880
- * Bounded by the bank's remaining deposit cap and, if provided, the wallet balance.
82881
- *
82882
- * @param bankAddress - Bank address to check max deposit for
82883
- * @param opts - Optional wallet balance (UI units) to cap the result
82884
- */
82885
- computeMaxDepositForBank(bankAddress, opts) {
82886
- return this.account.computeMaxDepositForBank({
82887
- banksMap: this.client.bankMap,
82888
- bankAddress,
82889
- assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,
82890
- walletBalance: opts?.walletBalance
82635
+ volatilityFactor: opts?.volatilityFactor
82891
82636
  });
82892
82637
  }
82893
82638
  /**
@@ -83320,7 +83065,6 @@ exports.DEFAULT_ORACLE_MAX_AGE = DEFAULT_ORACLE_MAX_AGE;
83320
83065
  exports.DEFAULT_REPAY_ALL_EXTRA_BUFFER_BPS = DEFAULT_REPAY_ALL_EXTRA_BUFFER_BPS;
83321
83066
  exports.DISABLED_FLAG = DISABLED_FLAG;
83322
83067
  exports.EMPTY_HEALTH_CACHE = EMPTY_HEALTH_CACHE;
83323
- exports.EXECUTION_HEADROOM_SECONDS = EXECUTION_HEADROOM_SECONDS;
83324
83068
  exports.EmodeEntryFlags = EmodeEntryFlags;
83325
83069
  exports.EmodeFlags = EmodeFlags;
83326
83070
  exports.EmodeImpactStatus = EmodeImpactStatus;
@@ -83369,7 +83113,6 @@ exports.PYTH_SPONSORED_SHARD_ID = PYTH_SPONSORED_SHARD_ID;
83369
83113
  exports.PriceBias = PriceBias;
83370
83114
  exports.Project0Client = Project0Client;
83371
83115
  exports.RiskTier = RiskTier;
83372
- exports.SECONDS_PER_YEAR = SECONDS_PER_YEAR;
83373
83116
  exports.SINGLE_POOL_PROGRAM_ID = SINGLE_POOL_PROGRAM_ID;
83374
83117
  exports.STAKED_ORACLE_DISABLED_FLAG = STAKED_ORACLE_DISABLED_FLAG;
83375
83118
  exports.STAKED_ORACLE_USES_ONRAMP_FLAG = STAKED_ORACLE_USES_ONRAMP_FLAG;
@@ -83388,11 +83131,9 @@ exports.TransactionBuildingError = TransactionBuildingError;
83388
83131
  exports.TransactionBuildingErrorCode = TransactionBuildingErrorCode;
83389
83132
  exports.TransactionConfigMap = TransactionConfigMap;
83390
83133
  exports.TransactionType = TransactionType;
83391
- exports.U64_MAX = U64_MAX;
83392
83134
  exports.USDC_DECIMALS = USDC_DECIMALS;
83393
83135
  exports.USDC_MINT = USDC_MINT;
83394
83136
  exports.USDT_MINT = USDT_MINT;
83395
- exports.VENUE_AVAILABLE_LIQUIDITY_BUFFER = VENUE_AVAILABLE_LIQUIDITY_BUFFER;
83396
83137
  exports.WSOL_MINT = WSOL_MINT;
83397
83138
  exports.ZERO_ORACLE_KEY = ZERO_ORACLE_KEY;
83398
83139
  exports.accountConflictsWithBridgeBank = accountConflictsWithBridgeBank;
@@ -83428,19 +83169,15 @@ exports.compileFlashloanPrecheck = compileFlashloanPrecheck;
83428
83169
  exports.composeBridgedSwap = composeBridgedSwap;
83429
83170
  exports.composeRemainingAccounts = composeRemainingAccounts;
83430
83171
  exports.computeAccountValue = computeAccountValue;
83431
- exports.computeAccrualProjectionSeconds = computeAccrualProjectionSeconds;
83432
83172
  exports.computeActiveEmodePairs = computeActiveEmodePairs;
83433
83173
  exports.computeAssetHealthComponent = computeAssetHealthComponent;
83434
83174
  exports.computeAssetUsdValue = computeAssetUsdValue;
83435
83175
  exports.computeBalanceUsdValue = computeBalanceUsdValue;
83436
- exports.computeBankAvailableLiquidity = computeBankAvailableLiquidity;
83437
83176
  exports.computeBankBorrowApy = computeBankBorrowApy;
83438
83177
  exports.computeBankBorrowCapRemaining = computeBankBorrowCapRemaining;
83439
83178
  exports.computeBankDepositCapRemaining = computeBankDepositCapRemaining;
83440
83179
  exports.computeBankMetrics = computeBankMetrics;
83441
83180
  exports.computeBankPoolSize = computeBankPoolSize;
83442
- exports.computeBankProjectedAvailableLiquidity = computeBankProjectedAvailableLiquidity;
83443
- exports.computeBankRateLimitRemaining = computeBankRateLimitRemaining;
83444
83181
  exports.computeBankSupplyApy = computeBankSupplyApy;
83445
83182
  exports.computeBankTotalBorrows = computeBankTotalBorrows;
83446
83183
  exports.computeBankTotalBorrowsUsd = computeBankTotalBorrowsUsd;
@@ -83455,7 +83192,6 @@ exports.computeFlashLoanNonSwapBudget = computeFlashLoanNonSwapBudget;
83455
83192
  exports.computeFlashloanSwapConstraints = computeFlashloanSwapConstraints;
83456
83193
  exports.computeFreeCollateralFromBalances = computeFreeCollateralFromBalances;
83457
83194
  exports.computeFreeCollateralFromCache = computeFreeCollateralFromCache;
83458
- exports.computeGroupRateLimitRemainingUsd = computeGroupRateLimitRemainingUsd;
83459
83195
  exports.computeHealthAccountMetas = computeHealthAccountMetas;
83460
83196
  exports.computeHealthCacheStatus = computeHealthCacheStatus;
83461
83197
  exports.computeHealthCheckAccounts = computeHealthCheckAccounts;
@@ -83468,7 +83204,6 @@ exports.computeLiquidationPriceForBank = computeLiquidationPriceForBank;
83468
83204
  exports.computeLoopingParams = computeLoopingParams;
83469
83205
  exports.computeLowestEmodeWeights = computeLowestEmodeWeights;
83470
83206
  exports.computeMaxBorrowForBank = computeMaxBorrowForBank;
83471
- exports.computeMaxDepositForBank = computeMaxDepositForBank;
83472
83207
  exports.computeMaxLeverage = computeMaxLeverage;
83473
83208
  exports.computeMaxWithdrawForBank = computeMaxWithdrawForBank;
83474
83209
  exports.computeNetApy = computeNetApy;
@@ -83476,8 +83211,6 @@ exports.computeProjectedActiveBalancesNoCpi = computeProjectedActiveBalancesNoCp
83476
83211
  exports.computeProjectedActiveBanksNoCpi = computeProjectedActiveBanksNoCpi;
83477
83212
  exports.computeQuantity = computeQuantity;
83478
83213
  exports.computeQuantityUi = computeQuantityUi;
83479
- exports.computeRateLimitWindowRemainingCapacity = computeRateLimitWindowRemainingCapacity;
83480
- exports.computeRateLimiterRemainingCapacity = computeRateLimiterRemainingCapacity;
83481
83214
  exports.computeRemainingCapacity = computeRemainingCapacity;
83482
83215
  exports.computeSmartCrank = computeSmartCrank;
83483
83216
  exports.computeStakedBankMultipliers = computeStakedBankMultipliers;
@@ -83486,7 +83219,6 @@ exports.computeTvl = computeTvl;
83486
83219
  exports.computeUsdValue = computeUsdValue;
83487
83220
  exports.computeUtilizationRate = computeUtilizationRate;
83488
83221
  exports.computeV0TxSize = computeV0TxSize;
83489
- exports.computeVenueAvailableLiquidity = computeVenueAvailableLiquidity;
83490
83222
  exports.convertVoteAccCoeffsToBankCoeffs = convertVoteAccCoeffsToBankCoeffs;
83491
83223
  exports.createActiveEmodePairFromPairs = createActiveEmodePairFromPairs;
83492
83224
  exports.createEmptyBalance = createEmptyBalance;
@@ -83572,7 +83304,6 @@ exports.getConfig = getConfig;
83572
83304
  exports.getDriftCTokenMultiplier = getDriftCTokenMultiplier;
83573
83305
  exports.getDriftMetadata = getDriftMetadata;
83574
83306
  exports.getDriftStatesDto = getDriftStatesDto;
83575
- exports.getEffectiveDepositLimit = getEffectiveDepositLimit;
83576
83307
  exports.getEmodePairs = getEmodePairs;
83577
83308
  exports.getExactOutEstimate = getExactOutEstimate;
83578
83309
  exports.getFallbackPricesByFeedId = getFallbackPricesByFeedId;
@@ -83612,11 +83343,9 @@ exports.hasEmodeEntryFlag = hasEmodeEntryFlag;
83612
83343
  exports.hasEmodeFlag = hasEmodeFlag;
83613
83344
  exports.hasHealthCacheFlag = hasHealthCacheFlag;
83614
83345
  exports.healthCacheToDto = healthCacheToDto;
83615
- exports.isBorrowLimitActive = isBorrowLimitActive;
83616
83346
  exports.isBridgeConflictError = isBridgeConflictError;
83617
83347
  exports.isDecomposableSwapError = isDecomposableSwapError;
83618
83348
  exports.isDepositIx = isDepositIx;
83619
- exports.isDepositLimitActive = isDepositLimitActive;
83620
83349
  exports.isFlashloan = isFlashloan;
83621
83350
  exports.isGroupRateLimiterEnabled = isGroupRateLimiterEnabled;
83622
83351
  exports.isMarginfiV0110Live = isMarginfiV0110Live;