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

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
101
+ // Check how much you can borrow (account health + bank borrow cap + bank liquidity)
102
102
  const maxBorrow = wrappedAccount.computeMaxBorrowForBank(usdcBank.address);
103
103
  console.log(`Max borrow: $${maxBorrow.toString()}`);
104
104
 
@@ -289,9 +289,16 @@ const health = wrapped.computeHealthComponents(
289
289
  MarginRequirementType.Initial // or Maintenance
290
290
  );
291
291
 
292
- // Max amounts
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)
293
297
  const maxBorrow = wrapped.computeMaxBorrowForBank(bankAddress);
294
298
  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
295
302
  ```
296
303
 
297
304
  ## 🧪 Testing
package/dist/index.cjs CHANGED
@@ -73885,6 +73885,20 @@ var MarginfiAccount = class _MarginfiAccount {
73885
73885
  ...params
73886
73886
  });
73887
73887
  }
73888
+ /**
73889
+ * Calculates the maximum amount that can be deposited into a bank.
73890
+ *
73891
+ * Deposits are not constrained by account health, only by the bank's remaining deposit cap
73892
+ * and (optionally) the wallet balance.
73893
+ *
73894
+ * @param params - Configuration for max deposit computation
73895
+ * @returns Maximum depositable amount in UI units
73896
+ *
73897
+ * @see {@link computeMaxDepositForBank} for implementation details
73898
+ */
73899
+ computeMaxDepositForBank(params) {
73900
+ return computeMaxDepositForBank(params);
73901
+ }
73888
73902
  /**
73889
73903
  * Gets the banks required for health check calculations.
73890
73904
  *
@@ -77744,7 +77758,9 @@ function computeMaxBorrowForBank(params) {
77744
77758
  assetShareValueMultiplierByBank,
77745
77759
  emodeImpactStatus,
77746
77760
  volatilityFactor,
77747
- activePair
77761
+ activePair,
77762
+ groupRateLimiter,
77763
+ ignoreBankLimits
77748
77764
  } = params;
77749
77765
  const bank = banksMap.get(bankAddress.toBase58());
77750
77766
  if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);
@@ -77804,15 +77820,63 @@ function computeMaxBorrowForBank(params) {
77804
77820
  assetShareValueMultiplier
77805
77821
  });
77806
77822
  const liabWeight = getLiabilityWeight(bank.config, 0 /* Initial */);
77807
- if (assetWeight.eq(0)) {
77808
- return computeQuantityUi(balance, bank, assetShareValueMultiplier).assets.plus(
77809
- freeCollateral.minus(untiedCollateralForBank).div(priceHighestBias.times(liabWeight))
77810
- );
77811
- } else {
77812
- return untiedCollateralForBank.div(priceLowestBias.times(assetWeight)).plus(freeCollateral.minus(untiedCollateralForBank).div(priceHighestBias.times(liabWeight)));
77823
+ const originationFeeFactor = new BigNumber3__default.default(1).plus(
77824
+ bank.config.interestRateConfig.protocolOriginationFee
77825
+ );
77826
+ const liabPriceWeighted = priceHighestBias.times(liabWeight).times(originationFeeFactor);
77827
+ const healthMaxBorrow = assetWeight.eq(0) ? computeQuantityUi(balance, bank, assetShareValueMultiplier).assets.plus(
77828
+ freeCollateral.minus(untiedCollateralForBank).div(liabPriceWeighted)
77829
+ ) : untiedCollateralForBank.div(priceLowestBias.times(assetWeight)).plus(freeCollateral.minus(untiedCollateralForBank).div(liabPriceWeighted));
77830
+ if (ignoreBankLimits) return healthMaxBorrow;
77831
+ const borrowCapRemaining = new BigNumber3__default.default(computeBankBorrowCapRemaining(bank)).div(
77832
+ originationFeeFactor
77833
+ );
77834
+ const availableLiquidity = computeBankProjectedAvailableLiquidity(
77835
+ bank,
77836
+ assetShareValueMultiplier
77837
+ ).div(originationFeeFactor);
77838
+ const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77839
+ return BigNumber3__default.default.max(
77840
+ 0,
77841
+ BigNumber3__default.default.min(healthMaxBorrow, borrowCapRemaining, availableLiquidity, rateLimitRemaining)
77842
+ );
77843
+ }
77844
+ function computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter) {
77845
+ const nowSeconds = Date.now() / 1e3;
77846
+ let remaining = new BigNumber3__default.default(Infinity);
77847
+ const bankRemaining = computeBankRateLimitRemaining(bank, nowSeconds);
77848
+ if (bankRemaining !== null) remaining = BigNumber3__default.default.min(remaining, bankRemaining);
77849
+ const groupRemainingUsd = computeGroupRateLimitRemainingUsd(groupRateLimiter, nowSeconds);
77850
+ if (groupRemainingUsd !== null) {
77851
+ const price = getPrice(oraclePrice, 1 /* None */, false);
77852
+ if (price.gt(0)) remaining = BigNumber3__default.default.min(remaining, groupRemainingUsd.div(price));
77813
77853
  }
77854
+ return remaining;
77814
77855
  }
77815
77856
  function computeMaxWithdrawForBank(params) {
77857
+ const {
77858
+ banksMap,
77859
+ bankAddress,
77860
+ oraclePricesByBank,
77861
+ assetShareValueMultiplierByBank,
77862
+ groupRateLimiter,
77863
+ ignoreBankLimits
77864
+ } = params;
77865
+ const bank = banksMap.get(bankAddress.toBase58());
77866
+ if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);
77867
+ const healthMaxWithdraw = computeHealthMaxWithdrawForBank(params);
77868
+ if (ignoreBankLimits) return healthMaxWithdraw;
77869
+ const oraclePrice = oraclePricesByBank.get(bankAddress.toBase58());
77870
+ if (!oraclePrice) throw Error(`Oracle price for ${bankAddress.toBase58()} not found`);
77871
+ const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());
77872
+ const availableLiquidity = computeBankProjectedAvailableLiquidity(
77873
+ bank,
77874
+ assetShareValueMultiplier
77875
+ );
77876
+ const rateLimitRemaining = computeOutflowRateLimitRemaining(bank, oraclePrice, groupRateLimiter);
77877
+ return BigNumber3__default.default.max(0, BigNumber3__default.default.min(healthMaxWithdraw, availableLiquidity, rateLimitRemaining));
77878
+ }
77879
+ function computeHealthMaxWithdrawForBank(params) {
77816
77880
  const {
77817
77881
  account,
77818
77882
  banksMap,
@@ -77908,6 +77972,17 @@ function computeMaxWithdrawForBank(params) {
77908
77972
  const maxWithdraw = initUntiedCollateralForBank.div(initWeightedPrice);
77909
77973
  return maxWithdraw;
77910
77974
  }
77975
+ function computeMaxDepositForBank(params) {
77976
+ const { banksMap, bankAddress, assetShareValueMultiplierByBank, walletBalance } = params;
77977
+ const bank = banksMap.get(bankAddress.toBase58());
77978
+ if (!bank) throw Error(`Bank ${bankAddress.toBase58()} not found`);
77979
+ const assetShareValueMultiplier = assetShareValueMultiplierByBank?.get(bankAddress.toBase58());
77980
+ const depositCapRemaining = new BigNumber3__default.default(computeBankDepositCapRemaining(bank)).times(
77981
+ assetShareValueMultiplier ?? 1
77982
+ );
77983
+ if (walletBalance === void 0) return depositCapRemaining;
77984
+ return BigNumber3__default.default.max(0, BigNumber3__default.default.min(depositCapRemaining, new BigNumber3__default.default(walletBalance)));
77985
+ }
77911
77986
 
77912
77987
  // src/services/account/utils/misc.utils.ts
77913
77988
  function floor(value, decimals) {
@@ -79580,6 +79655,21 @@ var fetchMultipleBanks = async (program, opts) => {
79580
79655
  }
79581
79656
  return bankDatas;
79582
79657
  };
79658
+ var U64_MAX = new BigNumber3__default.default("18446744073709551615");
79659
+ var DRIFT_SCALED_BALANCE_DECIMALS = 9;
79660
+ function isDepositLimitActive(bank) {
79661
+ return !bank.config.depositLimit.eq(U64_MAX);
79662
+ }
79663
+ function isBorrowLimitActive(bank) {
79664
+ return !bank.config.borrowLimit.eq(U64_MAX);
79665
+ }
79666
+ function getEffectiveDepositLimit(bank) {
79667
+ const limit = bank.config.depositLimit;
79668
+ if (bank.config.assetTag !== 4 /* DRIFT */) return limit;
79669
+ const diff = DRIFT_SCALED_BALANCE_DECIMALS - bank.mintDecimals;
79670
+ if (diff === 0) return limit;
79671
+ return diff > 0 ? limit.times(10 ** diff) : limit.div(10 ** -diff);
79672
+ }
79583
79673
  function computeInterestRates(bank) {
79584
79674
  const { insuranceFeeFixedApr, insuranceIrFee, protocolFixedFeeApr, protocolIrFee } = bank.config.interestRateConfig;
79585
79675
  const fixedFee = insuranceFeeFixedApr.plus(protocolFixedFeeApr);
@@ -79674,25 +79764,34 @@ function computeUtilizationRate(bank) {
79674
79764
  return liabilities.div(assets);
79675
79765
  }
79676
79766
  var SECONDS_PER_DAY = 24 * 60 * 60;
79677
- var SECONDS_PER_YEAR = SECONDS_PER_DAY * 365.25;
79767
+ var SECONDS_PER_YEAR = SECONDS_PER_DAY * 365;
79768
+ var EXECUTION_HEADROOM_SECONDS = 120;
79769
+ function computeAccrualProjectionSeconds(bank, nowSeconds = Date.now() / 1e3) {
79770
+ const age = Math.max(0, nowSeconds - bank.lastUpdate);
79771
+ return Math.max(2 * age, age + EXECUTION_HEADROOM_SECONDS);
79772
+ }
79678
79773
  function computeRemainingCapacity(bank) {
79679
79774
  const totalDeposits = getTotalAssetQuantity(bank);
79680
- const remainingCapacity = BigNumber3__default.default.max(0, bank.config.depositLimit.minus(totalDeposits));
79775
+ const remainingCapacity = isDepositLimitActive(bank) ? BigNumber3__default.default.max(
79776
+ 0,
79777
+ getEffectiveDepositLimit(bank).minus(totalDeposits).minus(1).integerValue(BigNumber3__default.default.ROUND_FLOOR)
79778
+ ) : U64_MAX;
79681
79779
  const totalBorrows = getTotalLiabilityQuantity(bank);
79682
- const remainingBorrowCapacity = BigNumber3__default.default.max(0, bank.config.borrowLimit.minus(totalBorrows));
79683
- const durationSinceLastAccrual = Date.now() / 1e3 - bank.lastUpdate;
79780
+ const remainingBorrowCapacity = isBorrowLimitActive(bank) ? BigNumber3__default.default.max(
79781
+ 0,
79782
+ bank.config.borrowLimit.minus(totalBorrows).minus(1).integerValue(BigNumber3__default.default.ROUND_FLOOR)
79783
+ ) : U64_MAX;
79784
+ const projectionSeconds = computeAccrualProjectionSeconds(bank);
79684
79785
  const { lendingRate, borrowingRate } = computeInterestRates(bank);
79685
- const outstandingLendingInterest = lendingRate.times(durationSinceLastAccrual).dividedBy(SECONDS_PER_YEAR).times(totalDeposits);
79686
- const outstandingBorrowInterest = borrowingRate.times(durationSinceLastAccrual).dividedBy(SECONDS_PER_YEAR).times(totalBorrows);
79687
- const depositCapacity = remainingCapacity.minus(outstandingLendingInterest.times(2));
79688
- const borrowCapacity = remainingBorrowCapacity.minus(outstandingBorrowInterest.times(2));
79786
+ const projectedLendingInterest = lendingRate.times(projectionSeconds).dividedBy(SECONDS_PER_YEAR).times(totalDeposits);
79787
+ const projectedBorrowInterest = borrowingRate.times(projectionSeconds).dividedBy(SECONDS_PER_YEAR).times(totalBorrows);
79788
+ const depositCapacity = remainingCapacity.minus(projectedLendingInterest);
79789
+ const borrowCapacity = remainingBorrowCapacity.minus(projectedBorrowInterest);
79689
79790
  return {
79690
79791
  depositCapacity,
79691
79792
  borrowCapacity
79692
79793
  };
79693
79794
  }
79694
-
79695
- // src/services/bank/utils/bank-metrics.utils.ts
79696
79795
  function isStandardBorrowable(bank) {
79697
79796
  const { assetTag, operationalState, borrowLimit } = bank.config;
79698
79797
  return (assetTag === 0 /* DEFAULT */ || assetTag === 1 /* SOL */) && operationalState === "Operational" /* Operational */ && borrowLimit.gt(0);
@@ -79702,9 +79801,7 @@ function isStandardDepositable(bank) {
79702
79801
  return (assetTag === 0 /* DEFAULT */ || assetTag === 1 /* SOL */) && operationalState === "Operational" /* Operational */;
79703
79802
  }
79704
79803
  function computeBankTotalDeposits(bank, assetShareValueMultiplier) {
79705
- const totalAssets = getTotalAssetQuantity(bank).times(
79706
- assetShareValueMultiplier ?? 1
79707
- );
79804
+ const totalAssets = getTotalAssetQuantity(bank).times(assetShareValueMultiplier ?? 1);
79708
79805
  return nativeToUi(totalAssets, bank.mintDecimals);
79709
79806
  }
79710
79807
  function computeBankTotalBorrows(bank) {
@@ -79735,14 +79832,35 @@ function computeBankPoolSize(bank, assetShareValueMultiplier) {
79735
79832
  const borrowCap = nativeToUi(bank.config.borrowLimit, bank.mintDecimals);
79736
79833
  return Math.max(0, Math.min(totalDeposits, borrowCap) - totalBorrows);
79737
79834
  }
79835
+ function computeBankAvailableLiquidity(bank, assetShareValueMultiplier) {
79836
+ const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);
79837
+ const totalBorrows = computeBankTotalBorrows(bank);
79838
+ return BigNumber3__default.default.max(0, new BigNumber3__default.default(totalDeposits).minus(totalBorrows));
79839
+ }
79738
79840
  function computeBankDepositCapRemaining(bank) {
79841
+ if (!isDepositLimitActive(bank)) return Infinity;
79739
79842
  const { depositCapacity } = computeRemainingCapacity(bank);
79740
79843
  return Math.max(0, nativeToUi(depositCapacity, bank.mintDecimals));
79741
79844
  }
79742
79845
  function computeBankBorrowCapRemaining(bank) {
79846
+ if (!isBorrowLimitActive(bank)) return Infinity;
79743
79847
  const { borrowCapacity } = computeRemainingCapacity(bank);
79744
79848
  return Math.max(0, nativeToUi(borrowCapacity, bank.mintDecimals));
79745
79849
  }
79850
+ function computeBankProjectedAvailableLiquidity(bank, assetShareValueMultiplier) {
79851
+ const liquidity = computeBankAvailableLiquidity(bank, assetShareValueMultiplier);
79852
+ const totalDeposits = computeBankTotalDeposits(bank, assetShareValueMultiplier);
79853
+ const totalBorrows = computeBankTotalBorrows(bank);
79854
+ const projectionYears = computeAccrualProjectionSeconds(bank) / SECONDS_PER_YEAR;
79855
+ const { lendingRate, borrowingRate } = computeInterestRates(bank);
79856
+ const projectedBorrowInterest = borrowingRate.times(totalBorrows).times(projectionYears);
79857
+ const projectedLendingInterest = lendingRate.times(totalDeposits).times(projectionYears);
79858
+ const liquidityLostToAccrual = BigNumber3__default.default.max(
79859
+ 0,
79860
+ projectedBorrowInterest.minus(projectedLendingInterest)
79861
+ );
79862
+ return BigNumber3__default.default.max(0, liquidity.minus(liquidityLostToAccrual));
79863
+ }
79746
79864
  function computeBankSupplyApy(bank) {
79747
79865
  return aprToApy(computeInterestRates(bank).lendingRate.toNumber());
79748
79866
  }
@@ -79755,11 +79873,7 @@ function computeBankMetrics(params) {
79755
79873
  symbol,
79756
79874
  totalDeposits: computeBankTotalDeposits(bank, assetShareValueMultiplier),
79757
79875
  totalBorrows: computeBankTotalBorrows(bank),
79758
- totalDepositsUsd: computeBankTotalDepositsUsd(
79759
- bank,
79760
- oraclePrice,
79761
- assetShareValueMultiplier
79762
- ),
79876
+ totalDepositsUsd: computeBankTotalDepositsUsd(bank, oraclePrice, assetShareValueMultiplier),
79763
79877
  totalBorrowsUsd: computeBankTotalBorrowsUsd(bank, oraclePrice),
79764
79878
  utilizationRate: computeUtilizationRate(bank).toNumber(),
79765
79879
  poolSize: computeBankPoolSize(bank, assetShareValueMultiplier),
@@ -79787,6 +79901,47 @@ function requireTokenProgram(tokenProgramsByBank, address, makeError = (message)
79787
79901
  }
79788
79902
  return tokenProgram;
79789
79903
  }
79904
+ function computeRateLimitWindowRemainingCapacity(window, nowSeconds) {
79905
+ const { maxOutflow, windowDuration } = window;
79906
+ if (maxOutflow.lte(0)) return null;
79907
+ if (windowDuration === 0) return maxOutflow;
79908
+ let { windowStart, prevWindowOutflow, curWindowOutflow } = window;
79909
+ const elapsedRaw = Math.floor(nowSeconds) - windowStart;
79910
+ if (elapsedRaw >= windowDuration * 2) {
79911
+ windowStart = Math.floor(nowSeconds);
79912
+ prevWindowOutflow = new BigNumber3__default.default(0);
79913
+ curWindowOutflow = new BigNumber3__default.default(0);
79914
+ } else if (elapsedRaw >= windowDuration) {
79915
+ windowStart = windowStart + windowDuration;
79916
+ prevWindowOutflow = curWindowOutflow;
79917
+ curWindowOutflow = new BigNumber3__default.default(0);
79918
+ }
79919
+ const elapsed = Math.floor(nowSeconds) - windowStart;
79920
+ if (elapsed < 0) return new BigNumber3__default.default(0);
79921
+ if (elapsed >= windowDuration) return maxOutflow;
79922
+ const remainingTime = windowDuration - elapsed;
79923
+ const weightedPrev = prevWindowOutflow.abs().times(remainingTime).idiv(windowDuration).times(prevWindowOutflow.isNegative() ? -1 : 1);
79924
+ const totalNetOutflow = weightedPrev.plus(curWindowOutflow);
79925
+ return maxOutflow.minus(totalNetOutflow);
79926
+ }
79927
+ function computeRateLimiterRemainingCapacity(rateLimiter, nowSeconds) {
79928
+ if (!rateLimiter) return null;
79929
+ const hourly = computeRateLimitWindowRemainingCapacity(rateLimiter.hourly, nowSeconds);
79930
+ const daily = computeRateLimitWindowRemainingCapacity(rateLimiter.daily, nowSeconds);
79931
+ if (hourly === null) return daily;
79932
+ if (daily === null) return hourly;
79933
+ return BigNumber3__default.default.min(hourly, daily);
79934
+ }
79935
+ function computeBankRateLimitRemaining(bank, nowSeconds = Date.now() / 1e3) {
79936
+ const remaining = computeRateLimiterRemainingCapacity(bank.rateLimiter, nowSeconds);
79937
+ if (remaining === null) return null;
79938
+ return BigNumber3__default.default.max(0, nativeToUi(remaining, bank.mintDecimals));
79939
+ }
79940
+ function computeGroupRateLimitRemainingUsd(rateLimiter, nowSeconds = Date.now() / 1e3) {
79941
+ const remaining = computeRateLimiterRemainingCapacity(rateLimiter, nowSeconds);
79942
+ if (remaining === null) return null;
79943
+ return BigNumber3__default.default.max(0, remaining);
79944
+ }
79790
79945
 
79791
79946
  // src/services/bank/bank.service.ts
79792
79947
  async function freezeBankConfigIx(program, bankAddress, bankConfigOpt) {
@@ -82611,7 +82766,9 @@ var MarginfiAccountWrapper = class {
82611
82766
  assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,
82612
82767
  emodeImpactStatus: borrowImpact?.status,
82613
82768
  activePair: borrowImpact?.activePair,
82614
- volatilityFactor: opts?.volatilityFactor
82769
+ volatilityFactor: opts?.volatilityFactor,
82770
+ groupRateLimiter: this.client.group.rateLimiter,
82771
+ ignoreBankLimits: opts?.ignoreBankLimits
82615
82772
  });
82616
82773
  }
82617
82774
  /**
@@ -82629,7 +82786,25 @@ var MarginfiAccountWrapper = class {
82629
82786
  bankAddress,
82630
82787
  assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,
82631
82788
  activePair,
82632
- volatilityFactor: opts?.volatilityFactor
82789
+ volatilityFactor: opts?.volatilityFactor,
82790
+ groupRateLimiter: this.client.group.rateLimiter,
82791
+ ignoreBankLimits: opts?.ignoreBankLimits
82792
+ });
82793
+ }
82794
+ /**
82795
+ * Computes max deposit for a bank with auto-injected client data.
82796
+ *
82797
+ * Bounded by the bank's remaining deposit cap and, if provided, the wallet balance.
82798
+ *
82799
+ * @param bankAddress - Bank address to check max deposit for
82800
+ * @param opts - Optional wallet balance (UI units) to cap the result
82801
+ */
82802
+ computeMaxDepositForBank(bankAddress, opts) {
82803
+ return this.account.computeMaxDepositForBank({
82804
+ banksMap: this.client.bankMap,
82805
+ bankAddress,
82806
+ assetShareValueMultiplierByBank: this.client.assetShareValueMultiplierByBank,
82807
+ walletBalance: opts?.walletBalance
82633
82808
  });
82634
82809
  }
82635
82810
  /**
@@ -83062,6 +83237,7 @@ exports.DEFAULT_ORACLE_MAX_AGE = DEFAULT_ORACLE_MAX_AGE;
83062
83237
  exports.DEFAULT_REPAY_ALL_EXTRA_BUFFER_BPS = DEFAULT_REPAY_ALL_EXTRA_BUFFER_BPS;
83063
83238
  exports.DISABLED_FLAG = DISABLED_FLAG;
83064
83239
  exports.EMPTY_HEALTH_CACHE = EMPTY_HEALTH_CACHE;
83240
+ exports.EXECUTION_HEADROOM_SECONDS = EXECUTION_HEADROOM_SECONDS;
83065
83241
  exports.EmodeEntryFlags = EmodeEntryFlags;
83066
83242
  exports.EmodeFlags = EmodeFlags;
83067
83243
  exports.EmodeImpactStatus = EmodeImpactStatus;
@@ -83110,6 +83286,7 @@ exports.PYTH_SPONSORED_SHARD_ID = PYTH_SPONSORED_SHARD_ID;
83110
83286
  exports.PriceBias = PriceBias;
83111
83287
  exports.Project0Client = Project0Client;
83112
83288
  exports.RiskTier = RiskTier;
83289
+ exports.SECONDS_PER_YEAR = SECONDS_PER_YEAR;
83113
83290
  exports.SINGLE_POOL_PROGRAM_ID = SINGLE_POOL_PROGRAM_ID;
83114
83291
  exports.STAKED_ORACLE_DISABLED_FLAG = STAKED_ORACLE_DISABLED_FLAG;
83115
83292
  exports.STAKED_ORACLE_USES_ONRAMP_FLAG = STAKED_ORACLE_USES_ONRAMP_FLAG;
@@ -83128,6 +83305,7 @@ exports.TransactionBuildingError = TransactionBuildingError;
83128
83305
  exports.TransactionBuildingErrorCode = TransactionBuildingErrorCode;
83129
83306
  exports.TransactionConfigMap = TransactionConfigMap;
83130
83307
  exports.TransactionType = TransactionType;
83308
+ exports.U64_MAX = U64_MAX;
83131
83309
  exports.USDC_DECIMALS = USDC_DECIMALS;
83132
83310
  exports.USDC_MINT = USDC_MINT;
83133
83311
  exports.USDT_MINT = USDT_MINT;
@@ -83166,15 +83344,19 @@ exports.compileFlashloanPrecheck = compileFlashloanPrecheck;
83166
83344
  exports.composeBridgedSwap = composeBridgedSwap;
83167
83345
  exports.composeRemainingAccounts = composeRemainingAccounts;
83168
83346
  exports.computeAccountValue = computeAccountValue;
83347
+ exports.computeAccrualProjectionSeconds = computeAccrualProjectionSeconds;
83169
83348
  exports.computeActiveEmodePairs = computeActiveEmodePairs;
83170
83349
  exports.computeAssetHealthComponent = computeAssetHealthComponent;
83171
83350
  exports.computeAssetUsdValue = computeAssetUsdValue;
83172
83351
  exports.computeBalanceUsdValue = computeBalanceUsdValue;
83352
+ exports.computeBankAvailableLiquidity = computeBankAvailableLiquidity;
83173
83353
  exports.computeBankBorrowApy = computeBankBorrowApy;
83174
83354
  exports.computeBankBorrowCapRemaining = computeBankBorrowCapRemaining;
83175
83355
  exports.computeBankDepositCapRemaining = computeBankDepositCapRemaining;
83176
83356
  exports.computeBankMetrics = computeBankMetrics;
83177
83357
  exports.computeBankPoolSize = computeBankPoolSize;
83358
+ exports.computeBankProjectedAvailableLiquidity = computeBankProjectedAvailableLiquidity;
83359
+ exports.computeBankRateLimitRemaining = computeBankRateLimitRemaining;
83178
83360
  exports.computeBankSupplyApy = computeBankSupplyApy;
83179
83361
  exports.computeBankTotalBorrows = computeBankTotalBorrows;
83180
83362
  exports.computeBankTotalBorrowsUsd = computeBankTotalBorrowsUsd;
@@ -83189,6 +83371,7 @@ exports.computeFlashLoanNonSwapBudget = computeFlashLoanNonSwapBudget;
83189
83371
  exports.computeFlashloanSwapConstraints = computeFlashloanSwapConstraints;
83190
83372
  exports.computeFreeCollateralFromBalances = computeFreeCollateralFromBalances;
83191
83373
  exports.computeFreeCollateralFromCache = computeFreeCollateralFromCache;
83374
+ exports.computeGroupRateLimitRemainingUsd = computeGroupRateLimitRemainingUsd;
83192
83375
  exports.computeHealthAccountMetas = computeHealthAccountMetas;
83193
83376
  exports.computeHealthCacheStatus = computeHealthCacheStatus;
83194
83377
  exports.computeHealthCheckAccounts = computeHealthCheckAccounts;
@@ -83201,6 +83384,7 @@ exports.computeLiquidationPriceForBank = computeLiquidationPriceForBank;
83201
83384
  exports.computeLoopingParams = computeLoopingParams;
83202
83385
  exports.computeLowestEmodeWeights = computeLowestEmodeWeights;
83203
83386
  exports.computeMaxBorrowForBank = computeMaxBorrowForBank;
83387
+ exports.computeMaxDepositForBank = computeMaxDepositForBank;
83204
83388
  exports.computeMaxLeverage = computeMaxLeverage;
83205
83389
  exports.computeMaxWithdrawForBank = computeMaxWithdrawForBank;
83206
83390
  exports.computeNetApy = computeNetApy;
@@ -83208,6 +83392,8 @@ exports.computeProjectedActiveBalancesNoCpi = computeProjectedActiveBalancesNoCp
83208
83392
  exports.computeProjectedActiveBanksNoCpi = computeProjectedActiveBanksNoCpi;
83209
83393
  exports.computeQuantity = computeQuantity;
83210
83394
  exports.computeQuantityUi = computeQuantityUi;
83395
+ exports.computeRateLimitWindowRemainingCapacity = computeRateLimitWindowRemainingCapacity;
83396
+ exports.computeRateLimiterRemainingCapacity = computeRateLimiterRemainingCapacity;
83211
83397
  exports.computeRemainingCapacity = computeRemainingCapacity;
83212
83398
  exports.computeSmartCrank = computeSmartCrank;
83213
83399
  exports.computeStakedBankMultipliers = computeStakedBankMultipliers;
@@ -83301,6 +83487,7 @@ exports.getConfig = getConfig;
83301
83487
  exports.getDriftCTokenMultiplier = getDriftCTokenMultiplier;
83302
83488
  exports.getDriftMetadata = getDriftMetadata;
83303
83489
  exports.getDriftStatesDto = getDriftStatesDto;
83490
+ exports.getEffectiveDepositLimit = getEffectiveDepositLimit;
83304
83491
  exports.getEmodePairs = getEmodePairs;
83305
83492
  exports.getExactOutEstimate = getExactOutEstimate;
83306
83493
  exports.getFallbackPricesByFeedId = getFallbackPricesByFeedId;
@@ -83340,9 +83527,11 @@ exports.hasEmodeEntryFlag = hasEmodeEntryFlag;
83340
83527
  exports.hasEmodeFlag = hasEmodeFlag;
83341
83528
  exports.hasHealthCacheFlag = hasHealthCacheFlag;
83342
83529
  exports.healthCacheToDto = healthCacheToDto;
83530
+ exports.isBorrowLimitActive = isBorrowLimitActive;
83343
83531
  exports.isBridgeConflictError = isBridgeConflictError;
83344
83532
  exports.isDecomposableSwapError = isDecomposableSwapError;
83345
83533
  exports.isDepositIx = isDepositIx;
83534
+ exports.isDepositLimitActive = isDepositLimitActive;
83346
83535
  exports.isFlashloan = isFlashloan;
83347
83536
  exports.isGroupRateLimiterEnabled = isGroupRateLimiterEnabled;
83348
83537
  exports.isMarginfiV0110Live = isMarginfiV0110Live;