@gearbox-protocol/sdk 14.12.0-next.69 → 14.12.0-next.70

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 (210) hide show
  1. package/dist/cjs/common-utils/charts/credit-session.js +0 -1
  2. package/dist/cjs/common-utils/index.js +1 -1
  3. package/dist/cjs/common-utils/utils/creditAccount/index.js +1 -1
  4. package/dist/cjs/common-utils/utils/creditAccount/quota-utils.js +0 -1
  5. package/dist/cjs/common-utils/utils/index.js +1 -1
  6. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.js +1 -1
  7. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +81 -66
  8. package/dist/cjs/sdk/accounts/index.js +2 -0
  9. package/dist/cjs/sdk/accounts/intents/index.js +388 -0
  10. package/dist/cjs/sdk/accounts/intents/intents/index.js +14 -0
  11. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +121 -0
  12. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +15 -0
  13. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.fixtures.js +108 -0
  14. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.js +51 -0
  15. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +130 -0
  16. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +83 -0
  17. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +117 -0
  18. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.js +15 -0
  19. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +95 -0
  20. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +15 -0
  21. package/dist/cjs/sdk/accounts/intents/intents/resume/index.js +13 -0
  22. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +138 -0
  23. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +161 -0
  24. package/dist/cjs/sdk/accounts/intents/operations/add-collateral/index.js +17 -0
  25. package/dist/cjs/sdk/accounts/intents/operations/claim-delayed/index.js +54 -0
  26. package/dist/cjs/sdk/accounts/intents/operations/close-credit-account/index.js +26 -0
  27. package/dist/cjs/sdk/accounts/intents/operations/decrease-debt/index.js +12 -0
  28. package/dist/cjs/sdk/accounts/intents/operations/increase-debt/index.js +12 -0
  29. package/dist/cjs/sdk/accounts/intents/operations/index.js +27 -0
  30. package/dist/cjs/sdk/accounts/intents/operations/quota-update/index.js +22 -0
  31. package/dist/cjs/sdk/accounts/intents/operations/repay-credit-account/index.js +22 -0
  32. package/dist/cjs/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +18 -0
  33. package/dist/cjs/sdk/accounts/intents/operations/swap/index.js +18 -0
  34. package/dist/cjs/sdk/accounts/intents/operations/types.js +1 -0
  35. package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +27 -0
  36. package/dist/cjs/sdk/accounts/intents/operations/withdraw-collateral/index.js +43 -0
  37. package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +27 -0
  38. package/dist/cjs/sdk/accounts/intents/quoters/close.js +58 -0
  39. package/dist/cjs/sdk/accounts/intents/quoters/index.js +7 -0
  40. package/dist/cjs/sdk/accounts/intents/quoters/swap.js +79 -0
  41. package/dist/cjs/sdk/accounts/intents/testing/expect.js +167 -0
  42. package/dist/cjs/sdk/accounts/intents/testing/resume.js +172 -0
  43. package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +179 -0
  44. package/dist/cjs/sdk/accounts/intents/types.js +1 -0
  45. package/dist/cjs/sdk/accounts/intents/utils/assemble-operation-calls.js +7 -0
  46. package/dist/cjs/sdk/accounts/intents/utils/borrowed-amount-plus-interest-and-fees.js +13 -0
  47. package/dist/cjs/sdk/accounts/intents/utils/common.js +43 -0
  48. package/dist/cjs/sdk/accounts/intents/utils/convert-amount.js +37 -0
  49. package/dist/cjs/sdk/accounts/intents/utils/index.js +19 -0
  50. package/dist/cjs/sdk/accounts/intents/utils/quotas-for-update.js +122 -0
  51. package/dist/cjs/sdk/accounts/intents/utils/simulate-adjust-state.js +39 -0
  52. package/dist/cjs/sdk/accounts/intents/utils/simulate-assets.js +69 -0
  53. package/dist/cjs/sdk/accounts/intents/utils/with-quota-update.js +13 -0
  54. package/dist/cjs/sdk/index.js +2 -0
  55. package/dist/esm/common-utils/charts/credit-session.js +0 -1
  56. package/dist/esm/common-utils/index.js +1 -1
  57. package/dist/esm/common-utils/utils/creditAccount/index.js +1 -1
  58. package/dist/esm/common-utils/utils/creditAccount/quota-utils.js +0 -1
  59. package/dist/esm/common-utils/utils/index.js +1 -1
  60. package/dist/esm/common-utils/utils/strategies/strategy-info/get-cm-you-can-earn.js +1 -1
  61. package/dist/esm/dev/AccountOpener.js +1 -1
  62. package/dist/esm/dev/withdrawalUtils.js +1 -1
  63. package/dist/esm/preview/simulate/simulatePoolOperation.js +1 -1
  64. package/dist/esm/preview/trace/extractTransfers.js +1 -1
  65. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +83 -68
  66. package/dist/esm/sdk/accounts/index.js +2 -1
  67. package/dist/esm/sdk/accounts/intents/index.js +387 -0
  68. package/dist/esm/sdk/accounts/intents/intents/index.js +8 -0
  69. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +107 -0
  70. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +14 -0
  71. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.fixtures.js +94 -0
  72. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.js +50 -0
  73. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +114 -0
  74. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +82 -0
  75. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +110 -0
  76. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.js +14 -0
  77. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +88 -0
  78. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +14 -0
  79. package/dist/esm/sdk/accounts/intents/intents/resume/index.js +7 -0
  80. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +121 -0
  81. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +160 -0
  82. package/dist/esm/sdk/accounts/intents/operations/add-collateral/index.js +16 -0
  83. package/dist/esm/sdk/accounts/intents/operations/claim-delayed/index.js +52 -0
  84. package/dist/esm/sdk/accounts/intents/operations/close-credit-account/index.js +25 -0
  85. package/dist/esm/sdk/accounts/intents/operations/decrease-debt/index.js +11 -0
  86. package/dist/esm/sdk/accounts/intents/operations/increase-debt/index.js +11 -0
  87. package/dist/esm/sdk/accounts/intents/operations/index.js +14 -0
  88. package/dist/esm/sdk/accounts/intents/operations/quota-update/index.js +21 -0
  89. package/dist/esm/sdk/accounts/intents/operations/repay-credit-account/index.js +21 -0
  90. package/dist/esm/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +17 -0
  91. package/dist/esm/sdk/accounts/intents/operations/swap/index.js +17 -0
  92. package/dist/esm/sdk/accounts/intents/operations/types.js +1 -0
  93. package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +26 -0
  94. package/dist/esm/sdk/accounts/intents/operations/withdraw-collateral/index.js +42 -0
  95. package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +26 -0
  96. package/dist/esm/sdk/accounts/intents/quoters/close.js +56 -0
  97. package/dist/esm/sdk/accounts/intents/quoters/index.js +3 -0
  98. package/dist/esm/sdk/accounts/intents/quoters/swap.js +77 -0
  99. package/dist/esm/sdk/accounts/intents/testing/expect.js +162 -0
  100. package/dist/esm/sdk/accounts/intents/testing/resume.js +157 -0
  101. package/dist/esm/sdk/accounts/intents/testing/sdk-mock.js +172 -0
  102. package/dist/esm/sdk/accounts/intents/types.js +1 -0
  103. package/dist/esm/sdk/accounts/intents/utils/assemble-operation-calls.js +6 -0
  104. package/dist/esm/sdk/accounts/intents/utils/borrowed-amount-plus-interest-and-fees.js +12 -0
  105. package/dist/esm/sdk/accounts/intents/utils/common.js +40 -0
  106. package/dist/esm/sdk/accounts/intents/utils/convert-amount.js +36 -0
  107. package/dist/esm/sdk/accounts/intents/utils/index.js +9 -0
  108. package/dist/esm/sdk/accounts/intents/utils/quotas-for-update.js +121 -0
  109. package/dist/esm/sdk/accounts/intents/utils/simulate-adjust-state.js +38 -0
  110. package/dist/esm/sdk/accounts/intents/utils/simulate-assets.js +68 -0
  111. package/dist/esm/sdk/accounts/intents/utils/with-quota-update.js +12 -0
  112. package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +1 -1
  113. package/dist/esm/sdk/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
  114. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
  115. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
  116. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
  117. package/dist/esm/sdk/base/TokensMeta.js +2 -2
  118. package/dist/esm/sdk/chain/detectNetwork.js +1 -1
  119. package/dist/esm/sdk/core/createAddressProvider.js +1 -1
  120. package/dist/esm/sdk/index.js +2 -1
  121. package/dist/esm/sdk/market/credit/CreditFacadeV310BaseContract.js +1 -1
  122. package/dist/esm/sdk/market/pool/PoolV310Contract.js +1 -1
  123. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +1 -1
  124. package/dist/esm/sdk/market/zapper/ZapperContract.js +1 -1
  125. package/dist/esm/sdk/pools/PoolService.js +1 -1
  126. package/dist/esm/sdk/utils/viem/simulateWithPriceUpdates.js +1 -1
  127. package/dist/types/common-utils/index.d.ts +19 -19
  128. package/dist/types/common-utils/static/index.d.ts +1 -1
  129. package/dist/types/common-utils/utils/apy/index.d.ts +1 -1
  130. package/dist/types/common-utils/utils/creditAccount/calc-health-factor.d.ts +1 -1
  131. package/dist/types/common-utils/utils/creditAccount/calc-overall-apy.d.ts +1 -1
  132. package/dist/types/common-utils/utils/creditAccount/calc-quota-borrow-rate.d.ts +1 -1
  133. package/dist/types/common-utils/utils/creditAccount/debt.d.ts +1 -1
  134. package/dist/types/common-utils/utils/creditAccount/index.d.ts +1 -1
  135. package/dist/types/common-utils/utils/creditAccount/liquidation-price.d.ts +1 -1
  136. package/dist/types/common-utils/utils/creditAccount/quota-utils.d.ts +0 -1
  137. package/dist/types/common-utils/utils/creditAccount/sort.d.ts +1 -1
  138. package/dist/types/common-utils/utils/index.d.ts +3 -3
  139. package/dist/types/common-utils/utils/strategies/credit-managers/get-wallet-balances-allowed-on-cm.d.ts +1 -1
  140. package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-apy.d.ts +1 -1
  141. package/dist/types/common-utils/utils/strategies/strategy-info/calculate-total-points.d.ts +1 -1
  142. package/dist/types/common-utils/utils/strategies/strategy-info/types.d.ts +1 -1
  143. package/dist/types/common-utils/utils/strategies/tokens/add-amount-in-target.d.ts +1 -1
  144. package/dist/types/common-utils/utils/strategies/tokens/get-list-with-amount-in-target.d.ts +1 -1
  145. package/dist/types/common-utils/utils/strategies/types/credit-manager-data-legacy.d.ts +1 -1
  146. package/dist/types/common-utils/utils/strategies/types/strategies-cm-list.d.ts +1 -1
  147. package/dist/types/common-utils/utils/strategies/types/strategy-earnings.d.ts +1 -1
  148. package/dist/types/common-utils/utils/strategies/types/strategy.d.ts +1 -1
  149. package/dist/types/common-utils/utils/validation/validate-open-account.d.ts +1 -1
  150. package/dist/types/common-utils/utils/validation/validate-quota.d.ts +1 -1
  151. package/dist/types/plugins/apy/ApyPlugin.d.ts +1 -1
  152. package/dist/types/plugins/apy/pool-apy-utils.d.ts +1 -1
  153. package/dist/types/plugins/apy/strategy-data-source.d.ts +1 -1
  154. package/dist/types/plugins/apy/types.d.ts +1 -1
  155. package/dist/types/plugins/remote-configs/CustomConfigSource.d.ts +1 -1
  156. package/dist/types/plugins/remote-configs/RemoteConfigSource.d.ts +1 -1
  157. package/dist/types/plugins/remote-configs/RemoteConfigsPlugin.d.ts +1 -1
  158. package/dist/types/plugins/remote-configs/index.d.ts +1 -1
  159. package/dist/types/plugins/remote-configs/types.d.ts +1 -1
  160. package/dist/types/rewards/rewards/extra-apy.d.ts +1 -1
  161. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +30 -10
  162. package/dist/types/sdk/accounts/index.d.ts +2 -1
  163. package/dist/types/sdk/accounts/intents/index.d.ts +22 -0
  164. package/dist/types/sdk/accounts/intents/intents/index.d.ts +8 -0
  165. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.d.ts +13 -0
  166. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.d.ts +38 -0
  167. package/dist/types/sdk/accounts/intents/intents/resume/close/close.d.ts +26 -0
  168. package/dist/types/sdk/accounts/intents/intents/resume/close/close.fixtures.d.ts +63 -0
  169. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.d.ts +26 -0
  170. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.d.ts +86 -0
  171. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.d.ts +13 -0
  172. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.d.ts +48 -0
  173. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.d.ts +13 -0
  174. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.d.ts +46 -0
  175. package/dist/types/sdk/accounts/intents/intents/resume/index.d.ts +7 -0
  176. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.d.ts +33 -0
  177. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.d.ts +68 -0
  178. package/dist/types/sdk/accounts/intents/operations/add-collateral/index.d.ts +23 -0
  179. package/dist/types/sdk/accounts/intents/operations/claim-delayed/index.d.ts +55 -0
  180. package/dist/types/sdk/accounts/intents/operations/close-credit-account/index.d.ts +22 -0
  181. package/dist/types/sdk/accounts/intents/operations/decrease-debt/index.d.ts +18 -0
  182. package/dist/types/sdk/accounts/intents/operations/increase-debt/index.d.ts +18 -0
  183. package/dist/types/sdk/accounts/intents/operations/index.d.ts +14 -0
  184. package/dist/types/sdk/accounts/intents/operations/quota-update/index.d.ts +24 -0
  185. package/dist/types/sdk/accounts/intents/operations/repay-credit-account/index.d.ts +32 -0
  186. package/dist/types/sdk/accounts/intents/operations/start-delayed-withdrawal/index.d.ts +23 -0
  187. package/dist/types/sdk/accounts/intents/operations/swap/index.d.ts +28 -0
  188. package/dist/types/sdk/accounts/intents/operations/types.d.ts +21 -0
  189. package/dist/types/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.d.ts +30 -0
  190. package/dist/types/sdk/accounts/intents/operations/withdraw-collateral/index.d.ts +36 -0
  191. package/dist/types/sdk/accounts/intents/operations/wrap-rwa-collateral/index.d.ts +30 -0
  192. package/dist/types/sdk/accounts/intents/quoters/close.d.ts +43 -0
  193. package/dist/types/sdk/accounts/intents/quoters/index.d.ts +3 -0
  194. package/dist/types/sdk/accounts/intents/quoters/swap.d.ts +43 -0
  195. package/dist/types/sdk/accounts/intents/testing/expect.d.ts +52 -0
  196. package/dist/types/sdk/accounts/intents/testing/resume.d.ts +84 -0
  197. package/dist/types/sdk/accounts/intents/testing/sdk-mock.d.ts +90 -0
  198. package/dist/types/sdk/accounts/intents/types.d.ts +75 -0
  199. package/dist/types/sdk/accounts/intents/utils/assemble-operation-calls.d.ts +10 -0
  200. package/dist/types/sdk/accounts/intents/utils/borrowed-amount-plus-interest-and-fees.d.ts +17 -0
  201. package/dist/types/sdk/accounts/intents/utils/common.d.ts +19 -0
  202. package/dist/types/sdk/accounts/intents/utils/convert-amount.d.ts +13 -0
  203. package/dist/types/sdk/accounts/intents/utils/index.d.ts +9 -0
  204. package/dist/types/sdk/accounts/intents/utils/quotas-for-update.d.ts +35 -0
  205. package/dist/types/sdk/accounts/intents/utils/simulate-adjust-state.d.ts +19 -0
  206. package/dist/types/sdk/accounts/intents/utils/simulate-assets.d.ts +21 -0
  207. package/dist/types/sdk/accounts/intents/utils/with-quota-update.d.ts +16 -0
  208. package/dist/types/sdk/accounts/types.d.ts +20 -0
  209. package/dist/types/sdk/index.d.ts +2 -1
  210. package/package.json +1 -1
@@ -0,0 +1,160 @@
1
+ import { BigIntMath } from "../../../../../utils/bigint-math.js";
2
+ import { eq } from "../../../utils/common.js";
3
+ import { convertAmount } from "../../../utils/convert-amount.js";
4
+ import { simulateState } from "../../../utils/simulate-adjust-state.js";
5
+ import "../../../utils/index.js";
6
+ import { buildClaimDelayedWithdrawalOperation, primaryInstantOutput } from "../../../operations/claim-delayed/index.js";
7
+ import { buildDecreaseDebtOperation } from "../../../operations/decrease-debt/index.js";
8
+ import { buildSwapOperation } from "../../../operations/swap/index.js";
9
+ import { buildWithdrawCollateralOperation } from "../../../operations/withdraw-collateral/index.js";
10
+ import "../../../operations/index.js";
11
+ //#region src/sdk/accounts/intents/intents/resume/withdraw/withdraw.ts
12
+ const ZERO_QUOTE = {
13
+ amount: 0n,
14
+ minAmount: 0n,
15
+ calls: []
16
+ };
17
+ /**
18
+ * Resume withdraw — linear op chain following the W-first matrix:
19
+ * claim → (swap?) → decreaseDebt? → (unwrapRwa?) → withdrawCollateral.
20
+ * Only the underlying token (or the unwrapped rwa.asset on RWA markets) can
21
+ * be withdrawn (enforced below).
22
+ * The delayed lean intent records debt already paid at start; only its
23
+ * residual `debtRepaid` may consume claimed proceeds.
24
+ *
25
+ * Matrix arithmetic (split sizing) is oracle-priced; emitted swap legs go
26
+ * through the given quoter (`amountOut` on the op, `minAmountOut` caps the
27
+ * debt repay funded by the leg). Mirrors legacy
28
+ * `buildWithdrawResumeLogicalOps` + `resolveSwapBranches` (simplified: no
29
+ * min/avg op branches).
30
+ */
31
+ async function buildResumeWithdrawOperations(props, quoter) {
32
+ const { intent, options, creditAccount, sdk } = props;
33
+ const underlying = creditAccount.underlying;
34
+ const rwaMeta = sdk.tokensMeta.rwaUnderlyings.get(underlying);
35
+ if (!eq(intent.withdrawToken, underlying) && !eq(intent.withdrawToken, rwaMeta?.asset ?? "")) throw new Error("Withdraw intent should withdraw underlying token only");
36
+ const claimOp = buildClaimDelayedWithdrawalOperation({
37
+ creditAccount,
38
+ sdk
39
+ }, options);
40
+ const primary = primaryInstantOutput(claimOp.outputs);
41
+ if (!primary || primary.amount <= 0n) throw new Error("No claimable assets");
42
+ const convert = convertAmount(sdk, creditAccount.creditManager);
43
+ const operations = [claimOp];
44
+ const swap = async (tokenIn, amountIn, tokenOut) => {
45
+ if (amountIn <= 0n) return ZERO_QUOTE;
46
+ const { state } = simulateState({
47
+ operations,
48
+ creditAccount,
49
+ sdk,
50
+ quotaReserve: props.quotaReserve
51
+ });
52
+ const tokenInBalance = state.assets.find((asset) => eq(asset.token, tokenIn))?.balance ?? 0n;
53
+ const quote = await quoter({
54
+ from: [{
55
+ token: tokenIn,
56
+ balance: amountIn
57
+ }],
58
+ tokenOut,
59
+ tokenInBalance
60
+ });
61
+ operations.push(buildSwapOperation({
62
+ tokenIn,
63
+ amountIn,
64
+ tokenOut,
65
+ amountOut: quote.minAmount,
66
+ calls: quote.calls,
67
+ creditAccount,
68
+ sdk
69
+ }, options));
70
+ return quote;
71
+ };
72
+ const decreaseDebt = (amount) => {
73
+ if (amount > 0n) operations.push(buildDecreaseDebtOperation({
74
+ amount,
75
+ creditAccount,
76
+ sdk
77
+ }, options));
78
+ };
79
+ const withdrawCollateral = async (amount) => {
80
+ const withdrawOperations = await buildWithdrawCollateralOperation({
81
+ token: intent.withdrawToken,
82
+ amount,
83
+ to: intent.to,
84
+ underlying,
85
+ creditAccount,
86
+ sdk
87
+ }, options);
88
+ operations.push(...withdrawOperations);
89
+ };
90
+ if (intent.debtRepaid === 0n) {
91
+ /**
92
+ * 2.2.x: debtRepaid === 0n means that debt was repayed on withdrawal start,
93
+ * So all claimed amount should be withdrawn
94
+ */
95
+ const available = eq(primary.token, intent.withdrawToken) ? primary.amount : (await swap(primary.token, primary.amount, intent.withdrawToken)).minAmount;
96
+ await withdrawCollateral(BigIntMath.min(intent.withdrawAmount, available));
97
+ } else if (eq(intent.sourceToken, intent.withdrawToken)) {
98
+ /**
99
+ * 2.5.x: This can happen when source=target and source has delayedConfig.
100
+ * In this case claimed amount should be used only to repay debt
101
+ * and withdrawAmount can be withdrawn as is
102
+ */
103
+ const undQuote = eq(primary.token, underlying) ? {
104
+ ...ZERO_QUOTE,
105
+ amount: primary.amount,
106
+ minAmount: primary.amount
107
+ } : await swap(primary.token, primary.amount, underlying);
108
+ decreaseDebt(BigIntMath.min(undQuote.minAmount, intent.debtRepaid));
109
+ await withdrawCollateral(intent.withdrawAmount);
110
+ } else if (eq(intent.withdrawToken, underlying)) {
111
+ /**
112
+ * 2.3.x: Special case - withdrawToken = underlying,
113
+ * so the full claim amount can be swapped int underlying;
114
+ * reserve W from the U result, then repay from the remainder.
115
+ */
116
+ const undQuote = eq(primary.token, underlying) ? {
117
+ ...ZERO_QUOTE,
118
+ amount: primary.amount,
119
+ minAmount: primary.amount
120
+ } : await swap(primary.token, primary.amount, underlying);
121
+ const withdrawn = BigIntMath.min(intent.withdrawAmount, undQuote.minAmount);
122
+ decreaseDebt(BigIntMath.min(BigIntMath.max(undQuote.minAmount - withdrawn, 0n), intent.debtRepaid));
123
+ withdrawCollateral(withdrawn);
124
+ } else if (eq(primary.token, intent.withdrawToken)) {
125
+ /**
126
+ * 2.4.2: Special case - withdrawToken = claimedToken,
127
+ * so we can take part of claimed amount without conversion and swap the rest into underlying;
128
+ * reserve claimed T for W; only the remainder funds debt.
129
+ */
130
+ const withdrawn = BigIntMath.min(intent.withdrawAmount, primary.amount);
131
+ const undQuote = await swap(primary.token, primary.amount - withdrawn, underlying);
132
+ decreaseDebt(BigIntMath.min(undQuote.minAmount, intent.debtRepaid));
133
+ withdrawCollateral(withdrawn);
134
+ } else if (eq(primary.token, underlying)) {
135
+ /**
136
+ * 2.4.1: Special case - underlying = claimedToken,
137
+ * so we can decrease debt using part of claimed amount and swap the rest into target;
138
+ * reserve U equivalent of W, repay with the rest, then swap W.
139
+ */
140
+ const withdrawInUnderlying = BigIntMath.min(convert(intent.withdrawToken, primary.token, intent.withdrawAmount), primary.amount);
141
+ decreaseDebt(BigIntMath.min(primary.amount - withdrawInUnderlying, intent.debtRepaid));
142
+ const withdrawQuote = await swap(primary.token, withdrawInUnderlying, intent.withdrawToken);
143
+ withdrawCollateral(BigIntMath.min(intent.withdrawAmount, withdrawQuote.minAmount));
144
+ } else {
145
+ /**
146
+ * 2.4.3: Common case - both target and claimed token are independent tokens;
147
+ * Here we should reserve part of claimed amount for withdrawal and
148
+ * use the rest for debt repayment.
149
+ * split a third-token claim into independent debt and W legs.
150
+ */
151
+ const withdrawInClaim = BigIntMath.min(convert(intent.withdrawToken, primary.token, intent.withdrawAmount), primary.amount);
152
+ const debtQuote = await swap(primary.token, BigIntMath.max(primary.amount - withdrawInClaim, 0n), underlying);
153
+ decreaseDebt(BigIntMath.min(debtQuote.minAmount, intent.debtRepaid));
154
+ const withdrawQuote = await swap(primary.token, withdrawInClaim, intent.withdrawToken);
155
+ withdrawCollateral(BigIntMath.min(intent.withdrawAmount, withdrawQuote.minAmount));
156
+ }
157
+ return operations;
158
+ }
159
+ //#endregion
160
+ export { buildResumeWithdrawOperations };
@@ -0,0 +1,16 @@
1
+ //#region src/sdk/accounts/intents/operations/add-collateral/index.ts
2
+ function buildAddCollateralOperation(input, option) {
3
+ const calls = option.kind === "onchain" ? input.sdk.accounts.prepareAddCollateral(input.creditAccount.creditFacade, [{
4
+ token: input.token,
5
+ balance: input.amount
6
+ }], {}) : [];
7
+ return {
8
+ type: "addCollateral",
9
+ token: input.token,
10
+ amount: input.amount,
11
+ value: input.value,
12
+ calls
13
+ };
14
+ }
15
+ //#endregion
16
+ export { buildAddCollateralOperation };
@@ -0,0 +1,52 @@
1
+ import { eq, toTargetDecimals } from "../../utils/common.js";
2
+ import "../../utils/index.js";
3
+ //#region src/sdk/accounts/intents/operations/claim-delayed/index.ts
4
+ /**
5
+ * Build the claim op from a matured claimable, or a simulation-only op from
6
+ * resume claimedToken/amount when claimable is not attached.
7
+ * Stores balances for raw call
8
+ */
9
+ function buildClaimDelayedWithdrawalOperation(input, option) {
10
+ if (option.kind === "onchain") {
11
+ const calls = input.sdk.accounts.assembleClaimDelayedCalls({
12
+ creditFacade: input.creditAccount.creditFacade,
13
+ claimableNow: option.claimableWithdrawal
14
+ });
15
+ return {
16
+ type: "claimDelayedWithdrawal",
17
+ token: option.claimableWithdrawal.token.toLowerCase(),
18
+ withdrawalPhantomToken: option.claimableWithdrawal.withdrawalPhantomToken.toLowerCase(),
19
+ withdrawalTokenSpent: option.claimableWithdrawal.withdrawalTokenSpent,
20
+ outputs: option.claimableWithdrawal.outputs.map((o) => ({
21
+ ...o,
22
+ token: o.token.toLowerCase()
23
+ })),
24
+ calls
25
+ };
26
+ }
27
+ return {
28
+ type: "claimDelayedWithdrawal",
29
+ token: option.withdrawalConfig.token,
30
+ withdrawalPhantomToken: option.withdrawalConfig.withdrawalPhantomToken,
31
+ withdrawalTokenSpent: option.phantomSpent,
32
+ outputs: [{
33
+ token: option.withdrawalConfig.underlying,
34
+ amount: toTargetDecimals(option.phantomSpent, option.withdrawalConfig.withdrawalPhantomToken, option.withdrawalConfig.underlying, input.sdk),
35
+ isDelayed: false
36
+ }],
37
+ calls: []
38
+ };
39
+ }
40
+ /** First positive non-delayed output (optionally restricted to `token`). */
41
+ function primaryInstantOutput(outputs, token) {
42
+ for (const out of outputs) {
43
+ if (out.isDelayed || out.amount <= 0n) continue;
44
+ if (token != null && !eq(out.token, token)) continue;
45
+ return {
46
+ token: out.token,
47
+ amount: out.amount
48
+ };
49
+ }
50
+ }
51
+ //#endregion
52
+ export { buildClaimDelayedWithdrawalOperation, primaryInstantOutput };
@@ -0,0 +1,25 @@
1
+ //#region src/sdk/accounts/intents/operations/close-credit-account/index.ts
2
+ async function buildCloseCreditAccountOperation(input, option) {
3
+ const { quote } = input;
4
+ if (option.kind === "onchain") {
5
+ const rwaConfig = input.sdk.tokensMeta.rwaUnderlyings.get(option.creditAccount.underlying);
6
+ const closeCalls = await input.sdk.accounts.assembleCloseCreditAccountCalls({
7
+ creditAccount: option.creditAccount,
8
+ routerCalls: quote.calls,
9
+ assetsToWithdraw: [(rwaConfig?.asset ?? option.creditAccount.underlying).toLowerCase()],
10
+ to: option.to
11
+ });
12
+ return {
13
+ ...quote,
14
+ calls: closeCalls,
15
+ type: "closeCreditAccount"
16
+ };
17
+ }
18
+ return {
19
+ ...quote,
20
+ calls: [],
21
+ type: "closeCreditAccount"
22
+ };
23
+ }
24
+ //#endregion
25
+ export { buildCloseCreditAccountOperation };
@@ -0,0 +1,11 @@
1
+ //#region src/sdk/accounts/intents/operations/decrease-debt/index.ts
2
+ function buildDecreaseDebtOperation(input, option) {
3
+ const calls = option.kind === "onchain" ? [input.sdk.accounts.prepareChangeDebt(input.creditAccount.creditFacade, input.amount, true)] : [];
4
+ return {
5
+ type: "decreaseDebt",
6
+ amount: input.amount,
7
+ calls
8
+ };
9
+ }
10
+ //#endregion
11
+ export { buildDecreaseDebtOperation };
@@ -0,0 +1,11 @@
1
+ //#region src/sdk/accounts/intents/operations/increase-debt/index.ts
2
+ function buildIncreaseDebtOperation(input, option) {
3
+ const calls = option.kind === "onchain" ? [input.sdk.accounts.prepareIncreaseDebt(input.creditAccount.creditFacade, input.amount)] : [];
4
+ return {
5
+ type: "increaseDebt",
6
+ amount: input.amount,
7
+ calls
8
+ };
9
+ }
10
+ //#endregion
11
+ export { buildIncreaseDebtOperation };
@@ -0,0 +1,14 @@
1
+ import { buildAddCollateralOperation } from "./add-collateral/index.js";
2
+ import { buildClaimDelayedWithdrawalOperation, primaryInstantOutput } from "./claim-delayed/index.js";
3
+ import { buildCloseCreditAccountOperation } from "./close-credit-account/index.js";
4
+ import { buildDecreaseDebtOperation } from "./decrease-debt/index.js";
5
+ import { buildIncreaseDebtOperation } from "./increase-debt/index.js";
6
+ import { buildQuotaUpdateOperation } from "./quota-update/index.js";
7
+ import { buildRepayCreditAccountOperation } from "./repay-credit-account/index.js";
8
+ import { buildStartDelayedWithdrawalOperation } from "./start-delayed-withdrawal/index.js";
9
+ import { buildSwapOperation } from "./swap/index.js";
10
+ import "./types.js";
11
+ import { buildUnwrapRwaCollateralOperation } from "./unwrap-rwa-collateral/index.js";
12
+ import { buildWithdrawCollateralOperation } from "./withdraw-collateral/index.js";
13
+ import { buildWrapRwaCollateralOperation } from "./wrap-rwa-collateral/index.js";
14
+ export { buildAddCollateralOperation, buildClaimDelayedWithdrawalOperation, buildCloseCreditAccountOperation, buildDecreaseDebtOperation, buildIncreaseDebtOperation, buildQuotaUpdateOperation, buildRepayCreditAccountOperation, buildStartDelayedWithdrawalOperation, buildSwapOperation, buildUnwrapRwaCollateralOperation, buildWithdrawCollateralOperation, buildWrapRwaCollateralOperation, primaryInstantOutput };
@@ -0,0 +1,21 @@
1
+ //#region src/sdk/accounts/intents/operations/quota-update/index.ts
2
+ function buildQuotaUpdateOperation(input, option) {
3
+ const { update, creditAccount, sdk } = input;
4
+ let calls = [];
5
+ if (option.kind === "onchain") {
6
+ const quotaAssets = [...update.quotaIncrease, ...update.quotaDecrease];
7
+ if (quotaAssets.length > 0) calls = sdk.accounts.prepareUpdateQuotas(creditAccount.creditFacade, {
8
+ averageQuota: quotaAssets,
9
+ minQuota: quotaAssets
10
+ });
11
+ }
12
+ return {
13
+ type: "changeQuota",
14
+ desiredQuota: update.desiredQuota,
15
+ quotaIncrease: update.quotaIncrease,
16
+ quotaDecrease: update.quotaDecrease,
17
+ calls
18
+ };
19
+ }
20
+ //#endregion
21
+ export { buildQuotaUpdateOperation };
@@ -0,0 +1,21 @@
1
+ //#region src/sdk/accounts/intents/operations/repay-credit-account/index.ts
2
+ async function buildRepayCreditAccountOperation(input, option) {
3
+ const calls = option.kind === "onchain" ? await input.sdk.accounts.assembleRepayCreditAccountCalls({
4
+ collateralAssets: input.expectedRepayAsset ?? [],
5
+ assetsToWithdraw: input.expectedWithdrawAssets ?? [],
6
+ creditAccount: option.creditAccount,
7
+ permits: option.permits,
8
+ to: option.to,
9
+ tokensToClaim: option.tokensToClaim,
10
+ calls: option.wrapCalls
11
+ }) : [];
12
+ return {
13
+ type: "repayCreditAccount",
14
+ expectedRepayAsset: input.expectedRepayAsset,
15
+ expectedWithdrawAssets: input.expectedWithdrawAssets,
16
+ value: input.value,
17
+ calls
18
+ };
19
+ }
20
+ //#endregion
21
+ export { buildRepayCreditAccountOperation };
@@ -0,0 +1,17 @@
1
+ //#region src/sdk/accounts/intents/operations/start-delayed-withdrawal/index.ts
2
+ function buildStartDelayedWithdrawalOperation(input, option) {
3
+ const calls = option.kind === "onchain" ? input.sdk.accounts.assembleStartDelayedWithdrawalCalls({
4
+ creditFacade: input.creditAccount.creditFacade,
5
+ preview: input.preview
6
+ }) : [];
7
+ return {
8
+ type: "startDelayedWithdrawal",
9
+ token: input.preview.token,
10
+ amountIn: input.preview.amountIn,
11
+ outputs: [...input.preview.outputs],
12
+ settlement: input.settlement,
13
+ calls
14
+ };
15
+ }
16
+ //#endregion
17
+ export { buildStartDelayedWithdrawalOperation };
@@ -0,0 +1,17 @@
1
+ //#region src/sdk/accounts/intents/operations/swap/index.ts
2
+ /** One-to-one swap op (withdraw resume conversion legs). */
3
+ function buildSwapOperation(input, option) {
4
+ if (option.kind === "onchain" && input.calls.length === 0) throw new Error("swap: missing router calls");
5
+ return {
6
+ type: "swap",
7
+ from: [{
8
+ token: input.tokenIn,
9
+ balance: input.amountIn
10
+ }],
11
+ tokenOut: input.tokenOut,
12
+ amountOut: input.amountOut,
13
+ calls: input.calls
14
+ };
15
+ }
16
+ //#endregion
17
+ export { buildSwapOperation };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,26 @@
1
+ //#region src/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.ts
2
+ /** One-to-one swap op (withdraw resume conversion legs). */
3
+ async function buildUnwrapRwaCollateralOperation(input, option) {
4
+ if (option.kind === "onchain") {
5
+ const calls = await input.sdk.accounts.getRWAUnwrapCalls(input.amountIn, input.creditAccount.creditManager);
6
+ if (!calls) throw new Error("unwrapRwaCollateral: no wrap calls found");
7
+ return {
8
+ type: "unwrapRwaCollateral",
9
+ tokenIn: input.tokenIn,
10
+ amount: input.amountIn,
11
+ tokenOut: input.tokenOut,
12
+ amountOut: input.amountOut,
13
+ calls
14
+ };
15
+ }
16
+ return {
17
+ type: "unwrapRwaCollateral",
18
+ tokenIn: input.tokenIn,
19
+ amount: input.amountIn,
20
+ tokenOut: input.tokenOut,
21
+ amountOut: input.amountOut,
22
+ calls: []
23
+ };
24
+ }
25
+ //#endregion
26
+ export { buildUnwrapRwaCollateralOperation };
@@ -0,0 +1,42 @@
1
+ import { eq, toTargetDecimals } from "../../utils/common.js";
2
+ import "../../utils/index.js";
3
+ import { buildUnwrapRwaCollateralOperation } from "../unwrap-rwa-collateral/index.js";
4
+ //#region src/sdk/accounts/intents/operations/withdraw-collateral/index.ts
5
+ /**
6
+ * Partial-withdraw tail: RWA forced unwrap, then withdrawCollateral to wallet.
7
+ *
8
+ * When withdrawing the wrapped RWA underlying, forces unwrap to `rwa.asset`
9
+ * and withdraws the unwrapped asset instead — even if the intent asked for
10
+ * underlying (mirrors legacy `resolveRwaForcedUnwrapWithdraw`).
11
+ */
12
+ async function buildWithdrawCollateralOperation(input, option) {
13
+ const { token, amount, to, underlying, creditAccount, sdk } = input;
14
+ if (amount <= 0n) throw new Error("Nothing to withdraw");
15
+ const buildWithdraw = (withdrawToken, withdrawAmount) => {
16
+ let calls = [];
17
+ if (option.kind === "onchain") {
18
+ if (to === void 0) throw new Error("withdrawCollateral.to is required for onchain calls");
19
+ calls = [sdk.accounts.prepareWithdrawToken(creditAccount.creditFacade, withdrawToken, withdrawAmount, to)];
20
+ }
21
+ return {
22
+ type: "withdrawCollateral",
23
+ token: withdrawToken,
24
+ amount: withdrawAmount,
25
+ to,
26
+ calls
27
+ };
28
+ };
29
+ const rwa = eq(token, underlying) ? sdk.tokensMeta.rwaUnderlyings.get(underlying) : void 0;
30
+ if (!rwa) return [buildWithdraw(token, amount)];
31
+ const amountOut = toTargetDecimals(amount, underlying, rwa.asset, sdk);
32
+ return [await buildUnwrapRwaCollateralOperation({
33
+ amountIn: amount,
34
+ tokenIn: underlying,
35
+ tokenOut: rwa.asset,
36
+ amountOut,
37
+ creditAccount,
38
+ sdk
39
+ }, option), buildWithdraw(rwa.asset, amountOut)];
40
+ }
41
+ //#endregion
42
+ export { buildWithdrawCollateralOperation };
@@ -0,0 +1,26 @@
1
+ //#region src/sdk/accounts/intents/operations/wrap-rwa-collateral/index.ts
2
+ /** One-to-one wrap op (decrease-leverage resume repay from rwa.asset). */
3
+ async function buildWrapRwaCollateralOperation(input, option) {
4
+ if (option.kind === "onchain") {
5
+ const calls = await input.sdk.accounts.getRWAWrapCalls(input.amountIn, input.creditAccount.creditManager);
6
+ if (!calls) throw new Error("wrapRwaCollateral: no wrap calls found");
7
+ return {
8
+ type: "wrapRwaCollateral",
9
+ tokenIn: input.tokenIn,
10
+ amount: input.amountIn,
11
+ tokenOut: input.tokenOut,
12
+ amountOut: input.amountOut,
13
+ calls
14
+ };
15
+ }
16
+ return {
17
+ type: "wrapRwaCollateral",
18
+ tokenIn: input.tokenIn,
19
+ amount: input.amountIn,
20
+ tokenOut: input.tokenOut,
21
+ amountOut: input.amountOut,
22
+ calls: []
23
+ };
24
+ }
25
+ //#endregion
26
+ export { buildWrapRwaCollateralOperation };
@@ -0,0 +1,56 @@
1
+ import { BigIntMath } from "../../../utils/bigint-math.js";
2
+ import { eq, toRouterCaSlice } from "../utils/common.js";
3
+ import { convertAmount } from "../utils/convert-amount.js";
4
+ import "../utils/index.js";
5
+ //#region src/sdk/accounts/intents/quoters/close.ts
6
+ /**
7
+ * Offchain quoter: debt is repaid from NON-underlying value
8
+ * (`amount = Σ convert(non-underlying → underlying) − debt`, clamped at 0),
9
+ * underlying already on the account goes straight to the wallet
10
+ * (`underlyingBalance = underlying + amount`). No router involved.
11
+ */
12
+ function createCloseOracleQuoter(args) {
13
+ const { sdk, creditAccount } = args;
14
+ const underlyingLc = creditAccount.underlying.toLowerCase();
15
+ return async ({ assets, debt }) => {
16
+ const convert = convertAmount(sdk, creditAccount.creditManager);
17
+ const underlyingBalance = assets.find((a) => eq(a.token, underlyingLc))?.balance ?? 0n;
18
+ const assetsSum = assets.reduce((acc, a) => acc + convert(a.token, creditAccount.underlying, a.balance), 0n);
19
+ const totalToRepay = BigIntMath.max(assetsSum - underlyingBalance, 0n);
20
+ const amount = BigIntMath.max(totalToRepay - debt, 0n);
21
+ return {
22
+ amount,
23
+ minAmount: amount,
24
+ underlyingBalance: underlyingBalance + amount,
25
+ calls: []
26
+ };
27
+ };
28
+ }
29
+ /**
30
+ * Onchain quoter: router close path over post-claim balances
31
+ * (phantom already spent). `amount` mirrors legacy
32
+ * `patchCloseOperationReceiveAmount` (debt 0n — closed preview is zeroed).
33
+ */
34
+ function createRouterCloseQuoter(args) {
35
+ const { sdk, creditAccount, slippage } = args;
36
+ const creditManager = sdk.marketRegister.findCreditManager(creditAccount.creditManager);
37
+ const router = sdk.routerFor({ creditFacade: creditAccount.creditFacade });
38
+ return async ({ assets }) => {
39
+ return await router.findBestClosePath({
40
+ creditAccount: toRouterCaSlice(creditAccount, assets),
41
+ creditManager: {
42
+ address: creditManager.creditManager.address.toLowerCase(),
43
+ creditFacade: creditManager.creditFacade.address.toLowerCase(),
44
+ collateralTokens: creditManager.creditManager.collateralTokens.map((t) => t.toLowerCase())
45
+ },
46
+ slippage,
47
+ balances: {
48
+ expectedBalances: assets,
49
+ leftoverBalances: [],
50
+ tokensToClaim: []
51
+ }
52
+ });
53
+ };
54
+ }
55
+ //#endregion
56
+ export { createCloseOracleQuoter, createRouterCloseQuoter };
@@ -0,0 +1,3 @@
1
+ import { createCloseOracleQuoter, createRouterCloseQuoter } from "./close.js";
2
+ import { createOracleSwapQuoter, createRouterSwapQuoter } from "./swap.js";
3
+ export { createCloseOracleQuoter, createOracleSwapQuoter, createRouterCloseQuoter, createRouterSwapQuoter };
@@ -0,0 +1,77 @@
1
+ import { toRouterCaSlice } from "../utils/common.js";
2
+ import { convertAmount } from "../utils/convert-amount.js";
3
+ import "../utils/index.js";
4
+ //#region src/sdk/accounts/intents/quoters/swap.ts
5
+ /**
6
+ * Offchain quoter: oracle prices via {@link convertAmount} (with an RWA
7
+ * bridge through the wrapped underlying when `rwa.asset` has no direct pool
8
+ * price).
9
+ */
10
+ function createOracleSwapQuoter(args) {
11
+ const { sdk, creditAccount } = args;
12
+ const { creditManager } = creditAccount;
13
+ const convert = convertAmount(sdk, creditManager);
14
+ return async ({ from, tokenOut }) => {
15
+ if (!from[0]) return {
16
+ amount: 0n,
17
+ minAmount: 0n,
18
+ calls: []
19
+ };
20
+ let amount = 0n;
21
+ for (const entry of from) amount += convert(entry.token, tokenOut, entry.balance);
22
+ return {
23
+ amount,
24
+ minAmount: amount,
25
+ calls: []
26
+ };
27
+ };
28
+ }
29
+ /**
30
+ * Onchain quoter: a full token-in spend uses `findOneTokenPath`; a partial
31
+ * spend uses `findManyToOnePath` with the exact post-operations balance and
32
+ * leftover. RWA wrap/unwrap calls are resolved by the router.
33
+ */
34
+ function createRouterSwapQuoter(args) {
35
+ const { sdk, creditAccount, slippage } = args;
36
+ const creditManager = sdk.marketRegister.findCreditManager(creditAccount.creditManager);
37
+ const cmSlice = {
38
+ address: creditManager.creditManager.address.toLowerCase(),
39
+ creditFacade: creditManager.creditFacade.address.toLowerCase(),
40
+ collateralTokens: creditManager.creditManager.collateralTokens.map((t) => t.toLowerCase())
41
+ };
42
+ const router = sdk.routerFor({ creditFacade: creditManager.creditFacade.address });
43
+ return async (request) => {
44
+ const input = request.from[0];
45
+ if (!input) return {
46
+ amount: 0n,
47
+ minAmount: 0n,
48
+ calls: []
49
+ };
50
+ const leftover = request.tokenInBalance - input.balance;
51
+ if (leftover < 0n) throw new Error("createRouterSwapQuoter: swap amount exceeds token-in balance");
52
+ if (leftover > 0n) return await router.findManyToOnePath({
53
+ creditAccount: toRouterCaSlice(creditAccount),
54
+ creditManager: cmSlice,
55
+ expectedBalances: [{
56
+ token: input.token,
57
+ balance: request.tokenInBalance
58
+ }],
59
+ leftoverBalances: [{
60
+ token: input.token,
61
+ balance: leftover
62
+ }],
63
+ target: request.tokenOut,
64
+ slippage
65
+ });
66
+ return await router.findOneTokenPath({
67
+ creditAccount: toRouterCaSlice(creditAccount),
68
+ creditManager: cmSlice,
69
+ tokenIn: input.token,
70
+ tokenOut: request.tokenOut,
71
+ amount: input.balance,
72
+ slippage
73
+ });
74
+ };
75
+ }
76
+ //#endregion
77
+ export { createOracleSwapQuoter, createRouterSwapQuoter };