@gearbox-protocol/sdk 15.1.0-next.1 → 15.1.0-next.10

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 (444) hide show
  1. package/dist/cjs/abi/iExpirable.js +15 -0
  2. package/dist/cjs/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
  3. package/dist/cjs/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
  4. package/dist/cjs/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
  5. package/dist/cjs/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
  6. package/dist/cjs/common-utils/utils/creditAccount/liquidation-price.js +21 -11
  7. package/dist/cjs/dev/AccountOpener.js +0 -1
  8. package/dist/cjs/dev/compareOpportunities.js +218 -0
  9. package/dist/cjs/model/charts.js +147 -0
  10. package/dist/cjs/model/charts.schema.js +240 -0
  11. package/dist/cjs/model/index.js +35 -22
  12. package/dist/cjs/model/liquidations.schema.js +1 -1
  13. package/dist/cjs/model/notices.schema.js +25 -0
  14. package/dist/cjs/model/opportunities.schema.js +1 -1
  15. package/dist/cjs/model/positions.schema.js +48 -2
  16. package/dist/cjs/new-sdk/AbstractNamespace.js +34 -4
  17. package/dist/cjs/new-sdk/GearboxSDK.js +72 -3
  18. package/dist/cjs/new-sdk/execute/ExecuteApi.js +95 -0
  19. package/dist/cjs/new-sdk/execute/index.js +3 -0
  20. package/dist/cjs/new-sdk/index.js +7 -0
  21. package/dist/cjs/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
  22. package/dist/cjs/new-sdk/positions/PositionsNamespace.js +3 -6
  23. package/dist/cjs/new-sdk/simulate/SimulateApi.js +361 -0
  24. package/dist/cjs/new-sdk/simulate/index.js +4 -0
  25. package/dist/cjs/new-sdk/utils/index.js +0 -1
  26. package/dist/cjs/offchain/AbstractOffchainNamespace.js +10 -7
  27. package/dist/cjs/offchain/GearboxAPI.js +7 -0
  28. package/dist/cjs/offchain/index.js +3 -0
  29. package/dist/cjs/offchain/notices/OffchainNotices.js +27 -0
  30. package/dist/cjs/offchain/notices/index.js +3 -0
  31. package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +4 -8
  32. package/dist/cjs/offchain/positions/OffchainPositions.js +12 -12
  33. package/dist/cjs/preview/preview/CreditAccountState.js +14 -1
  34. package/dist/cjs/preview/preview/buildDelayedPreview.js +16 -6
  35. package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +9 -2
  36. package/dist/cjs/preview/preview/previewOpenCreditAccount.js +11 -3
  37. package/dist/cjs/preview/preview/previewOperation.js +1 -1
  38. package/dist/cjs/sdk/MultichainSDK.js +3 -4
  39. package/dist/cjs/sdk/OnchainSDK.js +42 -13
  40. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +2 -8
  41. package/dist/cjs/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
  42. package/dist/cjs/sdk/accounts/index.js +5 -2
  43. package/dist/cjs/sdk/accounts/intents/guards.js +114 -0
  44. package/dist/cjs/sdk/accounts/intents/index.js +216 -358
  45. package/dist/cjs/sdk/accounts/intents/math.js +56 -0
  46. package/dist/cjs/sdk/accounts/intents/open-strategy.js +133 -0
  47. package/dist/cjs/sdk/accounts/intents/operations.js +165 -0
  48. package/dist/cjs/sdk/accounts/intents/plan.js +373 -0
  49. package/dist/cjs/sdk/accounts/intents/realize.js +301 -0
  50. package/dist/cjs/sdk/accounts/intents/testing/delayed.js +50 -0
  51. package/dist/cjs/sdk/accounts/intents/testing/market.js +166 -0
  52. package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +194 -35
  53. package/dist/cjs/sdk/accounts/intents/tests/add-collateral.fixtures.js +123 -0
  54. package/dist/cjs/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +254 -0
  55. package/dist/cjs/sdk/accounts/intents/tests/deposit.fixtures.js +324 -0
  56. package/dist/cjs/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +242 -0
  57. package/dist/cjs/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +383 -0
  58. package/dist/cjs/sdk/accounts/intents/tests/open-strategy.fixtures.js +133 -0
  59. package/dist/cjs/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +131 -0
  60. package/dist/cjs/sdk/accounts/intents/tests/withdraw.fixtures.js +426 -0
  61. package/dist/cjs/sdk/accounts/intents/types.js +16 -0
  62. package/dist/cjs/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +18 -0
  63. package/dist/cjs/sdk/accounts/intents/utils/credit-account-slice.js +45 -0
  64. package/dist/cjs/sdk/accounts/intents/utils/index.js +17 -8
  65. package/dist/cjs/sdk/accounts/intents/utils/ledger.js +94 -0
  66. package/dist/cjs/sdk/accounts/intents/utils/pick-token.js +72 -0
  67. package/dist/cjs/sdk/accounts/intents/utils/quotas-for-update.js +27 -0
  68. package/dist/cjs/sdk/accounts/intents/utils/router-path.js +86 -0
  69. package/dist/cjs/sdk/accounts/intents/view.js +38 -0
  70. package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +0 -3
  71. package/dist/cjs/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
  72. package/dist/cjs/sdk/base/BaseContract.js +1 -1
  73. package/dist/cjs/sdk/base/TokensMeta.js +78 -27
  74. package/dist/cjs/sdk/index.js +30 -7
  75. package/dist/cjs/sdk/market/MarketRegister.js +16 -7
  76. package/dist/cjs/sdk/market/ZapperRegister.js +56 -25
  77. package/dist/cjs/sdk/market/credit/CreditManagerV310Contract.js +1 -12
  78. package/dist/cjs/sdk/market/credit/CreditSuite.js +28 -9
  79. package/dist/cjs/sdk/market/credit/index.js +3 -0
  80. package/dist/cjs/sdk/market/credit/isStrategyCollateral.js +50 -0
  81. package/dist/cjs/sdk/market/index.js +17 -0
  82. package/dist/cjs/sdk/market/math.js +57 -44
  83. package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
  84. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +15 -1
  85. package/dist/cjs/sdk/market/rwa/RWARegistry.js +22 -0
  86. package/dist/cjs/sdk/opportunities/index.js +0 -13
  87. package/dist/cjs/sdk/options.js +1 -5
  88. package/dist/cjs/sdk/pools/PoolService.js +132 -3
  89. package/dist/cjs/sdk/pools/index.js +2 -0
  90. package/dist/cjs/sdk/positions/PositionsService.js +213 -1
  91. package/dist/cjs/sdk/positions/calcBorrowRate.js +43 -0
  92. package/dist/cjs/sdk/positions/calcHealthFactor.js +52 -0
  93. package/dist/cjs/sdk/positions/calcLiquidationPrice.js +23 -0
  94. package/dist/cjs/sdk/positions/calcLiquidationPriceForTarget.js +30 -0
  95. package/dist/cjs/sdk/positions/calcTimeToLiquidationMs.js +19 -0
  96. package/dist/cjs/sdk/positions/index.js +12 -1
  97. package/dist/cjs/sdk/positions/types.js +31 -0
  98. package/dist/cjs/sdk/utils/abi-decode.js +2 -2
  99. package/dist/cjs/sdk/utils/viem/executeMulticallBatches.js +32 -0
  100. package/dist/cjs/sdk/utils/viem/index.js +2 -0
  101. package/dist/esm/abi/iExpirable.js +14 -0
  102. package/dist/esm/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
  103. package/dist/esm/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
  104. package/dist/esm/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
  105. package/dist/esm/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
  106. package/dist/esm/common-utils/utils/creditAccount/liquidation-price.js +21 -11
  107. package/dist/esm/dev/AccountOpener.js +1 -2
  108. package/dist/esm/dev/compareOpportunities.js +216 -0
  109. package/dist/esm/dev/withdrawalUtils.js +1 -1
  110. package/dist/esm/model/charts.js +140 -0
  111. package/dist/esm/model/charts.schema.js +226 -0
  112. package/dist/esm/model/index.js +9 -7
  113. package/dist/esm/model/liquidations.schema.js +1 -1
  114. package/dist/esm/model/notices.schema.js +23 -0
  115. package/dist/esm/model/opportunities.schema.js +1 -1
  116. package/dist/esm/model/positions.schema.js +46 -4
  117. package/dist/esm/new-sdk/AbstractNamespace.js +34 -4
  118. package/dist/esm/new-sdk/GearboxSDK.js +72 -4
  119. package/dist/esm/new-sdk/execute/ExecuteApi.js +94 -0
  120. package/dist/esm/new-sdk/execute/index.js +2 -0
  121. package/dist/esm/new-sdk/index.js +6 -2
  122. package/dist/esm/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
  123. package/dist/esm/new-sdk/positions/PositionsNamespace.js +3 -6
  124. package/dist/esm/new-sdk/simulate/SimulateApi.js +360 -0
  125. package/dist/esm/new-sdk/simulate/index.js +3 -0
  126. package/dist/esm/new-sdk/utils/index.js +0 -1
  127. package/dist/esm/offchain/AbstractOffchainNamespace.js +10 -7
  128. package/dist/esm/offchain/GearboxAPI.js +7 -0
  129. package/dist/esm/offchain/index.js +3 -1
  130. package/dist/esm/offchain/notices/OffchainNotices.js +26 -0
  131. package/dist/esm/offchain/notices/index.js +2 -0
  132. package/dist/esm/offchain/opportunities/OffchainOpportunities.js +4 -8
  133. package/dist/esm/offchain/positions/OffchainPositions.js +12 -12
  134. package/dist/esm/plugins/adapters/contracts/ERC4626AdapterContract.js +1 -1
  135. package/dist/esm/preview/preview/CreditAccountState.js +14 -1
  136. package/dist/esm/preview/preview/buildDelayedPreview.js +16 -6
  137. package/dist/esm/preview/preview/previewAdjustCreditAccount.js +9 -2
  138. package/dist/esm/preview/preview/previewOpenCreditAccount.js +11 -3
  139. package/dist/esm/preview/preview/previewOperation.js +1 -1
  140. package/dist/esm/preview/simulate/simulatePoolOperation.js +1 -1
  141. package/dist/esm/preview/trace/extractTransfers.js +1 -1
  142. package/dist/esm/sdk/MultichainSDK.js +3 -4
  143. package/dist/esm/sdk/OnchainSDK.js +42 -13
  144. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +4 -10
  145. package/dist/esm/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
  146. package/dist/esm/sdk/accounts/index.js +3 -2
  147. package/dist/esm/sdk/accounts/intents/guards.js +108 -0
  148. package/dist/esm/sdk/accounts/intents/index.js +214 -358
  149. package/dist/esm/sdk/accounts/intents/math.js +51 -0
  150. package/dist/esm/sdk/accounts/intents/open-strategy.js +132 -0
  151. package/dist/esm/sdk/accounts/intents/operations.js +153 -0
  152. package/dist/esm/sdk/accounts/intents/plan.js +361 -0
  153. package/dist/esm/sdk/accounts/intents/realize.js +300 -0
  154. package/dist/esm/sdk/accounts/intents/testing/delayed.js +38 -0
  155. package/dist/esm/sdk/accounts/intents/testing/market.js +148 -0
  156. package/dist/esm/sdk/accounts/intents/testing/sdk-mock.js +194 -35
  157. package/dist/esm/sdk/accounts/intents/tests/add-collateral.fixtures.js +110 -0
  158. package/dist/esm/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +234 -0
  159. package/dist/esm/sdk/accounts/intents/tests/deposit.fixtures.js +302 -0
  160. package/dist/esm/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +220 -0
  161. package/dist/esm/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +355 -0
  162. package/dist/esm/sdk/accounts/intents/tests/open-strategy.fixtures.js +119 -0
  163. package/dist/esm/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +117 -0
  164. package/dist/esm/sdk/accounts/intents/tests/withdraw.fixtures.js +402 -0
  165. package/dist/esm/sdk/accounts/intents/types.js +16 -1
  166. package/dist/esm/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +17 -0
  167. package/dist/esm/sdk/accounts/intents/utils/credit-account-slice.js +43 -0
  168. package/dist/esm/sdk/accounts/intents/utils/index.js +9 -7
  169. package/dist/esm/sdk/accounts/intents/utils/ledger.js +93 -0
  170. package/dist/esm/sdk/accounts/intents/utils/pick-token.js +68 -0
  171. package/dist/esm/sdk/accounts/intents/utils/quotas-for-update.js +27 -1
  172. package/dist/esm/sdk/accounts/intents/utils/router-path.js +85 -0
  173. package/dist/esm/sdk/accounts/intents/view.js +37 -0
  174. package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +1 -4
  175. package/dist/esm/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
  176. package/dist/esm/sdk/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
  177. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
  178. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
  179. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
  180. package/dist/esm/sdk/base/BaseContract.js +1 -1
  181. package/dist/esm/sdk/base/TokensMeta.js +80 -29
  182. package/dist/esm/sdk/chain/detectNetwork.js +1 -1
  183. package/dist/esm/sdk/core/createAddressProvider.js +1 -1
  184. package/dist/esm/sdk/index.js +13 -4
  185. package/dist/esm/sdk/market/MarketRegister.js +16 -7
  186. package/dist/esm/sdk/market/ZapperRegister.js +56 -25
  187. package/dist/esm/sdk/market/credit/CreditFacadeV310BaseContract.js +1 -1
  188. package/dist/esm/sdk/market/credit/CreditManagerV310Contract.js +2 -13
  189. package/dist/esm/sdk/market/credit/CreditSuite.js +29 -10
  190. package/dist/esm/sdk/market/credit/index.js +2 -1
  191. package/dist/esm/sdk/market/credit/isStrategyCollateral.js +48 -0
  192. package/dist/esm/sdk/market/index.js +3 -1
  193. package/dist/esm/sdk/market/math.js +52 -40
  194. package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
  195. package/dist/esm/sdk/market/pool/PoolV310Contract.js +17 -3
  196. package/dist/esm/sdk/market/rwa/RWARegistry.js +22 -0
  197. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +1 -1
  198. package/dist/esm/sdk/market/zapper/ZapperContract.js +1 -1
  199. package/dist/esm/sdk/opportunities/index.js +1 -2
  200. package/dist/esm/sdk/options.js +1 -5
  201. package/dist/esm/sdk/pools/PoolService.js +133 -6
  202. package/dist/esm/sdk/pools/index.js +2 -2
  203. package/dist/esm/sdk/positions/PositionsService.js +213 -1
  204. package/dist/esm/sdk/positions/calcBorrowRate.js +42 -0
  205. package/dist/esm/sdk/positions/calcHealthFactor.js +51 -0
  206. package/dist/esm/sdk/positions/calcLiquidationPrice.js +22 -0
  207. package/dist/esm/sdk/positions/calcLiquidationPriceForTarget.js +29 -0
  208. package/dist/esm/sdk/positions/calcTimeToLiquidationMs.js +18 -0
  209. package/dist/esm/sdk/positions/index.js +7 -2
  210. package/dist/esm/sdk/positions/types.js +31 -1
  211. package/dist/esm/sdk/utils/abi-decode.js +2 -2
  212. package/dist/esm/sdk/utils/viem/executeMulticallBatches.js +31 -0
  213. package/dist/esm/sdk/utils/viem/index.js +2 -1
  214. package/dist/esm/sdk/utils/viem/simulateWithPriceUpdates.js +1 -1
  215. package/dist/types/abi/iExpirable.d.ts +14 -0
  216. package/dist/types/common-utils/utils/apy/get-single-quota-borrow-rate.d.ts +2 -0
  217. package/dist/types/common-utils/utils/creditAccount/calc-health-factor.d.ts +3 -0
  218. package/dist/types/common-utils/utils/creditAccount/calc-quota-borrow-rate.d.ts +2 -0
  219. package/dist/types/common-utils/utils/creditAccount/get-time-to-liquidation.d.ts +6 -1
  220. package/dist/types/common-utils/utils/creditAccount/liquidation-price.d.ts +3 -0
  221. package/dist/types/dev/compareOpportunities.d.ts +153 -0
  222. package/dist/types/model/charts.d.ts +349 -0
  223. package/dist/types/model/charts.schema.d.ts +364 -0
  224. package/dist/types/model/index.d.ts +8 -6
  225. package/dist/types/model/notices.d.ts +29 -0
  226. package/dist/types/model/notices.schema.d.ts +23 -0
  227. package/dist/types/model/opportunities.d.ts +9 -9
  228. package/dist/types/model/positions.d.ts +133 -7
  229. package/dist/types/model/positions.schema.d.ts +128 -1
  230. package/dist/types/new-sdk/AbstractNamespace.d.ts +15 -2
  231. package/dist/types/new-sdk/GearboxSDK.d.ts +14 -2
  232. package/dist/types/new-sdk/execute/ExecuteApi.d.ts +108 -0
  233. package/dist/types/new-sdk/execute/index.d.ts +2 -0
  234. package/dist/types/new-sdk/index.d.ts +8 -4
  235. package/dist/types/new-sdk/opportunities/OpportunitiesNamespace.d.ts +19 -7
  236. package/dist/types/new-sdk/opportunities/types.d.ts +30 -9
  237. package/dist/types/new-sdk/positions/PositionsNamespace.d.ts +4 -5
  238. package/dist/types/new-sdk/positions/types.d.ts +9 -9
  239. package/dist/types/new-sdk/simulate/SimulateApi.d.ts +90 -0
  240. package/dist/types/new-sdk/simulate/index.d.ts +3 -0
  241. package/dist/types/new-sdk/simulate/types.d.ts +508 -0
  242. package/dist/types/new-sdk/types.d.ts +35 -1
  243. package/dist/types/new-sdk/utils/index.d.ts +1 -2
  244. package/dist/types/offchain/AbstractOffchainNamespace.d.ts +5 -21
  245. package/dist/types/offchain/GearboxAPI.d.ts +6 -0
  246. package/dist/types/offchain/index.d.ts +4 -2
  247. package/dist/types/offchain/notices/OffchainNotices.d.ts +19 -0
  248. package/dist/types/offchain/notices/index.d.ts +2 -0
  249. package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +8 -4
  250. package/dist/types/offchain/positions/OffchainPositions.d.ts +8 -6
  251. package/dist/types/preview/preview/CreditAccountState.d.ts +6 -0
  252. package/dist/types/preview/preview/buildDelayedPreview.d.ts +5 -1
  253. package/dist/types/preview/preview/types.d.ts +4 -2
  254. package/dist/types/sdk/MultichainSDK.d.ts +0 -5
  255. package/dist/types/sdk/OnchainSDK.d.ts +1 -5
  256. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -7
  257. package/dist/types/sdk/accounts/credit-account-compressor/CreditAccountCompressor.d.ts +3 -12
  258. package/dist/types/sdk/accounts/credit-account-compressor/index.d.ts +2 -2
  259. package/dist/types/sdk/accounts/credit-account-compressor/types.d.ts +1 -19
  260. package/dist/types/sdk/accounts/index.d.ts +7 -5
  261. package/dist/types/sdk/accounts/intents/guards.d.ts +72 -0
  262. package/dist/types/sdk/accounts/intents/index.d.ts +130 -15
  263. package/dist/types/sdk/accounts/intents/math.d.ts +46 -0
  264. package/dist/types/sdk/accounts/intents/open-strategy.d.ts +64 -0
  265. package/dist/types/sdk/accounts/intents/operations.d.ts +215 -0
  266. package/dist/types/sdk/accounts/intents/plan.d.ts +189 -0
  267. package/dist/types/sdk/accounts/intents/realize.d.ts +35 -0
  268. package/dist/types/sdk/accounts/intents/testing/delayed.d.ts +50 -0
  269. package/dist/types/sdk/accounts/intents/testing/expect.d.ts +17 -21
  270. package/dist/types/sdk/accounts/intents/testing/market.d.ts +91 -0
  271. package/dist/types/sdk/accounts/intents/testing/sdk-mock.d.ts +64 -16
  272. package/dist/types/sdk/accounts/intents/tests/add-collateral.fixtures.d.ts +45 -0
  273. package/dist/types/sdk/accounts/intents/tests/adjust-leverage.fixtures.d.ts +56 -0
  274. package/dist/types/sdk/accounts/intents/tests/deposit.fixtures.d.ts +64 -0
  275. package/dist/types/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.d.ts +107 -0
  276. package/dist/types/sdk/accounts/intents/tests/finish-withdraw.fixtures.d.ts +136 -0
  277. package/dist/types/sdk/accounts/intents/tests/open-strategy.fixtures.d.ts +56 -0
  278. package/dist/types/sdk/accounts/intents/tests/withdraw-asset.fixtures.d.ts +60 -0
  279. package/dist/types/sdk/accounts/intents/tests/withdraw.fixtures.d.ts +79 -0
  280. package/dist/types/sdk/accounts/intents/types.d.ts +369 -43
  281. package/dist/types/sdk/accounts/intents/utils/adjust-state-to-snapshot.d.ts +13 -0
  282. package/dist/types/sdk/accounts/intents/utils/assemble-operation-calls.d.ts +1 -1
  283. package/dist/types/sdk/accounts/intents/utils/credit-account-slice.d.ts +29 -0
  284. package/dist/types/sdk/accounts/intents/utils/index.d.ts +7 -5
  285. package/dist/types/sdk/accounts/intents/utils/ledger.d.ts +41 -0
  286. package/dist/types/sdk/accounts/intents/utils/pick-token.d.ts +55 -0
  287. package/dist/types/sdk/accounts/intents/utils/quotas-for-update.d.ts +15 -4
  288. package/dist/types/sdk/accounts/intents/utils/router-path.d.ts +70 -0
  289. package/dist/types/sdk/accounts/intents/view.d.ts +15 -0
  290. package/dist/types/sdk/accounts/types.d.ts +17 -14
  291. package/dist/types/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.d.ts +6 -0
  292. package/dist/types/sdk/accounts/withdrawal-compressor/types.d.ts +18 -0
  293. package/dist/types/sdk/base/TokensMeta.d.ts +44 -1
  294. package/dist/types/sdk/base/index.d.ts +2 -2
  295. package/dist/types/sdk/base/token-types.d.ts +12 -1
  296. package/dist/types/sdk/index.d.ts +28 -19
  297. package/dist/types/sdk/market/MarketRegister.d.ts +7 -3
  298. package/dist/types/sdk/market/ZapperRegister.d.ts +20 -2
  299. package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +0 -4
  300. package/dist/types/sdk/market/credit/CreditSuite.d.ts +6 -3
  301. package/dist/types/sdk/market/credit/index.d.ts +2 -1
  302. package/dist/types/sdk/market/credit/isStrategyCollateral.d.ts +74 -0
  303. package/dist/types/sdk/market/credit/types.d.ts +2 -9
  304. package/dist/types/sdk/market/index.d.ts +4 -2
  305. package/dist/types/sdk/market/math.d.ts +44 -34
  306. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +6 -2
  307. package/dist/types/sdk/market/oracle/types.d.ts +10 -2
  308. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +5 -0
  309. package/dist/types/sdk/market/pool/types.d.ts +5 -0
  310. package/dist/types/sdk/market/rwa/RWARegistry.d.ts +13 -0
  311. package/dist/types/sdk/market/types.d.ts +5 -1
  312. package/dist/types/sdk/opportunities/index.d.ts +1 -2
  313. package/dist/types/sdk/options.d.ts +0 -1
  314. package/dist/types/sdk/pools/PoolService.d.ts +32 -2
  315. package/dist/types/sdk/pools/index.d.ts +3 -3
  316. package/dist/types/sdk/pools/types.d.ts +109 -4
  317. package/dist/types/sdk/positions/PositionsService.d.ts +33 -2
  318. package/dist/types/sdk/positions/calcBorrowRate.d.ts +40 -0
  319. package/dist/types/sdk/positions/calcHealthFactor.d.ts +55 -0
  320. package/dist/types/sdk/positions/calcLiquidationPrice.d.ts +12 -0
  321. package/dist/types/sdk/positions/calcLiquidationPriceForTarget.d.ts +43 -0
  322. package/dist/types/sdk/positions/calcTimeToLiquidationMs.d.ts +16 -0
  323. package/dist/types/sdk/positions/index.d.ts +7 -2
  324. package/dist/types/sdk/positions/types.d.ts +58 -1
  325. package/dist/types/sdk/types/state.d.ts +6 -0
  326. package/dist/types/sdk/utils/viem/executeMulticallBatches.d.ts +39 -0
  327. package/dist/types/sdk/utils/viem/index.d.ts +3 -2
  328. package/package.json +2 -1
  329. package/dist/cjs/model/history.js +0 -53
  330. package/dist/cjs/model/history.schema.js +0 -128
  331. package/dist/cjs/sdk/accounts/intents/intents/index.js +0 -14
  332. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -121
  333. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -15
  334. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -108
  335. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.js +0 -51
  336. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -130
  337. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -83
  338. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -117
  339. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -15
  340. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -95
  341. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -15
  342. package/dist/cjs/sdk/accounts/intents/intents/resume/index.js +0 -13
  343. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -138
  344. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -161
  345. package/dist/cjs/sdk/accounts/intents/operations/add-collateral/index.js +0 -17
  346. package/dist/cjs/sdk/accounts/intents/operations/claim-delayed/index.js +0 -54
  347. package/dist/cjs/sdk/accounts/intents/operations/close-credit-account/index.js +0 -26
  348. package/dist/cjs/sdk/accounts/intents/operations/decrease-debt/index.js +0 -12
  349. package/dist/cjs/sdk/accounts/intents/operations/increase-debt/index.js +0 -12
  350. package/dist/cjs/sdk/accounts/intents/operations/index.js +0 -27
  351. package/dist/cjs/sdk/accounts/intents/operations/quota-update/index.js +0 -22
  352. package/dist/cjs/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -22
  353. package/dist/cjs/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -18
  354. package/dist/cjs/sdk/accounts/intents/operations/swap/index.js +0 -18
  355. package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -27
  356. package/dist/cjs/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -43
  357. package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -27
  358. package/dist/cjs/sdk/accounts/intents/quoters/close.js +0 -58
  359. package/dist/cjs/sdk/accounts/intents/quoters/index.js +0 -7
  360. package/dist/cjs/sdk/accounts/intents/quoters/swap.js +0 -79
  361. package/dist/cjs/sdk/accounts/intents/testing/expect.js +0 -167
  362. package/dist/cjs/sdk/accounts/intents/testing/resume.js +0 -172
  363. package/dist/cjs/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -39
  364. package/dist/cjs/sdk/accounts/intents/utils/simulate-assets.js +0 -69
  365. package/dist/cjs/sdk/accounts/intents/utils/with-quota-update.js +0 -13
  366. package/dist/esm/model/history.js +0 -49
  367. package/dist/esm/model/history.schema.js +0 -116
  368. package/dist/esm/sdk/accounts/intents/intents/index.js +0 -8
  369. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -107
  370. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -14
  371. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -94
  372. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.js +0 -50
  373. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -114
  374. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -82
  375. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -110
  376. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -14
  377. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -88
  378. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -14
  379. package/dist/esm/sdk/accounts/intents/intents/resume/index.js +0 -7
  380. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -121
  381. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -160
  382. package/dist/esm/sdk/accounts/intents/operations/add-collateral/index.js +0 -16
  383. package/dist/esm/sdk/accounts/intents/operations/claim-delayed/index.js +0 -52
  384. package/dist/esm/sdk/accounts/intents/operations/close-credit-account/index.js +0 -25
  385. package/dist/esm/sdk/accounts/intents/operations/decrease-debt/index.js +0 -11
  386. package/dist/esm/sdk/accounts/intents/operations/increase-debt/index.js +0 -11
  387. package/dist/esm/sdk/accounts/intents/operations/index.js +0 -14
  388. package/dist/esm/sdk/accounts/intents/operations/quota-update/index.js +0 -21
  389. package/dist/esm/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -21
  390. package/dist/esm/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -17
  391. package/dist/esm/sdk/accounts/intents/operations/swap/index.js +0 -17
  392. package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -26
  393. package/dist/esm/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -42
  394. package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -26
  395. package/dist/esm/sdk/accounts/intents/quoters/close.js +0 -56
  396. package/dist/esm/sdk/accounts/intents/quoters/index.js +0 -3
  397. package/dist/esm/sdk/accounts/intents/quoters/swap.js +0 -77
  398. package/dist/esm/sdk/accounts/intents/testing/expect.js +0 -162
  399. package/dist/esm/sdk/accounts/intents/testing/resume.js +0 -157
  400. package/dist/esm/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -38
  401. package/dist/esm/sdk/accounts/intents/utils/simulate-assets.js +0 -68
  402. package/dist/esm/sdk/accounts/intents/utils/with-quota-update.js +0 -12
  403. package/dist/types/model/history.d.ts +0 -153
  404. package/dist/types/model/history.schema.d.ts +0 -95
  405. package/dist/types/new-sdk/utils/history.d.ts +0 -18
  406. package/dist/types/sdk/accounts/intents/intents/index.d.ts +0 -8
  407. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.d.ts +0 -13
  408. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.d.ts +0 -38
  409. package/dist/types/sdk/accounts/intents/intents/resume/close/close.d.ts +0 -26
  410. package/dist/types/sdk/accounts/intents/intents/resume/close/close.fixtures.d.ts +0 -63
  411. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.d.ts +0 -26
  412. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.d.ts +0 -86
  413. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.d.ts +0 -13
  414. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.d.ts +0 -48
  415. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.d.ts +0 -13
  416. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.d.ts +0 -46
  417. package/dist/types/sdk/accounts/intents/intents/resume/index.d.ts +0 -7
  418. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.d.ts +0 -33
  419. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.d.ts +0 -68
  420. package/dist/types/sdk/accounts/intents/operations/add-collateral/index.d.ts +0 -23
  421. package/dist/types/sdk/accounts/intents/operations/claim-delayed/index.d.ts +0 -55
  422. package/dist/types/sdk/accounts/intents/operations/close-credit-account/index.d.ts +0 -22
  423. package/dist/types/sdk/accounts/intents/operations/decrease-debt/index.d.ts +0 -18
  424. package/dist/types/sdk/accounts/intents/operations/increase-debt/index.d.ts +0 -18
  425. package/dist/types/sdk/accounts/intents/operations/index.d.ts +0 -14
  426. package/dist/types/sdk/accounts/intents/operations/quota-update/index.d.ts +0 -24
  427. package/dist/types/sdk/accounts/intents/operations/repay-credit-account/index.d.ts +0 -31
  428. package/dist/types/sdk/accounts/intents/operations/start-delayed-withdrawal/index.d.ts +0 -23
  429. package/dist/types/sdk/accounts/intents/operations/swap/index.d.ts +0 -28
  430. package/dist/types/sdk/accounts/intents/operations/types.d.ts +0 -21
  431. package/dist/types/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.d.ts +0 -30
  432. package/dist/types/sdk/accounts/intents/operations/withdraw-collateral/index.d.ts +0 -36
  433. package/dist/types/sdk/accounts/intents/operations/wrap-rwa-collateral/index.d.ts +0 -30
  434. package/dist/types/sdk/accounts/intents/quoters/close.d.ts +0 -43
  435. package/dist/types/sdk/accounts/intents/quoters/index.d.ts +0 -3
  436. package/dist/types/sdk/accounts/intents/quoters/swap.d.ts +0 -43
  437. package/dist/types/sdk/accounts/intents/testing/resume.d.ts +0 -84
  438. package/dist/types/sdk/accounts/intents/utils/simulate-adjust-state.d.ts +0 -19
  439. package/dist/types/sdk/accounts/intents/utils/simulate-assets.d.ts +0 -21
  440. package/dist/types/sdk/accounts/intents/utils/with-quota-update.d.ts +0 -16
  441. /package/dist/cjs/{new-sdk/utils/history.js → model/notices.js} +0 -0
  442. /package/dist/cjs/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
  443. /package/dist/esm/{new-sdk/utils/history.js → model/notices.js} +0 -0
  444. /package/dist/esm/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
@@ -0,0 +1,132 @@
1
+ import "../../constants/math.js";
2
+ import { IntentPreviewError } from "./types.js";
3
+ import { convertAmount } from "./utils/convert-amount.js";
4
+ import { assertCanBorrow, assertCollateralised, assertGrowthAllowed, assertMarketOperable, assertQuotaHeadroom } from "./guards.js";
5
+ import { assertDebtInBand, debtForLeverage } from "./math.js";
6
+ import { getQuotasForUpdate } from "./utils/quotas-for-update.js";
7
+ import { createRouterPaths } from "./utils/router-path.js";
8
+ import "./utils/index.js";
9
+ //#region src/sdk/accounts/intents/open-strategy.ts
10
+ /** Stand-in account address: nothing exists on chain until the tx lands. */
11
+ const NO_ACCOUNT = "0x0000000000000000000000000000000000000000";
12
+ /**
13
+ * Previews opening a leveraged position out of wallet collateral.
14
+ *
15
+ * Debt follows from the target leverage against the supplied margin
16
+ * (`debt = margin * (L - 1)`, `totalValue = margin * L`); the collateral and the
17
+ * borrowed underlying are then routed into the target token in one pathfinder call.
18
+ *
19
+ * There is no account yet, so this does not go through `startIntent` and produces
20
+ * no operation list — the caller passes the numbers and calls straight to
21
+ * `sdk.accounts.openCA`.
22
+ */
23
+ async function previewOpenStrategy(props) {
24
+ const { sdk, creditManager, collateral, targetToken, leverage, slippage = 0, quotaReserve, leftoverBalances = [] } = props;
25
+ if (leverage < 100n) throw new IntentPreviewError("leverageOutOfRange", `openStrategy: leverage ${leverage} is below 1x`);
26
+ const suite = sdk.marketRegister.findCreditManager(creditManager);
27
+ const market = sdk.marketRegister.findByCreditManager(creditManager);
28
+ assertMarketOperable(suite);
29
+ const underlying = market.pool.underlying.toLowerCase();
30
+ const convert = convertAmount(sdk, creditManager);
31
+ const margin = collateral.reduce((acc, a) => acc + convert(a.token, underlying, a.balance), 0n);
32
+ if (margin <= 0n) throw new IntentPreviewError("insufficientSourceBalance", "openStrategy: collateral is worth nothing in underlying");
33
+ const debt = debtForLeverage(margin, leverage);
34
+ const account = {
35
+ creditAccount: NO_ACCOUNT,
36
+ creditManager: creditManager.toLowerCase(),
37
+ creditFacade: suite.creditFacade.address.toLowerCase(),
38
+ underlying,
39
+ enabledTokensMask: 0n,
40
+ totalDebtUSD: 0n,
41
+ accountDebt: 0n,
42
+ tokens: []
43
+ };
44
+ assertDebtInBand(debt, suite.creditFacade);
45
+ assertCanBorrow(suite, debt);
46
+ const leg = await createRouterPaths({
47
+ sdk,
48
+ creditAccount: account,
49
+ slippage
50
+ }).openStrategy({
51
+ expectedBalances: mergeExpectedBalances(collateral, underlying, debt),
52
+ leftoverBalances,
53
+ target: targetToken
54
+ });
55
+ const averageAssets = toAssets(leg.balances);
56
+ const minAssets = toAssets(leg.minBalances);
57
+ const quotasFor = (assets) => getQuotasForUpdate({
58
+ assetsBefore: [],
59
+ assetsAfter: assets,
60
+ initialQuotas: [],
61
+ quotaReserve,
62
+ underlyingToken: underlying,
63
+ liquidationThresholds: suite.creditManager.liquidationThresholds,
64
+ quotas: market.pool.pqk.quotas,
65
+ maxDebt: suite.creditFacade.maxDebt,
66
+ convert
67
+ }).quotaIncrease;
68
+ const averageQuota = quotasFor(averageAssets);
69
+ const minQuota = quotasFor(minAssets);
70
+ assertGrowthAllowed({
71
+ sdk,
72
+ suite,
73
+ market,
74
+ before: [],
75
+ after: averageAssets
76
+ });
77
+ assertQuotaHeadroom(market, averageQuota);
78
+ const snapshot = {
79
+ creditManager,
80
+ assets: averageAssets,
81
+ quotas: averageQuota,
82
+ totalDebt: debt,
83
+ totalValue: margin + debt
84
+ };
85
+ const metrics = {
86
+ healthFactor: sdk.positions.healthFactor(snapshot),
87
+ overallApy: 0,
88
+ borrowRate: sdk.positions.borrowRate(snapshot),
89
+ timeToLiquidation: sdk.positions.timeToLiquidation(snapshot),
90
+ liquidationPrice: sdk.positions.liquidationPrice(snapshot)
91
+ };
92
+ assertCollateralised(metrics.healthFactor);
93
+ return {
94
+ debt,
95
+ collateral: margin,
96
+ totalValue: margin + debt,
97
+ averageAssets,
98
+ minAssets,
99
+ averageQuota,
100
+ minQuota,
101
+ calls: [...leg.calls],
102
+ ...metrics
103
+ };
104
+ }
105
+ /** Collateral plus the borrowed underlying, folded into one balance per token. */
106
+ function mergeExpectedBalances(collateral, underlying, debt) {
107
+ const merged = /* @__PURE__ */ new Map();
108
+ for (const a of collateral) {
109
+ const token = a.token.toLowerCase();
110
+ merged.set(token, (merged.get(token) ?? 0n) + a.balance);
111
+ }
112
+ if (debt > 0n) merged.set(underlying, (merged.get(underlying) ?? 0n) + debt);
113
+ return [...merged.entries()].map(([token, balance]) => ({
114
+ token,
115
+ balance
116
+ }));
117
+ }
118
+ /** Router balance records carry mixed-case keys; normalise and drop empties. */
119
+ function toAssets(balances) {
120
+ const merged = /* @__PURE__ */ new Map();
121
+ for (const [token, balance] of Object.entries(balances)) {
122
+ if (balance <= 0n) continue;
123
+ const key = token.toLowerCase();
124
+ merged.set(key, (merged.get(key) ?? 0n) + balance);
125
+ }
126
+ return [...merged.entries()].map(([token, balance]) => ({
127
+ token,
128
+ balance
129
+ }));
130
+ }
131
+ //#endregion
132
+ export { previewOpenStrategy };
@@ -0,0 +1,153 @@
1
+ import { MAX_UINT256 } from "../../constants/math.js";
2
+ //#region src/sdk/accounts/intents/operations.ts
3
+ function buildAddCollateralOperation(input) {
4
+ return {
5
+ type: "addCollateral",
6
+ token: input.token,
7
+ amount: input.amount,
8
+ value: input.value,
9
+ calls: input.sdk.accounts.prepareAddCollateral(input.creditAccount.creditFacade, [{
10
+ token: input.token,
11
+ balance: input.amount
12
+ }], {})
13
+ };
14
+ }
15
+ function buildIncreaseDebtOperation(input) {
16
+ return {
17
+ type: "increaseDebt",
18
+ amount: input.amount,
19
+ calls: [input.sdk.accounts.prepareIncreaseDebt(input.creditAccount.creditFacade, input.amount)]
20
+ };
21
+ }
22
+ function buildDecreaseDebtOperation(input) {
23
+ return {
24
+ type: "decreaseDebt",
25
+ amount: input.amount,
26
+ ...input.full ? { full: true } : {},
27
+ calls: [input.sdk.accounts.prepareChangeDebt(input.creditAccount.creditFacade, input.full ? MAX_UINT256 : input.amount, true)]
28
+ };
29
+ }
30
+ function buildWithdrawCollateralOperation(input) {
31
+ return {
32
+ type: "withdrawCollateral",
33
+ token: input.token,
34
+ amount: input.amount,
35
+ to: input.to,
36
+ ...input.all ? { all: true } : {},
37
+ calls: [input.sdk.accounts.prepareWithdrawToken(input.creditAccount.creditFacade, input.token, input.all ? MAX_UINT256 : input.amount, input.to)]
38
+ };
39
+ }
40
+ /** One routed leg, with the amounts it was quoted at. */
41
+ function buildSwapOperation(input) {
42
+ return buildCloseSwapOperation({
43
+ from: [{
44
+ token: input.tokenIn,
45
+ balance: input.amountIn
46
+ }],
47
+ tokenOut: input.tokenOut,
48
+ amountOut: input.amountOut,
49
+ calls: input.calls
50
+ });
51
+ }
52
+ /**
53
+ * The many-to-one leg an exit routes: every balance listed goes in, and the
54
+ * underlying comes out.
55
+ */
56
+ function buildCloseSwapOperation(input) {
57
+ if (input.calls.length === 0) throw new Error("swap: missing router calls");
58
+ return {
59
+ type: "swap",
60
+ from: input.from,
61
+ tokenOut: input.tokenOut,
62
+ amountOut: input.amountOut,
63
+ calls: input.calls
64
+ };
65
+ }
66
+ function buildQuotaUpdateOperation(input) {
67
+ const { update, creditAccount, sdk } = input;
68
+ const quotaAssets = [...update.quotaIncrease, ...update.quotaDecrease];
69
+ const calls = quotaAssets.length === 0 ? [] : sdk.accounts.prepareUpdateQuotas(creditAccount.creditFacade, {
70
+ averageQuota: quotaAssets,
71
+ minQuota: quotaAssets
72
+ });
73
+ return {
74
+ type: "changeQuota",
75
+ desiredQuota: update.desiredQuota,
76
+ quotaIncrease: update.quotaIncrease,
77
+ quotaDecrease: update.quotaDecrease,
78
+ calls
79
+ };
80
+ }
81
+ /** Wraps an RWA asset into the market underlying. */
82
+ async function buildWrapRwaCollateralOperation(input) {
83
+ const calls = await input.sdk.accounts.assembleRWAWrapCalls(input.amountIn, input.creditAccount.creditManager);
84
+ if (!calls) throw new Error("wrapRwaCollateral: no wrap calls found");
85
+ return {
86
+ type: "wrapRwaCollateral",
87
+ tokenIn: input.tokenIn,
88
+ amount: input.amountIn,
89
+ tokenOut: input.tokenOut,
90
+ amountOut: input.amountOut,
91
+ calls
92
+ };
93
+ }
94
+ /** Unwraps the market underlying back into its RWA asset. */
95
+ async function buildUnwrapRwaCollateralOperation(input) {
96
+ const calls = await input.sdk.accounts.assembleRWAUnwrapCalls(input.amountIn, input.creditAccount.creditManager);
97
+ if (!calls) throw new Error("unwrapRwaCollateral: no unwrap calls found");
98
+ return {
99
+ type: "unwrapRwaCollateral",
100
+ tokenIn: input.tokenIn,
101
+ amount: input.amountIn,
102
+ tokenOut: input.tokenOut,
103
+ amountOut: input.amountOut,
104
+ calls
105
+ };
106
+ }
107
+ function buildStartDelayedWithdrawalOperation(input) {
108
+ const { preview } = input;
109
+ return {
110
+ type: "startDelayedWithdrawal",
111
+ token: preview.token,
112
+ amountIn: preview.amountIn,
113
+ outputs: [...preview.outputs],
114
+ settlement: preview.outputs.some((o) => o.isDelayed) ? "delayed" : "instant",
115
+ calls: input.sdk.accounts.assembleStartDelayedWithdrawalCalls({
116
+ creditFacade: input.creditAccount.creditFacade,
117
+ preview
118
+ })
119
+ };
120
+ }
121
+ function buildClaimDelayedWithdrawalOperation(input) {
122
+ const { claimable } = input;
123
+ return {
124
+ type: "claimDelayedWithdrawal",
125
+ token: claimable.token.toLowerCase(),
126
+ withdrawalPhantomToken: claimable.withdrawalPhantomToken.toLowerCase(),
127
+ withdrawalTokenSpent: claimable.withdrawalTokenSpent,
128
+ outputs: claimable.outputs.map((o) => ({
129
+ ...o,
130
+ token: o.token.toLowerCase()
131
+ })),
132
+ calls: input.sdk.accounts.assembleClaimDelayedCalls({
133
+ creditFacade: input.creditAccount.creditFacade,
134
+ claimableNow: claimable
135
+ })
136
+ };
137
+ }
138
+ /**
139
+ * What a request or a claim puts on the account right away, as opposed to what
140
+ * only the phantom token represents.
141
+ */
142
+ function instantOutput(outputs, token) {
143
+ for (const out of outputs) {
144
+ if (out.isDelayed || out.amount <= 0n) continue;
145
+ if (token != null && out.token.toLowerCase() !== token.toLowerCase()) continue;
146
+ return {
147
+ token: out.token,
148
+ amount: out.amount
149
+ };
150
+ }
151
+ }
152
+ //#endregion
153
+ export { buildAddCollateralOperation, buildClaimDelayedWithdrawalOperation, buildCloseSwapOperation, buildDecreaseDebtOperation, buildIncreaseDebtOperation, buildQuotaUpdateOperation, buildStartDelayedWithdrawalOperation, buildSwapOperation, buildUnwrapRwaCollateralOperation, buildWithdrawCollateralOperation, buildWrapRwaCollateralOperation, instantOutput };
@@ -0,0 +1,361 @@
1
+ import { MAX_UINT256, PERCENTAGE_FACTOR } from "../../constants/math.js";
2
+ import "../../constants/index.js";
3
+ import { IntentPreviewError } from "./types.js";
4
+ import { eq } from "./utils/common.js";
5
+ import { assertDebtInBand, assertLeverageAtLeastOne, debtForLeverage, proportionalDebt } from "./math.js";
6
+ //#region src/sdk/accounts/intents/plan.ts
7
+ /** Whatever the previous convert produced. */
8
+ const RAISED = { raised: true };
9
+ /** Intent 5: the token lands as is; debt is untouched. */
10
+ function planAddCollateral(intent) {
11
+ assertPositive(intent.amount, "addCollateral");
12
+ return [add(intent.token, intent.amount, intent.value)];
13
+ }
14
+ /** Intent 4: one asset out at fixed debt. */
15
+ function planWithdrawAsset(intent, view) {
16
+ assertPositive(intent.amount, "withdrawAsset");
17
+ return payout(view, intent.token, intent.amount, intent.to);
18
+ }
19
+ /** Intent 6: collateral fixed, debt retargeted to `C0 · (L1 − 1)`. */
20
+ function planAdjustLeverage(intent, view) {
21
+ const { U, delta } = leverageShape(intent, view);
22
+ if (delta === 0n) return [];
23
+ const T = intent.token ?? positionToken(view, "adjustLeverage");
24
+ if (delta > 0n) return [borrow(delta), convert(U, T, delta)];
25
+ const shortfall = -delta - view.balanceOf(U);
26
+ if (shortfall > 0n && eq(T, U)) throw new IntentPreviewError("insufficientSourceBalance", `adjustLeverage: needs ${-delta} underlying, account holds ${view.balanceOf(U)}`);
27
+ return [...shortfall > 0n ? [convert(T, U, view.price(U, T, shortfall))] : [], repay(-delta)];
28
+ }
29
+ /** Intents 1.1 / 1.2: collateral grows by `a`, debt grows to match. */
30
+ function planDeposit(intent, view) {
31
+ assertPositive(intent.amount, "deposit");
32
+ const U = view.underlying;
33
+ if (!eq(intent.token, U) && !(view.rwaAsset && eq(intent.token, view.rwaAsset))) throw new IntentPreviewError("unsupportedCollateralToken", `deposit: only ${U}${view.rwaAsset ? ` or ${view.rwaAsset}` : ""} can be deposited, got ${intent.token}`);
34
+ const aU = view.price(intent.token, U, intent.amount);
35
+ const debtDelta = intent.targetLeverage === void 0 ? proportionalDebt(view, aU) : debtForLeverage(view.collateral + aU, intent.targetLeverage) - view.debt;
36
+ if (debtDelta < 0n) throw new IntentPreviewError("leverageOutOfRange", `deposit: target leverage ${intent.targetLeverage} would require repaying debt`);
37
+ assertDebtInBand(view.debt + debtDelta, view.band);
38
+ const T = intent.positionToken ?? positionToken(view, "deposit");
39
+ const depositStays = eq(intent.token, T);
40
+ return [
41
+ add(intent.token, intent.amount, intent.value),
42
+ ...depositStays ? [] : [convert(intent.token, U, intent.amount)],
43
+ ...debtDelta > 0n ? [borrow(debtDelta)] : [],
44
+ convert(U, T, debtDelta + (depositStays ? 0n : aU))
45
+ ].filter((s) => s.kind !== "convert" || s.amount !== 0n);
46
+ }
47
+ /**
48
+ * Intent 3: funding comes in from the wallet and goes straight into the debt.
49
+ * Collateral never moves, so the whole plan is the funding's way to `U`.
50
+ *
51
+ * Funding in `U` needs no way there: it lands and is repaid, which is the whole
52
+ * plan. An RWA market also takes the raw asset behind its underlying, and that
53
+ * one is wrapped on the way in.
54
+ *
55
+ * `MAX_UINT256` settles the loan: the wallet is asked for the debt as it stands
56
+ * plus the headroom {@link SETTLE_MARGIN} allows for the interest of the blocks
57
+ * still to come, since the facade is told to repay everything outstanding
58
+ * rather than the amount quoted here.
59
+ */
60
+ function planRepay(intent, view) {
61
+ assertPositive(intent.amount, "repay");
62
+ const U = view.underlying;
63
+ const fundsInU = eq(intent.token, U);
64
+ if (!fundsInU && !(view.rwaAsset && eq(intent.token, view.rwaAsset))) throw new IntentPreviewError("unsupportedCollateralToken", `repay: only ${U}${view.rwaAsset ? ` or ${view.rwaAsset}` : ""} can be repaid with, got ${intent.token}`);
65
+ if (view.debt <= 0n) throw new IntentPreviewError("debtOutOfRange", "repay: the account owes nothing");
66
+ const funding = everything(intent.amount) ? view.price(U, intent.token, withMargin(view.debt)) : intent.amount;
67
+ const repaid = min(view.price(intent.token, U, funding), view.debt);
68
+ assertDebtInBand(view.debt - repaid, view.band);
69
+ return [
70
+ add(intent.token, funding, intent.value),
71
+ ...fundsInU ? [] : [convert(intent.token, U, funding)],
72
+ ...repaid === view.debt ? [clearQuotas()] : [],
73
+ repay(repaid)
74
+ ];
75
+ }
76
+ /**
77
+ * Intent 2.1: `W` of value leaves, debt shrinks by `D0 · W / C0` so leverage
78
+ * holds. Both are funded by the source `S`.
79
+ */
80
+ function planWithdraw(intent, view) {
81
+ const { U, T, S, WU, dD, all } = withdrawShape(intent, view);
82
+ if (all) return [
83
+ clearQuotas(),
84
+ { kind: "closeAll" },
85
+ ...view.debt > 0n ? [repay(view.debt)] : [],
86
+ {
87
+ kind: "sweep",
88
+ to: intent.to
89
+ }
90
+ ];
91
+ if (eq(T, U)) return [
92
+ convert(S, U, view.price(U, S, WU + dD)),
93
+ repay(dD, intent.amount),
94
+ ...payout(view, U, intent.amount, intent.to)
95
+ ];
96
+ return [
97
+ convert(S, U, view.price(U, S, dD)),
98
+ repay(dD),
99
+ convert(S, T, view.price(U, S, WU)),
100
+ ...payout(view, T, RAISED, intent.to)
101
+ ];
102
+ }
103
+ /**
104
+ * Intent 2.1 against a source that cannot be sold on a DEX.
105
+ *
106
+ * Some collateral only converts through its issuer — a Securitize dsToken, a
107
+ * Mellow share — which answers a redemption request now and pays out days
108
+ * later. The trade is unchanged; what changes is that the proceeds do not exist
109
+ * yet, so this half only requests the redemption:
110
+ *
111
+ * ```
112
+ * request(S, W + dD) → [days] → claim → convert → repay → withdraw
113
+ * ```
114
+ *
115
+ * The tail is planned at claim time by {@link planFinishWithdraw}, from the
116
+ * intent this request records — only then is the claimed amount, and the token
117
+ * it arrived in, known.
118
+ */
119
+ function planWithdrawDelayed(intent, view) {
120
+ const { U, T, S, WU, dD, all } = withdrawShape(intent, view);
121
+ if (all) throw new IntentPreviewError("noDelayedRoute", "withdraw: taking the whole net value cannot be started as a redemption");
122
+ if (!eq(T, U) && !(view.rwaAsset && eq(T, view.rwaAsset))) throw new IntentPreviewError("noDelayedRoute", `withdraw: a delayed route cannot pay out in ${T}`);
123
+ const payoutIsSource = eq(T, S);
124
+ return [{
125
+ kind: "request",
126
+ token: S,
127
+ amount: view.price(U, S, payoutIsSource ? dD : WU + dD),
128
+ reserve: payoutIsSource ? intent.amount : 0n,
129
+ record: {
130
+ type: "WITHDRAW_COLLATERAL",
131
+ to: intent.to,
132
+ withdrawToken: T,
133
+ withdrawAmount: intent.amount,
134
+ sourceToken: S,
135
+ debtRepaid: dD
136
+ }
137
+ }];
138
+ }
139
+ /**
140
+ * Intent 6.2 against a position token that only redeems through its issuer.
141
+ *
142
+ * Only deleveraging can be delayed: raising leverage borrows and buys, both of
143
+ * which settle at once. The request covers whatever idle underlying does not
144
+ * already, and the tail repays from the claim.
145
+ */
146
+ function planAdjustLeverageDelayed(intent, view) {
147
+ const { U, delta } = leverageShape(intent, view);
148
+ if (delta >= 0n) throw new IntentPreviewError("noDelayedRoute", "adjustLeverage: only deleveraging can settle with a delay");
149
+ const shortfall = -delta - view.balanceOf(U);
150
+ if (shortfall <= 0n) throw new IntentPreviewError("noDelayedRoute", "adjustLeverage: idle underlying covers the repayment, nothing to redeem");
151
+ const T = intent.token ?? positionToken(view, "adjustLeverage");
152
+ return [{
153
+ kind: "request",
154
+ token: T,
155
+ amount: view.price(U, T, shortfall),
156
+ reserve: 0n,
157
+ record: { type: "DECREASE_LEVERAGE" }
158
+ }];
159
+ }
160
+ /** Everything claimed goes into the debt. */
161
+ function planFinishDecreaseLeverage(claimable, claimed, view) {
162
+ return [
163
+ claim(claimable),
164
+ convert(claimed.token, view.underlying, claimed.amount),
165
+ repay(RAISED)
166
+ ];
167
+ }
168
+ /**
169
+ * The claim is split between the promised payout `W` and the debt the leading
170
+ * half deferred: the payout is served first, the debt gets what is left, so a
171
+ * routing shortfall shows as leverage a touch above target rather than as a
172
+ * payout the wallet was promised and did not get.
173
+ */
174
+ function planFinishWithdraw(intent, claimable, claimed, view) {
175
+ const U = view.underlying;
176
+ const T = intent.withdrawToken;
177
+ const W = intent.withdrawAmount;
178
+ if (!eq(T, U) && !(view.rwaAsset && eq(T, view.rwaAsset))) throw new IntentPreviewError("noDelayedRoute", `finishWithdraw: cannot pay out in ${T}`);
179
+ if (intent.debtRepaid === 0n) return [
180
+ claim(claimable),
181
+ convert(claimed.token, T, claimed.amount),
182
+ ...payout(view, T, {
183
+ raised: true,
184
+ max: W
185
+ }, intent.to)
186
+ ];
187
+ if (eq(intent.sourceToken, T)) return [
188
+ claim(claimable),
189
+ convert(claimed.token, U, claimed.amount),
190
+ repay({
191
+ raised: true,
192
+ max: intent.debtRepaid
193
+ }),
194
+ ...payout(view, T, W, intent.to)
195
+ ];
196
+ if (eq(T, U)) return [
197
+ claim(claimable),
198
+ convert(claimed.token, U, claimed.amount),
199
+ repay(intent.debtRepaid, W),
200
+ ...payout(view, U, {
201
+ raised: true,
202
+ max: W
203
+ }, intent.to)
204
+ ];
205
+ const reserved = min(view.price(T, claimed.token, W), claimed.amount);
206
+ return [
207
+ claim(claimable),
208
+ convert(claimed.token, U, claimed.amount - reserved),
209
+ repay({
210
+ raised: true,
211
+ max: intent.debtRepaid
212
+ }),
213
+ convert(claimed.token, T, reserved),
214
+ ...payout(view, T, {
215
+ raised: true,
216
+ max: W
217
+ }, intent.to)
218
+ ];
219
+ }
220
+ /** Nothing is owed beyond the claim: the tokens land and quotas catch up. */
221
+ function planFinishClaimOnly(claimable) {
222
+ return [claim(claimable)];
223
+ }
224
+ /**
225
+ * What a withdrawal comes down to: the payout `W` of `T` priced in the
226
+ * underlying, the debt `dD` that keeps leverage flat, and the source `S` both
227
+ * are funded from. Shared so that the instant and the delayed leading half
228
+ * cannot disagree on the amounts.
229
+ */
230
+ function withdrawShape(intent, view) {
231
+ assertPositive(intent.amount, "withdraw");
232
+ const U = view.underlying;
233
+ const T = intent.tokenOut ?? U;
234
+ const S = intent.sourceToken ?? sourceToken(view);
235
+ if (everything(intent.amount)) {
236
+ assertHasValue(view);
237
+ return {
238
+ U,
239
+ T,
240
+ S,
241
+ WU: view.collateral,
242
+ dD: view.debt,
243
+ all: true
244
+ };
245
+ }
246
+ const WU = view.price(T, U, intent.amount);
247
+ if (WU <= 0n) throw new IntentPreviewError("insufficientSourceBalance", `withdraw: cannot price ${intent.amount} of ${T}`);
248
+ if (WU >= view.collateral) {
249
+ assertHasValue(view);
250
+ return {
251
+ U,
252
+ T,
253
+ S,
254
+ WU,
255
+ dD: view.debt,
256
+ all: true
257
+ };
258
+ }
259
+ const dD = proportionalDebt(view, WU);
260
+ assertDebtInBand(view.debt - dD, view.band);
261
+ return {
262
+ U,
263
+ T,
264
+ S,
265
+ WU,
266
+ dD,
267
+ all: false
268
+ };
269
+ }
270
+ /**
271
+ * The debt move a leverage target implies. Shared by the instant and the
272
+ * delayed leading half; the token that funds it is resolved by the caller,
273
+ * once it knows the move needs one at all.
274
+ */
275
+ function leverageShape(intent, view) {
276
+ assertLeverageAtLeastOne(intent.targetLeverage);
277
+ if (view.collateral <= 0n) throw new IntentPreviewError("insufficientSourceBalance", "adjustLeverage: account has no collateral to lever");
278
+ const target = debtForLeverage(view.collateral, intent.targetLeverage);
279
+ assertDebtInBand(target, view.band);
280
+ return {
281
+ U: view.underlying,
282
+ delta: target - view.debt
283
+ };
284
+ }
285
+ const add = (token, amount, value) => ({
286
+ kind: "add",
287
+ token,
288
+ amount,
289
+ value
290
+ });
291
+ const borrow = (amount) => ({
292
+ kind: "borrow",
293
+ amount
294
+ });
295
+ const repay = (amount, keep) => keep === void 0 ? {
296
+ kind: "repay",
297
+ amount
298
+ } : {
299
+ kind: "repay",
300
+ amount,
301
+ keep
302
+ };
303
+ const convert = (from, to, amount) => ({
304
+ kind: "convert",
305
+ from,
306
+ to,
307
+ amount
308
+ });
309
+ const claim = (claimable) => ({
310
+ kind: "claim",
311
+ claimable
312
+ });
313
+ const clearQuotas = () => ({ kind: "clearQuotas" });
314
+ /**
315
+ * Headroom a settlement raises on top of the debt it read, in
316
+ * `PERCENTAGE_FACTOR`: enough interest for the transaction to sit in the
317
+ * mempool for hours at any sane borrow rate, small enough not to matter to the
318
+ * wallet that fronts it.
319
+ */
320
+ const SETTLE_MARGIN = 10n;
321
+ const withMargin = (debt) => debt + debt * SETTLE_MARGIN / PERCENTAGE_FACTOR;
322
+ /** The amount that asks for all of it, whatever "all" turns out to be. */
323
+ const everything = (amount) => amount >= MAX_UINT256;
324
+ const min = (a, b) => a < b ? a : b;
325
+ /**
326
+ * Hands `amount` of `token` to `to`. The wrapped underlying of an RWA market
327
+ * cannot leave the account, so it is unwrapped into the raw asset on the way.
328
+ */
329
+ function payout(view, token, amount, to) {
330
+ if (view.rwaAsset && eq(token, view.underlying)) return [convert(view.underlying, view.rwaAsset, amount), {
331
+ kind: "withdraw",
332
+ token: view.rwaAsset,
333
+ amount: RAISED,
334
+ to
335
+ }];
336
+ return [{
337
+ kind: "withdraw",
338
+ token,
339
+ amount,
340
+ to
341
+ }];
342
+ }
343
+ function positionToken(view, flow) {
344
+ const pick = view.fattest([view.underlying]);
345
+ if (!pick) throw new IntentPreviewError("insufficientSourceBalance", `${flow}: no position token on the account`);
346
+ return pick;
347
+ }
348
+ function sourceToken(view) {
349
+ const pick = view.fattest();
350
+ if (!pick) throw new IntentPreviewError("insufficientSourceBalance", "withdraw: account has no spendable balance");
351
+ return pick;
352
+ }
353
+ /** An account whose debt has eaten its collateral has nothing to hand over. */
354
+ function assertHasValue(view) {
355
+ if (view.collateral <= 0n) throw new IntentPreviewError("insufficientSourceBalance", `withdraw: nothing to withdraw, net value is ${view.collateral}`);
356
+ }
357
+ function assertPositive(amount, flow) {
358
+ if (amount <= 0n) throw new IntentPreviewError("insufficientSourceBalance", `${flow}: amount must be positive`);
359
+ }
360
+ //#endregion
361
+ export { RAISED, planAddCollateral, planAdjustLeverage, planAdjustLeverageDelayed, planDeposit, planFinishClaimOnly, planFinishDecreaseLeverage, planFinishWithdraw, planRepay, planWithdraw, planWithdrawAsset, planWithdrawDelayed };