@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,162 @@
1
+ import { CA_OP_CALLS, MOCK_CLAIM_CALL, MOCK_CLOSE_CALL, MOCK_ROUTER_CALL, MOCK_RWA_UNWRAP_CALL, MOCK_RWA_WRAP_CALL } from "./sdk-mock.js";
2
+ import { expect } from "vitest";
3
+ //#region src/sdk/accounts/intents/testing/expect.ts
4
+ function expectedCalls(expected) {
5
+ return expected.calls ?? [];
6
+ }
7
+ /**
8
+ * Fills sentinel `calls` for onchain resume expectations. Shared fixtures keep
9
+ * `calls: []` for offchain; onchain tests map through this helper.
10
+ */
11
+ function withOnchainOpCalls(ops) {
12
+ return ops.map((op) => {
13
+ switch (op.type) {
14
+ case "claimDelayedWithdrawal": return {
15
+ ...op,
16
+ calls: [MOCK_CLAIM_CALL]
17
+ };
18
+ case "changeQuota": return {
19
+ ...op,
20
+ calls: [CA_OP_CALLS.changeQuota]
21
+ };
22
+ case "decreaseDebt": return {
23
+ ...op,
24
+ calls: [CA_OP_CALLS.decreaseDebt]
25
+ };
26
+ case "withdrawCollateral": return {
27
+ ...op,
28
+ calls: [CA_OP_CALLS.withdrawCollateral]
29
+ };
30
+ case "swap": return {
31
+ ...op,
32
+ calls: op.calls?.length ? op.calls : [MOCK_ROUTER_CALL]
33
+ };
34
+ case "wrapRwaCollateral": return {
35
+ ...op,
36
+ calls: op.calls?.length ? op.calls : [MOCK_RWA_WRAP_CALL]
37
+ };
38
+ case "unwrapRwaCollateral": return {
39
+ ...op,
40
+ calls: op.calls?.length ? op.calls : [MOCK_RWA_UNWRAP_CALL]
41
+ };
42
+ case "closeCreditAccount": return {
43
+ ...op,
44
+ calls: op.calls?.length ? op.calls : [MOCK_CLOSE_CALL]
45
+ };
46
+ default: return op;
47
+ }
48
+ });
49
+ }
50
+ function matchOp(actual, expected, index) {
51
+ expect(actual.type, `op[${index}].type`).toBe(expected.type);
52
+ switch (expected.type) {
53
+ case "claimDelayedWithdrawal":
54
+ if (actual.type !== "claimDelayedWithdrawal") return;
55
+ expect(actual.token, `op[${index}].token`).toBe(expected.token);
56
+ expect(actual.withdrawalPhantomToken, `op[${index}].withdrawalPhantomToken`).toBe(expected.withdrawalPhantomToken);
57
+ expect(actual.withdrawalTokenSpent, `op[${index}].withdrawalTokenSpent`).toBe(expected.withdrawalTokenSpent);
58
+ expect(actual.outputs, `op[${index}].outputs`).toEqual(expected.outputs);
59
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
60
+ break;
61
+ case "changeQuota":
62
+ if (actual.type !== "changeQuota") return;
63
+ expect(actual.quotaIncrease, `op[${index}].quotaIncrease`).toEqual(expected.quotaIncrease);
64
+ expect(actual.quotaDecrease, `op[${index}].quotaDecrease`).toEqual(expected.quotaDecrease);
65
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
66
+ break;
67
+ case "closeCreditAccount":
68
+ if (actual.type !== "closeCreditAccount") return;
69
+ expect(actual.amount, `op[${index}].amount`).toBe(expected.amount);
70
+ expect(actual.minAmount, `op[${index}].minAmount`).toBe(expected.minAmount);
71
+ expect(actual.underlyingBalance, `op[${index}].underlyingBalance`).toBe(expected.underlyingBalance);
72
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
73
+ break;
74
+ case "swap":
75
+ if (actual.type !== "swap") return;
76
+ expect(actual.from, `op[${index}].from`).toEqual(expected.from);
77
+ expect(actual.tokenOut, `op[${index}].tokenOut`).toBe(expected.tokenOut);
78
+ expect(actual.amountOut, `op[${index}].amountOut`).toBe(expected.amountOut);
79
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
80
+ break;
81
+ case "decreaseDebt":
82
+ if (actual.type !== "decreaseDebt") return;
83
+ expect(actual.amount, `op[${index}].amount`).toBe(expected.amount);
84
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
85
+ break;
86
+ case "withdrawCollateral":
87
+ if (actual.type !== "withdrawCollateral") return;
88
+ expect(actual.token, `op[${index}].token`).toBe(expected.token);
89
+ expect(actual.amount, `op[${index}].amount`).toBe(expected.amount);
90
+ expect(actual.to, `op[${index}].to`).toBe(expected.to);
91
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
92
+ break;
93
+ case "unwrapRwaCollateral":
94
+ if (actual.type !== "unwrapRwaCollateral") return;
95
+ expect(actual.tokenIn, `op[${index}].tokenIn`).toBe(expected.tokenIn);
96
+ expect(actual.tokenOut, `op[${index}].tokenOut`).toBe(expected.tokenOut);
97
+ expect(actual.amount, `op[${index}].amount`).toBe(expected.amount);
98
+ expect(actual.amountOut, `op[${index}].amountOut`).toBe(expected.amountOut);
99
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
100
+ break;
101
+ case "wrapRwaCollateral":
102
+ if (actual.type !== "wrapRwaCollateral") return;
103
+ expect(actual.tokenIn, `op[${index}].tokenIn`).toBe(expected.tokenIn);
104
+ expect(actual.tokenOut, `op[${index}].tokenOut`).toBe(expected.tokenOut);
105
+ expect(actual.amount, `op[${index}].amount`).toBe(expected.amount);
106
+ expect(actual.amountOut, `op[${index}].amountOut`).toBe(expected.amountOut);
107
+ expect(actual.calls, `op[${index}].calls`).toEqual(expectedCalls(expected));
108
+ }
109
+ }
110
+ /** Asserts exact operations on a raw op array (type + tokens + amounts). */
111
+ function expectOpsArrayExact(ops, expected) {
112
+ expect(ops.length, "operations.length").toBe(expected.length);
113
+ for (let i = 0; i < expected.length; i++) {
114
+ const actual = ops[i];
115
+ const exp = expected[i];
116
+ if (actual === void 0 || exp === void 0) {
117
+ expect.fail(`missing op at index ${i}`);
118
+ return;
119
+ }
120
+ matchOp(actual, exp, i);
121
+ }
122
+ }
123
+ /** Asserts exact calls on a raw MultiCall array (target + callData). */
124
+ function expectCallsArrayExact(calls, expected, label = "calls") {
125
+ expect(calls.length, `${label}.length`).toBe(expected.length);
126
+ for (let i = 0; i < expected.length; i++) {
127
+ const actual = calls[i];
128
+ const exp = expected[i];
129
+ if (actual === void 0 || exp === void 0) {
130
+ expect.fail(`missing call at index ${i}`);
131
+ return;
132
+ }
133
+ expect(actual.target, `${label}[${i}].target`).toBe(exp.target);
134
+ expect(actual.callData, `${label}[${i}].callData`).toBe(exp.callData);
135
+ }
136
+ }
137
+ /**
138
+ * Asserts a successful adjust-style resume preview: ok, instant branch present,
139
+ * exact calls (empty unless `expectedCalls` is provided), metrics from the
140
+ * post-claim CA, and exact operations (incl. changeQuota).
141
+ * Returns the adjust preview state for further asset/quota assertions.
142
+ */
143
+ function expectAdjustResumePreview(result, args) {
144
+ expect(result.ok).toBe(true);
145
+ if (!result.ok) throw new Error("expected ok resume preview");
146
+ expect(result.instant, "instant branch").toBeDefined();
147
+ if (!result.instant) throw new Error("expected instant branch");
148
+ if (args.expectedCalls) expectCallsArrayExact(result.instant.calls, args.expectedCalls);
149
+ else expect(result.instant.calls).toEqual([]);
150
+ const state = result.instant.preview.min;
151
+ expect(state.kind).toBe("adjust");
152
+ if (state.kind !== "adjust") throw new Error("expected adjust preview state");
153
+ expect(state.totalValue).toBe(args.totalValue);
154
+ expect(state.accountDebt).toBe(args.accountDebt);
155
+ expectOpsArrayExact(result.instant.operations, args.expectedOps);
156
+ return state;
157
+ }
158
+ function assetBalance(assets, token) {
159
+ return assets.find((a) => a.token === token)?.balance ?? 0n;
160
+ }
161
+ //#endregion
162
+ export { assetBalance, expectAdjustResumePreview, expectCallsArrayExact, expectOpsArrayExact, withOnchainOpCalls };
@@ -0,0 +1,157 @@
1
+ import { toBN } from "../../../utils/formatter.js";
2
+ import "../../../index.js";
3
+ import { MOCK_CLAIM_CALL, buildMockSdk } from "./sdk-mock.js";
4
+ //#region src/sdk/accounts/intents/testing/resume.ts
5
+ /**
6
+ * Shared kit for claim-only resume fixtures (add collateral, increase
7
+ * leverage, deposit, deposit+increase).
8
+ *
9
+ * Unlike the legacy props (which echoed `creditAccount.totalValue`), the
10
+ * service computes totalValue from CA token balances via the price oracle.
11
+ * Each case's base balance is therefore `postClaimTotalValue − claimed value
12
+ * in UND`, so the derived totalValue matches the legacy expectation exactly.
13
+ */
14
+ const UND_DECIMALS = 8;
15
+ const TOK_DECIMALS = 18;
16
+ const UND = "0x3333333333333333333333333333333333333333";
17
+ const ANY = "0x1111111111111111111111111111111111111111";
18
+ const ANY2 = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
19
+ const RWA_ASSET = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
20
+ const RESUME_FIXTURE_PHANTOM = "0xcccccccccccccccccccccccccccccccccccccccc";
21
+ const CREDIT_MANAGER = "0xdddddddddddddddddddddddddddddddddddddddd";
22
+ const CREDIT_FACADE = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
23
+ const CREDIT_ACCOUNT = "0xacacacacacacacacacacacacacacacacacacacac";
24
+ const PRICES = {
25
+ [UND]: toBN("2", 8),
26
+ [ANY]: toBN("1", 8),
27
+ [ANY2]: toBN("1", 8),
28
+ [RWA_ASSET]: toBN("2", 8)
29
+ };
30
+ const DECIMALS = {
31
+ [UND]: 8,
32
+ [ANY]: 18,
33
+ [ANY2]: 18,
34
+ [RWA_ASSET]: 8
35
+ };
36
+ const QUOTAS = {
37
+ [ANY]: {
38
+ token: ANY,
39
+ rate: 500n,
40
+ limit: toBN("999999999999999", 18),
41
+ isActive: true
42
+ },
43
+ [ANY2]: {
44
+ token: ANY2,
45
+ rate: 500n,
46
+ limit: toBN("999999999999999", 18),
47
+ isActive: true
48
+ },
49
+ [RWA_ASSET]: {
50
+ token: RWA_ASSET,
51
+ rate: 500n,
52
+ limit: toBN("999999999999999", 8),
53
+ isActive: true
54
+ }
55
+ };
56
+ const LIQUIDATION_THRESHOLDS = {
57
+ [UND]: 9800,
58
+ [ANY]: 9200,
59
+ [ANY2]: 9200,
60
+ [RWA_ASSET]: 9200
61
+ };
62
+ const MAX_DEBT = toBN("200000", 8);
63
+ /** Claimed proceeds converted to UND (mirrors the mock price oracle). */
64
+ function claimedValueInUnd(amount, token) {
65
+ return amount * PRICES[token] * 10n ** BigInt(8) / (PRICES[UND] * 10n ** BigInt(DECIMALS[token]));
66
+ }
67
+ /**
68
+ * Mock sdk for a resume case. The fixture phantom token gets the claimed
69
+ * token's decimals so the offchain `toTargetDecimals` rescale stays identity
70
+ * (its `10n * decimals` factor is only correct for equal decimals).
71
+ * `closePath` configures the router `findBestClosePath` result (close resume).
72
+ */
73
+ function buildResumeSdk(c, extras) {
74
+ const phantom = extras?.phantom ?? "0xcccccccccccccccccccccccccccccccccccccccc";
75
+ return buildMockSdk({
76
+ prices: {
77
+ ...PRICES,
78
+ ...extras?.extraPrices
79
+ },
80
+ decimals: {
81
+ ...DECIMALS,
82
+ ...extras?.extraDecimals,
83
+ [phantom]: extras?.extraDecimals?.[c.claimedToken] ?? DECIMALS[c.claimedToken]
84
+ },
85
+ quotas: QUOTAS,
86
+ liquidationThresholds: LIQUIDATION_THRESHOLDS,
87
+ maxDebt: MAX_DEBT,
88
+ creditManager: CREDIT_MANAGER,
89
+ creditFacade: CREDIT_FACADE,
90
+ underlying: UND,
91
+ closePath: extras?.closePath,
92
+ rwaAssets: extras?.rwaAssets
93
+ });
94
+ }
95
+ function buildOffchainOptions(c) {
96
+ return {
97
+ kind: "offchain",
98
+ phantomSpent: c.claimedAmount,
99
+ withdrawalConfig: {
100
+ creditManager: CREDIT_MANAGER,
101
+ token: c.claimedToken,
102
+ withdrawalPhantomToken: RESUME_FIXTURE_PHANTOM,
103
+ underlying: c.claimedToken,
104
+ withdrawalLength: 0n
105
+ }
106
+ };
107
+ }
108
+ function buildOnchainOptions(c) {
109
+ return {
110
+ kind: "onchain",
111
+ claimableWithdrawal: {
112
+ token: c.claimedToken,
113
+ withdrawalPhantomToken: RESUME_FIXTURE_PHANTOM,
114
+ withdrawalTokenSpent: c.claimedAmount,
115
+ outputs: [{
116
+ token: c.claimedToken,
117
+ amount: c.claimedAmount,
118
+ isDelayed: false
119
+ }],
120
+ claimCalls: [MOCK_CLAIM_CALL]
121
+ }
122
+ };
123
+ }
124
+ function buildClaimResumeProps(args) {
125
+ const { intent, case: c, sdk, options } = args;
126
+ return {
127
+ intent,
128
+ creditAccount: {
129
+ creditAccount: CREDIT_ACCOUNT,
130
+ creditManager: CREDIT_MANAGER,
131
+ creditFacade: CREDIT_FACADE,
132
+ underlying: UND,
133
+ enabledTokensMask: 0n,
134
+ totalDebtUSD: 0n,
135
+ accountDebt: c.postClaimDebt,
136
+ tokens: [{
137
+ token: RESUME_FIXTURE_PHANTOM,
138
+ balance: c.claimedAmount,
139
+ quota: 0n,
140
+ mask: 0n,
141
+ success: true
142
+ }, ...c.baseAssets ?? [{
143
+ token: "0x3333333333333333333333333333333333333333",
144
+ balance: c.postClaimTotalValue - claimedValueInUnd(c.claimedAmount, c.claimedToken),
145
+ quota: 0n,
146
+ mask: 0n,
147
+ success: true
148
+ }]]
149
+ },
150
+ sdk,
151
+ quotaReserve: void 0,
152
+ options,
153
+ slippage: void 0
154
+ };
155
+ }
156
+ //#endregion
157
+ export { ANY, ANY2, CREDIT_ACCOUNT, CREDIT_FACADE, CREDIT_MANAGER, RESUME_FIXTURE_PHANTOM, RWA_ASSET, TOK_DECIMALS, UND, UND_DECIMALS, buildClaimResumeProps, buildOffchainOptions, buildOnchainOptions, buildResumeSdk, claimedValueInUnd };
@@ -0,0 +1,172 @@
1
+ import { vi } from "vitest";
2
+ //#region src/sdk/accounts/intents/testing/sdk-mock.ts
3
+ /**
4
+ * Test kit for intent-service specs.
5
+ *
6
+ * The service resolves all market data through `OnchainSDK`
7
+ * (`marketRegister`, `tokensMeta`, `accounts`). `buildMockSdk` builds a mock
8
+ * from plain records; assemble mocks ECHO recognizable sentinel calls derived
9
+ * from their inputs, so `result.instant.calls` pins down which ops reached the
10
+ * assembler and in which order.
11
+ */
12
+ /** Fixture `claimableWithdrawal.claimCalls` content; echoes through claim ops. */
13
+ const MOCK_CLAIM_CALL = {
14
+ target: "0x1111111111111111111111111111111111111111",
15
+ callData: "0x"
16
+ };
17
+ /** Recognizable router call embedded in close path results. */
18
+ const MOCK_ROUTER_CALL = {
19
+ target: "0x9999999999999999999999999999999999999999",
20
+ callData: "0x"
21
+ };
22
+ /** Returned by the `getRWAWrapCalls` mock; passes through per wrap op. */
23
+ const MOCK_RWA_WRAP_CALL = {
24
+ target: "0x8888888888888888888888888888888888888888",
25
+ callData: "0x"
26
+ };
27
+ /** Router-produced call for an RWA underlying → asset unwrap leg. */
28
+ const MOCK_RWA_UNWRAP_CALL = {
29
+ target: "0x7777777777777777777777777777777777777777",
30
+ callData: "0x"
31
+ };
32
+ /** Returned by the `assembleCloseCreditAccountCalls` mock. */
33
+ const MOCK_CLOSE_CALL = {
34
+ target: "0x5555555555555555555555555555555555555555",
35
+ callData: "0x"
36
+ };
37
+ /** One sentinel call per plain encodable op type. */
38
+ const CA_OP_CALLS = {
39
+ addCollateral: {
40
+ target: "0xa1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1",
41
+ callData: "0x"
42
+ },
43
+ increaseDebt: {
44
+ target: "0xd1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1",
45
+ callData: "0x"
46
+ },
47
+ decreaseDebt: {
48
+ target: "0xd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2",
49
+ callData: "0x"
50
+ },
51
+ withdrawCollateral: {
52
+ target: "0xc1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1",
53
+ callData: "0x"
54
+ },
55
+ changeQuota: {
56
+ target: "0xc2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2",
57
+ callData: "0x"
58
+ }
59
+ };
60
+ function echoEncodableOpCalls(op) {
61
+ if ("calls" in op) return [...op.calls];
62
+ return [CA_OP_CALLS[op.type]];
63
+ }
64
+ /**
65
+ * Mock `OnchainSDK` covering exactly what the intent-service touches:
66
+ * price conversion, quota params, CM/facade lookup and call assembly.
67
+ * Conversion mirrors the legacy price-based math:
68
+ * `amount * price[from] * 10^dec(to) / (price[to] * 10^dec(from))`.
69
+ */
70
+ function buildMockSdk(args) {
71
+ const decimalsOf = (token) => args.decimals[token.toLowerCase()] ?? 18;
72
+ const convert = (token, to, amount) => {
73
+ const from = token.toLowerCase();
74
+ const target = to.toLowerCase();
75
+ const fromPrice = args.prices[from];
76
+ const toPrice = args.prices[target];
77
+ if (fromPrice === void 0 || toPrice === void 0) throw new Error(`mock priceOracle: missing price for ${from} or ${target}`);
78
+ return amount * fromPrice * 10n ** BigInt(decimalsOf(target)) / (toPrice * 10n ** BigInt(decimalsOf(from)));
79
+ };
80
+ const quotas = { values: () => Object.values(args.quotas).map((q) => ({
81
+ cumulativeIndexLU: 0n,
82
+ totalQuoted: 0n,
83
+ quotaIncreaseFee: 0n,
84
+ ...q
85
+ })) };
86
+ const liquidationThresholds = { entries: () => Object.entries(args.liquidationThresholds) };
87
+ const market = {
88
+ priceOracle: { convert },
89
+ pool: {
90
+ pqk: { quotas },
91
+ underlying: args.underlying
92
+ }
93
+ };
94
+ const creditManagerSuite = {
95
+ creditManager: {
96
+ address: args.creditManager,
97
+ liquidationThresholds,
98
+ collateralTokens: []
99
+ },
100
+ creditFacade: {
101
+ address: args.creditFacade,
102
+ maxDebt: args.maxDebt
103
+ }
104
+ };
105
+ const routeCalls = (tokenIn, tokenOut) => {
106
+ const underlying = args.underlying.toLowerCase();
107
+ const asset = args.rwaAssets?.[args.underlying.toLowerCase()]?.toLowerCase();
108
+ const from = tokenIn.toLowerCase();
109
+ const to = tokenOut.toLowerCase();
110
+ if (asset && from === asset && to === underlying) return [MOCK_RWA_WRAP_CALL];
111
+ if (asset && from === underlying && to === asset) return [MOCK_RWA_UNWRAP_CALL];
112
+ return [MOCK_ROUTER_CALL];
113
+ };
114
+ const router = {
115
+ findBestClosePath: vi.fn(async () => {
116
+ if (!args.closePath) throw new Error("mock router: closePath not configured");
117
+ return args.closePath;
118
+ }),
119
+ findOneTokenPath: vi.fn(async ({ amount, tokenIn, tokenOut }) => ({
120
+ amount,
121
+ minAmount: amount,
122
+ calls: routeCalls(tokenIn, tokenOut)
123
+ })),
124
+ findManyToOnePath: vi.fn(async ({ expectedBalances, leftoverBalances, target }) => {
125
+ const spent = expectedBalances.reduce((acc, a) => acc + a.balance, 0n) - leftoverBalances.reduce((acc, a) => acc + a.balance, 0n);
126
+ const tokenIn = expectedBalances[0]?.token ?? target;
127
+ return {
128
+ amount: spent,
129
+ minAmount: spent,
130
+ calls: routeCalls(tokenIn, target)
131
+ };
132
+ }),
133
+ findOpenStrategyPath: vi.fn(async ({ expectedBalances, leftoverBalances }) => {
134
+ const spent = expectedBalances.reduce((acc, a) => acc + a.balance, 0n) - leftoverBalances.reduce((acc, a) => acc + a.balance, 0n);
135
+ return {
136
+ amount: spent,
137
+ minAmount: spent,
138
+ calls: [MOCK_ROUTER_CALL],
139
+ minAssets: [],
140
+ averageAssets: []
141
+ };
142
+ })
143
+ };
144
+ return {
145
+ tokensMeta: {
146
+ get: (token) => ({ decimals: decimalsOf(token) }),
147
+ rwaUnderlyings: { get: (token) => {
148
+ const asset = args.rwaAssets?.[token.toLowerCase()];
149
+ return asset ? { asset } : void 0;
150
+ } }
151
+ },
152
+ marketRegister: {
153
+ findByCreditManager: vi.fn(() => market),
154
+ findCreditManager: vi.fn(() => creditManagerSuite)
155
+ },
156
+ routerFor: vi.fn(() => router),
157
+ accounts: {
158
+ assembleCaOperations: vi.fn(({ operations }) => operations.flatMap(echoEncodableOpCalls)),
159
+ prepareIncreaseDebt: vi.fn(() => CA_OP_CALLS.increaseDebt),
160
+ prepareChangeDebt: vi.fn(() => CA_OP_CALLS.decreaseDebt),
161
+ prepareAddCollateral: vi.fn(() => [CA_OP_CALLS.addCollateral]),
162
+ prepareWithdrawToken: vi.fn(() => CA_OP_CALLS.withdrawCollateral),
163
+ prepareUpdateQuotas: vi.fn(() => [CA_OP_CALLS.changeQuota]),
164
+ assembleClaimDelayedCalls: vi.fn(({ claimableNow }) => [...claimableNow.claimCalls]),
165
+ assembleCloseCreditAccountCalls: vi.fn(async () => [MOCK_CLOSE_CALL]),
166
+ getRWAWrapCalls: vi.fn(async () => [MOCK_RWA_WRAP_CALL]),
167
+ getRWAUnwrapCalls: vi.fn(async () => [MOCK_RWA_UNWRAP_CALL])
168
+ }
169
+ };
170
+ }
171
+ //#endregion
172
+ export { CA_OP_CALLS, MOCK_CLAIM_CALL, MOCK_CLOSE_CALL, MOCK_ROUTER_CALL, MOCK_RWA_UNWRAP_CALL, MOCK_RWA_WRAP_CALL, buildMockSdk };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ //#region src/sdk/accounts/intents/utils/assemble-operation-calls.ts
2
+ function assembleOperationCalls({ operations }) {
3
+ return operations.flatMap((operation) => operation.calls);
4
+ }
5
+ //#endregion
6
+ export { assembleOperationCalls };
@@ -0,0 +1,12 @@
1
+ //#region src/sdk/accounts/intents/utils/borrowed-amount-plus-interest-and-fees.ts
2
+ /**
3
+ * Total debt of a credit account: principal + accrued interest + accrued fees.
4
+ *
5
+ * On the v3 SDK `CreditAccountData` the parts
6
+ * come as separate `debt` / `accruedInterest` / `accruedFees` fields.
7
+ */
8
+ function calcBorrowedAmountPlusInterestAndFees(ca) {
9
+ return ca.debt + ca.accruedInterest + ca.accruedFees;
10
+ }
11
+ //#endregion
12
+ export { calcBorrowedAmountPlusInterestAndFees };
@@ -0,0 +1,40 @@
1
+ import { AddressMap } from "../../../utils/AddressMap.js";
2
+ //#region src/sdk/accounts/intents/utils/common.ts
3
+ /** Case-insensitive address equality. */
4
+ const eq = (a, b) => a.toLowerCase() === b.toLowerCase();
5
+ function toTargetDecimals(fromAmount, fromToken, toToken, sdk) {
6
+ const fromDecimals = sdk.tokensMeta.get(fromToken)?.decimals ?? 18;
7
+ const toDecimals = sdk.tokensMeta.get(toToken)?.decimals ?? 18;
8
+ return fromAmount * 10n ** BigInt(toDecimals) / 10n ** BigInt(fromDecimals);
9
+ }
10
+ /**
11
+ * Router CA slice from the account slice. RouterV310 reads `ca.tokens` for
12
+ * underlyingBalance, so balances are overlaid with the post-claim projection
13
+ * (legacy `overlayExpectedBalancesOntoCaTokens`): existing tokens keep quota
14
+ * with balance from the projection (0n when absent), new tokens get quota 0n.
15
+ */
16
+ function toRouterCaSlice(creditAccount, expectedBalances = []) {
17
+ const { accountDebt, underlying, creditFacade, creditManager, creditAccount: creditAccountAddress, tokens: _, ...restCA } = creditAccount;
18
+ const expected = new AddressMap([]);
19
+ for (const asset of expectedBalances ?? []) expected.upsert(asset.token, (expected.get(asset.token) ?? 0n) + asset.balance);
20
+ const tokens = creditAccount.tokens.map((t) => {
21
+ const token = t.token.toLowerCase();
22
+ const balance = expected.get(token) ?? t.balance;
23
+ return {
24
+ ...t,
25
+ token,
26
+ balance
27
+ };
28
+ });
29
+ return {
30
+ ...restCA,
31
+ underlying: underlying.toLowerCase(),
32
+ creditAccount: creditAccountAddress.toLowerCase(),
33
+ creditFacade: creditFacade.toLowerCase(),
34
+ creditManager: creditManager.toLowerCase(),
35
+ debt: creditAccount.accountDebt,
36
+ tokens
37
+ };
38
+ }
39
+ //#endregion
40
+ export { eq, toRouterCaSlice, toTargetDecimals };
@@ -0,0 +1,36 @@
1
+ import { toTargetDecimals } from "./common.js";
2
+ //#region src/sdk/accounts/intents/utils/convert-amount.ts
3
+ /**
4
+ * Converts an amount from one token to another using oracle prices of the
5
+ * given credit manager's market. When the direct oracle path is missing
6
+ * (e.g. `rwa.asset` has no pool price), bridges via the wrapped underlying
7
+ * (1:1 wrap + decimals rescale) — mirrors legacy `convertAmountWithRwaBridge`.
8
+ */
9
+ const convertAmount = (sdk, creditManager) => (fromTokenRaw, toTokenRaw, amount) => {
10
+ const fromToken = fromTokenRaw.toLowerCase();
11
+ const toToken = toTokenRaw.toLowerCase();
12
+ if (amount === 0n || fromToken === toToken) return amount;
13
+ const market = sdk.marketRegister.findByCreditManager(creditManager);
14
+ const underlying = market.pool.underlying.toLowerCase();
15
+ let direct = 0n;
16
+ try {
17
+ direct = market.priceOracle.convert(fromToken, toToken, amount);
18
+ } catch {}
19
+ if (direct > 0n) return direct;
20
+ const rwa = sdk.tokensMeta.rwaUnderlyings.get(underlying);
21
+ if (!rwa) return 0n;
22
+ const asset = rwa.asset.toLowerCase();
23
+ if (fromToken === asset && toToken === underlying) return toTargetDecimals(amount, fromToken, toToken, sdk);
24
+ if (fromToken === underlying && toToken === asset) return toTargetDecimals(amount, fromToken, toToken, sdk);
25
+ if (fromToken === asset) {
26
+ const asUnd = toTargetDecimals(amount, fromToken, underlying, sdk);
27
+ return convertAmount(sdk, creditManager)(underlying, toTokenRaw, asUnd);
28
+ }
29
+ if (toToken === asset) {
30
+ const asUnd = convertAmount(sdk, creditManager)(fromToken, underlying, amount);
31
+ return asUnd === 0n ? 0n : toTargetDecimals(asUnd, underlying, toToken, sdk);
32
+ }
33
+ return 0n;
34
+ };
35
+ //#endregion
36
+ export { convertAmount };
@@ -0,0 +1,9 @@
1
+ import { assembleOperationCalls } from "./assemble-operation-calls.js";
2
+ import { calcBorrowedAmountPlusInterestAndFees } from "./borrowed-amount-plus-interest-and-fees.js";
3
+ import { eq, toRouterCaSlice, toTargetDecimals } from "./common.js";
4
+ import { convertAmount } from "./convert-amount.js";
5
+ import { getQuotasForUpdate } from "./quotas-for-update.js";
6
+ import { simulateOperationAssets } from "./simulate-assets.js";
7
+ import { simulateState } from "./simulate-adjust-state.js";
8
+ import { getOperationsWithQuotaUpdate } from "./with-quota-update.js";
9
+ export { assembleOperationCalls, calcBorrowedAmountPlusInterestAndFees, convertAmount, eq, getOperationsWithQuotaUpdate, getQuotasForUpdate, simulateOperationAssets, simulateState, toRouterCaSlice, toTargetDecimals };