@gearbox-protocol/sdk 14.10.1 → 14.10.2-next.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.
Files changed (206) hide show
  1. package/dist/cjs/common-utils/test-utils/index.js +139 -0
  2. package/dist/cjs/common-utils/utils/apy/calculate-borrow-rate-from-utilization.js +59 -0
  3. package/dist/cjs/common-utils/utils/apy/calculate-borrow-rate-from-utilization.spec.js +32 -0
  4. package/dist/cjs/common-utils/utils/apy/calculate-earnings.js +59 -0
  5. package/dist/cjs/common-utils/utils/apy/calculate-earnings.spec.js +62 -0
  6. package/dist/cjs/common-utils/utils/apy/calculate-safe-borrow-rate.js +55 -0
  7. package/dist/cjs/common-utils/utils/apy/calculate-safe-borrow-rate.spec.js +39 -0
  8. package/dist/cjs/common-utils/utils/apy/get-safe-base-borrow-rate.js +38 -0
  9. package/dist/cjs/common-utils/utils/constants.js +34 -0
  10. package/dist/cjs/common-utils/utils/strategies/assets/assets.js +30 -0
  11. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-cm-allowed-collaterals.js +62 -0
  12. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-cm-allowed-collaterals.spec.js +109 -0
  13. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.js +75 -0
  14. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.spec.js +93 -0
  15. package/dist/cjs/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.js +63 -0
  16. package/dist/cjs/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.spec.js +330 -0
  17. package/dist/cjs/common-utils/utils/strategies/leverage/get-collateral-by-debt.js +34 -0
  18. package/dist/cjs/common-utils/utils/strategies/leverage/get-collateral-by-debt.spec.js +30 -0
  19. package/dist/cjs/common-utils/utils/strategies/leverage/get-recommended-debt.js +85 -0
  20. package/dist/cjs/common-utils/utils/strategies/leverage/get-recommended-debt.spec.js +227 -0
  21. package/dist/cjs/common-utils/utils/strategies/leverage/get-recommended-leverage-factor.js +33 -0
  22. package/dist/cjs/common-utils/utils/strategies/leverage/get-recommended-leverage-factor.spec.js +23 -0
  23. package/dist/cjs/common-utils/utils/strategies/leverage/max-leverage.js +2 -2
  24. package/dist/cjs/common-utils/utils/strategies/strategy-info/calculate-total-apy.js +112 -0
  25. package/dist/cjs/common-utils/utils/strategies/strategy-info/calculate-total-apy.spec.js +183 -0
  26. package/dist/cjs/common-utils/utils/strategies/strategy-info/calculate-total-points.js +74 -0
  27. package/dist/cjs/common-utils/utils/strategies/strategy-info/calculate-total-points.spec.js +131 -0
  28. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.js +410 -0
  29. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.spec.js +274 -0
  30. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-strategy-you-can-earn.js +108 -0
  31. package/dist/cjs/common-utils/utils/strategies/tokens/add-amount-in-target.js +41 -0
  32. package/dist/cjs/common-utils/utils/strategies/tokens/add-amount-in-target.spec.js +38 -0
  33. package/dist/cjs/common-utils/utils/strategies/tokens/get-chain-phantom-tokens.js +35 -0
  34. package/dist/cjs/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.js +42 -0
  35. package/dist/cjs/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.spec.js +32 -0
  36. package/dist/cjs/common-utils/utils/strategies/tokens/get-native-token-address.js +31 -0
  37. package/dist/cjs/common-utils/utils/strategies/tokens/is-apy-with-points-exception.js +36 -0
  38. package/dist/cjs/common-utils/utils/strategies/tokens/is-collateral-token.js +59 -0
  39. package/dist/cjs/common-utils/utils/strategies/tokens/is-collateral-token.spec.js +135 -0
  40. package/dist/cjs/common-utils/utils/strategies/tokens/is-obtainable-token.js +42 -0
  41. package/dist/cjs/common-utils/utils/strategies/tokens/is-obtainable-token.spec.js +162 -0
  42. package/dist/cjs/common-utils/utils/strategies/tokens/is-valid-extra-collateral-token.js +51 -0
  43. package/dist/cjs/common-utils/utils/strategies/tokens/wrap-token-address.js +33 -0
  44. package/dist/cjs/common-utils/utils/strategies/tokens/wrap-token-address.spec.js +13 -0
  45. package/dist/cjs/common-utils/utils/strategies/types/strategy-data.js +16 -0
  46. package/dist/cjs/common-utils/utils/strategies/types/strategy-earnings.js +16 -0
  47. package/dist/cjs/common-utils/utils/validation/is-zero-balance.js +30 -0
  48. package/dist/cjs/common-utils/utils/validation/validate-balance.js +47 -0
  49. package/dist/cjs/common-utils/utils/validation/validate-balance.spec.js +52 -0
  50. package/dist/cjs/common-utils/utils/validation/validate-balances.js +44 -0
  51. package/dist/cjs/common-utils/utils/validation/validate-balances.spec.js +37 -0
  52. package/dist/cjs/common-utils/utils/validation/validate-credit-manager.js +34 -0
  53. package/dist/cjs/common-utils/utils/validation/validate-credit-manager.spec.js +36 -0
  54. package/dist/cjs/common-utils/utils/validation/validate-hf.js +38 -0
  55. package/dist/cjs/common-utils/utils/validation/validate-hf.spec.js +24 -0
  56. package/dist/cjs/common-utils/utils/validation/validate-open-account-pool-quota-status.js +37 -0
  57. package/dist/cjs/common-utils/utils/validation/validate-open-account-pool-quota-status.spec.js +43 -0
  58. package/dist/cjs/common-utils/utils/validation/validate-open-account-pool-status.js +76 -0
  59. package/dist/cjs/common-utils/utils/validation/validate-open-account-pool-status.spec.js +98 -0
  60. package/dist/cjs/common-utils/utils/validation/validate-open-account.js +41 -0
  61. package/dist/cjs/common-utils/utils/validation/validate-open-account.spec.js +54 -0
  62. package/dist/cjs/common-utils/utils/validation/validate-quota.js +49 -0
  63. package/dist/cjs/common-utils/utils/validation/validate-quota.spec.js +79 -0
  64. package/dist/cjs/common-utils/utils/validation/validate-token-to-obtain.js +42 -0
  65. package/dist/cjs/common-utils/utils/validation/validate-token-to-obtain.spec.js +35 -0
  66. package/dist/cjs/common-utils/utils/validation/validation-types.js +16 -0
  67. package/dist/cjs/sdk/constants/math.js +3 -0
  68. package/dist/esm/common-utils/test-utils/index.js +104 -0
  69. package/dist/esm/common-utils/utils/apy/calculate-borrow-rate-from-utilization.js +35 -0
  70. package/dist/esm/common-utils/utils/apy/calculate-borrow-rate-from-utilization.spec.js +31 -0
  71. package/dist/esm/common-utils/utils/apy/calculate-earnings.js +35 -0
  72. package/dist/esm/common-utils/utils/apy/calculate-earnings.spec.js +65 -0
  73. package/dist/esm/common-utils/utils/apy/calculate-safe-borrow-rate.js +34 -0
  74. package/dist/esm/common-utils/utils/apy/calculate-safe-borrow-rate.spec.js +38 -0
  75. package/dist/esm/common-utils/utils/apy/get-safe-base-borrow-rate.js +16 -0
  76. package/dist/esm/common-utils/utils/constants.js +8 -0
  77. package/dist/esm/common-utils/utils/strategies/assets/assets.js +6 -0
  78. package/dist/esm/common-utils/utils/strategies/credit-managers/get-cm-allowed-collaterals.js +38 -0
  79. package/dist/esm/common-utils/utils/strategies/credit-managers/get-cm-allowed-collaterals.spec.js +115 -0
  80. package/dist/esm/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.js +51 -0
  81. package/dist/esm/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.spec.js +96 -0
  82. package/dist/esm/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.js +42 -0
  83. package/dist/esm/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.spec.js +332 -0
  84. package/dist/esm/common-utils/utils/strategies/leverage/get-collateral-by-debt.js +10 -0
  85. package/dist/esm/common-utils/utils/strategies/leverage/get-collateral-by-debt.spec.js +29 -0
  86. package/dist/esm/common-utils/utils/strategies/leverage/get-recommended-debt.js +61 -0
  87. package/dist/esm/common-utils/utils/strategies/leverage/get-recommended-debt.spec.js +226 -0
  88. package/dist/esm/common-utils/utils/strategies/leverage/get-recommended-leverage-factor.js +9 -0
  89. package/dist/esm/common-utils/utils/strategies/leverage/get-recommended-leverage-factor.spec.js +22 -0
  90. package/dist/esm/common-utils/utils/strategies/leverage/max-leverage.js +2 -2
  91. package/dist/esm/common-utils/utils/strategies/strategy-info/calculate-total-apy.js +88 -0
  92. package/dist/esm/common-utils/utils/strategies/strategy-info/calculate-total-apy.spec.js +187 -0
  93. package/dist/esm/common-utils/utils/strategies/strategy-info/calculate-total-points.js +54 -0
  94. package/dist/esm/common-utils/utils/strategies/strategy-info/calculate-total-points.spec.js +139 -0
  95. package/dist/esm/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.js +389 -0
  96. package/dist/esm/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.spec.js +278 -0
  97. package/dist/esm/common-utils/utils/strategies/strategy-info/get-strategy-you-can-earn.js +84 -0
  98. package/dist/esm/common-utils/utils/strategies/tokens/add-amount-in-target.js +17 -0
  99. package/dist/esm/common-utils/utils/strategies/tokens/add-amount-in-target.spec.js +41 -0
  100. package/dist/esm/common-utils/utils/strategies/tokens/get-chain-phantom-tokens.js +11 -0
  101. package/dist/esm/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.js +18 -0
  102. package/dist/esm/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.spec.js +36 -0
  103. package/dist/esm/common-utils/utils/strategies/tokens/get-native-token-address.js +7 -0
  104. package/dist/esm/common-utils/utils/strategies/tokens/is-apy-with-points-exception.js +11 -0
  105. package/dist/esm/common-utils/utils/strategies/tokens/is-collateral-token.js +35 -0
  106. package/dist/esm/common-utils/utils/strategies/tokens/is-collateral-token.spec.js +137 -0
  107. package/dist/esm/common-utils/utils/strategies/tokens/is-obtainable-token.js +18 -0
  108. package/dist/esm/common-utils/utils/strategies/tokens/is-obtainable-token.spec.js +161 -0
  109. package/dist/esm/common-utils/utils/strategies/tokens/is-valid-extra-collateral-token.js +27 -0
  110. package/dist/esm/common-utils/utils/strategies/tokens/wrap-token-address.js +9 -0
  111. package/dist/esm/common-utils/utils/strategies/tokens/wrap-token-address.spec.js +12 -0
  112. package/dist/esm/common-utils/utils/strategies/types/strategy-data.js +0 -0
  113. package/dist/esm/common-utils/utils/strategies/types/strategy-earnings.js +0 -0
  114. package/dist/esm/common-utils/utils/validation/is-zero-balance.js +6 -0
  115. package/dist/esm/common-utils/utils/validation/validate-balance.js +23 -0
  116. package/dist/esm/common-utils/utils/validation/validate-balance.spec.js +51 -0
  117. package/dist/esm/common-utils/utils/validation/validate-balances.js +20 -0
  118. package/dist/esm/common-utils/utils/validation/validate-balances.spec.js +36 -0
  119. package/dist/esm/common-utils/utils/validation/validate-credit-manager.js +10 -0
  120. package/dist/esm/common-utils/utils/validation/validate-credit-manager.spec.js +35 -0
  121. package/dist/esm/common-utils/utils/validation/validate-hf.js +13 -0
  122. package/dist/esm/common-utils/utils/validation/validate-hf.spec.js +23 -0
  123. package/dist/esm/common-utils/utils/validation/validate-open-account-pool-quota-status.js +13 -0
  124. package/dist/esm/common-utils/utils/validation/validate-open-account-pool-quota-status.spec.js +46 -0
  125. package/dist/esm/common-utils/utils/validation/validate-open-account-pool-status.js +54 -0
  126. package/dist/esm/common-utils/utils/validation/validate-open-account-pool-status.spec.js +102 -0
  127. package/dist/esm/common-utils/utils/validation/validate-open-account.js +17 -0
  128. package/dist/esm/common-utils/utils/validation/validate-open-account.spec.js +56 -0
  129. package/dist/esm/common-utils/utils/validation/validate-quota.js +25 -0
  130. package/dist/esm/common-utils/utils/validation/validate-quota.spec.js +83 -0
  131. package/dist/esm/common-utils/utils/validation/validate-token-to-obtain.js +18 -0
  132. package/dist/esm/common-utils/utils/validation/validate-token-to-obtain.spec.js +34 -0
  133. package/dist/esm/common-utils/utils/validation/validation-types.js +0 -0
  134. package/dist/esm/sdk/constants/math.js +2 -0
  135. package/dist/types/common-utils/test-utils/index.d.ts +16 -0
  136. package/dist/types/common-utils/utils/apy/calculate-borrow-rate-from-utilization.d.ts +2 -0
  137. package/dist/types/common-utils/utils/apy/calculate-borrow-rate-from-utilization.spec.d.ts +1 -0
  138. package/dist/types/common-utils/utils/apy/calculate-earnings.d.ts +16 -0
  139. package/dist/types/common-utils/utils/apy/calculate-earnings.spec.d.ts +1 -0
  140. package/dist/types/common-utils/utils/apy/calculate-safe-borrow-rate.d.ts +11 -0
  141. package/dist/types/common-utils/utils/apy/calculate-safe-borrow-rate.spec.d.ts +1 -0
  142. package/dist/types/common-utils/utils/apy/get-safe-base-borrow-rate.d.ts +4 -0
  143. package/dist/types/common-utils/utils/constants.d.ts +4 -0
  144. package/dist/types/common-utils/utils/strategies/assets/assets.d.ts +3 -0
  145. package/dist/types/common-utils/utils/strategies/credit-managers/get-cm-allowed-collaterals.d.ts +20 -0
  146. package/dist/types/common-utils/utils/strategies/credit-managers/get-cm-allowed-collaterals.spec.d.ts +1 -0
  147. package/dist/types/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.d.ts +13 -0
  148. package/dist/types/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.spec.d.ts +1 -0
  149. package/dist/types/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.d.ts +11 -0
  150. package/dist/types/common-utils/utils/strategies/leverage/calculate-max-strategy-debt.spec.d.ts +1 -0
  151. package/dist/types/common-utils/utils/strategies/leverage/get-collateral-by-debt.d.ts +2 -0
  152. package/dist/types/common-utils/utils/strategies/leverage/get-collateral-by-debt.spec.d.ts +1 -0
  153. package/dist/types/common-utils/utils/strategies/leverage/get-recommended-debt.d.ts +21 -0
  154. package/dist/types/common-utils/utils/strategies/leverage/get-recommended-debt.spec.d.ts +1 -0
  155. package/dist/types/common-utils/utils/strategies/leverage/get-recommended-leverage-factor.d.ts +4 -0
  156. package/dist/types/common-utils/utils/strategies/leverage/get-recommended-leverage-factor.spec.d.ts +1 -0
  157. package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-apy.d.ts +28 -0
  158. package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-apy.spec.d.ts +1 -0
  159. package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-points.d.ts +22 -0
  160. package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-points.spec.d.ts +1 -0
  161. package/dist/types/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.d.ts +19 -0
  162. package/dist/types/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.spec.d.ts +1 -0
  163. package/dist/types/common-utils/utils/strategies/strategy-info/get-strategy-you-can-earn.d.ts +29 -0
  164. package/dist/types/common-utils/utils/strategies/tokens/add-amount-in-target.d.ts +6 -0
  165. package/dist/types/common-utils/utils/strategies/tokens/add-amount-in-target.spec.d.ts +1 -0
  166. package/dist/types/common-utils/utils/strategies/tokens/get-chain-phantom-tokens.d.ts +6 -0
  167. package/dist/types/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.d.ts +12 -0
  168. package/dist/types/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.spec.d.ts +1 -0
  169. package/dist/types/common-utils/utils/strategies/tokens/get-native-token-address.d.ts +1 -0
  170. package/dist/types/common-utils/utils/strategies/tokens/is-apy-with-points-exception.d.ts +3 -0
  171. package/dist/types/common-utils/utils/strategies/tokens/is-collateral-token.d.ts +16 -0
  172. package/dist/types/common-utils/utils/strategies/tokens/is-collateral-token.spec.d.ts +1 -0
  173. package/dist/types/common-utils/utils/strategies/tokens/is-obtainable-token.d.ts +14 -0
  174. package/dist/types/common-utils/utils/strategies/tokens/is-obtainable-token.spec.d.ts +1 -0
  175. package/dist/types/common-utils/utils/strategies/tokens/is-valid-extra-collateral-token.d.ts +20 -0
  176. package/dist/types/common-utils/utils/strategies/tokens/wrap-token-address.d.ts +2 -0
  177. package/dist/types/common-utils/utils/strategies/tokens/wrap-token-address.spec.d.ts +1 -0
  178. package/dist/types/common-utils/utils/strategies/types/index.d.ts +2 -1
  179. package/dist/types/common-utils/utils/strategies/types/strategy-data.d.ts +64 -0
  180. package/dist/types/common-utils/utils/strategies/types/strategy-earnings.d.ts +43 -0
  181. package/dist/types/common-utils/utils/validation/is-zero-balance.d.ts +1 -0
  182. package/dist/types/common-utils/utils/validation/validate-balance.d.ts +22 -0
  183. package/dist/types/common-utils/utils/validation/validate-balance.spec.d.ts +1 -0
  184. package/dist/types/common-utils/utils/validation/validate-balances.d.ts +9 -0
  185. package/dist/types/common-utils/utils/validation/validate-balances.spec.d.ts +1 -0
  186. package/dist/types/common-utils/utils/validation/validate-credit-manager.d.ts +10 -0
  187. package/dist/types/common-utils/utils/validation/validate-credit-manager.spec.d.ts +1 -0
  188. package/dist/types/common-utils/utils/validation/validate-hf.d.ts +9 -0
  189. package/dist/types/common-utils/utils/validation/validate-hf.spec.d.ts +1 -0
  190. package/dist/types/common-utils/utils/validation/validate-open-account-pool-quota-status.d.ts +7 -0
  191. package/dist/types/common-utils/utils/validation/validate-open-account-pool-quota-status.spec.d.ts +1 -0
  192. package/dist/types/common-utils/utils/validation/validate-open-account-pool-status.d.ts +23 -0
  193. package/dist/types/common-utils/utils/validation/validate-open-account-pool-status.spec.d.ts +1 -0
  194. package/dist/types/common-utils/utils/validation/validate-open-account.d.ts +21 -0
  195. package/dist/types/common-utils/utils/validation/validate-open-account.spec.d.ts +1 -0
  196. package/dist/types/common-utils/utils/validation/validate-quota.d.ts +20 -0
  197. package/dist/types/common-utils/utils/validation/validate-quota.spec.d.ts +1 -0
  198. package/dist/types/common-utils/utils/validation/validate-token-to-obtain.d.ts +13 -0
  199. package/dist/types/common-utils/utils/validation/validate-token-to-obtain.spec.d.ts +1 -0
  200. package/dist/types/common-utils/utils/validation/validation-types.d.ts +14 -0
  201. package/dist/types/dev/RevolverTransport.d.ts +4 -4
  202. package/dist/types/sdk/constants/math.d.ts +1 -0
  203. package/package.json +1 -1
  204. package/dist/cjs/common-utils/utils/strategies/__test-utils.js +0 -95
  205. package/dist/esm/common-utils/utils/strategies/__test-utils.js +0 -65
  206. package/dist/types/common-utils/utils/strategies/__test-utils.d.ts +0 -11
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var import_vitest = require("vitest");
3
+ var import_token_data = require("../../../charts/token-data.js");
4
+ var import_test_utils = require("../../../test-utils/index.js");
5
+ var import_is_collateral_token = require("../tokens/is-collateral-token.js");
6
+ var import_get_cm_allowed_collaterals = require("./get-cm-allowed-collaterals.js");
7
+ import_vitest.vi.mock("./is-collateral-token");
8
+ const mockIsCollateralToken = import_vitest.vi.mocked(import_is_collateral_token.isCollateralToken);
9
+ (0, import_vitest.describe)("getCMAllowedCollaterals", () => {
10
+ const underlying = import_test_utils.mockUnderlyingToken;
11
+ const allowed = import_test_utils.mockToken1;
12
+ const rejected = import_test_utils.mockToken2;
13
+ const tokensList = {
14
+ [underlying]: new import_token_data.TokenData({
15
+ addr: underlying,
16
+ symbol: "DAI",
17
+ name: "Underlying",
18
+ decimals: 18,
19
+ isPhantom: false
20
+ }),
21
+ [allowed]: new import_token_data.TokenData({
22
+ addr: allowed,
23
+ symbol: "USDC",
24
+ name: "Allowed",
25
+ decimals: 6,
26
+ isPhantom: false
27
+ }),
28
+ [rejected]: new import_token_data.TokenData({
29
+ addr: rejected,
30
+ symbol: "WBTC",
31
+ name: "Rejected",
32
+ decimals: 8,
33
+ isPhantom: false
34
+ }),
35
+ [import_test_utils.mockWrappedNativeTokenAddress]: new import_token_data.TokenData({
36
+ addr: import_test_utils.mockWrappedNativeTokenAddress,
37
+ symbol: "WETH",
38
+ name: "WrappedNative",
39
+ decimals: 18,
40
+ isPhantom: false
41
+ })
42
+ };
43
+ const baseCm = (0, import_test_utils.buildCreditManager)({
44
+ address: "0x0000000000000000000000000000000000000CAA",
45
+ underlyingToken: underlying,
46
+ collateralTokens: [
47
+ underlying,
48
+ allowed,
49
+ rejected,
50
+ import_test_utils.mockWrappedNativeTokenAddress
51
+ ]
52
+ });
53
+ (0, import_vitest.afterEach)(() => {
54
+ import_vitest.vi.restoreAllMocks();
55
+ import_vitest.vi.clearAllMocks();
56
+ });
57
+ (0, import_vitest.it)("returns empty record when credit manager missing", () => {
58
+ const result = (0, import_get_cm_allowed_collaterals.getCMAllowedCollaterals)({
59
+ creditManager: void 0,
60
+ tokensList,
61
+ delayedPhantoms: {},
62
+ nativeTokenAddress: import_test_utils.mockNativeTokenAddress,
63
+ wrappedNativeTokenAddress: import_test_utils.mockWrappedNativeTokenAddress,
64
+ extraCollaterals: void 0
65
+ });
66
+ (0, import_vitest.expect)(result).toEqual({});
67
+ });
68
+ (0, import_vitest.it)("keeps allowed collaterals and mirrors wrapped native to native token", () => {
69
+ mockIsCollateralToken.mockImplementation(
70
+ ({ address }) => address !== rejected
71
+ );
72
+ const result = (0, import_get_cm_allowed_collaterals.getCMAllowedCollaterals)({
73
+ creditManager: baseCm,
74
+ tokensList,
75
+ delayedPhantoms: {},
76
+ nativeTokenAddress: import_test_utils.mockNativeTokenAddress,
77
+ wrappedNativeTokenAddress: import_test_utils.mockWrappedNativeTokenAddress,
78
+ extraCollaterals: void 0
79
+ });
80
+ (0, import_vitest.expect)(result).toEqual({
81
+ [underlying]: underlying,
82
+ [allowed]: allowed,
83
+ [import_test_utils.mockWrappedNativeTokenAddress]: import_test_utils.mockWrappedNativeTokenAddress,
84
+ [import_test_utils.mockNativeTokenAddress]: import_test_utils.mockNativeTokenAddress
85
+ });
86
+ });
87
+ (0, import_vitest.it)("does not mirror wrapped native when credit manager is paused", () => {
88
+ mockIsCollateralToken.mockReturnValue(true);
89
+ const pausedCm = (0, import_test_utils.buildCreditManager)({
90
+ ...baseCm,
91
+ isPaused: true
92
+ });
93
+ const result = (0, import_get_cm_allowed_collaterals.getCMAllowedCollaterals)({
94
+ creditManager: pausedCm,
95
+ tokensList,
96
+ delayedPhantoms: {},
97
+ nativeTokenAddress: import_test_utils.mockNativeTokenAddress,
98
+ wrappedNativeTokenAddress: import_test_utils.mockWrappedNativeTokenAddress,
99
+ extraCollaterals: void 0
100
+ });
101
+ (0, import_vitest.expect)(result).toEqual({
102
+ [underlying]: underlying,
103
+ [allowed]: allowed,
104
+ [rejected]: rejected,
105
+ [import_test_utils.mockWrappedNativeTokenAddress]: import_test_utils.mockWrappedNativeTokenAddress
106
+ });
107
+ (0, import_vitest.expect)(result[import_test_utils.mockNativeTokenAddress]).toBeUndefined();
108
+ });
109
+ });
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var get_wallet_balances_allowed_on_cm_exports = {};
20
+ __export(get_wallet_balances_allowed_on_cm_exports, {
21
+ getWalletBalancesAllowedOnCM: () => getWalletBalancesAllowedOnCM
22
+ });
23
+ module.exports = __toCommonJS(get_wallet_balances_allowed_on_cm_exports);
24
+ var import_sort = require("../../creditAccount/sort.js");
25
+ var import_wrap_token_address = require("../tokens/wrap-token-address.js");
26
+ function getWalletBalancesAllowedOnCM({
27
+ walletBalances,
28
+ collateralRecord,
29
+ nativeTokenAddress,
30
+ wrappedNativeTokenAddress,
31
+ prices,
32
+ tokensList,
33
+ isPaused = false
34
+ }) {
35
+ const walletBalancesSorted = (0, import_sort.sortBalances)(
36
+ walletBalances || {},
37
+ prices,
38
+ tokensList
39
+ );
40
+ const { list, record } = walletBalancesSorted.reduce(
41
+ (acc, [token, balance]) => {
42
+ if (isPaused && token === nativeTokenAddress) return acc;
43
+ const wrappedAddress = (0, import_wrap_token_address.wrapTokenAddress)(
44
+ token,
45
+ nativeTokenAddress,
46
+ wrappedNativeTokenAddress
47
+ );
48
+ if (collateralRecord[wrappedAddress]) {
49
+ const asset = {
50
+ token,
51
+ balance
52
+ };
53
+ acc.list.push(asset);
54
+ acc.record[wrappedAddress] = asset;
55
+ }
56
+ return acc;
57
+ },
58
+ { list: [], record: {} }
59
+ );
60
+ const collateralList = Object.values(collateralRecord);
61
+ const missingAssets = collateralList.filter(
62
+ (token) => isPaused ? token !== nativeTokenAddress && !record[token] : !record[token]
63
+ ).map(
64
+ (token) => ({
65
+ token,
66
+ balance: 0n
67
+ })
68
+ );
69
+ const r = [...list, ...missingAssets];
70
+ return r;
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ getWalletBalancesAllowedOnCM
75
+ });
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var import_vitest = require("vitest");
3
+ var import_token_data = require("../../../charts/token-data.js");
4
+ var import_test_utils = require("../../../test-utils/index.js");
5
+ var import_sort = require("../../creditAccount/sort.js");
6
+ var import_get_wallet_balances_allowed_on_cm = require("./get-wallet-balances-allowed-on-cm.js");
7
+ import_vitest.vi.mock("../../utils/creditAccount/sort.js", async () => {
8
+ const actual = await import_vitest.vi.importActual(
9
+ "../../utils/creditAccount/sort.js"
10
+ );
11
+ return {
12
+ ...actual,
13
+ sortBalances: import_vitest.vi.fn()
14
+ };
15
+ });
16
+ const mockSortBalances = import_vitest.vi.mocked(import_sort.sortBalances);
17
+ (0, import_vitest.describe)("getWalletBalancesAllowedOnCM", () => {
18
+ const allowed = import_test_utils.mockToken1;
19
+ const prices = {};
20
+ const tokensList = {
21
+ [import_test_utils.mockNativeTokenAddress]: new import_token_data.TokenData({
22
+ addr: import_test_utils.mockNativeTokenAddress,
23
+ symbol: "ETH",
24
+ name: "Native",
25
+ decimals: 18,
26
+ isPhantom: false
27
+ }),
28
+ [import_test_utils.mockWrappedNativeTokenAddress]: new import_token_data.TokenData({
29
+ addr: import_test_utils.mockWrappedNativeTokenAddress,
30
+ symbol: "WETH",
31
+ name: "Wrapped",
32
+ decimals: 18,
33
+ isPhantom: false
34
+ }),
35
+ [allowed]: new import_token_data.TokenData({
36
+ addr: allowed,
37
+ symbol: "DAI",
38
+ name: "Allowed",
39
+ decimals: 18,
40
+ isPhantom: false
41
+ })
42
+ };
43
+ (0, import_vitest.afterEach)(() => {
44
+ import_vitest.vi.restoreAllMocks();
45
+ import_vitest.vi.clearAllMocks();
46
+ });
47
+ (0, import_vitest.it)("wraps native token when allowed and keeps sorted balances", () => {
48
+ const collateralRecord = {
49
+ [import_test_utils.mockWrappedNativeTokenAddress]: import_test_utils.mockWrappedNativeTokenAddress,
50
+ [allowed]: allowed
51
+ };
52
+ mockSortBalances.mockReturnValue([
53
+ [import_test_utils.mockNativeTokenAddress, 2n],
54
+ [allowed, 1n]
55
+ ]);
56
+ const result = (0, import_get_wallet_balances_allowed_on_cm.getWalletBalancesAllowedOnCM)({
57
+ walletBalances: {
58
+ [import_test_utils.mockNativeTokenAddress]: 2n,
59
+ [allowed]: 1n
60
+ },
61
+ collateralRecord,
62
+ nativeTokenAddress: import_test_utils.mockNativeTokenAddress,
63
+ wrappedNativeTokenAddress: import_test_utils.mockWrappedNativeTokenAddress,
64
+ prices,
65
+ tokensList
66
+ });
67
+ (0, import_vitest.expect)(result).toEqual([
68
+ { token: import_test_utils.mockNativeTokenAddress, balance: 2n },
69
+ { token: allowed, balance: 1n }
70
+ ]);
71
+ });
72
+ (0, import_vitest.it)("skips native token when paused and fills missing collaterals with zero", () => {
73
+ const collateralRecord = {
74
+ [import_test_utils.mockWrappedNativeTokenAddress]: import_test_utils.mockWrappedNativeTokenAddress,
75
+ [allowed]: allowed,
76
+ [import_test_utils.mockNativeTokenAddress]: import_test_utils.mockNativeTokenAddress
77
+ };
78
+ mockSortBalances.mockReturnValue([[import_test_utils.mockNativeTokenAddress, 5n]]);
79
+ const result = (0, import_get_wallet_balances_allowed_on_cm.getWalletBalancesAllowedOnCM)({
80
+ walletBalances: { [import_test_utils.mockNativeTokenAddress]: 5n },
81
+ collateralRecord,
82
+ nativeTokenAddress: import_test_utils.mockNativeTokenAddress,
83
+ wrappedNativeTokenAddress: import_test_utils.mockWrappedNativeTokenAddress,
84
+ prices,
85
+ tokensList,
86
+ isPaused: true
87
+ });
88
+ (0, import_vitest.expect)(result).toEqual([
89
+ { token: import_test_utils.mockWrappedNativeTokenAddress, balance: 0n },
90
+ { token: allowed, balance: 0n }
91
+ ]);
92
+ });
93
+ });
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var calculate_max_strategy_debt_exports = {};
20
+ __export(calculate_max_strategy_debt_exports, {
21
+ calculateMaxStrategyDebt: () => calculateMaxStrategyDebt
22
+ });
23
+ module.exports = __toCommonJS(calculate_max_strategy_debt_exports);
24
+ var import_math = require("../../../../sdk/constants/math.js");
25
+ var import_bigint_math = require("../../bigint-math.js");
26
+ var import_calculate_loss_coefficient = require("./calculate-loss-coefficient.js");
27
+ var import_max_leverage = require("./max-leverage.js");
28
+ const DEFAULT_DEBT_CONSTANT_LOSS = 1500n;
29
+ function calculateMaxStrategyDebt({
30
+ targetToken,
31
+ amount,
32
+ creditManager,
33
+ slippage,
34
+ constantLoss = DEFAULT_DEBT_CONSTANT_LOSS,
35
+ swapCollateral = true
36
+ }) {
37
+ const targetQuota = creditManager.quotas[targetToken];
38
+ const quotaLeft = swapCollateral && targetQuota ? import_bigint_math.BigIntMath.max(0n, targetQuota.limit - targetQuota.totalQuoted) : void 0;
39
+ if (quotaLeft === 0n) {
40
+ return creditManager.minDebt;
41
+ }
42
+ const availableLiquidity = quotaLeft !== void 0 ? import_bigint_math.BigIntMath.min(quotaLeft, creditManager.availableToBorrow) : creditManager.availableToBorrow;
43
+ const coefficient = (0, import_calculate_loss_coefficient.calculateLossCoefficient)(slippage, constantLoss);
44
+ const effectiveMaxDebt = import_bigint_math.BigIntMath.max(
45
+ import_bigint_math.BigIntMath.min(availableLiquidity, creditManager.maxDebt),
46
+ creditManager.minDebt
47
+ );
48
+ if (amount === 0n) {
49
+ return effectiveMaxDebt;
50
+ }
51
+ const maxPossibleLeverage = (0, import_max_leverage.maxLeverage)(targetToken, [creditManager]);
52
+ const debt = amount * BigInt(maxPossibleLeverage) / import_math.LEVERAGE_DECIMALS;
53
+ const effectiveDebt = debt * coefficient / import_math.PERCENTAGE_FACTOR;
54
+ const result = import_bigint_math.BigIntMath.max(
55
+ import_bigint_math.BigIntMath.min(effectiveDebt, effectiveMaxDebt),
56
+ creditManager.minDebt
57
+ );
58
+ return result;
59
+ }
60
+ // Annotate the CommonJS export names for ESM import in node:
61
+ 0 && (module.exports = {
62
+ calculateMaxStrategyDebt
63
+ });
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ var import_vitest = require("vitest");
3
+ var import_math = require("../../../../sdk/constants/math.js");
4
+ var import_test_utils = require("../../../test-utils/index.js");
5
+ var import_calculate_loss_coefficient = require("./calculate-loss-coefficient.js");
6
+ var import_calculate_max_strategy_debt = require("./calculate-max-strategy-debt.js");
7
+ var import_max_leverage = require("./max-leverage.js");
8
+ import_vitest.vi.mock("./max-leverage");
9
+ import_vitest.vi.mock(
10
+ "../../utils/strategies/leverage/calculate-loss-coefficient.js",
11
+ async () => {
12
+ const actual = await import_vitest.vi.importActual(
13
+ "../../utils/strategies/leverage/calculate-loss-coefficient.js"
14
+ );
15
+ return {
16
+ ...actual,
17
+ calculateLossCoefficient: import_vitest.vi.fn(
18
+ actual.calculateLossCoefficient
19
+ )
20
+ };
21
+ }
22
+ );
23
+ const mockMaxLeverage = import_vitest.vi.mocked(import_max_leverage.maxLeverage);
24
+ const mockCalculateLossCoefficient = import_vitest.vi.mocked(import_calculate_loss_coefficient.calculateLossCoefficient);
25
+ (0, import_vitest.describe)("calculateMaxStrategyDebt", () => {
26
+ const mockCreditManager = (0, import_test_utils.buildCreditManager)({});
27
+ (0, import_vitest.beforeEach)(() => {
28
+ mockMaxLeverage.mockReturnValue(
29
+ 10n * import_math.LEVERAGE_DECIMALS
30
+ );
31
+ import_vitest.vi.clearAllMocks();
32
+ });
33
+ (0, import_vitest.it)("should return effectiveMaxDebt when amount is zero without calling maxLeverage", () => {
34
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
35
+ targetToken: import_test_utils.mockToken1,
36
+ amount: 0n,
37
+ creditManager: mockCreditManager,
38
+ slippage: 100,
39
+ constantLoss: 30n
40
+ });
41
+ (0, import_vitest.expect)(mockMaxLeverage).not.toHaveBeenCalled();
42
+ (0, import_vitest.expect)(result).toEqual(900000n);
43
+ });
44
+ (0, import_vitest.it)("should calculate max debt correctly with mocked maxLeverage", () => {
45
+ const maxLeverageValue = 5n * import_math.LEVERAGE_DECIMALS;
46
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
47
+ const targetToken = import_test_utils.mockToken1;
48
+ const amount = 10000n;
49
+ const slippage = 100;
50
+ const constantLoss = 30n;
51
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
52
+ targetToken: import_test_utils.mockToken1,
53
+ amount,
54
+ creditManager: mockCreditManager,
55
+ slippage,
56
+ constantLoss
57
+ });
58
+ (0, import_vitest.expect)(mockMaxLeverage).toHaveBeenCalledWith(targetToken, [
59
+ mockCreditManager
60
+ ]);
61
+ (0, import_vitest.expect)(mockMaxLeverage).toHaveBeenCalledTimes(1);
62
+ (0, import_vitest.expect)(result).toEqual(49350n);
63
+ });
64
+ (0, import_vitest.it)("should handle case where effectiveDebt exceeds effectiveMaxDebt", () => {
65
+ const veryHighLeverage = 100n * import_math.LEVERAGE_DECIMALS;
66
+ mockMaxLeverage.mockReturnValue(veryHighLeverage);
67
+ const amount = 100000000000000000000000n;
68
+ const creditManager = (0, import_test_utils.buildCreditManager)({
69
+ availableToBorrow: 1000n
70
+ });
71
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
72
+ targetToken: import_test_utils.mockToken1,
73
+ amount,
74
+ creditManager,
75
+ slippage: 100,
76
+ constantLoss: 30n
77
+ });
78
+ (0, import_vitest.expect)(result).toEqual(creditManager.availableToBorrow);
79
+ });
80
+ (0, import_vitest.it)("should ensure result is at least minDebt", () => {
81
+ mockMaxLeverage.mockReturnValue(1n);
82
+ const amount = 10000n;
83
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
84
+ targetToken: import_test_utils.mockToken1,
85
+ amount,
86
+ creditManager: mockCreditManager,
87
+ slippage: 100,
88
+ constantLoss: 30n
89
+ });
90
+ (0, import_vitest.expect)(result).toEqual(mockCreditManager.minDebt);
91
+ });
92
+ (0, import_vitest.it)("should handle different slippage values correctly", () => {
93
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
94
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
95
+ const amount = 10000n;
96
+ const highSlippage = 500;
97
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
98
+ targetToken: import_test_utils.mockToken1,
99
+ amount,
100
+ creditManager: mockCreditManager,
101
+ slippage: highSlippage,
102
+ constantLoss: 30n
103
+ });
104
+ (0, import_vitest.expect)(result).toEqual(94700n);
105
+ });
106
+ (0, import_vitest.it)("should handle different constantLoss values correctly", () => {
107
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
108
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
109
+ const amount = 10000n;
110
+ const highConstantLoss = 500n;
111
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
112
+ targetToken: import_test_utils.mockToken1,
113
+ amount,
114
+ creditManager: mockCreditManager,
115
+ slippage: 100,
116
+ constantLoss: highConstantLoss
117
+ });
118
+ (0, import_vitest.expect)(result).toEqual(94000n);
119
+ });
120
+ (0, import_vitest.it)("should respect quota limit when quotaLeft is less than availableToBorrow", () => {
121
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
122
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
123
+ const quotaLimit = 50000n;
124
+ const totalQuoted = 40000n;
125
+ const amount = 10000n;
126
+ const availableToBorrow = 100000n;
127
+ const creditManagerWithQuota = (0, import_test_utils.buildCreditManager)({
128
+ availableToBorrow,
129
+ quotas: {
130
+ ...mockCreditManager.quotas,
131
+ [import_test_utils.mockToken1]: {
132
+ ...mockCreditManager.quotas[import_test_utils.mockToken1],
133
+ limit: quotaLimit,
134
+ totalQuoted
135
+ }
136
+ }
137
+ });
138
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
139
+ targetToken: import_test_utils.mockToken1,
140
+ amount,
141
+ creditManager: creditManagerWithQuota,
142
+ slippage: 100,
143
+ constantLoss: 30n
144
+ });
145
+ (0, import_vitest.expect)(result).toEqual(quotaLimit - totalQuoted);
146
+ });
147
+ (0, import_vitest.it)("should use availableToBorrow when quota does not exist for target token", () => {
148
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
149
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
150
+ const availableToBorrow = 75000n;
151
+ const tokenWithoutQuota = "0x9999999999999999999999999999999999999999";
152
+ const creditManagerWithoutQuota = (0, import_test_utils.buildCreditManager)({
153
+ availableToBorrow
154
+ });
155
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
156
+ targetToken: tokenWithoutQuota,
157
+ amount: 10000n,
158
+ creditManager: creditManagerWithoutQuota,
159
+ slippage: 100,
160
+ constantLoss: 30n
161
+ });
162
+ (0, import_vitest.expect)(result).toEqual(creditManagerWithoutQuota.availableToBorrow);
163
+ });
164
+ (0, import_vitest.it)("should respect quotaLeft", () => {
165
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
166
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
167
+ const quotaLimit = 50000n;
168
+ const totalQuoted = 10000n;
169
+ const amount = 20000n;
170
+ const availableToBorrow = 100000n;
171
+ const creditManagerWithQuota = (0, import_test_utils.buildCreditManager)({
172
+ availableToBorrow,
173
+ quotas: {
174
+ ...mockCreditManager.quotas,
175
+ [import_test_utils.mockToken1]: {
176
+ ...mockCreditManager.quotas[import_test_utils.mockToken1],
177
+ limit: quotaLimit,
178
+ totalQuoted
179
+ }
180
+ }
181
+ });
182
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
183
+ targetToken: import_test_utils.mockToken1,
184
+ amount,
185
+ creditManager: creditManagerWithQuota,
186
+ slippage: 100,
187
+ constantLoss: 30n
188
+ });
189
+ (0, import_vitest.expect)(result).toEqual(quotaLimit - totalQuoted);
190
+ });
191
+ (0, import_vitest.it)("returns minDebt when quotaLeft would be negative (clamped to 0)", () => {
192
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
193
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
194
+ const quotaLimit = 50000n;
195
+ const totalQuoted = 50001n;
196
+ const amount = 20000n;
197
+ const availableToBorrow = 100000n;
198
+ const creditManagerWithQuota = (0, import_test_utils.buildCreditManager)({
199
+ availableToBorrow,
200
+ quotas: {
201
+ ...mockCreditManager.quotas,
202
+ [import_test_utils.mockToken1]: {
203
+ ...mockCreditManager.quotas[import_test_utils.mockToken1],
204
+ limit: quotaLimit,
205
+ totalQuoted
206
+ }
207
+ }
208
+ });
209
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
210
+ targetToken: import_test_utils.mockToken1,
211
+ amount,
212
+ creditManager: creditManagerWithQuota,
213
+ slippage: 100,
214
+ constantLoss: 30n
215
+ });
216
+ (0, import_vitest.expect)(result).toEqual(mockCreditManager.minDebt);
217
+ (0, import_vitest.expect)(mockMaxLeverage).not.toHaveBeenCalled();
218
+ });
219
+ (0, import_vitest.it)("returns minDebt when quotaLimit is zero", () => {
220
+ const maxLeverageValue = 10n * import_math.LEVERAGE_DECIMALS;
221
+ mockMaxLeverage.mockReturnValue(maxLeverageValue);
222
+ const quotaLimit = 0n;
223
+ const totalQuoted = 30000n;
224
+ const amount = 20000n;
225
+ const availableToBorrow = 100000n;
226
+ const creditManagerWithQuota = (0, import_test_utils.buildCreditManager)({
227
+ availableToBorrow,
228
+ quotas: {
229
+ ...mockCreditManager.quotas,
230
+ [import_test_utils.mockToken1]: {
231
+ ...mockCreditManager.quotas[import_test_utils.mockToken1],
232
+ limit: quotaLimit,
233
+ totalQuoted
234
+ }
235
+ }
236
+ });
237
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
238
+ targetToken: import_test_utils.mockToken1,
239
+ amount,
240
+ creditManager: creditManagerWithQuota,
241
+ slippage: 100,
242
+ constantLoss: 30n
243
+ });
244
+ (0, import_vitest.expect)(result).toEqual(mockCreditManager.minDebt);
245
+ (0, import_vitest.expect)(mockMaxLeverage).not.toHaveBeenCalled();
246
+ });
247
+ (0, import_vitest.it)("returns minDebt when effectiveMaxDebt is below minDebt", () => {
248
+ mockCalculateLossCoefficient.mockReturnValueOnce(import_math.PERCENTAGE_FACTOR);
249
+ const creditManager = (0, import_test_utils.buildCreditManager)({
250
+ minDebt: 500n,
251
+ availableToBorrow: 50n,
252
+ maxDebt: 200n
253
+ });
254
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
255
+ targetToken: import_test_utils.mockToken1,
256
+ amount: 0n,
257
+ creditManager,
258
+ slippage: 0,
259
+ constantLoss: 0n
260
+ });
261
+ (0, import_vitest.expect)(result).toEqual(creditManager.minDebt);
262
+ (0, import_vitest.expect)(mockMaxLeverage).not.toHaveBeenCalled();
263
+ });
264
+ (0, import_vitest.it)("clamps leveraged result to minDebt when effective debt is smaller", () => {
265
+ mockCalculateLossCoefficient.mockReturnValueOnce(import_math.PERCENTAGE_FACTOR);
266
+ const creditManager = (0, import_test_utils.buildCreditManager)({
267
+ minDebt: 500n,
268
+ availableToBorrow: 2000n,
269
+ maxDebt: 2000n
270
+ });
271
+ mockMaxLeverage.mockReturnValue(1n);
272
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
273
+ targetToken: import_test_utils.mockToken1,
274
+ amount: 100n,
275
+ creditManager,
276
+ slippage: 0,
277
+ constantLoss: 0n
278
+ });
279
+ (0, import_vitest.expect)(result).toEqual(creditManager.minDebt);
280
+ (0, import_vitest.expect)(mockMaxLeverage).toHaveBeenCalledTimes(1);
281
+ });
282
+ (0, import_vitest.it)("ignores quota when swapCollateral is false", () => {
283
+ const creditManagerWithQuota = (0, import_test_utils.buildCreditManager)({
284
+ availableToBorrow: 100000n,
285
+ quotas: {
286
+ ...mockCreditManager.quotas,
287
+ [import_test_utils.mockToken1]: {
288
+ ...mockCreditManager.quotas[import_test_utils.mockToken1],
289
+ limit: 50000n,
290
+ totalQuoted: 40000n
291
+ }
292
+ }
293
+ });
294
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
295
+ targetToken: import_test_utils.mockToken1,
296
+ amount: 0n,
297
+ creditManager: creditManagerWithQuota,
298
+ slippage: 100,
299
+ constantLoss: 30n,
300
+ swapCollateral: false
301
+ });
302
+ (0, import_vitest.expect)(result).toEqual(creditManagerWithQuota.availableToBorrow);
303
+ (0, import_vitest.expect)(mockMaxLeverage).not.toHaveBeenCalled();
304
+ });
305
+ (0, import_vitest.it)("should respect quota limit when amount is zero", () => {
306
+ const quotaLimit = 50000n;
307
+ const totalQuoted = 20000n;
308
+ const availableToBorrow = 100000n;
309
+ const creditManagerWithQuota = (0, import_test_utils.buildCreditManager)({
310
+ availableToBorrow,
311
+ quotas: {
312
+ ...mockCreditManager.quotas,
313
+ [import_test_utils.mockToken1]: {
314
+ ...mockCreditManager.quotas[import_test_utils.mockToken1],
315
+ limit: quotaLimit,
316
+ totalQuoted
317
+ }
318
+ }
319
+ });
320
+ const result = (0, import_calculate_max_strategy_debt.calculateMaxStrategyDebt)({
321
+ targetToken: import_test_utils.mockToken1,
322
+ amount: 0n,
323
+ creditManager: creditManagerWithQuota,
324
+ slippage: 100,
325
+ constantLoss: 30n
326
+ });
327
+ (0, import_vitest.expect)(result).toBe(30000n);
328
+ (0, import_vitest.expect)(mockMaxLeverage).not.toHaveBeenCalled();
329
+ });
330
+ });