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

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 (436) 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 +137 -0
  9. package/dist/cjs/dev/comparePositions.js +183 -0
  10. package/dist/cjs/dev/fieldDiff.js +241 -0
  11. package/dist/cjs/model/charts.js +147 -0
  12. package/dist/cjs/model/charts.schema.js +240 -0
  13. package/dist/cjs/model/index.js +35 -22
  14. package/dist/cjs/model/liquidations.schema.js +1 -1
  15. package/dist/cjs/model/notices.schema.js +25 -0
  16. package/dist/cjs/model/opportunities.schema.js +1 -1
  17. package/dist/cjs/model/positions.schema.js +48 -2
  18. package/dist/cjs/new-sdk/AbstractNamespace.js +34 -4
  19. package/dist/cjs/new-sdk/GearboxSDK.js +72 -3
  20. package/dist/cjs/new-sdk/execute/ExecuteApi.js +95 -0
  21. package/dist/cjs/new-sdk/execute/index.js +3 -0
  22. package/dist/cjs/new-sdk/index.js +7 -0
  23. package/dist/cjs/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
  24. package/dist/cjs/new-sdk/positions/PositionsNamespace.js +3 -6
  25. package/dist/cjs/new-sdk/simulate/SimulateApi.js +361 -0
  26. package/dist/cjs/new-sdk/simulate/index.js +4 -0
  27. package/dist/cjs/new-sdk/utils/index.js +0 -1
  28. package/dist/cjs/offchain/AbstractOffchainNamespace.js +10 -7
  29. package/dist/cjs/offchain/GearboxAPI.js +7 -0
  30. package/dist/cjs/offchain/index.js +3 -0
  31. package/dist/cjs/offchain/notices/OffchainNotices.js +27 -0
  32. package/dist/cjs/offchain/notices/index.js +3 -0
  33. package/dist/cjs/offchain/opportunities/OffchainOpportunities.js +4 -8
  34. package/dist/cjs/offchain/positions/OffchainPositions.js +12 -12
  35. package/dist/cjs/preview/preview/CreditAccountState.js +14 -1
  36. package/dist/cjs/preview/preview/buildDelayedPreview.js +16 -6
  37. package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +9 -2
  38. package/dist/cjs/preview/preview/previewOpenCreditAccount.js +11 -3
  39. package/dist/cjs/preview/preview/previewOperation.js +1 -1
  40. package/dist/cjs/sdk/MultichainSDK.js +3 -4
  41. package/dist/cjs/sdk/OnchainSDK.js +42 -13
  42. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +2 -8
  43. package/dist/cjs/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +2 -90
  44. package/dist/cjs/sdk/accounts/index.js +5 -2
  45. package/dist/cjs/sdk/accounts/intents/guards.js +114 -0
  46. package/dist/cjs/sdk/accounts/intents/index.js +216 -358
  47. package/dist/cjs/sdk/accounts/intents/math.js +56 -0
  48. package/dist/cjs/sdk/accounts/intents/open-strategy.js +133 -0
  49. package/dist/cjs/sdk/accounts/intents/operations.js +165 -0
  50. package/dist/cjs/sdk/accounts/intents/plan.js +373 -0
  51. package/dist/cjs/sdk/accounts/intents/realize.js +301 -0
  52. package/dist/cjs/sdk/accounts/intents/testing/delayed.js +50 -0
  53. package/dist/cjs/sdk/accounts/intents/testing/market.js +166 -0
  54. package/dist/cjs/sdk/accounts/intents/testing/sdk-mock.js +194 -35
  55. package/dist/cjs/sdk/accounts/intents/tests/add-collateral.fixtures.js +123 -0
  56. package/dist/cjs/sdk/accounts/intents/tests/adjust-leverage.fixtures.js +254 -0
  57. package/dist/cjs/sdk/accounts/intents/tests/deposit.fixtures.js +324 -0
  58. package/dist/cjs/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.js +242 -0
  59. package/dist/cjs/sdk/accounts/intents/tests/finish-withdraw.fixtures.js +383 -0
  60. package/dist/cjs/sdk/accounts/intents/tests/open-strategy.fixtures.js +133 -0
  61. package/dist/cjs/sdk/accounts/intents/tests/withdraw-asset.fixtures.js +131 -0
  62. package/dist/cjs/sdk/accounts/intents/tests/withdraw.fixtures.js +426 -0
  63. package/dist/cjs/sdk/accounts/intents/types.js +16 -0
  64. package/dist/cjs/sdk/accounts/intents/utils/adjust-state-to-snapshot.js +18 -0
  65. package/dist/cjs/sdk/accounts/intents/utils/credit-account-slice.js +45 -0
  66. package/dist/cjs/sdk/accounts/intents/utils/index.js +17 -8
  67. package/dist/cjs/sdk/accounts/intents/utils/ledger.js +94 -0
  68. package/dist/cjs/sdk/accounts/intents/utils/pick-token.js +72 -0
  69. package/dist/cjs/sdk/accounts/intents/utils/quotas-for-update.js +27 -0
  70. package/dist/cjs/sdk/accounts/intents/utils/router-path.js +86 -0
  71. package/dist/cjs/sdk/accounts/intents/view.js +38 -0
  72. package/dist/cjs/sdk/accounts/liquidations/LiquidationsService.js +0 -3
  73. package/dist/cjs/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
  74. package/dist/cjs/sdk/base/BaseContract.js +1 -1
  75. package/dist/cjs/sdk/base/TokensMeta.js +78 -27
  76. package/dist/cjs/sdk/index.js +30 -7
  77. package/dist/cjs/sdk/market/MarketRegister.js +16 -7
  78. package/dist/cjs/sdk/market/ZapperRegister.js +56 -25
  79. package/dist/cjs/sdk/market/credit/CreditManagerV310Contract.js +1 -12
  80. package/dist/cjs/sdk/market/credit/CreditSuite.js +28 -9
  81. package/dist/cjs/sdk/market/credit/index.js +3 -0
  82. package/dist/cjs/sdk/market/credit/isStrategyCollateral.js +50 -0
  83. package/dist/cjs/sdk/market/index.js +17 -0
  84. package/dist/cjs/sdk/market/math.js +65 -45
  85. package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
  86. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +15 -1
  87. package/dist/cjs/sdk/market/rwa/RWARegistry.js +22 -0
  88. package/dist/cjs/sdk/opportunities/index.js +0 -13
  89. package/dist/cjs/sdk/options.js +1 -5
  90. package/dist/cjs/sdk/pools/PoolService.js +133 -4
  91. package/dist/cjs/sdk/pools/index.js +2 -0
  92. package/dist/cjs/sdk/positions/PositionsService.js +218 -1
  93. package/dist/cjs/sdk/positions/calcBorrowRate.js +43 -0
  94. package/dist/cjs/sdk/positions/calcHealthFactor.js +52 -0
  95. package/dist/cjs/sdk/positions/calcLiquidationPrice.js +23 -0
  96. package/dist/cjs/sdk/positions/calcLiquidationPriceForTarget.js +30 -0
  97. package/dist/cjs/sdk/positions/calcTimeToLiquidationMs.js +19 -0
  98. package/dist/cjs/sdk/positions/index.js +12 -1
  99. package/dist/cjs/sdk/positions/types.js +31 -0
  100. package/dist/cjs/sdk/utils/abi-decode.js +2 -2
  101. package/dist/cjs/sdk/utils/viem/executeMulticallBatches.js +32 -0
  102. package/dist/cjs/sdk/utils/viem/index.js +2 -0
  103. package/dist/esm/abi/iExpirable.js +14 -0
  104. package/dist/esm/common-utils/utils/apy/get-single-quota-borrow-rate.js +2 -0
  105. package/dist/esm/common-utils/utils/creditAccount/calc-health-factor.js +24 -22
  106. package/dist/esm/common-utils/utils/creditAccount/calc-quota-borrow-rate.js +2 -0
  107. package/dist/esm/common-utils/utils/creditAccount/get-time-to-liquidation.js +8 -5
  108. package/dist/esm/common-utils/utils/creditAccount/liquidation-price.js +21 -11
  109. package/dist/esm/dev/AccountOpener.js +0 -1
  110. package/dist/esm/dev/compareOpportunities.js +135 -0
  111. package/dist/esm/dev/comparePositions.js +181 -0
  112. package/dist/esm/dev/fieldDiff.js +224 -0
  113. package/dist/esm/model/charts.js +140 -0
  114. package/dist/esm/model/charts.schema.js +226 -0
  115. package/dist/esm/model/index.js +9 -7
  116. package/dist/esm/model/liquidations.schema.js +1 -1
  117. package/dist/esm/model/notices.schema.js +23 -0
  118. package/dist/esm/model/opportunities.schema.js +1 -1
  119. package/dist/esm/model/positions.schema.js +46 -4
  120. package/dist/esm/new-sdk/AbstractNamespace.js +34 -4
  121. package/dist/esm/new-sdk/GearboxSDK.js +72 -4
  122. package/dist/esm/new-sdk/execute/ExecuteApi.js +94 -0
  123. package/dist/esm/new-sdk/execute/index.js +2 -0
  124. package/dist/esm/new-sdk/index.js +6 -2
  125. package/dist/esm/new-sdk/opportunities/OpportunitiesNamespace.js +29 -6
  126. package/dist/esm/new-sdk/positions/PositionsNamespace.js +3 -6
  127. package/dist/esm/new-sdk/simulate/SimulateApi.js +360 -0
  128. package/dist/esm/new-sdk/simulate/index.js +3 -0
  129. package/dist/esm/new-sdk/utils/index.js +0 -1
  130. package/dist/esm/offchain/AbstractOffchainNamespace.js +10 -7
  131. package/dist/esm/offchain/GearboxAPI.js +7 -0
  132. package/dist/esm/offchain/index.js +3 -1
  133. package/dist/esm/offchain/notices/OffchainNotices.js +26 -0
  134. package/dist/esm/offchain/notices/index.js +2 -0
  135. package/dist/esm/offchain/opportunities/OffchainOpportunities.js +4 -8
  136. package/dist/esm/offchain/positions/OffchainPositions.js +12 -12
  137. package/dist/esm/preview/preview/CreditAccountState.js +14 -1
  138. package/dist/esm/preview/preview/buildDelayedPreview.js +16 -6
  139. package/dist/esm/preview/preview/previewAdjustCreditAccount.js +9 -2
  140. package/dist/esm/preview/preview/previewOpenCreditAccount.js +11 -3
  141. package/dist/esm/preview/preview/previewOperation.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 +2 -8
  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 +0 -3
  175. package/dist/esm/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.js +29 -18
  176. package/dist/esm/sdk/base/BaseContract.js +1 -1
  177. package/dist/esm/sdk/base/TokensMeta.js +78 -27
  178. package/dist/esm/sdk/index.js +13 -4
  179. package/dist/esm/sdk/market/MarketRegister.js +16 -7
  180. package/dist/esm/sdk/market/ZapperRegister.js +56 -25
  181. package/dist/esm/sdk/market/credit/CreditManagerV310Contract.js +2 -13
  182. package/dist/esm/sdk/market/credit/CreditSuite.js +29 -10
  183. package/dist/esm/sdk/market/credit/index.js +2 -1
  184. package/dist/esm/sdk/market/credit/isStrategyCollateral.js +48 -0
  185. package/dist/esm/sdk/market/index.js +3 -1
  186. package/dist/esm/sdk/market/math.js +60 -41
  187. package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +10 -3
  188. package/dist/esm/sdk/market/pool/PoolV310Contract.js +16 -2
  189. package/dist/esm/sdk/market/rwa/RWARegistry.js +22 -0
  190. package/dist/esm/sdk/opportunities/index.js +1 -2
  191. package/dist/esm/sdk/options.js +1 -5
  192. package/dist/esm/sdk/pools/PoolService.js +133 -6
  193. package/dist/esm/sdk/pools/index.js +2 -2
  194. package/dist/esm/sdk/positions/PositionsService.js +218 -1
  195. package/dist/esm/sdk/positions/calcBorrowRate.js +42 -0
  196. package/dist/esm/sdk/positions/calcHealthFactor.js +51 -0
  197. package/dist/esm/sdk/positions/calcLiquidationPrice.js +22 -0
  198. package/dist/esm/sdk/positions/calcLiquidationPriceForTarget.js +29 -0
  199. package/dist/esm/sdk/positions/calcTimeToLiquidationMs.js +18 -0
  200. package/dist/esm/sdk/positions/index.js +7 -2
  201. package/dist/esm/sdk/positions/types.js +31 -1
  202. package/dist/esm/sdk/utils/abi-decode.js +2 -2
  203. package/dist/esm/sdk/utils/viem/executeMulticallBatches.js +31 -0
  204. package/dist/esm/sdk/utils/viem/index.js +2 -1
  205. package/dist/types/abi/iExpirable.d.ts +14 -0
  206. package/dist/types/common-utils/utils/apy/get-single-quota-borrow-rate.d.ts +2 -0
  207. package/dist/types/common-utils/utils/creditAccount/calc-health-factor.d.ts +3 -0
  208. package/dist/types/common-utils/utils/creditAccount/calc-quota-borrow-rate.d.ts +2 -0
  209. package/dist/types/common-utils/utils/creditAccount/get-time-to-liquidation.d.ts +6 -1
  210. package/dist/types/common-utils/utils/creditAccount/liquidation-price.d.ts +3 -0
  211. package/dist/types/dev/compareOpportunities.d.ts +105 -0
  212. package/dist/types/dev/comparePositions.d.ts +149 -0
  213. package/dist/types/dev/fieldDiff.d.ts +167 -0
  214. package/dist/types/model/charts.d.ts +349 -0
  215. package/dist/types/model/charts.schema.d.ts +364 -0
  216. package/dist/types/model/index.d.ts +8 -6
  217. package/dist/types/model/notices.d.ts +29 -0
  218. package/dist/types/model/notices.schema.d.ts +23 -0
  219. package/dist/types/model/opportunities.d.ts +9 -9
  220. package/dist/types/model/positions.d.ts +133 -7
  221. package/dist/types/model/positions.schema.d.ts +128 -1
  222. package/dist/types/new-sdk/AbstractNamespace.d.ts +15 -2
  223. package/dist/types/new-sdk/GearboxSDK.d.ts +14 -2
  224. package/dist/types/new-sdk/execute/ExecuteApi.d.ts +108 -0
  225. package/dist/types/new-sdk/execute/index.d.ts +2 -0
  226. package/dist/types/new-sdk/index.d.ts +8 -4
  227. package/dist/types/new-sdk/opportunities/OpportunitiesNamespace.d.ts +19 -7
  228. package/dist/types/new-sdk/opportunities/types.d.ts +30 -9
  229. package/dist/types/new-sdk/positions/PositionsNamespace.d.ts +4 -5
  230. package/dist/types/new-sdk/positions/types.d.ts +9 -9
  231. package/dist/types/new-sdk/simulate/SimulateApi.d.ts +90 -0
  232. package/dist/types/new-sdk/simulate/index.d.ts +3 -0
  233. package/dist/types/new-sdk/simulate/types.d.ts +508 -0
  234. package/dist/types/new-sdk/types.d.ts +35 -1
  235. package/dist/types/new-sdk/utils/index.d.ts +1 -2
  236. package/dist/types/offchain/AbstractOffchainNamespace.d.ts +5 -21
  237. package/dist/types/offchain/GearboxAPI.d.ts +6 -0
  238. package/dist/types/offchain/index.d.ts +4 -2
  239. package/dist/types/offchain/notices/OffchainNotices.d.ts +19 -0
  240. package/dist/types/offchain/notices/index.d.ts +2 -0
  241. package/dist/types/offchain/opportunities/OffchainOpportunities.d.ts +8 -4
  242. package/dist/types/offchain/positions/OffchainPositions.d.ts +8 -6
  243. package/dist/types/preview/preview/CreditAccountState.d.ts +6 -0
  244. package/dist/types/preview/preview/buildDelayedPreview.d.ts +5 -1
  245. package/dist/types/preview/preview/types.d.ts +4 -2
  246. package/dist/types/sdk/MultichainSDK.d.ts +0 -5
  247. package/dist/types/sdk/OnchainSDK.d.ts +1 -5
  248. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -7
  249. package/dist/types/sdk/accounts/credit-account-compressor/CreditAccountCompressor.d.ts +3 -12
  250. package/dist/types/sdk/accounts/credit-account-compressor/index.d.ts +2 -2
  251. package/dist/types/sdk/accounts/credit-account-compressor/types.d.ts +1 -19
  252. package/dist/types/sdk/accounts/index.d.ts +7 -5
  253. package/dist/types/sdk/accounts/intents/guards.d.ts +72 -0
  254. package/dist/types/sdk/accounts/intents/index.d.ts +130 -15
  255. package/dist/types/sdk/accounts/intents/math.d.ts +46 -0
  256. package/dist/types/sdk/accounts/intents/open-strategy.d.ts +64 -0
  257. package/dist/types/sdk/accounts/intents/operations.d.ts +215 -0
  258. package/dist/types/sdk/accounts/intents/plan.d.ts +189 -0
  259. package/dist/types/sdk/accounts/intents/realize.d.ts +35 -0
  260. package/dist/types/sdk/accounts/intents/testing/delayed.d.ts +50 -0
  261. package/dist/types/sdk/accounts/intents/testing/expect.d.ts +17 -21
  262. package/dist/types/sdk/accounts/intents/testing/market.d.ts +91 -0
  263. package/dist/types/sdk/accounts/intents/testing/sdk-mock.d.ts +64 -16
  264. package/dist/types/sdk/accounts/intents/tests/add-collateral.fixtures.d.ts +45 -0
  265. package/dist/types/sdk/accounts/intents/tests/adjust-leverage.fixtures.d.ts +56 -0
  266. package/dist/types/sdk/accounts/intents/tests/deposit.fixtures.d.ts +64 -0
  267. package/dist/types/sdk/accounts/intents/tests/finish-decrease-leverage.fixtures.d.ts +107 -0
  268. package/dist/types/sdk/accounts/intents/tests/finish-withdraw.fixtures.d.ts +136 -0
  269. package/dist/types/sdk/accounts/intents/tests/open-strategy.fixtures.d.ts +56 -0
  270. package/dist/types/sdk/accounts/intents/tests/withdraw-asset.fixtures.d.ts +60 -0
  271. package/dist/types/sdk/accounts/intents/tests/withdraw.fixtures.d.ts +79 -0
  272. package/dist/types/sdk/accounts/intents/types.d.ts +369 -43
  273. package/dist/types/sdk/accounts/intents/utils/adjust-state-to-snapshot.d.ts +13 -0
  274. package/dist/types/sdk/accounts/intents/utils/assemble-operation-calls.d.ts +1 -1
  275. package/dist/types/sdk/accounts/intents/utils/credit-account-slice.d.ts +29 -0
  276. package/dist/types/sdk/accounts/intents/utils/index.d.ts +7 -5
  277. package/dist/types/sdk/accounts/intents/utils/ledger.d.ts +41 -0
  278. package/dist/types/sdk/accounts/intents/utils/pick-token.d.ts +55 -0
  279. package/dist/types/sdk/accounts/intents/utils/quotas-for-update.d.ts +15 -4
  280. package/dist/types/sdk/accounts/intents/utils/router-path.d.ts +70 -0
  281. package/dist/types/sdk/accounts/intents/view.d.ts +15 -0
  282. package/dist/types/sdk/accounts/types.d.ts +17 -14
  283. package/dist/types/sdk/accounts/withdrawal-compressor/AbstractWithdrawalCompressorContract.d.ts +6 -0
  284. package/dist/types/sdk/accounts/withdrawal-compressor/types.d.ts +18 -0
  285. package/dist/types/sdk/base/TokensMeta.d.ts +44 -1
  286. package/dist/types/sdk/base/index.d.ts +2 -2
  287. package/dist/types/sdk/base/token-types.d.ts +12 -1
  288. package/dist/types/sdk/index.d.ts +28 -19
  289. package/dist/types/sdk/market/MarketRegister.d.ts +7 -3
  290. package/dist/types/sdk/market/ZapperRegister.d.ts +20 -2
  291. package/dist/types/sdk/market/credit/CreditManagerV310Contract.d.ts +0 -4
  292. package/dist/types/sdk/market/credit/CreditSuite.d.ts +6 -3
  293. package/dist/types/sdk/market/credit/index.d.ts +2 -1
  294. package/dist/types/sdk/market/credit/isStrategyCollateral.d.ts +74 -0
  295. package/dist/types/sdk/market/credit/types.d.ts +2 -9
  296. package/dist/types/sdk/market/index.d.ts +4 -2
  297. package/dist/types/sdk/market/math.d.ts +46 -34
  298. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +6 -2
  299. package/dist/types/sdk/market/oracle/types.d.ts +10 -2
  300. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +5 -0
  301. package/dist/types/sdk/market/pool/types.d.ts +5 -0
  302. package/dist/types/sdk/market/rwa/RWARegistry.d.ts +13 -0
  303. package/dist/types/sdk/market/types.d.ts +5 -1
  304. package/dist/types/sdk/opportunities/index.d.ts +1 -2
  305. package/dist/types/sdk/options.d.ts +0 -1
  306. package/dist/types/sdk/pools/PoolService.d.ts +32 -2
  307. package/dist/types/sdk/pools/index.d.ts +3 -3
  308. package/dist/types/sdk/pools/types.d.ts +109 -4
  309. package/dist/types/sdk/positions/PositionsService.d.ts +33 -2
  310. package/dist/types/sdk/positions/calcBorrowRate.d.ts +40 -0
  311. package/dist/types/sdk/positions/calcHealthFactor.d.ts +55 -0
  312. package/dist/types/sdk/positions/calcLiquidationPrice.d.ts +12 -0
  313. package/dist/types/sdk/positions/calcLiquidationPriceForTarget.d.ts +43 -0
  314. package/dist/types/sdk/positions/calcTimeToLiquidationMs.d.ts +16 -0
  315. package/dist/types/sdk/positions/index.d.ts +7 -2
  316. package/dist/types/sdk/positions/types.d.ts +58 -1
  317. package/dist/types/sdk/types/state.d.ts +6 -0
  318. package/dist/types/sdk/utils/viem/executeMulticallBatches.d.ts +39 -0
  319. package/dist/types/sdk/utils/viem/index.d.ts +3 -2
  320. package/package.json +2 -1
  321. package/dist/cjs/model/history.js +0 -53
  322. package/dist/cjs/model/history.schema.js +0 -128
  323. package/dist/cjs/sdk/accounts/intents/intents/index.js +0 -14
  324. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -121
  325. package/dist/cjs/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -15
  326. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -108
  327. package/dist/cjs/sdk/accounts/intents/intents/resume/close/close.js +0 -51
  328. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -130
  329. package/dist/cjs/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -83
  330. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -117
  331. package/dist/cjs/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -15
  332. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -95
  333. package/dist/cjs/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -15
  334. package/dist/cjs/sdk/accounts/intents/intents/resume/index.js +0 -13
  335. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -138
  336. package/dist/cjs/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -161
  337. package/dist/cjs/sdk/accounts/intents/operations/add-collateral/index.js +0 -17
  338. package/dist/cjs/sdk/accounts/intents/operations/claim-delayed/index.js +0 -54
  339. package/dist/cjs/sdk/accounts/intents/operations/close-credit-account/index.js +0 -26
  340. package/dist/cjs/sdk/accounts/intents/operations/decrease-debt/index.js +0 -12
  341. package/dist/cjs/sdk/accounts/intents/operations/increase-debt/index.js +0 -12
  342. package/dist/cjs/sdk/accounts/intents/operations/index.js +0 -27
  343. package/dist/cjs/sdk/accounts/intents/operations/quota-update/index.js +0 -22
  344. package/dist/cjs/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -22
  345. package/dist/cjs/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -18
  346. package/dist/cjs/sdk/accounts/intents/operations/swap/index.js +0 -18
  347. package/dist/cjs/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -27
  348. package/dist/cjs/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -43
  349. package/dist/cjs/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -27
  350. package/dist/cjs/sdk/accounts/intents/quoters/close.js +0 -58
  351. package/dist/cjs/sdk/accounts/intents/quoters/index.js +0 -7
  352. package/dist/cjs/sdk/accounts/intents/quoters/swap.js +0 -79
  353. package/dist/cjs/sdk/accounts/intents/testing/expect.js +0 -167
  354. package/dist/cjs/sdk/accounts/intents/testing/resume.js +0 -172
  355. package/dist/cjs/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -39
  356. package/dist/cjs/sdk/accounts/intents/utils/simulate-assets.js +0 -69
  357. package/dist/cjs/sdk/accounts/intents/utils/with-quota-update.js +0 -13
  358. package/dist/esm/model/history.js +0 -49
  359. package/dist/esm/model/history.schema.js +0 -116
  360. package/dist/esm/sdk/accounts/intents/intents/index.js +0 -8
  361. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.js +0 -107
  362. package/dist/esm/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.js +0 -14
  363. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.fixtures.js +0 -94
  364. package/dist/esm/sdk/accounts/intents/intents/resume/close/close.js +0 -50
  365. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.js +0 -114
  366. package/dist/esm/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.js +0 -82
  367. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.js +0 -110
  368. package/dist/esm/sdk/accounts/intents/intents/resume/deposit/deposit.js +0 -14
  369. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.js +0 -88
  370. package/dist/esm/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.js +0 -14
  371. package/dist/esm/sdk/accounts/intents/intents/resume/index.js +0 -7
  372. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.js +0 -121
  373. package/dist/esm/sdk/accounts/intents/intents/resume/withdraw/withdraw.js +0 -160
  374. package/dist/esm/sdk/accounts/intents/operations/add-collateral/index.js +0 -16
  375. package/dist/esm/sdk/accounts/intents/operations/claim-delayed/index.js +0 -52
  376. package/dist/esm/sdk/accounts/intents/operations/close-credit-account/index.js +0 -25
  377. package/dist/esm/sdk/accounts/intents/operations/decrease-debt/index.js +0 -11
  378. package/dist/esm/sdk/accounts/intents/operations/increase-debt/index.js +0 -11
  379. package/dist/esm/sdk/accounts/intents/operations/index.js +0 -14
  380. package/dist/esm/sdk/accounts/intents/operations/quota-update/index.js +0 -21
  381. package/dist/esm/sdk/accounts/intents/operations/repay-credit-account/index.js +0 -21
  382. package/dist/esm/sdk/accounts/intents/operations/start-delayed-withdrawal/index.js +0 -17
  383. package/dist/esm/sdk/accounts/intents/operations/swap/index.js +0 -17
  384. package/dist/esm/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.js +0 -26
  385. package/dist/esm/sdk/accounts/intents/operations/withdraw-collateral/index.js +0 -42
  386. package/dist/esm/sdk/accounts/intents/operations/wrap-rwa-collateral/index.js +0 -26
  387. package/dist/esm/sdk/accounts/intents/quoters/close.js +0 -56
  388. package/dist/esm/sdk/accounts/intents/quoters/index.js +0 -3
  389. package/dist/esm/sdk/accounts/intents/quoters/swap.js +0 -77
  390. package/dist/esm/sdk/accounts/intents/testing/expect.js +0 -162
  391. package/dist/esm/sdk/accounts/intents/testing/resume.js +0 -157
  392. package/dist/esm/sdk/accounts/intents/utils/simulate-adjust-state.js +0 -38
  393. package/dist/esm/sdk/accounts/intents/utils/simulate-assets.js +0 -68
  394. package/dist/esm/sdk/accounts/intents/utils/with-quota-update.js +0 -12
  395. package/dist/types/model/history.d.ts +0 -153
  396. package/dist/types/model/history.schema.d.ts +0 -95
  397. package/dist/types/new-sdk/utils/history.d.ts +0 -18
  398. package/dist/types/sdk/accounts/intents/intents/index.d.ts +0 -8
  399. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.d.ts +0 -13
  400. package/dist/types/sdk/accounts/intents/intents/resume/add-collateral/add-collateral.fixtures.d.ts +0 -38
  401. package/dist/types/sdk/accounts/intents/intents/resume/close/close.d.ts +0 -26
  402. package/dist/types/sdk/accounts/intents/intents/resume/close/close.fixtures.d.ts +0 -63
  403. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.d.ts +0 -26
  404. package/dist/types/sdk/accounts/intents/intents/resume/decrease-leverage/decrease-leverage.fixtures.d.ts +0 -86
  405. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.d.ts +0 -13
  406. package/dist/types/sdk/accounts/intents/intents/resume/deposit/deposit.fixtures.d.ts +0 -48
  407. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.d.ts +0 -13
  408. package/dist/types/sdk/accounts/intents/intents/resume/increase-leverage/increase-leverage.fixtures.d.ts +0 -46
  409. package/dist/types/sdk/accounts/intents/intents/resume/index.d.ts +0 -7
  410. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.d.ts +0 -33
  411. package/dist/types/sdk/accounts/intents/intents/resume/withdraw/withdraw.fixtures.d.ts +0 -68
  412. package/dist/types/sdk/accounts/intents/operations/add-collateral/index.d.ts +0 -23
  413. package/dist/types/sdk/accounts/intents/operations/claim-delayed/index.d.ts +0 -55
  414. package/dist/types/sdk/accounts/intents/operations/close-credit-account/index.d.ts +0 -22
  415. package/dist/types/sdk/accounts/intents/operations/decrease-debt/index.d.ts +0 -18
  416. package/dist/types/sdk/accounts/intents/operations/increase-debt/index.d.ts +0 -18
  417. package/dist/types/sdk/accounts/intents/operations/index.d.ts +0 -14
  418. package/dist/types/sdk/accounts/intents/operations/quota-update/index.d.ts +0 -24
  419. package/dist/types/sdk/accounts/intents/operations/repay-credit-account/index.d.ts +0 -31
  420. package/dist/types/sdk/accounts/intents/operations/start-delayed-withdrawal/index.d.ts +0 -23
  421. package/dist/types/sdk/accounts/intents/operations/swap/index.d.ts +0 -28
  422. package/dist/types/sdk/accounts/intents/operations/types.d.ts +0 -21
  423. package/dist/types/sdk/accounts/intents/operations/unwrap-rwa-collateral/index.d.ts +0 -30
  424. package/dist/types/sdk/accounts/intents/operations/withdraw-collateral/index.d.ts +0 -36
  425. package/dist/types/sdk/accounts/intents/operations/wrap-rwa-collateral/index.d.ts +0 -30
  426. package/dist/types/sdk/accounts/intents/quoters/close.d.ts +0 -43
  427. package/dist/types/sdk/accounts/intents/quoters/index.d.ts +0 -3
  428. package/dist/types/sdk/accounts/intents/quoters/swap.d.ts +0 -43
  429. package/dist/types/sdk/accounts/intents/testing/resume.d.ts +0 -84
  430. package/dist/types/sdk/accounts/intents/utils/simulate-adjust-state.d.ts +0 -19
  431. package/dist/types/sdk/accounts/intents/utils/simulate-assets.d.ts +0 -21
  432. package/dist/types/sdk/accounts/intents/utils/with-quota-update.d.ts +0 -16
  433. /package/dist/cjs/{new-sdk/utils/history.js → model/notices.js} +0 -0
  434. /package/dist/cjs/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
  435. /package/dist/esm/{new-sdk/utils/history.js → model/notices.js} +0 -0
  436. /package/dist/esm/{sdk/accounts/intents/operations → new-sdk/simulate}/types.js +0 -0
@@ -14,6 +14,11 @@ import { PositionsNamespace } from "./positions/PositionsNamespace.js";
14
14
  import "./positions/index.js";
15
15
  //#region src/new-sdk/GearboxSDK.ts
16
16
  /**
17
+ * Default {@link GearboxSDKOptions.maxStateAgeSeconds}: the fastest poll an
18
+ * app runs, so a 30 s tick sees state no older than itself.
19
+ **/
20
+ const DEFAULT_MAX_STATE_AGE = 30;
21
+ /**
17
22
  * Entry point over both sources of Gearbox data: the chain and the Gearbox
18
23
  * backend. The {@link Mode} is fixed at construction and decides which methods
19
24
  * exist.
@@ -53,12 +58,27 @@ var GearboxSDK = class {
53
58
  #onchain;
54
59
  #offchain;
55
60
  #ownsOnchain = false;
61
+ #maxStateAgeSeconds;
62
+ #logger;
63
+ /**
64
+ * The banners the backend attaches to a pool opportunity or a strategy
65
+ * position, see {@link Notice}. Top-level because the subject is either
66
+ * kind of entity, so neither namespace owns it. Backend-only, hence gated
67
+ * by mode like every other backend read: absent in `onchain` mode.
68
+ **/
69
+ notices;
56
70
  #attached;
71
+ /** The one attach in flight, shared by {@link attach} and every first read. */
72
+ #attaching;
73
+ /** One sync in flight per chain: concurrent stale reads join it. */
74
+ #syncing = /* @__PURE__ */ new Map();
57
75
  constructor(options) {
58
- const { mode, networks, onchain, offchain, attach, logger, maxOffchainLagSeconds = 120 } = options;
76
+ const { mode, networks, onchain, offchain, attach, logger, maxOffchainLagSeconds = 120, maxStateAgeSeconds = 30 } = options;
59
77
  this.mode = mode;
60
78
  this.networks = [...networks];
61
79
  this.#attachOptions = attach;
80
+ this.#maxStateAgeSeconds = maxStateAgeSeconds;
81
+ this.#logger = logger;
62
82
  const needsOnchain = mode === "onchain" || mode === "both";
63
83
  const needsOffchain = mode === "offchain" || mode === "both";
64
84
  if (needsOnchain && !onchain) throw new MissingSourceError(mode, "onchain");
@@ -91,19 +111,67 @@ var GearboxSDK = class {
91
111
  this.#attached = !this.#ownsOnchain;
92
112
  const namespaceOptions = {
93
113
  maxOffchainLagSeconds,
114
+ ensureFresh: this.#onchain ? (chainIds) => this.#ensureFresh(chainIds) : void 0,
94
115
  logger
95
116
  };
96
117
  this.opportunities = new OpportunitiesNamespace(this.#onchain, this.#offchain, namespaceOptions);
97
118
  this.positions = new PositionsNamespace(this.#onchain, this.#offchain, namespaceOptions);
119
+ const backend = this.#offchain;
120
+ this.notices = backend ? (subject) => backend.notices.list(subject) : void 0;
98
121
  }
99
122
  /**
100
123
  * Attaches the on-chain SDK when this instance owns one; a no-op in `offchain`
101
124
  * mode and when an already-attached SDK was injected.
102
125
  **/
103
126
  async attach() {
127
+ return this.#ensureAttached();
128
+ }
129
+ /**
130
+ * The attach every async read awaits: the first caller starts it, later
131
+ * ones join the same promise; a rejected attach is not cached, so the next
132
+ * read retries.
133
+ **/
134
+ async #ensureAttached() {
104
135
  if (this.#attached || !this.#ownsOnchain || !this.#onchain) return;
105
- await this.#onchain.attach(this.#attachOptions);
106
- this.#attached = true;
136
+ if (!this.#attaching) {
137
+ const onchain = this.#onchain;
138
+ this.#attaching = onchain.attach(this.#attachOptions).then(() => {
139
+ this.#attached = true;
140
+ }).finally(() => {
141
+ this.#attaching = void 0;
142
+ });
143
+ }
144
+ return this.#attaching;
145
+ }
146
+ /**
147
+ * What every on-chain leg of an async read awaits: the source attached, and
148
+ * the chains the read touches (all of them when unnamed) synced when their
149
+ * loaded state is older than `maxStateAgeSeconds`. A sync that fails leaves
150
+ * the previous state to be served — its age tells the consumer it is stale.
151
+ **/
152
+ async #ensureFresh(chainIds) {
153
+ await this.#ensureAttached();
154
+ const onchain = this.#onchain;
155
+ if (!onchain) return;
156
+ const wanted = chainIds && new Set(chainIds);
157
+ const stale = [];
158
+ const now = Math.floor(Date.now() / 1e3);
159
+ for (const chain of onchain.chains.values()) {
160
+ if (wanted && !wanted.has(chain.chainId)) continue;
161
+ if (now - Number(chain.timestamp) > this.#maxStateAgeSeconds) stale.push(chain);
162
+ }
163
+ await Promise.all(stale.map((chain) => this.#sync(chain)));
164
+ }
165
+ #sync(chain) {
166
+ const inFlight = this.#syncing.get(chain.chainId);
167
+ if (inFlight) return inFlight;
168
+ const sync = chain.syncState().then(() => void 0).catch((error) => {
169
+ this.#logger?.warn(error, `failed to sync chain ${chain.chainId}; serving state of block ${chain.currentBlock}`);
170
+ }).finally(() => {
171
+ this.#syncing.delete(chain.chainId);
172
+ });
173
+ this.#syncing.set(chain.chainId, sync);
174
+ return sync;
107
175
  }
108
176
  /**
109
177
  * Whether the on-chain source is ready to be read from. Always `true` in
@@ -140,4 +208,4 @@ function chainsOf(configured, networks) {
140
208
  return chains;
141
209
  }
142
210
  //#endregion
143
- export { GearboxSDK };
211
+ export { DEFAULT_MAX_STATE_AGE, GearboxSDK };
@@ -0,0 +1,94 @@
1
+ //#region src/new-sdk/execute/ExecuteApi.ts
2
+ /**
3
+ * {@inheritDoc OpportunitiesExecute}
4
+ **/
5
+ var ExecuteApi = class {
6
+ #chainOf;
7
+ constructor(chainOf) {
8
+ this.#chainOf = chainOf;
9
+ }
10
+ /**
11
+ * {@inheritDoc OpportunitiesExecute.buildTx}
12
+ **/
13
+ async buildTx(request) {
14
+ if (!request.sim.ok) throw new Error(`cannot build a transaction from a failed ${request.kind} simulation`);
15
+ const sdk = this.#chainOf(request.chainId);
16
+ switch (request.kind) {
17
+ case "pool": return poolTx(sdk, request);
18
+ case "open": return openTx(sdk, request);
19
+ case "account": return accountTx(sdk, request);
20
+ }
21
+ }
22
+ };
23
+ function poolTx(sdk, request) {
24
+ const { pool, wallet, sim } = request;
25
+ const { tokenIn, tokenOut } = sim.preview;
26
+ if (request.op === "deposit") {
27
+ const meta = sdk.pools.getDepositMetadata(pool, tokenIn.token, tokenOut.token);
28
+ const result = sdk.pools.addLiquidity({
29
+ pool,
30
+ wallet,
31
+ collateral: tokenIn,
32
+ meta
33
+ });
34
+ if (!result) throw new Error(`pool ${pool} takes no deposit transaction for ${tokenIn.token} (${meta.type})`);
35
+ return result.tx;
36
+ }
37
+ const meta = sdk.pools.getWithdrawalMetadata(pool, tokenIn.token, tokenOut.token);
38
+ return sdk.pools.removeLiquidity({
39
+ pool,
40
+ wallet,
41
+ amount: request.op === "withdraw" ? tokenOut.balance : tokenIn.balance,
42
+ permit: void 0,
43
+ meta,
44
+ mode: request.op === "withdraw" ? "withdraw" : "redeem"
45
+ }).tx;
46
+ }
47
+ async function openTx(sdk, request) {
48
+ const { creditManager, wallet, collateral, ethAmount, sim } = request;
49
+ const { preview } = sim;
50
+ return sdk.accounts.openCA({
51
+ creditManager,
52
+ to: wallet,
53
+ collateral,
54
+ ethAmount,
55
+ debt: preview.debt,
56
+ calls: preview.calls,
57
+ averageQuota: preview.averageQuota,
58
+ minQuota: preview.minQuota,
59
+ permits: {},
60
+ referralCode: 0n,
61
+ rwaOptions: await openRwaOptions(sdk, request)
62
+ });
63
+ }
64
+ /**
65
+ * The documented `openCA` contract: ask the market for its open requirements
66
+ * and hand them back as operation args, with the caller's cached signatures
67
+ * attached. `undefined` on non-RWA markets and when no target token is named.
68
+ **/
69
+ async function openRwaOptions(sdk, request) {
70
+ if (!request.targetToken) return;
71
+ const requirements = await sdk.accounts.getOpenAccountRequirements(request.wallet, request.creditManager, { tokenOutAddress: request.targetToken });
72
+ if (!requirements) return;
73
+ return {
74
+ type: requirements.type,
75
+ tokensToRegister: requirements.tokensToRegister,
76
+ signaturesToCache: request.signaturesToCache ?? []
77
+ };
78
+ }
79
+ async function accountTx(sdk, request) {
80
+ const account = await sdk.accounts.getCreditAccountData(request.creditAccount);
81
+ if (!account) throw new Error(`credit account not found: ${request.creditAccount}`);
82
+ return sdk.accounts.executeCaUpdate(account, request.sim.calls, { ethAmount: nativeValue(request.sim.operations) });
83
+ }
84
+ /**
85
+ * The coin the simulation asked the wallet for, which the facade wraps out of
86
+ * `msg.value` before running the multicall. Taken off the collateral step that
87
+ * recorded it rather than from the caller, so it cannot disagree with what was
88
+ * simulated.
89
+ **/
90
+ function nativeValue(operations) {
91
+ return operations.reduce((total, op) => total + (op.type === "addCollateral" ? op.value ?? 0n : 0n), 0n);
92
+ }
93
+ //#endregion
94
+ export { ExecuteApi };
@@ -0,0 +1,2 @@
1
+ import { ExecuteApi } from "./ExecuteApi.js";
2
+ export { ExecuteApi };
@@ -7,6 +7,10 @@ import { NoSourceServedError } from "./errors/NoSourceServedError.js";
7
7
  import { SourceUnavailableError } from "./errors/SourceUnavailableError.js";
8
8
  import "./errors/index.js";
9
9
  import { AbstractNamespace } from "./AbstractNamespace.js";
10
+ import { ExecuteApi } from "./execute/ExecuteApi.js";
11
+ import "./execute/index.js";
12
+ import { SimulateApi } from "./simulate/SimulateApi.js";
13
+ import "./simulate/index.js";
10
14
  import { filterResponse } from "./utils/filterResponse.js";
11
15
  import { DEFAULT_MAX_OFFCHAIN_LAG, mergeChainList, mergeChainOne } from "./utils/mergeChains.js";
12
16
  import "./utils/index.js";
@@ -14,6 +18,6 @@ import { OpportunitiesNamespace } from "./opportunities/OpportunitiesNamespace.j
14
18
  import "./opportunities/index.js";
15
19
  import { PositionsNamespace } from "./positions/PositionsNamespace.js";
16
20
  import "./positions/index.js";
17
- import { GearboxSDK } from "./GearboxSDK.js";
21
+ import { DEFAULT_MAX_STATE_AGE, GearboxSDK } from "./GearboxSDK.js";
18
22
  import "./types.js";
19
- export { AbstractNamespace, AllSourcesFailedError, DEFAULT_MAX_OFFCHAIN_LAG, GearboxSDK, MissingSourceError, NoSourceServedError, OpportunitiesNamespace, PositionsNamespace, SourceChainMismatchError, SourceUnavailableError, assertSameChains, everyChainFailed, filterResponse, mergeChainList, mergeChainOne };
23
+ export { AbstractNamespace, AllSourcesFailedError, DEFAULT_MAX_OFFCHAIN_LAG, DEFAULT_MAX_STATE_AGE, ExecuteApi, GearboxSDK, MissingSourceError, NoSourceServedError, OpportunitiesNamespace, PositionsNamespace, SimulateApi, SourceChainMismatchError, SourceUnavailableError, assertSameChains, everyChainFailed, filterResponse, mergeChainList, mergeChainOne };
@@ -1,6 +1,12 @@
1
1
  import { matchesOpportunityFilter } from "../../model/opportunities.js";
2
2
  import "../../model/index.js";
3
+ import { SourceUnavailableError } from "../errors/SourceUnavailableError.js";
4
+ import "../errors/index.js";
3
5
  import { AbstractNamespace } from "../AbstractNamespace.js";
6
+ import { ExecuteApi } from "../execute/ExecuteApi.js";
7
+ import "../execute/index.js";
8
+ import { SimulateApi } from "../simulate/SimulateApi.js";
9
+ import "../simulate/index.js";
4
10
  import { filterResponse } from "../utils/filterResponse.js";
5
11
  import { mergeChainList, mergeChainOne } from "../utils/mergeChains.js";
6
12
  import "../utils/index.js";
@@ -18,14 +24,33 @@ var OpportunitiesNamespace = class extends AbstractNamespace {
18
24
  pool: (onchain, offchain) => mergeChainOne(onchain, offchain, this.maxOffchainLagSeconds),
19
25
  strategy: (onchain, offchain) => mergeChainOne(onchain, offchain, this.maxOffchainLagSeconds)
20
26
  };
27
+ #simulate;
28
+ #execute;
21
29
  constructor(onchain, offchain, options) {
22
30
  super("Opportunities", onchain?.opportunities, offchain?.opportunities, options);
31
+ this.#simulate = onchain && new SimulateApi(onchain, options.ensureFresh);
32
+ this.#execute = onchain && new ExecuteApi((chainId) => onchain.chain(chainId));
33
+ }
34
+ /**
35
+ * {@inheritDoc OpportunitiesOnchainOnly.simulate}
36
+ **/
37
+ get simulate() {
38
+ if (!this.#simulate) throw new SourceUnavailableError("Opportunities", "onchain");
39
+ return this.#simulate;
40
+ }
41
+ /**
42
+ * {@inheritDoc OpportunitiesOnchainOnly.execute}
43
+ **/
44
+ get execute() {
45
+ if (!this.#execute) throw new SourceUnavailableError("Opportunities", "onchain");
46
+ return this.#execute;
23
47
  }
24
48
  /**
25
49
  * {@inheritDoc OpportunitiesBase.list}
26
50
  **/
27
51
  async list(filter) {
28
52
  return this.merged("list opportunities", {
53
+ chainIds: filter?.chainIds,
29
54
  fromChain: (source) => source.list(filter),
30
55
  fromBackend: (source) => source.list(filter),
31
56
  merge: this.merge.list
@@ -36,6 +61,7 @@ var OpportunitiesNamespace = class extends AbstractNamespace {
36
61
  **/
37
62
  async getPool(key) {
38
63
  return this.merged("get pool opportunity", {
64
+ chainIds: [key.chainId],
39
65
  fromChain: (source) => source.getPool(key),
40
66
  fromBackend: (source) => source.getPool(key),
41
67
  merge: this.merge.pool
@@ -46,6 +72,7 @@ var OpportunitiesNamespace = class extends AbstractNamespace {
46
72
  **/
47
73
  async getStrategy(key) {
48
74
  return this.merged("get strategy opportunity", {
75
+ chainIds: [key.chainId],
49
76
  fromChain: (source) => source.getStrategy(key),
50
77
  fromBackend: (source) => source.getStrategy(key),
51
78
  merge: this.merge.strategy
@@ -57,12 +84,8 @@ var OpportunitiesNamespace = class extends AbstractNamespace {
57
84
  filter(response, filter) {
58
85
  return filterResponse(response, filter, matchesOpportunityFilter);
59
86
  }
60
- history(key) {
61
- return { chart: (metric, range) => this.offchain.getHistory({
62
- opportunity: key,
63
- range,
64
- metric
65
- }) };
87
+ async charts(key, metrics, range) {
88
+ return this.offchain.getCharts(key, metrics, range);
66
89
  }
67
90
  };
68
91
  //#endregion
@@ -22,6 +22,7 @@ var PositionsNamespace = class extends AbstractNamespace {
22
22
  **/
23
23
  async list(wallet, filter) {
24
24
  return this.merged("list positions", {
25
+ chainIds: filter?.chainIds,
25
26
  fromChain: (source) => source.list({
26
27
  wallet,
27
28
  filter
@@ -39,12 +40,8 @@ var PositionsNamespace = class extends AbstractNamespace {
39
40
  filter(response, filter) {
40
41
  return filterResponse(response, filter, matchesPositionFilter);
41
42
  }
42
- history(key) {
43
- return { chart: (metric, range) => this.offchain.getHistory({
44
- position: key,
45
- range,
46
- metric
47
- }) };
43
+ async charts(key, metrics, range) {
44
+ return this.offchain.getCharts(key, metrics, range);
48
45
  }
49
46
  };
50
47
  //#endregion
@@ -0,0 +1,360 @@
1
+ import { hexEq } from "../../sdk/utils/hex.js";
2
+ import { MultichainConstruct } from "../../sdk/base/MultichainConstruct.js";
3
+ import { fetchCreditAccountSlice } from "../../sdk/accounts/intents/utils/credit-account-slice.js";
4
+ import { CreditAccountOperationsService } from "../../sdk/accounts/intents/index.js";
5
+ import "../../sdk/index.js";
6
+ //#region src/new-sdk/simulate/SimulateApi.ts
7
+ /**
8
+ * {@inheritDoc OpportunitiesSimulate}
9
+ *
10
+ * Holds no state of its own: it owns the mapping from the public,
11
+ * read-model-shaped request to the engine's intent, and nothing else. All
12
+ * protocol knowledge stays in `CreditAccountOperationsService` and
13
+ * `PoolService`.
14
+ *
15
+ * A simulation names one chain, so it reads through
16
+ * {@link MultichainConstruct.queryChain}: there is no second source to fall back
17
+ * to, hence a chain the SDK does not cover, or one that fails the read, throws
18
+ * rather than answering with empty metadata.
19
+ **/
20
+ var SimulateApi = class extends MultichainConstruct {
21
+ #ensureFresh;
22
+ constructor(sdk, ensureFresh) {
23
+ super(sdk);
24
+ this.#ensureFresh = ensureFresh;
25
+ }
26
+ async queryChain(props) {
27
+ await this.#ensureFresh?.([this.sdk.chain(props.network).chainId]);
28
+ return super.queryChain(props);
29
+ }
30
+ /**
31
+ * {@inheritDoc OpportunitiesSimulate.delayed}
32
+ **/
33
+ delayed = {
34
+ withdrawStrategy: (position, params) => this.#startDelayedIntent(position, params, {
35
+ type: "WITHDRAW",
36
+ amount: params.amount,
37
+ to: params.to,
38
+ tokenOut: params.tokenOut,
39
+ sourceToken: params.sourceToken
40
+ }),
41
+ adjustLeverage: (position, params) => this.#startDelayedIntent(position, params, {
42
+ type: "ADJUST_LEVERAGE",
43
+ targetLeverage: params.targetLeverage,
44
+ token: params.token
45
+ }),
46
+ finish: (position, params) => this.queryChain({
47
+ network: position.chainId,
48
+ run: async (sdk) => {
49
+ const intent = resumable(params.intent ?? params.claimable.intent);
50
+ if (!intent) return {
51
+ ok: false,
52
+ reason: "noRecordedIntent"
53
+ };
54
+ return service(sdk).finishIntent({
55
+ intent,
56
+ claimable: params.claimable,
57
+ creditAccount: await slice(sdk, position.creditAccount),
58
+ sdk,
59
+ slippage: params.slippage,
60
+ quotaReserve: params.quotaReserve
61
+ });
62
+ }
63
+ })
64
+ };
65
+ /**
66
+ * {@inheritDoc OpportunitiesSimulate.deposit}
67
+ **/
68
+ deposit(pool, params) {
69
+ const { marketRegister, pools } = this.sdk.chain(pool.chainId);
70
+ const tokenIn = params.tokenIn ?? marketRegister.findByPool(pool.pool).pool.underlying;
71
+ const tokenOut = lpRoute(params.tokenOut, () => pools.getDepositTokensOut(pool.pool, tokenIn));
72
+ if (!tokenOut) return {
73
+ ok: false,
74
+ reason: "unsupportedTokenPair"
75
+ };
76
+ const preview = pools.simulateDeposit({
77
+ pool: pool.pool,
78
+ amount: params.amount,
79
+ tokenIn,
80
+ tokenOut
81
+ });
82
+ const call = pools.addLiquidity({
83
+ collateral: preview.tokenIn,
84
+ pool: pool.pool,
85
+ wallet: params.wallet,
86
+ meta: pools.getDepositMetadata(pool.pool, tokenIn, tokenOut)
87
+ });
88
+ if (!call) return {
89
+ ok: false,
90
+ reason: "unsupportedTokenPair"
91
+ };
92
+ return {
93
+ ok: true,
94
+ operations: [],
95
+ preview,
96
+ calls: call.calls
97
+ };
98
+ }
99
+ /**
100
+ * {@inheritDoc OpportunitiesSimulate.withdraw}
101
+ **/
102
+ withdraw(pool, params) {
103
+ const { pools } = this.sdk.chain(pool.chainId);
104
+ const tokenIn = params.tokenIn ?? pool.pool;
105
+ const tokenOut = lpRoute(params.tokenOut, () => pools.getWithdrawalTokensOut(pool.pool, tokenIn));
106
+ if (!tokenOut) return {
107
+ ok: false,
108
+ reason: "unsupportedTokenPair"
109
+ };
110
+ const preview = pools.simulateWithdraw({
111
+ pool: pool.pool,
112
+ amount: params.amount,
113
+ tokenIn,
114
+ tokenOut
115
+ });
116
+ const { calls } = pools.removeLiquidity({
117
+ pool: pool.pool,
118
+ amount: params.amount,
119
+ wallet: params.wallet,
120
+ permit: void 0,
121
+ meta: pools.getWithdrawalMetadata(pool.pool, tokenIn, tokenOut),
122
+ mode: "withdraw"
123
+ });
124
+ return {
125
+ ok: true,
126
+ operations: [],
127
+ preview,
128
+ calls
129
+ };
130
+ }
131
+ /**
132
+ * {@inheritDoc OpportunitiesSimulate.redeem}
133
+ **/
134
+ redeem(pool, params) {
135
+ const { pools } = this.sdk.chain(pool.chainId);
136
+ const tokenIn = params.tokenIn ?? pool.pool;
137
+ const tokenOut = lpRoute(params.tokenOut, () => pools.getWithdrawalTokensOut(pool.pool, tokenIn));
138
+ if (!tokenOut) return {
139
+ ok: false,
140
+ reason: "unsupportedTokenPair"
141
+ };
142
+ const preview = pools.simulateRedeem({
143
+ pool: pool.pool,
144
+ amount: params.amount,
145
+ tokenIn,
146
+ tokenOut
147
+ });
148
+ const { calls } = pools.removeLiquidity({
149
+ pool: pool.pool,
150
+ amount: params.amount,
151
+ wallet: params.wallet,
152
+ permit: void 0,
153
+ meta: pools.getWithdrawalMetadata(pool.pool, tokenIn, tokenOut),
154
+ mode: "redeem"
155
+ });
156
+ return {
157
+ ok: true,
158
+ operations: [],
159
+ preview,
160
+ calls
161
+ };
162
+ }
163
+ /**
164
+ * {@inheritDoc OpportunitiesSimulate.openNewStrategy}
165
+ **/
166
+ async openNewStrategy(strategy, params) {
167
+ return this.queryChain({
168
+ network: strategy.chainId,
169
+ run: (sdk) => service(sdk).openStrategyIntent({
170
+ sdk,
171
+ creditManager: strategy.creditManager,
172
+ collateral: params.collateral,
173
+ targetToken: params.targetToken ?? strategy.targetCollateral,
174
+ leverage: params.leverage,
175
+ leftoverBalances: params.leftoverBalances,
176
+ slippage: params.slippage,
177
+ quotaReserve: params.quotaReserve
178
+ })
179
+ });
180
+ }
181
+ /**
182
+ * {@inheritDoc OpportunitiesSimulate.depositStrategy}
183
+ **/
184
+ async depositStrategy(position, params) {
185
+ return this.#startIntent(position, params, {
186
+ type: "DEPOSIT",
187
+ token: params.token,
188
+ amount: params.amount,
189
+ value: params.value,
190
+ positionToken: params.positionToken,
191
+ targetLeverage: params.targetLeverage
192
+ });
193
+ }
194
+ /**
195
+ * {@inheritDoc OpportunitiesSimulate.withdrawStrategy}
196
+ **/
197
+ async withdrawStrategy(position, params) {
198
+ return this.#startRoutes(position, params, {
199
+ type: "WITHDRAW",
200
+ amount: params.amount,
201
+ to: params.to,
202
+ tokenOut: params.tokenOut,
203
+ sourceToken: params.sourceToken
204
+ });
205
+ }
206
+ /**
207
+ * {@inheritDoc OpportunitiesSimulate.maxWithdraw}
208
+ **/
209
+ async maxWithdraw(position) {
210
+ return this.queryChain({
211
+ network: position.chainId,
212
+ run: async (sdk) => service(sdk).maxWithdraw({
213
+ creditAccount: await slice(sdk, position.creditAccount),
214
+ sdk
215
+ })
216
+ });
217
+ }
218
+ /**
219
+ * {@inheritDoc OpportunitiesSimulate.repayStrategy}
220
+ **/
221
+ async repayStrategy(position, params) {
222
+ return this.#startIntent(position, params, {
223
+ type: "REPAY",
224
+ token: params.token,
225
+ amount: params.amount,
226
+ value: params.value
227
+ });
228
+ }
229
+ /**
230
+ * {@inheritDoc OpportunitiesSimulate.maxRepay}
231
+ **/
232
+ async maxRepay(position) {
233
+ return this.queryChain({
234
+ network: position.chainId,
235
+ run: async (sdk) => service(sdk).maxRepay({
236
+ creditAccount: await slice(sdk, position.creditAccount),
237
+ sdk
238
+ })
239
+ });
240
+ }
241
+ /**
242
+ * {@inheritDoc OpportunitiesSimulate.adjustLeverage}
243
+ **/
244
+ async adjustLeverage(position, params) {
245
+ return this.#startRoutes(position, params, {
246
+ type: "ADJUST_LEVERAGE",
247
+ targetLeverage: params.targetLeverage,
248
+ token: params.token
249
+ });
250
+ }
251
+ /**
252
+ * {@inheritDoc OpportunitiesSimulate.addCollateral}
253
+ **/
254
+ async addCollateral(position, params) {
255
+ return this.#startIntent(position, params, {
256
+ type: "ADD_COLLATERAL",
257
+ token: params.token,
258
+ amount: params.amount,
259
+ value: params.value
260
+ });
261
+ }
262
+ /**
263
+ * {@inheritDoc OpportunitiesSimulate.withdrawCollateral}
264
+ **/
265
+ async withdrawCollateral(position, params) {
266
+ return this.#startIntent(position, params, {
267
+ type: "WITHDRAW_ASSET",
268
+ token: params.token,
269
+ amount: params.amount,
270
+ to: params.to
271
+ });
272
+ }
273
+ /**
274
+ * Shared path of the two flows that sell a position asset, and therefore have
275
+ * two routes to offer: one account read, one intent, both routes quoted.
276
+ **/
277
+ async #startRoutes(position, options, intent) {
278
+ return this.queryChain({
279
+ network: position.chainId,
280
+ run: async (sdk) => service(sdk).intentRoutes({
281
+ intent,
282
+ creditAccount: await slice(sdk, position.creditAccount),
283
+ sdk,
284
+ slippage: options.slippage,
285
+ quotaReserve: options.quotaReserve
286
+ })
287
+ });
288
+ }
289
+ /**
290
+ * Shared path of the same two flows when only the delayed route is asked for:
291
+ * a planner that requests a redemption instead of swapping.
292
+ **/
293
+ async #startDelayedIntent(position, options, intent) {
294
+ return this.queryChain({
295
+ network: position.chainId,
296
+ run: async (sdk) => service(sdk).startDelayedIntent({
297
+ intent,
298
+ creditAccount: await slice(sdk, position.creditAccount),
299
+ sdk,
300
+ slippage: options.slippage,
301
+ quotaReserve: options.quotaReserve
302
+ })
303
+ });
304
+ }
305
+ /**
306
+ * Shared path of the five flows that act on an existing account: read the
307
+ * account, then run the intent through the engine.
308
+ **/
309
+ async #startIntent(position, options, intent) {
310
+ return this.queryChain({
311
+ network: position.chainId,
312
+ run: async (sdk) => {
313
+ const creditAccount = await slice(sdk, position.creditAccount);
314
+ return service(sdk).startIntent({
315
+ intent,
316
+ creditAccount,
317
+ sdk,
318
+ slippage: options.slippage,
319
+ quotaReserve: options.quotaReserve
320
+ });
321
+ }
322
+ });
323
+ }
324
+ };
325
+ function service(sdk) {
326
+ return new CreditAccountOperationsService(sdk);
327
+ }
328
+ function slice(sdk, creditAccount) {
329
+ return fetchCreditAccountSlice(sdk, creditAccount);
330
+ }
331
+ /**
332
+ * The operation a claim resumes, or `undefined` when there is none to resume:
333
+ * a withdrawal requested without an intent, a compressor too old to report one,
334
+ * or a full close, which the engine no longer previews.
335
+ **/
336
+ function resumable(intent) {
337
+ if (!intent || intent.type === "CLOSE_ACCOUNT") return;
338
+ return intent;
339
+ }
340
+ /**
341
+ * Picks the route the operation takes out of `tokenIn`, as a value rather than
342
+ * an exception: an unroutable or ambiguous pair is a request the caller can
343
+ * fix, so it belongs in the `ok: false` half alongside the strategy refusals.
344
+ *
345
+ * A pool with no route out of the input reports it by throwing, hence the
346
+ * catch; a requested output is checked against the list rather than trusted,
347
+ * so that a wrong one fails here instead of deeper in call assembly.
348
+ **/
349
+ function lpRoute(requested, routes) {
350
+ let options;
351
+ try {
352
+ options = routes();
353
+ } catch {
354
+ return;
355
+ }
356
+ if (requested) return options.some((o) => hexEq(o, requested)) ? requested : void 0;
357
+ return options.length === 1 ? options[0] : void 0;
358
+ }
359
+ //#endregion
360
+ export { SimulateApi };
@@ -0,0 +1,3 @@
1
+ import { SimulateApi } from "./SimulateApi.js";
2
+ import "./types.js";
3
+ export { SimulateApi };