@symmio/trading-core 2.0.0 → 3.0.0

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 (325) hide show
  1. package/README.md +2 -2
  2. package/dist/balance-history/get-balance-history/types.d.ts +1 -1
  3. package/dist/balance-history/get-balance-history/types.js.map +1 -1
  4. package/dist/core/chains/actions/get-chain-config.d.ts +1 -1
  5. package/dist/core/chains/actions/get-chain-config.js.map +1 -1
  6. package/dist/core/chains/actions/get-default-solver.d.ts +1 -1
  7. package/dist/core/chains/actions/get-default-solver.js.map +1 -1
  8. package/dist/core/chains/actions/list-supported-chains.js.map +1 -1
  9. package/dist/core/chains/registry.d.ts.map +1 -1
  10. package/dist/core/chains/registry.js +52 -50
  11. package/dist/core/chains/registry.js.map +1 -1
  12. package/dist/core/chains/supported-chains.d.ts +3 -3
  13. package/dist/core/chains/supported-chains.d.ts.map +1 -1
  14. package/dist/core/chains/supported-chains.js +1 -1
  15. package/dist/core/chains/supported-chains.js.map +1 -1
  16. package/dist/core/chains/types.d.ts +18 -4
  17. package/dist/core/chains/types.d.ts.map +1 -1
  18. package/dist/core/chains/types.js.map +1 -1
  19. package/dist/core/config/create-config.d.ts +7 -7
  20. package/dist/core/config/create-config.d.ts.map +1 -1
  21. package/dist/core/config/create-config.js +39 -38
  22. package/dist/core/config/create-config.js.map +1 -1
  23. package/dist/core/config/merge-chain-config.js +1 -0
  24. package/dist/core/config/merge-chain-config.js.map +1 -1
  25. package/dist/index.d.ts +18 -9
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +318 -316
  28. package/dist/margin/calculate-margin-risk.d.ts +1 -1
  29. package/dist/margin/calculate-margin-risk.js.map +1 -1
  30. package/dist/notifications/types.d.ts +1 -1
  31. package/dist/notifications/types.d.ts.map +1 -1
  32. package/dist/quotes/close-planning/min-remaining-quantity.d.ts +1 -1
  33. package/dist/quotes/close-planning/min-remaining-quantity.js.map +1 -1
  34. package/dist/quotes/get-quote-history/query-document.d.ts +1 -1
  35. package/dist/quotes/get-quote-history/query-document.js.map +1 -1
  36. package/dist/quotes/get-quote-history/types.d.ts +2 -2
  37. package/dist/quotes/get-quote-history/types.js.map +1 -1
  38. package/dist/quotes/grouping/aggregate-metrics.d.ts +1 -1
  39. package/dist/quotes/grouping/aggregate-metrics.js.map +1 -1
  40. package/dist/quotes/open-price.d.ts +10 -10
  41. package/dist/quotes/open-price.d.ts.map +1 -1
  42. package/dist/quotes/open-price.js +1 -1
  43. package/dist/quotes/open-price.js.map +1 -1
  44. package/dist/quotes/upnl/calculate-quote-leverage.d.ts +8 -6
  45. package/dist/quotes/upnl/calculate-quote-leverage.d.ts.map +1 -1
  46. package/dist/quotes/upnl/calculate-quote-leverage.js.map +1 -1
  47. package/dist/shared/utils/query.d.ts +2 -2
  48. package/dist/shared/utils/query.js.map +1 -1
  49. package/dist/solvers/force-close/force-close-position.js +1 -1
  50. package/dist/solvers/force-close/force-close-position.js.map +1 -1
  51. package/dist/solvers/force-close/get-force-close-params.js +1 -1
  52. package/dist/solvers/force-close/get-force-close-params.js.map +1 -1
  53. package/dist/solvers/instant-close/shared/calldata.js +1 -1
  54. package/dist/solvers/instant-close/shared/calldata.js.map +1 -1
  55. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.d.ts +129 -0
  56. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.d.ts.map +1 -0
  57. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.js +115 -0
  58. package/dist/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.js.map +1 -0
  59. package/dist/solvers/instant-open/get-instant-open-fees/index.d.ts +3 -0
  60. package/dist/solvers/instant-open/get-instant-open-fees/index.d.ts.map +1 -0
  61. package/dist/solvers/instant-open/get-instant-open-fees/query.d.ts +34 -0
  62. package/dist/solvers/instant-open/get-instant-open-fees/query.d.ts.map +1 -0
  63. package/dist/solvers/instant-open/get-instant-open-fees/query.js +33 -0
  64. package/dist/solvers/instant-open/get-instant-open-fees/query.js.map +1 -0
  65. package/dist/solvers/instant-open/index.d.ts +1 -0
  66. package/dist/solvers/instant-open/index.d.ts.map +1 -1
  67. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.d.ts.map +1 -1
  68. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.js +58 -55
  69. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.js.map +1 -1
  70. package/dist/solvers/instant-open/instant-open/types.d.ts +14 -4
  71. package/dist/solvers/instant-open/instant-open/types.d.ts.map +1 -1
  72. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.d.ts +45 -10
  73. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.d.ts.map +1 -1
  74. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.js +157 -72
  75. package/dist/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.js.map +1 -1
  76. package/dist/solvers/instant-open/shared/calldata.d.ts +35 -7
  77. package/dist/solvers/instant-open/shared/calldata.d.ts.map +1 -1
  78. package/dist/solvers/instant-open/shared/calldata.js +56 -14
  79. package/dist/solvers/instant-open/shared/calldata.js.map +1 -1
  80. package/dist/solvers/instant-open/shared/index.d.ts +1 -0
  81. package/dist/solvers/instant-open/shared/index.d.ts.map +1 -1
  82. package/dist/solvers/instant-open/shared/open-estimate-guard.d.ts +89 -0
  83. package/dist/solvers/instant-open/shared/open-estimate-guard.d.ts.map +1 -0
  84. package/dist/solvers/instant-open/shared/open-estimate-guard.js +52 -0
  85. package/dist/solvers/instant-open/shared/open-estimate-guard.js.map +1 -0
  86. package/dist/solvers/instant-open/shared/selectors.d.ts +46 -7
  87. package/dist/solvers/instant-open/shared/selectors.d.ts.map +1 -1
  88. package/dist/solvers/instant-open/shared/selectors.js +12 -5
  89. package/dist/solvers/instant-open/shared/selectors.js.map +1 -1
  90. package/dist/solvers/instant-open/shared/trade-math.d.ts +112 -8
  91. package/dist/solvers/instant-open/shared/trade-math.d.ts.map +1 -1
  92. package/dist/solvers/instant-open/shared/trade-math.js +59 -25
  93. package/dist/solvers/instant-open/shared/trade-math.js.map +1 -1
  94. package/dist/solvers/instant-open/shared/types.d.ts +32 -0
  95. package/dist/solvers/instant-open/shared/types.d.ts.map +1 -1
  96. package/dist/solvers/instant-open/shared/types.js.map +1 -1
  97. package/dist/solvers/markets/adapters/enigma-markets.d.ts.map +1 -1
  98. package/dist/solvers/markets/adapters/enigma-markets.js +38 -32
  99. package/dist/solvers/markets/adapters/enigma-markets.js.map +1 -1
  100. package/dist/solvers/markets/types.d.ts +15 -0
  101. package/dist/solvers/markets/types.d.ts.map +1 -1
  102. package/dist/solvers/revenue/get-solver-revenue.d.ts +11 -11
  103. package/dist/solvers/revenue/get-solver-revenue.d.ts.map +1 -1
  104. package/dist/solvers/revenue/get-solver-revenue.js +12 -12
  105. package/dist/solvers/revenue/get-solver-revenue.js.map +1 -1
  106. package/dist/solvers/revenue/query.d.ts +2 -2
  107. package/dist/solvers/revenue/query.d.ts.map +1 -1
  108. package/dist/solvers/revenue/query.js +1 -1
  109. package/dist/solvers/revenue/query.js.map +1 -1
  110. package/dist/solvers/revenue/to-solver-revenue.d.ts +3 -2
  111. package/dist/solvers/revenue/to-solver-revenue.d.ts.map +1 -1
  112. package/dist/solvers/revenue/to-solver-revenue.js.map +1 -1
  113. package/dist/solvers/shared/index.d.ts +1 -0
  114. package/dist/solvers/shared/index.d.ts.map +1 -1
  115. package/dist/solvers/shared/resolvers/resolve-market.d.ts +36 -5
  116. package/dist/solvers/shared/resolvers/resolve-market.d.ts.map +1 -1
  117. package/dist/solvers/shared/resolvers/resolve-market.js +30 -8
  118. package/dist/solvers/shared/resolvers/resolve-market.js.map +1 -1
  119. package/dist/solvers/shared/resolvers/types.d.ts +14 -0
  120. package/dist/solvers/shared/resolvers/types.d.ts.map +1 -1
  121. package/dist/solvers/shared/solver-close-fee.d.ts +76 -0
  122. package/dist/solvers/shared/solver-close-fee.d.ts.map +1 -0
  123. package/dist/solvers/shared/solver-close-fee.js +26 -0
  124. package/dist/solvers/shared/solver-close-fee.js.map +1 -0
  125. package/dist/solvers/symbols/to-solver-symbol.d.ts.map +1 -1
  126. package/dist/solvers/symbols/to-solver-symbol.js +36 -30
  127. package/dist/solvers/symbols/to-solver-symbol.js.map +1 -1
  128. package/dist/solvers/symbols/types.d.ts +22 -1
  129. package/dist/solvers/symbols/types.d.ts.map +1 -1
  130. package/dist/solvers/types/generated/enigma-solver.d.ts +8 -99
  131. package/dist/solvers/types/generated/enigma-solver.d.ts.map +1 -1
  132. package/dist/solvers/types/generated/enigma-solver.js +5 -11
  133. package/dist/solvers/types/generated/enigma-solver.js.map +1 -1
  134. package/dist/solvers/types/generated/rasa-solver.js +2 -2
  135. package/dist/solvers/types/generated/rasa-solver.js.map +1 -1
  136. package/dist/symmio-contracts/abi/index.d.ts +4 -4
  137. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/account-layer.d.ts +499 -132
  138. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/account-layer.d.ts.map +1 -1
  139. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/account-layer.js +591 -149
  140. package/dist/symmio-contracts/abi/v0.8.6/account-layer.js.map +1 -0
  141. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/index.d.ts.map +1 -1
  142. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/instant-layer.d.ts +24 -24
  143. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/instant-layer.d.ts.map +1 -1
  144. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/instant-layer.js +28 -28
  145. package/dist/symmio-contracts/abi/v0.8.6/instant-layer.js.map +1 -0
  146. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/symmio.d.ts +4724 -1019
  147. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/symmio.d.ts.map +1 -1
  148. package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/symmio.js +12750 -8308
  149. package/dist/symmio-contracts/abi/v0.8.6/symmio.js.map +1 -0
  150. package/dist/symmio-contracts/account-layer/actions/add-margin.js +1 -1
  151. package/dist/symmio-contracts/account-layer/actions/add-margin.js.map +1 -1
  152. package/dist/symmio-contracts/account-layer/actions/cancel-registration.js +1 -1
  153. package/dist/symmio-contracts/account-layer/actions/cancel-registration.js.map +1 -1
  154. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.js +1 -1
  155. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.js.map +1 -1
  156. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.js +1 -1
  157. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.js.map +1 -1
  158. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.js +1 -1
  159. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.js.map +1 -1
  160. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.js +1 -1
  161. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.js.map +1 -1
  162. package/dist/symmio-contracts/account-layer/actions/edit-account-name.js +1 -1
  163. package/dist/symmio-contracts/account-layer/actions/edit-account-name.js.map +1 -1
  164. package/dist/symmio-contracts/account-layer/actions/generate-account-manager-address.js +1 -1
  165. package/dist/symmio-contracts/account-layer/actions/generate-account-manager-address.js.map +1 -1
  166. package/dist/symmio-contracts/account-layer/actions/get-account-balance-info.js +1 -1
  167. package/dist/symmio-contracts/account-layer/actions/get-account-balance-info.js.map +1 -1
  168. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.js +1 -1
  169. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.js.map +1 -1
  170. package/dist/symmio-contracts/account-layer/actions/get-affiliate-state.js +1 -1
  171. package/dist/symmio-contracts/account-layer/actions/get-affiliate-state.js.map +1 -1
  172. package/dist/symmio-contracts/account-layer/actions/get-sub-account-virtual-nonce.js +1 -1
  173. package/dist/symmio-contracts/account-layer/actions/get-sub-account-virtual-nonce.js.map +1 -1
  174. package/dist/symmio-contracts/account-layer/actions/get-sub-account.js +1 -1
  175. package/dist/symmio-contracts/account-layer/actions/get-sub-account.js.map +1 -1
  176. package/dist/symmio-contracts/account-layer/actions/get-sub-accounts-count-of-user.js +1 -1
  177. package/dist/symmio-contracts/account-layer/actions/get-sub-accounts-count-of-user.js.map +1 -1
  178. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts-addresses.js +1 -1
  179. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts-addresses.js.map +1 -1
  180. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts.js +1 -1
  181. package/dist/symmio-contracts/account-layer/actions/get-user-sub-accounts.js.map +1 -1
  182. package/dist/symmio-contracts/account-layer/actions/get-virtual-account.d.ts +1 -1
  183. package/dist/symmio-contracts/account-layer/actions/get-virtual-account.js +1 -1
  184. package/dist/symmio-contracts/account-layer/actions/get-virtual-account.js.map +1 -1
  185. package/dist/symmio-contracts/account-layer/actions/get-virtual-accounts-addresses-of-sub-account.js +1 -1
  186. package/dist/symmio-contracts/account-layer/actions/get-virtual-accounts-addresses-of-sub-account.js.map +1 -1
  187. package/dist/symmio-contracts/account-layer/actions/predict-next-virtual-account.js +1 -1
  188. package/dist/symmio-contracts/account-layer/actions/predict-next-virtual-account.js.map +1 -1
  189. package/dist/symmio-contracts/account-layer/actions/remove-margin.js +1 -1
  190. package/dist/symmio-contracts/account-layer/actions/remove-margin.js.map +1 -1
  191. package/dist/symmio-contracts/account-layer/actions/request-to-register-affiliate.js +1 -1
  192. package/dist/symmio-contracts/account-layer/actions/request-to-register-affiliate.js.map +1 -1
  193. package/dist/symmio-contracts/account-layer/actions/simulate-add-margin.d.ts +1 -1
  194. package/dist/symmio-contracts/account-layer/actions/simulate-add-margin.js +1 -1
  195. package/dist/symmio-contracts/account-layer/actions/simulate-add-margin.js.map +1 -1
  196. package/dist/symmio-contracts/account-layer/actions/simulate-cancel-registration.d.ts +1 -1
  197. package/dist/symmio-contracts/account-layer/actions/simulate-cancel-registration.js +1 -1
  198. package/dist/symmio-contracts/account-layer/actions/simulate-cancel-registration.js.map +1 -1
  199. package/dist/symmio-contracts/account-layer/actions/simulate-create-sub-accounts.d.ts +1 -1
  200. package/dist/symmio-contracts/account-layer/actions/simulate-create-sub-accounts.js +1 -1
  201. package/dist/symmio-contracts/account-layer/actions/simulate-create-sub-accounts.js.map +1 -1
  202. package/dist/symmio-contracts/account-layer/actions/simulate-delete-sub-account.d.ts +1 -1
  203. package/dist/symmio-contracts/account-layer/actions/simulate-delete-sub-account.js +1 -1
  204. package/dist/symmio-contracts/account-layer/actions/simulate-delete-sub-account.js.map +1 -1
  205. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-and-allocate-for-account.d.ts +1 -1
  206. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-and-allocate-for-account.js +1 -1
  207. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-and-allocate-for-account.js.map +1 -1
  208. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-for-account.d.ts +1 -1
  209. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-for-account.js +1 -1
  210. package/dist/symmio-contracts/account-layer/actions/simulate-deposit-for-account.js.map +1 -1
  211. package/dist/symmio-contracts/account-layer/actions/simulate-edit-account-name.d.ts +1 -1
  212. package/dist/symmio-contracts/account-layer/actions/simulate-edit-account-name.js +1 -1
  213. package/dist/symmio-contracts/account-layer/actions/simulate-edit-account-name.js.map +1 -1
  214. package/dist/symmio-contracts/account-layer/actions/simulate-remove-margin.d.ts +1 -1
  215. package/dist/symmio-contracts/account-layer/actions/simulate-remove-margin.js +1 -1
  216. package/dist/symmio-contracts/account-layer/actions/simulate-remove-margin.js.map +1 -1
  217. package/dist/symmio-contracts/account-layer/actions/simulate-request-to-register-affiliate.d.ts +1 -1
  218. package/dist/symmio-contracts/account-layer/actions/simulate-request-to-register-affiliate.js +1 -1
  219. package/dist/symmio-contracts/account-layer/actions/simulate-request-to-register-affiliate.js.map +1 -1
  220. package/dist/symmio-contracts/account-layer/types.d.ts +10 -10
  221. package/dist/symmio-contracts/account-layer/types.js.map +1 -1
  222. package/dist/symmio-contracts/instant-layer/actions/get-delegation-expiry.js +1 -1
  223. package/dist/symmio-contracts/instant-layer/actions/get-delegation-expiry.js.map +1 -1
  224. package/dist/symmio-contracts/instant-layer/actions/get-is-delegation-active.js +1 -1
  225. package/dist/symmio-contracts/instant-layer/actions/get-is-delegation-active.js.map +1 -1
  226. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.js +1 -1
  227. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.js.map +1 -1
  228. package/dist/symmio-contracts/instant-layer/actions/simulate-grant-delegation.d.ts +1 -1
  229. package/dist/symmio-contracts/instant-layer/actions/simulate-grant-delegation.js +1 -1
  230. package/dist/symmio-contracts/instant-layer/actions/simulate-grant-delegation.js.map +1 -1
  231. package/dist/symmio-contracts/symmio/actions/allocate.js +1 -1
  232. package/dist/symmio-contracts/symmio/actions/allocate.js.map +1 -1
  233. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.d.ts +1 -1
  234. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.js +1 -1
  235. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.js.map +1 -1
  236. package/dist/symmio-contracts/symmio/actions/deallocate.js +1 -1
  237. package/dist/symmio-contracts/symmio/actions/deallocate.js.map +1 -1
  238. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.js +1 -1
  239. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.js.map +1 -1
  240. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.js +1 -1
  241. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.js.map +1 -1
  242. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.js +1 -1
  243. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.js.map +1 -1
  244. package/dist/symmio-contracts/symmio/actions/get-cool-downs-of-ma.js +1 -1
  245. package/dist/symmio-contracts/symmio/actions/get-cool-downs-of-ma.js.map +1 -1
  246. package/dist/symmio-contracts/symmio/actions/get-fee-for-user.js +1 -1
  247. package/dist/symmio-contracts/symmio/actions/get-fee-for-user.js.map +1 -1
  248. package/dist/symmio-contracts/symmio/actions/get-last-withdraw-request-id.js +1 -1
  249. package/dist/symmio-contracts/symmio/actions/get-last-withdraw-request-id.js.map +1 -1
  250. package/dist/symmio-contracts/symmio/actions/get-onchain-contract-markets.js +1 -1
  251. package/dist/symmio-contracts/symmio/actions/get-onchain-contract-markets.js.map +1 -1
  252. package/dist/symmio-contracts/symmio/actions/get-party-a-open-positions.js +1 -1
  253. package/dist/symmio-contracts/symmio/actions/get-party-a-open-positions.js.map +1 -1
  254. package/dist/symmio-contracts/symmio/actions/get-party-a-pending-quotes.js +1 -1
  255. package/dist/symmio-contracts/symmio/actions/get-party-a-pending-quotes.js.map +1 -1
  256. package/dist/symmio-contracts/symmio/actions/get-pending-quotes.js +1 -1
  257. package/dist/symmio-contracts/symmio/actions/get-pending-quotes.js.map +1 -1
  258. package/dist/symmio-contracts/symmio/actions/get-pending-withdraw-requests.d.ts.map +1 -1
  259. package/dist/symmio-contracts/symmio/actions/get-pending-withdraw-requests.js +10 -9
  260. package/dist/symmio-contracts/symmio/actions/get-pending-withdraw-requests.js.map +1 -1
  261. package/dist/symmio-contracts/symmio/actions/get-quote.js +1 -1
  262. package/dist/symmio-contracts/symmio/actions/get-quote.js.map +1 -1
  263. package/dist/symmio-contracts/symmio/actions/get-withdraw-requests.d.ts.map +1 -1
  264. package/dist/symmio-contracts/symmio/actions/get-withdraw-requests.js +9 -8
  265. package/dist/symmio-contracts/symmio/actions/get-withdraw-requests.js.map +1 -1
  266. package/dist/symmio-contracts/symmio/actions/get-withdrawable-time.js +1 -1
  267. package/dist/symmio-contracts/symmio/actions/get-withdrawable-time.js.map +1 -1
  268. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.d.ts +1 -1
  269. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.js +1 -1
  270. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.js.map +1 -1
  271. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.js +1 -1
  272. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.js.map +1 -1
  273. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.js +1 -1
  274. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.js.map +1 -1
  275. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.js +1 -1
  276. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.js.map +1 -1
  277. package/dist/symmio-contracts/symmio/actions/simulate-allocate.js +1 -1
  278. package/dist/symmio-contracts/symmio/actions/simulate-allocate.js.map +1 -1
  279. package/dist/symmio-contracts/symmio/actions/simulate-deallocate-and-initiate-withdraw.js +1 -1
  280. package/dist/symmio-contracts/symmio/actions/simulate-deallocate-and-initiate-withdraw.js.map +1 -1
  281. package/dist/symmio-contracts/symmio/actions/simulate-deallocate.js +1 -1
  282. package/dist/symmio-contracts/symmio/actions/simulate-deallocate.js.map +1 -1
  283. package/dist/symmio-contracts/symmio/actions/simulate-finalize-withdraw-request.d.ts +1 -1
  284. package/dist/symmio-contracts/symmio/actions/simulate-finalize-withdraw-request.js +1 -1
  285. package/dist/symmio-contracts/symmio/actions/simulate-finalize-withdraw-request.js.map +1 -1
  286. package/dist/symmio-contracts/symmio/actions/simulate-initiate-withdraw.js +1 -1
  287. package/dist/symmio-contracts/symmio/actions/simulate-initiate-withdraw.js.map +1 -1
  288. package/dist/symmio-contracts/symmio/actions/simulate-request-cancel-withdraw.js +1 -1
  289. package/dist/symmio-contracts/symmio/actions/simulate-request-cancel-withdraw.js.map +1 -1
  290. package/dist/symmio-contracts/symmio/actions/withdraw.d.ts +1 -1
  291. package/dist/symmio-contracts/symmio/actions/withdraw.js.map +1 -1
  292. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.js +1 -1
  293. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.js.map +1 -1
  294. package/dist/symmio-contracts/symmio/internal/simulate-call-as-sub-account.d.ts +1 -1
  295. package/dist/symmio-contracts/symmio/internal/simulate-call-as-sub-account.js +1 -1
  296. package/dist/symmio-contracts/symmio/internal/simulate-call-as-sub-account.js.map +1 -1
  297. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.d.ts +214 -0
  298. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.d.ts.map +1 -0
  299. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.js +248 -0
  300. package/dist/symmio-contracts/symmio/internal/withdraw-requests-v0-8-5.js.map +1 -0
  301. package/dist/symmio-contracts/symmio/parts.d.ts +1 -1
  302. package/dist/symmio-contracts/symmio/parts.js.map +1 -1
  303. package/dist/symmio-contracts/symmio/types.d.ts +29 -19
  304. package/dist/symmio-contracts/symmio/types.d.ts.map +1 -1
  305. package/dist/symmio-contracts/symmio/types.js.map +1 -1
  306. package/dist/tpsl/grouping/notional.js +6 -6
  307. package/dist/websocket/tpsl/parse-tpsl-frame.d.ts +1 -1
  308. package/dist/websocket/tpsl/parse-tpsl-frame.js.map +1 -1
  309. package/dist/websocket/tpsl/watch-tpsl-notifications.d.ts +1 -1
  310. package/dist/websocket/tpsl/watch-tpsl-notifications.js.map +1 -1
  311. package/package.json +1 -1
  312. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.d.ts +0 -27
  313. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.d.ts.map +0 -1
  314. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.js +0 -25
  315. package/dist/solvers/add-solver-whitelist/add-solver-whitelist.js.map +0 -1
  316. package/dist/solvers/add-solver-whitelist/index.d.ts +0 -3
  317. package/dist/solvers/add-solver-whitelist/index.d.ts.map +0 -1
  318. package/dist/solvers/add-solver-whitelist/query.d.ts +0 -19
  319. package/dist/solvers/add-solver-whitelist/query.d.ts.map +0 -1
  320. package/dist/solvers/add-solver-whitelist/query.js +0 -12
  321. package/dist/solvers/add-solver-whitelist/query.js.map +0 -1
  322. package/dist/symmio-contracts/abi/v0.8.5/account-layer.js.map +0 -1
  323. package/dist/symmio-contracts/abi/v0.8.5/instant-layer.js.map +0 -1
  324. package/dist/symmio-contracts/abi/v0.8.5/symmio.js.map +0 -1
  325. /package/dist/symmio-contracts/abi/{v0.8.5 → v0.8.6}/index.d.ts +0 -0
@@ -0,0 +1,115 @@
1
+ import { SymmError as e } from "../../../shared/errors/symm-error.js";
2
+ import { calculateExpectedSettlementLoss as t, calculateSolverFees as n, calculateTradeParams as r, computePlatformFeeLegs as i } from "../shared/trade-math.js";
3
+ import { assertValidSlippage as a, deriveAutoSlippage as o, fetchOpenEstimatePrice as s } from "../shared/open-estimate-guard.js";
4
+ import { resolveMarkPrice as c } from "../../shared/resolvers/resolve-mark-price.js";
5
+ import { resolveMarket as l } from "../../shared/resolvers/resolve-market.js";
6
+ import { resolveFeeRates as u } from "../prepare-instant-open-params/resolvers/resolve-fee-rates.js";
7
+ import { toDecimal as d } from "@symmio/utils/decimal";
8
+ //#region src/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.ts
9
+ async function f(f, p) {
10
+ p.slippage !== void 0 && a(p.slippage);
11
+ let m = f.getSolver({
12
+ chainId: p.chainId,
13
+ solverId: p.solverId
14
+ }).id === "enigma";
15
+ if (p.slippage === void 0 && !m) throw new e("validation", "SLIPPAGE_REQUIRED", "getInstantOpenFees: slippage is required on this solver — auto-derived slippage is lowcap-only.");
16
+ let h = await l(f, {
17
+ chainId: p.chainId,
18
+ solverId: p.solverId,
19
+ marketId: p.market.id,
20
+ marketName: p.market.name,
21
+ pricePrecision: p.market.pricePrecision,
22
+ quantityPrecision: p.market.quantityPrecision,
23
+ hedgerFeeOpen: p.market.hedgerFeeOpen,
24
+ hedgerFeeClose: p.market.hedgerFeeClose,
25
+ hedgerFeeCloseEarlyRate: p.market.hedgerFeeCloseEarlyRate,
26
+ hedgerFeeCloseEarlyThreshold: p.market.hedgerFeeCloseEarlyThreshold,
27
+ hedgerFeeCloseStandardThreshold: p.market.hedgerFeeCloseStandardThreshold,
28
+ includeHedgerFees: m
29
+ }), [g, _] = await Promise.all([c(f, {
30
+ chainId: p.chainId,
31
+ solverId: p.solverId,
32
+ marketName: h.name,
33
+ markPrice: p.markPrice
34
+ }), u(f, {
35
+ chainId: p.chainId,
36
+ subAccountAddress: p.subAccountAddress,
37
+ marketId: p.market.id,
38
+ feeRates: p.feeRates
39
+ })]), v = {
40
+ markPrice: g,
41
+ positionType: p.positionType,
42
+ userInput: p.initialMargin,
43
+ inputField: "PRICE",
44
+ leverage: p.leverage,
45
+ pricePrecision: h.pricePrecision,
46
+ quantityPrecision: h.quantityPrecision
47
+ }, y = p.slippage, b = m ? p.estimatedOpenPrice : void 0;
48
+ if (y === void 0) {
49
+ let t = r({
50
+ ...v,
51
+ slippage: 0
52
+ });
53
+ if (!t) throw new e("validation", "INVALID_TRADE_PARAMETERS", "Invalid trade parameters: markPrice or initialMargin is zero/NaN.");
54
+ m && b === void 0 && (b = await s(f, {
55
+ chainId: p.chainId,
56
+ solverId: p.solverId,
57
+ symbolId: p.market.id,
58
+ positionType: p.positionType,
59
+ quantity: t.quantity,
60
+ markPrice: g
61
+ })), y = o({
62
+ markPrice: g,
63
+ expectedFillPrice: b,
64
+ positionType: p.positionType
65
+ });
66
+ }
67
+ let x = r({
68
+ ...v,
69
+ slippage: y
70
+ });
71
+ if (!x) throw new e("validation", "INVALID_TRADE_PARAMETERS", "Invalid trade parameters: markPrice or initialMargin is zero/NaN.");
72
+ m && b === void 0 && (b = await s(f, {
73
+ chainId: p.chainId,
74
+ solverId: p.solverId,
75
+ symbolId: p.market.id,
76
+ positionType: p.positionType,
77
+ quantity: x.quantity,
78
+ markPrice: g
79
+ }));
80
+ let { platformOpenFee: S, platformCloseFee: C } = i(_, x.notional, x.notional);
81
+ if (!m) return {
82
+ kind: "rasa",
83
+ platformOpenFee: S,
84
+ platformCloseFee: C,
85
+ notional: x.notional,
86
+ totalFee: d(S).plus(C).toString()
87
+ };
88
+ let { openSolverFee: w, closeSolverFee: T } = n({
89
+ notional: x.notional,
90
+ hedgerFeeOpen: h.hedgerFeeOpen,
91
+ hedgerFeeClose: h.hedgerFeeClose,
92
+ hedgerFeeCloseEarlyRate: h.hedgerFeeCloseEarlyRate,
93
+ hedgerFeeCloseEarlyThreshold: h.hedgerFeeCloseEarlyThreshold,
94
+ hedgerFeeCloseStandardThreshold: h.hedgerFeeCloseStandardThreshold
95
+ }), E = t({
96
+ positionType: p.positionType,
97
+ markPrice: g,
98
+ expectedFillPrice: b,
99
+ quantity: x.quantity
100
+ });
101
+ return {
102
+ kind: "enigma",
103
+ platformOpenFee: S,
104
+ platformCloseFee: C,
105
+ notional: x.notional,
106
+ openSolverFee: w,
107
+ closeSolverFee: T,
108
+ expectedSettlementLoss: E,
109
+ totalFee: d(S).plus(C).plus(w).plus(T).plus(E).toString()
110
+ };
111
+ }
112
+ //#endregion
113
+ export { f as getInstantOpenFees };
114
+
115
+ //# sourceMappingURL=get-instant-open-fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-instant-open-fees.js","names":[],"sources":["../../../../src/solvers/instant-open/get-instant-open-fees/get-instant-open-fees.ts"],"sourcesContent":["import { toDecimal } from \"@symmio/utils/decimal\";\nimport type { Address } from \"viem\";\nimport type { Config } from \"../../../core/config\";\nimport { SymmError } from \"../../../shared/errors/symm-error\";\nimport type { Compute, ReadSolverParameter } from \"../../../shared/types/properties\";\nimport type { FeeForUser } from \"../../../symmio-contracts/symmio/actions/get-fee-for-user\";\nimport { resolveFeeRates, resolveMarket, resolveMarkPrice } from \"../prepare-instant-open-params/resolvers\";\nimport { assertValidSlippage, deriveAutoSlippage, fetchOpenEstimatePrice } from \"../shared/open-estimate-guard\";\nimport {\n calculateExpectedSettlementLoss,\n calculateSolverFees,\n calculateTradeParams,\n computePlatformFeeLegs,\n} from \"../shared/trade-math\";\nimport type { InstantOpenMarketData, PositionType } from \"../shared/types\";\n\n/**\n * Parameters for {@link getInstantOpenFees}. A subset of\n * `PrepareInstantOpenParameters` — the trade intent plus optional pre-fetched\n * data; every pre-filled optional field skips its network fetch.\n */\nexport type GetInstantOpenFeesParameters = Compute<\n ReadSolverParameter & {\n /** Sub-account / partyA address the platform fee rates are read for. */\n subAccountAddress: Address;\n /** Market identification + optional pre-fetched precision metadata. */\n market: InstantOpenMarketData;\n /** Trade side. */\n positionType: PositionType;\n /** Collateral (USD) the user enters as initial margin. Decimal string. */\n initialMargin: string;\n /** Position leverage (integer ≥ 1). */\n leverage: number;\n /**\n * Slippage tolerance percent (e.g. `5` for 5%). **Required on majors\n * (non-lowcap) solvers.** On a lowcap solver it may be omitted to\n * auto-derive from the dry-run estimate plus 4% headroom — the same rule\n * as `prepareInstantOpenParams`, so the preview prices what the open will\n * actually charge.\n */\n slippage?: number;\n /** Pre-fetched mark price as decimal string. When omitted, fetched via the price service. */\n markPrice?: string;\n /** Pre-fetched on-chain fee rates (matches `getFeeForUser` return). When omitted, fetched. */\n feeRates?: FeeForUser;\n /**\n * Pre-fetched solver estimated open (fill) price as decimal string —\n * **lowcap/Enigma only**; ignored on any other solver kind. When omitted\n * on a lowcap solver, fetched via `GET /estimated-price`.\n */\n estimatedOpenPrice?: string;\n }\n>;\n\n/**\n * Fee legs every solver kind charges on an instant open.\n */\nexport interface BaseInstantOpenFees {\n /** Platform open fee: `getFeeForUser.openFee × notional / 1e18` (decimal string). */\n platformOpenFee: string;\n /** Platform close fee, provisioned at open: `getFeeForUser.closeFee × notional / 1e18` (decimal string). */\n platformCloseFee: string;\n /** Leveraged notional the fee rates were applied to (decimal string). */\n notional: string;\n /** Sum of every fee leg on this quote (decimal string). */\n totalFee: string;\n}\n\n/**\n * Fee breakdown for a **lowcap (Enigma)** instant open. Extends the platform\n * legs with the solver fees and the settlement provision the solver charges\n * from the VA balance.\n */\nexport interface EnigmaInstantOpenFees extends BaseInstantOpenFees {\n /** Discriminant: these fees were priced for an Enigma (lowcap) solver. */\n kind: \"enigma\";\n /** Solver open fee: `hedgerFeeOpen × notional` (decimal string). */\n openSolverFee: string;\n /**\n * Solver close fee provisioned at open (decimal string). Because the holding\n * time is unknown at open and an early close costs more, this is the\n * worst-case `earlyRate × notional` from the market's close-fee schedule\n * (falling back to the flat `hedgerFeeClose × notional` when no schedule is\n * available).\n */\n closeSolverFee: string;\n /**\n * Expected settlement loss vs the dry-run estimate: side-aware\n * `max(0, adverse fill deviation × quantity)` (decimal string). `\"0\"` when\n * no usable estimate exists.\n */\n expectedSettlementLoss: string;\n}\n\n/**\n * Fee breakdown for a **majors (Rasa)** instant open — platform legs only.\n */\nexport interface RasaInstantOpenFees extends BaseInstantOpenFees {\n /** Discriminant: these fees were priced for a Rasa (majors) solver. */\n kind: \"rasa\";\n}\n\n/**\n * Return type of {@link getInstantOpenFees}. Narrow on `kind` to reach the\n * lowcap-only legs.\n */\nexport type GetInstantOpenFeesReturnType = EnigmaInstantOpenFees | RasaInstantOpenFees;\n\n/**\n * Preview every fee a new instant-open quote pays, separated by leg plus the\n * total — without signing or submitting anything.\n *\n * Mirrors the exact resolution and math `prepareInstantOpenParams` uses, so\n * the preview equals what the open charges for the same inputs:\n *\n * - **Both kinds**: `platformOpenFee` + `platformCloseFee`\n * (on-chain `getFeeForUser` rates × leveraged notional).\n * - **Lowcap (Enigma) only**: `openSolverFee` (`hedgerFeeOpen × notional`) +\n * `closeSolverFee` (the worst-case close rate × notional — see\n * {@link EnigmaInstantOpenFees.closeSolverFee}) and\n * `expectedSettlementLoss` (dry-run estimate vs mark) — the legs the solver\n * charges from the VA balance.\n *\n * `totalFee` sums every leg, including the settlement provision — it is the\n * amount the user must fund even though the settlement leg is a provision\n * rather than a fee the solver keeps.\n *\n * @throws {SymmError} `SLIPPAGE_REQUIRED` on majors without `slippage`;\n * `INVALID_SLIPPAGE` / `INVALID_TRADE_PARAMETERS` /\n * `RESOLVE_MARKET_NOT_FOUND` / `RESOLVE_MARK_PRICE_NOT_FOUND` for invalid or\n * unresolvable inputs.\n *\n * @example\n * ```ts\n * const fees = await getInstantOpenFees(config, {\n * subAccountAddress,\n * market: { id: 1 },\n * positionType: PositionType.LONG,\n * initialMargin: \"100\",\n * leverage: 5,\n * });\n * if (fees.kind === \"enigma\") console.log(fees.openSolverFee, fees.expectedSettlementLoss);\n * console.log(fees.totalFee);\n * ```\n */\nexport async function getInstantOpenFees(\n config: Config,\n parameters: GetInstantOpenFeesParameters,\n): Promise<GetInstantOpenFeesReturnType> {\n if (parameters.slippage !== undefined) assertValidSlippage(parameters.slippage);\n\n /** Estimate-driven legs exist only on lowcap (Enigma) solvers — a majors preview is platform legs only. */\n const isLowcap = config.getSolver({ chainId: parameters.chainId, solverId: parameters.solverId }).id === \"enigma\";\n if (parameters.slippage === undefined && !isLowcap) {\n throw new SymmError(\n \"validation\",\n \"SLIPPAGE_REQUIRED\",\n \"getInstantOpenFees: slippage is required on this solver — auto-derived slippage is lowcap-only.\",\n );\n }\n\n const market = await resolveMarket(config, {\n chainId: parameters.chainId,\n solverId: parameters.solverId,\n marketId: parameters.market.id,\n marketName: parameters.market.name,\n pricePrecision: parameters.market.pricePrecision,\n quantityPrecision: parameters.market.quantityPrecision,\n hedgerFeeOpen: parameters.market.hedgerFeeOpen,\n hedgerFeeClose: parameters.market.hedgerFeeClose,\n hedgerFeeCloseEarlyRate: parameters.market.hedgerFeeCloseEarlyRate,\n hedgerFeeCloseEarlyThreshold: parameters.market.hedgerFeeCloseEarlyThreshold,\n hedgerFeeCloseStandardThreshold: parameters.market.hedgerFeeCloseStandardThreshold,\n includeHedgerFees: isLowcap,\n });\n const [markPrice, feeRates] = await Promise.all([\n resolveMarkPrice(config, {\n chainId: parameters.chainId,\n solverId: parameters.solverId,\n marketName: market.name,\n markPrice: parameters.markPrice,\n }),\n resolveFeeRates(config, {\n chainId: parameters.chainId,\n subAccountAddress: parameters.subAccountAddress,\n marketId: parameters.market.id,\n feeRates: parameters.feeRates,\n }),\n ]);\n\n const calculationInput = {\n markPrice,\n positionType: parameters.positionType,\n userInput: parameters.initialMargin,\n inputField: \"PRICE\" as const,\n leverage: parameters.leverage,\n pricePrecision: market.pricePrecision,\n quantityPrecision: market.quantityPrecision,\n };\n\n let slippage = parameters.slippage;\n let expectedFillPrice = isLowcap ? parameters.estimatedOpenPrice : undefined;\n if (slippage === undefined) {\n const sized = calculateTradeParams({ ...calculationInput, slippage: 0 });\n if (!sized) {\n throw new SymmError(\n \"validation\",\n \"INVALID_TRADE_PARAMETERS\",\n \"Invalid trade parameters: markPrice or initialMargin is zero/NaN.\",\n );\n }\n if (isLowcap && expectedFillPrice === undefined) {\n expectedFillPrice = await fetchOpenEstimatePrice(config, {\n chainId: parameters.chainId,\n solverId: parameters.solverId,\n symbolId: parameters.market.id,\n positionType: parameters.positionType,\n quantity: sized.quantity,\n markPrice,\n });\n }\n slippage = deriveAutoSlippage({ markPrice, expectedFillPrice, positionType: parameters.positionType });\n }\n\n const tradeCalc = calculateTradeParams({ ...calculationInput, slippage });\n if (!tradeCalc) {\n throw new SymmError(\n \"validation\",\n \"INVALID_TRADE_PARAMETERS\",\n \"Invalid trade parameters: markPrice or initialMargin is zero/NaN.\",\n );\n }\n\n if (isLowcap && expectedFillPrice === undefined) {\n expectedFillPrice = await fetchOpenEstimatePrice(config, {\n chainId: parameters.chainId,\n solverId: parameters.solverId,\n symbolId: parameters.market.id,\n positionType: parameters.positionType,\n quantity: tradeCalc.quantity,\n markPrice,\n });\n }\n\n const { platformOpenFee, platformCloseFee } = computePlatformFeeLegs(\n feeRates,\n tradeCalc.notional,\n tradeCalc.notional,\n );\n\n if (!isLowcap) {\n return {\n kind: \"rasa\",\n platformOpenFee,\n platformCloseFee,\n notional: tradeCalc.notional,\n totalFee: toDecimal(platformOpenFee).plus(platformCloseFee).toString(),\n };\n }\n\n const { openSolverFee, closeSolverFee } = calculateSolverFees({\n notional: tradeCalc.notional,\n hedgerFeeOpen: market.hedgerFeeOpen,\n hedgerFeeClose: market.hedgerFeeClose,\n hedgerFeeCloseEarlyRate: market.hedgerFeeCloseEarlyRate,\n hedgerFeeCloseEarlyThreshold: market.hedgerFeeCloseEarlyThreshold,\n hedgerFeeCloseStandardThreshold: market.hedgerFeeCloseStandardThreshold,\n });\n const expectedSettlementLoss = calculateExpectedSettlementLoss({\n positionType: parameters.positionType,\n markPrice,\n expectedFillPrice,\n quantity: tradeCalc.quantity,\n });\n\n return {\n kind: \"enigma\",\n platformOpenFee,\n platformCloseFee,\n notional: tradeCalc.notional,\n openSolverFee,\n closeSolverFee,\n expectedSettlementLoss,\n totalFee: toDecimal(platformOpenFee)\n .plus(platformCloseFee)\n .plus(openSolverFee)\n .plus(closeSolverFee)\n .plus(expectedSettlementLoss)\n .toString(),\n };\n}\n"],"mappings":";;;;;;;;AAiJA,eAAsB,EACpB,GACA,GACuC;CACvC,AAAI,EAAW,aAAa,KAAA,KAAW,EAAoB,EAAW,QAAQ;CAG9E,IAAM,IAAW,EAAO,UAAU;EAAE,SAAS,EAAW;EAAS,UAAU,EAAW;CAAS,CAAC,EAAE,OAAO;CACzG,IAAI,EAAW,aAAa,KAAA,KAAa,CAAC,GACxC,MAAM,IAAI,EACR,cACA,qBACA,iGACF;CAGF,IAAM,IAAS,MAAM,EAAc,GAAQ;EACzC,SAAS,EAAW;EACpB,UAAU,EAAW;EACrB,UAAU,EAAW,OAAO;EAC5B,YAAY,EAAW,OAAO;EAC9B,gBAAgB,EAAW,OAAO;EAClC,mBAAmB,EAAW,OAAO;EACrC,eAAe,EAAW,OAAO;EACjC,gBAAgB,EAAW,OAAO;EAClC,yBAAyB,EAAW,OAAO;EAC3C,8BAA8B,EAAW,OAAO;EAChD,iCAAiC,EAAW,OAAO;EACnD,mBAAmB;CACrB,CAAC,GACK,CAAC,GAAW,KAAY,MAAM,QAAQ,IAAI,CAC9C,EAAiB,GAAQ;EACvB,SAAS,EAAW;EACpB,UAAU,EAAW;EACrB,YAAY,EAAO;EACnB,WAAW,EAAW;CACxB,CAAC,GACD,EAAgB,GAAQ;EACtB,SAAS,EAAW;EACpB,mBAAmB,EAAW;EAC9B,UAAU,EAAW,OAAO;EAC5B,UAAU,EAAW;CACvB,CAAC,CACH,CAAC,GAEK,IAAmB;EACvB;EACA,cAAc,EAAW;EACzB,WAAW,EAAW;EACtB,YAAY;EACZ,UAAU,EAAW;EACrB,gBAAgB,EAAO;EACvB,mBAAmB,EAAO;CAC5B,GAEI,IAAW,EAAW,UACtB,IAAoB,IAAW,EAAW,qBAAqB,KAAA;CACnE,IAAI,MAAa,KAAA,GAAW;EAC1B,IAAM,IAAQ,EAAqB;GAAE,GAAG;GAAkB,UAAU;EAAE,CAAC;EACvE,IAAI,CAAC,GACH,MAAM,IAAI,EACR,cACA,4BACA,mEACF;EAYF,AAVI,KAAY,MAAsB,KAAA,MACpC,IAAoB,MAAM,EAAuB,GAAQ;GACvD,SAAS,EAAW;GACpB,UAAU,EAAW;GACrB,UAAU,EAAW,OAAO;GAC5B,cAAc,EAAW;GACzB,UAAU,EAAM;GAChB;EACF,CAAC,IAEH,IAAW,EAAmB;GAAE;GAAW;GAAmB,cAAc,EAAW;EAAa,CAAC;CACvG;CAEA,IAAM,IAAY,EAAqB;EAAE,GAAG;EAAkB;CAAS,CAAC;CACxE,IAAI,CAAC,GACH,MAAM,IAAI,EACR,cACA,4BACA,mEACF;CAGF,AAAI,KAAY,MAAsB,KAAA,MACpC,IAAoB,MAAM,EAAuB,GAAQ;EACvD,SAAS,EAAW;EACpB,UAAU,EAAW;EACrB,UAAU,EAAW,OAAO;EAC5B,cAAc,EAAW;EACzB,UAAU,EAAU;EACpB;CACF,CAAC;CAGH,IAAM,EAAE,oBAAiB,wBAAqB,EAC5C,GACA,EAAU,UACV,EAAU,QACZ;CAEA,IAAI,CAAC,GACH,OAAO;EACL,MAAM;EACN;EACA;EACA,UAAU,EAAU;EACpB,UAAU,EAAU,CAAe,EAAE,KAAK,CAAgB,EAAE,SAAS;CACvE;CAGF,IAAM,EAAE,kBAAe,sBAAmB,EAAoB;EAC5D,UAAU,EAAU;EACpB,eAAe,EAAO;EACtB,gBAAgB,EAAO;EACvB,yBAAyB,EAAO;EAChC,8BAA8B,EAAO;EACrC,iCAAiC,EAAO;CAC1C,CAAC,GACK,IAAyB,EAAgC;EAC7D,cAAc,EAAW;EACzB;EACA;EACA,UAAU,EAAU;CACtB,CAAC;CAED,OAAO;EACL,MAAM;EACN;EACA;EACA,UAAU,EAAU;EACpB;EACA;EACA;EACA,UAAU,EAAU,CAAe,EAChC,KAAK,CAAgB,EACrB,KAAK,CAAa,EAClB,KAAK,CAAc,EACnB,KAAK,CAAsB,EAC3B,SAAS;CACd;AACF"}
@@ -0,0 +1,3 @@
1
+ export * from './get-instant-open-fees.js';
2
+ export * from './query.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/get-instant-open-fees/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Config } from '../../../core/config/index.js';
2
+ import { Compute, ConfigKeyParameter } from '../../../shared/types/properties.js';
3
+ import { QueryParameter, SymmioQueryOptions } from '../../../shared/types/query.js';
4
+ import { GetInstantOpenFeesParameters, GetInstantOpenFeesReturnType } from './get-instant-open-fees.js';
5
+ /** Data resolved by the {@link getInstantOpenFeesQueryOptions} query. */
6
+ export type GetInstantOpenFeesData = GetInstantOpenFeesReturnType;
7
+ /** Build the TanStack Query key for {@link getInstantOpenFeesQueryOptions}. */
8
+ export declare function getInstantOpenFeesQueryKey(options: Compute<GetInstantOpenFeesParameters & ConfigKeyParameter>): readonly ["getInstantOpenFees", Record<string, unknown>];
9
+ /** Query-key type produced by {@link getInstantOpenFeesQueryKey}. */
10
+ export type GetInstantOpenFeesQueryKey = ReturnType<typeof getInstantOpenFeesQueryKey>;
11
+ /** Options accepted by {@link getInstantOpenFeesQueryOptions}. */
12
+ export type GetInstantOpenFeesOptions = Compute<GetInstantOpenFeesParameters & QueryParameter<GetInstantOpenFeesData, Error, GetInstantOpenFeesData, GetInstantOpenFeesQueryKey>>;
13
+ /** TanStack Query options returned by {@link getInstantOpenFeesQueryOptions}. */
14
+ export type GetInstantOpenFeesQueryOptions = SymmioQueryOptions<GetInstantOpenFeesData, Error, GetInstantOpenFeesData, GetInstantOpenFeesQueryKey>;
15
+ /**
16
+ * Build TanStack Query options for {@link getInstantOpenFees}. Disabled until
17
+ * `initialMargin` is non-empty, so the fee preview does not fire on an empty
18
+ * amount input.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * useQuery(
23
+ * getInstantOpenFeesQueryOptions(config, {
24
+ * subAccountAddress,
25
+ * market: { id: 1 },
26
+ * positionType,
27
+ * initialMargin,
28
+ * leverage: 5,
29
+ * }),
30
+ * );
31
+ * ```
32
+ */
33
+ export declare function getInstantOpenFeesQueryOptions(config: Config, options: GetInstantOpenFeesOptions): GetInstantOpenFeesQueryOptions;
34
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/get-instant-open-fees/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtF,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EAClC,MAAM,yBAAyB,CAAC;AAEjC,yEAAyE;AACzE,MAAM,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAElE,+EAA+E;AAC/E,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,4BAA4B,GAAG,kBAAkB,CAAC,4DAE7G;AAED,qEAAqE;AACrE,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEvF,kEAAkE;AAClE,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,4BAA4B,GAC1B,cAAc,CAAC,sBAAsB,EAAE,KAAK,EAAE,sBAAsB,EAAE,0BAA0B,CAAC,CACpG,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,8BAA8B,GAAG,kBAAkB,CAC7D,sBAAsB,EACtB,KAAK,EACL,sBAAsB,EACtB,0BAA0B,CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,yBAAyB,GACjC,8BAA8B,CAuBhC"}
@@ -0,0 +1,33 @@
1
+ import { filterQueryOptions as e } from "../../../shared/utils/query.js";
2
+ import { getInstantOpenFees as t } from "./get-instant-open-fees.js";
3
+ //#region src/solvers/instant-open/get-instant-open-fees/query.ts
4
+ function n(t) {
5
+ return ["getInstantOpenFees", e(t)];
6
+ }
7
+ function r(e, r) {
8
+ return {
9
+ ...r.query,
10
+ queryKey: n({
11
+ ...r,
12
+ configKey: e.getChainConfigKey(r.chainId)
13
+ }),
14
+ enabled: (r.query?.enabled ?? !0) && r.initialMargin.length > 0,
15
+ queryFn: () => t(e, {
16
+ chainId: r.chainId,
17
+ solverId: r.solverId,
18
+ subAccountAddress: r.subAccountAddress,
19
+ market: r.market,
20
+ positionType: r.positionType,
21
+ initialMargin: r.initialMargin,
22
+ leverage: r.leverage,
23
+ slippage: r.slippage,
24
+ markPrice: r.markPrice,
25
+ feeRates: r.feeRates,
26
+ estimatedOpenPrice: r.estimatedOpenPrice
27
+ })
28
+ };
29
+ }
30
+ //#endregion
31
+ export { n as getInstantOpenFeesQueryKey, r as getInstantOpenFeesQueryOptions };
32
+
33
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","names":[],"sources":["../../../../src/solvers/instant-open/get-instant-open-fees/query.ts"],"sourcesContent":["import type { Config } from \"../../../core/config\";\nimport type { Compute, ConfigKeyParameter } from \"../../../shared/types/properties\";\nimport type { QueryParameter, SymmioQueryOptions } from \"../../../shared/types/query\";\nimport { filterQueryOptions } from \"../../../shared/utils/query\";\nimport {\n getInstantOpenFees,\n type GetInstantOpenFeesParameters,\n type GetInstantOpenFeesReturnType,\n} from \"./get-instant-open-fees\";\n\n/** Data resolved by the {@link getInstantOpenFeesQueryOptions} query. */\nexport type GetInstantOpenFeesData = GetInstantOpenFeesReturnType;\n\n/** Build the TanStack Query key for {@link getInstantOpenFeesQueryOptions}. */\nexport function getInstantOpenFeesQueryKey(options: Compute<GetInstantOpenFeesParameters & ConfigKeyParameter>) {\n return [\"getInstantOpenFees\", filterQueryOptions(options)] as const;\n}\n\n/** Query-key type produced by {@link getInstantOpenFeesQueryKey}. */\nexport type GetInstantOpenFeesQueryKey = ReturnType<typeof getInstantOpenFeesQueryKey>;\n\n/** Options accepted by {@link getInstantOpenFeesQueryOptions}. */\nexport type GetInstantOpenFeesOptions = Compute<\n GetInstantOpenFeesParameters &\n QueryParameter<GetInstantOpenFeesData, Error, GetInstantOpenFeesData, GetInstantOpenFeesQueryKey>\n>;\n\n/** TanStack Query options returned by {@link getInstantOpenFeesQueryOptions}. */\nexport type GetInstantOpenFeesQueryOptions = SymmioQueryOptions<\n GetInstantOpenFeesData,\n Error,\n GetInstantOpenFeesData,\n GetInstantOpenFeesQueryKey\n>;\n\n/**\n * Build TanStack Query options for {@link getInstantOpenFees}. Disabled until\n * `initialMargin` is non-empty, so the fee preview does not fire on an empty\n * amount input.\n *\n * @example\n * ```ts\n * useQuery(\n * getInstantOpenFeesQueryOptions(config, {\n * subAccountAddress,\n * market: { id: 1 },\n * positionType,\n * initialMargin,\n * leverage: 5,\n * }),\n * );\n * ```\n */\nexport function getInstantOpenFeesQueryOptions(\n config: Config,\n options: GetInstantOpenFeesOptions,\n): GetInstantOpenFeesQueryOptions {\n return {\n ...options.query,\n queryKey: getInstantOpenFeesQueryKey({\n ...options,\n configKey: config.getChainConfigKey(options.chainId),\n }),\n enabled: (options.query?.enabled ?? true) && options.initialMargin.length > 0,\n queryFn: () =>\n getInstantOpenFees(config, {\n chainId: options.chainId,\n solverId: options.solverId,\n subAccountAddress: options.subAccountAddress,\n market: options.market,\n positionType: options.positionType,\n initialMargin: options.initialMargin,\n leverage: options.leverage,\n slippage: options.slippage,\n markPrice: options.markPrice,\n feeRates: options.feeRates,\n estimatedOpenPrice: options.estimatedOpenPrice,\n }),\n };\n}\n"],"mappings":";;;AAcA,SAAgB,EAA2B,GAAqE;CAC9G,OAAO,CAAC,sBAAsB,EAAmB,CAAO,CAAC;AAC3D;AAqCA,SAAgB,EACd,GACA,GACgC;CAChC,OAAO;EACL,GAAG,EAAQ;EACX,UAAU,EAA2B;GACnC,GAAG;GACH,WAAW,EAAO,kBAAkB,EAAQ,OAAO;EACrD,CAAC;EACD,UAAU,EAAQ,OAAO,WAAW,OAAS,EAAQ,cAAc,SAAS;EAC5E,eACE,EAAmB,GAAQ;GACzB,SAAS,EAAQ;GACjB,UAAU,EAAQ;GAClB,mBAAmB,EAAQ;GAC3B,QAAQ,EAAQ;GAChB,cAAc,EAAQ;GACtB,eAAe,EAAQ;GACvB,UAAU,EAAQ;GAClB,UAAU,EAAQ;GAClB,WAAW,EAAQ;GACnB,UAAU,EAAQ;GAClB,oBAAoB,EAAQ;EAC9B,CAAC;CACL;AACF"}
@@ -1,3 +1,4 @@
1
+ export * from './get-instant-open-fees/index.js';
1
2
  export * from './get-instant-open-quote-id/index.js';
2
3
  export * from './get-instant-opens/index.js';
3
4
  export * from './instant-open/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solvers/instant-open/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solvers/instant-open/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"enigma-instant-open.d.ts","sourceRoot":"","sources":["../../../../../src/solvers/instant-open/instant-open/adapters/enigma-instant-open.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAE3D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,EAClC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CA6ElC"}
1
+ {"version":3,"file":"enigma-instant-open.d.ts","sourceRoot":"","sources":["../../../../../src/solvers/instant-open/instant-open/adapters/enigma-instant-open.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAE3D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,EAClC,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAuFlC"}
@@ -1,73 +1,76 @@
1
1
  import { SymmError as e } from "../../../../shared/errors/symm-error.js";
2
- import { encodeAddMarginToNextVA as t, encodeSendQuoteWithAffiliateAndData as n, getFakeSendQuoteMuonSignature as r, sendQuoteUpnlSigFlexRange as i } from "../../shared/calldata.js";
3
- import { sendInstantOpen as a } from "../../shared/hedger-api.js";
4
- import { buildSignedOperation as o, signAndFormatInstantOperation as s } from "../../shared/operations.js";
5
- import { isolationTypeForSide as c } from "../../shared/types.js";
2
+ import { encodeAddMarginToNextVA as t, encodeSendQuote as n, encodeSendQuoteWithAffiliateAndData as r, getFakeSendQuoteMuonSignature as i, sendQuoteUpnlSigFlexRange as a } from "../../shared/calldata.js";
3
+ import { sendInstantOpen as o } from "../../shared/hedger-api.js";
4
+ import { buildSignedOperation as s, signAndFormatInstantOperation as c } from "../../shared/operations.js";
5
+ import { isolationTypeForSide as l } from "../../shared/types.js";
6
6
  //#region src/solvers/instant-open/instant-open/adapters/enigma-instant-open.ts
7
- async function l(l, u) {
8
- if (!u.margin) throw new e("validation", "INSTANT_OPEN_MARGIN_REQUIRED", "instantOpen: the Enigma (lowcap) flow funds a new virtual account, so `margin.amount` is required.");
9
- let { config: d, solver: f, chainConfig: p, walletClient: m, signerAddress: h, deadline: g, symbolId: _, metadata: v } = l, { accountLayerAddress: y, symmioAddress: b, affiliatesAddress: x } = p.addresses, S = t({
10
- subAccount: u.subAccountAddress,
11
- isolationType: c(u.positionType),
12
- symbolId: _,
13
- amount: u.margin.amount
14
- }), C = n({
15
- partyBsWhiteList: [f.address],
16
- symbolId: _,
17
- positionType: u.positionType,
7
+ async function u(u, d) {
8
+ if (!d.margin) throw new e("validation", "INSTANT_OPEN_MARGIN_REQUIRED", "instantOpen: the Enigma (lowcap) flow funds a new virtual account, so `margin.amount` is required.");
9
+ let { config: f, solver: p, chainConfig: m, walletClient: h, signerAddress: g, deadline: _, symbolId: v, metadata: y } = u, { accountLayerAddress: b, symmioAddress: x, affiliatesAddress: S } = m.addresses, C = t({
10
+ subAccount: d.subAccountAddress,
11
+ isolationType: l(d.positionType),
12
+ symbolId: v,
13
+ amount: d.margin.amount
14
+ }), w = {
15
+ partyBsWhiteList: [p.address],
16
+ symbolId: v,
17
+ positionType: d.positionType,
18
18
  orderType: 1,
19
- price: u.order.price,
20
- quantity: u.order.quantity,
21
- cva: u.lockedParam.cva,
22
- lf: u.lockedParam.lf,
23
- partyAmm: u.lockedParam.partyAmm,
24
- partyBmm: u.lockedParam.partyBmm,
25
- deadline: g,
26
- affiliate: x,
27
- data: v,
28
- upnlSig: r(u.order.price)
29
- }), w = o({
30
- signer: h,
31
- target: y,
32
- callData: S,
33
- signerAccount: u.subAccountAddress,
34
- deadline: g,
35
- salt: u.addMarginSalt
36
- }), T = o({
37
- signer: h,
19
+ price: d.order.price,
20
+ quantity: d.order.quantity,
21
+ cva: d.lockedParam.cva,
22
+ lf: d.lockedParam.lf,
23
+ partyAmm: d.lockedParam.partyAmm,
24
+ partyBmm: d.lockedParam.partyBmm,
25
+ deadline: _,
26
+ affiliate: S,
27
+ data: y,
28
+ upnlSig: i(d.order.price)
29
+ }, T = m.contractsVersion === "0.8.5" ? r(w) : n({
30
+ ...w,
31
+ solverFeeCaps: d.solverFeeCaps
32
+ }), E = s({
33
+ signer: g,
38
34
  target: b,
39
35
  callData: C,
40
- signerAccount: u.subAccountAddress,
41
- deadline: g,
42
- salt: u.sendQuoteSalt,
36
+ signerAccount: d.subAccountAddress,
37
+ deadline: _,
38
+ salt: d.addMarginSalt
39
+ }), D = s({
40
+ signer: g,
41
+ target: x,
42
+ callData: T,
43
+ signerAccount: d.subAccountAddress,
44
+ deadline: _,
45
+ salt: d.sendQuoteSalt,
43
46
  flexFields: [{
44
- ...i(C),
45
- authorizedFlexFiller: f.address
47
+ ...a(T),
48
+ authorizedFlexFiller: p.address
46
49
  }]
47
- }), [E, D] = await Promise.all([s(d, {
48
- operation: w,
49
- chainId: l.chainId,
50
- walletClient: m
51
- }), s(d, {
52
- operation: T,
53
- chainId: l.chainId,
54
- walletClient: m
55
- })]), O = await a(d, {
56
- chainId: l.chainId,
57
- solverId: f.id,
50
+ }), [O, k] = await Promise.all([c(f, {
51
+ operation: E,
52
+ chainId: u.chainId,
53
+ walletClient: h
54
+ }), c(f, {
55
+ operation: D,
56
+ chainId: u.chainId,
57
+ walletClient: h
58
+ })]), A = await o(f, {
59
+ chainId: u.chainId,
60
+ solverId: p.id,
58
61
  request: {
59
- addMargin: E,
60
- sendQuote: D
62
+ addMargin: O,
63
+ sendQuote: k
61
64
  }
62
65
  });
63
66
  return {
64
67
  kind: "enigma",
65
68
  success: !0,
66
- tempQuoteId: O.temp_quote_id !== void 0 && O.temp_quote_id !== null ? String(O.temp_quote_id) : void 0,
67
- partyBmm: O.partyBmm
69
+ tempQuoteId: A.temp_quote_id !== void 0 && A.temp_quote_id !== null ? String(A.temp_quote_id) : void 0,
70
+ partyBmm: A.partyBmm
68
71
  };
69
72
  }
70
73
  //#endregion
71
- export { l as submitEnigmaInstantOpen };
74
+ export { u as submitEnigmaInstantOpen };
72
75
 
73
76
  //# sourceMappingURL=enigma-instant-open.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enigma-instant-open.js","names":[],"sources":["../../../../../src/solvers/instant-open/instant-open/adapters/enigma-instant-open.ts"],"sourcesContent":["import { SymmError } from \"../../../../shared/errors/symm-error\";\nimport {\n encodeAddMarginToNextVA,\n encodeSendQuoteWithAffiliateAndData,\n getFakeSendQuoteMuonSignature,\n sendQuoteUpnlSigFlexRange,\n} from \"../../shared/calldata\";\nimport { sendInstantOpen } from \"../../shared/hedger-api\";\nimport { buildSignedOperation, signAndFormatInstantOperation } from \"../../shared/operations\";\nimport { ORDER_TYPE_MARKET, isolationTypeForSide } from \"../../shared/types\";\nimport type { EnigmaInstantOpenResult, InstantOpenParameters } from \"../types\";\nimport type { InstantOpenAdapterContext } from \"./context\";\n\n/**\n * Submit an instant open to an **Enigma** (lowcap) hedger.\n *\n * Signs two operations — `addMarginToNextVA` on the AccountLayer and\n * `sendQuote` on the diamond — and posts both to `/instant_trade/instant_open`.\n *\n * The quote carries a **placeholder** Muon signature: lowcap bypasses Muon\n * verification, but the contract still reads `upnlSig.price`, and the encoded\n * signature region is delegated to the solver via a `FlexField` so it can write a\n * live attestation at execution time. Only the `sendQuote` operation carries the\n * delegation; `addMargin` stays fully fixed.\n *\n * @throws {SymmError} `INSTANT_OPEN_MARGIN_REQUIRED` when `margin` is absent —\n * reachable when the caller omitted `solverId` and the chain's default solver\n * turned out to be Enigma.\n * @throws {SymmApiError} when the hedger request fails.\n * @internal\n */\nexport async function submitEnigmaInstantOpen(\n context: InstantOpenAdapterContext,\n parameters: InstantOpenParameters,\n): Promise<EnigmaInstantOpenResult> {\n if (!parameters.margin) {\n throw new SymmError(\n \"validation\",\n \"INSTANT_OPEN_MARGIN_REQUIRED\",\n \"instantOpen: the Enigma (lowcap) flow funds a new virtual account, so `margin.amount` is required.\",\n );\n }\n\n const { config, solver, chainConfig, walletClient, signerAddress, deadline, symbolId, metadata } = context;\n const { accountLayerAddress, symmioAddress, affiliatesAddress } = chainConfig.addresses;\n\n const addMarginCallData = encodeAddMarginToNextVA({\n subAccount: parameters.subAccountAddress,\n isolationType: isolationTypeForSide(parameters.positionType),\n symbolId,\n amount: parameters.margin.amount,\n });\n\n const sendQuoteCallData = encodeSendQuoteWithAffiliateAndData({\n partyBsWhiteList: [solver.address],\n symbolId,\n positionType: parameters.positionType,\n orderType: ORDER_TYPE_MARKET,\n price: parameters.order.price,\n quantity: parameters.order.quantity,\n cva: parameters.lockedParam.cva,\n lf: parameters.lockedParam.lf,\n partyAmm: parameters.lockedParam.partyAmm,\n partyBmm: parameters.lockedParam.partyBmm,\n deadline,\n affiliate: affiliatesAddress,\n data: metadata,\n upnlSig: getFakeSendQuoteMuonSignature(parameters.order.price),\n });\n\n const addMarginOp = buildSignedOperation({\n signer: signerAddress,\n target: accountLayerAddress,\n callData: addMarginCallData,\n signerAccount: parameters.subAccountAddress,\n deadline,\n salt: parameters.addMarginSalt,\n });\n\n const sendQuoteOp = buildSignedOperation({\n signer: signerAddress,\n target: symmioAddress,\n callData: sendQuoteCallData,\n signerAccount: parameters.subAccountAddress,\n deadline,\n salt: parameters.sendQuoteSalt,\n flexFields: [{ ...sendQuoteUpnlSigFlexRange(sendQuoteCallData), authorizedFlexFiller: solver.address }],\n });\n\n const [addMargin, sendQuote] = await Promise.all([\n signAndFormatInstantOperation(config, { operation: addMarginOp, chainId: context.chainId, walletClient }),\n signAndFormatInstantOperation(config, { operation: sendQuoteOp, chainId: context.chainId, walletClient }),\n ]);\n\n const response = await sendInstantOpen(config, {\n chainId: context.chainId,\n // The resolved solver's own id — never a hardcoded kind, so a differently-id'd\n // solver of the same kind can never be re-resolved onto the wrong endpoint.\n solverId: solver.id,\n request: { addMargin, sendQuote },\n });\n\n return {\n kind: \"enigma\",\n success: true,\n tempQuoteId:\n response.temp_quote_id !== undefined && response.temp_quote_id !== null\n ? String(response.temp_quote_id)\n : undefined,\n partyBmm: response.partyBmm,\n };\n}\n"],"mappings":";;;;;;AA+BA,eAAsB,EACpB,GACA,GACkC;CAClC,IAAI,CAAC,EAAW,QACd,MAAM,IAAI,EACR,cACA,gCACA,oGACF;CAGF,IAAM,EAAE,WAAQ,WAAQ,gBAAa,iBAAc,kBAAe,aAAU,aAAU,gBAAa,GAC7F,EAAE,wBAAqB,kBAAe,yBAAsB,EAAY,WAExE,IAAoB,EAAwB;EAChD,YAAY,EAAW;EACvB,eAAe,EAAqB,EAAW,YAAY;EAC3D;EACA,QAAQ,EAAW,OAAO;CAC5B,CAAC,GAEK,IAAoB,EAAoC;EAC5D,kBAAkB,CAAC,EAAO,OAAO;EACjC;EACA,cAAc,EAAW;EACzB,WAAA;EACA,OAAO,EAAW,MAAM;EACxB,UAAU,EAAW,MAAM;EAC3B,KAAK,EAAW,YAAY;EAC5B,IAAI,EAAW,YAAY;EAC3B,UAAU,EAAW,YAAY;EACjC,UAAU,EAAW,YAAY;EACjC;EACA,WAAW;EACX,MAAM;EACN,SAAS,EAA8B,EAAW,MAAM,KAAK;CAC/D,CAAC,GAEK,IAAc,EAAqB;EACvC,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,eAAe,EAAW;EAC1B;EACA,MAAM,EAAW;CACnB,CAAC,GAEK,IAAc,EAAqB;EACvC,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,eAAe,EAAW;EAC1B;EACA,MAAM,EAAW;EACjB,YAAY,CAAC;GAAE,GAAG,EAA0B,CAAiB;GAAG,sBAAsB,EAAO;EAAQ,CAAC;CACxG,CAAC,GAEK,CAAC,GAAW,KAAa,MAAM,QAAQ,IAAI,CAC/C,EAA8B,GAAQ;EAAE,WAAW;EAAa,SAAS,EAAQ;EAAS;CAAa,CAAC,GACxG,EAA8B,GAAQ;EAAE,WAAW;EAAa,SAAS,EAAQ;EAAS;CAAa,CAAC,CAC1G,CAAC,GAEK,IAAW,MAAM,EAAgB,GAAQ;EAC7C,SAAS,EAAQ;EAGjB,UAAU,EAAO;EACjB,SAAS;GAAE;GAAW;EAAU;CAClC,CAAC;CAED,OAAO;EACL,MAAM;EACN,SAAS;EACT,aACE,EAAS,kBAAkB,KAAA,KAAa,EAAS,kBAAkB,OAC/D,OAAO,EAAS,aAAa,IAC7B,KAAA;EACN,UAAU,EAAS;CACrB;AACF"}
1
+ {"version":3,"file":"enigma-instant-open.js","names":[],"sources":["../../../../../src/solvers/instant-open/instant-open/adapters/enigma-instant-open.ts"],"sourcesContent":["import { SymmError } from \"../../../../shared/errors/symm-error\";\nimport {\n encodeAddMarginToNextVA,\n encodeSendQuote,\n encodeSendQuoteWithAffiliateAndData,\n getFakeSendQuoteMuonSignature,\n sendQuoteUpnlSigFlexRange,\n} from \"../../shared/calldata\";\nimport { sendInstantOpen } from \"../../shared/hedger-api\";\nimport { buildSignedOperation, signAndFormatInstantOperation } from \"../../shared/operations\";\nimport { ORDER_TYPE_MARKET, isolationTypeForSide } from \"../../shared/types\";\nimport type { EnigmaInstantOpenResult, InstantOpenParameters } from \"../types\";\nimport type { InstantOpenAdapterContext } from \"./context\";\n\n/**\n * Submit an instant open to an **Enigma** (lowcap) hedger.\n *\n * Signs two operations — `addMarginToNextVA` on the AccountLayer and\n * `sendQuote` on the diamond — and posts both to `/instant_trade/instant_open`.\n *\n * The quote carries a **placeholder** Muon signature: lowcap bypasses Muon\n * verification, but the contract still reads `upnlSig.price`, and the encoded\n * signature region is delegated to the solver via a `FlexField` so it can write a\n * live attestation at execution time. Only the `sendQuote` operation carries the\n * delegation; `addMargin` stays fully fixed.\n *\n * @throws {SymmError} `INSTANT_OPEN_MARGIN_REQUIRED` when `margin` is absent —\n * reachable when the caller omitted `solverId` and the chain's default solver\n * turned out to be Enigma.\n * @throws {SymmApiError} when the hedger request fails.\n * @internal\n */\nexport async function submitEnigmaInstantOpen(\n context: InstantOpenAdapterContext,\n parameters: InstantOpenParameters,\n): Promise<EnigmaInstantOpenResult> {\n if (!parameters.margin) {\n throw new SymmError(\n \"validation\",\n \"INSTANT_OPEN_MARGIN_REQUIRED\",\n \"instantOpen: the Enigma (lowcap) flow funds a new virtual account, so `margin.amount` is required.\",\n );\n }\n\n const { config, solver, chainConfig, walletClient, signerAddress, deadline, symbolId, metadata } = context;\n const { accountLayerAddress, symmioAddress, affiliatesAddress } = chainConfig.addresses;\n\n const addMarginCallData = encodeAddMarginToNextVA({\n subAccount: parameters.subAccountAddress,\n isolationType: isolationTypeForSide(parameters.positionType),\n symbolId,\n amount: parameters.margin.amount,\n });\n\n const quoteArgs = {\n partyBsWhiteList: [solver.address],\n symbolId,\n positionType: parameters.positionType,\n orderType: ORDER_TYPE_MARKET,\n price: parameters.order.price,\n quantity: parameters.order.quantity,\n cva: parameters.lockedParam.cva,\n lf: parameters.lockedParam.lf,\n partyAmm: parameters.lockedParam.partyAmm,\n partyBmm: parameters.lockedParam.partyBmm,\n deadline,\n affiliate: affiliatesAddress,\n data: metadata,\n upnlSig: getFakeSendQuoteMuonSignature(parameters.order.price),\n };\n\n /**\n * Which quote-send call to sign is a chain-generation fact: a v0.8.5 diamond\n * has no capped `sendQuote` selector (the calldata would revert), and a\n * v0.8.6 solver rejects the legacy call's zero fee caps.\n */\n const sendQuoteCallData =\n chainConfig.contractsVersion === \"0.8.5\"\n ? encodeSendQuoteWithAffiliateAndData(quoteArgs)\n : encodeSendQuote({ ...quoteArgs, solverFeeCaps: parameters.solverFeeCaps });\n\n const addMarginOp = buildSignedOperation({\n signer: signerAddress,\n target: accountLayerAddress,\n callData: addMarginCallData,\n signerAccount: parameters.subAccountAddress,\n deadline,\n salt: parameters.addMarginSalt,\n });\n\n const sendQuoteOp = buildSignedOperation({\n signer: signerAddress,\n target: symmioAddress,\n callData: sendQuoteCallData,\n signerAccount: parameters.subAccountAddress,\n deadline,\n salt: parameters.sendQuoteSalt,\n flexFields: [{ ...sendQuoteUpnlSigFlexRange(sendQuoteCallData), authorizedFlexFiller: solver.address }],\n });\n\n const [addMargin, sendQuote] = await Promise.all([\n signAndFormatInstantOperation(config, { operation: addMarginOp, chainId: context.chainId, walletClient }),\n signAndFormatInstantOperation(config, { operation: sendQuoteOp, chainId: context.chainId, walletClient }),\n ]);\n\n const response = await sendInstantOpen(config, {\n chainId: context.chainId,\n // The resolved solver's own id — never a hardcoded kind, so a differently-id'd\n // solver of the same kind can never be re-resolved onto the wrong endpoint.\n solverId: solver.id,\n request: { addMargin, sendQuote },\n });\n\n return {\n kind: \"enigma\",\n success: true,\n tempQuoteId:\n response.temp_quote_id !== undefined && response.temp_quote_id !== null\n ? String(response.temp_quote_id)\n : undefined,\n partyBmm: response.partyBmm,\n };\n}\n"],"mappings":";;;;;;AAgCA,eAAsB,EACpB,GACA,GACkC;CAClC,IAAI,CAAC,EAAW,QACd,MAAM,IAAI,EACR,cACA,gCACA,oGACF;CAGF,IAAM,EAAE,WAAQ,WAAQ,gBAAa,iBAAc,kBAAe,aAAU,aAAU,gBAAa,GAC7F,EAAE,wBAAqB,kBAAe,yBAAsB,EAAY,WAExE,IAAoB,EAAwB;EAChD,YAAY,EAAW;EACvB,eAAe,EAAqB,EAAW,YAAY;EAC3D;EACA,QAAQ,EAAW,OAAO;CAC5B,CAAC,GAEK,IAAY;EAChB,kBAAkB,CAAC,EAAO,OAAO;EACjC;EACA,cAAc,EAAW;EACzB,WAAA;EACA,OAAO,EAAW,MAAM;EACxB,UAAU,EAAW,MAAM;EAC3B,KAAK,EAAW,YAAY;EAC5B,IAAI,EAAW,YAAY;EAC3B,UAAU,EAAW,YAAY;EACjC,UAAU,EAAW,YAAY;EACjC;EACA,WAAW;EACX,MAAM;EACN,SAAS,EAA8B,EAAW,MAAM,KAAK;CAC/D,GAOM,IACJ,EAAY,qBAAqB,UAC7B,EAAoC,CAAS,IAC7C,EAAgB;EAAE,GAAG;EAAW,eAAe,EAAW;CAAc,CAAC,GAEzE,IAAc,EAAqB;EACvC,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,eAAe,EAAW;EAC1B;EACA,MAAM,EAAW;CACnB,CAAC,GAEK,IAAc,EAAqB;EACvC,QAAQ;EACR,QAAQ;EACR,UAAU;EACV,eAAe,EAAW;EAC1B;EACA,MAAM,EAAW;EACjB,YAAY,CAAC;GAAE,GAAG,EAA0B,CAAiB;GAAG,sBAAsB,EAAO;EAAQ,CAAC;CACxG,CAAC,GAEK,CAAC,GAAW,KAAa,MAAM,QAAQ,IAAI,CAC/C,EAA8B,GAAQ;EAAE,WAAW;EAAa,SAAS,EAAQ;EAAS;CAAa,CAAC,GACxG,EAA8B,GAAQ;EAAE,WAAW;EAAa,SAAS,EAAQ;EAAS;CAAa,CAAC,CAC1G,CAAC,GAEK,IAAW,MAAM,EAAgB,GAAQ;EAC7C,SAAS,EAAQ;EAGjB,UAAU,EAAO;EACjB,SAAS;GAAE;GAAW;EAAU;CAClC,CAAC;CAED,OAAO;EACL,MAAM;EACN,SAAS;EACT,aACE,EAAS,kBAAkB,KAAA,KAAa,EAAS,kBAAkB,OAC/D,OAAO,EAAS,aAAa,IAC7B,KAAA;EACN,UAAU,EAAS;CACrB;AACF"}
@@ -3,13 +3,13 @@ import { SymmioSolverKind } from '../../../core/chains/types.js';
3
3
  import { ChainIdParameter, Compute, FromParameter } from '../../../shared/types/properties.js';
4
4
  import { PositionType } from '../../../symmio-contracts/symmio/types.js';
5
5
  import { RasaInstantOpen } from '../get-instant-opens/types.js';
6
- import { InstantOpenLockedParams, InstantOpenMargin, InstantOpenOrder, SolverOrderType } from '../shared/types.js';
6
+ import { InstantOpenLockedParams, InstantOpenMargin, InstantOpenOrder, SolverFeeCaps, SolverOrderType } from '../shared/types.js';
7
7
  /**
8
8
  * Parameters for {@link instantOpen}, generic over the target solver kind `K`.
9
9
  *
10
- * Every domain value is the **final** 18-decimal-wei `bigint` ready to feed
11
- * `sendQuoteWithAffiliateAndData`. The caller (or the `prepareInstantOpenParams`
12
- * wizard) owns trade math, platform-fee calc, and margin calc.
10
+ * Every domain value is the **final** 18-decimal-wei `bigint` ready to feed the
11
+ * quote-send call. The caller (or the `prepareInstantOpenParams` wizard) owns
12
+ * trade math, platform-fee calc, and margin calc.
13
13
  *
14
14
  * Passing a literal `solverId` binds `K`, which narrows the **return** type to
15
15
  * that solver's result variant.
@@ -42,6 +42,16 @@ export type InstantOpenParameters<K extends SymmioSolverKind = SymmioSolverKind>
42
42
  * cross-margin and has no `addMargin` step.
43
43
  */
44
44
  margin?: InstantOpenMargin;
45
+ /**
46
+ * Solver-fee rate caps authorized on the quote — 18-decimal ratios of
47
+ * notional (perps-core v0.8.6 solver fees). Applied by the Enigma flow on
48
+ * a `contractsVersion: "0.8.6"` chain, where it signs `sendQuote`;
49
+ * defaults to zero caps there, which a fee-charging solver may reject —
50
+ * `prepareInstantOpenParams` fills the market's `minOpenSolverFeeCap` /
51
+ * `minCloseSolverFeeCap`. Ignored on `"0.8.5"` chains and by the Rasa
52
+ * flow, which sign the legacy `sendQuoteWithAffiliateAndData`.
53
+ */
54
+ solverFeeCaps?: SolverFeeCaps;
45
55
  /** Override the metadata UUID. Defaults to `globalThis.crypto.randomUUID()`. */
46
56
  uuid?: string;
47
57
  /** Override the addMargin salt. Enigma-only. Defaults to a random 32-byte salt. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/instant-open/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAErH;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAAI,OAAO,CACxF,gBAAgB,GACd,aAAa,GAAG;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,wFAAwF;IACxF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,EAAE,gBAAgB,CAAC;IACxB,mGAAmG;IACnG,WAAW,EAAE,uBAAuB,CAAC;IACrC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CACJ,CAAC;AAEF,sEAAsE;AACtE,UAAU,qBAAqB;IAC7B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,mDAAmD;IACnD,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,gEAAgE;AAChE,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,EAAE,eAAe,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/instant-open/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAAI,OAAO,CACxF,gBAAgB,GACd,aAAa,GAAG;IACd,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,CAAC;IACb,wFAAwF;IACxF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,EAAE,gBAAgB,CAAC;IACxB,mGAAmG;IACnG,WAAW,EAAE,uBAAuB,CAAC;IACrC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CACJ,CAAC;AAEF,sEAAsE;AACtE,UAAU,qBAAqB;IAC7B,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mEAAmE;AACnE,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,mDAAmD;IACnD,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,gEAAgE;AAChE,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,EAAE,eAAe,CAAC;CACtB;AAED,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC"}
@@ -23,10 +23,24 @@ export type PrepareInstantOpenParameters = Compute<WriteSolverParameter & {
23
23
  initialMargin: string;
24
24
  /** Position leverage (integer ≥ 1). */
25
25
  leverage: number;
26
- /** Slippage tolerance percent (e.g. `5` for 5%). */
27
- slippage: number;
26
+ /**
27
+ * Slippage tolerance percent (e.g. `5` for 5%). **Required on majors
28
+ * (non-lowcap) solvers.** On a lowcap solver it may be omitted to
29
+ * auto-derive: the SDK dry-runs the sized order and sets the price bound
30
+ * to the estimated fill price plus 4% headroom (falling back to a flat 4%
31
+ * off mark when the estimate is unavailable).
32
+ */
33
+ slippage?: number;
28
34
  /** Pre-fetched mark price as decimal string. When omitted, fetched via Enigma price service. */
29
35
  markPrice?: string;
36
+ /**
37
+ * Pre-fetched solver estimated open (fill) price as decimal string —
38
+ * **lowcap/Enigma only**; ignored on any other solver kind. When omitted
39
+ * on a lowcap solver, fetched via `GET /estimated-price`. Feeds the
40
+ * settlement-loss provision, the slippage gate, and (when `slippage` is
41
+ * omitted) the auto-slippage derivation.
42
+ */
43
+ estimatedOpenPrice?: string;
30
44
  /**
31
45
  * Pre-fetched solver locked params (matches `getLockedParams` return —
32
46
  * `ApiLockedParamsBySymbolIdResponse`). When supplied with all four
@@ -51,19 +65,40 @@ export type PrepareInstantOpenParameters = Compute<WriteSolverParameter & {
51
65
  * Resolve every input the {@link InstantOpenParameters} primitive needs from a
52
66
  * minimal parameter set.
53
67
  *
68
+ * The estimate-driven steps (auto slippage, dry-run gate, solver fees,
69
+ * settlement provision) are **lowcap-only** — a majors (non-lowcap) prepare is
70
+ * unchanged: `slippage` required, no estimate fetch, margin = locks +
71
+ * platform fee.
72
+ *
54
73
  * Steps:
55
- * 1. Resolve market metadata, mark price, locked params, and fee rates —
74
+ * 1. Validate the user's `slippage` ({@link assertValidSlippage}). On a
75
+ * lowcap solver it may be omitted and is auto-derived: dry-run the
76
+ * mark-sized order and set the price bound to the estimated fill plus 4%
77
+ * headroom ({@link deriveAutoSlippage}). On majors an omitted slippage
78
+ * throws `SLIPPAGE_REQUIRED`.
79
+ * 2. Resolve market metadata, mark price, locked params, and fee rates —
56
80
  * concurrent fetches with caller-supplied fields short-circuiting.
57
- * 2. Run {@link calculateTradeParams} to derive `requestedOpenPrice`,
81
+ * 3. Run {@link calculateTradeParams} to derive `requestedOpenPrice`,
58
82
  * `quantity`, `cva`, `lf`, `partyAmm`, `partyBmm`, `notional`.
59
- * 3. Run {@link computePlatformFee} + {@link calculateMargin} to derive the
60
- * `addMargin` amount.
61
- * 4. Convert all final values to 18-decimal-wei `bigint`.
83
+ * 4. Dry-run the sized order and reject when the expected fill deviates from
84
+ * mark beyond the slippage tolerance
85
+ * ({@link assertOpenEstimateWithinSlippage}; skipped when the estimate is
86
+ * unavailable, reusing the caller-supplied `estimatedOpenPrice` or the
87
+ * auto-slippage estimate when one exists).
88
+ * 5. Run {@link computePlatformFee}, {@link calculateSolverFees}, and
89
+ * {@link calculateExpectedSettlementLoss}, then {@link calculateMargin} to
90
+ * derive the `addMargin` amount — the solver charges its fees and the
91
+ * open-price settlement from the VA, so the transfer funds
92
+ * `locks + platformFee + openSolverFee + closeSolverFee +
93
+ * expectedSettlementLoss`.
94
+ * 6. Convert all final values to 18-decimal-wei `bigint`.
62
95
  *
63
- * @throws {SymmError} `RESOLVE_MARKET_NOT_FOUND` /
96
+ * @throws {SymmError} `INVALID_SLIPPAGE` / `SLIPPAGE_REQUIRED` /
97
+ * `SLIPPAGE_EXCEEDED` /
98
+ * `RESOLVE_MARKET_NOT_FOUND` /
64
99
  * `RESOLVE_MARKET_METADATA_INCOMPLETE` /
65
- * `RESOLVE_MARK_PRICE_NOT_FOUND` / `INVALID_TRADE_PARAMETERS` for
66
- * missing / invalid resolved inputs.
100
+ * `RESOLVE_MARK_PRICE_NOT_FOUND` / `INVALID_TRADE_PARAMETERS` /
101
+ * `INVALID_SOLVER_FEE_CAP` for invalid inputs or an out-of-tolerance fill.
67
102
  */
68
103
  export declare function prepareInstantOpenParams(config: Config, parameters: PrepareInstantOpenParameters): Promise<InstantOpenParameters>;
69
104
  //# sourceMappingURL=prepare-instant-open-params.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-instant-open-params.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2DAA2D,CAAC;AAC5F,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAC7F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGhF;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAChD,oBAAoB,GAAG;IACrB,oCAAoC;IACpC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,kBAAkB;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,iCAAiC,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,kDAAkD;IAClD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,4BAA4B,GACvC,OAAO,CAAC,qBAAqB,CAAC,CAkGhC"}
1
+ {"version":3,"file":"prepare-instant-open-params.d.ts","sourceRoot":"","sources":["../../../../src/solvers/instant-open/prepare-instant-open-params/prepare-instant-open-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAEtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2DAA2D,CAAC;AAC5F,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAC7F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAgBnE,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA+BhF;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAChD,oBAAoB,GAAG;IACrB,oCAAoC;IACpC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,kBAAkB;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,iCAAiC,CAAC;IACvD;;;OAGG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,kDAAkD;IAClD,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,4BAA4B,GACvC,OAAO,CAAC,qBAAqB,CAAC,CAiOhC"}