@symmio/trading-react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/account-layer/index.d.ts +29 -0
- package/dist/account-layer/index.d.ts.map +1 -0
- package/dist/account-layer/use-account-balance-info.d.ts +22 -0
- package/dist/account-layer/use-account-balance-info.d.ts.map +1 -0
- package/dist/account-layer/use-account-balance-info.js +23 -0
- package/dist/account-layer/use-account-balance-info.js.map +1 -0
- package/dist/account-layer/use-account-balance-of.d.ts +22 -0
- package/dist/account-layer/use-account-balance-of.d.ts.map +1 -0
- package/dist/account-layer/use-account-balance-of.js +23 -0
- package/dist/account-layer/use-account-balance-of.js.map +1 -0
- package/dist/account-layer/use-add-margin.d.ts +26 -0
- package/dist/account-layer/use-add-margin.d.ts.map +1 -0
- package/dist/account-layer/use-add-margin.js +40 -0
- package/dist/account-layer/use-add-margin.js.map +1 -0
- package/dist/account-layer/use-allocate.d.ts +25 -0
- package/dist/account-layer/use-allocate.d.ts.map +1 -0
- package/dist/account-layer/use-allocate.js +40 -0
- package/dist/account-layer/use-allocate.js.map +1 -0
- package/dist/account-layer/use-create-sub-accounts.d.ts +36 -0
- package/dist/account-layer/use-create-sub-accounts.d.ts.map +1 -0
- package/dist/account-layer/use-create-sub-accounts.js +41 -0
- package/dist/account-layer/use-create-sub-accounts.js.map +1 -0
- package/dist/account-layer/use-deallocate.d.ts +44 -0
- package/dist/account-layer/use-deallocate.d.ts.map +1 -0
- package/dist/account-layer/use-deallocate.js +44 -0
- package/dist/account-layer/use-deallocate.js.map +1 -0
- package/dist/account-layer/use-delete-sub-account.d.ts +30 -0
- package/dist/account-layer/use-delete-sub-account.d.ts.map +1 -0
- package/dist/account-layer/use-delete-sub-account.js +40 -0
- package/dist/account-layer/use-delete-sub-account.js.map +1 -0
- package/dist/account-layer/use-deposit-and-allocate.d.ts +27 -0
- package/dist/account-layer/use-deposit-and-allocate.d.ts.map +1 -0
- package/dist/account-layer/use-deposit-and-allocate.js +41 -0
- package/dist/account-layer/use-deposit-and-allocate.js.map +1 -0
- package/dist/account-layer/use-deposit.d.ts +27 -0
- package/dist/account-layer/use-deposit.d.ts.map +1 -0
- package/dist/account-layer/use-deposit.js +41 -0
- package/dist/account-layer/use-deposit.js.map +1 -0
- package/dist/account-layer/use-edit-account-name.d.ts +27 -0
- package/dist/account-layer/use-edit-account-name.d.ts.map +1 -0
- package/dist/account-layer/use-edit-account-name.js +40 -0
- package/dist/account-layer/use-edit-account-name.js.map +1 -0
- package/dist/account-layer/use-predicted-next-virtual-account.d.ts +38 -0
- package/dist/account-layer/use-predicted-next-virtual-account.d.ts.map +1 -0
- package/dist/account-layer/use-predicted-next-virtual-account.js +27 -0
- package/dist/account-layer/use-predicted-next-virtual-account.js.map +1 -0
- package/dist/account-layer/use-remove-margin.d.ts +43 -0
- package/dist/account-layer/use-remove-margin.d.ts.map +1 -0
- package/dist/account-layer/use-remove-margin.js +44 -0
- package/dist/account-layer/use-remove-margin.js.map +1 -0
- package/dist/account-layer/use-simulate-add-margin.d.ts +24 -0
- package/dist/account-layer/use-simulate-add-margin.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-add-margin.js +29 -0
- package/dist/account-layer/use-simulate-add-margin.js.map +1 -0
- package/dist/account-layer/use-simulate-allocate.d.ts +25 -0
- package/dist/account-layer/use-simulate-allocate.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-allocate.js +29 -0
- package/dist/account-layer/use-simulate-allocate.js.map +1 -0
- package/dist/account-layer/use-simulate-create-sub-accounts.d.ts +25 -0
- package/dist/account-layer/use-simulate-create-sub-accounts.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-create-sub-accounts.js +29 -0
- package/dist/account-layer/use-simulate-create-sub-accounts.js.map +1 -0
- package/dist/account-layer/use-simulate-deallocate.d.ts +29 -0
- package/dist/account-layer/use-simulate-deallocate.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-deallocate.js +29 -0
- package/dist/account-layer/use-simulate-deallocate.js.map +1 -0
- package/dist/account-layer/use-simulate-delete-sub-account.d.ts +25 -0
- package/dist/account-layer/use-simulate-delete-sub-account.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-delete-sub-account.js +29 -0
- package/dist/account-layer/use-simulate-delete-sub-account.js.map +1 -0
- package/dist/account-layer/use-simulate-deposit-and-allocate.d.ts +25 -0
- package/dist/account-layer/use-simulate-deposit-and-allocate.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-deposit-and-allocate.js +29 -0
- package/dist/account-layer/use-simulate-deposit-and-allocate.js.map +1 -0
- package/dist/account-layer/use-simulate-deposit.d.ts +25 -0
- package/dist/account-layer/use-simulate-deposit.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-deposit.js +29 -0
- package/dist/account-layer/use-simulate-deposit.js.map +1 -0
- package/dist/account-layer/use-simulate-edit-account-name.d.ts +25 -0
- package/dist/account-layer/use-simulate-edit-account-name.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-edit-account-name.js +29 -0
- package/dist/account-layer/use-simulate-edit-account-name.js.map +1 -0
- package/dist/account-layer/use-simulate-remove-margin.d.ts +30 -0
- package/dist/account-layer/use-simulate-remove-margin.d.ts.map +1 -0
- package/dist/account-layer/use-simulate-remove-margin.js +29 -0
- package/dist/account-layer/use-simulate-remove-margin.js.map +1 -0
- package/dist/account-layer/use-sub-account-virtual-nonce.d.ts +23 -0
- package/dist/account-layer/use-sub-account-virtual-nonce.d.ts.map +1 -0
- package/dist/account-layer/use-sub-account-virtual-nonce.js +27 -0
- package/dist/account-layer/use-sub-account-virtual-nonce.js.map +1 -0
- package/dist/account-layer/use-sub-account.d.ts +22 -0
- package/dist/account-layer/use-sub-account.d.ts.map +1 -0
- package/dist/account-layer/use-sub-account.js +27 -0
- package/dist/account-layer/use-sub-account.js.map +1 -0
- package/dist/account-layer/use-sub-accounts-count-of-user.d.ts +22 -0
- package/dist/account-layer/use-sub-accounts-count-of-user.d.ts.map +1 -0
- package/dist/account-layer/use-sub-accounts-count-of-user.js +27 -0
- package/dist/account-layer/use-sub-accounts-count-of-user.js.map +1 -0
- package/dist/account-layer/use-user-sub-accounts-addresses.d.ts +24 -0
- package/dist/account-layer/use-user-sub-accounts-addresses.d.ts.map +1 -0
- package/dist/account-layer/use-user-sub-accounts-addresses.js +27 -0
- package/dist/account-layer/use-user-sub-accounts-addresses.js.map +1 -0
- package/dist/account-layer/use-user-sub-accounts.d.ts +28 -0
- package/dist/account-layer/use-user-sub-accounts.d.ts.map +1 -0
- package/dist/account-layer/use-user-sub-accounts.js +27 -0
- package/dist/account-layer/use-user-sub-accounts.js.map +1 -0
- package/dist/account-layer/use-virtual-account.d.ts +35 -0
- package/dist/account-layer/use-virtual-account.d.ts.map +1 -0
- package/dist/account-layer/use-virtual-account.js +32 -0
- package/dist/account-layer/use-virtual-account.js.map +1 -0
- package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.d.ts +25 -0
- package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.d.ts.map +1 -0
- package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.js +27 -0
- package/dist/account-layer/use-virtual-accounts-addresses-of-sub-account.js.map +1 -0
- package/dist/balance-history/index.d.ts +4 -0
- package/dist/balance-history/index.d.ts.map +1 -0
- package/dist/balance-history/use-balance-history.d.ts +26 -0
- package/dist/balance-history/use-balance-history.d.ts.map +1 -0
- package/dist/balance-history/use-balance-history.js +27 -0
- package/dist/balance-history/use-balance-history.js.map +1 -0
- package/dist/balance-history/use-deposit-history.d.ts +19 -0
- package/dist/balance-history/use-deposit-history.d.ts.map +1 -0
- package/dist/balance-history/use-deposit-history.js +14 -0
- package/dist/balance-history/use-deposit-history.js.map +1 -0
- package/dist/balance-history/use-withdraw-history.d.ts +20 -0
- package/dist/balance-history/use-withdraw-history.d.ts.map +1 -0
- package/dist/balance-history/use-withdraw-history.js +14 -0
- package/dist/balance-history/use-withdraw-history.js.map +1 -0
- package/dist/collateral/index.d.ts +5 -0
- package/dist/collateral/index.d.ts.map +1 -0
- package/dist/collateral/use-approve-collateral.d.ts +27 -0
- package/dist/collateral/use-approve-collateral.d.ts.map +1 -0
- package/dist/collateral/use-approve-collateral.js +40 -0
- package/dist/collateral/use-approve-collateral.js.map +1 -0
- package/dist/collateral/use-collateral-allowance.d.ts +24 -0
- package/dist/collateral/use-collateral-allowance.d.ts.map +1 -0
- package/dist/collateral/use-collateral-allowance.js +27 -0
- package/dist/collateral/use-collateral-allowance.js.map +1 -0
- package/dist/collateral/use-collateral-balance.d.ts +22 -0
- package/dist/collateral/use-collateral-balance.d.ts.map +1 -0
- package/dist/collateral/use-collateral-balance.js +27 -0
- package/dist/collateral/use-collateral-balance.js.map +1 -0
- package/dist/collateral/use-simulate-approve-collateral.d.ts +26 -0
- package/dist/collateral/use-simulate-approve-collateral.d.ts.map +1 -0
- package/dist/collateral/use-simulate-approve-collateral.js +29 -0
- package/dist/collateral/use-simulate-approve-collateral.js.map +1 -0
- package/dist/error-codes/index.d.ts +3 -0
- package/dist/error-codes/index.d.ts.map +1 -0
- package/dist/error-codes/use-solver-error-codes.d.ts +27 -0
- package/dist/error-codes/use-solver-error-codes.d.ts.map +1 -0
- package/dist/error-codes/use-solver-error-codes.js +27 -0
- package/dist/error-codes/use-solver-error-codes.js.map +1 -0
- package/dist/error-codes/use-solver-error-message.d.ts +23 -0
- package/dist/error-codes/use-solver-error-message.d.ts.map +1 -0
- package/dist/error-codes/use-solver-error-message.js +11 -0
- package/dist/error-codes/use-solver-error-message.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/normalize-symm-error.d.ts +14 -0
- package/dist/errors/normalize-symm-error.d.ts.map +1 -0
- package/dist/errors/normalize-symm-error.js +86 -0
- package/dist/errors/normalize-symm-error.js.map +1 -0
- package/dist/errors/symmio-request-error.d.ts +54 -0
- package/dist/errors/symmio-request-error.d.ts.map +1 -0
- package/dist/errors/symmio-request-error.js +17 -0
- package/dist/errors/symmio-request-error.js.map +1 -0
- package/dist/errors/types.d.ts +21 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/fees/index.d.ts +2 -0
- package/dist/fees/index.d.ts.map +1 -0
- package/dist/fees/use-fee-for-user.d.ts +25 -0
- package/dist/fees/use-fee-for-user.d.ts.map +1 -0
- package/dist/fees/use-fee-for-user.js +27 -0
- package/dist/fees/use-fee-for-user.js.map +1 -0
- package/dist/index.d.ts +184 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/instant-layer/index.d.ts +14 -0
- package/dist/instant-layer/index.d.ts.map +1 -0
- package/dist/instant-layer/use-delegation-expiry.d.ts +22 -0
- package/dist/instant-layer/use-delegation-expiry.d.ts.map +1 -0
- package/dist/instant-layer/use-delegation-expiry.js +23 -0
- package/dist/instant-layer/use-delegation-expiry.js.map +1 -0
- package/dist/instant-layer/use-grant-delegation.d.ts +26 -0
- package/dist/instant-layer/use-grant-delegation.d.ts.map +1 -0
- package/dist/instant-layer/use-grant-delegation.js +38 -0
- package/dist/instant-layer/use-grant-delegation.js.map +1 -0
- package/dist/instant-layer/use-instant-close-auto.d.ts +29 -0
- package/dist/instant-layer/use-instant-close-auto.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-close-auto.js +32 -0
- package/dist/instant-layer/use-instant-close-auto.js.map +1 -0
- package/dist/instant-layer/use-instant-close-bulk-auto.d.ts +26 -0
- package/dist/instant-layer/use-instant-close-bulk-auto.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-close-bulk-auto.js +32 -0
- package/dist/instant-layer/use-instant-close-bulk-auto.js.map +1 -0
- package/dist/instant-layer/use-instant-close-bulk.d.ts +24 -0
- package/dist/instant-layer/use-instant-close-bulk.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-close-bulk.js +32 -0
- package/dist/instant-layer/use-instant-close-bulk.js.map +1 -0
- package/dist/instant-layer/use-instant-close.d.ts +29 -0
- package/dist/instant-layer/use-instant-close.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-close.js +32 -0
- package/dist/instant-layer/use-instant-close.js.map +1 -0
- package/dist/instant-layer/use-instant-closes.d.ts +25 -0
- package/dist/instant-layer/use-instant-closes.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-closes.js +27 -0
- package/dist/instant-layer/use-instant-closes.js.map +1 -0
- package/dist/instant-layer/use-instant-open-auto.d.ts +31 -0
- package/dist/instant-layer/use-instant-open-auto.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-open-auto.js +32 -0
- package/dist/instant-layer/use-instant-open-auto.js.map +1 -0
- package/dist/instant-layer/use-instant-open-quote-id.d.ts +28 -0
- package/dist/instant-layer/use-instant-open-quote-id.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-open-quote-id.js +27 -0
- package/dist/instant-layer/use-instant-open-quote-id.js.map +1 -0
- package/dist/instant-layer/use-instant-open.d.ts +33 -0
- package/dist/instant-layer/use-instant-open.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-open.js +32 -0
- package/dist/instant-layer/use-instant-open.js.map +1 -0
- package/dist/instant-layer/use-instant-opens.d.ts +25 -0
- package/dist/instant-layer/use-instant-opens.d.ts.map +1 -0
- package/dist/instant-layer/use-instant-opens.js +27 -0
- package/dist/instant-layer/use-instant-opens.js.map +1 -0
- package/dist/instant-layer/use-is-delegation-active.d.ts +22 -0
- package/dist/instant-layer/use-is-delegation-active.d.ts.map +1 -0
- package/dist/instant-layer/use-is-delegation-active.js +23 -0
- package/dist/instant-layer/use-is-delegation-active.js.map +1 -0
- package/dist/instant-layer/use-simulate-grant-delegation.d.ts +25 -0
- package/dist/instant-layer/use-simulate-grant-delegation.d.ts.map +1 -0
- package/dist/instant-layer/use-simulate-grant-delegation.js +29 -0
- package/dist/instant-layer/use-simulate-grant-delegation.js.map +1 -0
- package/dist/locked-params/index.d.ts +2 -0
- package/dist/locked-params/index.d.ts.map +1 -0
- package/dist/locked-params/use-locked-params.d.ts +23 -0
- package/dist/locked-params/use-locked-params.d.ts.map +1 -0
- package/dist/locked-params/use-locked-params.js +27 -0
- package/dist/locked-params/use-locked-params.js.map +1 -0
- package/dist/markets/index.d.ts +3 -0
- package/dist/markets/index.d.ts.map +1 -0
- package/dist/markets/use-markets.d.ts +26 -0
- package/dist/markets/use-markets.d.ts.map +1 -0
- package/dist/markets/use-markets.js +27 -0
- package/dist/markets/use-markets.js.map +1 -0
- package/dist/markets/use-onchain-contract-markets.d.ts +24 -0
- package/dist/markets/use-onchain-contract-markets.d.ts.map +1 -0
- package/dist/markets/use-onchain-contract-markets.js +27 -0
- package/dist/markets/use-onchain-contract-markets.js.map +1 -0
- package/dist/muon/index.d.ts +11 -0
- package/dist/muon/index.d.ts.map +1 -0
- package/dist/muon/use-deallocate-upnl-sig.d.ts +28 -0
- package/dist/muon/use-deallocate-upnl-sig.d.ts.map +1 -0
- package/dist/muon/use-deallocate-upnl-sig.js +27 -0
- package/dist/muon/use-deallocate-upnl-sig.js.map +1 -0
- package/dist/muon/use-muon-party-a-overview.d.ts +29 -0
- package/dist/muon/use-muon-party-a-overview.d.ts.map +1 -0
- package/dist/muon/use-muon-party-a-overview.js +27 -0
- package/dist/muon/use-muon-party-a-overview.js.map +1 -0
- package/dist/muon/use-muon-price-range.d.ts +35 -0
- package/dist/muon/use-muon-price-range.d.ts.map +1 -0
- package/dist/muon/use-muon-price-range.js +31 -0
- package/dist/muon/use-muon-price-range.js.map +1 -0
- package/dist/muon/use-muon-price.d.ts +28 -0
- package/dist/muon/use-muon-price.d.ts.map +1 -0
- package/dist/muon/use-muon-price.js +27 -0
- package/dist/muon/use-muon-price.js.map +1 -0
- package/dist/muon/use-muon-settle-upnl.d.ts +29 -0
- package/dist/muon/use-muon-settle-upnl.d.ts.map +1 -0
- package/dist/muon/use-muon-settle-upnl.js +28 -0
- package/dist/muon/use-muon-settle-upnl.js.map +1 -0
- package/dist/muon/use-muon-upnl-a-with-symbol-price.d.ts +29 -0
- package/dist/muon/use-muon-upnl-a-with-symbol-price.d.ts.map +1 -0
- package/dist/muon/use-muon-upnl-a-with-symbol-price.js +28 -0
- package/dist/muon/use-muon-upnl-a-with-symbol-price.js.map +1 -0
- package/dist/muon/use-muon-upnl-a.d.ts +28 -0
- package/dist/muon/use-muon-upnl-a.d.ts.map +1 -0
- package/dist/muon/use-muon-upnl-a.js +27 -0
- package/dist/muon/use-muon-upnl-a.js.map +1 -0
- package/dist/muon/use-muon-upnl-b.d.ts +29 -0
- package/dist/muon/use-muon-upnl-b.d.ts.map +1 -0
- package/dist/muon/use-muon-upnl-b.js +28 -0
- package/dist/muon/use-muon-upnl-b.js.map +1 -0
- package/dist/muon/use-muon-upnl-with-symbol-price.d.ts +28 -0
- package/dist/muon/use-muon-upnl-with-symbol-price.d.ts.map +1 -0
- package/dist/muon/use-muon-upnl-with-symbol-price.js +29 -0
- package/dist/muon/use-muon-upnl-with-symbol-price.js.map +1 -0
- package/dist/muon/use-muon-upnl.d.ts +28 -0
- package/dist/muon/use-muon-upnl.d.ts.map +1 -0
- package/dist/muon/use-muon-upnl.js +28 -0
- package/dist/muon/use-muon-upnl.js.map +1 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/use-search-notifications.d.ts +29 -0
- package/dist/notifications/use-search-notifications.d.ts.map +1 -0
- package/dist/notifications/use-search-notifications.js +27 -0
- package/dist/notifications/use-search-notifications.js.map +1 -0
- package/dist/notional-cap/index.d.ts +4 -0
- package/dist/notional-cap/index.d.ts.map +1 -0
- package/dist/notional-cap/use-notional-cap-all.d.ts +32 -0
- package/dist/notional-cap/use-notional-cap-all.d.ts.map +1 -0
- package/dist/notional-cap/use-notional-cap-all.js +32 -0
- package/dist/notional-cap/use-notional-cap-all.js.map +1 -0
- package/dist/notional-cap/use-notional-cap-by-symbol-id.d.ts +36 -0
- package/dist/notional-cap/use-notional-cap-by-symbol-id.d.ts.map +1 -0
- package/dist/notional-cap/use-notional-cap-by-symbol-id.js +32 -0
- package/dist/notional-cap/use-notional-cap-by-symbol-id.js.map +1 -0
- package/dist/notional-cap/use-open-interest-by-symbol-id.d.ts +34 -0
- package/dist/notional-cap/use-open-interest-by-symbol-id.d.ts.map +1 -0
- package/dist/notional-cap/use-open-interest-by-symbol-id.js +32 -0
- package/dist/notional-cap/use-open-interest-by-symbol-id.js.map +1 -0
- package/dist/price-service/index.d.ts +9 -0
- package/dist/price-service/index.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-by-market-id.d.ts +42 -0
- package/dist/price-service/use-enigma-price-by-market-id.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-by-market-id.js +30 -0
- package/dist/price-service/use-enigma-price-by-market-id.js.map +1 -0
- package/dist/price-service/use-enigma-price-by-name.d.ts +41 -0
- package/dist/price-service/use-enigma-price-by-name.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-by-name.js +45 -0
- package/dist/price-service/use-enigma-price-by-name.js.map +1 -0
- package/dist/price-service/use-enigma-price-service-health.d.ts +20 -0
- package/dist/price-service/use-enigma-price-service-health.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-service-health.js +27 -0
- package/dist/price-service/use-enigma-price-service-health.js.map +1 -0
- package/dist/price-service/use-enigma-price-service-metadata.d.ts +20 -0
- package/dist/price-service/use-enigma-price-service-metadata.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-service-metadata.js +27 -0
- package/dist/price-service/use-enigma-price-service-metadata.js.map +1 -0
- package/dist/price-service/use-enigma-price-service-prices-by-addresses.d.ts +20 -0
- package/dist/price-service/use-enigma-price-service-prices-by-addresses.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-service-prices-by-addresses.js +27 -0
- package/dist/price-service/use-enigma-price-service-prices-by-addresses.js.map +1 -0
- package/dist/price-service/use-enigma-price-service-prices-by-names.d.ts +20 -0
- package/dist/price-service/use-enigma-price-service-prices-by-names.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-service-prices-by-names.js +27 -0
- package/dist/price-service/use-enigma-price-service-prices-by-names.js.map +1 -0
- package/dist/price-service/use-enigma-price-service-symbols-info.d.ts +20 -0
- package/dist/price-service/use-enigma-price-service-symbols-info.d.ts.map +1 -0
- package/dist/price-service/use-enigma-price-service-symbols-info.js +27 -0
- package/dist/price-service/use-enigma-price-service-symbols-info.js.map +1 -0
- package/dist/price-service/use-enigma-prices.d.ts +40 -0
- package/dist/price-service/use-enigma-prices.d.ts.map +1 -0
- package/dist/price-service/use-enigma-prices.js +47 -0
- package/dist/price-service/use-enigma-prices.js.map +1 -0
- package/dist/provider/index.d.ts +4 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/symmio-config-context.d.ts +9 -0
- package/dist/provider/symmio-config-context.d.ts.map +1 -0
- package/dist/provider/symmio-config-context.js +8 -0
- package/dist/provider/symmio-config-context.js.map +1 -0
- package/dist/provider/symmio-provider.d.ts +49 -0
- package/dist/provider/symmio-provider.d.ts.map +1 -0
- package/dist/provider/symmio-provider.js +39 -0
- package/dist/provider/symmio-provider.js.map +1 -0
- package/dist/provider/use-symmio-chain-id.d.ts +14 -0
- package/dist/provider/use-symmio-chain-id.d.ts.map +1 -0
- package/dist/provider/use-symmio-chain-id.js +10 -0
- package/dist/provider/use-symmio-chain-id.js.map +1 -0
- package/dist/provider/use-symmio-config.d.ts +24 -0
- package/dist/provider/use-symmio-config.d.ts.map +1 -0
- package/dist/provider/use-symmio-config.js +13 -0
- package/dist/provider/use-symmio-config.js.map +1 -0
- package/dist/quotes/index.d.ts +16 -0
- package/dist/quotes/index.d.ts.map +1 -0
- package/dist/quotes/optimistic-quotes-store.d.ts +47 -0
- package/dist/quotes/optimistic-quotes-store.d.ts.map +1 -0
- package/dist/quotes/optimistic-quotes-store.js +27 -0
- package/dist/quotes/optimistic-quotes-store.js.map +1 -0
- package/dist/quotes/use-account-liquidation-price.d.ts +39 -0
- package/dist/quotes/use-account-liquidation-price.d.ts.map +1 -0
- package/dist/quotes/use-account-liquidation-price.js +57 -0
- package/dist/quotes/use-account-liquidation-price.js.map +1 -0
- package/dist/quotes/use-grouped-quotes.d.ts +55 -0
- package/dist/quotes/use-grouped-quotes.d.ts.map +1 -0
- package/dist/quotes/use-grouped-quotes.js +21 -0
- package/dist/quotes/use-grouped-quotes.js.map +1 -0
- package/dist/quotes/use-managed-quotes.d.ts +108 -0
- package/dist/quotes/use-managed-quotes.d.ts.map +1 -0
- package/dist/quotes/use-managed-quotes.js +314 -0
- package/dist/quotes/use-managed-quotes.js.map +1 -0
- package/dist/quotes/use-party-a-open-positions.d.ts +23 -0
- package/dist/quotes/use-party-a-open-positions.d.ts.map +1 -0
- package/dist/quotes/use-party-a-open-positions.js +27 -0
- package/dist/quotes/use-party-a-open-positions.js.map +1 -0
- package/dist/quotes/use-party-a-pending-quotes.d.ts +23 -0
- package/dist/quotes/use-party-a-pending-quotes.d.ts.map +1 -0
- package/dist/quotes/use-party-a-pending-quotes.js +27 -0
- package/dist/quotes/use-party-a-pending-quotes.js.map +1 -0
- package/dist/quotes/use-quote-events-by-type.d.ts +26 -0
- package/dist/quotes/use-quote-events-by-type.d.ts.map +1 -0
- package/dist/quotes/use-quote-events-by-type.js +27 -0
- package/dist/quotes/use-quote-events-by-type.js.map +1 -0
- package/dist/quotes/use-quote-funding.d.ts +35 -0
- package/dist/quotes/use-quote-funding.d.ts.map +1 -0
- package/dist/quotes/use-quote-funding.js +21 -0
- package/dist/quotes/use-quote-funding.js.map +1 -0
- package/dist/quotes/use-quote-history.d.ts +26 -0
- package/dist/quotes/use-quote-history.d.ts.map +1 -0
- package/dist/quotes/use-quote-history.js +27 -0
- package/dist/quotes/use-quote-history.js.map +1 -0
- package/dist/quotes/use-quote-platform-fee.d.ts +31 -0
- package/dist/quotes/use-quote-platform-fee.d.ts.map +1 -0
- package/dist/quotes/use-quote-platform-fee.js +31 -0
- package/dist/quotes/use-quote-platform-fee.js.map +1 -0
- package/dist/quotes/use-quote-price-history.d.ts +24 -0
- package/dist/quotes/use-quote-price-history.d.ts.map +1 -0
- package/dist/quotes/use-quote-price-history.js +14 -0
- package/dist/quotes/use-quote-price-history.js.map +1 -0
- package/dist/quotes/use-quote-upnl-and-pnl.d.ts +34 -0
- package/dist/quotes/use-quote-upnl-and-pnl.d.ts.map +1 -0
- package/dist/quotes/use-quote-upnl-and-pnl.js +61 -0
- package/dist/quotes/use-quote-upnl-and-pnl.js.map +1 -0
- package/dist/quotes/use-quote.d.ts +23 -0
- package/dist/quotes/use-quote.d.ts.map +1 -0
- package/dist/quotes/use-quote.js +27 -0
- package/dist/quotes/use-quote.js.map +1 -0
- package/dist/quotes/use-quotes-funding.d.ts +52 -0
- package/dist/quotes/use-quotes-funding.d.ts.map +1 -0
- package/dist/quotes/use-quotes-funding.js +80 -0
- package/dist/quotes/use-quotes-funding.js.map +1 -0
- package/dist/quotes/use-subgraph-query.d.ts +25 -0
- package/dist/quotes/use-subgraph-query.d.ts.map +1 -0
- package/dist/quotes/use-subgraph-query.js +27 -0
- package/dist/quotes/use-subgraph-query.js.map +1 -0
- package/dist/tpsl/index.d.ts +8 -0
- package/dist/tpsl/index.d.ts.map +1 -0
- package/dist/tpsl/to-quote-tpsl.d.ts +19 -0
- package/dist/tpsl/to-quote-tpsl.d.ts.map +1 -0
- package/dist/tpsl/to-quote-tpsl.js +46 -0
- package/dist/tpsl/to-quote-tpsl.js.map +1 -0
- package/dist/tpsl/tpsl-confirming.d.ts +36 -0
- package/dist/tpsl/tpsl-confirming.d.ts.map +1 -0
- package/dist/tpsl/tpsl-confirming.js +28 -0
- package/dist/tpsl/tpsl-confirming.js.map +1 -0
- package/dist/tpsl/use-quote-tpsl.d.ts +34 -0
- package/dist/tpsl/use-quote-tpsl.d.ts.map +1 -0
- package/dist/tpsl/use-quote-tpsl.js +73 -0
- package/dist/tpsl/use-quote-tpsl.js.map +1 -0
- package/dist/tpsl/use-set-quote-tpsl.d.ts +22 -0
- package/dist/tpsl/use-set-quote-tpsl.d.ts.map +1 -0
- package/dist/tpsl/use-set-quote-tpsl.js +43 -0
- package/dist/tpsl/use-set-quote-tpsl.js.map +1 -0
- package/dist/tpsl/use-tpsl-config.d.ts +14 -0
- package/dist/tpsl/use-tpsl-config.d.ts.map +1 -0
- package/dist/tpsl/use-tpsl-config.js +31 -0
- package/dist/tpsl/use-tpsl-config.js.map +1 -0
- package/dist/tpsl/use-tpsl-signing-spec.d.ts +13 -0
- package/dist/tpsl/use-tpsl-signing-spec.d.ts.map +1 -0
- package/dist/tpsl/use-tpsl-signing-spec.js +31 -0
- package/dist/tpsl/use-tpsl-signing-spec.js.map +1 -0
- package/dist/tpsl/use-watch-tpsl-notifications.d.ts +30 -0
- package/dist/tpsl/use-watch-tpsl-notifications.d.ts.map +1 -0
- package/dist/tpsl/use-watch-tpsl-notifications.js +44 -0
- package/dist/tpsl/use-watch-tpsl-notifications.js.map +1 -0
- package/dist/transactions/index.d.ts +4 -0
- package/dist/transactions/index.d.ts.map +1 -0
- package/dist/transactions/resolve-write-result.d.ts +40 -0
- package/dist/transactions/resolve-write-result.d.ts.map +1 -0
- package/dist/transactions/resolve-write-result.js +15 -0
- package/dist/transactions/resolve-write-result.js.map +1 -0
- package/dist/transactions/use-transactions-store.d.ts +52 -0
- package/dist/transactions/use-transactions-store.d.ts.map +1 -0
- package/dist/transactions/use-transactions-store.js +24 -0
- package/dist/transactions/use-transactions-store.js.map +1 -0
- package/dist/transactions/write-types.d.ts +28 -0
- package/dist/transactions/write-types.d.ts.map +1 -0
- package/dist/transfers/index.d.ts +2 -0
- package/dist/transfers/index.d.ts.map +1 -0
- package/dist/transfers/use-transfer-history.d.ts +26 -0
- package/dist/transfers/use-transfer-history.d.ts.map +1 -0
- package/dist/transfers/use-transfer-history.js +27 -0
- package/dist/transfers/use-transfer-history.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/predicate-match.d.ts +27 -0
- package/dist/utils/predicate-match.d.ts.map +1 -0
- package/dist/utils/predicate-match.js +18 -0
- package/dist/utils/predicate-match.js.map +1 -0
- package/dist/wallet/index.d.ts +5 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/use-connect-wallet.d.ts +34 -0
- package/dist/wallet/use-connect-wallet.d.ts.map +1 -0
- package/dist/wallet/use-connect-wallet.js +24 -0
- package/dist/wallet/use-connect-wallet.js.map +1 -0
- package/dist/wallet/use-disconnect-wallet.d.ts +20 -0
- package/dist/wallet/use-disconnect-wallet.d.ts.map +1 -0
- package/dist/wallet/use-disconnect-wallet.js +21 -0
- package/dist/wallet/use-disconnect-wallet.js.map +1 -0
- package/dist/wallet/use-switch-to-symmio-chain.d.ts +29 -0
- package/dist/wallet/use-switch-to-symmio-chain.d.ts.map +1 -0
- package/dist/wallet/use-switch-to-symmio-chain.js +24 -0
- package/dist/wallet/use-switch-to-symmio-chain.js.map +1 -0
- package/dist/wallet/use-wallet-account.d.ts +32 -0
- package/dist/wallet/use-wallet-account.d.ts.map +1 -0
- package/dist/wallet/use-wallet-account.js +18 -0
- package/dist/wallet/use-wallet-account.js.map +1 -0
- package/dist/websocket/index.d.ts +2 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/use-notifications.d.ts +48 -0
- package/dist/websocket/use-notifications.d.ts.map +1 -0
- package/dist/websocket/use-notifications.js +51 -0
- package/dist/websocket/use-notifications.js.map +1 -0
- package/dist/withdraw/index.d.ts +11 -0
- package/dist/withdraw/index.d.ts.map +1 -0
- package/dist/withdraw/use-finalize-withdraw-request.d.ts +26 -0
- package/dist/withdraw/use-finalize-withdraw-request.d.ts.map +1 -0
- package/dist/withdraw/use-finalize-withdraw-request.js +40 -0
- package/dist/withdraw/use-finalize-withdraw-request.js.map +1 -0
- package/dist/withdraw/use-initiate-withdraw.d.ts +28 -0
- package/dist/withdraw/use-initiate-withdraw.d.ts.map +1 -0
- package/dist/withdraw/use-initiate-withdraw.js +42 -0
- package/dist/withdraw/use-initiate-withdraw.js.map +1 -0
- package/dist/withdraw/use-last-withdraw-request-id.d.ts +22 -0
- package/dist/withdraw/use-last-withdraw-request-id.d.ts.map +1 -0
- package/dist/withdraw/use-last-withdraw-request-id.js +27 -0
- package/dist/withdraw/use-last-withdraw-request-id.js.map +1 -0
- package/dist/withdraw/use-pending-withdraw-requests.d.ts +21 -0
- package/dist/withdraw/use-pending-withdraw-requests.d.ts.map +1 -0
- package/dist/withdraw/use-pending-withdraw-requests.js +27 -0
- package/dist/withdraw/use-pending-withdraw-requests.js.map +1 -0
- package/dist/withdraw/use-request-cancel-withdraw.d.ts +25 -0
- package/dist/withdraw/use-request-cancel-withdraw.d.ts.map +1 -0
- package/dist/withdraw/use-request-cancel-withdraw.js +40 -0
- package/dist/withdraw/use-request-cancel-withdraw.js.map +1 -0
- package/dist/withdraw/use-simulate-finalize-withdraw-request.d.ts +25 -0
- package/dist/withdraw/use-simulate-finalize-withdraw-request.d.ts.map +1 -0
- package/dist/withdraw/use-simulate-finalize-withdraw-request.js +29 -0
- package/dist/withdraw/use-simulate-finalize-withdraw-request.js.map +1 -0
- package/dist/withdraw/use-simulate-initiate-withdraw.d.ts +26 -0
- package/dist/withdraw/use-simulate-initiate-withdraw.d.ts.map +1 -0
- package/dist/withdraw/use-simulate-initiate-withdraw.js +29 -0
- package/dist/withdraw/use-simulate-initiate-withdraw.js.map +1 -0
- package/dist/withdraw/use-simulate-request-cancel-withdraw.d.ts +25 -0
- package/dist/withdraw/use-simulate-request-cancel-withdraw.d.ts.map +1 -0
- package/dist/withdraw/use-simulate-request-cancel-withdraw.js +29 -0
- package/dist/withdraw/use-simulate-request-cancel-withdraw.js.map +1 -0
- package/dist/withdraw/use-withdraw-requests.d.ts +21 -0
- package/dist/withdraw/use-withdraw-requests.d.ts.map +1 -0
- package/dist/withdraw/use-withdraw-requests.js +27 -0
- package/dist/withdraw/use-withdraw-requests.js.map +1 -0
- package/dist/withdraw/use-withdrawable-time.d.ts +22 -0
- package/dist/withdraw/use-withdrawable-time.d.ts.map +1 -0
- package/dist/withdraw/use-withdrawable-time.js +27 -0
- package/dist/withdraw/use-withdrawable-time.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ConfigParameter, GetQuoteFundingOptions, QuoteFundingData } from '@symmio/trading-core';
|
|
2
|
+
import { SymmioRequestError } from '../errors/symmio-request-error';
|
|
3
|
+
/** Minimum quote shape `useQuotesFunding` needs: just the on-chain id. */
|
|
4
|
+
export interface QuotesFundingInputQuote {
|
|
5
|
+
/** On-chain quote id. Off-chain (pending) rows pass `undefined` and are skipped. */
|
|
6
|
+
quoteId?: bigint;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parameters for {@link useQuotesFunding}.
|
|
10
|
+
*/
|
|
11
|
+
export interface UseQuotesFundingParameters extends Omit<GetQuoteFundingOptions, "quoteIds">, ConfigParameter {
|
|
12
|
+
/**
|
|
13
|
+
* Quotes (or quote-id-bearing rows) to read funding for. Off-chain rows
|
|
14
|
+
* (`quoteId === undefined`) are silently skipped. All resolved on-chain ids
|
|
15
|
+
* are fetched in a single subgraph round-trip.
|
|
16
|
+
*/
|
|
17
|
+
quotes: readonly QuotesFundingInputQuote[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Return type of {@link useQuotesFunding}.
|
|
21
|
+
*/
|
|
22
|
+
export interface UseQuotesFundingReturnType {
|
|
23
|
+
/** Funding row per input quote, in input order. `null` for off-chain rows or ids the subgraph hasn't surfaced yet. */
|
|
24
|
+
rows: Array<QuoteFundingData | null>;
|
|
25
|
+
/** Σ paid across resolved rows (wei). */
|
|
26
|
+
paid: bigint;
|
|
27
|
+
/** Σ received across resolved rows (wei). */
|
|
28
|
+
received: bigint;
|
|
29
|
+
/** Σ net (paid − received) across resolved rows (wei). */
|
|
30
|
+
net: bigint;
|
|
31
|
+
/** Subset of input ids the subgraph has not yet returned (indexing lag). */
|
|
32
|
+
missingQuoteIds: bigint[];
|
|
33
|
+
/** `true` while the underlying subgraph query is loading. */
|
|
34
|
+
isLoading: boolean;
|
|
35
|
+
/** Normalized request error, when one occurred. */
|
|
36
|
+
error: SymmioRequestError | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Batch-read funding totals for a list of quotes from the analytics subgraph in
|
|
40
|
+
* a single round-trip and aggregate them into running sums for the group.
|
|
41
|
+
*
|
|
42
|
+
* The hook is the canonical entry point for both single-quote details panels
|
|
43
|
+
* ({@link useQuoteFunding} delegates here with a 1-element list) and grouped
|
|
44
|
+
* quote cards (which want `Σ net`). Off-chain rows are skipped silently.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```tsx
|
|
48
|
+
* const { rows, net, isLoading } = useQuotesFunding({ quotes: group.quotes });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function useQuotesFunding(parameters: UseQuotesFundingParameters): UseQuotesFundingReturnType;
|
|
52
|
+
//# sourceMappingURL=use-quotes-funding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-quotes-funding.d.ts","sourceRoot":"","sources":["../../src/quotes/use-quotes-funding.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIzE,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,EAAE,eAAe;IAC3G;;;;OAIG;IACH,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,sHAAsH;IACtH,IAAI,EAAE,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACrC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAClC;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,0BAA0B,GAAG,0BAA0B,CA6EnG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useSymmioChainId as e } from "../provider/use-symmio-chain-id.js";
|
|
3
|
+
import { useSymmioConfig as t } from "../provider/use-symmio-config.js";
|
|
4
|
+
import { normalizeSymmError as n } from "../errors/normalize-symm-error.js";
|
|
5
|
+
import { getQuoteFundingQueryOptions as r } from "@symmio/trading-core";
|
|
6
|
+
import { useMemo as i } from "react";
|
|
7
|
+
import { useQuery as a } from "@tanstack/react-query";
|
|
8
|
+
//#region src/quotes/use-quotes-funding.ts
|
|
9
|
+
var o = {
|
|
10
|
+
rows: [],
|
|
11
|
+
paid: 0n,
|
|
12
|
+
received: 0n,
|
|
13
|
+
net: 0n,
|
|
14
|
+
missingQuoteIds: [],
|
|
15
|
+
isLoading: !1,
|
|
16
|
+
error: null
|
|
17
|
+
};
|
|
18
|
+
function s(s) {
|
|
19
|
+
let { quotes: c, ...l } = s, u = t(s), d = e(), f = i(() => {
|
|
20
|
+
let e = /* @__PURE__ */ new Set(), t = [];
|
|
21
|
+
for (let n of c) {
|
|
22
|
+
if (n.quoteId === void 0) continue;
|
|
23
|
+
let r = n.quoteId.toString();
|
|
24
|
+
e.has(r) || (e.add(r), t.push(n.quoteId));
|
|
25
|
+
}
|
|
26
|
+
return t;
|
|
27
|
+
}, [c]), p = r(u, {
|
|
28
|
+
...l,
|
|
29
|
+
chainId: l.chainId ?? d,
|
|
30
|
+
quoteIds: f
|
|
31
|
+
}), m = a({
|
|
32
|
+
...p,
|
|
33
|
+
queryFn: async () => {
|
|
34
|
+
try {
|
|
35
|
+
return await p.queryFn();
|
|
36
|
+
} catch (e) {
|
|
37
|
+
throw n(e);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return i(() => {
|
|
42
|
+
if (f.length === 0) return o;
|
|
43
|
+
let e = m.data;
|
|
44
|
+
if (!e) return {
|
|
45
|
+
rows: c.map(() => null),
|
|
46
|
+
paid: 0n,
|
|
47
|
+
received: 0n,
|
|
48
|
+
net: 0n,
|
|
49
|
+
missingQuoteIds: [],
|
|
50
|
+
isLoading: m.isLoading,
|
|
51
|
+
error: m.error ?? null
|
|
52
|
+
};
|
|
53
|
+
let t = /* @__PURE__ */ new Map();
|
|
54
|
+
for (let n of e.rows) t.set(n.quoteId.toString(), n);
|
|
55
|
+
let n = 0n, r = 0n, i = 0n;
|
|
56
|
+
return {
|
|
57
|
+
rows: c.map((e) => {
|
|
58
|
+
if (e.quoteId === void 0) return null;
|
|
59
|
+
let a = t.get(e.quoteId.toString()) ?? null;
|
|
60
|
+
return a && (n += a.paid, r += a.received, i += a.net), a;
|
|
61
|
+
}),
|
|
62
|
+
paid: n,
|
|
63
|
+
received: r,
|
|
64
|
+
net: i,
|
|
65
|
+
missingQuoteIds: e.missingQuoteIds,
|
|
66
|
+
isLoading: m.isLoading,
|
|
67
|
+
error: m.error ?? null
|
|
68
|
+
};
|
|
69
|
+
}, [
|
|
70
|
+
f,
|
|
71
|
+
c,
|
|
72
|
+
m.data,
|
|
73
|
+
m.isLoading,
|
|
74
|
+
m.error
|
|
75
|
+
]);
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { s as useQuotesFunding };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=use-quotes-funding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-quotes-funding.js","names":[],"sources":["../../src/quotes/use-quotes-funding.ts"],"sourcesContent":["\"use client\";\n\nimport {\n getQuoteFundingQueryOptions,\n type ConfigParameter,\n type GetQuoteFundingOptions,\n type QuoteFundingData,\n} from \"@symmio/trading-core\";\nimport { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { normalizeSymmError } from \"../errors/normalize-symm-error\";\nimport type { SymmioRequestError } from \"../errors/symmio-request-error\";\nimport { useSymmioChainId } from \"../provider/use-symmio-chain-id\";\nimport { useSymmioConfig } from \"../provider/use-symmio-config\";\n\n/** Minimum quote shape `useQuotesFunding` needs: just the on-chain id. */\nexport interface QuotesFundingInputQuote {\n /** On-chain quote id. Off-chain (pending) rows pass `undefined` and are skipped. */\n quoteId?: bigint;\n}\n\n/**\n * Parameters for {@link useQuotesFunding}.\n */\nexport interface UseQuotesFundingParameters extends Omit<GetQuoteFundingOptions, \"quoteIds\">, ConfigParameter {\n /**\n * Quotes (or quote-id-bearing rows) to read funding for. Off-chain rows\n * (`quoteId === undefined`) are silently skipped. All resolved on-chain ids\n * are fetched in a single subgraph round-trip.\n */\n quotes: readonly QuotesFundingInputQuote[];\n}\n\n/**\n * Return type of {@link useQuotesFunding}.\n */\nexport interface UseQuotesFundingReturnType {\n /** Funding row per input quote, in input order. `null` for off-chain rows or ids the subgraph hasn't surfaced yet. */\n rows: Array<QuoteFundingData | null>;\n /** Σ paid across resolved rows (wei). */\n paid: bigint;\n /** Σ received across resolved rows (wei). */\n received: bigint;\n /** Σ net (paid − received) across resolved rows (wei). */\n net: bigint;\n /** Subset of input ids the subgraph has not yet returned (indexing lag). */\n missingQuoteIds: bigint[];\n /** `true` while the underlying subgraph query is loading. */\n isLoading: boolean;\n /** Normalized request error, when one occurred. */\n error: SymmioRequestError | null;\n}\n\nconst EMPTY: UseQuotesFundingReturnType = {\n rows: [],\n paid: 0n,\n received: 0n,\n net: 0n,\n missingQuoteIds: [],\n isLoading: false,\n error: null,\n};\n\n/**\n * Batch-read funding totals for a list of quotes from the analytics subgraph in\n * a single round-trip and aggregate them into running sums for the group.\n *\n * The hook is the canonical entry point for both single-quote details panels\n * ({@link useQuoteFunding} delegates here with a 1-element list) and grouped\n * quote cards (which want `Σ net`). Off-chain rows are skipped silently.\n *\n * @example\n * ```tsx\n * const { rows, net, isLoading } = useQuotesFunding({ quotes: group.quotes });\n * ```\n */\nexport function useQuotesFunding(parameters: UseQuotesFundingParameters): UseQuotesFundingReturnType {\n const { quotes, ...rest } = parameters;\n const config = useSymmioConfig(parameters);\n const chainId = useSymmioChainId();\n\n const onchainQuoteIds = useMemo(() => {\n const seen = new Set<string>();\n const ids: bigint[] = [];\n for (const quote of quotes) {\n if (quote.quoteId === undefined) continue;\n const key = quote.quoteId.toString();\n if (seen.has(key)) continue;\n seen.add(key);\n ids.push(quote.quoteId);\n }\n return ids;\n }, [quotes]);\n\n const options = getQuoteFundingQueryOptions(config, {\n ...rest,\n chainId: rest.chainId ?? chainId,\n quoteIds: onchainQuoteIds,\n });\n\n const query = useQuery({\n ...options,\n queryFn: async () => {\n try {\n return await options.queryFn();\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n }) as UseQueryResult<{ rows: QuoteFundingData[]; missingQuoteIds: bigint[] }, SymmioRequestError>;\n\n return useMemo(() => {\n if (onchainQuoteIds.length === 0) return EMPTY;\n const data = query.data;\n if (!data) {\n return {\n rows: quotes.map(() => null),\n paid: 0n,\n received: 0n,\n net: 0n,\n missingQuoteIds: [],\n isLoading: query.isLoading,\n error: query.error ?? null,\n };\n }\n\n const byQuoteId = new Map<string, QuoteFundingData>();\n for (const row of data.rows) byQuoteId.set(row.quoteId.toString(), row);\n\n let paid = 0n;\n let received = 0n;\n let net = 0n;\n const rows = quotes.map((quote) => {\n if (quote.quoteId === undefined) return null;\n const row = byQuoteId.get(quote.quoteId.toString()) ?? null;\n if (row) {\n paid += row.paid;\n received += row.received;\n net += row.net;\n }\n return row;\n });\n\n return {\n rows,\n paid,\n received,\n net,\n missingQuoteIds: data.missingQuoteIds,\n isLoading: query.isLoading,\n error: query.error ?? null,\n };\n }, [onchainQuoteIds, quotes, query.data, query.isLoading, query.error]);\n}\n"],"mappings":";;;;;;;;AAqDA,IAAM,IAAoC;CACxC,MAAM,CAAC;CACP,MAAM;CACN,UAAU;CACV,KAAK;CACL,iBAAiB,CAAC;CAClB,WAAW;CACX,OAAO;AACT;AAeA,SAAgB,EAAiB,GAAoE;CACnG,IAAM,EAAE,WAAQ,GAAG,MAAS,GACtB,IAAS,EAAgB,CAAU,GACnC,IAAU,EAAiB,GAE3B,IAAkB,QAAc;EACpC,IAAM,oBAAO,IAAI,IAAY,GACvB,IAAgB,CAAC;EACvB,KAAK,IAAM,KAAS,GAAQ;GAC1B,IAAI,EAAM,YAAY,KAAA,GAAW;GACjC,IAAM,IAAM,EAAM,QAAQ,SAAS;GAC/B,EAAK,IAAI,CAAG,MAChB,EAAK,IAAI,CAAG,GACZ,EAAI,KAAK,EAAM,OAAO;EACxB;EACA,OAAO;CACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAU,EAA4B,GAAQ;EAClD,GAAG;EACH,SAAS,EAAK,WAAW;EACzB,UAAU;CACZ,CAAC,GAEK,IAAQ,EAAS;EACrB,GAAG;EACH,SAAS,YAAY;GACnB,IAAI;IACF,OAAO,MAAM,EAAQ,QAAQ;GAC/B,SAAS,GAAK;IACZ,MAAM,EAAmB,CAAG;GAC9B;EACF;CACF,CAAC;CAED,OAAO,QAAc;EACnB,IAAI,EAAgB,WAAW,GAAG,OAAO;EACzC,IAAM,IAAO,EAAM;EACnB,IAAI,CAAC,GACH,OAAO;GACL,MAAM,EAAO,UAAU,IAAI;GAC3B,MAAM;GACN,UAAU;GACV,KAAK;GACL,iBAAiB,CAAC;GAClB,WAAW,EAAM;GACjB,OAAO,EAAM,SAAS;EACxB;EAGF,IAAM,oBAAY,IAAI,IAA8B;EACpD,KAAK,IAAM,KAAO,EAAK,MAAM,EAAU,IAAI,EAAI,QAAQ,SAAS,GAAG,CAAG;EAEtE,IAAI,IAAO,IACP,IAAW,IACX,IAAM;EAYV,OAAO;GACL,MAZW,EAAO,KAAK,MAAU;IACjC,IAAI,EAAM,YAAY,KAAA,GAAW,OAAO;IACxC,IAAM,IAAM,EAAU,IAAI,EAAM,QAAQ,SAAS,CAAC,KAAK;IAMvD,OALI,MACF,KAAQ,EAAI,MACZ,KAAY,EAAI,UAChB,KAAO,EAAI,MAEN;GACT,CAGE;GACA;GACA;GACA;GACA,iBAAiB,EAAK;GACtB,WAAW,EAAM;GACjB,OAAO,EAAM,SAAS;EACxB;CACF,GAAG;EAAC;EAAiB;EAAQ,EAAM;EAAM,EAAM;EAAW,EAAM;CAAK,CAAC;AACxE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ConfigParameter, QuerySubgraphOptions } from '@symmio/trading-core';
|
|
2
|
+
import { UseQueryResult } from '@tanstack/react-query';
|
|
3
|
+
import { SymmioRequestError } from '../errors/symmio-request-error';
|
|
4
|
+
/**
|
|
5
|
+
* Parameters for {@link useSubgraphQuery}: the raw-GraphQL query options
|
|
6
|
+
* (document, variables, optional subgraph/chain id, TanStack `query` overrides)
|
|
7
|
+
* plus an optional `config`.
|
|
8
|
+
*/
|
|
9
|
+
export type UseSubgraphQueryParameters<TResult, TVariables> = QuerySubgraphOptions<TResult, TVariables> & ConfigParameter;
|
|
10
|
+
/** Return type of {@link useSubgraphQuery}. */
|
|
11
|
+
export type UseSubgraphQueryReturnType<TResult> = UseQueryResult<TResult, SymmioRequestError>;
|
|
12
|
+
/**
|
|
13
|
+
* Run an arbitrary typed GraphQL document against a configured SYMMIO subgraph
|
|
14
|
+
* (default `analytics`) — the raw escape hatch behind the curated subgraph hooks.
|
|
15
|
+
* Pass a graphql-codegen `TypedDocumentString` for full type inference, or a raw
|
|
16
|
+
* string with explicit generics. `chainId` defaults to the connected chain;
|
|
17
|
+
* errors are normalized to {@link SymmioRequestError}.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* const { data } = useSubgraphQuery({ document: MY_DOC, variables: { id } });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function useSubgraphQuery<TResult, TVariables = Record<string, unknown>>(parameters: UseSubgraphQueryParameters<TResult, TVariables>): UseSubgraphQueryReturnType<TResult>;
|
|
25
|
+
//# sourceMappingURL=use-subgraph-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-subgraph-query.d.ts","sourceRoot":"","sources":["../../src/quotes/use-subgraph-query.ts"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIzE;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,CAAC,OAAO,EAAE,UAAU,IAAI,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,GACrG,eAAe,CAAC;AAElB,+CAA+C;AAC/C,MAAM,MAAM,0BAA0B,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAE9F;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5E,UAAU,EAAE,0BAA0B,CAAC,OAAO,EAAE,UAAU,CAAC,GAC1D,0BAA0B,CAAC,OAAO,CAAC,CAkBrC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useSymmioChainId as e } from "../provider/use-symmio-chain-id.js";
|
|
3
|
+
import { useSymmioConfig as t } from "../provider/use-symmio-config.js";
|
|
4
|
+
import { normalizeSymmError as n } from "../errors/normalize-symm-error.js";
|
|
5
|
+
import { querySubgraphQueryOptions as r } from "@symmio/trading-core";
|
|
6
|
+
import { useQuery as i } from "@tanstack/react-query";
|
|
7
|
+
//#region src/quotes/use-subgraph-query.ts
|
|
8
|
+
function a(a) {
|
|
9
|
+
let o = t(a), s = e(), c = r(o, {
|
|
10
|
+
...a,
|
|
11
|
+
chainId: a.chainId ?? s
|
|
12
|
+
});
|
|
13
|
+
return i({
|
|
14
|
+
...c,
|
|
15
|
+
queryFn: async () => {
|
|
16
|
+
try {
|
|
17
|
+
return await c.queryFn();
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw n(e);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { a as useSubgraphQuery };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=use-subgraph-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-subgraph-query.js","names":[],"sources":["../../src/quotes/use-subgraph-query.ts"],"sourcesContent":["\"use client\";\n\nimport { querySubgraphQueryOptions, type ConfigParameter, type QuerySubgraphOptions } from \"@symmio/trading-core\";\nimport { useQuery, type UseQueryResult } from \"@tanstack/react-query\";\nimport { normalizeSymmError } from \"../errors/normalize-symm-error\";\nimport type { SymmioRequestError } from \"../errors/symmio-request-error\";\nimport { useSymmioChainId } from \"../provider/use-symmio-chain-id\";\nimport { useSymmioConfig } from \"../provider/use-symmio-config\";\n\n/**\n * Parameters for {@link useSubgraphQuery}: the raw-GraphQL query options\n * (document, variables, optional subgraph/chain id, TanStack `query` overrides)\n * plus an optional `config`.\n */\nexport type UseSubgraphQueryParameters<TResult, TVariables> = QuerySubgraphOptions<TResult, TVariables> &\n ConfigParameter;\n\n/** Return type of {@link useSubgraphQuery}. */\nexport type UseSubgraphQueryReturnType<TResult> = UseQueryResult<TResult, SymmioRequestError>;\n\n/**\n * Run an arbitrary typed GraphQL document against a configured SYMMIO subgraph\n * (default `analytics`) — the raw escape hatch behind the curated subgraph hooks.\n * Pass a graphql-codegen `TypedDocumentString` for full type inference, or a raw\n * string with explicit generics. `chainId` defaults to the connected chain;\n * errors are normalized to {@link SymmioRequestError}.\n *\n * @example\n * ```tsx\n * const { data } = useSubgraphQuery({ document: MY_DOC, variables: { id } });\n * ```\n */\nexport function useSubgraphQuery<TResult, TVariables = Record<string, unknown>>(\n parameters: UseSubgraphQueryParameters<TResult, TVariables>,\n): UseSubgraphQueryReturnType<TResult> {\n const config = useSymmioConfig(parameters);\n const chainId = useSymmioChainId();\n const options = querySubgraphQueryOptions(config, {\n ...parameters,\n chainId: parameters.chainId ?? chainId,\n });\n\n return useQuery({\n ...options,\n queryFn: async () => {\n try {\n return await options.queryFn();\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n }) as UseSubgraphQueryReturnType<TResult>;\n}\n"],"mappings":";;;;;;;AAgCA,SAAgB,EACd,GACqC;CACrC,IAAM,IAAS,EAAgB,CAAU,GACnC,IAAU,EAAiB,GAC3B,IAAU,EAA0B,GAAQ;EAChD,GAAG;EACH,SAAS,EAAW,WAAW;CACjC,CAAC;CAED,OAAO,EAAS;EACd,GAAG;EACH,SAAS,YAAY;GACnB,IAAI;IACF,OAAO,MAAM,EAAQ,QAAQ;GAC/B,SAAS,GAAK;IACZ,MAAM,EAAmB,CAAG;GAC9B;EACF;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './to-quote-tpsl';
|
|
2
|
+
export * from './tpsl-confirming';
|
|
3
|
+
export * from './use-quote-tpsl';
|
|
4
|
+
export * from './use-set-quote-tpsl';
|
|
5
|
+
export * from './use-tpsl-config';
|
|
6
|
+
export * from './use-tpsl-signing-spec';
|
|
7
|
+
export * from './use-watch-tpsl-notifications';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tpsl/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { QuoteTpSl, QuoteTpSlRow } from '@symmio/trading-core';
|
|
2
|
+
/**
|
|
3
|
+
* Fold the handler's per-conditional-order rows into a single {@link QuoteTpSl}.
|
|
4
|
+
*
|
|
5
|
+
* For each side (TP / SL) we keep the most recent row (highest `modify_time`)
|
|
6
|
+
* that is still actionable (`pending`, `new`, `triggered`, `triggered_pending`).
|
|
7
|
+
* Terminated rows (`canceled`, `killed`) are skipped. A side with no active row
|
|
8
|
+
* ends up with empty values and a `canceled` sentinel state — the UI should
|
|
9
|
+
* render an empty side as "no active order" rather than a badge.
|
|
10
|
+
*
|
|
11
|
+
* Field mapping (live API field → SDK field):
|
|
12
|
+
* - `conditional_order_price` → `tp` / `sl` (trigger price, stringified)
|
|
13
|
+
* - `price` → `tpOpenPrice` / `slOpenPrice` (stringified)
|
|
14
|
+
* - `action_price_type` → `tpPriceType` / `slPriceType`
|
|
15
|
+
* - `coh_quote_id` → `tpCohQuoteId` / `slCohQuoteId`
|
|
16
|
+
* - `state` → `tpState` / `slState`
|
|
17
|
+
*/
|
|
18
|
+
export declare function toQuoteTpSl(rows: QuoteTpSlRow[] | null | undefined): QuoteTpSl;
|
|
19
|
+
//# sourceMappingURL=to-quote-tpsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-quote-tpsl.d.ts","sourceRoot":"","sources":["../../src/tpsl/to-quote-tpsl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAmD,MAAM,sBAAsB,CAAC;AAErH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAmD9E"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/tpsl/to-quote-tpsl.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
let r = "", i = "", a = "", o = "", s = "markPrice", c = "markPrice", l = "canceled", u = "canceled", d, f, p = -Infinity, m = -Infinity;
|
|
4
|
+
for (let h of e ?? []) {
|
|
5
|
+
let e = t(h.state);
|
|
6
|
+
if (!e) continue;
|
|
7
|
+
let g = h.action_price_type === "last_close" ? "lastPrice" : "markPrice", _ = n(h.conditional_order_price), v = h.price == null ? "" : n(h.price);
|
|
8
|
+
if (h.conditional_order_type === "take_profit") {
|
|
9
|
+
if (h.modify_time <= p) continue;
|
|
10
|
+
p = h.modify_time, r = _, a = v, s = g, d = h.coh_quote_id, l = e;
|
|
11
|
+
} else if (h.conditional_order_type === "stop_loss") {
|
|
12
|
+
if (h.modify_time <= m) continue;
|
|
13
|
+
m = h.modify_time, i = _, o = v, c = g, f = h.coh_quote_id, u = e;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
tp: r,
|
|
18
|
+
sl: i,
|
|
19
|
+
tpOpenPrice: a,
|
|
20
|
+
slOpenPrice: o,
|
|
21
|
+
tpPriceType: s,
|
|
22
|
+
slPriceType: c,
|
|
23
|
+
tpState: l,
|
|
24
|
+
slState: u,
|
|
25
|
+
tpCohQuoteId: d,
|
|
26
|
+
slCohQuoteId: f
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function t(e) {
|
|
30
|
+
switch (e) {
|
|
31
|
+
case "new": return "new";
|
|
32
|
+
case "pending": return "pending";
|
|
33
|
+
case "triggered":
|
|
34
|
+
case "triggered_pending": return "triggered";
|
|
35
|
+
case "canceled":
|
|
36
|
+
case "killed": return null;
|
|
37
|
+
default: return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function n(e) {
|
|
41
|
+
return Number.isFinite(e) ? String(e) : "";
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { e as toQuoteTpSl };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=to-quote-tpsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-quote-tpsl.js","names":[],"sources":["../../src/tpsl/to-quote-tpsl.ts"],"sourcesContent":["import type { QuoteTpSl, QuoteTpSlRow, QuoteTpSlRowState, TpSlInfoState, TpSlPriceType } from \"@symmio/trading-core\";\n\n/**\n * Fold the handler's per-conditional-order rows into a single {@link QuoteTpSl}.\n *\n * For each side (TP / SL) we keep the most recent row (highest `modify_time`)\n * that is still actionable (`pending`, `new`, `triggered`, `triggered_pending`).\n * Terminated rows (`canceled`, `killed`) are skipped. A side with no active row\n * ends up with empty values and a `canceled` sentinel state — the UI should\n * render an empty side as \"no active order\" rather than a badge.\n *\n * Field mapping (live API field → SDK field):\n * - `conditional_order_price` → `tp` / `sl` (trigger price, stringified)\n * - `price` → `tpOpenPrice` / `slOpenPrice` (stringified)\n * - `action_price_type` → `tpPriceType` / `slPriceType`\n * - `coh_quote_id` → `tpCohQuoteId` / `slCohQuoteId`\n * - `state` → `tpState` / `slState`\n */\nexport function toQuoteTpSl(rows: QuoteTpSlRow[] | null | undefined): QuoteTpSl {\n let tp = \"\";\n let sl = \"\";\n let tpOpenPrice = \"\";\n let slOpenPrice = \"\";\n let tpPriceType: TpSlPriceType = \"markPrice\";\n let slPriceType: TpSlPriceType = \"markPrice\";\n let tpState: TpSlInfoState = \"canceled\";\n let slState: TpSlInfoState = \"canceled\";\n let tpCohQuoteId: string | undefined;\n let slCohQuoteId: string | undefined;\n let tpModifyTime = -Infinity;\n let slModifyTime = -Infinity;\n\n for (const row of rows ?? []) {\n const mapped = mapRowState(row.state);\n if (!mapped) continue;\n const priceType: TpSlPriceType = row.action_price_type === \"last_close\" ? \"lastPrice\" : \"markPrice\";\n const triggerPrice = numberToString(row.conditional_order_price);\n const openPrice = row.price != null ? numberToString(row.price) : \"\";\n if (row.conditional_order_type === \"take_profit\") {\n if (row.modify_time <= tpModifyTime) continue;\n tpModifyTime = row.modify_time;\n tp = triggerPrice;\n tpOpenPrice = openPrice;\n tpPriceType = priceType;\n tpCohQuoteId = row.coh_quote_id;\n tpState = mapped;\n } else if (row.conditional_order_type === \"stop_loss\") {\n if (row.modify_time <= slModifyTime) continue;\n slModifyTime = row.modify_time;\n sl = triggerPrice;\n slOpenPrice = openPrice;\n slPriceType = priceType;\n slCohQuoteId = row.coh_quote_id;\n slState = mapped;\n }\n }\n\n return {\n tp,\n sl,\n tpOpenPrice,\n slOpenPrice,\n tpPriceType,\n slPriceType,\n tpState,\n slState,\n tpCohQuoteId,\n slCohQuoteId,\n };\n}\n\n/**\n * Map the handler's row state onto the SDK's {@link TpSlInfoState}. Returns\n * `null` for terminated states so the fold skips them.\n */\nfunction mapRowState(state: QuoteTpSlRowState): TpSlInfoState | null {\n switch (state) {\n case \"new\":\n return \"new\";\n case \"pending\":\n return \"pending\";\n case \"triggered\":\n case \"triggered_pending\":\n return \"triggered\";\n case \"canceled\":\n case \"killed\":\n return null;\n default:\n return null;\n }\n}\n\n/**\n * Stringify a numeric trigger / open price without injecting `1e-7` for tiny\n * values. `Number#toString()` already does this for the magnitudes we expect,\n * but routing through a helper makes the intent explicit and gives us one\n * place to swap in a Decimal-aware formatter later.\n */\nfunction numberToString(value: number): string {\n if (!Number.isFinite(value)) return \"\";\n return String(value);\n}\n"],"mappings":";AAkBA,SAAgB,EAAY,GAAoD;CAC9E,IAAI,IAAK,IACL,IAAK,IACL,IAAc,IACd,IAAc,IACd,IAA6B,aAC7B,IAA6B,aAC7B,IAAyB,YACzB,IAAyB,YACzB,GACA,GACA,IAAe,WACf,IAAe;CAEnB,KAAK,IAAM,KAAO,KAAQ,CAAC,GAAG;EAC5B,IAAM,IAAS,EAAY,EAAI,KAAK;EACpC,IAAI,CAAC,GAAQ;EACb,IAAM,IAA2B,EAAI,sBAAsB,eAAe,cAAc,aAClF,IAAe,EAAe,EAAI,uBAAuB,GACzD,IAAY,EAAI,SAAS,OAAmC,KAA5B,EAAe,EAAI,KAAK;EAC9D,IAAI,EAAI,2BAA2B,eAAe;GAChD,IAAI,EAAI,eAAe,GAAc;GAMrC,AALA,IAAe,EAAI,aACnB,IAAK,GACL,IAAc,GACd,IAAc,GACd,IAAe,EAAI,cACnB,IAAU;EACZ,OAAO,IAAI,EAAI,2BAA2B,aAAa;GACrD,IAAI,EAAI,eAAe,GAAc;GAMrC,AALA,IAAe,EAAI,aACnB,IAAK,GACL,IAAc,GACd,IAAc,GACd,IAAe,EAAI,cACnB,IAAU;EACZ;CACF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAMA,SAAS,EAAY,GAAgD;CACnE,QAAQ,GAAR;EACE,KAAK,OACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK;EACL,KAAK,qBACH,OAAO;EACT,KAAK;EACL,KAAK,UACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAQA,SAAS,EAAe,GAAuB;CAE7C,OADK,OAAO,SAAS,CAAK,IACnB,OAAO,CAAK,IADiB;AAEtC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { QueryClient } from '@tanstack/react-query';
|
|
2
|
+
/** Per-side flags marking "POST accepted, waiting for WS confirmation". */
|
|
3
|
+
export interface TpSlConfirming {
|
|
4
|
+
tp: boolean;
|
|
5
|
+
sl: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Empty snapshot — nothing awaiting confirmation. */
|
|
8
|
+
export declare const EMPTY_TPSL_CONFIRMING: TpSlConfirming;
|
|
9
|
+
/**
|
|
10
|
+
* Query key for the shared "confirming" slot used to bridge
|
|
11
|
+
* {@link useSetQuoteTpSl} and {@link useQuoteTpSl}.
|
|
12
|
+
*
|
|
13
|
+
* The set-mutation writes `{tp,sl}` here on POST 200; the read-hook overlays
|
|
14
|
+
* `confirming` onto the folded snapshot until a matching WS report clears the
|
|
15
|
+
* flag.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getTpSlConfirmingQueryKey(parameters: {
|
|
18
|
+
chainId: number;
|
|
19
|
+
quoteId: bigint;
|
|
20
|
+
configKey: string;
|
|
21
|
+
}): readonly [string, {
|
|
22
|
+
chainId: number;
|
|
23
|
+
quoteId: string;
|
|
24
|
+
configKey: string;
|
|
25
|
+
}];
|
|
26
|
+
/**
|
|
27
|
+
* Mark one or both sides as awaiting WS confirmation. Merges with any existing
|
|
28
|
+
* flags so an in-flight SL doesn't clear a TP that's still waiting.
|
|
29
|
+
*/
|
|
30
|
+
export declare function markTpSlConfirming(queryClient: QueryClient, key: ReturnType<typeof getTpSlConfirmingQueryKey>, sides: Partial<TpSlConfirming>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Clear one side's confirming flag (called on a matching successful WS
|
|
33
|
+
* frame). Leaves the other side untouched.
|
|
34
|
+
*/
|
|
35
|
+
export declare function clearTpSlConfirmingSide(queryClient: QueryClient, key: ReturnType<typeof getTpSlConfirmingQueryKey>, side: "tp" | "sl"): void;
|
|
36
|
+
//# sourceMappingURL=tpsl-confirming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tpsl-confirming.d.ts","sourceRoot":"","sources":["../../src/tpsl/tpsl-confirming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;CACb;AAED,sDAAsD;AACtD,eAAO,MAAM,qBAAqB,EAAE,cAAyC,CAAC;AAE9E;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,SAAS,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAK7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,EACjD,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAC7B,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,UAAU,CAAC,OAAO,yBAAyB,CAAC,EACjD,IAAI,EAAE,IAAI,GAAG,IAAI,GAChB,IAAI,CAKN"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/tpsl/tpsl-confirming.ts
|
|
2
|
+
var e = {
|
|
3
|
+
tp: !1,
|
|
4
|
+
sl: !1
|
|
5
|
+
};
|
|
6
|
+
function t(e) {
|
|
7
|
+
return ["tpsl-confirming", {
|
|
8
|
+
chainId: e.chainId,
|
|
9
|
+
quoteId: e.quoteId.toString(),
|
|
10
|
+
configKey: e.configKey
|
|
11
|
+
}];
|
|
12
|
+
}
|
|
13
|
+
function n(e, t, n) {
|
|
14
|
+
e.setQueryData(t, (e) => ({
|
|
15
|
+
tp: n.tp ?? e?.tp ?? !1,
|
|
16
|
+
sl: n.sl ?? e?.sl ?? !1
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
function r(t, n, r) {
|
|
20
|
+
t.setQueryData(n, (t) => !t || !t[r] ? t ?? e : {
|
|
21
|
+
...t,
|
|
22
|
+
[r]: !1
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { e as EMPTY_TPSL_CONFIRMING, r as clearTpSlConfirmingSide, t as getTpSlConfirmingQueryKey, n as markTpSlConfirming };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=tpsl-confirming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tpsl-confirming.js","names":[],"sources":["../../src/tpsl/tpsl-confirming.ts"],"sourcesContent":["import type { QueryClient } from \"@tanstack/react-query\";\n\n/** Per-side flags marking \"POST accepted, waiting for WS confirmation\". */\nexport interface TpSlConfirming {\n tp: boolean;\n sl: boolean;\n}\n\n/** Empty snapshot — nothing awaiting confirmation. */\nexport const EMPTY_TPSL_CONFIRMING: TpSlConfirming = { tp: false, sl: false };\n\n/**\n * Query key for the shared \"confirming\" slot used to bridge\n * {@link useSetQuoteTpSl} and {@link useQuoteTpSl}.\n *\n * The set-mutation writes `{tp,sl}` here on POST 200; the read-hook overlays\n * `confirming` onto the folded snapshot until a matching WS report clears the\n * flag.\n */\nexport function getTpSlConfirmingQueryKey(parameters: {\n chainId: number;\n quoteId: bigint;\n configKey: string;\n}): readonly [string, { chainId: number; quoteId: string; configKey: string }] {\n return [\n \"tpsl-confirming\",\n { chainId: parameters.chainId, quoteId: parameters.quoteId.toString(), configKey: parameters.configKey },\n ] as const;\n}\n\n/**\n * Mark one or both sides as awaiting WS confirmation. Merges with any existing\n * flags so an in-flight SL doesn't clear a TP that's still waiting.\n */\nexport function markTpSlConfirming(\n queryClient: QueryClient,\n key: ReturnType<typeof getTpSlConfirmingQueryKey>,\n sides: Partial<TpSlConfirming>,\n): void {\n queryClient.setQueryData<TpSlConfirming>(key, (prev) => ({\n tp: sides.tp ?? prev?.tp ?? false,\n sl: sides.sl ?? prev?.sl ?? false,\n }));\n}\n\n/**\n * Clear one side's confirming flag (called on a matching successful WS\n * frame). Leaves the other side untouched.\n */\nexport function clearTpSlConfirmingSide(\n queryClient: QueryClient,\n key: ReturnType<typeof getTpSlConfirmingQueryKey>,\n side: \"tp\" | \"sl\",\n): void {\n queryClient.setQueryData<TpSlConfirming>(key, (prev) => {\n if (!prev || !prev[side]) return prev ?? EMPTY_TPSL_CONFIRMING;\n return { ...prev, [side]: false };\n });\n}\n"],"mappings":";AASA,IAAa,IAAwC;CAAE,IAAI;CAAO,IAAI;AAAM;AAU5E,SAAgB,EAA0B,GAIqC;CAC7E,OAAO,CACL,mBACA;EAAE,SAAS,EAAW;EAAS,SAAS,EAAW,QAAQ,SAAS;EAAG,WAAW,EAAW;CAAU,CACzG;AACF;AAMA,SAAgB,EACd,GACA,GACA,GACM;CACN,EAAY,aAA6B,IAAM,OAAU;EACvD,IAAI,EAAM,MAAM,GAAM,MAAM;EAC5B,IAAI,EAAM,MAAM,GAAM,MAAM;CAC9B,EAAE;AACJ;AAMA,SAAgB,EACd,GACA,GACA,GACM;CACN,EAAY,aAA6B,IAAM,MACzC,CAAC,KAAQ,CAAC,EAAK,KAAc,KAAQ,IAClC;EAAE,GAAG;GAAO,IAAO;CAAM,CACjC;AACH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ConfigParameter, GetQuoteTpSlOptions, QuoteTpSl, QuoteTpSlRow } from '@symmio/trading-core';
|
|
2
|
+
import { UseQueryResult } from '@tanstack/react-query';
|
|
3
|
+
import { Address } from 'viem';
|
|
4
|
+
import { SymmioRequestError } from '../errors/symmio-request-error';
|
|
5
|
+
/** Parameters for {@link useQuoteTpSl}. */
|
|
6
|
+
export type UseQuoteTpSlParameters = GetQuoteTpSlOptions & ConfigParameter & {
|
|
7
|
+
/**
|
|
8
|
+
* SubAccount address — when provided, the hook also subscribes to the
|
|
9
|
+
* TP/SL WebSocket and reconciles the snapshot (`confirming` → `new`)
|
|
10
|
+
* without manual polling. Omit to skip WS (REST-only).
|
|
11
|
+
*/
|
|
12
|
+
account?: Address;
|
|
13
|
+
};
|
|
14
|
+
/** Return type of {@link useQuoteTpSl}. */
|
|
15
|
+
export type UseQuoteTpSlReturnType = UseQueryResult<QuoteTpSl, SymmioRequestError> & {
|
|
16
|
+
/** The unfiltered conditional-order rows returned by the handler. */
|
|
17
|
+
rows: QuoteTpSlRow[] | undefined;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Read the TP/SL snapshot for one on-chain quote.
|
|
21
|
+
*
|
|
22
|
+
* The query caches the **raw handler rows** (every state — `pending` / `new` /
|
|
23
|
+
* `triggered` / `canceled` / `killed`); the hook returns a folded
|
|
24
|
+
* {@link QuoteTpSl} via {@link toQuoteTpSl}.
|
|
25
|
+
*
|
|
26
|
+
* State machine — when a POST just landed (via
|
|
27
|
+
* {@link useSetQuoteTpSl}) the shared "confirming" slot is set for the
|
|
28
|
+
* submitted sides; this hook overlays `tpState` / `slState = "confirming"`
|
|
29
|
+
* until a matching WebSocket `report` arrives with `successful: true`. On
|
|
30
|
+
* that report the slot is cleared and the rows query is invalidated, so the
|
|
31
|
+
* fresh snapshot flips the side to `new` (active).
|
|
32
|
+
*/
|
|
33
|
+
export declare function useQuoteTpSl(parameters: UseQuoteTpSlParameters): UseQuoteTpSlReturnType;
|
|
34
|
+
//# sourceMappingURL=use-quote-tpsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-quote-tpsl.d.ts","sourceRoot":"","sources":["../../src/tpsl/use-quote-tpsl.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAYzE,2CAA2C;AAC3C,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,GACtD,eAAe,GAAG;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,2CAA2C;AAC3C,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,SAAS,EAAE,kBAAkB,CAAC,GAAG;IACnF,qEAAqE;IACrE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,sBAAsB,GAAG,sBAAsB,CAmEvF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useSymmioChainId as e } from "../provider/use-symmio-chain-id.js";
|
|
3
|
+
import { useSymmioConfig as t } from "../provider/use-symmio-config.js";
|
|
4
|
+
import { normalizeSymmError as n } from "../errors/normalize-symm-error.js";
|
|
5
|
+
import { toQuoteTpSl as r } from "./to-quote-tpsl.js";
|
|
6
|
+
import { EMPTY_TPSL_CONFIRMING as i, clearTpSlConfirmingSide as a, getTpSlConfirmingQueryKey as o } from "./tpsl-confirming.js";
|
|
7
|
+
import { useWatchTpSlNotifications as s } from "./use-watch-tpsl-notifications.js";
|
|
8
|
+
import { getQuoteTpSlQueryKey as c, getQuoteTpSlQueryOptions as l } from "@symmio/trading-core";
|
|
9
|
+
import { useEffect as u, useMemo as d } from "react";
|
|
10
|
+
import { useQuery as f, useQueryClient as p } from "@tanstack/react-query";
|
|
11
|
+
//#region src/tpsl/use-quote-tpsl.ts
|
|
12
|
+
function m(m) {
|
|
13
|
+
let _ = t(m), v = e(), y = m.chainId ?? v, b = p(), x = _.getChainConfigKey(y), S = l(_, {
|
|
14
|
+
...m,
|
|
15
|
+
chainId: y
|
|
16
|
+
}), C = f({
|
|
17
|
+
...S,
|
|
18
|
+
queryFn: async () => {
|
|
19
|
+
try {
|
|
20
|
+
return await S.queryFn();
|
|
21
|
+
} catch (e) {
|
|
22
|
+
throw n(e);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}), w = c({
|
|
26
|
+
...m,
|
|
27
|
+
chainId: y,
|
|
28
|
+
configKey: x
|
|
29
|
+
}), T = o({
|
|
30
|
+
chainId: y,
|
|
31
|
+
quoteId: m.quoteId,
|
|
32
|
+
configKey: x
|
|
33
|
+
}), E = f({
|
|
34
|
+
queryKey: T,
|
|
35
|
+
queryFn: () => b.getQueryData(T) ?? i,
|
|
36
|
+
initialData: i,
|
|
37
|
+
staleTime: Infinity,
|
|
38
|
+
gcTime: Infinity
|
|
39
|
+
}).data ?? i, D = d(() => {
|
|
40
|
+
if (C.data) return g(r(C.data), E);
|
|
41
|
+
}, [C.data, E]), O = m.account, k = m.quoteId, A = JSON.stringify(w);
|
|
42
|
+
return s({
|
|
43
|
+
account: O,
|
|
44
|
+
enabled: !!O && k > 0n,
|
|
45
|
+
onNotification: (e) => {
|
|
46
|
+
if (h(e, k)) {
|
|
47
|
+
if (e.successful) {
|
|
48
|
+
let t = e.conditionalOrderType === "take_profit" ? "tp" : e.conditionalOrderType === "stop_loss" ? "sl" : null;
|
|
49
|
+
t && (e.state === "new" || e.state === "edit") && a(b, T, t);
|
|
50
|
+
}
|
|
51
|
+
b.invalidateQueries({ queryKey: w });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}), u(() => {}, [A]), {
|
|
55
|
+
...C,
|
|
56
|
+
data: D,
|
|
57
|
+
rows: C.data
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function h(e, t) {
|
|
61
|
+
return e.quoteId === Number(t);
|
|
62
|
+
}
|
|
63
|
+
function g(e, t) {
|
|
64
|
+
return !t.tp && !t.sl ? e : {
|
|
65
|
+
...e,
|
|
66
|
+
tpState: t.tp ? "confirming" : e.tpState,
|
|
67
|
+
slState: t.sl ? "confirming" : e.slState
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { m as useQuoteTpSl };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=use-quote-tpsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-quote-tpsl.js","names":[],"sources":["../../src/tpsl/use-quote-tpsl.ts"],"sourcesContent":["\"use client\";\n\nimport {\n getQuoteTpSlQueryKey,\n getQuoteTpSlQueryOptions,\n type ConfigParameter,\n type GetQuoteTpSlOptions,\n type QuoteTpSl,\n type QuoteTpSlRow,\n type TpSlNotification,\n} from \"@symmio/trading-core\";\nimport { useQuery, useQueryClient, type UseQueryResult } from \"@tanstack/react-query\";\nimport { useEffect, useMemo } from \"react\";\nimport type { Address } from \"viem\";\nimport { normalizeSymmError } from \"../errors/normalize-symm-error\";\nimport type { SymmioRequestError } from \"../errors/symmio-request-error\";\nimport { useSymmioChainId } from \"../provider/use-symmio-chain-id\";\nimport { useSymmioConfig } from \"../provider/use-symmio-config\";\nimport { toQuoteTpSl } from \"./to-quote-tpsl\";\nimport {\n clearTpSlConfirmingSide,\n EMPTY_TPSL_CONFIRMING,\n getTpSlConfirmingQueryKey,\n type TpSlConfirming,\n} from \"./tpsl-confirming\";\nimport { useWatchTpSlNotifications } from \"./use-watch-tpsl-notifications\";\n\n/** Parameters for {@link useQuoteTpSl}. */\nexport type UseQuoteTpSlParameters = GetQuoteTpSlOptions &\n ConfigParameter & {\n /**\n * SubAccount address — when provided, the hook also subscribes to the\n * TP/SL WebSocket and reconciles the snapshot (`confirming` → `new`)\n * without manual polling. Omit to skip WS (REST-only).\n */\n account?: Address;\n };\n\n/** Return type of {@link useQuoteTpSl}. */\nexport type UseQuoteTpSlReturnType = UseQueryResult<QuoteTpSl, SymmioRequestError> & {\n /** The unfiltered conditional-order rows returned by the handler. */\n rows: QuoteTpSlRow[] | undefined;\n};\n\n/**\n * Read the TP/SL snapshot for one on-chain quote.\n *\n * The query caches the **raw handler rows** (every state — `pending` / `new` /\n * `triggered` / `canceled` / `killed`); the hook returns a folded\n * {@link QuoteTpSl} via {@link toQuoteTpSl}.\n *\n * State machine — when a POST just landed (via\n * {@link useSetQuoteTpSl}) the shared \"confirming\" slot is set for the\n * submitted sides; this hook overlays `tpState` / `slState = \"confirming\"`\n * until a matching WebSocket `report` arrives with `successful: true`. On\n * that report the slot is cleared and the rows query is invalidated, so the\n * fresh snapshot flips the side to `new` (active).\n */\nexport function useQuoteTpSl(parameters: UseQuoteTpSlParameters): UseQuoteTpSlReturnType {\n const config = useSymmioConfig(parameters);\n const defaultChainId = useSymmioChainId();\n const chainId = parameters.chainId ?? defaultChainId;\n const queryClient = useQueryClient();\n const configKey = config.getChainConfigKey(chainId);\n\n const options = getQuoteTpSlQueryOptions(config, { ...parameters, chainId });\n const queryResult = useQuery({\n ...options,\n queryFn: async () => {\n try {\n return await options.queryFn();\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n });\n\n const rowsKey = getQuoteTpSlQueryKey({ ...parameters, chainId, configKey });\n const confirmingKey = getTpSlConfirmingQueryKey({ chainId, quoteId: parameters.quoteId, configKey });\n\n const confirmingQuery = useQuery<TpSlConfirming>({\n queryKey: confirmingKey,\n queryFn: () => queryClient.getQueryData<TpSlConfirming>(confirmingKey) ?? EMPTY_TPSL_CONFIRMING,\n initialData: EMPTY_TPSL_CONFIRMING,\n staleTime: Infinity,\n gcTime: Infinity,\n });\n const confirming = confirmingQuery.data ?? EMPTY_TPSL_CONFIRMING;\n\n const folded = useMemo(() => {\n if (!queryResult.data) return undefined;\n const snapshot = toQuoteTpSl(queryResult.data);\n return applyConfirmingOverlay(snapshot, confirming);\n }, [queryResult.data, confirming]);\n\n const wsAccount = parameters.account;\n const matchQuoteId = parameters.quoteId;\n const rowsKeySerialized = JSON.stringify(rowsKey);\n\n useWatchTpSlNotifications({\n account: wsAccount,\n enabled: Boolean(wsAccount) && matchQuoteId > 0n,\n onNotification: (notification) => {\n if (!matchesQuote(notification, matchQuoteId)) return;\n if (notification.successful) {\n const side =\n notification.conditionalOrderType === \"take_profit\"\n ? \"tp\"\n : notification.conditionalOrderType === \"stop_loss\"\n ? \"sl\"\n : null;\n if (side && (notification.state === \"new\" || notification.state === \"edit\")) {\n clearTpSlConfirmingSide(queryClient, confirmingKey, side);\n }\n }\n void queryClient.invalidateQueries({ queryKey: rowsKey });\n },\n });\n\n useEffect(() => {\n void rowsKeySerialized;\n }, [rowsKeySerialized]);\n\n const result = { ...queryResult, data: folded, rows: queryResult.data } as unknown as UseQuoteTpSlReturnType;\n return result;\n}\n\nfunction matchesQuote(notification: TpSlNotification, quoteId: bigint): boolean {\n return notification.quoteId === Number(quoteId);\n}\n\n/**\n * If a side is awaiting WS confirmation, override its state to `confirming`\n * (the row snapshot may or may not have caught up yet — either way, \"await\n * WS\" takes precedence over what the REST rows report).\n */\nfunction applyConfirmingOverlay(snapshot: QuoteTpSl, confirming: TpSlConfirming): QuoteTpSl {\n if (!confirming.tp && !confirming.sl) return snapshot;\n return {\n ...snapshot,\n tpState: confirming.tp ? \"confirming\" : snapshot.tpState,\n slState: confirming.sl ? \"confirming\" : snapshot.slState,\n };\n}\n"],"mappings":";;;;;;;;;;;AA0DA,SAAgB,EAAa,GAA4D;CACvF,IAAM,IAAS,EAAgB,CAAU,GACnC,IAAiB,EAAiB,GAClC,IAAU,EAAW,WAAW,GAChC,IAAc,EAAe,GAC7B,IAAY,EAAO,kBAAkB,CAAO,GAE5C,IAAU,EAAyB,GAAQ;EAAE,GAAG;EAAY;CAAQ,CAAC,GACrE,IAAc,EAAS;EAC3B,GAAG;EACH,SAAS,YAAY;GACnB,IAAI;IACF,OAAO,MAAM,EAAQ,QAAQ;GAC/B,SAAS,GAAK;IACZ,MAAM,EAAmB,CAAG;GAC9B;EACF;CACF,CAAC,GAEK,IAAU,EAAqB;EAAE,GAAG;EAAY;EAAS;CAAU,CAAC,GACpE,IAAgB,EAA0B;EAAE;EAAS,SAAS,EAAW;EAAS;CAAU,CAAC,GAS7F,IAPkB,EAAyB;EAC/C,UAAU;EACV,eAAe,EAAY,aAA6B,CAAa,KAAK;EAC1E,aAAa;EACb,WAAW;EACX,QAAQ;CACV,CACmB,EAAgB,QAAQ,GAErC,IAAS,QAAc;EACtB,MAAY,MAEjB,OAAO,EADU,EAAY,EAAY,IACX,GAAU,CAAU;CACpD,GAAG,CAAC,EAAY,MAAM,CAAU,CAAC,GAE3B,IAAY,EAAW,SACvB,IAAe,EAAW,SAC1B,IAAoB,KAAK,UAAU,CAAO;CA2BhD,OAzBA,EAA0B;EACxB,SAAS;EACT,SAAS,EAAQ,KAAc,IAAe;EAC9C,iBAAiB,MAAiB;GAC3B,MAAa,GAAc,CAAY,GAC5C;QAAI,EAAa,YAAY;KAC3B,IAAM,IACJ,EAAa,yBAAyB,gBAClC,OACA,EAAa,yBAAyB,cACpC,OACA;KACR,AAAI,MAAS,EAAa,UAAU,SAAS,EAAa,UAAU,WAClE,EAAwB,GAAa,GAAe,CAAI;IAE5D;IACA,EAAiB,kBAAkB,EAAE,UAAU,EAAQ,CAAC;GADxD;EAEF;CACF,CAAC,GAED,QAAgB,CAEhB,GAAG,CAAC,CAAiB,CAAC,GAGf;EADU,GAAG;EAAa,MAAM;EAAQ,MAAM,EAAY;CAC1D;AACT;AAEA,SAAS,EAAa,GAAgC,GAA0B;CAC9E,OAAO,EAAa,YAAY,OAAO,CAAO;AAChD;AAOA,SAAS,EAAuB,GAAqB,GAAuC;CAE1F,OADI,CAAC,EAAW,MAAM,CAAC,EAAW,KAAW,IACtC;EACL,GAAG;EACH,SAAS,EAAW,KAAK,eAAe,EAAS;EACjD,SAAS,EAAW,KAAK,eAAe,EAAS;CACnD;AACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ConfigParameter, SetQuoteTpSlParameters, SetQuoteTpSlReturnType } from '@symmio/trading-core';
|
|
2
|
+
import { UseMutationResult } from '@tanstack/react-query';
|
|
3
|
+
import { SymmioRequestError } from '../errors/symmio-request-error';
|
|
4
|
+
/** Parameters for {@link useSetQuoteTpSl}. */
|
|
5
|
+
export type UseSetQuoteTpSlParameters = ConfigParameter;
|
|
6
|
+
/** Return type of {@link useSetQuoteTpSl}. */
|
|
7
|
+
export type UseSetQuoteTpSlReturnType = UseMutationResult<SetQuoteTpSlReturnType, SymmioRequestError, SetQuoteTpSlParameters>;
|
|
8
|
+
/**
|
|
9
|
+
* Submit a TP/SL order for one on-chain quote. Signs an EIP-712 message with
|
|
10
|
+
* the session-key wallet and posts to the handler.
|
|
11
|
+
*
|
|
12
|
+
* State machine (per side):
|
|
13
|
+
* 1. `pending` — POST in flight (`mutation.isPending`).
|
|
14
|
+
* 2. `confirming` — POST returned 200; we've written the flag into the shared
|
|
15
|
+
* confirming cache slot ({@link getTpSlConfirmingQueryKey}). `useQuoteTpSl`
|
|
16
|
+
* overlays this as `tpState` / `slState = "confirming"`.
|
|
17
|
+
* 3. `new` — Handler broadcast a `report` with `successful: true`;
|
|
18
|
+
* `useQuoteTpSl`'s WS listener clears the confirming flag and invalidates
|
|
19
|
+
* the row query, so the fresh snapshot flips the side to active.
|
|
20
|
+
*/
|
|
21
|
+
export declare function useSetQuoteTpSl(parameters?: UseSetQuoteTpSlParameters): UseSetQuoteTpSlReturnType;
|
|
22
|
+
//# sourceMappingURL=use-set-quote-tpsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-set-quote-tpsl.d.ts","sourceRoot":"","sources":["../../src/tpsl/use-set-quote-tpsl.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAA+B,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE5F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAKzE,8CAA8C;AAC9C,MAAM,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAExD,8CAA8C;AAC9C,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,CACvD,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,CACvB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,UAAU,GAAE,yBAA8B,GAAG,yBAAyB,CA+BrG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useSymmioChainId as e } from "../provider/use-symmio-chain-id.js";
|
|
3
|
+
import { useSymmioConfig as t } from "../provider/use-symmio-config.js";
|
|
4
|
+
import { normalizeSymmError as n } from "../errors/normalize-symm-error.js";
|
|
5
|
+
import { getTpSlConfirmingQueryKey as r, markTpSlConfirming as i } from "./tpsl-confirming.js";
|
|
6
|
+
import { getQuoteTpSlQueryKey as a, setQuoteTpSlMutationOptions as o } from "@symmio/trading-core";
|
|
7
|
+
import { useMutation as s, useQueryClient as c } from "@tanstack/react-query";
|
|
8
|
+
//#region src/tpsl/use-set-quote-tpsl.ts
|
|
9
|
+
function l(l = {}) {
|
|
10
|
+
let u = t(l), d = e(), f = c(), p = o(u);
|
|
11
|
+
return s({
|
|
12
|
+
mutationKey: p.mutationKey,
|
|
13
|
+
mutationFn: async (e) => {
|
|
14
|
+
try {
|
|
15
|
+
return await p.mutationFn({
|
|
16
|
+
...e,
|
|
17
|
+
chainId: e.chainId ?? d
|
|
18
|
+
});
|
|
19
|
+
} catch (e) {
|
|
20
|
+
throw n(e);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
onSuccess: (e, t) => {
|
|
24
|
+
let n = t.chainId ?? d, o = u.getChainConfigKey(n), s = a({
|
|
25
|
+
chainId: n,
|
|
26
|
+
quoteId: t.quoteId,
|
|
27
|
+
configKey: o
|
|
28
|
+
});
|
|
29
|
+
i(f, r({
|
|
30
|
+
chainId: n,
|
|
31
|
+
quoteId: t.quoteId,
|
|
32
|
+
configKey: o
|
|
33
|
+
}), {
|
|
34
|
+
tp: !!t.tp,
|
|
35
|
+
sl: !!t.sl
|
|
36
|
+
}), f.invalidateQueries({ queryKey: s });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { l as useSetQuoteTpSl };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=use-set-quote-tpsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-set-quote-tpsl.js","names":[],"sources":["../../src/tpsl/use-set-quote-tpsl.ts"],"sourcesContent":["\"use client\";\n\nimport {\n getQuoteTpSlQueryKey,\n setQuoteTpSlMutationOptions,\n type ConfigParameter,\n type SetQuoteTpSlParameters,\n type SetQuoteTpSlReturnType,\n} from \"@symmio/trading-core\";\nimport { useMutation, useQueryClient, type UseMutationResult } from \"@tanstack/react-query\";\nimport { normalizeSymmError } from \"../errors/normalize-symm-error\";\nimport type { SymmioRequestError } from \"../errors/symmio-request-error\";\nimport { useSymmioChainId } from \"../provider/use-symmio-chain-id\";\nimport { useSymmioConfig } from \"../provider/use-symmio-config\";\nimport { getTpSlConfirmingQueryKey, markTpSlConfirming } from \"./tpsl-confirming\";\n\n/** Parameters for {@link useSetQuoteTpSl}. */\nexport type UseSetQuoteTpSlParameters = ConfigParameter;\n\n/** Return type of {@link useSetQuoteTpSl}. */\nexport type UseSetQuoteTpSlReturnType = UseMutationResult<\n SetQuoteTpSlReturnType,\n SymmioRequestError,\n SetQuoteTpSlParameters\n>;\n\n/**\n * Submit a TP/SL order for one on-chain quote. Signs an EIP-712 message with\n * the session-key wallet and posts to the handler.\n *\n * State machine (per side):\n * 1. `pending` — POST in flight (`mutation.isPending`).\n * 2. `confirming` — POST returned 200; we've written the flag into the shared\n * confirming cache slot ({@link getTpSlConfirmingQueryKey}). `useQuoteTpSl`\n * overlays this as `tpState` / `slState = \"confirming\"`.\n * 3. `new` — Handler broadcast a `report` with `successful: true`;\n * `useQuoteTpSl`'s WS listener clears the confirming flag and invalidates\n * the row query, so the fresh snapshot flips the side to active.\n */\nexport function useSetQuoteTpSl(parameters: UseSetQuoteTpSlParameters = {}): UseSetQuoteTpSlReturnType {\n const config = useSymmioConfig(parameters);\n const chainId = useSymmioChainId();\n const queryClient = useQueryClient();\n const base = setQuoteTpSlMutationOptions(config);\n\n return useMutation<SetQuoteTpSlReturnType, SymmioRequestError, SetQuoteTpSlParameters>({\n mutationKey: base.mutationKey,\n mutationFn: async (variables) => {\n try {\n return await base.mutationFn({ ...variables, chainId: variables.chainId ?? chainId });\n } catch (err) {\n throw normalizeSymmError(err);\n }\n },\n onSuccess: (_result, variables) => {\n const resolvedChainId = variables.chainId ?? chainId;\n const configKey = config.getChainConfigKey(resolvedChainId);\n const rowsKey = getQuoteTpSlQueryKey({ chainId: resolvedChainId, quoteId: variables.quoteId, configKey });\n const confirmingKey = getTpSlConfirmingQueryKey({\n chainId: resolvedChainId,\n quoteId: variables.quoteId,\n configKey,\n });\n markTpSlConfirming(queryClient, confirmingKey, {\n tp: Boolean(variables.tp),\n sl: Boolean(variables.sl),\n });\n void queryClient.invalidateQueries({ queryKey: rowsKey });\n },\n });\n}\n"],"mappings":";;;;;;;;AAuCA,SAAgB,EAAgB,IAAwC,CAAC,GAA8B;CACrG,IAAM,IAAS,EAAgB,CAAU,GACnC,IAAU,EAAiB,GAC3B,IAAc,EAAe,GAC7B,IAAO,EAA4B,CAAM;CAE/C,OAAO,EAAgF;EACrF,aAAa,EAAK;EAClB,YAAY,OAAO,MAAc;GAC/B,IAAI;IACF,OAAO,MAAM,EAAK,WAAW;KAAE,GAAG;KAAW,SAAS,EAAU,WAAW;IAAQ,CAAC;GACtF,SAAS,GAAK;IACZ,MAAM,EAAmB,CAAG;GAC9B;EACF;EACA,YAAY,GAAS,MAAc;GACjC,IAAM,IAAkB,EAAU,WAAW,GACvC,IAAY,EAAO,kBAAkB,CAAe,GACpD,IAAU,EAAqB;IAAE,SAAS;IAAiB,SAAS,EAAU;IAAS;GAAU,CAAC;GAUxG,AAJA,EAAmB,GALG,EAA0B;IAC9C,SAAS;IACT,SAAS,EAAU;IACnB;GACF,CACgC,GAAe;IAC7C,IAAI,EAAQ,EAAU;IACtB,IAAI,EAAQ,EAAU;GACxB,CAAC,GACD,EAAiB,kBAAkB,EAAE,UAAU,EAAQ,CAAC;EAC1D;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ConfigParameter, GetTpSlConfigOptions, GetTpSlConfigReturnType } from '@symmio/trading-core';
|
|
2
|
+
import { UseQueryResult } from '@tanstack/react-query';
|
|
3
|
+
import { SymmioRequestError } from '../errors/symmio-request-error';
|
|
4
|
+
/** Parameters for {@link useTpSlConfig}. */
|
|
5
|
+
export type UseTpSlConfigParameters = GetTpSlConfigOptions & ConfigParameter;
|
|
6
|
+
/** Return type of {@link useTpSlConfig}. */
|
|
7
|
+
export type UseTpSlConfigReturnType = UseQueryResult<GetTpSlConfigReturnType, SymmioRequestError>;
|
|
8
|
+
/**
|
|
9
|
+
* Read the TP/SL handler's `/configs/` rules — `minPriceDistancePercent` and
|
|
10
|
+
* `minProfitStopLossSpreadPercent`. Pair with `validateTpSl()` to live-check
|
|
11
|
+
* user input.
|
|
12
|
+
*/
|
|
13
|
+
export declare function useTpSlConfig(parameters?: UseTpSlConfigParameters): UseTpSlConfigReturnType;
|
|
14
|
+
//# sourceMappingURL=use-tpsl-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tpsl-config.d.ts","sourceRoot":"","sources":["../../src/tpsl/use-tpsl-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIzE,4CAA4C;AAC5C,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,eAAe,CAAC;AAE7E,4CAA4C;AAC5C,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;AAElG;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,GAAE,uBAA4B,GAAG,uBAAuB,CAmB/F"}
|