@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
@@ -0,0 +1,31 @@
1
+ import { TpSlConditionalOrderType } from '@symmio/trading-core';
2
+ import { TpSlRecord } from './tpsl-store.js';
3
+ /**
4
+ * Whether the handler has acknowledged a **write** on this side — the shared
5
+ * store moved it out of the optimistic `confirming` / `pending` window into a
6
+ * live state.
7
+ *
8
+ * The store is fed by every TP/SL signal (any WebSocket subscription's
9
+ * `applyNotification`, and the success refetch's `setRows`), so a run step that
10
+ * reads it resolves no matter which signal delivered the update — even when the
11
+ * run hook's own subscription never received the frame.
12
+ *
13
+ * `"pending"` counts: the handler holds the order, which is what the write was
14
+ * waiting to learn, and it is one of the states the fallback sweep explicitly
15
+ * asks for. `"killed"` does not appear here because no signal can produce it —
16
+ * `toQuoteTpSl` maps a killed row to "no active order" and the frame parser has
17
+ * no such state.
18
+ */
19
+ export declare function isWriteSideSettled(record: TpSlRecord, side: TpSlConditionalOrderType): boolean;
20
+ /**
21
+ * Whether the handler has confirmed a **cancel** on this side — the store shows
22
+ * it gone.
23
+ *
24
+ * Keyed on `state === "canceled"` only, never on an empty trigger value: a
25
+ * blank/unseeded record also has an empty value, and that must not read as a
26
+ * confirmed cancel. Both real signals resolve here — the WebSocket `cancel`
27
+ * frame maps to `"canceled"`, and a post-cancel refetch that returns no rows
28
+ * folds (via `toQuoteTpSl`) to `"canceled"` too.
29
+ */
30
+ export declare function isCancelSideSettled(record: TpSlRecord, side: TpSlConditionalOrderType): boolean;
31
+ //# sourceMappingURL=settled-side.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-side.d.ts","sourceRoot":"","sources":["../../src/tpsl/settled-side.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAG9F;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAE/F"}
@@ -0,0 +1,21 @@
1
+ //#region src/tpsl/settled-side.ts
2
+ function e(e, t) {
3
+ return t === "take_profit" ? {
4
+ state: e.tpState,
5
+ value: e.tp
6
+ } : {
7
+ state: e.slState,
8
+ value: e.sl
9
+ };
10
+ }
11
+ function t(t, n) {
12
+ let { state: r } = e(t, n);
13
+ return r === "new" || r === "pending" || r === "triggered";
14
+ }
15
+ function n(t, n) {
16
+ return e(t, n).state === "canceled";
17
+ }
18
+ //#endregion
19
+ export { n as isCancelSideSettled, t as isWriteSideSettled };
20
+
21
+ //# sourceMappingURL=settled-side.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-side.js","names":[],"sources":["../../src/tpsl/settled-side.ts"],"sourcesContent":["import type { TpSlConditionalOrderType } from \"@symmio/trading-core\";\nimport type { TpSlRecord } from \"./tpsl-store\";\n\n/** A side's confirmed lifecycle state and trigger value, off a folded record. */\nfunction sideOf(record: TpSlRecord, side: TpSlConditionalOrderType): { state: string; value: string } {\n return side === \"take_profit\"\n ? { state: record.tpState, value: record.tp }\n : { state: record.slState, value: record.sl };\n}\n\n/**\n * Whether the handler has acknowledged a **write** on this side — the shared\n * store moved it out of the optimistic `confirming` / `pending` window into a\n * live state.\n *\n * The store is fed by every TP/SL signal (any WebSocket subscription's\n * `applyNotification`, and the success refetch's `setRows`), so a run step that\n * reads it resolves no matter which signal delivered the update — even when the\n * run hook's own subscription never received the frame.\n *\n * `\"pending\"` counts: the handler holds the order, which is what the write was\n * waiting to learn, and it is one of the states the fallback sweep explicitly\n * asks for. `\"killed\"` does not appear here because no signal can produce it —\n * `toQuoteTpSl` maps a killed row to \"no active order\" and the frame parser has\n * no such state.\n */\nexport function isWriteSideSettled(record: TpSlRecord, side: TpSlConditionalOrderType): boolean {\n const { state } = sideOf(record, side);\n return state === \"new\" || state === \"pending\" || state === \"triggered\";\n}\n\n/**\n * Whether the handler has confirmed a **cancel** on this side — the store shows\n * it gone.\n *\n * Keyed on `state === \"canceled\"` only, never on an empty trigger value: a\n * blank/unseeded record also has an empty value, and that must not read as a\n * confirmed cancel. Both real signals resolve here — the WebSocket `cancel`\n * frame maps to `\"canceled\"`, and a post-cancel refetch that returns no rows\n * folds (via `toQuoteTpSl`) to `\"canceled\"` too.\n */\nexport function isCancelSideSettled(record: TpSlRecord, side: TpSlConditionalOrderType): boolean {\n return sideOf(record, side).state === \"canceled\";\n}\n"],"mappings":";AAIA,SAAS,EAAO,GAAoB,GAAkE;CACpG,OAAO,MAAS,gBACZ;EAAE,OAAO,EAAO;EAAS,OAAO,EAAO;CAAG,IAC1C;EAAE,OAAO,EAAO;EAAS,OAAO,EAAO;CAAG;AAChD;AAkBA,SAAgB,EAAmB,GAAoB,GAAyC;CAC9F,IAAM,EAAE,aAAU,EAAO,GAAQ,CAAI;CACrC,OAAO,MAAU,SAAS,MAAU,aAAa,MAAU;AAC7D;AAYA,SAAgB,EAAoB,GAAoB,GAAyC;CAC/F,OAAO,EAAO,GAAQ,CAAI,EAAE,UAAU;AACxC"}
@@ -0,0 +1,74 @@
1
+ import { Config } from '@symmio/trading-core';
2
+ import { Address } from 'viem';
3
+ import { TpSlWaitingSide } from './apply-tpsl-search-snapshot.js';
4
+ /**
5
+ * How long the WebSocket report gets on its own before the sweep starts, in
6
+ * milliseconds.
7
+ *
8
+ * The sweep is a fallback, not a second opinion: while a report can still
9
+ * plausibly arrive, asking the handler adds load and answers nothing the socket
10
+ * was not about to say. A report that has not landed within this window is not
11
+ * coming, and only then is it worth reading the handler directly.
12
+ */
13
+ export declare const TPSL_FALLBACK_POLL_DELAY_MS = 30000;
14
+ /** Default cadence of the fallback sweep once it has started, in milliseconds. */
15
+ export declare const TPSL_FALLBACK_POLL_INTERVAL_MS = 2000;
16
+ /** A side the caller is waiting on, plus the account whose stream should report it. */
17
+ export interface TpSlPollWaitingSide extends TpSlWaitingSide {
18
+ /** Virtual Account that owns the order — the handler's `party_a_address`. */
19
+ account: Address;
20
+ }
21
+ /** Parameters for {@link startTpSlFallbackPoll}. */
22
+ export interface StartTpSlFallbackPollParameters {
23
+ /**
24
+ * The sides still awaiting confirmation, re-read on every tick and again
25
+ * when a response lands. Returning an empty list stops the sweep.
26
+ */
27
+ getWaiting: () => readonly TpSlPollWaitingSide[];
28
+ /** Chain override; defaults to the config's default chain. */
29
+ chainId?: number;
30
+ /**
31
+ * How long to leave the report alone before the first sweep. Defaults to
32
+ * {@link TPSL_FALLBACK_POLL_DELAY_MS}. `0` sweeps after one interval.
33
+ */
34
+ delayMs?: number;
35
+ /** Tick cadence after the first sweep. Defaults to {@link TPSL_FALLBACK_POLL_INTERVAL_MS}. `0` disables. */
36
+ intervalMs?: number;
37
+ }
38
+ /** Handle returned by {@link startTpSlFallbackPoll}. */
39
+ export interface TpSlFallbackPoll {
40
+ /** Stop this lease. Idempotent; safe to call after the sweep already ended. */
41
+ stop: () => void;
42
+ }
43
+ /**
44
+ * Poll the TP/SL handler for the orders a run is waiting on, as a fallback for
45
+ * a WebSocket report that never arrives.
46
+ *
47
+ * One `POST /api/v5/search/` per distinct Virtual Account per tick — never one
48
+ * per leg — and results are folded into the shared TP/SL store, which is what
49
+ * both the run's waiter and every mounted cell reconcile against. Leases on the
50
+ * same `(config, chain, account)` share one loop and one in-flight request, so
51
+ * a set-run and a cancel-run confirming on the same account still cost one
52
+ * request between them.
53
+ *
54
+ * The sweep is single-flight (a tick that finds a request in flight reschedules
55
+ * rather than stacking), backs off exponentially on handler errors, and stops
56
+ * as soon as `getWaiting()` comes back empty — as well as on `stop()`.
57
+ *
58
+ * @param config - The SDK config; also the scope the loops are registered under.
59
+ * @param parameters - The waiting-side probe, chain override and cadence.
60
+ * @returns A handle whose `stop()` releases this lease.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const poll = startTpSlFallbackPoll(config, {
65
+ * getWaiting: () => waitingSidesOf(runRef.current.steps),
66
+ * });
67
+ * // later, when the run resolves:
68
+ * poll.stop();
69
+ * ```
70
+ */
71
+ export declare function startTpSlFallbackPoll(config: Config, parameters: StartTpSlFallbackPollParameters): TpSlFallbackPoll;
72
+ /** Tear down every sweep loop. Intended for tests only. */
73
+ export declare function __resetTpSlFallbackPolls(config: Config): void;
74
+ //# sourceMappingURL=tpsl-fallback-poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tpsl-fallback-poll.d.ts","sourceRoot":"","sources":["../../src/tpsl/tpsl-fallback-poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE7F;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAElD,kFAAkF;AAClF,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAQpD,uFAAuF;AACvF,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,oDAAoD;AACpD,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,UAAU,EAAE,MAAM,SAAS,mBAAmB,EAAE,CAAC;IACjD,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4GAA4G;IAC5G,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAmCD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,+BAA+B,GAAG,gBAAgB,CAgInH;AAED,2DAA2D;AAC3D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO7D"}
@@ -0,0 +1,101 @@
1
+ import { applyTpSlSearchSnapshot as e } from "./apply-tpsl-search-snapshot.js";
2
+ import { searchTpSlOrders as t } from "@symmio/trading-core";
3
+ var n = 1e4, r = 3e4, i = /* @__PURE__ */ new WeakMap();
4
+ function a(e) {
5
+ let t = i.get(e);
6
+ return t || (t = /* @__PURE__ */ new Map(), i.set(e, t)), t;
7
+ }
8
+ function o(i, o) {
9
+ let s = o.intervalMs ?? 2e3;
10
+ if (s <= 0) return { stop: () => {} };
11
+ let c = o.delayMs ?? 3e4, l = {
12
+ getWaiting: o.getWaiting,
13
+ delayMs: c,
14
+ intervalMs: s,
15
+ disposed: !1
16
+ }, u = a(i), d = /* @__PURE__ */ new Set(), f;
17
+ try {
18
+ f = i.getChainConfig(o.chainId).chainId;
19
+ } catch {
20
+ return { stop: () => {} };
21
+ }
22
+ function p(e) {
23
+ return `${f}:${e.toLowerCase()}`;
24
+ }
25
+ function m(e) {
26
+ let t = /* @__PURE__ */ new Map();
27
+ for (let n of e) t.set(p(n.account), n.account);
28
+ return t;
29
+ }
30
+ function h(e, t, n, r) {
31
+ e.timer === void 0 && (e.timer = setTimeout(() => {
32
+ e.timer = void 0, y(e, t, n);
33
+ }, r));
34
+ }
35
+ function g(e, t) {
36
+ e.timer !== void 0 && clearTimeout(e.timer), e.timer = void 0, u.delete(t);
37
+ }
38
+ function _(e, t) {
39
+ let n = [];
40
+ for (let r of e.leases) {
41
+ if (r.disposed) {
42
+ e.leases.delete(r);
43
+ continue;
44
+ }
45
+ for (let e of r.getWaiting()) p(e.account) === t && n.push(e);
46
+ }
47
+ return n;
48
+ }
49
+ function v(e) {
50
+ let t = Infinity;
51
+ for (let n of e.leases) n.disposed || (t = Math.min(t, n.intervalMs));
52
+ return Number.isFinite(t) ? t : s;
53
+ }
54
+ async function y(a, o, s) {
55
+ if (u.get(o) === a) {
56
+ if (a.leases.size === 0) return g(a, o);
57
+ if (a.inFlight) return h(a, o, s, v(a));
58
+ if (_(a, o).length === 0) return g(a, o);
59
+ a.inFlight = !0;
60
+ try {
61
+ let r = await t(i, {
62
+ account: s,
63
+ chainId: f,
64
+ timeoutMs: n
65
+ });
66
+ a.failures = 0, e(_(a, o), r);
67
+ } catch {
68
+ a.failures += 1;
69
+ } finally {
70
+ a.inFlight = !1;
71
+ }
72
+ if (u.get(o) === a) {
73
+ if (_(a, o).length === 0) return g(a, o);
74
+ h(a, o, s, a.failures === 0 ? v(a) : Math.min(v(a) * 2 ** a.failures, r));
75
+ }
76
+ }
77
+ }
78
+ for (let [e, t] of m(o.getWaiting())) {
79
+ let n = u.get(e);
80
+ n || (n = {
81
+ timer: void 0,
82
+ inFlight: !1,
83
+ failures: 0,
84
+ leases: /* @__PURE__ */ new Set()
85
+ }, u.set(e, n)), n.leases.add(l), d.add(e), h(n, e, t, Math.max(l.delayMs, l.intervalMs));
86
+ }
87
+ return { stop: () => {
88
+ if (!l.disposed) {
89
+ l.disposed = !0;
90
+ for (let e of d) {
91
+ let t = u.get(e);
92
+ t && (t.leases.delete(l), t.leases.size === 0 && g(t, e));
93
+ }
94
+ d.clear();
95
+ }
96
+ } };
97
+ }
98
+ //#endregion
99
+ export { o as startTpSlFallbackPoll };
100
+
101
+ //# sourceMappingURL=tpsl-fallback-poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tpsl-fallback-poll.js","names":[],"sources":["../../src/tpsl/tpsl-fallback-poll.ts"],"sourcesContent":["import { searchTpSlOrders, type Config } from \"@symmio/trading-core\";\nimport type { Address } from \"viem\";\nimport { applyTpSlSearchSnapshot, type TpSlWaitingSide } from \"./apply-tpsl-search-snapshot\";\n\n/**\n * How long the WebSocket report gets on its own before the sweep starts, in\n * milliseconds.\n *\n * The sweep is a fallback, not a second opinion: while a report can still\n * plausibly arrive, asking the handler adds load and answers nothing the socket\n * was not about to say. A report that has not landed within this window is not\n * coming, and only then is it worth reading the handler directly.\n */\nexport const TPSL_FALLBACK_POLL_DELAY_MS = 30_000;\n\n/** Default cadence of the fallback sweep once it has started, in milliseconds. */\nexport const TPSL_FALLBACK_POLL_INTERVAL_MS = 2_000;\n\n/** How long one sweep may take before it counts as a failed tick. */\nconst REQUEST_TIMEOUT_MS = 10_000;\n\n/** Backoff ceiling — a handler that keeps failing is polled every 30s, not every 2s. */\nconst MAX_BACKOFF_MS = 30_000;\n\n/** A side the caller is waiting on, plus the account whose stream should report it. */\nexport interface TpSlPollWaitingSide extends TpSlWaitingSide {\n /** Virtual Account that owns the order — the handler's `party_a_address`. */\n account: Address;\n}\n\n/** Parameters for {@link startTpSlFallbackPoll}. */\nexport interface StartTpSlFallbackPollParameters {\n /**\n * The sides still awaiting confirmation, re-read on every tick and again\n * when a response lands. Returning an empty list stops the sweep.\n */\n getWaiting: () => readonly TpSlPollWaitingSide[];\n /** Chain override; defaults to the config's default chain. */\n chainId?: number;\n /**\n * How long to leave the report alone before the first sweep. Defaults to\n * {@link TPSL_FALLBACK_POLL_DELAY_MS}. `0` sweeps after one interval.\n */\n delayMs?: number;\n /** Tick cadence after the first sweep. Defaults to {@link TPSL_FALLBACK_POLL_INTERVAL_MS}. `0` disables. */\n intervalMs?: number;\n}\n\n/** Handle returned by {@link startTpSlFallbackPoll}. */\nexport interface TpSlFallbackPoll {\n /** Stop this lease. Idempotent; safe to call after the sweep already ended. */\n stop: () => void;\n}\n\n/** One account's sweep loop, shared by every lease that wants that account. */\ninterface Hub {\n timer: ReturnType<typeof setTimeout> | undefined;\n inFlight: boolean;\n failures: number;\n leases: Set<Lease>;\n}\n\ninterface Lease {\n getWaiting: () => readonly TpSlPollWaitingSide[];\n delayMs: number;\n intervalMs: number;\n disposed: boolean;\n}\n\n/**\n * Sweep loops, scoped to a `Config` rather than to the module.\n *\n * Mirrors core's socket pool: a `WeakMap` keyed on the config means loops never\n * leak across config instances and die with the config that owns them, instead\n * of living in an app-wide singleton.\n */\nconst registries = new WeakMap<Config, Map<string, Hub>>();\n\nfunction registryOf(config: Config): Map<string, Hub> {\n let registry = registries.get(config);\n if (!registry) {\n registry = new Map();\n registries.set(config, registry);\n }\n return registry;\n}\n\n/**\n * Poll the TP/SL handler for the orders a run is waiting on, as a fallback for\n * a WebSocket report that never arrives.\n *\n * One `POST /api/v5/search/` per distinct Virtual Account per tick — never one\n * per leg — and results are folded into the shared TP/SL store, which is what\n * both the run's waiter and every mounted cell reconcile against. Leases on the\n * same `(config, chain, account)` share one loop and one in-flight request, so\n * a set-run and a cancel-run confirming on the same account still cost one\n * request between them.\n *\n * The sweep is single-flight (a tick that finds a request in flight reschedules\n * rather than stacking), backs off exponentially on handler errors, and stops\n * as soon as `getWaiting()` comes back empty — as well as on `stop()`.\n *\n * @param config - The SDK config; also the scope the loops are registered under.\n * @param parameters - The waiting-side probe, chain override and cadence.\n * @returns A handle whose `stop()` releases this lease.\n *\n * @example\n * ```ts\n * const poll = startTpSlFallbackPoll(config, {\n * getWaiting: () => waitingSidesOf(runRef.current.steps),\n * });\n * // later, when the run resolves:\n * poll.stop();\n * ```\n */\nexport function startTpSlFallbackPoll(config: Config, parameters: StartTpSlFallbackPollParameters): TpSlFallbackPoll {\n const intervalMs = parameters.intervalMs ?? TPSL_FALLBACK_POLL_INTERVAL_MS;\n if (intervalMs <= 0) return { stop: () => {} };\n const delayMs = parameters.delayMs ?? TPSL_FALLBACK_POLL_DELAY_MS;\n\n const lease: Lease = { getWaiting: parameters.getWaiting, delayMs, intervalMs, disposed: false };\n const registry = registryOf(config);\n /** Hubs this lease joined, so `stop()` releases exactly those. */\n const joined = new Set<string>();\n\n /**\n * Resolve the chain once, so a caller that passes it explicitly and one that\n * omits it land on the same hub instead of opening two loops.\n */\n let chainId: number;\n try {\n chainId = config.getChainConfig(parameters.chainId).chainId;\n } catch {\n // An unconfigured chain can never answer; there is nothing to poll.\n return { stop: () => {} };\n }\n\n function hubKeyFor(account: Address): string {\n return `${chainId}:${account.toLowerCase()}`;\n }\n\n /** The accounts this lease currently needs, deduped. */\n function accountsOf(sides: readonly TpSlPollWaitingSide[]): Map<string, Address> {\n const accounts = new Map<string, Address>();\n for (const side of sides) accounts.set(hubKeyFor(side.account), side.account);\n return accounts;\n }\n\n function schedule(hub: Hub, key: string, account: Address, delayMs: number): void {\n if (hub.timer !== undefined) return;\n hub.timer = setTimeout(() => {\n hub.timer = undefined;\n void tick(hub, key, account);\n }, delayMs);\n }\n\n function stopHub(hub: Hub, key: string): void {\n if (hub.timer !== undefined) clearTimeout(hub.timer);\n hub.timer = undefined;\n registry.delete(key);\n }\n\n /** The union of every live lease's waiting sides for one account. */\n function waitingFor(hub: Hub, key: string): TpSlPollWaitingSide[] {\n const sides: TpSlPollWaitingSide[] = [];\n for (const entry of hub.leases) {\n if (entry.disposed) {\n hub.leases.delete(entry);\n continue;\n }\n for (const side of entry.getWaiting()) {\n if (hubKeyFor(side.account) === key) sides.push(side);\n }\n }\n return sides;\n }\n\n /** The shortest cadence any live lease asked for. */\n function cadenceOf(hub: Hub): number {\n let cadence = Number.POSITIVE_INFINITY;\n for (const entry of hub.leases) {\n if (!entry.disposed) cadence = Math.min(cadence, entry.intervalMs);\n }\n return Number.isFinite(cadence) ? cadence : intervalMs;\n }\n\n async function tick(hub: Hub, key: string, account: Address): Promise<void> {\n if (registry.get(key) !== hub) return;\n if (hub.leases.size === 0) return stopHub(hub, key);\n if (hub.inFlight) return schedule(hub, key, account, cadenceOf(hub));\n\n const wanted = waitingFor(hub, key);\n if (wanted.length === 0) return stopHub(hub, key);\n\n hub.inFlight = true;\n try {\n const snapshot = await searchTpSlOrders(config, { account, chainId, timeoutMs: REQUEST_TIMEOUT_MS });\n hub.failures = 0;\n // Re-read the waiting set: a WebSocket frame may have settled these sides\n // while the request was in flight, and a response must never speak for a\n // side that is no longer confirming.\n applyTpSlSearchSnapshot(waitingFor(hub, key), snapshot);\n } catch {\n hub.failures += 1;\n } finally {\n hub.inFlight = false;\n }\n\n if (registry.get(key) !== hub) return;\n if (waitingFor(hub, key).length === 0) return stopHub(hub, key);\n const backoff = hub.failures === 0 ? cadenceOf(hub) : Math.min(cadenceOf(hub) * 2 ** hub.failures, MAX_BACKOFF_MS);\n schedule(hub, key, account, backoff);\n }\n\n for (const [key, account] of accountsOf(parameters.getWaiting())) {\n let hub = registry.get(key);\n if (!hub) {\n hub = { timer: undefined, inFlight: false, failures: 0, leases: new Set() };\n registry.set(key, hub);\n }\n hub.leases.add(lease);\n joined.add(key);\n /**\n * The first sweep waits out `delayMs` — the window the report owns. A hub\n * another lease already armed keeps its schedule; whichever lease got there\n * first set the clock.\n */\n schedule(hub, key, account, Math.max(lease.delayMs, lease.intervalMs));\n }\n\n return {\n stop: () => {\n if (lease.disposed) return;\n lease.disposed = true;\n for (const key of joined) {\n const hub = registry.get(key);\n if (!hub) continue;\n hub.leases.delete(lease);\n if (hub.leases.size === 0) stopHub(hub, key);\n }\n joined.clear();\n },\n };\n}\n\n/** Tear down every sweep loop. Intended for tests only. */\nexport function __resetTpSlFallbackPolls(config: Config): void {\n const registry = registries.get(config);\n if (!registry) return;\n for (const [key, hub] of registry) {\n if (hub.timer !== undefined) clearTimeout(hub.timer);\n registry.delete(key);\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,45 @@
1
1
  import { QuoteTpSlRow, TpSlInfoState, TpSlNotification, TpSlPriceType } from '@symmio/trading-core';
2
+ /**
3
+ * How long a `"confirming"` write survives a REST snapshot that does not list
4
+ * it yet, in milliseconds.
5
+ *
6
+ * A refetch issued right after a POST routinely lands before the handler has
7
+ * registered the order. Without this window the empty snapshot would fold to
8
+ * `"canceled"` and erase the price the trader just set, so the side holds its
9
+ * `"confirming"` state until a report arrives, the rows list it, or the window
10
+ * closes.
11
+ *
12
+ * Deliberately longer than `DEFAULT_TPSL_CONFIRMATION_TIMEOUT_MS`: a grouped
13
+ * run must reach its own deadline and release the guard itself, rather than
14
+ * having the guard expire underneath it. This is the backstop for every other
15
+ * caller, which has no deadline of its own.
16
+ */
17
+ export declare const TPSL_CONFIRMING_GUARD_MS = 90000;
18
+ /** What a side is waiting for while it is `"confirming"`, and since when. */
19
+ export interface TpSlConfirmation {
20
+ /** `"write"` — an order was submitted. `"cancel"` — a live order was cancelled. */
21
+ intent: "write" | "cancel";
22
+ /** Epoch milliseconds the side entered `"confirming"`. */
23
+ at: number;
24
+ /** Trigger price the write submitted — the evidence a snapshot must show. */
25
+ price?: string;
26
+ /**
27
+ * Market price precision the write was signed at.
28
+ *
29
+ * The handler is sent — and stores — the trigger price rounded to this many
30
+ * decimals, so a seed carrying more of them describes the same order. Without
31
+ * it, a trader who types `0.00693` into a 4-decimal market would never see
32
+ * their write confirmed: the rows come back `0.0069` and no comparison of the
33
+ * two raw strings can tell "rounded" from "different".
34
+ */
35
+ pricePrecision?: number;
36
+ /** Price type the write submitted. */
37
+ priceType?: TpSlPriceType;
38
+ /** Handler-issued id the write was told to expect, when the POST returned one. */
39
+ cohQuoteId?: string;
40
+ }
41
+ /** One side of a quote's TP/SL record. */
42
+ export type TpSlSideKey = "tp" | "sl";
2
43
  /**
3
44
  * One quote's folded TP/SL state. The same record instance is referenced from
4
45
  * every id that resolves to it via {@link TpSlStoreState.index} — the caller
@@ -24,6 +65,10 @@ export interface TpSlRecord {
24
65
  slState: TpSlInfoState;
25
66
  tpCohQuoteId?: string;
26
67
  slCohQuoteId?: string;
68
+ /** Set while `tpState` is `"confirming"`; cleared as soon as the side resolves. */
69
+ tpConfirm?: TpSlConfirmation;
70
+ /** Set while `slState` is `"confirming"`; cleared as soon as the side resolves. */
71
+ slConfirm?: TpSlConfirmation;
27
72
  }
28
73
  /** Internal identity of a record — opaque string, never leaks to consumers. */
29
74
  type TpSlRecordKey = string;
@@ -37,20 +82,59 @@ export interface TpSlStoreState {
37
82
  index: Map<bigint, TpSlRecordKey>;
38
83
  /** Read a record via any id. Returns `undefined` when the id is unknown. */
39
84
  get(id: bigint): TpSlRecord | undefined;
40
- /** Fold the raw handler rows into snapshot fields and commit under `id`. */
85
+ /**
86
+ * Fold the raw handler rows for **one quote** into snapshot fields and commit
87
+ * under `id`, then alias the rows' `quote_id` onto the same record.
88
+ *
89
+ * A side left `"confirming"` by a `"write"` is held rather than cleared until
90
+ * the rows show the submitted order — see {@link TPSL_CONFIRMING_GUARD_MS}.
91
+ * A `"cancel"` is confirmed by absence, so an authoritative snapshot still
92
+ * resolves both intents.
93
+ *
94
+ * Pass only one quote's rows. An account-wide page would alias a foreign
95
+ * `quote_id` onto this record and merge two legs into one — use
96
+ * {@link setRowsForSides} for those.
97
+ */
41
98
  setRows(id: bigint, rows: QuoteTpSlRow[]): void;
99
+ /**
100
+ * {@link setRows} restricted to `sides`, and without the `quote_id` aliasing.
101
+ *
102
+ * The entry point for a snapshot whose authority is partial — an
103
+ * account-scoped search that this caller only trusts for the sides it is
104
+ * waiting on. Sides outside `sides` are left exactly as they were, so a page
105
+ * that lags on an unrelated side cannot blank a live order.
106
+ */
107
+ setRowsForSides(id: bigint, rows: QuoteTpSlRow[], sides: readonly TpSlSideKey[]): void;
42
108
  /**
43
109
  * Mark a side as "POST accepted, awaiting handler acknowledgement". Sets
44
110
  * `tpState` / `slState` to `"confirming"` directly. Optional `patch`
45
111
  * seeds the trigger price / priceType / cohQuoteId so the UI can show
46
112
  * the target value during the confirming window; a later
47
113
  * {@link applyNotification} transitions the state to the wire report.
114
+ *
115
+ * `patch.intent` says what the side is waiting for — default `"write"`.
116
+ * Cancels must pass `"cancel"`, otherwise the write guard in
117
+ * {@link setRows} would keep holding a side the handler has already removed.
118
+ *
119
+ * A write's `price` / `priceType` / `cohQuoteId` are also kept as the
120
+ * evidence a later snapshot must show before the side counts as confirmed,
121
+ * so a stale row cannot settle an edit that never landed.
48
122
  */
49
- markConfirming(id: bigint, side: "tp" | "sl", patch?: {
123
+ markConfirming(id: bigint, side: TpSlSideKey, patch?: {
50
124
  price?: string;
125
+ pricePrecision?: number;
51
126
  priceType?: TpSlPriceType;
52
127
  cohQuoteId?: string;
128
+ intent?: TpSlConfirmation["intent"];
53
129
  }): void;
130
+ /**
131
+ * Drop a side's confirmation guard without touching its rendered state, so
132
+ * the next {@link setRows} writes the handler's rows through unheld.
133
+ *
134
+ * Called when a run gives up waiting for the report: the REST snapshot — even
135
+ * an empty one — becomes the truth again.
136
+ */
137
+ clearConfirming(id: bigint, side: TpSlSideKey): void;
54
138
  /**
55
139
  * Apply a WS notification to the record's side state (and optionally its
56
140
  * trigger price when `details.trigger_price` is present). Maps the raw
@@ -78,6 +162,18 @@ export declare const useTpSlStore: import('zustand').UseBoundStore<import('zusta
78
162
  * another id linked to the same record).
79
163
  */
80
164
  export declare function useTpSlRecord(id: bigint | undefined): TpSlRecord | undefined;
165
+ /**
166
+ * Selector hook: subscribe to the records addressed by `ids`, in input order.
167
+ * The grouped counterpart of {@link useTpSlRecord} — one subscription for N
168
+ * children, which a `.map` over children could not do legally anyway.
169
+ *
170
+ * Shallow-compared, so an unrelated record's update does not re-render the
171
+ * group. Pass a stable `ids` array (memoize it) to avoid recomputing per render.
172
+ *
173
+ * @param ids - Quote ids, on-chain or temp. `undefined` entries yield `undefined`.
174
+ * @returns One record (or `undefined`) per input id, in the same order.
175
+ */
176
+ export declare function useTpSlRecords(ids: readonly (bigint | undefined)[]): Array<TpSlRecord | undefined>;
81
177
  /** Reset the store — intended for tests only. */
82
178
  export declare function __resetTpSlStore(): void;
83
179
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"tpsl-store.d.ts","sourceRoot":"","sources":["../../src/tpsl/tpsl-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EAEZ,aAAa,EACb,gBAAgB,EAChB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAI9B;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,aAAa,CAAC;IAC3B,WAAW,EAAE,aAAa,CAAC;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,+EAA+E;AAC/E,KAAK,aAAa,GAAG,MAAM,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAElC,4EAA4E;IAC5E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAExC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEhD;;;;;;OAMG;IACH,cAAc,CACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,aAAa,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE,IAAI,CAAC;IAER;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAEpE;;;;OAIG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAoCD;;;;GAIG;AACH,eAAO,MAAM,YAAY,6EA4LvB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAM5E;AAED,iDAAiD;AACjD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
1
+ {"version":3,"file":"tpsl-store.d.ts","sourceRoot":"","sources":["../../src/tpsl/tpsl-store.ts"],"names":[],"mappings":"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"}