@symmio/trading-react 1.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) hide show
  1. package/dist/account-layer/index.d.ts +1 -0
  2. package/dist/account-layer/index.d.ts.map +1 -1
  3. package/dist/account-layer/index.js +26 -25
  4. package/dist/account-layer/use-deallocate-and-initiate-withdraw.d.ts +53 -0
  5. package/dist/account-layer/use-deallocate-and-initiate-withdraw.d.ts.map +1 -0
  6. package/dist/account-layer/use-deallocate-and-initiate-withdraw.js +49 -0
  7. package/dist/account-layer/use-deallocate-and-initiate-withdraw.js.map +1 -0
  8. package/dist/account-layer/use-deposit-and-allocate.d.ts +4 -2
  9. package/dist/account-layer/use-deposit-and-allocate.d.ts.map +1 -1
  10. package/dist/account-layer/use-deposit-and-allocate.js +17 -15
  11. package/dist/account-layer/use-deposit-and-allocate.js.map +1 -1
  12. package/dist/account-layer/use-edit-account-name.d.ts.map +1 -1
  13. package/dist/account-layer/use-edit-account-name.js +14 -14
  14. package/dist/account-layer/use-edit-account-name.js.map +1 -1
  15. package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.d.ts +1 -1
  16. package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.js.map +1 -1
  17. package/dist/candles/index.d.ts +5 -0
  18. package/dist/candles/index.d.ts.map +1 -0
  19. package/dist/candles/index.js +5 -0
  20. package/dist/candles/use-binance-candle-source.d.ts +27 -0
  21. package/dist/candles/use-binance-candle-source.d.ts.map +1 -0
  22. package/dist/candles/use-binance-candle-source.js +24 -0
  23. package/dist/candles/use-binance-candle-source.js.map +1 -0
  24. package/dist/candles/use-candle-stream.d.ts +65 -0
  25. package/dist/candles/use-candle-stream.d.ts.map +1 -0
  26. package/dist/candles/use-candle-stream.js +44 -0
  27. package/dist/candles/use-candle-stream.js.map +1 -0
  28. package/dist/candles/use-candles.d.ts +40 -0
  29. package/dist/candles/use-candles.d.ts.map +1 -0
  30. package/dist/candles/use-candles.js +22 -0
  31. package/dist/candles/use-candles.js.map +1 -0
  32. package/dist/candles/use-tradingview-datafeed.d.ts +31 -0
  33. package/dist/candles/use-tradingview-datafeed.d.ts.map +1 -0
  34. package/dist/candles/use-tradingview-datafeed.js +21 -0
  35. package/dist/candles/use-tradingview-datafeed.js.map +1 -0
  36. package/dist/index.d.ts +125 -21
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +201 -113
  39. package/dist/instant-layer/index.d.ts +4 -0
  40. package/dist/instant-layer/index.d.ts.map +1 -1
  41. package/dist/instant-layer/index.js +10 -6
  42. package/dist/instant-layer/use-instant-close-auto.d.ts.map +1 -1
  43. package/dist/instant-layer/use-instant-close-auto.js +12 -11
  44. package/dist/instant-layer/use-instant-close-auto.js.map +1 -1
  45. package/dist/instant-layer/use-instant-close-bulk-auto.d.ts.map +1 -1
  46. package/dist/instant-layer/use-instant-close-bulk-auto.js +12 -11
  47. package/dist/instant-layer/use-instant-close-bulk-auto.js.map +1 -1
  48. package/dist/instant-layer/use-instant-close-bulk.d.ts.map +1 -1
  49. package/dist/instant-layer/use-instant-close-bulk.js +12 -11
  50. package/dist/instant-layer/use-instant-close-bulk.js.map +1 -1
  51. package/dist/instant-layer/use-instant-close.d.ts.map +1 -1
  52. package/dist/instant-layer/use-instant-close.js +12 -11
  53. package/dist/instant-layer/use-instant-close.js.map +1 -1
  54. package/dist/instant-layer/use-instant-open-auto.d.ts.map +1 -1
  55. package/dist/instant-layer/use-instant-open-auto.js +12 -11
  56. package/dist/instant-layer/use-instant-open-auto.js.map +1 -1
  57. package/dist/instant-layer/use-instant-open-fees.d.ts +43 -0
  58. package/dist/instant-layer/use-instant-open-fees.d.ts.map +1 -0
  59. package/dist/instant-layer/use-instant-open-fees.js +111 -0
  60. package/dist/instant-layer/use-instant-open-fees.js.map +1 -0
  61. package/dist/instant-layer/use-instant-open-with-tpsl.d.ts.map +1 -1
  62. package/dist/instant-layer/use-instant-open-with-tpsl.js +34 -31
  63. package/dist/instant-layer/use-instant-open-with-tpsl.js.map +1 -1
  64. package/dist/instant-layer/use-instant-open.d.ts +23 -18
  65. package/dist/instant-layer/use-instant-open.d.ts.map +1 -1
  66. package/dist/instant-layer/use-instant-open.js +12 -11
  67. package/dist/instant-layer/use-instant-open.js.map +1 -1
  68. package/dist/instant-layer/use-instant-opens.d.ts +6 -6
  69. package/dist/instant-layer/use-instant-opens.d.ts.map +1 -1
  70. package/dist/instant-layer/use-instant-opens.js.map +1 -1
  71. package/dist/instant-layer/use-instant-trade-required-selectors.d.ts +25 -0
  72. package/dist/instant-layer/use-instant-trade-required-selectors.d.ts.map +1 -0
  73. package/dist/instant-layer/use-instant-trade-required-selectors.js +13 -0
  74. package/dist/instant-layer/use-instant-trade-required-selectors.js.map +1 -0
  75. package/dist/instant-layer/use-limit-close-auto.d.ts +30 -0
  76. package/dist/instant-layer/use-limit-close-auto.d.ts.map +1 -0
  77. package/dist/instant-layer/use-limit-close-auto.js +33 -0
  78. package/dist/instant-layer/use-limit-close-auto.js.map +1 -0
  79. package/dist/instant-layer/use-limit-open-auto.d.ts +30 -0
  80. package/dist/instant-layer/use-limit-open-auto.d.ts.map +1 -0
  81. package/dist/instant-layer/use-limit-open-auto.js +33 -0
  82. package/dist/instant-layer/use-limit-open-auto.js.map +1 -0
  83. package/dist/inventory/index.d.ts +3 -0
  84. package/dist/inventory/index.d.ts.map +1 -0
  85. package/dist/inventory/index.js +3 -0
  86. package/dist/inventory/use-inventory-tvl-history.d.ts +27 -0
  87. package/dist/inventory/use-inventory-tvl-history.d.ts.map +1 -0
  88. package/dist/inventory/use-inventory-tvl-history.js +28 -0
  89. package/dist/inventory/use-inventory-tvl-history.js.map +1 -0
  90. package/dist/inventory/use-inventory-tvl.d.ts +23 -0
  91. package/dist/inventory/use-inventory-tvl.d.ts.map +1 -0
  92. package/dist/inventory/use-inventory-tvl.js +27 -0
  93. package/dist/inventory/use-inventory-tvl.js.map +1 -0
  94. package/dist/margin/index.d.ts +1 -0
  95. package/dist/margin/index.d.ts.map +1 -1
  96. package/dist/margin/use-account-margin-risk.d.ts +68 -0
  97. package/dist/margin/use-account-margin-risk.d.ts.map +1 -0
  98. package/dist/margin/use-account-margin-risk.js +31 -0
  99. package/dist/margin/use-account-margin-risk.js.map +1 -0
  100. package/dist/margin/use-available-instant-open-margin.d.ts +27 -7
  101. package/dist/margin/use-available-instant-open-margin.d.ts.map +1 -1
  102. package/dist/margin/use-available-instant-open-margin.js +117 -46
  103. package/dist/margin/use-available-instant-open-margin.js.map +1 -1
  104. package/dist/market-info/use-market-info.d.ts +13 -13
  105. package/dist/market-info/use-market-info.d.ts.map +1 -1
  106. package/dist/market-info/use-market-info.js.map +1 -1
  107. package/dist/markets/use-markets.d.ts +14 -8
  108. package/dist/markets/use-markets.d.ts.map +1 -1
  109. package/dist/markets/use-markets.js.map +1 -1
  110. package/dist/muon/index.d.ts +2 -0
  111. package/dist/muon/index.d.ts.map +1 -1
  112. package/dist/muon/use-force-close-price-sig.d.ts +34 -0
  113. package/dist/muon/use-force-close-price-sig.d.ts.map +1 -0
  114. package/dist/muon/use-force-close-price-sig.js +31 -0
  115. package/dist/muon/use-force-close-price-sig.js.map +1 -0
  116. package/dist/muon/use-send-quote-upnl-sig.d.ts +30 -0
  117. package/dist/muon/use-send-quote-upnl-sig.d.ts.map +1 -0
  118. package/dist/muon/use-send-quote-upnl-sig.js +28 -0
  119. package/dist/muon/use-send-quote-upnl-sig.js.map +1 -0
  120. package/dist/notifications/use-search-notifications.d.ts +12 -12
  121. package/dist/notifications/use-search-notifications.d.ts.map +1 -1
  122. package/dist/notifications/use-search-notifications.js.map +1 -1
  123. package/dist/notional-cap/use-notional-cap-by-symbol-id.d.ts +7 -7
  124. package/dist/notional-cap/use-notional-cap-by-symbol-id.d.ts.map +1 -1
  125. package/dist/notional-cap/use-notional-cap-by-symbol-id.js.map +1 -1
  126. package/dist/orderbook/index.d.ts +5 -0
  127. package/dist/orderbook/index.d.ts.map +1 -0
  128. package/dist/orderbook/index.js +5 -0
  129. package/dist/orderbook/use-binance-orderbook-source.d.ts +28 -0
  130. package/dist/orderbook/use-binance-orderbook-source.d.ts.map +1 -0
  131. package/dist/orderbook/use-binance-orderbook-source.js +26 -0
  132. package/dist/orderbook/use-binance-orderbook-source.js.map +1 -0
  133. package/dist/orderbook/use-live-orderbook.d.ts +104 -0
  134. package/dist/orderbook/use-live-orderbook.d.ts.map +1 -0
  135. package/dist/orderbook/use-live-orderbook.js +77 -0
  136. package/dist/orderbook/use-live-orderbook.js.map +1 -0
  137. package/dist/orderbook/use-orderbook-stream.d.ts +73 -0
  138. package/dist/orderbook/use-orderbook-stream.d.ts.map +1 -0
  139. package/dist/orderbook/use-orderbook-stream.js +49 -0
  140. package/dist/orderbook/use-orderbook-stream.js.map +1 -0
  141. package/dist/orderbook/use-orderbook.d.ts +35 -0
  142. package/dist/orderbook/use-orderbook.d.ts.map +1 -0
  143. package/dist/orderbook/use-orderbook.js +22 -0
  144. package/dist/orderbook/use-orderbook.js.map +1 -0
  145. package/dist/pools/index.d.ts +30 -0
  146. package/dist/pools/index.d.ts.map +1 -0
  147. package/dist/pools/index.js +30 -0
  148. package/dist/pools/use-add-market.d.ts +57 -0
  149. package/dist/pools/use-add-market.d.ts.map +1 -0
  150. package/dist/pools/use-add-market.js +30 -0
  151. package/dist/pools/use-add-market.js.map +1 -0
  152. package/dist/pools/use-authenticate-listing.d.ts +45 -0
  153. package/dist/pools/use-authenticate-listing.d.ts.map +1 -0
  154. package/dist/pools/use-authenticate-listing.js +30 -0
  155. package/dist/pools/use-authenticate-listing.js.map +1 -0
  156. package/dist/pools/use-cancel-withdraw.d.ts +47 -0
  157. package/dist/pools/use-cancel-withdraw.d.ts.map +1 -0
  158. package/dist/pools/use-cancel-withdraw.js +30 -0
  159. package/dist/pools/use-cancel-withdraw.js.map +1 -0
  160. package/dist/pools/use-claim-history.d.ts +25 -0
  161. package/dist/pools/use-claim-history.d.ts.map +1 -0
  162. package/dist/pools/use-claim-history.js +27 -0
  163. package/dist/pools/use-claim-history.js.map +1 -0
  164. package/dist/pools/use-claim-profit.d.ts +53 -0
  165. package/dist/pools/use-claim-profit.d.ts.map +1 -0
  166. package/dist/pools/use-claim-profit.js +30 -0
  167. package/dist/pools/use-claim-profit.js.map +1 -0
  168. package/dist/pools/use-deposit-address.d.ts +43 -0
  169. package/dist/pools/use-deposit-address.d.ts.map +1 -0
  170. package/dist/pools/use-deposit-address.js +28 -0
  171. package/dist/pools/use-deposit-address.js.map +1 -0
  172. package/dist/pools/use-listing-config.d.ts +28 -0
  173. package/dist/pools/use-listing-config.d.ts.map +1 -0
  174. package/dist/pools/use-listing-config.js +27 -0
  175. package/dist/pools/use-listing-config.js.map +1 -0
  176. package/dist/pools/use-listing-market-config-projection.d.ts +66 -0
  177. package/dist/pools/use-listing-market-config-projection.d.ts.map +1 -0
  178. package/dist/pools/use-listing-market-config-projection.js +57 -0
  179. package/dist/pools/use-listing-market-config-projection.js.map +1 -0
  180. package/dist/pools/use-listing-market-config.d.ts +49 -0
  181. package/dist/pools/use-listing-market-config.d.ts.map +1 -0
  182. package/dist/pools/use-listing-market-config.js +28 -0
  183. package/dist/pools/use-listing-market-config.js.map +1 -0
  184. package/dist/pools/use-listing-market-detail.d.ts +29 -0
  185. package/dist/pools/use-listing-market-detail.d.ts.map +1 -0
  186. package/dist/pools/use-listing-market-detail.js +27 -0
  187. package/dist/pools/use-listing-market-detail.js.map +1 -0
  188. package/dist/pools/use-listing-markets.d.ts +32 -0
  189. package/dist/pools/use-listing-markets.d.ts.map +1 -0
  190. package/dist/pools/use-listing-markets.js +27 -0
  191. package/dist/pools/use-listing-markets.js.map +1 -0
  192. package/dist/pools/use-listing-status.d.ts +29 -0
  193. package/dist/pools/use-listing-status.d.ts.map +1 -0
  194. package/dist/pools/use-listing-status.js +28 -0
  195. package/dist/pools/use-listing-status.js.map +1 -0
  196. package/dist/pools/use-pool-quotes.d.ts +26 -0
  197. package/dist/pools/use-pool-quotes.d.ts.map +1 -0
  198. package/dist/pools/use-pool-quotes.js +27 -0
  199. package/dist/pools/use-pool-quotes.js.map +1 -0
  200. package/dist/pools/use-pool-reward-chart.d.ts +32 -0
  201. package/dist/pools/use-pool-reward-chart.d.ts.map +1 -0
  202. package/dist/pools/use-pool-reward-chart.js +28 -0
  203. package/dist/pools/use-pool-reward-chart.js.map +1 -0
  204. package/dist/pools/use-pool-total-reward.d.ts +27 -0
  205. package/dist/pools/use-pool-total-reward.d.ts.map +1 -0
  206. package/dist/pools/use-pool-total-reward.js +28 -0
  207. package/dist/pools/use-pool-total-reward.js.map +1 -0
  208. package/dist/pools/use-pool-trade-history.d.ts +26 -0
  209. package/dist/pools/use-pool-trade-history.d.ts.map +1 -0
  210. package/dist/pools/use-pool-trade-history.js +27 -0
  211. package/dist/pools/use-pool-trade-history.js.map +1 -0
  212. package/dist/pools/use-pool-transactions.d.ts +23 -0
  213. package/dist/pools/use-pool-transactions.d.ts.map +1 -0
  214. package/dist/pools/use-pool-transactions.js +27 -0
  215. package/dist/pools/use-pool-transactions.js.map +1 -0
  216. package/dist/pools/use-refund-market.d.ts +51 -0
  217. package/dist/pools/use-refund-market.d.ts.map +1 -0
  218. package/dist/pools/use-refund-market.js +30 -0
  219. package/dist/pools/use-refund-market.js.map +1 -0
  220. package/dist/pools/use-retry-listing-info.d.ts +23 -0
  221. package/dist/pools/use-retry-listing-info.d.ts.map +1 -0
  222. package/dist/pools/use-retry-listing-info.js +27 -0
  223. package/dist/pools/use-retry-listing-info.js.map +1 -0
  224. package/dist/pools/use-retry-listing.d.ts +46 -0
  225. package/dist/pools/use-retry-listing.d.ts.map +1 -0
  226. package/dist/pools/use-retry-listing.js +30 -0
  227. package/dist/pools/use-retry-listing.js.map +1 -0
  228. package/dist/pools/use-supports-listing-service.d.ts +21 -0
  229. package/dist/pools/use-supports-listing-service.d.ts.map +1 -0
  230. package/dist/pools/use-supports-listing-service.js +13 -0
  231. package/dist/pools/use-supports-listing-service.js.map +1 -0
  232. package/dist/pools/use-update-listing-market-config.d.ts +60 -0
  233. package/dist/pools/use-update-listing-market-config.d.ts.map +1 -0
  234. package/dist/pools/use-update-listing-market-config.js +30 -0
  235. package/dist/pools/use-update-listing-market-config.js.map +1 -0
  236. package/dist/pools/use-user-listing-markets.d.ts +40 -0
  237. package/dist/pools/use-user-listing-markets.d.ts.map +1 -0
  238. package/dist/pools/use-user-listing-markets.js +28 -0
  239. package/dist/pools/use-user-listing-markets.js.map +1 -0
  240. package/dist/pools/use-user-profit.d.ts +39 -0
  241. package/dist/pools/use-user-profit.d.ts.map +1 -0
  242. package/dist/pools/use-user-profit.js +28 -0
  243. package/dist/pools/use-user-profit.js.map +1 -0
  244. package/dist/pools/use-user-reward-chart.d.ts +28 -0
  245. package/dist/pools/use-user-reward-chart.d.ts.map +1 -0
  246. package/dist/pools/use-user-reward-chart.js +28 -0
  247. package/dist/pools/use-user-reward-chart.js.map +1 -0
  248. package/dist/pools/use-user-total-reward.d.ts +30 -0
  249. package/dist/pools/use-user-total-reward.d.ts.map +1 -0
  250. package/dist/pools/use-user-total-reward.js +28 -0
  251. package/dist/pools/use-user-total-reward.js.map +1 -0
  252. package/dist/pools/use-user-transactions.d.ts +24 -0
  253. package/dist/pools/use-user-transactions.d.ts.map +1 -0
  254. package/dist/pools/use-user-transactions.js +27 -0
  255. package/dist/pools/use-user-transactions.js.map +1 -0
  256. package/dist/pools/use-weekly-listing-limit.d.ts +28 -0
  257. package/dist/pools/use-weekly-listing-limit.d.ts.map +1 -0
  258. package/dist/pools/use-weekly-listing-limit.js +28 -0
  259. package/dist/pools/use-weekly-listing-limit.js.map +1 -0
  260. package/dist/pools/use-withdraw-lp.d.ts +52 -0
  261. package/dist/pools/use-withdraw-lp.d.ts.map +1 -0
  262. package/dist/pools/use-withdraw-lp.js +30 -0
  263. package/dist/pools/use-withdraw-lp.js.map +1 -0
  264. package/dist/price-service/index.d.ts +8 -0
  265. package/dist/price-service/index.d.ts.map +1 -1
  266. package/dist/price-service/index.js +17 -9
  267. package/dist/price-service/use-binance-health.d.ts +16 -0
  268. package/dist/price-service/use-binance-health.d.ts.map +1 -0
  269. package/dist/price-service/use-binance-health.js +27 -0
  270. package/dist/price-service/use-binance-health.js.map +1 -0
  271. package/dist/price-service/use-binance-premium-index.d.ts +24 -0
  272. package/dist/price-service/use-binance-premium-index.d.ts.map +1 -0
  273. package/dist/price-service/use-binance-premium-index.js +27 -0
  274. package/dist/price-service/use-binance-premium-index.js.map +1 -0
  275. package/dist/price-service/use-binance-prices.d.ts +54 -0
  276. package/dist/price-service/use-binance-prices.d.ts.map +1 -0
  277. package/dist/price-service/use-binance-prices.js +57 -0
  278. package/dist/price-service/use-binance-prices.js.map +1 -0
  279. package/dist/price-service/use-binance-symbols-info.d.ts +18 -0
  280. package/dist/price-service/use-binance-symbols-info.d.ts.map +1 -0
  281. package/dist/price-service/use-binance-symbols-info.js +27 -0
  282. package/dist/price-service/use-binance-symbols-info.js.map +1 -0
  283. package/dist/price-service/use-enigma-price-by-market-id.d.ts +7 -1
  284. package/dist/price-service/use-enigma-price-by-market-id.d.ts.map +1 -1
  285. package/dist/price-service/use-enigma-price-by-market-id.js +1 -1
  286. package/dist/price-service/use-enigma-price-by-market-id.js.map +1 -1
  287. package/dist/price-service/use-mark-prices.d.ts +25 -0
  288. package/dist/price-service/use-mark-prices.d.ts.map +1 -0
  289. package/dist/price-service/use-mark-prices.js +27 -0
  290. package/dist/price-service/use-mark-prices.js.map +1 -0
  291. package/dist/price-service/use-price-by-market-id.d.ts +53 -0
  292. package/dist/price-service/use-price-by-market-id.d.ts.map +1 -0
  293. package/dist/price-service/use-price-by-market-id.js +33 -0
  294. package/dist/price-service/use-price-by-market-id.js.map +1 -0
  295. package/dist/price-service/use-price-by-name.d.ts +48 -0
  296. package/dist/price-service/use-price-by-name.d.ts.map +1 -0
  297. package/dist/price-service/use-price-by-name.js +23 -0
  298. package/dist/price-service/use-price-by-name.js.map +1 -0
  299. package/dist/price-service/use-prices.d.ts +87 -0
  300. package/dist/price-service/use-prices.d.ts.map +1 -0
  301. package/dist/price-service/use-prices.js +77 -0
  302. package/dist/price-service/use-prices.js.map +1 -0
  303. package/dist/provider/symmio-provider.d.ts +8 -2
  304. package/dist/provider/symmio-provider.d.ts.map +1 -1
  305. package/dist/provider/symmio-provider.js +19 -19
  306. package/dist/provider/symmio-provider.js.map +1 -1
  307. package/dist/quotes/confirm-hold.d.ts +121 -0
  308. package/dist/quotes/confirm-hold.d.ts.map +1 -0
  309. package/dist/quotes/confirm-hold.js +59 -0
  310. package/dist/quotes/confirm-hold.js.map +1 -0
  311. package/dist/quotes/index.d.ts +14 -0
  312. package/dist/quotes/index.d.ts.map +1 -1
  313. package/dist/quotes/use-account-upnl.d.ts +66 -0
  314. package/dist/quotes/use-account-upnl.d.ts.map +1 -0
  315. package/dist/quotes/use-account-upnl.js +73 -0
  316. package/dist/quotes/use-account-upnl.js.map +1 -0
  317. package/dist/quotes/use-close-quote-group.d.ts +126 -0
  318. package/dist/quotes/use-close-quote-group.d.ts.map +1 -0
  319. package/dist/quotes/use-close-quote-group.js +172 -0
  320. package/dist/quotes/use-close-quote-group.js.map +1 -0
  321. package/dist/quotes/use-cool-downs-of-ma.d.ts +26 -0
  322. package/dist/quotes/use-cool-downs-of-ma.d.ts.map +1 -0
  323. package/dist/quotes/use-cool-downs-of-ma.js +27 -0
  324. package/dist/quotes/use-cool-downs-of-ma.js.map +1 -0
  325. package/dist/quotes/use-force-cancel-close-request.d.ts +27 -0
  326. package/dist/quotes/use-force-cancel-close-request.d.ts.map +1 -0
  327. package/dist/quotes/use-force-cancel-close-request.js +41 -0
  328. package/dist/quotes/use-force-cancel-close-request.js.map +1 -0
  329. package/dist/quotes/use-force-cancel-quote.d.ts +26 -0
  330. package/dist/quotes/use-force-cancel-quote.d.ts.map +1 -0
  331. package/dist/quotes/use-force-cancel-quote.js +42 -0
  332. package/dist/quotes/use-force-cancel-quote.js.map +1 -0
  333. package/dist/quotes/use-force-close-eligibility.d.ts +30 -0
  334. package/dist/quotes/use-force-close-eligibility.d.ts.map +1 -0
  335. package/dist/quotes/use-force-close-eligibility.js +39 -0
  336. package/dist/quotes/use-force-close-eligibility.js.map +1 -0
  337. package/dist/quotes/use-force-close-params.d.ts +22 -0
  338. package/dist/quotes/use-force-close-params.d.ts.map +1 -0
  339. package/dist/quotes/use-force-close-params.js +27 -0
  340. package/dist/quotes/use-force-close-params.js.map +1 -0
  341. package/dist/quotes/use-force-close.d.ts +30 -0
  342. package/dist/quotes/use-force-close.d.ts.map +1 -0
  343. package/dist/quotes/use-force-close.js +38 -0
  344. package/dist/quotes/use-force-close.js.map +1 -0
  345. package/dist/quotes/use-grouped-quotes.d.ts +50 -10
  346. package/dist/quotes/use-grouped-quotes.d.ts.map +1 -1
  347. package/dist/quotes/use-grouped-quotes.js +40 -14
  348. package/dist/quotes/use-grouped-quotes.js.map +1 -1
  349. package/dist/quotes/use-grouping-isolation.d.ts +35 -0
  350. package/dist/quotes/use-grouping-isolation.d.ts.map +1 -0
  351. package/dist/quotes/use-grouping-isolation.js +39 -0
  352. package/dist/quotes/use-grouping-isolation.js.map +1 -0
  353. package/dist/quotes/use-limit-orders.d.ts +62 -0
  354. package/dist/quotes/use-limit-orders.d.ts.map +1 -0
  355. package/dist/quotes/use-limit-orders.js +82 -0
  356. package/dist/quotes/use-limit-orders.js.map +1 -0
  357. package/dist/quotes/use-managed-quotes.d.ts.map +1 -1
  358. package/dist/quotes/use-managed-quotes.js +198 -166
  359. package/dist/quotes/use-managed-quotes.js.map +1 -1
  360. package/dist/quotes/use-party-a-open-positions.d.ts +26 -6
  361. package/dist/quotes/use-party-a-open-positions.d.ts.map +1 -1
  362. package/dist/quotes/use-party-a-open-positions.js +32 -12
  363. package/dist/quotes/use-party-a-open-positions.js.map +1 -1
  364. package/dist/quotes/use-quote-funding.d.ts +2 -2
  365. package/dist/quotes/use-quote-funding.js.map +1 -1
  366. package/dist/quotes/use-quote-group-funding-history.d.ts +70 -0
  367. package/dist/quotes/use-quote-group-funding-history.d.ts.map +1 -0
  368. package/dist/quotes/use-quote-group-funding-history.js +38 -0
  369. package/dist/quotes/use-quote-group-funding-history.js.map +1 -0
  370. package/dist/quotes/use-quote-group-funding.d.ts +67 -0
  371. package/dist/quotes/use-quote-group-funding.d.ts.map +1 -0
  372. package/dist/quotes/use-quote-group-funding.js +26 -0
  373. package/dist/quotes/use-quote-group-funding.js.map +1 -0
  374. package/dist/quotes/use-quote-group-margin-risk.d.ts +111 -0
  375. package/dist/quotes/use-quote-group-margin-risk.d.ts.map +1 -0
  376. package/dist/quotes/use-quote-group-margin-risk.js +63 -0
  377. package/dist/quotes/use-quote-group-margin-risk.js.map +1 -0
  378. package/dist/quotes/use-quote-upnl-and-pnl.d.ts +4 -3
  379. package/dist/quotes/use-quote-upnl-and-pnl.d.ts.map +1 -1
  380. package/dist/quotes/use-quote-upnl-and-pnl.js +2 -1
  381. package/dist/quotes/use-quote-upnl-and-pnl.js.map +1 -1
  382. package/dist/quotes/use-quotes-funding.d.ts +46 -10
  383. package/dist/quotes/use-quotes-funding.d.ts.map +1 -1
  384. package/dist/quotes/use-quotes-funding.js +44 -42
  385. package/dist/quotes/use-quotes-funding.js.map +1 -1
  386. package/dist/quotes/use-request-to-cancel-close-request.d.ts +27 -0
  387. package/dist/quotes/use-request-to-cancel-close-request.d.ts.map +1 -0
  388. package/dist/quotes/use-request-to-cancel-close-request.js +41 -0
  389. package/dist/quotes/use-request-to-cancel-close-request.js.map +1 -0
  390. package/dist/quotes/use-request-to-cancel-quote.d.ts +32 -0
  391. package/dist/quotes/use-request-to-cancel-quote.d.ts.map +1 -0
  392. package/dist/quotes/use-request-to-cancel-quote.js +42 -0
  393. package/dist/quotes/use-request-to-cancel-quote.js.map +1 -0
  394. package/dist/rasa-solver/index.d.ts +7 -0
  395. package/dist/rasa-solver/index.d.ts.map +1 -0
  396. package/dist/rasa-solver/use-error-message.d.ts +14 -0
  397. package/dist/rasa-solver/use-error-message.d.ts.map +1 -0
  398. package/dist/rasa-solver/use-error-message.js +27 -0
  399. package/dist/rasa-solver/use-error-message.js.map +1 -0
  400. package/dist/rasa-solver/use-party-a-upnl.d.ts +14 -0
  401. package/dist/rasa-solver/use-party-a-upnl.d.ts.map +1 -0
  402. package/dist/rasa-solver/use-party-a-upnl.js +27 -0
  403. package/dist/rasa-solver/use-party-a-upnl.js.map +1 -0
  404. package/dist/rasa-solver/use-solver-balance-info.d.ts +14 -0
  405. package/dist/rasa-solver/use-solver-balance-info.d.ts.map +1 -0
  406. package/dist/rasa-solver/use-solver-balance-info.js +27 -0
  407. package/dist/rasa-solver/use-solver-balance-info.js.map +1 -0
  408. package/dist/rasa-solver/use-solver-open-interest.d.ts +14 -0
  409. package/dist/rasa-solver/use-solver-open-interest.d.ts.map +1 -0
  410. package/dist/rasa-solver/use-solver-open-interest.js +27 -0
  411. package/dist/rasa-solver/use-solver-open-interest.js.map +1 -0
  412. package/dist/rasa-solver/use-solver-price-range.d.ts +14 -0
  413. package/dist/rasa-solver/use-solver-price-range.d.ts.map +1 -0
  414. package/dist/rasa-solver/use-solver-price-range.js +27 -0
  415. package/dist/rasa-solver/use-solver-price-range.js.map +1 -0
  416. package/dist/rasa-solver/use-solver-readiness.d.ts +13 -0
  417. package/dist/rasa-solver/use-solver-readiness.d.ts.map +1 -0
  418. package/dist/rasa-solver/use-solver-readiness.js +27 -0
  419. package/dist/rasa-solver/use-solver-readiness.js.map +1 -0
  420. package/dist/revenue-records/index.d.ts +2 -0
  421. package/dist/revenue-records/index.d.ts.map +1 -0
  422. package/dist/revenue-records/use-revenue-records.d.ts +25 -0
  423. package/dist/revenue-records/use-revenue-records.d.ts.map +1 -0
  424. package/dist/revenue-records/use-revenue-records.js +27 -0
  425. package/dist/revenue-records/use-revenue-records.js.map +1 -0
  426. package/dist/solvers/index.d.ts +3 -0
  427. package/dist/solvers/index.d.ts.map +1 -0
  428. package/dist/solvers/use-solver-capabilities.d.ts +31 -0
  429. package/dist/solvers/use-solver-capabilities.d.ts.map +1 -0
  430. package/dist/solvers/use-solver-capabilities.js +30 -0
  431. package/dist/solvers/use-solver-capabilities.js.map +1 -0
  432. package/dist/solvers/use-solver-revenue.d.ts +28 -0
  433. package/dist/solvers/use-solver-revenue.d.ts.map +1 -0
  434. package/dist/solvers/use-solver-revenue.js +27 -0
  435. package/dist/solvers/use-solver-revenue.js.map +1 -0
  436. package/dist/symbols/index.d.ts +2 -0
  437. package/dist/symbols/index.d.ts.map +1 -0
  438. package/dist/symbols/use-symbols.d.ts +25 -0
  439. package/dist/symbols/use-symbols.d.ts.map +1 -0
  440. package/dist/symbols/use-symbols.js +27 -0
  441. package/dist/symbols/use-symbols.js.map +1 -0
  442. package/dist/tpsl/apply-tpsl-search-snapshot.d.ts +33 -0
  443. package/dist/tpsl/apply-tpsl-search-snapshot.d.ts.map +1 -0
  444. package/dist/tpsl/apply-tpsl-search-snapshot.js +51 -0
  445. package/dist/tpsl/apply-tpsl-search-snapshot.js.map +1 -0
  446. package/dist/tpsl/await-tpsl-confirmation.d.ts +77 -0
  447. package/dist/tpsl/await-tpsl-confirmation.d.ts.map +1 -0
  448. package/dist/tpsl/await-tpsl-confirmation.js +42 -0
  449. package/dist/tpsl/await-tpsl-confirmation.js.map +1 -0
  450. package/dist/tpsl/index.d.ts +11 -0
  451. package/dist/tpsl/index.d.ts.map +1 -1
  452. package/dist/tpsl/invalidate-tpsl.d.ts +23 -0
  453. package/dist/tpsl/invalidate-tpsl.d.ts.map +1 -0
  454. package/dist/tpsl/invalidate-tpsl.js +14 -0
  455. package/dist/tpsl/invalidate-tpsl.js.map +1 -0
  456. package/dist/tpsl/match-tpsl-notification.d.ts +27 -0
  457. package/dist/tpsl/match-tpsl-notification.d.ts.map +1 -0
  458. package/dist/tpsl/match-tpsl-notification.js +22 -0
  459. package/dist/tpsl/match-tpsl-notification.js.map +1 -0
  460. package/dist/tpsl/run-with-concurrency.d.ts +20 -0
  461. package/dist/tpsl/run-with-concurrency.d.ts.map +1 -0
  462. package/dist/tpsl/run-with-concurrency.js +15 -0
  463. package/dist/tpsl/run-with-concurrency.js.map +1 -0
  464. package/dist/tpsl/settled-side.d.ts +31 -0
  465. package/dist/tpsl/settled-side.d.ts.map +1 -0
  466. package/dist/tpsl/settled-side.js +21 -0
  467. package/dist/tpsl/settled-side.js.map +1 -0
  468. package/dist/tpsl/tpsl-fallback-poll.d.ts +74 -0
  469. package/dist/tpsl/tpsl-fallback-poll.d.ts.map +1 -0
  470. package/dist/tpsl/tpsl-fallback-poll.js +101 -0
  471. package/dist/tpsl/tpsl-fallback-poll.js.map +1 -0
  472. package/dist/tpsl/tpsl-store.d.ts +98 -2
  473. package/dist/tpsl/tpsl-store.d.ts.map +1 -1
  474. package/dist/tpsl/tpsl-store.js +111 -63
  475. package/dist/tpsl/tpsl-store.js.map +1 -1
  476. package/dist/tpsl/use-delete-quote-group-tpsl.d.ts +165 -0
  477. package/dist/tpsl/use-delete-quote-group-tpsl.d.ts.map +1 -0
  478. package/dist/tpsl/use-delete-quote-group-tpsl.js +247 -0
  479. package/dist/tpsl/use-delete-quote-group-tpsl.js.map +1 -0
  480. package/dist/tpsl/use-delete-quote-tpsl.d.ts.map +1 -1
  481. package/dist/tpsl/use-delete-quote-tpsl.js +11 -10
  482. package/dist/tpsl/use-delete-quote-tpsl.js.map +1 -1
  483. package/dist/tpsl/use-quote-group-tpsl-editor.d.ts +66 -0
  484. package/dist/tpsl/use-quote-group-tpsl-editor.d.ts.map +1 -0
  485. package/dist/tpsl/use-quote-group-tpsl-editor.js +78 -0
  486. package/dist/tpsl/use-quote-group-tpsl-editor.js.map +1 -0
  487. package/dist/tpsl/use-quote-group-tpsl.d.ts +74 -0
  488. package/dist/tpsl/use-quote-group-tpsl.d.ts.map +1 -0
  489. package/dist/tpsl/use-quote-group-tpsl.js +67 -0
  490. package/dist/tpsl/use-quote-group-tpsl.js.map +1 -0
  491. package/dist/tpsl/use-quote-tpsl.d.ts +18 -2
  492. package/dist/tpsl/use-quote-tpsl.d.ts.map +1 -1
  493. package/dist/tpsl/use-quote-tpsl.js +32 -24
  494. package/dist/tpsl/use-quote-tpsl.js.map +1 -1
  495. package/dist/tpsl/use-search-tpsl-orders.d.ts +30 -0
  496. package/dist/tpsl/use-search-tpsl-orders.d.ts.map +1 -0
  497. package/dist/tpsl/use-search-tpsl-orders.js +27 -0
  498. package/dist/tpsl/use-search-tpsl-orders.js.map +1 -0
  499. package/dist/tpsl/use-set-quote-group-tpsl.d.ts +234 -0
  500. package/dist/tpsl/use-set-quote-group-tpsl.d.ts.map +1 -0
  501. package/dist/tpsl/use-set-quote-group-tpsl.js +358 -0
  502. package/dist/tpsl/use-set-quote-group-tpsl.js.map +1 -0
  503. package/dist/tpsl/use-set-quote-tpsl.d.ts +4 -4
  504. package/dist/tpsl/use-set-quote-tpsl.d.ts.map +1 -1
  505. package/dist/tpsl/use-set-quote-tpsl.js +15 -12
  506. package/dist/tpsl/use-set-quote-tpsl.js.map +1 -1
  507. package/dist/tpsl/use-tpsl-supported.d.ts +22 -0
  508. package/dist/tpsl/use-tpsl-supported.d.ts.map +1 -0
  509. package/dist/tpsl/use-tpsl-supported.js +16 -0
  510. package/dist/tpsl/use-tpsl-supported.js.map +1 -0
  511. package/dist/tpsl/use-watch-tpsl-accounts.d.ts +33 -0
  512. package/dist/tpsl/use-watch-tpsl-accounts.d.ts.map +1 -0
  513. package/dist/tpsl/use-watch-tpsl-accounts.js +44 -0
  514. package/dist/tpsl/use-watch-tpsl-accounts.js.map +1 -0
  515. package/dist/trade-volume/index.d.ts +2 -0
  516. package/dist/trade-volume/index.d.ts.map +1 -0
  517. package/dist/trade-volume/use-trade-volume.d.ts +26 -0
  518. package/dist/trade-volume/use-trade-volume.d.ts.map +1 -0
  519. package/dist/trade-volume/use-trade-volume.js +27 -0
  520. package/dist/trade-volume/use-trade-volume.js.map +1 -0
  521. package/dist/utils/index.d.ts +1 -0
  522. package/dist/utils/index.d.ts.map +1 -1
  523. package/dist/utils/invalidate-account-balances.d.ts +36 -0
  524. package/dist/utils/invalidate-account-balances.d.ts.map +1 -0
  525. package/dist/utils/invalidate-account-balances.js +10 -0
  526. package/dist/utils/invalidate-account-balances.js.map +1 -0
  527. package/dist/websocket/use-notifications.d.ts +3 -1
  528. package/dist/websocket/use-notifications.d.ts.map +1 -1
  529. package/dist/websocket/use-notifications.js +22 -20
  530. package/dist/websocket/use-notifications.js.map +1 -1
  531. package/dist/withdraw/index.d.ts +1 -0
  532. package/dist/withdraw/index.d.ts.map +1 -1
  533. package/dist/withdraw/use-initiate-withdraw.d.ts +1 -1
  534. package/dist/withdraw/use-initiate-withdraw.js.map +1 -1
  535. package/dist/withdraw/use-request-cancel-withdraw.d.ts +4 -2
  536. package/dist/withdraw/use-request-cancel-withdraw.d.ts.map +1 -1
  537. package/dist/withdraw/use-request-cancel-withdraw.js +15 -13
  538. package/dist/withdraw/use-request-cancel-withdraw.js.map +1 -1
  539. package/dist/withdraw/use-withdraw.d.ts +67 -0
  540. package/dist/withdraw/use-withdraw.d.ts.map +1 -0
  541. package/dist/withdraw/use-withdraw.js +49 -0
  542. package/dist/withdraw/use-withdraw.js.map +1 -0
  543. package/package.json +18 -2
@@ -1,8 +1,9 @@
1
1
  "use client";
2
2
  import { toQuoteTpSl as e } from "./to-quote-tpsl.js";
3
3
  import { create as t } from "zustand";
4
- //#region src/tpsl/tpsl-store.ts
5
- function n() {
4
+ import { useShallow as n } from "zustand/react/shallow";
5
+ var r = ["tp", "sl"], i = 1e-9;
6
+ function a() {
6
7
  return {
7
8
  tp: "",
8
9
  sl: "",
@@ -14,7 +15,25 @@ function n() {
14
15
  slState: "canceled"
15
16
  };
16
17
  }
17
- function r(e) {
18
+ function o(e, t, n) {
19
+ let r = { ...e };
20
+ return n.includes("tp") && (s(e.tpConfirm, t.tpState, t.tp, t.tpCohQuoteId) ? r.tpState = "confirming" : (r.tp = t.tp, r.tpOpenPrice = t.tpOpenPrice, r.tpPriceType = t.tpPriceType, r.tpCohQuoteId = t.tpCohQuoteId, r.tpState = t.tpState, r.tpConfirm = void 0)), n.includes("sl") && (s(e.slConfirm, t.slState, t.sl, t.slCohQuoteId) ? r.slState = "confirming" : (r.sl = t.sl, r.slOpenPrice = t.slOpenPrice, r.slPriceType = t.slPriceType, r.slCohQuoteId = t.slCohQuoteId, r.slState = t.slState, r.slConfirm = void 0)), r;
21
+ }
22
+ function s(e, t, n, r) {
23
+ return e?.intent !== "write" || Date.now() - e.at >= 9e4 ? !1 : t === "canceled" ? !0 : e.price === void 0 ? e.cohQuoteId !== void 0 && r !== void 0 ? r !== e.cohQuoteId : !1 : !l(e.price, n, e.pricePrecision);
24
+ }
25
+ function c(e, t) {
26
+ return e.quoteId === t.quoteId && e.tempQuoteId === t.tempQuoteId && e.tp === t.tp && e.sl === t.sl && e.tpOpenPrice === t.tpOpenPrice && e.slOpenPrice === t.slOpenPrice && e.tpPriceType === t.tpPriceType && e.slPriceType === t.slPriceType && e.tpState === t.tpState && e.slState === t.slState && e.tpCohQuoteId === t.tpCohQuoteId && e.slCohQuoteId === t.slCohQuoteId && e.tpConfirm === t.tpConfirm && e.slConfirm === t.slConfirm;
27
+ }
28
+ function l(e, t, n) {
29
+ if (e === t) return !0;
30
+ let r = Number(e), a = Number(t);
31
+ if (!Number.isFinite(r) || !Number.isFinite(a)) return !1;
32
+ n !== void 0 && Number.isInteger(n) && n >= 0 && (r = Number(r.toFixed(n)), a = Number(a.toFixed(n)));
33
+ let o = Math.max(Math.abs(r), Math.abs(a), 1);
34
+ return Math.abs(r - a) <= i * o;
35
+ }
36
+ function u(e) {
18
37
  switch (e) {
19
38
  case "new":
20
39
  case "edit": return "new";
@@ -28,91 +47,111 @@ function r(e) {
28
47
  default: return "new";
29
48
  }
30
49
  }
31
- var i = t((t, i) => {
32
- let a = 0;
33
- function o() {
34
- return a += 1, `r${a}`;
50
+ var d = t((t, n) => {
51
+ let i = 0;
52
+ function s() {
53
+ return i += 1, `r${i}`;
35
54
  }
36
- function s(e, r) {
55
+ function l(e, n) {
37
56
  t((t) => {
38
- let i = new Map(t.records), a = new Map(t.index), s = a.get(e), c;
39
- s === void 0 ? (s = o(), c = n(), a.set(e, s)) : c = i.get(s) ?? n();
40
- let l = r(c);
41
- return e < 0n ? l.tempQuoteId ??= e : l.quoteId ??= e, i.set(s, l), {
42
- records: i,
43
- index: a
44
- };
57
+ let r = new Map(t.records), i = new Map(t.index), o = i.get(e), l;
58
+ o === void 0 ? (o = s(), l = a(), i.set(e, o)) : l = r.get(o) ?? a();
59
+ let u = n(l);
60
+ return e < 0n ? u.tempQuoteId ??= e : u.quoteId ??= e, i.get(e) === o && c(l, u) ? t : (r.set(o, u), {
61
+ records: r,
62
+ index: i
63
+ });
45
64
  });
46
65
  }
47
66
  return {
48
67
  records: /* @__PURE__ */ new Map(),
49
68
  index: /* @__PURE__ */ new Map(),
50
69
  get(e) {
51
- let t = i(), n = t.index.get(e);
52
- return n === void 0 ? void 0 : t.records.get(n);
70
+ let t = n(), r = t.index.get(e);
71
+ return r === void 0 ? void 0 : t.records.get(r);
53
72
  },
54
- setRows(t, n) {
55
- let r = e(n), a = n.find((e) => e.quote_id && e.quote_id !== 0)?.quote_id;
56
- if (s(t, (e) => ({
57
- ...e,
58
- ...r
59
- })), a !== void 0) {
60
- let e = BigInt(a);
61
- e !== t && i().link(t, e);
73
+ setRows(t, i) {
74
+ let a = e(i), s = i.find((e) => e.quote_id && e.quote_id !== 0)?.quote_id;
75
+ if (l(t, (e) => o(e, a, r)), s !== void 0) {
76
+ let e = BigInt(s);
77
+ e !== t && n().link(t, e);
62
78
  }
63
79
  },
80
+ setRowsForSides(t, n, r) {
81
+ if (r.length === 0) return;
82
+ let i = e(n);
83
+ l(t, (e) => o(e, i, r));
84
+ },
64
85
  markConfirming(e, t, n) {
65
- s(e, (e) => {
66
- let r = { ...e };
67
- return t === "tp" ? (r.tpState = "confirming", n?.price !== void 0 && (r.tp = n.price), n?.priceType !== void 0 && (r.tpPriceType = n.priceType), n?.cohQuoteId !== void 0 && (r.tpCohQuoteId = n.cohQuoteId)) : (r.slState = "confirming", n?.price !== void 0 && (r.sl = n.price), n?.priceType !== void 0 && (r.slPriceType = n.priceType), n?.cohQuoteId !== void 0 && (r.slCohQuoteId = n.cohQuoteId)), r;
86
+ let r = {
87
+ intent: n?.intent ?? "write",
88
+ at: Date.now(),
89
+ price: n?.price,
90
+ pricePrecision: n?.pricePrecision,
91
+ priceType: n?.priceType,
92
+ cohQuoteId: n?.cohQuoteId
93
+ };
94
+ l(e, (e) => {
95
+ let i = { ...e };
96
+ return t === "tp" ? (i.tpState = "confirming", i.tpConfirm = r, n?.price !== void 0 && (i.tp = n.price), n?.priceType !== void 0 && (i.tpPriceType = n.priceType), n?.cohQuoteId !== void 0 && (i.tpCohQuoteId = n.cohQuoteId)) : (i.slState = "confirming", i.slConfirm = r, n?.price !== void 0 && (i.sl = n.price), n?.priceType !== void 0 && (i.slPriceType = n.priceType), n?.cohQuoteId !== void 0 && (i.slCohQuoteId = n.cohQuoteId)), i;
68
97
  });
69
98
  },
99
+ clearConfirming(e, t) {
100
+ let r = n().get(e);
101
+ r && ((t === "tp" ? r.tpConfirm === void 0 : r.slConfirm === void 0) || l(e, (e) => t === "tp" ? {
102
+ ...e,
103
+ tpConfirm: void 0
104
+ } : {
105
+ ...e,
106
+ slConfirm: void 0
107
+ }));
108
+ },
70
109
  applyNotification(e, t) {
71
110
  if (!t.successful) return;
72
111
  let n = t.conditionalOrderType === "take_profit" ? "tp" : t.conditionalOrderType === "stop_loss" ? "sl" : null;
73
112
  if (!n) return;
74
- let i = r(t.state), a = t.details?.trigger_price;
75
- s(e, (e) => {
76
- let r = { ...e };
77
- return n === "tp" ? (r.tpState = i, i === "canceled" ? (r.tp = "", r.tpOpenPrice = "", r.tpCohQuoteId = void 0) : (a !== void 0 && (r.tp = String(a)), t.cohQuoteId && (r.tpCohQuoteId = t.cohQuoteId))) : (r.slState = i, i === "canceled" ? (r.sl = "", r.slOpenPrice = "", r.slCohQuoteId = void 0) : (a !== void 0 && (r.sl = String(a)), t.cohQuoteId && (r.slCohQuoteId = t.cohQuoteId))), r;
113
+ let r = u(t.state), i = t.details?.trigger_price;
114
+ l(e, (e) => {
115
+ let a = { ...e };
116
+ return n === "tp" ? (a.tpState = r, a.tpConfirm = void 0, r === "canceled" ? (a.tp = "", a.tpOpenPrice = "", a.tpCohQuoteId = void 0) : (i !== void 0 && (a.tp = String(i)), t.cohQuoteId && (a.tpCohQuoteId = t.cohQuoteId))) : (a.slState = r, a.slConfirm = void 0, r === "canceled" ? (a.sl = "", a.slOpenPrice = "", a.slCohQuoteId = void 0) : (i !== void 0 && (a.sl = String(i)), t.cohQuoteId && (a.slCohQuoteId = t.cohQuoteId))), a;
78
117
  });
79
118
  },
80
- link(e, r) {
81
- e !== r && t((t) => {
82
- let i = new Map(t.records), a = new Map(t.index), s = a.get(e), c = a.get(r);
83
- if (s === void 0 && c === void 0) {
84
- let t = o(), s = n();
85
- return e < 0n ? s.tempQuoteId = e : s.quoteId = e, r < 0n ? s.tempQuoteId ??= r : s.quoteId ??= r, i.set(t, s), a.set(e, t), a.set(r, t), {
86
- records: i,
87
- index: a
119
+ link(e, n) {
120
+ e !== n && t((t) => {
121
+ let r = new Map(t.records), i = new Map(t.index), o = i.get(e), c = i.get(n);
122
+ if (o === void 0 && c === void 0) {
123
+ let t = s(), o = a();
124
+ return e < 0n ? o.tempQuoteId = e : o.quoteId = e, n < 0n ? o.tempQuoteId ??= n : o.quoteId ??= n, r.set(t, o), i.set(e, t), i.set(n, t), {
125
+ records: r,
126
+ index: i
88
127
  };
89
128
  }
90
- if (s !== void 0 && c === void 0) {
91
- a.set(r, s);
92
- let e = i.get(s);
129
+ if (o !== void 0 && c === void 0) {
130
+ i.set(n, o);
131
+ let e = r.get(o);
93
132
  if (e) {
94
133
  let t = { ...e };
95
- r < 0n ? t.tempQuoteId ??= r : t.quoteId ??= r, i.set(s, t);
134
+ n < 0n ? t.tempQuoteId ??= n : t.quoteId ??= n, r.set(o, t);
96
135
  }
97
136
  return {
98
- records: i,
99
- index: a
137
+ records: r,
138
+ index: i
100
139
  };
101
140
  }
102
- if (s === void 0 && c !== void 0) {
103
- a.set(e, c);
104
- let t = i.get(c);
141
+ if (o === void 0 && c !== void 0) {
142
+ i.set(e, c);
143
+ let t = r.get(c);
105
144
  if (t) {
106
145
  let n = { ...t };
107
- e < 0n ? n.tempQuoteId ??= e : n.quoteId ??= e, i.set(c, n);
146
+ e < 0n ? n.tempQuoteId ??= e : n.quoteId ??= e, r.set(c, n);
108
147
  }
109
148
  return {
110
- records: i,
111
- index: a
149
+ records: r,
150
+ index: i
112
151
  };
113
152
  }
114
- if (s === c) return t;
115
- let l = i.get(s) ?? n(), u = i.get(c) ?? n(), d = {
153
+ if (o === c) return t;
154
+ let l = r.get(o) ?? a(), u = r.get(c) ?? a(), d = {
116
155
  ...l,
117
156
  quoteId: l.quoteId ?? u.quoteId,
118
157
  tempQuoteId: l.tempQuoteId ?? u.tempQuoteId,
@@ -121,34 +160,43 @@ var i = t((t, i) => {
121
160
  tpOpenPrice: u.tpOpenPrice,
122
161
  tpPriceType: u.tpPriceType,
123
162
  tpState: u.tpState,
124
- tpCohQuoteId: u.tpCohQuoteId
163
+ tpCohQuoteId: u.tpCohQuoteId,
164
+ tpConfirm: u.tpConfirm
125
165
  } : {},
126
166
  ...l.slState === "canceled" && u.slState !== "canceled" ? {
127
167
  sl: u.sl,
128
168
  slOpenPrice: u.slOpenPrice,
129
169
  slPriceType: u.slPriceType,
130
170
  slState: u.slState,
131
- slCohQuoteId: u.slCohQuoteId
171
+ slCohQuoteId: u.slCohQuoteId,
172
+ slConfirm: u.slConfirm
132
173
  } : {}
133
174
  };
134
- i.set(s, d), i.delete(c);
135
- for (let [e, t] of a) t === c && a.set(e, s);
175
+ r.set(o, d), r.delete(c);
176
+ for (let [e, t] of i) t === c && i.set(e, o);
136
177
  return {
137
- records: i,
138
- index: a
178
+ records: r,
179
+ index: i
139
180
  };
140
181
  });
141
182
  }
142
183
  };
143
184
  });
144
- function a(e) {
145
- return i((t) => {
185
+ function f(e) {
186
+ return d((t) => {
146
187
  if (e === void 0) return;
147
188
  let n = t.index.get(e);
148
189
  return n === void 0 ? void 0 : t.records.get(n);
149
190
  });
150
191
  }
192
+ function p(e) {
193
+ return d(n((t) => e.map((e) => {
194
+ if (e === void 0) return;
195
+ let n = t.index.get(e);
196
+ return n === void 0 ? void 0 : t.records.get(n);
197
+ })));
198
+ }
151
199
  //#endregion
152
- export { a as useTpSlRecord, i as useTpSlStore };
200
+ export { f as useTpSlRecord, p as useTpSlRecords, d as useTpSlStore };
153
201
 
154
202
  //# sourceMappingURL=tpsl-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tpsl-store.js","names":[],"sources":["../../src/tpsl/tpsl-store.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n QuoteTpSlRow,\n RawTpSlNotificationState,\n TpSlInfoState,\n TpSlNotification,\n TpSlPriceType,\n} from \"@symmio/trading-core\";\nimport { create } from \"zustand\";\nimport { toQuoteTpSl } from \"./to-quote-tpsl\";\n\n/**\n * One quote's folded TP/SL state. The same record instance is referenced from\n * every id that resolves to it via {@link TpSlStoreState.index} — the caller\n * can pass either the on-chain `quoteId` or the hedger `tempQuoteId` and get\n * the same record back.\n *\n * `tpState` / `slState` is the single source of truth for how a side is\n * rendered — including the transient `\"confirming\"` phase between a POST\n * accepting and the WS report landing. No separate overlay field.\n */\nexport interface TpSlRecord {\n /** On-chain quote id — set once the quote anchors. */\n quoteId?: bigint;\n /** Hedger `tempQuoteId` — set during the pre-chain window. */\n tempQuoteId?: bigint;\n\n tp: string;\n sl: string;\n tpOpenPrice: string;\n slOpenPrice: string;\n tpPriceType: TpSlPriceType;\n slPriceType: TpSlPriceType;\n tpState: TpSlInfoState;\n slState: TpSlInfoState;\n tpCohQuoteId?: string;\n slCohQuoteId?: string;\n}\n\n/** Internal identity of a record — opaque string, never leaks to consumers. */\ntype TpSlRecordKey = string;\n\n/**\n * Zustand store shape. `records` holds one entry per quote; `index` maps every\n * id we've ever seen for that quote — on-chain and temp — to the same\n * `records` key.\n */\nexport interface TpSlStoreState {\n records: Map<TpSlRecordKey, TpSlRecord>;\n index: Map<bigint, TpSlRecordKey>;\n\n /** Read a record via any id. Returns `undefined` when the id is unknown. */\n get(id: bigint): TpSlRecord | undefined;\n\n /** Fold the raw handler rows into snapshot fields and commit under `id`. */\n setRows(id: bigint, rows: QuoteTpSlRow[]): void;\n\n /**\n * Mark a side as \"POST accepted, awaiting handler acknowledgement\". Sets\n * `tpState` / `slState` to `\"confirming\"` directly. Optional `patch`\n * seeds the trigger price / priceType / cohQuoteId so the UI can show\n * the target value during the confirming window; a later\n * {@link applyNotification} transitions the state to the wire report.\n */\n markConfirming(\n id: bigint,\n side: \"tp\" | \"sl\",\n patch?: { price?: string; priceType?: TpSlPriceType; cohQuoteId?: string },\n ): void;\n\n /**\n * Apply a WS notification to the record's side state (and optionally its\n * trigger price when `details.trigger_price` is present). Maps the raw\n * notification state onto {@link TpSlInfoState}. Failure frames\n * (`successful: false`) are ignored — the confirming state remains until\n * the next successful frame or REST fetch resolves it.\n */\n applyNotification(id: bigint, notification: TpSlNotification): void;\n\n /**\n * Declare that two ids refer to the same TP/SL record — typically called\n * when the quote reconciliation layer learns a `tempQuoteId ↔ quoteId`\n * pairing from a solver notification.\n */\n link(a: bigint, b: bigint): void;\n}\n\nfunction blank(): TpSlRecord {\n return {\n tp: \"\",\n sl: \"\",\n tpOpenPrice: \"\",\n slOpenPrice: \"\",\n tpPriceType: \"markPrice\",\n slPriceType: \"markPrice\",\n tpState: \"canceled\",\n slState: \"canceled\",\n };\n}\n\n/** Map the WS notification state onto {@link TpSlInfoState}. */\nfunction mapNotificationState(state: RawTpSlNotificationState): TpSlInfoState {\n switch (state) {\n case \"new\":\n case \"edit\":\n return \"new\";\n case \"pending\":\n return \"pending\";\n case \"triggered\":\n case \"trigger\":\n return \"triggered\";\n case \"cancel\":\n case \"canceled\":\n case \"cancelled\":\n case \"close\":\n return \"canceled\";\n default:\n return \"new\";\n }\n}\n\n/**\n * Module-level Zustand store for the folded TP/SL snapshot per quote. Single\n * instance across the app is intentional (see AGENTS.md — \"TP/SL data live in\n * one place\"); tests can call {@link __resetTpSlStore} between runs to reset.\n */\nexport const useTpSlStore = create<TpSlStoreState>((set, get) => {\n let keyCounter = 0;\n function newKey(): TpSlRecordKey {\n keyCounter += 1;\n return `r${keyCounter}`;\n }\n\n function upsert(id: bigint, mutator: (prev: TpSlRecord) => TpSlRecord): void {\n set((state) => {\n const records = new Map(state.records);\n const index = new Map(state.index);\n let key = index.get(id);\n let prev: TpSlRecord;\n if (key === undefined) {\n key = newKey();\n prev = blank();\n index.set(id, key);\n } else {\n prev = records.get(key) ?? blank();\n }\n const next = mutator(prev);\n if (id < 0n) {\n next.tempQuoteId ??= id;\n } else {\n next.quoteId ??= id;\n }\n records.set(key, next);\n return { records, index };\n });\n }\n\n return {\n records: new Map(),\n index: new Map(),\n\n get(id) {\n const state = get();\n const key = state.index.get(id);\n return key === undefined ? undefined : state.records.get(key);\n },\n\n setRows(id, rows) {\n const folded = toQuoteTpSl(rows);\n const rowQuoteId = rows.find((r) => r.quote_id && r.quote_id !== 0)?.quote_id;\n upsert(id, (prev) => ({ ...prev, ...folded }));\n if (rowQuoteId !== undefined) {\n const rowId = BigInt(rowQuoteId);\n if (rowId !== id) get().link(id, rowId);\n }\n },\n\n markConfirming(id, side, patch) {\n upsert(id, (prev) => {\n const next: TpSlRecord = { ...prev };\n if (side === \"tp\") {\n next.tpState = \"confirming\";\n if (patch?.price !== undefined) next.tp = patch.price;\n if (patch?.priceType !== undefined) next.tpPriceType = patch.priceType;\n if (patch?.cohQuoteId !== undefined) next.tpCohQuoteId = patch.cohQuoteId;\n } else {\n next.slState = \"confirming\";\n if (patch?.price !== undefined) next.sl = patch.price;\n if (patch?.priceType !== undefined) next.slPriceType = patch.priceType;\n if (patch?.cohQuoteId !== undefined) next.slCohQuoteId = patch.cohQuoteId;\n }\n return next;\n });\n },\n\n applyNotification(id, notification) {\n if (!notification.successful) return;\n const side =\n notification.conditionalOrderType === \"take_profit\"\n ? \"tp\"\n : notification.conditionalOrderType === \"stop_loss\"\n ? \"sl\"\n : null;\n if (!side) return;\n const nextState = mapNotificationState(notification.state);\n const trigger = notification.details?.trigger_price;\n upsert(id, (prev) => {\n const next: TpSlRecord = { ...prev };\n if (side === \"tp\") {\n next.tpState = nextState;\n if (nextState === \"canceled\") {\n next.tp = \"\";\n next.tpOpenPrice = \"\";\n next.tpCohQuoteId = undefined;\n } else {\n if (trigger !== undefined) next.tp = String(trigger);\n if (notification.cohQuoteId) next.tpCohQuoteId = notification.cohQuoteId;\n }\n } else {\n next.slState = nextState;\n if (nextState === \"canceled\") {\n next.sl = \"\";\n next.slOpenPrice = \"\";\n next.slCohQuoteId = undefined;\n } else {\n if (trigger !== undefined) next.sl = String(trigger);\n if (notification.cohQuoteId) next.slCohQuoteId = notification.cohQuoteId;\n }\n }\n return next;\n });\n },\n\n link(a, b) {\n if (a === b) return;\n set((state) => {\n const records = new Map(state.records);\n const index = new Map(state.index);\n const keyA = index.get(a);\n const keyB = index.get(b);\n\n if (keyA === undefined && keyB === undefined) {\n const key = newKey();\n const record = blank();\n if (a < 0n) record.tempQuoteId = a;\n else record.quoteId = a;\n if (b < 0n) record.tempQuoteId ??= b;\n else record.quoteId ??= b;\n records.set(key, record);\n index.set(a, key);\n index.set(b, key);\n return { records, index };\n }\n\n if (keyA !== undefined && keyB === undefined) {\n index.set(b, keyA);\n const prev = records.get(keyA);\n if (prev) {\n const next: TpSlRecord = { ...prev };\n if (b < 0n) next.tempQuoteId ??= b;\n else next.quoteId ??= b;\n records.set(keyA, next);\n }\n return { records, index };\n }\n\n if (keyA === undefined && keyB !== undefined) {\n index.set(a, keyB);\n const prev = records.get(keyB);\n if (prev) {\n const next: TpSlRecord = { ...prev };\n if (a < 0n) next.tempQuoteId ??= a;\n else next.quoteId ??= a;\n records.set(keyB, next);\n }\n return { records, index };\n }\n\n if (keyA === keyB) return state;\n\n const recordA = records.get(keyA!) ?? blank();\n const recordB = records.get(keyB!) ?? blank();\n const merged: TpSlRecord = {\n ...recordA,\n quoteId: recordA.quoteId ?? recordB.quoteId,\n tempQuoteId: recordA.tempQuoteId ?? recordB.tempQuoteId,\n ...(recordA.tpState === \"canceled\" && recordB.tpState !== \"canceled\"\n ? {\n tp: recordB.tp,\n tpOpenPrice: recordB.tpOpenPrice,\n tpPriceType: recordB.tpPriceType,\n tpState: recordB.tpState,\n tpCohQuoteId: recordB.tpCohQuoteId,\n }\n : {}),\n ...(recordA.slState === \"canceled\" && recordB.slState !== \"canceled\"\n ? {\n sl: recordB.sl,\n slOpenPrice: recordB.slOpenPrice,\n slPriceType: recordB.slPriceType,\n slState: recordB.slState,\n slCohQuoteId: recordB.slCohQuoteId,\n }\n : {}),\n };\n records.set(keyA!, merged);\n records.delete(keyB!);\n for (const [id, k] of index) {\n if (k === keyB) index.set(id, keyA!);\n }\n return { records, index };\n });\n },\n };\n});\n\n/**\n * Selector hook: subscribe to the record addressed by `id`. Returns\n * `undefined` until a row set or mutation has landed for that id (or for\n * another id linked to the same record).\n */\nexport function useTpSlRecord(id: bigint | undefined): TpSlRecord | undefined {\n return useTpSlStore((state) => {\n if (id === undefined) return undefined;\n const key = state.index.get(id);\n return key === undefined ? undefined : state.records.get(key);\n });\n}\n\n/** Reset the store — intended for tests only. */\nexport function __resetTpSlStore(): void {\n useTpSlStore.setState({ records: new Map(), index: new Map() });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tpsl-store.js","names":[],"sources":["../../src/tpsl/tpsl-store.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n QuoteTpSl,\n QuoteTpSlRow,\n RawTpSlNotificationState,\n TpSlInfoState,\n TpSlNotification,\n TpSlPriceType,\n} from \"@symmio/trading-core\";\nimport { create } from \"zustand\";\nimport { useShallow } from \"zustand/react/shallow\";\nimport { toQuoteTpSl } from \"./to-quote-tpsl\";\n\n/**\n * How long a `\"confirming\"` write survives a REST snapshot that does not list\n * it yet, in milliseconds.\n *\n * A refetch issued right after a POST routinely lands before the handler has\n * registered the order. Without this window the empty snapshot would fold to\n * `\"canceled\"` and erase the price the trader just set, so the side holds its\n * `\"confirming\"` state until a report arrives, the rows list it, or the window\n * closes.\n *\n * Deliberately longer than `DEFAULT_TPSL_CONFIRMATION_TIMEOUT_MS`: a grouped\n * run must reach its own deadline and release the guard itself, rather than\n * having the guard expire underneath it. This is the backstop for every other\n * caller, which has no deadline of its own.\n */\nexport const TPSL_CONFIRMING_GUARD_MS = 90_000;\n\n/** What a side is waiting for while it is `\"confirming\"`, and since when. */\nexport interface TpSlConfirmation {\n /** `\"write\"` — an order was submitted. `\"cancel\"` — a live order was cancelled. */\n intent: \"write\" | \"cancel\";\n /** Epoch milliseconds the side entered `\"confirming\"`. */\n at: number;\n /** Trigger price the write submitted — the evidence a snapshot must show. */\n price?: string;\n /**\n * Market price precision the write was signed at.\n *\n * The handler is sent — and stores — the trigger price rounded to this many\n * decimals, so a seed carrying more of them describes the same order. Without\n * it, a trader who types `0.00693` into a 4-decimal market would never see\n * their write confirmed: the rows come back `0.0069` and no comparison of the\n * two raw strings can tell \"rounded\" from \"different\".\n */\n pricePrecision?: number;\n /** Price type the write submitted. */\n priceType?: TpSlPriceType;\n /** Handler-issued id the write was told to expect, when the POST returned one. */\n cohQuoteId?: string;\n}\n\n/** One side of a quote's TP/SL record. */\nexport type TpSlSideKey = \"tp\" | \"sl\";\n\n/** Both sides — the default scope of a snapshot fold. */\nconst BOTH_SIDES: readonly TpSlSideKey[] = [\"tp\", \"sl\"];\n\n/**\n * Relative tolerance when matching a snapshot's trigger price against the one\n * a write submitted. Absorbs `\"1.50\"` vs `1.5` and JSON double round-tripping,\n * without accepting a genuinely different price.\n */\nconst PRICE_MATCH_TOLERANCE = 1e-9;\n\n/**\n * One quote's folded TP/SL state. The same record instance is referenced from\n * every id that resolves to it via {@link TpSlStoreState.index} — the caller\n * can pass either the on-chain `quoteId` or the hedger `tempQuoteId` and get\n * the same record back.\n *\n * `tpState` / `slState` is the single source of truth for how a side is\n * rendered — including the transient `\"confirming\"` phase between a POST\n * accepting and the WS report landing. No separate overlay field.\n */\nexport interface TpSlRecord {\n /** On-chain quote id — set once the quote anchors. */\n quoteId?: bigint;\n /** Hedger `tempQuoteId` — set during the pre-chain window. */\n tempQuoteId?: bigint;\n\n tp: string;\n sl: string;\n tpOpenPrice: string;\n slOpenPrice: string;\n tpPriceType: TpSlPriceType;\n slPriceType: TpSlPriceType;\n tpState: TpSlInfoState;\n slState: TpSlInfoState;\n tpCohQuoteId?: string;\n slCohQuoteId?: string;\n /** Set while `tpState` is `\"confirming\"`; cleared as soon as the side resolves. */\n tpConfirm?: TpSlConfirmation;\n /** Set while `slState` is `\"confirming\"`; cleared as soon as the side resolves. */\n slConfirm?: TpSlConfirmation;\n}\n\n/** Internal identity of a record — opaque string, never leaks to consumers. */\ntype TpSlRecordKey = string;\n\n/**\n * Zustand store shape. `records` holds one entry per quote; `index` maps every\n * id we've ever seen for that quote — on-chain and temp — to the same\n * `records` key.\n */\nexport interface TpSlStoreState {\n records: Map<TpSlRecordKey, TpSlRecord>;\n index: Map<bigint, TpSlRecordKey>;\n\n /** Read a record via any id. Returns `undefined` when the id is unknown. */\n get(id: bigint): TpSlRecord | undefined;\n\n /**\n * Fold the raw handler rows for **one quote** into snapshot fields and commit\n * under `id`, then alias the rows' `quote_id` onto the same record.\n *\n * A side left `\"confirming\"` by a `\"write\"` is held rather than cleared until\n * the rows show the submitted order — see {@link TPSL_CONFIRMING_GUARD_MS}.\n * A `\"cancel\"` is confirmed by absence, so an authoritative snapshot still\n * resolves both intents.\n *\n * Pass only one quote's rows. An account-wide page would alias a foreign\n * `quote_id` onto this record and merge two legs into one — use\n * {@link setRowsForSides} for those.\n */\n setRows(id: bigint, rows: QuoteTpSlRow[]): void;\n\n /**\n * {@link setRows} restricted to `sides`, and without the `quote_id` aliasing.\n *\n * The entry point for a snapshot whose authority is partial — an\n * account-scoped search that this caller only trusts for the sides it is\n * waiting on. Sides outside `sides` are left exactly as they were, so a page\n * that lags on an unrelated side cannot blank a live order.\n */\n setRowsForSides(id: bigint, rows: QuoteTpSlRow[], sides: readonly TpSlSideKey[]): void;\n\n /**\n * Mark a side as \"POST accepted, awaiting handler acknowledgement\". Sets\n * `tpState` / `slState` to `\"confirming\"` directly. Optional `patch`\n * seeds the trigger price / priceType / cohQuoteId so the UI can show\n * the target value during the confirming window; a later\n * {@link applyNotification} transitions the state to the wire report.\n *\n * `patch.intent` says what the side is waiting for — default `\"write\"`.\n * Cancels must pass `\"cancel\"`, otherwise the write guard in\n * {@link setRows} would keep holding a side the handler has already removed.\n *\n * A write's `price` / `priceType` / `cohQuoteId` are also kept as the\n * evidence a later snapshot must show before the side counts as confirmed,\n * so a stale row cannot settle an edit that never landed.\n */\n markConfirming(\n id: bigint,\n side: TpSlSideKey,\n patch?: {\n price?: string;\n pricePrecision?: number;\n priceType?: TpSlPriceType;\n cohQuoteId?: string;\n intent?: TpSlConfirmation[\"intent\"];\n },\n ): void;\n\n /**\n * Drop a side's confirmation guard without touching its rendered state, so\n * the next {@link setRows} writes the handler's rows through unheld.\n *\n * Called when a run gives up waiting for the report: the REST snapshot — even\n * an empty one — becomes the truth again.\n */\n clearConfirming(id: bigint, side: TpSlSideKey): void;\n\n /**\n * Apply a WS notification to the record's side state (and optionally its\n * trigger price when `details.trigger_price` is present). Maps the raw\n * notification state onto {@link TpSlInfoState}. Failure frames\n * (`successful: false`) are ignored — the confirming state remains until\n * the next successful frame or REST fetch resolves it.\n */\n applyNotification(id: bigint, notification: TpSlNotification): void;\n\n /**\n * Declare that two ids refer to the same TP/SL record — typically called\n * when the quote reconciliation layer learns a `tempQuoteId ↔ quoteId`\n * pairing from a solver notification.\n */\n link(a: bigint, b: bigint): void;\n}\n\nfunction blank(): TpSlRecord {\n return {\n tp: \"\",\n sl: \"\",\n tpOpenPrice: \"\",\n slOpenPrice: \"\",\n tpPriceType: \"markPrice\",\n slPriceType: \"markPrice\",\n tpState: \"canceled\",\n slState: \"canceled\",\n };\n}\n\n/**\n * Fold a REST snapshot onto a record, over `sides` only, without erasing or\n * falsely settling a write the handler has not published yet.\n *\n * `sides` exists because a snapshot is not always about the whole record: an\n * account-scoped page may legitimately lag on one side, and folding that side\n * anyway would blank a live order the caller never asked about. A per-quote\n * read passes both sides and behaves exactly as before.\n */\nfunction foldSnapshot(prev: TpSlRecord, folded: QuoteTpSl, sides: readonly TpSlSideKey[]): TpSlRecord {\n const next: TpSlRecord = { ...prev };\n if (sides.includes(\"tp\")) {\n if (holdsConfirming(prev.tpConfirm, folded.tpState, folded.tp, folded.tpCohQuoteId)) {\n next.tpState = \"confirming\";\n } else {\n next.tp = folded.tp;\n next.tpOpenPrice = folded.tpOpenPrice;\n next.tpPriceType = folded.tpPriceType;\n next.tpCohQuoteId = folded.tpCohQuoteId;\n next.tpState = folded.tpState;\n next.tpConfirm = undefined;\n }\n }\n if (sides.includes(\"sl\")) {\n if (holdsConfirming(prev.slConfirm, folded.slState, folded.sl, folded.slCohQuoteId)) {\n next.slState = \"confirming\";\n } else {\n next.sl = folded.sl;\n next.slOpenPrice = folded.slOpenPrice;\n next.slPriceType = folded.slPriceType;\n next.slCohQuoteId = folded.slCohQuoteId;\n next.slState = folded.slState;\n next.slConfirm = undefined;\n }\n }\n return next;\n}\n\n/**\n * Whether a snapshot must leave a `\"confirming\"` side alone.\n *\n * A write is settled only by **evidence of the order it submitted**, and the\n * trigger price is that evidence. Absence is not evidence, and neither is a\n * *stale* row: a snapshot still showing the pre-edit price would otherwise\n * report an edit as confirmed and render the old price as though it were live.\n *\n * Two things are deliberately **not** part of the test:\n *\n * - **The handler id, whenever a price is known.** It is not reliably per-order:\n * this deployment issues one `coh_quote_id` per *quote*, shared by both sides\n * and by every superseded order in that quote's history — so a matching id\n * would happily settle a write against the row it was replacing. It is kept\n * only as a fallback for a confirmation that seeded no price at all.\n * - **The price type.** The handler stores its own (`market` / `last_close`\n * values both appear on a single quote), so requiring it to echo what was\n * submitted would strand a perfectly good write in `\"confirming\"` until the\n * deadline. A type-only edit therefore settles on the first live row; the\n * report corrects the rendered type a moment later.\n *\n * A cancel is never held: absence is exactly what it is waiting for.\n */\nfunction holdsConfirming(\n confirmation: TpSlConfirmation | undefined,\n foldedState: TpSlInfoState,\n foldedPrice: string,\n foldedCohQuoteId: string | undefined,\n): boolean {\n if (confirmation?.intent !== \"write\") return false;\n if (Date.now() - confirmation.at >= TPSL_CONFIRMING_GUARD_MS) return false;\n if (foldedState === \"canceled\") return true;\n if (confirmation.price !== undefined) {\n return !pricesMatch(confirmation.price, foldedPrice, confirmation.pricePrecision);\n }\n if (confirmation.cohQuoteId !== undefined && foldedCohQuoteId !== undefined) {\n return foldedCohQuoteId !== confirmation.cohQuoteId;\n }\n return false;\n}\n\n/**\n * Field-wise equality of two records. Confirmations compare by reference —\n * `foldSnapshot` either carries the previous instance through or drops it, so a\n * new instance always means a real change.\n */\nfunction isSameRecord(a: TpSlRecord, b: TpSlRecord): boolean {\n return (\n a.quoteId === b.quoteId &&\n a.tempQuoteId === b.tempQuoteId &&\n a.tp === b.tp &&\n a.sl === b.sl &&\n a.tpOpenPrice === b.tpOpenPrice &&\n a.slOpenPrice === b.slOpenPrice &&\n a.tpPriceType === b.tpPriceType &&\n a.slPriceType === b.slPriceType &&\n a.tpState === b.tpState &&\n a.slState === b.slState &&\n a.tpCohQuoteId === b.tpCohQuoteId &&\n a.slCohQuoteId === b.slCohQuoteId &&\n a.tpConfirm === b.tpConfirm &&\n a.slConfirm === b.slConfirm\n );\n}\n\n/**\n * Numeric trigger-price equality within {@link PRICE_MATCH_TOLERANCE}.\n *\n * When the write recorded the precision it was signed at, both sides are\n * rounded to it first — the handler stores the rounded value, so `0.00693` and\n * a returned `0.0069` are the same order in a 4-decimal market. Rounding both\n * (rather than trusting the returned value's decimal count, which JSON strips\n * trailing zeros from) keeps a genuine edit distinguishable: at precision 2,\n * `2.14` against a stale `2.1` still rounds to `2.14` vs `2.10`.\n */\nfunction pricesMatch(expected: string, actual: string, pricePrecision?: number): boolean {\n if (expected === actual) return true;\n let left = Number(expected);\n let right = Number(actual);\n if (!Number.isFinite(left) || !Number.isFinite(right)) return false;\n if (pricePrecision !== undefined && Number.isInteger(pricePrecision) && pricePrecision >= 0) {\n left = Number(left.toFixed(pricePrecision));\n right = Number(right.toFixed(pricePrecision));\n }\n const scale = Math.max(Math.abs(left), Math.abs(right), 1);\n return Math.abs(left - right) <= PRICE_MATCH_TOLERANCE * scale;\n}\n\n/** Map the WS notification state onto {@link TpSlInfoState}. */\nfunction mapNotificationState(state: RawTpSlNotificationState): TpSlInfoState {\n switch (state) {\n case \"new\":\n case \"edit\":\n return \"new\";\n case \"pending\":\n return \"pending\";\n case \"triggered\":\n case \"trigger\":\n return \"triggered\";\n case \"cancel\":\n case \"canceled\":\n case \"cancelled\":\n case \"close\":\n return \"canceled\";\n default:\n return \"new\";\n }\n}\n\n/**\n * Module-level Zustand store for the folded TP/SL snapshot per quote. Single\n * instance across the app is intentional (see AGENTS.md — \"TP/SL data live in\n * one place\"); tests can call {@link __resetTpSlStore} between runs to reset.\n */\nexport const useTpSlStore = create<TpSlStoreState>((set, get) => {\n let keyCounter = 0;\n function newKey(): TpSlRecordKey {\n keyCounter += 1;\n return `r${keyCounter}`;\n }\n\n function upsert(id: bigint, mutator: (prev: TpSlRecord) => TpSlRecord): void {\n set((state) => {\n const records = new Map(state.records);\n const index = new Map(state.index);\n let key = index.get(id);\n let prev: TpSlRecord;\n if (key === undefined) {\n key = newKey();\n prev = blank();\n index.set(id, key);\n } else {\n prev = records.get(key) ?? blank();\n }\n const next = mutator(prev);\n if (id < 0n) {\n next.tempQuoteId ??= id;\n } else {\n next.quoteId ??= id;\n }\n /**\n * A fold that changed nothing returns the state object itself, so\n * zustand's `Object.is` check skips the notification entirely. Without\n * this a 2s fallback sweep would wake every waiter and re-render every\n * TP/SL cell on each tick that merely confirmed the status quo.\n */\n if (index.get(id) === key && isSameRecord(prev, next)) return state;\n records.set(key, next);\n return { records, index };\n });\n }\n\n return {\n records: new Map(),\n index: new Map(),\n\n get(id) {\n const state = get();\n const key = state.index.get(id);\n return key === undefined ? undefined : state.records.get(key);\n },\n\n setRows(id, rows) {\n const folded = toQuoteTpSl(rows);\n const rowQuoteId = rows.find((r) => r.quote_id && r.quote_id !== 0)?.quote_id;\n upsert(id, (prev) => foldSnapshot(prev, folded, BOTH_SIDES));\n if (rowQuoteId !== undefined) {\n const rowId = BigInt(rowQuoteId);\n if (rowId !== id) get().link(id, rowId);\n }\n },\n\n setRowsForSides(id, rows, sides) {\n if (sides.length === 0) return;\n const folded = toQuoteTpSl(rows);\n upsert(id, (prev) => foldSnapshot(prev, folded, sides));\n },\n\n markConfirming(id, side, patch) {\n const confirmation: TpSlConfirmation = {\n intent: patch?.intent ?? \"write\",\n at: Date.now(),\n price: patch?.price,\n pricePrecision: patch?.pricePrecision,\n priceType: patch?.priceType,\n cohQuoteId: patch?.cohQuoteId,\n };\n upsert(id, (prev) => {\n const next: TpSlRecord = { ...prev };\n if (side === \"tp\") {\n next.tpState = \"confirming\";\n next.tpConfirm = confirmation;\n if (patch?.price !== undefined) next.tp = patch.price;\n if (patch?.priceType !== undefined) next.tpPriceType = patch.priceType;\n if (patch?.cohQuoteId !== undefined) next.tpCohQuoteId = patch.cohQuoteId;\n } else {\n next.slState = \"confirming\";\n next.slConfirm = confirmation;\n if (patch?.price !== undefined) next.sl = patch.price;\n if (patch?.priceType !== undefined) next.slPriceType = patch.priceType;\n if (patch?.cohQuoteId !== undefined) next.slCohQuoteId = patch.cohQuoteId;\n }\n return next;\n });\n },\n\n clearConfirming(id, side) {\n const record = get().get(id);\n if (!record) return;\n if (side === \"tp\" ? record.tpConfirm === undefined : record.slConfirm === undefined) return;\n upsert(id, (prev) => (side === \"tp\" ? { ...prev, tpConfirm: undefined } : { ...prev, slConfirm: undefined }));\n },\n\n applyNotification(id, notification) {\n if (!notification.successful) return;\n const side =\n notification.conditionalOrderType === \"take_profit\"\n ? \"tp\"\n : notification.conditionalOrderType === \"stop_loss\"\n ? \"sl\"\n : null;\n if (!side) return;\n const nextState = mapNotificationState(notification.state);\n const trigger = notification.details?.trigger_price;\n upsert(id, (prev) => {\n const next: TpSlRecord = { ...prev };\n if (side === \"tp\") {\n next.tpState = nextState;\n next.tpConfirm = undefined;\n if (nextState === \"canceled\") {\n next.tp = \"\";\n next.tpOpenPrice = \"\";\n next.tpCohQuoteId = undefined;\n } else {\n if (trigger !== undefined) next.tp = String(trigger);\n if (notification.cohQuoteId) next.tpCohQuoteId = notification.cohQuoteId;\n }\n } else {\n next.slState = nextState;\n next.slConfirm = undefined;\n if (nextState === \"canceled\") {\n next.sl = \"\";\n next.slOpenPrice = \"\";\n next.slCohQuoteId = undefined;\n } else {\n if (trigger !== undefined) next.sl = String(trigger);\n if (notification.cohQuoteId) next.slCohQuoteId = notification.cohQuoteId;\n }\n }\n return next;\n });\n },\n\n link(a, b) {\n if (a === b) return;\n set((state) => {\n const records = new Map(state.records);\n const index = new Map(state.index);\n const keyA = index.get(a);\n const keyB = index.get(b);\n\n if (keyA === undefined && keyB === undefined) {\n const key = newKey();\n const record = blank();\n if (a < 0n) record.tempQuoteId = a;\n else record.quoteId = a;\n if (b < 0n) record.tempQuoteId ??= b;\n else record.quoteId ??= b;\n records.set(key, record);\n index.set(a, key);\n index.set(b, key);\n return { records, index };\n }\n\n if (keyA !== undefined && keyB === undefined) {\n index.set(b, keyA);\n const prev = records.get(keyA);\n if (prev) {\n const next: TpSlRecord = { ...prev };\n if (b < 0n) next.tempQuoteId ??= b;\n else next.quoteId ??= b;\n records.set(keyA, next);\n }\n return { records, index };\n }\n\n if (keyA === undefined && keyB !== undefined) {\n index.set(a, keyB);\n const prev = records.get(keyB);\n if (prev) {\n const next: TpSlRecord = { ...prev };\n if (a < 0n) next.tempQuoteId ??= a;\n else next.quoteId ??= a;\n records.set(keyB, next);\n }\n return { records, index };\n }\n\n if (keyA === keyB) return state;\n\n const recordA = records.get(keyA!) ?? blank();\n const recordB = records.get(keyB!) ?? blank();\n const merged: TpSlRecord = {\n ...recordA,\n quoteId: recordA.quoteId ?? recordB.quoteId,\n tempQuoteId: recordA.tempQuoteId ?? recordB.tempQuoteId,\n ...(recordA.tpState === \"canceled\" && recordB.tpState !== \"canceled\"\n ? {\n tp: recordB.tp,\n tpOpenPrice: recordB.tpOpenPrice,\n tpPriceType: recordB.tpPriceType,\n tpState: recordB.tpState,\n tpCohQuoteId: recordB.tpCohQuoteId,\n tpConfirm: recordB.tpConfirm,\n }\n : {}),\n ...(recordA.slState === \"canceled\" && recordB.slState !== \"canceled\"\n ? {\n sl: recordB.sl,\n slOpenPrice: recordB.slOpenPrice,\n slPriceType: recordB.slPriceType,\n slState: recordB.slState,\n slCohQuoteId: recordB.slCohQuoteId,\n slConfirm: recordB.slConfirm,\n }\n : {}),\n };\n records.set(keyA!, merged);\n records.delete(keyB!);\n for (const [id, k] of index) {\n if (k === keyB) index.set(id, keyA!);\n }\n return { records, index };\n });\n },\n };\n});\n\n/**\n * Selector hook: subscribe to the record addressed by `id`. Returns\n * `undefined` until a row set or mutation has landed for that id (or for\n * another id linked to the same record).\n */\nexport function useTpSlRecord(id: bigint | undefined): TpSlRecord | undefined {\n return useTpSlStore((state) => {\n if (id === undefined) return undefined;\n const key = state.index.get(id);\n return key === undefined ? undefined : state.records.get(key);\n });\n}\n\n/**\n * Selector hook: subscribe to the records addressed by `ids`, in input order.\n * The grouped counterpart of {@link useTpSlRecord} — one subscription for N\n * children, which a `.map` over children could not do legally anyway.\n *\n * Shallow-compared, so an unrelated record's update does not re-render the\n * group. Pass a stable `ids` array (memoize it) to avoid recomputing per render.\n *\n * @param ids - Quote ids, on-chain or temp. `undefined` entries yield `undefined`.\n * @returns One record (or `undefined`) per input id, in the same order.\n */\nexport function useTpSlRecords(ids: readonly (bigint | undefined)[]): Array<TpSlRecord | undefined> {\n return useTpSlStore(\n useShallow((state) =>\n ids.map((id) => {\n if (id === undefined) return undefined;\n const key = state.index.get(id);\n return key === undefined ? undefined : state.records.get(key);\n }),\n ),\n );\n}\n\n/** Reset the store — intended for tests only. */\nexport function __resetTpSlStore(): void {\n useTpSlStore.setState({ records: new Map(), index: new Map() });\n}\n"],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { ConfigParameter, GroupTpSlChild, GroupTpSlDeleteScope, PlanGroupTpSlDeleteResult, TpSlConditionalOrderType } from '@symmio/trading-core';
2
+ import { Address } from 'viem';
3
+ import { SymmioRequestError } from '../errors/symmio-request-error.js';
4
+ /**
5
+ * Lifecycle of one cancel inside a grouped TP/SL delete run: `queued` →
6
+ * `deleting` (request in flight) → `confirming` (handler returned 200) →
7
+ * `done` (the WebSocket reported the order gone), or `failed`.
8
+ */
9
+ export type DeleteQuoteGroupTpSlStepStatus = "queued" | "deleting" | "confirming" | "done" | "failed";
10
+ /** Live state of one cancel. */
11
+ export interface DeleteQuoteGroupTpSlStep {
12
+ /** Stable step identity, `"<childKey>:<side>"`. */
13
+ id: string;
14
+ /** Child identity (`GroupTpSlChild.key`). */
15
+ key: string;
16
+ /** On-chain quote id. */
17
+ quoteId: bigint;
18
+ /** Side being cancelled. */
19
+ conditionalOrderType: TpSlConditionalOrderType;
20
+ /** Handler-issued conditional-order id being cancelled. */
21
+ cohQuoteId: string;
22
+ /** Current stage. */
23
+ status: DeleteQuoteGroupTpSlStepStatus;
24
+ /** Normalized error, when `status` is `"failed"`. */
25
+ error?: SymmioRequestError;
26
+ }
27
+ /** Overall lifecycle of a grouped TP/SL delete run. */
28
+ export type DeleteQuoteGroupTpSlStatus = "idle"
29
+ /** At least one cancel is in flight. */
30
+ | "deleting"
31
+ /** Every request settled; at least one cancel still awaits its handler report. */
32
+ | "confirming"
33
+ /** Every cancel is confirmed gone. */
34
+ | "success"
35
+ /** Some cancels were accepted, some failed. */
36
+ | "partial"
37
+ /** Every cancel failed. */
38
+ | "failed";
39
+ /** Inputs for one {@link UseDeleteQuoteGroupTpSlReturnType.deleteOrders} run. */
40
+ export interface DeleteQuoteGroupTpSlParameters {
41
+ /** Children with their confirmed snapshots — from {@link useQuoteGroupTpSl}. */
42
+ children: readonly GroupTpSlChild[];
43
+ /** Which side(s) to cancel. Default `"all"`. */
44
+ scope?: GroupTpSlDeleteScope;
45
+ /**
46
+ * SubAccount that owns the orders' Virtual Accounts. Pass it: the handler
47
+ * publishes its reports on this account's stream, so without it a cancel is
48
+ * only confirmed by the fallback sweep.
49
+ */
50
+ subAccount?: Address;
51
+ /**
52
+ * Accounts whose live streams confirm the cancels. Overrides the default,
53
+ * which is `subAccount` plus every targeted order's Virtual Account.
54
+ */
55
+ notificationsAccounts?: readonly Address[];
56
+ /**
57
+ * Single-account form of {@link DeleteQuoteGroupTpSlParameters.notificationsAccounts}.
58
+ *
59
+ * @deprecated Pass `notificationsAccounts`. A grouped position can span
60
+ * Virtual Accounts, so one address rarely covers the whole run.
61
+ */
62
+ notificationsAccount?: Address;
63
+ /**
64
+ * How long a cancel may wait for its report before the run refetches the
65
+ * handler's rows and, failing that, gives up on it. Defaults to
66
+ * {@link DEFAULT_TPSL_CONFIRMATION_TIMEOUT_MS}.
67
+ */
68
+ confirmationTimeoutMs?: number;
69
+ /**
70
+ * How long the WebSocket report gets on its own before the fallback sweep
71
+ * starts, in milliseconds. Defaults to {@link TPSL_FALLBACK_POLL_DELAY_MS}.
72
+ */
73
+ fallbackPollDelayMs?: number;
74
+ /**
75
+ * Cadence of the fallback sweep once it has started, in milliseconds.
76
+ * Defaults to {@link TPSL_FALLBACK_POLL_INTERVAL_MS}; `0` disables it.
77
+ */
78
+ fallbackPollIntervalMs?: number;
79
+ /** Delegated session key to sign from, when delegation is active. */
80
+ from?: Address;
81
+ /**
82
+ * How many cancels may be in flight at once. Default `4` — a cancel is a
83
+ * short signed request with no price to confirm, so a bounded pool is a large
84
+ * UX win over serializing. Set `1` when signing with a popup wallet.
85
+ */
86
+ concurrency?: number;
87
+ /** Chain override; defaults to the connected chain. */
88
+ chainId?: number;
89
+ /** Restrict the run to these `"<childKey>:<side>"` step ids — the retry-failed-only path. */
90
+ only?: readonly string[];
91
+ }
92
+ /**
93
+ * Outcome of one delete run, reported once the handler has confirmed every
94
+ * cancel gone — or the run has given up waiting for it.
95
+ */
96
+ export interface DeleteQuoteGroupTpSlSummary {
97
+ /** `true` when every planned cancel was accepted **and** confirmed gone. */
98
+ ok: boolean;
99
+ /** Cancels the handler accepted. */
100
+ deletedCount: number;
101
+ /** Cancels the handler's report confirmed gone. */
102
+ confirmedCount: number;
103
+ /** Cancels that failed. */
104
+ failedCount: number;
105
+ /** Per-step final states at resolve time. */
106
+ steps: DeleteQuoteGroupTpSlStep[];
107
+ /** The plan the run executed — inspect `skipped` for in-flight or local-only sides. */
108
+ plan: PlanGroupTpSlDeleteResult;
109
+ /** First error, when any cancel failed. */
110
+ error?: SymmioRequestError;
111
+ }
112
+ /** Return type of {@link useDeleteQuoteGroupTpSl}. */
113
+ export interface UseDeleteQuoteGroupTpSlReturnType {
114
+ /**
115
+ * Plan and execute a grouped cancel. Resolves once the handler has reported
116
+ * every order gone or the run gave up waiting (never rejects).
117
+ */
118
+ deleteOrders: (parameters: DeleteQuoteGroupTpSlParameters) => Promise<DeleteQuoteGroupTpSlSummary>;
119
+ /** Re-run only the cancels that failed, against fresh children when supplied. Never rejects. */
120
+ retryFailed: (children?: readonly GroupTpSlChild[]) => Promise<DeleteQuoteGroupTpSlSummary>;
121
+ /** Clear the run state back to `idle`. No-op while a run is in flight. */
122
+ reset: () => void;
123
+ /** Overall run lifecycle. */
124
+ status: DeleteQuoteGroupTpSlStatus;
125
+ /** `true` while a cancel request is in flight. */
126
+ isDeleting: boolean;
127
+ /** `true` while every request has settled but some cancel still awaits its handler report. */
128
+ isConfirming: boolean;
129
+ /**
130
+ * Step-weighted completion, `0`–`100` (2-decimal resolution). A cancel the
131
+ * handler accepted but has not reported gone yet does **not** count.
132
+ */
133
+ progressPercent: number;
134
+ /** Per-step states of the current/last run, in execution order. */
135
+ steps: DeleteQuoteGroupTpSlStep[];
136
+ /** The last run's plan. */
137
+ plan?: PlanGroupTpSlDeleteResult;
138
+ /** First error of the last run, when a cancel failed. */
139
+ error?: SymmioRequestError;
140
+ }
141
+ /** Parameters for {@link useDeleteQuoteGroupTpSl}. */
142
+ export type UseDeleteQuoteGroupTpSlParameters = ConfigParameter;
143
+ /**
144
+ * Cancel take-profit / stop-loss orders across a grouped position.
145
+ *
146
+ * `planGroupTpSlDelete` enumerates the cancellable orders first, reading each
147
+ * `cohQuoteId` off the child's **confirmed** snapshot — never off an edit
148
+ * buffer — and excluding sides that are still mid-flight. The cancels then run
149
+ * through a bounded worker pool (4 at a time by default) with no
150
+ * short-circuit: one rejection fails only its own step.
151
+ *
152
+ * A cancel goes `confirming` on a 200 and `done` when the WebSocket reports the
153
+ * order gone.
154
+ *
155
+ * @param parameters - Optional config override.
156
+ * @returns The run controls and its live per-step state.
157
+ *
158
+ * @example
159
+ * ```tsx
160
+ * const { deleteOrders, steps } = useDeleteQuoteGroupTpSl();
161
+ * const summary = await deleteOrders({ children, scope: "all" });
162
+ * ```
163
+ */
164
+ export declare function useDeleteQuoteGroupTpSl(parameters?: UseDeleteQuoteGroupTpSlParameters): UseDeleteQuoteGroupTpSlReturnType;
165
+ //# sourceMappingURL=use-delete-quote-group-tpsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-delete-quote-group-tpsl.d.ts","sourceRoot":"","sources":["../../src/tpsl/use-delete-quote-group-tpsl.ts"],"names":[],"mappings":"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"}