@symmio/trading-react 0.1.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 (545) hide show
  1. package/LICENSE +21 -0
  2. package/dist/account-layer/index.d.ts +29 -0
  3. package/dist/account-layer/index.d.ts.map +1 -0
  4. package/dist/account-layer/use-account-balance-info.d.ts +22 -0
  5. package/dist/account-layer/use-account-balance-info.d.ts.map +1 -0
  6. package/dist/account-layer/use-account-balance-info.js +23 -0
  7. package/dist/account-layer/use-account-balance-info.js.map +1 -0
  8. package/dist/account-layer/use-account-balance-of.d.ts +22 -0
  9. package/dist/account-layer/use-account-balance-of.d.ts.map +1 -0
  10. package/dist/account-layer/use-account-balance-of.js +23 -0
  11. package/dist/account-layer/use-account-balance-of.js.map +1 -0
  12. package/dist/account-layer/use-add-margin.d.ts +26 -0
  13. package/dist/account-layer/use-add-margin.d.ts.map +1 -0
  14. package/dist/account-layer/use-add-margin.js +40 -0
  15. package/dist/account-layer/use-add-margin.js.map +1 -0
  16. package/dist/account-layer/use-allocate.d.ts +25 -0
  17. package/dist/account-layer/use-allocate.d.ts.map +1 -0
  18. package/dist/account-layer/use-allocate.js +40 -0
  19. package/dist/account-layer/use-allocate.js.map +1 -0
  20. package/dist/account-layer/use-create-sub-accounts.d.ts +36 -0
  21. package/dist/account-layer/use-create-sub-accounts.d.ts.map +1 -0
  22. package/dist/account-layer/use-create-sub-accounts.js +41 -0
  23. package/dist/account-layer/use-create-sub-accounts.js.map +1 -0
  24. package/dist/account-layer/use-deallocate.d.ts +44 -0
  25. package/dist/account-layer/use-deallocate.d.ts.map +1 -0
  26. package/dist/account-layer/use-deallocate.js +44 -0
  27. package/dist/account-layer/use-deallocate.js.map +1 -0
  28. package/dist/account-layer/use-delete-sub-account.d.ts +30 -0
  29. package/dist/account-layer/use-delete-sub-account.d.ts.map +1 -0
  30. package/dist/account-layer/use-delete-sub-account.js +40 -0
  31. package/dist/account-layer/use-delete-sub-account.js.map +1 -0
  32. package/dist/account-layer/use-deposit-and-allocate.d.ts +27 -0
  33. package/dist/account-layer/use-deposit-and-allocate.d.ts.map +1 -0
  34. package/dist/account-layer/use-deposit-and-allocate.js +41 -0
  35. package/dist/account-layer/use-deposit-and-allocate.js.map +1 -0
  36. package/dist/account-layer/use-deposit.d.ts +27 -0
  37. package/dist/account-layer/use-deposit.d.ts.map +1 -0
  38. package/dist/account-layer/use-deposit.js +41 -0
  39. package/dist/account-layer/use-deposit.js.map +1 -0
  40. package/dist/account-layer/use-edit-account-name.d.ts +27 -0
  41. package/dist/account-layer/use-edit-account-name.d.ts.map +1 -0
  42. package/dist/account-layer/use-edit-account-name.js +40 -0
  43. package/dist/account-layer/use-edit-account-name.js.map +1 -0
  44. package/dist/account-layer/use-predicted-next-virtual-account.d.ts +38 -0
  45. package/dist/account-layer/use-predicted-next-virtual-account.d.ts.map +1 -0
  46. package/dist/account-layer/use-predicted-next-virtual-account.js +27 -0
  47. package/dist/account-layer/use-predicted-next-virtual-account.js.map +1 -0
  48. package/dist/account-layer/use-remove-margin.d.ts +43 -0
  49. package/dist/account-layer/use-remove-margin.d.ts.map +1 -0
  50. package/dist/account-layer/use-remove-margin.js +44 -0
  51. package/dist/account-layer/use-remove-margin.js.map +1 -0
  52. package/dist/account-layer/use-simulate-add-margin.d.ts +24 -0
  53. package/dist/account-layer/use-simulate-add-margin.d.ts.map +1 -0
  54. package/dist/account-layer/use-simulate-add-margin.js +29 -0
  55. package/dist/account-layer/use-simulate-add-margin.js.map +1 -0
  56. package/dist/account-layer/use-simulate-allocate.d.ts +25 -0
  57. package/dist/account-layer/use-simulate-allocate.d.ts.map +1 -0
  58. package/dist/account-layer/use-simulate-allocate.js +29 -0
  59. package/dist/account-layer/use-simulate-allocate.js.map +1 -0
  60. package/dist/account-layer/use-simulate-create-sub-accounts.d.ts +25 -0
  61. package/dist/account-layer/use-simulate-create-sub-accounts.d.ts.map +1 -0
  62. package/dist/account-layer/use-simulate-create-sub-accounts.js +29 -0
  63. package/dist/account-layer/use-simulate-create-sub-accounts.js.map +1 -0
  64. package/dist/account-layer/use-simulate-deallocate.d.ts +29 -0
  65. package/dist/account-layer/use-simulate-deallocate.d.ts.map +1 -0
  66. package/dist/account-layer/use-simulate-deallocate.js +29 -0
  67. package/dist/account-layer/use-simulate-deallocate.js.map +1 -0
  68. package/dist/account-layer/use-simulate-delete-sub-account.d.ts +25 -0
  69. package/dist/account-layer/use-simulate-delete-sub-account.d.ts.map +1 -0
  70. package/dist/account-layer/use-simulate-delete-sub-account.js +29 -0
  71. package/dist/account-layer/use-simulate-delete-sub-account.js.map +1 -0
  72. package/dist/account-layer/use-simulate-deposit-and-allocate.d.ts +25 -0
  73. package/dist/account-layer/use-simulate-deposit-and-allocate.d.ts.map +1 -0
  74. package/dist/account-layer/use-simulate-deposit-and-allocate.js +29 -0
  75. package/dist/account-layer/use-simulate-deposit-and-allocate.js.map +1 -0
  76. package/dist/account-layer/use-simulate-deposit.d.ts +25 -0
  77. package/dist/account-layer/use-simulate-deposit.d.ts.map +1 -0
  78. package/dist/account-layer/use-simulate-deposit.js +29 -0
  79. package/dist/account-layer/use-simulate-deposit.js.map +1 -0
  80. package/dist/account-layer/use-simulate-edit-account-name.d.ts +25 -0
  81. package/dist/account-layer/use-simulate-edit-account-name.d.ts.map +1 -0
  82. package/dist/account-layer/use-simulate-edit-account-name.js +29 -0
  83. package/dist/account-layer/use-simulate-edit-account-name.js.map +1 -0
  84. package/dist/account-layer/use-simulate-remove-margin.d.ts +30 -0
  85. package/dist/account-layer/use-simulate-remove-margin.d.ts.map +1 -0
  86. package/dist/account-layer/use-simulate-remove-margin.js +29 -0
  87. package/dist/account-layer/use-simulate-remove-margin.js.map +1 -0
  88. package/dist/account-layer/use-sub-account-virtual-nonce.d.ts +23 -0
  89. package/dist/account-layer/use-sub-account-virtual-nonce.d.ts.map +1 -0
  90. package/dist/account-layer/use-sub-account-virtual-nonce.js +27 -0
  91. package/dist/account-layer/use-sub-account-virtual-nonce.js.map +1 -0
  92. package/dist/account-layer/use-sub-account.d.ts +22 -0
  93. package/dist/account-layer/use-sub-account.d.ts.map +1 -0
  94. package/dist/account-layer/use-sub-account.js +27 -0
  95. package/dist/account-layer/use-sub-account.js.map +1 -0
  96. package/dist/account-layer/use-sub-accounts-count-of-user.d.ts +22 -0
  97. package/dist/account-layer/use-sub-accounts-count-of-user.d.ts.map +1 -0
  98. package/dist/account-layer/use-sub-accounts-count-of-user.js +27 -0
  99. package/dist/account-layer/use-sub-accounts-count-of-user.js.map +1 -0
  100. package/dist/account-layer/use-user-sub-accounts-addresses.d.ts +24 -0
  101. package/dist/account-layer/use-user-sub-accounts-addresses.d.ts.map +1 -0
  102. package/dist/account-layer/use-user-sub-accounts-addresses.js +27 -0
  103. package/dist/account-layer/use-user-sub-accounts-addresses.js.map +1 -0
  104. package/dist/account-layer/use-user-sub-accounts.d.ts +28 -0
  105. package/dist/account-layer/use-user-sub-accounts.d.ts.map +1 -0
  106. package/dist/account-layer/use-user-sub-accounts.js +27 -0
  107. package/dist/account-layer/use-user-sub-accounts.js.map +1 -0
  108. package/dist/account-layer/use-virtual-account.d.ts +35 -0
  109. package/dist/account-layer/use-virtual-account.d.ts.map +1 -0
  110. package/dist/account-layer/use-virtual-account.js +32 -0
  111. package/dist/account-layer/use-virtual-account.js.map +1 -0
  112. package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.d.ts +25 -0
  113. package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.d.ts.map +1 -0
  114. package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.js +27 -0
  115. package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.js.map +1 -0
  116. package/dist/balance-history/index.d.ts +4 -0
  117. package/dist/balance-history/index.d.ts.map +1 -0
  118. package/dist/balance-history/use-balance-history.d.ts +26 -0
  119. package/dist/balance-history/use-balance-history.d.ts.map +1 -0
  120. package/dist/balance-history/use-balance-history.js +27 -0
  121. package/dist/balance-history/use-balance-history.js.map +1 -0
  122. package/dist/balance-history/use-deposit-history.d.ts +19 -0
  123. package/dist/balance-history/use-deposit-history.d.ts.map +1 -0
  124. package/dist/balance-history/use-deposit-history.js +14 -0
  125. package/dist/balance-history/use-deposit-history.js.map +1 -0
  126. package/dist/balance-history/use-withdraw-history.d.ts +20 -0
  127. package/dist/balance-history/use-withdraw-history.d.ts.map +1 -0
  128. package/dist/balance-history/use-withdraw-history.js +14 -0
  129. package/dist/balance-history/use-withdraw-history.js.map +1 -0
  130. package/dist/collateral/index.d.ts +5 -0
  131. package/dist/collateral/index.d.ts.map +1 -0
  132. package/dist/collateral/use-approve-collateral.d.ts +27 -0
  133. package/dist/collateral/use-approve-collateral.d.ts.map +1 -0
  134. package/dist/collateral/use-approve-collateral.js +40 -0
  135. package/dist/collateral/use-approve-collateral.js.map +1 -0
  136. package/dist/collateral/use-collateral-allowance.d.ts +24 -0
  137. package/dist/collateral/use-collateral-allowance.d.ts.map +1 -0
  138. package/dist/collateral/use-collateral-allowance.js +27 -0
  139. package/dist/collateral/use-collateral-allowance.js.map +1 -0
  140. package/dist/collateral/use-collateral-balance.d.ts +22 -0
  141. package/dist/collateral/use-collateral-balance.d.ts.map +1 -0
  142. package/dist/collateral/use-collateral-balance.js +27 -0
  143. package/dist/collateral/use-collateral-balance.js.map +1 -0
  144. package/dist/collateral/use-simulate-approve-collateral.d.ts +26 -0
  145. package/dist/collateral/use-simulate-approve-collateral.d.ts.map +1 -0
  146. package/dist/collateral/use-simulate-approve-collateral.js +29 -0
  147. package/dist/collateral/use-simulate-approve-collateral.js.map +1 -0
  148. package/dist/error-codes/index.d.ts +3 -0
  149. package/dist/error-codes/index.d.ts.map +1 -0
  150. package/dist/error-codes/use-solver-error-codes.d.ts +27 -0
  151. package/dist/error-codes/use-solver-error-codes.d.ts.map +1 -0
  152. package/dist/error-codes/use-solver-error-codes.js +27 -0
  153. package/dist/error-codes/use-solver-error-codes.js.map +1 -0
  154. package/dist/error-codes/use-solver-error-message.d.ts +23 -0
  155. package/dist/error-codes/use-solver-error-message.d.ts.map +1 -0
  156. package/dist/error-codes/use-solver-error-message.js +11 -0
  157. package/dist/error-codes/use-solver-error-message.js.map +1 -0
  158. package/dist/errors/index.d.ts +4 -0
  159. package/dist/errors/index.d.ts.map +1 -0
  160. package/dist/errors/normalize-symm-error.d.ts +14 -0
  161. package/dist/errors/normalize-symm-error.d.ts.map +1 -0
  162. package/dist/errors/normalize-symm-error.js +86 -0
  163. package/dist/errors/normalize-symm-error.js.map +1 -0
  164. package/dist/errors/symmio-request-error.d.ts +54 -0
  165. package/dist/errors/symmio-request-error.d.ts.map +1 -0
  166. package/dist/errors/symmio-request-error.js +17 -0
  167. package/dist/errors/symmio-request-error.js.map +1 -0
  168. package/dist/errors/types.d.ts +21 -0
  169. package/dist/errors/types.d.ts.map +1 -0
  170. package/dist/fees/index.d.ts +2 -0
  171. package/dist/fees/index.d.ts.map +1 -0
  172. package/dist/fees/use-fee-for-user.d.ts +25 -0
  173. package/dist/fees/use-fee-for-user.d.ts.map +1 -0
  174. package/dist/fees/use-fee-for-user.js +27 -0
  175. package/dist/fees/use-fee-for-user.js.map +1 -0
  176. package/dist/index.d.ts +184 -0
  177. package/dist/index.d.ts.map +1 -0
  178. package/dist/index.js +122 -0
  179. package/dist/instant-layer/index.d.ts +14 -0
  180. package/dist/instant-layer/index.d.ts.map +1 -0
  181. package/dist/instant-layer/use-delegation-expiry.d.ts +22 -0
  182. package/dist/instant-layer/use-delegation-expiry.d.ts.map +1 -0
  183. package/dist/instant-layer/use-delegation-expiry.js +23 -0
  184. package/dist/instant-layer/use-delegation-expiry.js.map +1 -0
  185. package/dist/instant-layer/use-grant-delegation.d.ts +26 -0
  186. package/dist/instant-layer/use-grant-delegation.d.ts.map +1 -0
  187. package/dist/instant-layer/use-grant-delegation.js +38 -0
  188. package/dist/instant-layer/use-grant-delegation.js.map +1 -0
  189. package/dist/instant-layer/use-instant-close-auto.d.ts +29 -0
  190. package/dist/instant-layer/use-instant-close-auto.d.ts.map +1 -0
  191. package/dist/instant-layer/use-instant-close-auto.js +32 -0
  192. package/dist/instant-layer/use-instant-close-auto.js.map +1 -0
  193. package/dist/instant-layer/use-instant-close-bulk-auto.d.ts +26 -0
  194. package/dist/instant-layer/use-instant-close-bulk-auto.d.ts.map +1 -0
  195. package/dist/instant-layer/use-instant-close-bulk-auto.js +32 -0
  196. package/dist/instant-layer/use-instant-close-bulk-auto.js.map +1 -0
  197. package/dist/instant-layer/use-instant-close-bulk.d.ts +24 -0
  198. package/dist/instant-layer/use-instant-close-bulk.d.ts.map +1 -0
  199. package/dist/instant-layer/use-instant-close-bulk.js +32 -0
  200. package/dist/instant-layer/use-instant-close-bulk.js.map +1 -0
  201. package/dist/instant-layer/use-instant-close.d.ts +29 -0
  202. package/dist/instant-layer/use-instant-close.d.ts.map +1 -0
  203. package/dist/instant-layer/use-instant-close.js +32 -0
  204. package/dist/instant-layer/use-instant-close.js.map +1 -0
  205. package/dist/instant-layer/use-instant-closes.d.ts +25 -0
  206. package/dist/instant-layer/use-instant-closes.d.ts.map +1 -0
  207. package/dist/instant-layer/use-instant-closes.js +27 -0
  208. package/dist/instant-layer/use-instant-closes.js.map +1 -0
  209. package/dist/instant-layer/use-instant-open-auto.d.ts +31 -0
  210. package/dist/instant-layer/use-instant-open-auto.d.ts.map +1 -0
  211. package/dist/instant-layer/use-instant-open-auto.js +32 -0
  212. package/dist/instant-layer/use-instant-open-auto.js.map +1 -0
  213. package/dist/instant-layer/use-instant-open-quote-id.d.ts +28 -0
  214. package/dist/instant-layer/use-instant-open-quote-id.d.ts.map +1 -0
  215. package/dist/instant-layer/use-instant-open-quote-id.js +27 -0
  216. package/dist/instant-layer/use-instant-open-quote-id.js.map +1 -0
  217. package/dist/instant-layer/use-instant-open.d.ts +33 -0
  218. package/dist/instant-layer/use-instant-open.d.ts.map +1 -0
  219. package/dist/instant-layer/use-instant-open.js +32 -0
  220. package/dist/instant-layer/use-instant-open.js.map +1 -0
  221. package/dist/instant-layer/use-instant-opens.d.ts +25 -0
  222. package/dist/instant-layer/use-instant-opens.d.ts.map +1 -0
  223. package/dist/instant-layer/use-instant-opens.js +27 -0
  224. package/dist/instant-layer/use-instant-opens.js.map +1 -0
  225. package/dist/instant-layer/use-is-delegation-active.d.ts +22 -0
  226. package/dist/instant-layer/use-is-delegation-active.d.ts.map +1 -0
  227. package/dist/instant-layer/use-is-delegation-active.js +23 -0
  228. package/dist/instant-layer/use-is-delegation-active.js.map +1 -0
  229. package/dist/instant-layer/use-simulate-grant-delegation.d.ts +25 -0
  230. package/dist/instant-layer/use-simulate-grant-delegation.d.ts.map +1 -0
  231. package/dist/instant-layer/use-simulate-grant-delegation.js +29 -0
  232. package/dist/instant-layer/use-simulate-grant-delegation.js.map +1 -0
  233. package/dist/locked-params/index.d.ts +2 -0
  234. package/dist/locked-params/index.d.ts.map +1 -0
  235. package/dist/locked-params/use-locked-params.d.ts +23 -0
  236. package/dist/locked-params/use-locked-params.d.ts.map +1 -0
  237. package/dist/locked-params/use-locked-params.js +27 -0
  238. package/dist/locked-params/use-locked-params.js.map +1 -0
  239. package/dist/markets/index.d.ts +3 -0
  240. package/dist/markets/index.d.ts.map +1 -0
  241. package/dist/markets/use-markets.d.ts +26 -0
  242. package/dist/markets/use-markets.d.ts.map +1 -0
  243. package/dist/markets/use-markets.js +27 -0
  244. package/dist/markets/use-markets.js.map +1 -0
  245. package/dist/markets/use-onchain-contract-markets.d.ts +24 -0
  246. package/dist/markets/use-onchain-contract-markets.d.ts.map +1 -0
  247. package/dist/markets/use-onchain-contract-markets.js +27 -0
  248. package/dist/markets/use-onchain-contract-markets.js.map +1 -0
  249. package/dist/muon/index.d.ts +11 -0
  250. package/dist/muon/index.d.ts.map +1 -0
  251. package/dist/muon/use-deallocate-upnl-sig.d.ts +28 -0
  252. package/dist/muon/use-deallocate-upnl-sig.d.ts.map +1 -0
  253. package/dist/muon/use-deallocate-upnl-sig.js +27 -0
  254. package/dist/muon/use-deallocate-upnl-sig.js.map +1 -0
  255. package/dist/muon/use-muon-party-a-overview.d.ts +29 -0
  256. package/dist/muon/use-muon-party-a-overview.d.ts.map +1 -0
  257. package/dist/muon/use-muon-party-a-overview.js +27 -0
  258. package/dist/muon/use-muon-party-a-overview.js.map +1 -0
  259. package/dist/muon/use-muon-price-range.d.ts +35 -0
  260. package/dist/muon/use-muon-price-range.d.ts.map +1 -0
  261. package/dist/muon/use-muon-price-range.js +31 -0
  262. package/dist/muon/use-muon-price-range.js.map +1 -0
  263. package/dist/muon/use-muon-price.d.ts +28 -0
  264. package/dist/muon/use-muon-price.d.ts.map +1 -0
  265. package/dist/muon/use-muon-price.js +27 -0
  266. package/dist/muon/use-muon-price.js.map +1 -0
  267. package/dist/muon/use-muon-settle-upnl.d.ts +29 -0
  268. package/dist/muon/use-muon-settle-upnl.d.ts.map +1 -0
  269. package/dist/muon/use-muon-settle-upnl.js +28 -0
  270. package/dist/muon/use-muon-settle-upnl.js.map +1 -0
  271. package/dist/muon/use-muon-upnl-a-with-symbol-price.d.ts +29 -0
  272. package/dist/muon/use-muon-upnl-a-with-symbol-price.d.ts.map +1 -0
  273. package/dist/muon/use-muon-upnl-a-with-symbol-price.js +28 -0
  274. package/dist/muon/use-muon-upnl-a-with-symbol-price.js.map +1 -0
  275. package/dist/muon/use-muon-upnl-a.d.ts +28 -0
  276. package/dist/muon/use-muon-upnl-a.d.ts.map +1 -0
  277. package/dist/muon/use-muon-upnl-a.js +27 -0
  278. package/dist/muon/use-muon-upnl-a.js.map +1 -0
  279. package/dist/muon/use-muon-upnl-b.d.ts +29 -0
  280. package/dist/muon/use-muon-upnl-b.d.ts.map +1 -0
  281. package/dist/muon/use-muon-upnl-b.js +28 -0
  282. package/dist/muon/use-muon-upnl-b.js.map +1 -0
  283. package/dist/muon/use-muon-upnl-with-symbol-price.d.ts +28 -0
  284. package/dist/muon/use-muon-upnl-with-symbol-price.d.ts.map +1 -0
  285. package/dist/muon/use-muon-upnl-with-symbol-price.js +29 -0
  286. package/dist/muon/use-muon-upnl-with-symbol-price.js.map +1 -0
  287. package/dist/muon/use-muon-upnl.d.ts +28 -0
  288. package/dist/muon/use-muon-upnl.d.ts.map +1 -0
  289. package/dist/muon/use-muon-upnl.js +28 -0
  290. package/dist/muon/use-muon-upnl.js.map +1 -0
  291. package/dist/notifications/index.d.ts +2 -0
  292. package/dist/notifications/index.d.ts.map +1 -0
  293. package/dist/notifications/use-search-notifications.d.ts +29 -0
  294. package/dist/notifications/use-search-notifications.d.ts.map +1 -0
  295. package/dist/notifications/use-search-notifications.js +27 -0
  296. package/dist/notifications/use-search-notifications.js.map +1 -0
  297. package/dist/notional-cap/index.d.ts +4 -0
  298. package/dist/notional-cap/index.d.ts.map +1 -0
  299. package/dist/notional-cap/use-notional-cap-all.d.ts +32 -0
  300. package/dist/notional-cap/use-notional-cap-all.d.ts.map +1 -0
  301. package/dist/notional-cap/use-notional-cap-all.js +32 -0
  302. package/dist/notional-cap/use-notional-cap-all.js.map +1 -0
  303. package/dist/notional-cap/use-notional-cap-by-symbol-id.d.ts +36 -0
  304. package/dist/notional-cap/use-notional-cap-by-symbol-id.d.ts.map +1 -0
  305. package/dist/notional-cap/use-notional-cap-by-symbol-id.js +32 -0
  306. package/dist/notional-cap/use-notional-cap-by-symbol-id.js.map +1 -0
  307. package/dist/notional-cap/use-open-interest-by-symbol-id.d.ts +34 -0
  308. package/dist/notional-cap/use-open-interest-by-symbol-id.d.ts.map +1 -0
  309. package/dist/notional-cap/use-open-interest-by-symbol-id.js +32 -0
  310. package/dist/notional-cap/use-open-interest-by-symbol-id.js.map +1 -0
  311. package/dist/price-service/index.d.ts +9 -0
  312. package/dist/price-service/index.d.ts.map +1 -0
  313. package/dist/price-service/use-enigma-price-by-market-id.d.ts +42 -0
  314. package/dist/price-service/use-enigma-price-by-market-id.d.ts.map +1 -0
  315. package/dist/price-service/use-enigma-price-by-market-id.js +30 -0
  316. package/dist/price-service/use-enigma-price-by-market-id.js.map +1 -0
  317. package/dist/price-service/use-enigma-price-by-name.d.ts +41 -0
  318. package/dist/price-service/use-enigma-price-by-name.d.ts.map +1 -0
  319. package/dist/price-service/use-enigma-price-by-name.js +45 -0
  320. package/dist/price-service/use-enigma-price-by-name.js.map +1 -0
  321. package/dist/price-service/use-enigma-price-service-health.d.ts +20 -0
  322. package/dist/price-service/use-enigma-price-service-health.d.ts.map +1 -0
  323. package/dist/price-service/use-enigma-price-service-health.js +27 -0
  324. package/dist/price-service/use-enigma-price-service-health.js.map +1 -0
  325. package/dist/price-service/use-enigma-price-service-metadata.d.ts +20 -0
  326. package/dist/price-service/use-enigma-price-service-metadata.d.ts.map +1 -0
  327. package/dist/price-service/use-enigma-price-service-metadata.js +27 -0
  328. package/dist/price-service/use-enigma-price-service-metadata.js.map +1 -0
  329. package/dist/price-service/use-enigma-price-service-prices-by-addresses.d.ts +20 -0
  330. package/dist/price-service/use-enigma-price-service-prices-by-addresses.d.ts.map +1 -0
  331. package/dist/price-service/use-enigma-price-service-prices-by-addresses.js +27 -0
  332. package/dist/price-service/use-enigma-price-service-prices-by-addresses.js.map +1 -0
  333. package/dist/price-service/use-enigma-price-service-prices-by-names.d.ts +20 -0
  334. package/dist/price-service/use-enigma-price-service-prices-by-names.d.ts.map +1 -0
  335. package/dist/price-service/use-enigma-price-service-prices-by-names.js +27 -0
  336. package/dist/price-service/use-enigma-price-service-prices-by-names.js.map +1 -0
  337. package/dist/price-service/use-enigma-price-service-symbols-info.d.ts +20 -0
  338. package/dist/price-service/use-enigma-price-service-symbols-info.d.ts.map +1 -0
  339. package/dist/price-service/use-enigma-price-service-symbols-info.js +27 -0
  340. package/dist/price-service/use-enigma-price-service-symbols-info.js.map +1 -0
  341. package/dist/price-service/use-enigma-prices.d.ts +40 -0
  342. package/dist/price-service/use-enigma-prices.d.ts.map +1 -0
  343. package/dist/price-service/use-enigma-prices.js +47 -0
  344. package/dist/price-service/use-enigma-prices.js.map +1 -0
  345. package/dist/provider/index.d.ts +4 -0
  346. package/dist/provider/index.d.ts.map +1 -0
  347. package/dist/provider/symmio-config-context.d.ts +9 -0
  348. package/dist/provider/symmio-config-context.d.ts.map +1 -0
  349. package/dist/provider/symmio-config-context.js +8 -0
  350. package/dist/provider/symmio-config-context.js.map +1 -0
  351. package/dist/provider/symmio-provider.d.ts +49 -0
  352. package/dist/provider/symmio-provider.d.ts.map +1 -0
  353. package/dist/provider/symmio-provider.js +39 -0
  354. package/dist/provider/symmio-provider.js.map +1 -0
  355. package/dist/provider/use-symmio-chain-id.d.ts +14 -0
  356. package/dist/provider/use-symmio-chain-id.d.ts.map +1 -0
  357. package/dist/provider/use-symmio-chain-id.js +10 -0
  358. package/dist/provider/use-symmio-chain-id.js.map +1 -0
  359. package/dist/provider/use-symmio-config.d.ts +24 -0
  360. package/dist/provider/use-symmio-config.d.ts.map +1 -0
  361. package/dist/provider/use-symmio-config.js +13 -0
  362. package/dist/provider/use-symmio-config.js.map +1 -0
  363. package/dist/quotes/index.d.ts +16 -0
  364. package/dist/quotes/index.d.ts.map +1 -0
  365. package/dist/quotes/optimistic-quotes-store.d.ts +47 -0
  366. package/dist/quotes/optimistic-quotes-store.d.ts.map +1 -0
  367. package/dist/quotes/optimistic-quotes-store.js +27 -0
  368. package/dist/quotes/optimistic-quotes-store.js.map +1 -0
  369. package/dist/quotes/use-account-liquidation-price.d.ts +39 -0
  370. package/dist/quotes/use-account-liquidation-price.d.ts.map +1 -0
  371. package/dist/quotes/use-account-liquidation-price.js +57 -0
  372. package/dist/quotes/use-account-liquidation-price.js.map +1 -0
  373. package/dist/quotes/use-grouped-quotes.d.ts +55 -0
  374. package/dist/quotes/use-grouped-quotes.d.ts.map +1 -0
  375. package/dist/quotes/use-grouped-quotes.js +21 -0
  376. package/dist/quotes/use-grouped-quotes.js.map +1 -0
  377. package/dist/quotes/use-managed-quotes.d.ts +108 -0
  378. package/dist/quotes/use-managed-quotes.d.ts.map +1 -0
  379. package/dist/quotes/use-managed-quotes.js +314 -0
  380. package/dist/quotes/use-managed-quotes.js.map +1 -0
  381. package/dist/quotes/use-party-a-open-positions.d.ts +23 -0
  382. package/dist/quotes/use-party-a-open-positions.d.ts.map +1 -0
  383. package/dist/quotes/use-party-a-open-positions.js +27 -0
  384. package/dist/quotes/use-party-a-open-positions.js.map +1 -0
  385. package/dist/quotes/use-party-a-pending-quotes.d.ts +23 -0
  386. package/dist/quotes/use-party-a-pending-quotes.d.ts.map +1 -0
  387. package/dist/quotes/use-party-a-pending-quotes.js +27 -0
  388. package/dist/quotes/use-party-a-pending-quotes.js.map +1 -0
  389. package/dist/quotes/use-quote-events-by-type.d.ts +26 -0
  390. package/dist/quotes/use-quote-events-by-type.d.ts.map +1 -0
  391. package/dist/quotes/use-quote-events-by-type.js +27 -0
  392. package/dist/quotes/use-quote-events-by-type.js.map +1 -0
  393. package/dist/quotes/use-quote-funding.d.ts +35 -0
  394. package/dist/quotes/use-quote-funding.d.ts.map +1 -0
  395. package/dist/quotes/use-quote-funding.js +21 -0
  396. package/dist/quotes/use-quote-funding.js.map +1 -0
  397. package/dist/quotes/use-quote-history.d.ts +26 -0
  398. package/dist/quotes/use-quote-history.d.ts.map +1 -0
  399. package/dist/quotes/use-quote-history.js +27 -0
  400. package/dist/quotes/use-quote-history.js.map +1 -0
  401. package/dist/quotes/use-quote-platform-fee.d.ts +31 -0
  402. package/dist/quotes/use-quote-platform-fee.d.ts.map +1 -0
  403. package/dist/quotes/use-quote-platform-fee.js +31 -0
  404. package/dist/quotes/use-quote-platform-fee.js.map +1 -0
  405. package/dist/quotes/use-quote-price-history.d.ts +24 -0
  406. package/dist/quotes/use-quote-price-history.d.ts.map +1 -0
  407. package/dist/quotes/use-quote-price-history.js +14 -0
  408. package/dist/quotes/use-quote-price-history.js.map +1 -0
  409. package/dist/quotes/use-quote-upnl-and-pnl.d.ts +34 -0
  410. package/dist/quotes/use-quote-upnl-and-pnl.d.ts.map +1 -0
  411. package/dist/quotes/use-quote-upnl-and-pnl.js +61 -0
  412. package/dist/quotes/use-quote-upnl-and-pnl.js.map +1 -0
  413. package/dist/quotes/use-quote.d.ts +23 -0
  414. package/dist/quotes/use-quote.d.ts.map +1 -0
  415. package/dist/quotes/use-quote.js +27 -0
  416. package/dist/quotes/use-quote.js.map +1 -0
  417. package/dist/quotes/use-quotes-funding.d.ts +52 -0
  418. package/dist/quotes/use-quotes-funding.d.ts.map +1 -0
  419. package/dist/quotes/use-quotes-funding.js +80 -0
  420. package/dist/quotes/use-quotes-funding.js.map +1 -0
  421. package/dist/quotes/use-subgraph-query.d.ts +25 -0
  422. package/dist/quotes/use-subgraph-query.d.ts.map +1 -0
  423. package/dist/quotes/use-subgraph-query.js +27 -0
  424. package/dist/quotes/use-subgraph-query.js.map +1 -0
  425. package/dist/tpsl/index.d.ts +8 -0
  426. package/dist/tpsl/index.d.ts.map +1 -0
  427. package/dist/tpsl/to-quote-tpsl.d.ts +19 -0
  428. package/dist/tpsl/to-quote-tpsl.d.ts.map +1 -0
  429. package/dist/tpsl/to-quote-tpsl.js +46 -0
  430. package/dist/tpsl/to-quote-tpsl.js.map +1 -0
  431. package/dist/tpsl/tpsl-confirming.d.ts +36 -0
  432. package/dist/tpsl/tpsl-confirming.d.ts.map +1 -0
  433. package/dist/tpsl/tpsl-confirming.js +28 -0
  434. package/dist/tpsl/tpsl-confirming.js.map +1 -0
  435. package/dist/tpsl/use-quote-tpsl.d.ts +34 -0
  436. package/dist/tpsl/use-quote-tpsl.d.ts.map +1 -0
  437. package/dist/tpsl/use-quote-tpsl.js +73 -0
  438. package/dist/tpsl/use-quote-tpsl.js.map +1 -0
  439. package/dist/tpsl/use-set-quote-tpsl.d.ts +22 -0
  440. package/dist/tpsl/use-set-quote-tpsl.d.ts.map +1 -0
  441. package/dist/tpsl/use-set-quote-tpsl.js +43 -0
  442. package/dist/tpsl/use-set-quote-tpsl.js.map +1 -0
  443. package/dist/tpsl/use-tpsl-config.d.ts +14 -0
  444. package/dist/tpsl/use-tpsl-config.d.ts.map +1 -0
  445. package/dist/tpsl/use-tpsl-config.js +31 -0
  446. package/dist/tpsl/use-tpsl-config.js.map +1 -0
  447. package/dist/tpsl/use-tpsl-signing-spec.d.ts +13 -0
  448. package/dist/tpsl/use-tpsl-signing-spec.d.ts.map +1 -0
  449. package/dist/tpsl/use-tpsl-signing-spec.js +31 -0
  450. package/dist/tpsl/use-tpsl-signing-spec.js.map +1 -0
  451. package/dist/tpsl/use-watch-tpsl-notifications.d.ts +30 -0
  452. package/dist/tpsl/use-watch-tpsl-notifications.d.ts.map +1 -0
  453. package/dist/tpsl/use-watch-tpsl-notifications.js +44 -0
  454. package/dist/tpsl/use-watch-tpsl-notifications.js.map +1 -0
  455. package/dist/transactions/index.d.ts +4 -0
  456. package/dist/transactions/index.d.ts.map +1 -0
  457. package/dist/transactions/resolve-write-result.d.ts +40 -0
  458. package/dist/transactions/resolve-write-result.d.ts.map +1 -0
  459. package/dist/transactions/resolve-write-result.js +15 -0
  460. package/dist/transactions/resolve-write-result.js.map +1 -0
  461. package/dist/transactions/use-transactions-store.d.ts +52 -0
  462. package/dist/transactions/use-transactions-store.d.ts.map +1 -0
  463. package/dist/transactions/use-transactions-store.js +24 -0
  464. package/dist/transactions/use-transactions-store.js.map +1 -0
  465. package/dist/transactions/write-types.d.ts +28 -0
  466. package/dist/transactions/write-types.d.ts.map +1 -0
  467. package/dist/transfers/index.d.ts +2 -0
  468. package/dist/transfers/index.d.ts.map +1 -0
  469. package/dist/transfers/use-transfer-history.d.ts +26 -0
  470. package/dist/transfers/use-transfer-history.d.ts.map +1 -0
  471. package/dist/transfers/use-transfer-history.js +27 -0
  472. package/dist/transfers/use-transfer-history.js.map +1 -0
  473. package/dist/utils/index.d.ts +2 -0
  474. package/dist/utils/index.d.ts.map +1 -0
  475. package/dist/utils/predicate-match.d.ts +27 -0
  476. package/dist/utils/predicate-match.d.ts.map +1 -0
  477. package/dist/utils/predicate-match.js +18 -0
  478. package/dist/utils/predicate-match.js.map +1 -0
  479. package/dist/wallet/index.d.ts +5 -0
  480. package/dist/wallet/index.d.ts.map +1 -0
  481. package/dist/wallet/use-connect-wallet.d.ts +34 -0
  482. package/dist/wallet/use-connect-wallet.d.ts.map +1 -0
  483. package/dist/wallet/use-connect-wallet.js +24 -0
  484. package/dist/wallet/use-connect-wallet.js.map +1 -0
  485. package/dist/wallet/use-disconnect-wallet.d.ts +20 -0
  486. package/dist/wallet/use-disconnect-wallet.d.ts.map +1 -0
  487. package/dist/wallet/use-disconnect-wallet.js +21 -0
  488. package/dist/wallet/use-disconnect-wallet.js.map +1 -0
  489. package/dist/wallet/use-switch-to-symmio-chain.d.ts +29 -0
  490. package/dist/wallet/use-switch-to-symmio-chain.d.ts.map +1 -0
  491. package/dist/wallet/use-switch-to-symmio-chain.js +24 -0
  492. package/dist/wallet/use-switch-to-symmio-chain.js.map +1 -0
  493. package/dist/wallet/use-wallet-account.d.ts +32 -0
  494. package/dist/wallet/use-wallet-account.d.ts.map +1 -0
  495. package/dist/wallet/use-wallet-account.js +18 -0
  496. package/dist/wallet/use-wallet-account.js.map +1 -0
  497. package/dist/websocket/index.d.ts +2 -0
  498. package/dist/websocket/index.d.ts.map +1 -0
  499. package/dist/websocket/use-notifications.d.ts +48 -0
  500. package/dist/websocket/use-notifications.d.ts.map +1 -0
  501. package/dist/websocket/use-notifications.js +51 -0
  502. package/dist/websocket/use-notifications.js.map +1 -0
  503. package/dist/withdraw/index.d.ts +11 -0
  504. package/dist/withdraw/index.d.ts.map +1 -0
  505. package/dist/withdraw/use-finalize-withdraw-request.d.ts +26 -0
  506. package/dist/withdraw/use-finalize-withdraw-request.d.ts.map +1 -0
  507. package/dist/withdraw/use-finalize-withdraw-request.js +40 -0
  508. package/dist/withdraw/use-finalize-withdraw-request.js.map +1 -0
  509. package/dist/withdraw/use-initiate-withdraw.d.ts +28 -0
  510. package/dist/withdraw/use-initiate-withdraw.d.ts.map +1 -0
  511. package/dist/withdraw/use-initiate-withdraw.js +42 -0
  512. package/dist/withdraw/use-initiate-withdraw.js.map +1 -0
  513. package/dist/withdraw/use-last-withdraw-request-id.d.ts +22 -0
  514. package/dist/withdraw/use-last-withdraw-request-id.d.ts.map +1 -0
  515. package/dist/withdraw/use-last-withdraw-request-id.js +27 -0
  516. package/dist/withdraw/use-last-withdraw-request-id.js.map +1 -0
  517. package/dist/withdraw/use-pending-withdraw-requests.d.ts +21 -0
  518. package/dist/withdraw/use-pending-withdraw-requests.d.ts.map +1 -0
  519. package/dist/withdraw/use-pending-withdraw-requests.js +27 -0
  520. package/dist/withdraw/use-pending-withdraw-requests.js.map +1 -0
  521. package/dist/withdraw/use-request-cancel-withdraw.d.ts +25 -0
  522. package/dist/withdraw/use-request-cancel-withdraw.d.ts.map +1 -0
  523. package/dist/withdraw/use-request-cancel-withdraw.js +40 -0
  524. package/dist/withdraw/use-request-cancel-withdraw.js.map +1 -0
  525. package/dist/withdraw/use-simulate-finalize-withdraw-request.d.ts +25 -0
  526. package/dist/withdraw/use-simulate-finalize-withdraw-request.d.ts.map +1 -0
  527. package/dist/withdraw/use-simulate-finalize-withdraw-request.js +29 -0
  528. package/dist/withdraw/use-simulate-finalize-withdraw-request.js.map +1 -0
  529. package/dist/withdraw/use-simulate-initiate-withdraw.d.ts +26 -0
  530. package/dist/withdraw/use-simulate-initiate-withdraw.d.ts.map +1 -0
  531. package/dist/withdraw/use-simulate-initiate-withdraw.js +29 -0
  532. package/dist/withdraw/use-simulate-initiate-withdraw.js.map +1 -0
  533. package/dist/withdraw/use-simulate-request-cancel-withdraw.d.ts +25 -0
  534. package/dist/withdraw/use-simulate-request-cancel-withdraw.d.ts.map +1 -0
  535. package/dist/withdraw/use-simulate-request-cancel-withdraw.js +29 -0
  536. package/dist/withdraw/use-simulate-request-cancel-withdraw.js.map +1 -0
  537. package/dist/withdraw/use-withdraw-requests.d.ts +21 -0
  538. package/dist/withdraw/use-withdraw-requests.d.ts.map +1 -0
  539. package/dist/withdraw/use-withdraw-requests.js +27 -0
  540. package/dist/withdraw/use-withdraw-requests.js.map +1 -0
  541. package/dist/withdraw/use-withdrawable-time.d.ts +22 -0
  542. package/dist/withdraw/use-withdrawable-time.d.ts.map +1 -0
  543. package/dist/withdraw/use-withdrawable-time.js +27 -0
  544. package/dist/withdraw/use-withdrawable-time.js.map +1 -0
  545. package/package.json +112 -0
@@ -0,0 +1,55 @@
1
+ import { GroupQuotesOptions, QuoteGroup, QuoteGroupingStrategy, UnifiedQuote } from '@symmio/trading-core';
2
+ import { UseManagedQuotesParameters, UseManagedQuotesResult } from './use-managed-quotes';
3
+ /**
4
+ * Parameters for {@link useGroupedQuotes}. Everything {@link useManagedQuotes}
5
+ * accepts, plus how to fold the resulting positions into groups.
6
+ */
7
+ export interface UseGroupedQuotesParameters extends UseManagedQuotesParameters {
8
+ /**
9
+ * How to fold active positions into groups — a {@link SubAccountIsolationType}
10
+ * (the built-in strategies) or a custom `{ keyOf }`. Defaults to
11
+ * `MARKET_DIRECTION` (one group per market + side, the lowcap default).
12
+ *
13
+ * Passing a fresh `{ keyOf }` object every render recomputes the groups every
14
+ * render; memoize a custom strategy if that matters.
15
+ */
16
+ strategy?: QuoteGroupingStrategy;
17
+ /** Optional group-ordering override forwarded to `groupQuotes` (default newest-first). */
18
+ groupSort?: GroupQuotesOptions["sort"];
19
+ }
20
+ /**
21
+ * Value returned by {@link useGroupedQuotes} — the full {@link useManagedQuotes}
22
+ * result, plus the grouped positions and the flat pending orders.
23
+ */
24
+ export interface UseGroupedQuotesResult extends UseManagedQuotesResult {
25
+ /** Active positions folded into {@link QuoteGroup}s under `strategy`, newest-first. */
26
+ groups: QuoteGroup[];
27
+ /** Resting/pending limit orders, kept flat (never grouped). */
28
+ pending: UnifiedQuote[];
29
+ }
30
+ /**
31
+ * Managed quotes for one sub-account, folded into grouped positions.
32
+ *
33
+ * Reads every quote source via {@link useManagedQuotes}, splits the merged list
34
+ * into active positions and pending orders (`partitionQuotes`), then folds the
35
+ * positions into {@link QuoteGroup}s under the chosen `strategy` (`groupQuotes`).
36
+ * Pending limit orders are returned flat in `pending` — the grouped-positions vs
37
+ * open-orders split. The full flat list stays available on `quotes`.
38
+ *
39
+ * All grouping is pure and runs in a `useMemo`, so the heavy work is the
40
+ * underlying reads, not the fold.
41
+ *
42
+ * @param parameters - Managed-quotes parameters plus `strategy` / `groupSort`.
43
+ * @returns The managed-quotes result extended with `groups` and `pending`.
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * const { groups, pending, isLoading } = useGroupedQuotes({ partyA });
48
+ * // groups[0].metrics.openQuantity, groups[0].metrics.weightedOpenPrice, …
49
+ *
50
+ * // group by market instead of market + side:
51
+ * useGroupedQuotes({ partyA, strategy: SubAccountIsolationType.MARKET });
52
+ * ```
53
+ */
54
+ export declare function useGroupedQuotes(parameters: UseGroupedQuotesParameters): UseGroupedQuotesResult;
55
+ //# sourceMappingURL=use-grouped-quotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-grouped-quotes.d.ts","sourceRoot":"","sources":["../../src/quotes/use-grouped-quotes.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAoB,KAAK,0BAA0B,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEtH;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,0BAA0B;IAC5E;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,0FAA0F;IAC1F,SAAS,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,uFAAuF;IACvF,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,+DAA+D;IAC/D,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,0BAA0B,GAAG,sBAAsB,CAW/F"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { useManagedQuotes as e } from "./use-managed-quotes.js";
3
+ import { SubAccountIsolationType as t, groupQuotes as n, partitionQuotes as r } from "@symmio/trading-core";
4
+ import { useMemo as i } from "react";
5
+ //#region src/quotes/use-grouped-quotes.ts
6
+ function a(a) {
7
+ let { strategy: o = t.MARKET_DIRECTION, groupSort: s, ...c } = a, l = e(c), { positions: u, pending: d } = i(() => r(l.quotes), [l.quotes]), f = i(() => n(u, o, s ? { sort: s } : void 0), [
8
+ u,
9
+ o,
10
+ s
11
+ ]);
12
+ return {
13
+ ...l,
14
+ groups: f,
15
+ pending: d
16
+ };
17
+ }
18
+ //#endregion
19
+ export { a as useGroupedQuotes };
20
+
21
+ //# sourceMappingURL=use-grouped-quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-grouped-quotes.js","names":[],"sources":["../../src/quotes/use-grouped-quotes.ts"],"sourcesContent":["\"use client\";\n\nimport {\n groupQuotes,\n partitionQuotes,\n SubAccountIsolationType,\n type GroupQuotesOptions,\n type QuoteGroup,\n type QuoteGroupingStrategy,\n type UnifiedQuote,\n} from \"@symmio/trading-core\";\nimport { useMemo } from \"react\";\nimport { useManagedQuotes, type UseManagedQuotesParameters, type UseManagedQuotesResult } from \"./use-managed-quotes\";\n\n/**\n * Parameters for {@link useGroupedQuotes}. Everything {@link useManagedQuotes}\n * accepts, plus how to fold the resulting positions into groups.\n */\nexport interface UseGroupedQuotesParameters extends UseManagedQuotesParameters {\n /**\n * How to fold active positions into groups — a {@link SubAccountIsolationType}\n * (the built-in strategies) or a custom `{ keyOf }`. Defaults to\n * `MARKET_DIRECTION` (one group per market + side, the lowcap default).\n *\n * Passing a fresh `{ keyOf }` object every render recomputes the groups every\n * render; memoize a custom strategy if that matters.\n */\n strategy?: QuoteGroupingStrategy;\n /** Optional group-ordering override forwarded to `groupQuotes` (default newest-first). */\n groupSort?: GroupQuotesOptions[\"sort\"];\n}\n\n/**\n * Value returned by {@link useGroupedQuotes} — the full {@link useManagedQuotes}\n * result, plus the grouped positions and the flat pending orders.\n */\nexport interface UseGroupedQuotesResult extends UseManagedQuotesResult {\n /** Active positions folded into {@link QuoteGroup}s under `strategy`, newest-first. */\n groups: QuoteGroup[];\n /** Resting/pending limit orders, kept flat (never grouped). */\n pending: UnifiedQuote[];\n}\n\n/**\n * Managed quotes for one sub-account, folded into grouped positions.\n *\n * Reads every quote source via {@link useManagedQuotes}, splits the merged list\n * into active positions and pending orders (`partitionQuotes`), then folds the\n * positions into {@link QuoteGroup}s under the chosen `strategy` (`groupQuotes`).\n * Pending limit orders are returned flat in `pending` — the grouped-positions vs\n * open-orders split. The full flat list stays available on `quotes`.\n *\n * All grouping is pure and runs in a `useMemo`, so the heavy work is the\n * underlying reads, not the fold.\n *\n * @param parameters - Managed-quotes parameters plus `strategy` / `groupSort`.\n * @returns The managed-quotes result extended with `groups` and `pending`.\n *\n * @example\n * ```tsx\n * const { groups, pending, isLoading } = useGroupedQuotes({ partyA });\n * // groups[0].metrics.openQuantity, groups[0].metrics.weightedOpenPrice, …\n *\n * // group by market instead of market + side:\n * useGroupedQuotes({ partyA, strategy: SubAccountIsolationType.MARKET });\n * ```\n */\nexport function useGroupedQuotes(parameters: UseGroupedQuotesParameters): UseGroupedQuotesResult {\n const { strategy = SubAccountIsolationType.MARKET_DIRECTION, groupSort, ...managedParameters } = parameters;\n const managed = useManagedQuotes(managedParameters);\n\n const { positions, pending } = useMemo(() => partitionQuotes(managed.quotes), [managed.quotes]);\n const groups = useMemo(\n () => groupQuotes(positions, strategy, groupSort ? { sort: groupSort } : undefined),\n [positions, strategy, groupSort],\n );\n\n return { ...managed, groups, pending };\n}\n"],"mappings":";;;;;AAmEA,SAAgB,EAAiB,GAAgE;CAC/F,IAAM,EAAE,cAAW,EAAwB,kBAAkB,cAAW,GAAG,MAAsB,GAC3F,IAAU,EAAiB,CAAiB,GAE5C,EAAE,cAAW,eAAY,QAAc,EAAgB,EAAQ,MAAM,GAAG,CAAC,EAAQ,MAAM,CAAC,GACxF,IAAS,QACP,EAAY,GAAW,GAAU,IAAY,EAAE,MAAM,EAAU,IAAI,KAAA,CAAS,GAClF;EAAC;EAAW;EAAU;CAAS,CACjC;CAEA,OAAO;EAAE,GAAG;EAAS;EAAQ;CAAQ;AACvC"}
@@ -0,0 +1,108 @@
1
+ import { SocketStatus, UnifiedQuote } from '@symmio/trading-core';
2
+ import { Address } from 'viem';
3
+ import { SymmioRequestError } from '../errors/symmio-request-error';
4
+ /**
5
+ * Which underlying quote sources {@link useManagedQuotes} should read. Every
6
+ * source defaults to `true`; set one to `false` to skip its query/subscription
7
+ * entirely (e.g. a screen that never opens instant trades).
8
+ */
9
+ export interface ManagedQuotesSources {
10
+ /** Read on-chain open positions via `usePartyAOpenPositions`. Default `true`. */
11
+ openPositions?: boolean;
12
+ /** Read on-chain pending quote ids (hydrated per-id) via `usePartyAPendingQuotes`. Default `true`. */
13
+ pendingQuotes?: boolean;
14
+ /** Read pending instant-opens from the hedger via `useInstantOpens`. Default `true`. */
15
+ instantOpens?: boolean;
16
+ /** Read pending instant-closes from the hedger via `useInstantCloses`. Default `true`. */
17
+ instantCloses?: boolean;
18
+ }
19
+ /**
20
+ * Parameters for {@link useManagedQuotes}.
21
+ */
22
+ export interface UseManagedQuotesParameters {
23
+ /** Sub-account (partyA) to manage quotes for. The hook is idle until this is set. */
24
+ partyA?: Address;
25
+ /** Target chain id. Defaults to the connected chain. */
26
+ chainId?: number;
27
+ /**
28
+ * Opt-in idle polling cadence (ms). **Default off** — with `live` notifications the
29
+ * feature is events-first: it does not poll at idle, only (a) accelerates on-chain
30
+ * reads briefly while a row awaits on-chain confirmation (the RPC-lag retry), and
31
+ * (b) falls back to a baseline poll when the event channel is down. Set this to make
32
+ * it poll on a fixed cadence regardless (e.g. a live-inspector panel).
33
+ */
34
+ pollingInterval?: number;
35
+ /** Subscribe to the live notifications stream. Default `true`; set `false` for poll-only. */
36
+ live?: boolean;
37
+ /** Master switch. When `false` every source is idle regardless of `sources`. Default `true`. */
38
+ enabled?: boolean;
39
+ /**
40
+ * Union the sub-account's existing on-chain Virtual Accounts (VAs) — plus the
41
+ * predicted VAs of its pending instant-opens and any VAs seen on the
42
+ * notifications stream — into the on-chain reads. In lowcap each isolated
43
+ * position lives under a VA, so this is required to see the full picture.
44
+ * Default `true`.
45
+ */
46
+ includeVirtualAccounts?: boolean;
47
+ /** Extra accounts to read quotes across (e.g. VAs already known to the consumer). */
48
+ extraAccounts?: readonly Address[];
49
+ /** Per-source toggles; omit to read every source. */
50
+ sources?: ManagedQuotesSources;
51
+ }
52
+ /**
53
+ * Value returned by {@link useManagedQuotes}.
54
+ */
55
+ export interface UseManagedQuotesResult {
56
+ /** Merged, de-duplicated, lifecycle-tagged rows, newest first. */
57
+ quotes: UnifiedQuote[];
58
+ /** The same rows indexed by their stable {@link UnifiedQuote.key}. */
59
+ byKey: Record<string, UnifiedQuote>;
60
+ /** The on-chain `partyA` accounts the quotes were read across (sub-account + VAs + predicted + extras). */
61
+ accounts: Address[];
62
+ /** `true` while any enabled source has not produced its first result. */
63
+ isLoading: boolean;
64
+ /** `true` while any enabled source is fetching (background refetch included). */
65
+ isFetching: boolean;
66
+ /** Live connection status of the notifications socket (`"closed"` when `live` is off). */
67
+ socketStatus: SocketStatus;
68
+ /** The first error surfaced by any source, normalized, or `null`. */
69
+ error: SymmioRequestError | null;
70
+ /** Force every enabled source to refetch immediately. */
71
+ refetch: () => void;
72
+ }
73
+ /**
74
+ * Orchestrate every quote source for one sub-account — fanned out across every
75
+ * account that holds its positions — into a single, stable, lifecycle-tagged
76
+ * table.
77
+ *
78
+ * In lowcap, isolated positions live under Virtual Accounts (VAs), so a
79
+ * sub-account's quotes are spread across its VAs rather than the sub-account
80
+ * itself. This resolves the full account set — the sub-account, its existing
81
+ * VAs (`useVirtualAccountsAddressesOfSubAccount`), the predicted VAs of its
82
+ * pending instant-opens (`getPredictedNextVirtualAccount`), VAs seen on the
83
+ * notifications stream, and any `extraAccounts` — then reads
84
+ * `getPartyAOpenPositions` and `getPartyAPendingQuotes` (+ per-id `getQuote`
85
+ * hydration) across that set via `useQueries`. Off-chain hedger reads
86
+ * (`useInstantOpens` / `useInstantCloses`) stay scoped to the sub-account.
87
+ *
88
+ * Every source is gated by `sources`, `enabled`, and a set `partyA`, then their
89
+ * snapshots flow through the pure core `reconcileQuotes` ("active quotes only" —
90
+ * a quote shows iff it is in a source this tick), stamping each optimistic
91
+ * instant-open with its predicted VA via `instantOpenVaByTempId`. Live
92
+ * notifications (via `useNotifications`, unless `live` is `false`) are applied in
93
+ * the same merge. With `live` notifications the feature is **events-first**: it does
94
+ * not poll at idle, only accelerating the on-chain reads briefly while a row awaits
95
+ * on-chain confirmation (`shouldAccelerateOnchainReads`, the RPC-lag retry), and
96
+ * falling back to a baseline poll only when the event channel is down.
97
+ *
98
+ * Optimistic instant-opens seeded into {@link useOptimisticQuotesStore} are
99
+ * merged in as extra `instantOpens` so a just-submitted trade shows instantly,
100
+ * then cleared once the same `tempQuoteId` lands on-chain.
101
+ *
102
+ * @example
103
+ * ```tsx
104
+ * const { quotes, accounts, socketStatus, isLoading } = useManagedQuotes({ partyA });
105
+ * ```
106
+ */
107
+ export declare function useManagedQuotes(parameters: UseManagedQuotesParameters): UseManagedQuotesResult;
108
+ //# sourceMappingURL=use-managed-quotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-managed-quotes.d.ts","sourceRoot":"","sources":["../../src/quotes/use-managed-quotes.ts"],"names":[],"mappings":"AAEA,OAAO,EAkBL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAqDzE;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sGAAsG;IACtG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0FAA0F;IAC1F,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,qFAAqF;IACrF,aAAa,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpC,2GAA2G;IAC3G,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,UAAU,EAAE,OAAO,CAAC;IACpB,0FAA0F;IAC1F,YAAY,EAAE,YAAY,CAAC;IAC3B,qEAAqE;IACrE,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,yDAAyD;IACzD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,0BAA0B,GAAG,sBAAsB,CAkhB/F"}
@@ -0,0 +1,314 @@
1
+ "use client";
2
+ import { useSymmioChainId as e } from "../provider/use-symmio-chain-id.js";
3
+ import { useSymmioConfig as t } from "../provider/use-symmio-config.js";
4
+ import { normalizeSymmError as n } from "../errors/normalize-symm-error.js";
5
+ import { predicateMatch as r } from "../utils/predicate-match.js";
6
+ import { useVirtualAccountsAddressesOfSubAccount as i } from "../account-layer/use-virtual-accounts-addresses-of-sub-account.js";
7
+ import { useInstantCloses as a } from "../instant-layer/use-instant-closes.js";
8
+ import { useInstantOpens as ee } from "../instant-layer/use-instant-opens.js";
9
+ import { useOptimisticQuotesStore as te } from "./optimistic-quotes-store.js";
10
+ import { useNotifications as ne } from "../websocket/use-notifications.js";
11
+ import { QuoteLifecycle as o, classifyQuoteNotificationAction as re, getInstantClosesQueryKey as ie, getInstantOpensQueryKey as s, getPartyAOpenPositionsQueryKey as c, getPartyAOpenPositionsQueryOptions as ae, getPartyAPendingQuotesQueryKey as l, getPartyAPendingQuotesQueryOptions as oe, getPredictedNextVirtualAccountQueryOptions as se, getQuoteQueryKey as ce, getQuoteQueryOptions as le, isolationTypeForSide as ue, reconcileQuotes as de, shouldAccelerateOnchainReads as fe } from "@symmio/trading-core";
12
+ import { useCallback as pe, useEffect as u, useMemo as d, useRef as f, useState as me } from "react";
13
+ import { getAddress as p } from "viem";
14
+ import { useQueries as m, useQueryClient as he } from "@tanstack/react-query";
15
+ //#region src/quotes/use-managed-quotes.ts
16
+ var ge = 5e3, _e = 1500, ve = 100, ye = [], be = 250, xe = new Set([
17
+ o.OPTIMISTIC,
18
+ o.PRICE_FILLED,
19
+ o.WRITE_ONCHAIN
20
+ ]), Se = new Set([o.WRITE_ONCHAIN_CLOSE, o.CLOSING]);
21
+ function h(o) {
22
+ let { partyA: h, chainId: Ce, pollingInterval: g, live: _ = !0, enabled: we = !0 } = o, v = t(), Te = e(), y = Ce ?? Te, b = o.includeVirtualAccounts ?? !0, Ee = o.extraAccounts, x = o.sources, S = x?.openPositions ?? !0, C = x?.pendingQuotes ?? !0, w = x?.instantOpens ?? !0, T = x?.instantCloses ?? !0, E = we && !!h, D = E && h ? `${y}:${h.toLowerCase()}` : void 0, [O, De] = me({ vas: [] }), k = O.owner === D ? O.vas : ye, A = he(), j = f(A);
23
+ j.current = A;
24
+ let Oe = v.getChainConfigKey(y), M = f(Oe);
25
+ M.current = Oe;
26
+ let N = f(void 0), P = f({
27
+ opens: !1,
28
+ closes: !1
29
+ }), F = f(void 0), I = f([]), L = f("closed"), R = te((e) => e.entries), ke = te((e) => e.clearSettled), Ae = _ && L.current === "open", z = g && g > 0 ? g : !1, je = F.current ? fe(F.current) : !1, B = E ? je ? _e : Ae ? z : z || ge : !1, Me = F.current?.quotes, Ne = Me?.some((e) => xe.has(e.lifecycle)) ?? !1, Pe = Me?.some((e) => Se.has(e.lifecycle)) ?? !1, Fe = (e) => !Ae && e ? _e : z, Ie = E && w ? Fe(Ne) : !1, Le = E && T ? Fe(Pe) : !1, V = ee({
30
+ partyA: h,
31
+ chainId: y,
32
+ query: {
33
+ enabled: E && w,
34
+ refetchInterval: Ie
35
+ }
36
+ }), H = a({
37
+ partyA: h,
38
+ chainId: y,
39
+ query: {
40
+ enabled: E && T,
41
+ refetchInterval: Le
42
+ }
43
+ }), U = i({
44
+ subAccount: h,
45
+ chainId: y,
46
+ query: {
47
+ enabled: E && b,
48
+ refetchInterval: B
49
+ }
50
+ }), Re = w ? V.data ?? [] : [], W = m({
51
+ queries: Re.map((e) => ({ ...se(v, {
52
+ subAccount: h,
53
+ chainId: y,
54
+ isolationType: ue(e.positionType),
55
+ symbolId: BigInt(e.marketId),
56
+ query: {
57
+ enabled: E && b,
58
+ refetchInterval: B
59
+ }
60
+ }) })),
61
+ combine: (e) => ({
62
+ byTempId: Re.reduce((t, n, r) => {
63
+ let i = e[r]?.data;
64
+ return i && (t[n.tempQuoteId] = p(i)), t;
65
+ }, {}),
66
+ addresses: e.map((e) => e.data).filter((e) => !!e),
67
+ isLoading: e.some((e) => e.isLoading),
68
+ isFetching: e.some((e) => e.isFetching)
69
+ })
70
+ }), [G, ze] = me([]), { status: K } = ne({
71
+ account: h,
72
+ chainId: y,
73
+ enabled: E && _,
74
+ onNotification: pe((e) => {
75
+ ze((t) => [...t, e].slice(-ve));
76
+ let t = re(e.lastSeenAction), n = P.current;
77
+ t === "open" ? n.opens = !0 : (t === "close" || (n.opens = !0), n.closes = !0), N.current && clearTimeout(N.current), N.current = setTimeout(() => {
78
+ let e = j.current, t = { configKey: M.current }, { opens: n, closes: i } = P.current;
79
+ P.current = {
80
+ opens: !1,
81
+ closes: !1
82
+ }, e.invalidateQueries({ predicate: r(c, t) }), e.invalidateQueries({ predicate: r(l, t) }), e.invalidateQueries({ predicate: r(ce, t) }), n && e.invalidateQueries({ predicate: r(s, t) }), i && e.invalidateQueries({ predicate: r(ie, t) });
83
+ }, be);
84
+ }, [])
85
+ });
86
+ L.current = K;
87
+ let Be = f(!1);
88
+ u(() => {
89
+ if (!(!_ || K !== "open")) {
90
+ if (Be.current) {
91
+ let e = j.current, t = { configKey: M.current };
92
+ e.invalidateQueries({ predicate: r(c, t) }), e.invalidateQueries({ predicate: r(l, t) }), e.invalidateQueries({ predicate: r(ce, t) }), e.invalidateQueries({ predicate: r(s, t) }), e.invalidateQueries({ predicate: r(ie, t) });
93
+ }
94
+ Be.current = !0;
95
+ }
96
+ }, [K, _]), u(() => () => {
97
+ N.current && clearTimeout(N.current);
98
+ }, []);
99
+ let q = d(() => {
100
+ let e = /* @__PURE__ */ new Set(), t = [];
101
+ for (let n of G) {
102
+ if (!n.vaAddress) continue;
103
+ let r = p(n.vaAddress), i = r.toLowerCase();
104
+ e.has(i) || (e.add(i), t.push(r));
105
+ }
106
+ return t;
107
+ }, [G]), J = d(() => {
108
+ if (!E || !h) return [];
109
+ let e = /* @__PURE__ */ new Set(), t = [], n = (n) => {
110
+ let r = p(n), i = r.toLowerCase();
111
+ e.has(i) || (e.add(i), t.push(r));
112
+ };
113
+ if (n(h), b) {
114
+ for (let e of U.data ?? []) n(e);
115
+ for (let e of W.addresses) n(e);
116
+ for (let e of q) n(e);
117
+ for (let e of k) n(e);
118
+ }
119
+ for (let e of Ee ?? []) n(e);
120
+ return t;
121
+ }, [
122
+ E,
123
+ h,
124
+ b,
125
+ U.data,
126
+ W.addresses,
127
+ q,
128
+ k,
129
+ Ee
130
+ ]);
131
+ u(() => {
132
+ if (!D) return;
133
+ let e = [
134
+ ...U.data ?? [],
135
+ ...W.addresses,
136
+ ...q
137
+ ];
138
+ De((t) => {
139
+ let n = t.owner === D ? t.vas : [], r = new Set(n.map((e) => e.toLowerCase())), i = [...n], a = t.owner !== D;
140
+ for (let t of e) {
141
+ let e = p(t), n = e.toLowerCase();
142
+ r.has(n) || (r.add(n), i.push(e), a = !0);
143
+ }
144
+ return a ? {
145
+ owner: D,
146
+ vas: i
147
+ } : t;
148
+ });
149
+ }, [
150
+ D,
151
+ U.data,
152
+ W.addresses,
153
+ q
154
+ ]);
155
+ let Y = m({
156
+ queries: J.map((e) => {
157
+ let t = ae(v, {
158
+ partyA: e,
159
+ chainId: y,
160
+ query: {
161
+ enabled: E && S,
162
+ refetchInterval: B
163
+ }
164
+ });
165
+ return {
166
+ ...t,
167
+ queryFn: async () => {
168
+ try {
169
+ return await t.queryFn();
170
+ } catch (e) {
171
+ throw n(e);
172
+ }
173
+ }
174
+ };
175
+ }),
176
+ combine: (e) => ({
177
+ quotes: e.flatMap((e) => e.data ?? []),
178
+ isLoading: e.some((e) => e.isLoading),
179
+ isFetching: e.some((e) => e.isFetching),
180
+ error: e.find((e) => e.error)?.error ?? null,
181
+ refetch: () => e.forEach((e) => e.refetch())
182
+ })
183
+ }), X = m({
184
+ queries: J.map((e) => {
185
+ let t = oe(v, {
186
+ partyA: e,
187
+ chainId: y,
188
+ query: {
189
+ enabled: E && C,
190
+ refetchInterval: B
191
+ }
192
+ });
193
+ return {
194
+ ...t,
195
+ queryFn: async () => {
196
+ try {
197
+ return await t.queryFn();
198
+ } catch (e) {
199
+ throw n(e);
200
+ }
201
+ }
202
+ };
203
+ }),
204
+ combine: (e) => ({
205
+ ids: e.flatMap((e) => e.data ?? []),
206
+ isLoading: e.some((e) => e.isLoading),
207
+ isFetching: e.some((e) => e.isFetching),
208
+ error: e.find((e) => e.error)?.error ?? null,
209
+ refetch: () => e.forEach((e) => e.refetch())
210
+ })
211
+ }), Z = m({
212
+ queries: X.ids.map((e) => {
213
+ let t = le(v, {
214
+ quoteId: e,
215
+ chainId: y,
216
+ query: {
217
+ enabled: E && C,
218
+ refetchInterval: B
219
+ }
220
+ });
221
+ return {
222
+ ...t,
223
+ queryFn: async () => {
224
+ try {
225
+ return await t.queryFn();
226
+ } catch (e) {
227
+ throw n(e);
228
+ }
229
+ }
230
+ };
231
+ }),
232
+ combine: (e) => ({
233
+ quotes: e.map((e) => e.data).filter((e) => !!e),
234
+ isLoading: e.some((e) => e.isLoading),
235
+ isFetching: e.some((e) => e.isFetching),
236
+ error: e.find((e) => e.error)?.error ?? null
237
+ })
238
+ }), Q = d(() => {
239
+ if (!E || !h) return F.current = void 0, I.current = [], {
240
+ quotes: [],
241
+ links: {},
242
+ pendingAnchors: []
243
+ };
244
+ let e = [...V.data ?? [], ...Object.values(R)], t = de({
245
+ partyA: h,
246
+ onchainPositions: S ? Y.quotes : [],
247
+ onchainPendingQuotes: C ? Z.quotes : [],
248
+ instantOpens: w ? e : [],
249
+ instantCloses: T ? H.data ?? [] : [],
250
+ instantOpenVaByTempId: W.byTempId,
251
+ notifications: G,
252
+ retainedAnchors: I.current
253
+ });
254
+ return F.current = t, I.current = t.pendingAnchors, t;
255
+ }, [
256
+ E,
257
+ h,
258
+ Y.quotes,
259
+ Z.quotes,
260
+ V.data,
261
+ H.data,
262
+ W.byTempId,
263
+ R,
264
+ G,
265
+ S,
266
+ C,
267
+ w,
268
+ T
269
+ ]), $ = d(() => {
270
+ let e = {};
271
+ for (let t of Q.quotes) e[t.key] = t;
272
+ return e;
273
+ }, [Q.quotes]);
274
+ u(() => {
275
+ let e = Object.keys(R).map(Number).filter((e) => {
276
+ let t = Q.links[e];
277
+ return t !== void 0 && $[t]?.raw.onchain !== void 0;
278
+ });
279
+ e.length > 0 && ke(e);
280
+ }, [
281
+ Q,
282
+ $,
283
+ R,
284
+ ke
285
+ ]);
286
+ let Ve = E && b && U.isLoading || E && b && W.isLoading || E && S && Y.isLoading || E && C && (X.isLoading || Z.isLoading) || E && w && V.isLoading || E && T && H.isLoading, He = b && (U.isFetching || W.isFetching) || S && Y.isFetching || C && (X.isFetching || Z.isFetching) || w && V.isFetching || T && H.isFetching, Ue = Y.error ?? X.error ?? Z.error ?? U.error ?? V.error ?? H.error ?? null, We = Y.refetch, Ge = X.refetch, Ke = pe(() => {
287
+ b && U.refetch(), S && We(), C && Ge(), w && V.refetch(), T && H.refetch();
288
+ }, [
289
+ b,
290
+ S,
291
+ C,
292
+ w,
293
+ T,
294
+ U,
295
+ We,
296
+ Ge,
297
+ V,
298
+ H
299
+ ]);
300
+ return {
301
+ quotes: Q.quotes,
302
+ byKey: $,
303
+ accounts: J,
304
+ isLoading: !!Ve,
305
+ isFetching: !!He,
306
+ socketStatus: _ ? K : "closed",
307
+ error: Ue,
308
+ refetch: Ke
309
+ };
310
+ }
311
+ //#endregion
312
+ export { h as useManagedQuotes };
313
+
314
+ //# sourceMappingURL=use-managed-quotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-managed-quotes.js","names":[],"sources":["../../src/quotes/use-managed-quotes.ts"],"sourcesContent":["\"use client\";\n\nimport {\n classifyQuoteNotificationAction,\n getInstantClosesQueryKey,\n getInstantOpensQueryKey,\n getPartyAOpenPositionsQueryKey,\n getPartyAOpenPositionsQueryOptions,\n getPartyAPendingQuotesQueryKey,\n getPartyAPendingQuotesQueryOptions,\n getPredictedNextVirtualAccountQueryOptions,\n getQuoteQueryKey,\n getQuoteQueryOptions,\n isolationTypeForSide,\n QuoteLifecycle,\n reconcileQuotes,\n shouldAccelerateOnchainReads,\n type Notification,\n type Quote,\n type ReconcileQuotesResult,\n type SocketStatus,\n type UnifiedQuote,\n} from \"@symmio/trading-core\";\nimport { useQueries, useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { getAddress, type Address } from \"viem\";\nimport { useVirtualAccountsAddressesOfSubAccount } from \"../account-layer/use-virtual-accounts-addresses-of-sub-account\";\nimport { normalizeSymmError } from \"../errors/normalize-symm-error\";\nimport type { SymmioRequestError } from \"../errors/symmio-request-error\";\nimport { useInstantCloses } from \"../instant-layer/use-instant-closes\";\nimport { useInstantOpens } from \"../instant-layer/use-instant-opens\";\nimport { useSymmioChainId } from \"../provider/use-symmio-chain-id\";\nimport { useSymmioConfig } from \"../provider/use-symmio-config\";\nimport { predicateMatch } from \"../utils\";\nimport { useNotifications } from \"../websocket/use-notifications\";\nimport { useOptimisticQuotesStore } from \"./optimistic-quotes-store\";\n\n/**\n * Baseline poll interval (ms) used **only as a fallback** when the live event channel\n * is unavailable (`live` is off, or the notifications socket is not `open`). With the\n * socket up the feature is events-first: there is no idle on-chain poll unless the\n * consumer opts into one via `pollingInterval`.\n */\nconst FALLBACK_POLLING_INTERVAL = 5_000;\n\n/** Accelerated quote-polling interval (ms) while a row is mid-transition. */\nconst ACCELERATED_POLLING_INTERVAL = 1_500;\n\n/**\n * Cap on the live-notification buffer fed back into the merge. Reconciliation is\n * idempotent over already-applied notifications, so only a recent window is kept\n * to bound memory and reprocessing.\n *\n * TODO: check this and packages/trading-react/src/quotes/use-managed-quotes.ts#L188-L206\n */\nconst NOTIFICATION_BUFFER_LIMIT = 100;\n\n/** Stable empty array so the `accounts` memo doesn't churn while no VAs are retained. */\nconst NO_RETAINED_VAS: readonly Address[] = [];\n\n/** Debounce (ms) for coalescing a burst of notifications into one set of read invalidations. */\nconst NOTIFICATION_INVALIDATE_DEBOUNCE = 250;\n\n/**\n * Lifecycle stages that mean an open is in flight, so the hedger instant-opens\n * feed is worth polling. Outside these stages the feed has nothing new (a\n * settled position is tracked by the on-chain reads), so polling it is wasted.\n */\nconst OPEN_INTENT_LIFECYCLES = new Set<QuoteLifecycle>([\n QuoteLifecycle.OPTIMISTIC,\n QuoteLifecycle.PRICE_FILLED,\n QuoteLifecycle.WRITE_ONCHAIN,\n]);\n\n/**\n * Lifecycle stages that mean a close is in flight, so the hedger instant-closes\n * feed is worth polling. Outside these stages there is no pending close, so\n * polling the feed (merely holding open positions) is wasted.\n */\nconst CLOSE_INTENT_LIFECYCLES = new Set<QuoteLifecycle>([QuoteLifecycle.WRITE_ONCHAIN_CLOSE, QuoteLifecycle.CLOSING]);\n\n/**\n * Which underlying quote sources {@link useManagedQuotes} should read. Every\n * source defaults to `true`; set one to `false` to skip its query/subscription\n * entirely (e.g. a screen that never opens instant trades).\n */\nexport interface ManagedQuotesSources {\n /** Read on-chain open positions via `usePartyAOpenPositions`. Default `true`. */\n openPositions?: boolean;\n /** Read on-chain pending quote ids (hydrated per-id) via `usePartyAPendingQuotes`. Default `true`. */\n pendingQuotes?: boolean;\n /** Read pending instant-opens from the hedger via `useInstantOpens`. Default `true`. */\n instantOpens?: boolean;\n /** Read pending instant-closes from the hedger via `useInstantCloses`. Default `true`. */\n instantCloses?: boolean;\n}\n\n/**\n * Parameters for {@link useManagedQuotes}.\n */\nexport interface UseManagedQuotesParameters {\n /** Sub-account (partyA) to manage quotes for. The hook is idle until this is set. */\n partyA?: Address;\n /** Target chain id. Defaults to the connected chain. */\n chainId?: number;\n /**\n * Opt-in idle polling cadence (ms). **Default off** — with `live` notifications the\n * feature is events-first: it does not poll at idle, only (a) accelerates on-chain\n * reads briefly while a row awaits on-chain confirmation (the RPC-lag retry), and\n * (b) falls back to a baseline poll when the event channel is down. Set this to make\n * it poll on a fixed cadence regardless (e.g. a live-inspector panel).\n */\n pollingInterval?: number;\n /** Subscribe to the live notifications stream. Default `true`; set `false` for poll-only. */\n live?: boolean;\n /** Master switch. When `false` every source is idle regardless of `sources`. Default `true`. */\n enabled?: boolean;\n /**\n * Union the sub-account's existing on-chain Virtual Accounts (VAs) — plus the\n * predicted VAs of its pending instant-opens and any VAs seen on the\n * notifications stream — into the on-chain reads. In lowcap each isolated\n * position lives under a VA, so this is required to see the full picture.\n * Default `true`.\n */\n includeVirtualAccounts?: boolean;\n /** Extra accounts to read quotes across (e.g. VAs already known to the consumer). */\n extraAccounts?: readonly Address[];\n /** Per-source toggles; omit to read every source. */\n sources?: ManagedQuotesSources;\n}\n\n/**\n * Value returned by {@link useManagedQuotes}.\n */\nexport interface UseManagedQuotesResult {\n /** Merged, de-duplicated, lifecycle-tagged rows, newest first. */\n quotes: UnifiedQuote[];\n /** The same rows indexed by their stable {@link UnifiedQuote.key}. */\n byKey: Record<string, UnifiedQuote>;\n /** The on-chain `partyA` accounts the quotes were read across (sub-account + VAs + predicted + extras). */\n accounts: Address[];\n /** `true` while any enabled source has not produced its first result. */\n isLoading: boolean;\n /** `true` while any enabled source is fetching (background refetch included). */\n isFetching: boolean;\n /** Live connection status of the notifications socket (`\"closed\"` when `live` is off). */\n socketStatus: SocketStatus;\n /** The first error surfaced by any source, normalized, or `null`. */\n error: SymmioRequestError | null;\n /** Force every enabled source to refetch immediately. */\n refetch: () => void;\n}\n\n/**\n * Orchestrate every quote source for one sub-account — fanned out across every\n * account that holds its positions — into a single, stable, lifecycle-tagged\n * table.\n *\n * In lowcap, isolated positions live under Virtual Accounts (VAs), so a\n * sub-account's quotes are spread across its VAs rather than the sub-account\n * itself. This resolves the full account set — the sub-account, its existing\n * VAs (`useVirtualAccountsAddressesOfSubAccount`), the predicted VAs of its\n * pending instant-opens (`getPredictedNextVirtualAccount`), VAs seen on the\n * notifications stream, and any `extraAccounts` — then reads\n * `getPartyAOpenPositions` and `getPartyAPendingQuotes` (+ per-id `getQuote`\n * hydration) across that set via `useQueries`. Off-chain hedger reads\n * (`useInstantOpens` / `useInstantCloses`) stay scoped to the sub-account.\n *\n * Every source is gated by `sources`, `enabled`, and a set `partyA`, then their\n * snapshots flow through the pure core `reconcileQuotes` (\"active quotes only\" —\n * a quote shows iff it is in a source this tick), stamping each optimistic\n * instant-open with its predicted VA via `instantOpenVaByTempId`. Live\n * notifications (via `useNotifications`, unless `live` is `false`) are applied in\n * the same merge. With `live` notifications the feature is **events-first**: it does\n * not poll at idle, only accelerating the on-chain reads briefly while a row awaits\n * on-chain confirmation (`shouldAccelerateOnchainReads`, the RPC-lag retry), and\n * falling back to a baseline poll only when the event channel is down.\n *\n * Optimistic instant-opens seeded into {@link useOptimisticQuotesStore} are\n * merged in as extra `instantOpens` so a just-submitted trade shows instantly,\n * then cleared once the same `tempQuoteId` lands on-chain.\n *\n * @example\n * ```tsx\n * const { quotes, accounts, socketStatus, isLoading } = useManagedQuotes({ partyA });\n * ```\n */\nexport function useManagedQuotes(parameters: UseManagedQuotesParameters): UseManagedQuotesResult {\n const { partyA, chainId, pollingInterval, live = true, enabled = true } = parameters;\n const config = useSymmioConfig();\n const defaultChainId = useSymmioChainId();\n const resolvedChainId = chainId ?? defaultChainId;\n const includeVirtualAccounts = parameters.includeVirtualAccounts ?? true;\n const extraAccounts = parameters.extraAccounts;\n const sources = parameters.sources;\n const wantOpenPositions = sources?.openPositions ?? true;\n const wantPendingQuotes = sources?.pendingQuotes ?? true;\n const wantInstantOpens = sources?.instantOpens ?? true;\n const wantInstantCloses = sources?.instantCloses ?? true;\n const active = enabled && Boolean(partyA);\n\n /**\n * Identity of the current account set's owner. VA retention (below) is scoped\n * to this `(chainId, partyA)` so switching sub-accounts never carries another\n * account's VAs into the read set.\n */\n const retentionOwner = active && partyA ? `${resolvedChainId}:${partyA.toLowerCase()}` : undefined;\n\n /**\n * VAs retained across the optimistic→on-chain hand-off. A predicted VA leaves\n * `predictedVas` the instant its instant-open lands on-chain (the hedger drops\n * the pending open), while `getVirtualAccountsAddressesOfSubAccount` and the\n * notification `va_address` can lag a poll behind — so without retention we'd\n * stop polling the exact VA the position just landed in, and the row would\n * vanish for a tick before reappearing as its `ONCHAIN` twin. VAs are\n * append-only on-chain, so once discovered we keep reading them while the owner\n * is unchanged. See reference-va-address-resolution in agent memory.\n */\n const [retained, setRetained] = useState<{ owner?: string; vas: Address[] }>({ vas: [] });\n const retainedVas = retained.owner === retentionOwner ? retained.vas : NO_RETAINED_VAS;\n\n /**\n * Notification-driven invalidation. Reads are kept in sync off the live\n * notifications stream — not polling — so the feature works with polling off.\n * `queryClient` and the cache scope (`configKey`) are mirrored into refs so the\n * `onNotification` callback below can stay referentially stable (a new callback\n * identity would resubscribe the socket). The debounce timer coalesces a burst\n * of notifications into one invalidation pass.\n */\n const queryClient = useQueryClient();\n const queryClientRef = useRef(queryClient);\n queryClientRef.current = queryClient;\n const configKey = config.getChainConfigKey(resolvedChainId);\n const configKeyRef = useRef(configKey);\n configKeyRef.current = configKey;\n const invalidateTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n /**\n * Which hedger feeds a debounced notification burst should invalidate. A burst\n * can mix open and close events, so the kinds are accumulated here across the\n * debounce window and read (then reset) when the timer fires — scoping the\n * invalidation to the feeds the events can actually affect.\n */\n const pendingInvalidationRef = useRef<{ opens: boolean; closes: boolean }>({ opens: false, closes: false });\n\n /**\n * Last reconciliation result, kept in a ref so it survives renders without\n * triggering one. Its only remaining job is to feed\n * {@link shouldAccelerateOnchainReads} (and the feed-intent gates) the previous\n * tick's result, since the source queries set their `refetchInterval` before this\n * render's result exists. (\"Active quotes only\" dropped the grace window, and\n * `links` are recomputed fresh on each merge.)\n */\n const previousRef = useRef<ReconcileQuotesResult | undefined>(undefined);\n\n /**\n * Rows anchored on a prior tick (a notification set their `quoteId`) but not yet\n * returned by the on-chain read — the previous merge's `pendingAnchors`. Fed back\n * into {@link reconcileQuotes} so an anchored row keeps showing while the RPC\n * catches up, instead of vanishing once the hedger drops its pending open. Held in\n * a ref so it survives renders without triggering one; the source query that\n * dropped the row drives the recompute that reads it.\n */\n const retainedAnchorsRef = useRef<UnifiedQuote[]>([]);\n\n /**\n * Last tick's socket status, read one render behind (like `previousRef`) to decide\n * whether the live event channel is up. Updated right after `useNotifications` below.\n * When the channel is live the feature is events-first (no idle poll); when it is\n * down we fall back to polling so state still advances without notifications.\n */\n const socketStatusRef = useRef<SocketStatus>(\"closed\");\n\n const optimisticEntries = useOptimisticQuotesStore((state) => state.entries);\n const clearSettled = useOptimisticQuotesStore((state) => state.clearSettled);\n\n /** Live event channel = subscribed (`live`) and the socket was `open` last render. */\n const eventChannelLive = live && socketStatusRef.current === \"open\";\n /** Consumer's opt-in idle cadence (off by default). */\n const idleInterval = pollingInterval && pollingInterval > 0 ? pollingInterval : false;\n\n /**\n * On-chain reads accelerate to {@link ACCELERATED_POLLING_INTERVAL} **only** while a\n * row awaits on-chain confirmation (`WRITE_ONCHAIN` / `WRITE_ONCHAIN_CLOSE` /\n * `CLOSING`) — the RPC-lag retry. Otherwise: no idle poll when the event channel is\n * live (events drive updates) unless the consumer opted into `idleInterval`; a\n * baseline fallback when the channel is down so state still progresses. Read from the\n * previous result because the queries set their interval before this render's result\n * exists (an on-chain poll / notification re-render advances it a tick later).\n */\n const accelerateOnchain = previousRef.current ? shouldAccelerateOnchainReads(previousRef.current) : false;\n const onchainIdleInterval = eventChannelLive ? idleInterval : idleInterval || FALLBACK_POLLING_INTERVAL;\n const refetchInterval = active ? (accelerateOnchain ? ACCELERATED_POLLING_INTERVAL : onchainIdleInterval) : false;\n\n /**\n * Hedger feeds are event-driven while the channel is live: the open/close mutation\n * invalidates the matching feed once and the notifications advance the stage, so they\n * do not poll (unless the consumer opted into `idleInterval`). When the channel is\n * down they poll while the matching flow is in flight, to track it without\n * notifications. `hasOpenIntent` / `hasCloseIntent` come from the previous tick.\n */\n const previousQuotes = previousRef.current?.quotes;\n const hasOpenIntent = previousQuotes?.some((quote) => OPEN_INTENT_LIFECYCLES.has(quote.lifecycle)) ?? false;\n const hasCloseIntent = previousQuotes?.some((quote) => CLOSE_INTENT_LIFECYCLES.has(quote.lifecycle)) ?? false;\n const feedInterval = (hasIntent: boolean) =>\n !eventChannelLive && hasIntent ? ACCELERATED_POLLING_INTERVAL : idleInterval;\n const instantOpensInterval = active && wantInstantOpens ? feedInterval(hasOpenIntent) : false;\n const instantClosesInterval = active && wantInstantCloses ? feedInterval(hasCloseIntent) : false;\n\n /**\n * Off-chain hedger reads — always scoped to the sub-account, never the VAs. Kept\n * `enabled` so a mutation's `onSuccess` invalidation can fetch them on demand, but\n * polled only while the matching flow is in flight (see the interval gates above).\n */\n const instantOpens = useInstantOpens({\n partyA: partyA as Address,\n chainId: resolvedChainId,\n query: { enabled: active && wantInstantOpens, refetchInterval: instantOpensInterval },\n });\n\n const instantCloses = useInstantCloses({\n partyA: partyA as Address,\n chainId: resolvedChainId,\n query: { enabled: active && wantInstantCloses, refetchInterval: instantClosesInterval },\n });\n\n /** The sub-account's existing on-chain VAs. Empty (harmless) when `partyA` is itself a VA. */\n const virtualAccounts = useVirtualAccountsAddressesOfSubAccount({\n subAccount: partyA,\n chainId: resolvedChainId,\n query: { enabled: active && includeVirtualAccounts, refetchInterval },\n });\n\n /**\n * Brand-new-VA bridge: a position can open in a market the sub-account has\n * never traded, landing in a freshly created VA that is not yet in\n * `getVirtualAccountsAddressesOfSubAccount`. The predicted VA below covers it\n * while the instant-open is pending; once it lands on-chain the hedger drops the\n * open and the prediction with it, so VA retention (`retained`, above) keeps the\n * VA in the poll set across the hand-off — the row transitions to `ONCHAIN` in\n * place instead of flickering out and back.\n */\n\n /**\n * Predict the VA each pending instant-open will land in. The set of opens is\n * dynamic, but `useQueries` over a dynamic array is allowed — the hook count\n * stays one regardless of length.\n */\n const pendingOpens = wantInstantOpens ? (instantOpens.data ?? []) : [];\n const predictedVas = useQueries({\n queries: pendingOpens.map((open) => ({\n ...getPredictedNextVirtualAccountQueryOptions(config, {\n subAccount: partyA,\n chainId: resolvedChainId,\n isolationType: isolationTypeForSide(open.positionType),\n symbolId: BigInt(open.marketId),\n query: { enabled: active && includeVirtualAccounts, refetchInterval },\n }),\n })),\n combine: (results) => ({\n byTempId: pendingOpens.reduce<Record<number, Address>>((map, open, index) => {\n const predicted = results[index]?.data;\n if (predicted) map[open.tempQuoteId] = getAddress(predicted);\n return map;\n }, {}),\n addresses: results.map((result) => result.data).filter((address): address is Address => Boolean(address)),\n isLoading: results.some((result) => result.isLoading),\n isFetching: results.some((result) => result.isFetching),\n }),\n });\n\n const [notifications, setNotifications] = useState<Notification[]>([]);\n const { status: socketStatus } = useNotifications({\n account: partyA,\n chainId: resolvedChainId,\n enabled: active && live,\n onNotification: useCallback((notification: Notification) => {\n setNotifications((prev) => [...prev, notification].slice(-NOTIFICATION_BUFFER_LIMIT));\n /**\n * Refetch the authoritative reads off the live event so both tables stay in\n * sync without polling. The on-chain reads always refresh (any lifecycle event\n * can change them); the hedger feeds refresh only for the matching flow, so an\n * open event never re-fetches the closes feed and vice versa. Kinds are\n * accumulated across the debounce window because a burst can mix open and close\n * events. Scoped to this chain (`configKey`); React Query dedups concurrent\n * refetches of the same query.\n */\n const kind = classifyQuoteNotificationAction(notification.lastSeenAction);\n const pending = pendingInvalidationRef.current;\n if (kind === \"open\") pending.opens = true;\n else if (kind === \"close\") pending.closes = true;\n else {\n pending.opens = true;\n pending.closes = true;\n }\n if (invalidateTimerRef.current) clearTimeout(invalidateTimerRef.current);\n invalidateTimerRef.current = setTimeout(() => {\n const client = queryClientRef.current;\n const scope = { configKey: configKeyRef.current };\n const { opens, closes } = pendingInvalidationRef.current;\n pendingInvalidationRef.current = { opens: false, closes: false };\n void client.invalidateQueries({ predicate: predicateMatch(getPartyAOpenPositionsQueryKey, scope) });\n void client.invalidateQueries({ predicate: predicateMatch(getPartyAPendingQuotesQueryKey, scope) });\n void client.invalidateQueries({ predicate: predicateMatch(getQuoteQueryKey, scope) });\n if (opens) void client.invalidateQueries({ predicate: predicateMatch(getInstantOpensQueryKey, scope) });\n if (closes) void client.invalidateQueries({ predicate: predicateMatch(getInstantClosesQueryKey, scope) });\n }, NOTIFICATION_INVALIDATE_DEBOUNCE);\n }, []),\n });\n\n /** Mirror the live socket status into the ref the interval gating reads next render. */\n socketStatusRef.current = socketStatus;\n\n /**\n * One-shot re-sync when the notifications socket **reconnects**. The stream does not\n * replay messages missed while it was down, so on a re-`open` we invalidate the reads\n * once to catch up — this replaces a continuous fallback poll. The first connect is\n * skipped (the queries already fetched on mount).\n */\n const hasBeenOpenRef = useRef(false);\n useEffect(() => {\n if (!live || socketStatus !== \"open\") return;\n if (hasBeenOpenRef.current) {\n const client = queryClientRef.current;\n const scope = { configKey: configKeyRef.current };\n void client.invalidateQueries({ predicate: predicateMatch(getPartyAOpenPositionsQueryKey, scope) });\n void client.invalidateQueries({ predicate: predicateMatch(getPartyAPendingQuotesQueryKey, scope) });\n void client.invalidateQueries({ predicate: predicateMatch(getQuoteQueryKey, scope) });\n void client.invalidateQueries({ predicate: predicateMatch(getInstantOpensQueryKey, scope) });\n void client.invalidateQueries({ predicate: predicateMatch(getInstantClosesQueryKey, scope) });\n }\n hasBeenOpenRef.current = true;\n }, [socketStatus, live]);\n\n /** Clear the pending invalidation timer on unmount. */\n useEffect(() => {\n return () => {\n if (invalidateTimerRef.current) clearTimeout(invalidateTimerRef.current);\n };\n }, []);\n\n /** Distinct VA addresses seen on the notifications stream. */\n const notificationVas = useMemo<Address[]>(() => {\n const seen = new Set<string>();\n const result: Address[] = [];\n for (const notification of notifications) {\n if (!notification.vaAddress) continue;\n const checksummed = getAddress(notification.vaAddress);\n const lower = checksummed.toLowerCase();\n if (seen.has(lower)) continue;\n seen.add(lower);\n result.push(checksummed);\n }\n return result;\n }, [notifications]);\n\n /**\n * The deduplicated (case-insensitive), checksummed set of on-chain accounts to\n * read quotes across — the sub-account, its VAs, the predicted VAs, the\n * notification VAs, and any extras. Order: sub-account first, then the rest.\n */\n const accounts = useMemo<Address[]>(() => {\n if (!active || !partyA) return [];\n const seen = new Set<string>();\n const result: Address[] = [];\n const add = (address: Address) => {\n const checksummed = getAddress(address);\n const lower = checksummed.toLowerCase();\n if (seen.has(lower)) return;\n seen.add(lower);\n result.push(checksummed);\n };\n add(partyA);\n if (includeVirtualAccounts) {\n for (const virtualAccount of virtualAccounts.data ?? []) add(virtualAccount);\n for (const predicted of predictedVas.addresses) add(predicted);\n for (const notificationVa of notificationVas) add(notificationVa);\n for (const retainedVa of retainedVas) add(retainedVa);\n }\n for (const extra of extraAccounts ?? []) add(extra);\n return result;\n }, [\n active,\n partyA,\n includeVirtualAccounts,\n virtualAccounts.data,\n predictedVas.addresses,\n notificationVas,\n retainedVas,\n extraAccounts,\n ]);\n\n /**\n * Accumulate every VA we discover (list + predicted + notification) into the\n * retained set so none ever leaves the poll set mid-hand-off. Monotonic per\n * owner; resets when the owner `(chainId, partyA)` changes. Setting state only\n * when something new appears keeps this from looping.\n */\n useEffect(() => {\n if (!retentionOwner) return;\n const discovered = [...(virtualAccounts.data ?? []), ...predictedVas.addresses, ...notificationVas];\n setRetained((prev) => {\n const carryOver = prev.owner === retentionOwner ? prev.vas : [];\n const seen = new Set(carryOver.map((address) => address.toLowerCase()));\n const next = [...carryOver];\n let changed = prev.owner !== retentionOwner;\n for (const va of discovered) {\n const checksummed = getAddress(va);\n const lower = checksummed.toLowerCase();\n if (seen.has(lower)) continue;\n seen.add(lower);\n next.push(checksummed);\n changed = true;\n }\n return changed ? { owner: retentionOwner, vas: next } : prev;\n });\n }, [retentionOwner, virtualAccounts.data, predictedVas.addresses, notificationVas]);\n\n /** On-chain open positions, fanned out across every account, flattened to one `Quote[]`. */\n const openPositions = useQueries({\n queries: accounts.map((account) => {\n const options = getPartyAOpenPositionsQueryOptions(config, {\n partyA: account,\n chainId: resolvedChainId,\n query: { enabled: active && wantOpenPositions, refetchInterval },\n });\n return {\n ...options,\n queryFn: async () => {\n try {\n return await options.queryFn();\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n };\n }),\n combine: (results) => ({\n quotes: results.flatMap((result) => result.data ?? []),\n isLoading: results.some((result) => result.isLoading),\n isFetching: results.some((result) => result.isFetching),\n error: (results.find((result) => result.error)?.error as SymmioRequestError | undefined) ?? null,\n refetch: () => results.forEach((result) => result.refetch()),\n }),\n });\n /** Pending quote ids, fanned out across every account, then hydrated per id. */\n const pendingQuoteIds = useQueries({\n queries: accounts.map((account) => {\n const options = getPartyAPendingQuotesQueryOptions(config, {\n partyA: account,\n chainId: resolvedChainId,\n query: { enabled: active && wantPendingQuotes, refetchInterval },\n });\n return {\n ...options,\n queryFn: async () => {\n try {\n return await options.queryFn();\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n };\n }),\n combine: (results) => ({\n ids: results.flatMap((result) => result.data ?? []),\n isLoading: results.some((result) => result.isLoading),\n isFetching: results.some((result) => result.isFetching),\n error: (results.find((result) => result.error)?.error as SymmioRequestError | undefined) ?? null,\n refetch: () => results.forEach((result) => result.refetch()),\n }),\n });\n\n const hydratedPending = useQueries({\n queries: pendingQuoteIds.ids.map((quoteId) => {\n const options = getQuoteQueryOptions(config, {\n quoteId,\n chainId: resolvedChainId,\n query: { enabled: active && wantPendingQuotes, refetchInterval },\n });\n return {\n ...options,\n queryFn: async () => {\n try {\n return await options.queryFn();\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n };\n }),\n combine: (results) => ({\n quotes: results.map((result) => result.data).filter((quote): quote is Quote => Boolean(quote)),\n isLoading: results.some((result) => result.isLoading),\n isFetching: results.some((result) => result.isFetching),\n error: (results.find((result) => result.error)?.error as SymmioRequestError | undefined) ?? null,\n }),\n });\n\n const result = useMemo<ReconcileQuotesResult>(() => {\n if (!active || !partyA) {\n previousRef.current = undefined;\n retainedAnchorsRef.current = [];\n return { quotes: [], links: {}, pendingAnchors: [] };\n }\n const seededInstantOpens = [...(instantOpens.data ?? []), ...Object.values(optimisticEntries)];\n const next = reconcileQuotes({\n partyA,\n onchainPositions: wantOpenPositions ? openPositions.quotes : [],\n onchainPendingQuotes: wantPendingQuotes ? hydratedPending.quotes : [],\n instantOpens: wantInstantOpens ? seededInstantOpens : [],\n instantCloses: wantInstantCloses ? (instantCloses.data ?? []) : [],\n instantOpenVaByTempId: predictedVas.byTempId,\n notifications,\n retainedAnchors: retainedAnchorsRef.current,\n });\n previousRef.current = next;\n retainedAnchorsRef.current = next.pendingAnchors;\n return next;\n }, [\n active,\n partyA,\n openPositions.quotes,\n hydratedPending.quotes,\n instantOpens.data,\n instantCloses.data,\n predictedVas.byTempId,\n optimisticEntries,\n notifications,\n wantOpenPositions,\n wantPendingQuotes,\n wantInstantOpens,\n wantInstantCloses,\n ]);\n\n const byKey = useMemo<Record<string, UnifiedQuote>>(() => {\n const map: Record<string, UnifiedQuote> = {};\n for (const quote of result.quotes) map[quote.key] = quote;\n return map;\n }, [result.quotes]);\n\n /**\n * Drop optimistic seeds once their `tempQuoteId` has been **confirmed by the\n * on-chain read** — the linked row carries the polled struct (`raw.onchain`).\n * Clearing on the notification link alone would drop the seed while the row is\n * still `WRITE_ONCHAIN`, before any source but the notification holds it, so the\n * row would flicker out until the RPC catches up.\n */\n useEffect(() => {\n const settled = Object.keys(optimisticEntries)\n .map(Number)\n .filter((tempQuoteId) => {\n const key = result.links[tempQuoteId];\n return key !== undefined && byKey[key]?.raw.onchain !== undefined;\n });\n if (settled.length > 0) clearSettled(settled);\n }, [result, byKey, optimisticEntries, clearSettled]);\n\n const isLoading =\n (active && includeVirtualAccounts && virtualAccounts.isLoading) ||\n (active && includeVirtualAccounts && predictedVas.isLoading) ||\n (active && wantOpenPositions && openPositions.isLoading) ||\n (active && wantPendingQuotes && (pendingQuoteIds.isLoading || hydratedPending.isLoading)) ||\n (active && wantInstantOpens && instantOpens.isLoading) ||\n (active && wantInstantCloses && instantCloses.isLoading);\n\n const isFetching =\n (includeVirtualAccounts && (virtualAccounts.isFetching || predictedVas.isFetching)) ||\n (wantOpenPositions && openPositions.isFetching) ||\n (wantPendingQuotes && (pendingQuoteIds.isFetching || hydratedPending.isFetching)) ||\n (wantInstantOpens && instantOpens.isFetching) ||\n (wantInstantCloses && instantCloses.isFetching);\n\n const error =\n openPositions.error ??\n pendingQuoteIds.error ??\n hydratedPending.error ??\n virtualAccounts.error ??\n instantOpens.error ??\n instantCloses.error ??\n null;\n\n /**\n * `openPositions` / `pendingQuoteIds` are `useQueries` fan-outs (no single\n * query handle), so their combined results expose a `refetch` that fires every\n * per-account query. Refetching the ids re-drives the per-id hydration.\n */\n const refetchOpenPositions = openPositions.refetch;\n const refetchPendingQuoteIds = pendingQuoteIds.refetch;\n const refetch = useCallback(() => {\n if (includeVirtualAccounts) virtualAccounts.refetch();\n if (wantOpenPositions) refetchOpenPositions();\n if (wantPendingQuotes) refetchPendingQuoteIds();\n if (wantInstantOpens) instantOpens.refetch();\n if (wantInstantCloses) instantCloses.refetch();\n }, [\n includeVirtualAccounts,\n wantOpenPositions,\n wantPendingQuotes,\n wantInstantOpens,\n wantInstantCloses,\n virtualAccounts,\n refetchOpenPositions,\n refetchPendingQuoteIds,\n instantOpens,\n instantCloses,\n ]);\n\n return {\n quotes: result.quotes,\n byKey,\n accounts,\n isLoading: Boolean(isLoading),\n isFetching: Boolean(isFetching),\n socketStatus: live ? socketStatus : \"closed\",\n error,\n refetch,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ConfigParameter, GetPartyAOpenPositionsOptions, GetPartyAOpenPositionsReturnType } from '@symmio/trading-core';
2
+ import { UseQueryResult } from '@tanstack/react-query';
3
+ import { SymmioRequestError } from '../errors/symmio-request-error';
4
+ /**
5
+ * Parameters for {@link usePartyAOpenPositions}: the core query options (partyA,
6
+ * pagination, chain id, TanStack `query` overrides) plus an optional `config`.
7
+ */
8
+ export type UsePartyAOpenPositionsParameters = GetPartyAOpenPositionsOptions & ConfigParameter;
9
+ /** Return type of {@link usePartyAOpenPositions}. */
10
+ export type UsePartyAOpenPositionsReturnType = UseQueryResult<GetPartyAOpenPositionsReturnType, SymmioRequestError>;
11
+ /**
12
+ * Read a partyA's open positions (full `Quote` structs) from the SYMMIO core.
13
+ * `partyA` is a SubAccount (Majors) or Virtual Account (VibeCaps). The query is
14
+ * disabled until `partyA` is set. `chainId` defaults to the connected chain.
15
+ * Errors are normalized to {@link SymmioRequestError}.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * const { data: positions, isLoading } = usePartyAOpenPositions({ partyA: "0xva…" });
20
+ * ```
21
+ */
22
+ export declare function usePartyAOpenPositions(parameters?: UsePartyAOpenPositionsParameters): UsePartyAOpenPositionsReturnType;
23
+ //# sourceMappingURL=use-party-a-open-positions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-party-a-open-positions.d.ts","sourceRoot":"","sources":["../../src/quotes/use-party-a-open-positions.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,6BAA6B,EAClC,KAAK,gCAAgC,EACtC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIzE;;;GAGG;AACH,MAAM,MAAM,gCAAgC,GAAG,6BAA6B,GAAG,eAAe,CAAC;AAE/F,qDAAqD;AACrD,MAAM,MAAM,gCAAgC,GAAG,cAAc,CAAC,gCAAgC,EAAE,kBAAkB,CAAC,CAAC;AAEpH;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,GAAE,gCAAqC,GAChD,gCAAgC,CAkBlC"}