@katanaperps/katana-perps-sdk 0.0.0-placeholder
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/.nvmrc +1 -0
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/dist/abis/ERC20.json +288 -0
- package/dist/abis/EarningsEscrow.json +468 -0
- package/dist/abis/Exchange_v1.json +3644 -0
- package/dist/abis/IOFT.json +447 -0
- package/dist/bridge/config.d.ts +262 -0
- package/dist/bridge/config.d.ts.map +1 -0
- package/dist/bridge/config.js +221 -0
- package/dist/bridge/deposit.d.ts +107 -0
- package/dist/bridge/deposit.d.ts.map +1 -0
- package/dist/bridge/deposit.js +284 -0
- package/dist/bridge/index.d.ts +5 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +7 -0
- package/dist/bridge/utils.d.ts +140 -0
- package/dist/bridge/utils.d.ts.map +1 -0
- package/dist/bridge/utils.js +66 -0
- package/dist/bridge/withdraw.d.ts +42 -0
- package/dist/bridge/withdraw.d.ts.map +1 -0
- package/dist/bridge/withdraw.js +86 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/orderBook/index.d.ts +2 -0
- package/dist/client/orderBook/index.d.ts.map +1 -0
- package/dist/client/orderBook/index.js +4 -0
- package/dist/client/orderBook/realTime.d.ts +180 -0
- package/dist/client/orderBook/realTime.d.ts.map +1 -0
- package/dist/client/orderBook/realTime.js +344 -0
- package/dist/client/orderBook/utils.d.ts +15 -0
- package/dist/client/orderBook/utils.d.ts.map +1 -0
- package/dist/client/orderBook/utils.js +77 -0
- package/dist/client/rest/authenticated.d.ts +1199 -0
- package/dist/client/rest/authenticated.d.ts.map +1 -0
- package/dist/client/rest/authenticated.js +1311 -0
- package/dist/client/rest/index.d.ts +3 -0
- package/dist/client/rest/index.d.ts.map +1 -0
- package/dist/client/rest/index.js +5 -0
- package/dist/client/rest/public.d.ts +436 -0
- package/dist/client/rest/public.d.ts.map +1 -0
- package/dist/client/rest/public.js +502 -0
- package/dist/client/webSocket/guards.d.ts +15 -0
- package/dist/client/webSocket/guards.d.ts.map +1 -0
- package/dist/client/webSocket/guards.js +37 -0
- package/dist/client/webSocket/index.d.ts +632 -0
- package/dist/client/webSocket/index.d.ts.map +1 -0
- package/dist/client/webSocket/index.js +1048 -0
- package/dist/client/webSocket/transform.d.ts +3 -0
- package/dist/client/webSocket/transform.d.ts.map +1 -0
- package/dist/client/webSocket/transform.js +244 -0
- package/dist/constants.d.ts +34 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +38 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/orderbook/apiConversions.d.ts +8 -0
- package/dist/orderbook/apiConversions.d.ts.map +1 -0
- package/dist/orderbook/apiConversions.js +100 -0
- package/dist/orderbook/demo.d.ts +2 -0
- package/dist/orderbook/demo.d.ts.map +1 -0
- package/dist/orderbook/demo.js +68 -0
- package/dist/orderbook/index.d.ts +3 -0
- package/dist/orderbook/index.d.ts.map +1 -0
- package/dist/orderbook/index.js +5 -0
- package/dist/orderbook/quantities.d.ts +112 -0
- package/dist/orderbook/quantities.d.ts.map +1 -0
- package/dist/orderbook/quantities.js +257 -0
- package/dist/orderbook/utils.d.ts +8 -0
- package/dist/orderbook/utils.d.ts.map +1 -0
- package/dist/orderbook/utils.js +28 -0
- package/dist/pipmath.d.ts +21 -0
- package/dist/pipmath.d.ts.map +1 -0
- package/dist/pipmath.js +110 -0
- package/dist/signatures.d.ts +37 -0
- package/dist/signatures.d.ts.map +1 -0
- package/dist/signatures.js +450 -0
- package/dist/tests/orderbook/quantities/calculateInitialMarginFractionWithOverride.test.d.ts +2 -0
- package/dist/tests/orderbook/quantities/calculateInitialMarginFractionWithOverride.test.d.ts.map +1 -0
- package/dist/tests/orderbook/quantities/calculateInitialMarginFractionWithOverride.test.js +49 -0
- package/dist/tests/orderbook/quantities/calculateMaximumInitialMarginFractionOverride.test.d.ts +2 -0
- package/dist/tests/orderbook/quantities/calculateMaximumInitialMarginFractionOverride.test.d.ts.map +1 -0
- package/dist/tests/orderbook/quantities/calculateMaximumInitialMarginFractionOverride.test.js +122 -0
- package/dist/tests/orderbook/quantities/determineMaximumReduceOnlyQuantityAvailableAtPriceLevel.test.d.ts +2 -0
- package/dist/tests/orderbook/quantities/determineMaximumReduceOnlyQuantityAvailableAtPriceLevel.test.d.ts.map +1 -0
- package/dist/tests/orderbook/quantities/determineMaximumReduceOnlyQuantityAvailableAtPriceLevel.test.js +138 -0
- package/dist/tests/orderbook/quantities.test.d.ts +2 -0
- package/dist/tests/orderbook/quantities.test.d.ts.map +1 -0
- package/dist/tests/orderbook/quantities.test.js +310 -0
- package/dist/tests/testHelpers.d.ts +2 -0
- package/dist/tests/testHelpers.d.ts.map +1 -0
- package/dist/tests/testHelpers.js +16 -0
- package/dist/tests/utils/deriveBaseURL.test.d.ts +2 -0
- package/dist/tests/utils/deriveBaseURL.test.d.ts.map +1 -0
- package/dist/tests/utils/deriveBaseURL.test.js +46 -0
- package/dist/typechain-types/ERC20.d.ts +170 -0
- package/dist/typechain-types/ERC20.d.ts.map +1 -0
- package/dist/typechain-types/ERC20.js +2 -0
- package/dist/typechain-types/EarningsEscrow.d.ts +210 -0
- package/dist/typechain-types/EarningsEscrow.d.ts.map +1 -0
- package/dist/typechain-types/EarningsEscrow.js +2 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter.d.ts +253 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter.d.ts.map +1 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter.js +2 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter_v2.d.ts +338 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter_v2.d.ts.map +1 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter_v2.js +2 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter_v3.d.ts +413 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter_v3.d.ts.map +1 -0
- package/dist/typechain-types/ExchangeLayerZeroAdapter_v3.js +2 -0
- package/dist/typechain-types/Exchange_v1.d.ts +2172 -0
- package/dist/typechain-types/Exchange_v1.d.ts.map +1 -0
- package/dist/typechain-types/Exchange_v1.js +2 -0
- package/dist/typechain-types/Exchange_v2.d.ts +2148 -0
- package/dist/typechain-types/Exchange_v2.d.ts.map +1 -0
- package/dist/typechain-types/Exchange_v2.js +2 -0
- package/dist/typechain-types/FixedIncomeVaultProviderStateAggregator_v1.d.ts +148 -0
- package/dist/typechain-types/FixedIncomeVaultProviderStateAggregator_v1.d.ts.map +1 -0
- package/dist/typechain-types/FixedIncomeVaultProviderStateAggregator_v1.js +2 -0
- package/dist/typechain-types/FixedIncomeVaultProvider_v1.d.ts +1204 -0
- package/dist/typechain-types/FixedIncomeVaultProvider_v1.d.ts.map +1 -0
- package/dist/typechain-types/FixedIncomeVaultProvider_v1.js +2 -0
- package/dist/typechain-types/IOFT.d.ts +247 -0
- package/dist/typechain-types/IOFT.d.ts.map +1 -0
- package/dist/typechain-types/IOFT.js +2 -0
- package/dist/typechain-types/IRewardVault.d.ts +649 -0
- package/dist/typechain-types/IRewardVault.d.ts.map +1 -0
- package/dist/typechain-types/IRewardVault.js +2 -0
- package/dist/typechain-types/KumaOFTAdapterUSDC.d.ts +638 -0
- package/dist/typechain-types/KumaOFTAdapterUSDC.d.ts.map +1 -0
- package/dist/typechain-types/KumaOFTAdapterUSDC.js +2 -0
- package/dist/typechain-types/KumaOFTUSDC.d.ts +756 -0
- package/dist/typechain-types/KumaOFTUSDC.d.ts.map +1 -0
- package/dist/typechain-types/KumaOFTUSDC.js +2 -0
- package/dist/typechain-types/KumaStargateForwarder_v1.d.ts +252 -0
- package/dist/typechain-types/KumaStargateForwarder_v1.d.ts.map +1 -0
- package/dist/typechain-types/KumaStargateForwarder_v1.js +2 -0
- package/dist/typechain-types/KumaStargateForwarder_v2.d.ts +252 -0
- package/dist/typechain-types/KumaStargateForwarder_v2.d.ts.map +1 -0
- package/dist/typechain-types/KumaStargateForwarder_v2.js +2 -0
- package/dist/typechain-types/ProfitShareVaultProvider_v1.d.ts +1095 -0
- package/dist/typechain-types/ProfitShareVaultProvider_v1.d.ts.map +1 -0
- package/dist/typechain-types/ProfitShareVaultProvider_v1.js +2 -0
- package/dist/typechain-types/StargatePoolUSDC.d.ts +956 -0
- package/dist/typechain-types/StargatePoolUSDC.d.ts.map +1 -0
- package/dist/typechain-types/StargatePoolUSDC.js +2 -0
- package/dist/typechain-types/common.d.ts +51 -0
- package/dist/typechain-types/common.d.ts.map +1 -0
- package/dist/typechain-types/common.js +2 -0
- package/dist/typechain-types/factories/ERC20__factory.d.ts +226 -0
- package/dist/typechain-types/factories/ERC20__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/ERC20__factory.js +305 -0
- package/dist/typechain-types/factories/EarningsEscrow__factory.d.ts +370 -0
- package/dist/typechain-types/factories/EarningsEscrow__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/EarningsEscrow__factory.js +485 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter__factory.d.ts +359 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter__factory.js +471 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter_v2__factory.d.ts +419 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter_v2__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter_v2__factory.js +545 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter_v3__factory.d.ts +546 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter_v3__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/ExchangeLayerZeroAdapter_v3__factory.js +710 -0
- package/dist/typechain-types/factories/Exchange_v1__factory.d.ts +2852 -0
- package/dist/typechain-types/factories/Exchange_v1__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/Exchange_v1__factory.js +3661 -0
- package/dist/typechain-types/factories/Exchange_v2__factory.d.ts +2832 -0
- package/dist/typechain-types/factories/Exchange_v2__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/Exchange_v2__factory.js +3636 -0
- package/dist/typechain-types/factories/FixedIncomeVaultProviderStateAggregator_v1__factory.d.ts +180 -0
- package/dist/typechain-types/factories/FixedIncomeVaultProviderStateAggregator_v1__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/FixedIncomeVaultProviderStateAggregator_v1__factory.js +246 -0
- package/dist/typechain-types/factories/FixedIncomeVaultProvider_v1__factory.d.ts +2092 -0
- package/dist/typechain-types/factories/FixedIncomeVaultProvider_v1__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/FixedIncomeVaultProvider_v1__factory.js +2702 -0
- package/dist/typechain-types/factories/IOFT__factory.d.ts +352 -0
- package/dist/typechain-types/factories/IOFT__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/IOFT__factory.js +464 -0
- package/dist/typechain-types/factories/IRewardVault__factory.d.ts +1019 -0
- package/dist/typechain-types/factories/IRewardVault__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/IRewardVault__factory.js +1311 -0
- package/dist/typechain-types/factories/KumaOFTAdapterUSDC__factory.d.ts +996 -0
- package/dist/typechain-types/factories/KumaOFTAdapterUSDC__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/KumaOFTAdapterUSDC__factory.js +1306 -0
- package/dist/typechain-types/factories/KumaOFTUSDC__factory.d.ts +1234 -0
- package/dist/typechain-types/factories/KumaOFTUSDC__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/KumaOFTUSDC__factory.js +1619 -0
- package/dist/typechain-types/factories/KumaStargateForwarder_v1__factory.d.ts +354 -0
- package/dist/typechain-types/factories/KumaStargateForwarder_v1__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/KumaStargateForwarder_v1__factory.js +464 -0
- package/dist/typechain-types/factories/KumaStargateForwarder_v2__factory.d.ts +370 -0
- package/dist/typechain-types/factories/KumaStargateForwarder_v2__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/KumaStargateForwarder_v2__factory.js +486 -0
- package/dist/typechain-types/factories/ProfitShareVaultProvider_v1__factory.d.ts +1914 -0
- package/dist/typechain-types/factories/ProfitShareVaultProvider_v1__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/ProfitShareVaultProvider_v1__factory.js +2475 -0
- package/dist/typechain-types/factories/StargatePoolUSDC__factory.d.ts +1557 -0
- package/dist/typechain-types/factories/StargatePoolUSDC__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/StargatePoolUSDC__factory.js +2019 -0
- package/dist/typechain-types/factories/index.d.ts +5 -0
- package/dist/typechain-types/factories/index.d.ts.map +1 -0
- package/dist/typechain-types/factories/index.js +13 -0
- package/dist/typechain-types/index.d.ts +10 -0
- package/dist/typechain-types/index.d.ts.map +1 -0
- package/dist/typechain-types/index.js +15 -0
- package/dist/types/delegatedKeys.d.ts +44 -0
- package/dist/types/delegatedKeys.d.ts.map +1 -0
- package/dist/types/delegatedKeys.js +2 -0
- package/dist/types/enums/index.d.ts +4 -0
- package/dist/types/enums/index.d.ts.map +1 -0
- package/dist/types/enums/index.js +6 -0
- package/dist/types/enums/request.d.ts +980 -0
- package/dist/types/enums/request.d.ts.map +1 -0
- package/dist/types/enums/request.js +906 -0
- package/dist/types/enums/response.d.ts +329 -0
- package/dist/types/enums/response.d.ts.map +1 -0
- package/dist/types/enums/response.js +296 -0
- package/dist/types/enums/signature.d.ts +118 -0
- package/dist/types/enums/signature.d.ts.map +1 -0
- package/dist/types/enums/signature.js +131 -0
- package/dist/types/errors.d.ts +5 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +2 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/orderBook.d.ts +72 -0
- package/dist/types/orderBook.d.ts.map +1 -0
- package/dist/types/orderBook.js +2 -0
- package/dist/types/rest/common/common.d.ts +118 -0
- package/dist/types/rest/common/common.d.ts.map +1 -0
- package/dist/types/rest/common/common.js +2 -0
- package/dist/types/rest/common/guards.d.ts +8 -0
- package/dist/types/rest/common/guards.d.ts.map +1 -0
- package/dist/types/rest/common/guards.js +14 -0
- package/dist/types/rest/endpoints/AssociateWallet.d.ts +40 -0
- package/dist/types/rest/endpoints/AssociateWallet.d.ts.map +1 -0
- package/dist/types/rest/endpoints/AssociateWallet.js +2 -0
- package/dist/types/rest/endpoints/CancelOrders.d.ts +134 -0
- package/dist/types/rest/endpoints/CancelOrders.d.ts.map +1 -0
- package/dist/types/rest/endpoints/CancelOrders.js +2 -0
- package/dist/types/rest/endpoints/CreateOrder.d.ts +401 -0
- package/dist/types/rest/endpoints/CreateOrder.d.ts.map +1 -0
- package/dist/types/rest/endpoints/CreateOrder.js +2 -0
- package/dist/types/rest/endpoints/GetAuthenticationToken.d.ts +39 -0
- package/dist/types/rest/endpoints/GetAuthenticationToken.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetAuthenticationToken.js +2 -0
- package/dist/types/rest/endpoints/GetCandles.d.ts +115 -0
- package/dist/types/rest/endpoints/GetCandles.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetCandles.js +2 -0
- package/dist/types/rest/endpoints/GetDeposits.d.ts +109 -0
- package/dist/types/rest/endpoints/GetDeposits.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetDeposits.js +2 -0
- package/dist/types/rest/endpoints/GetExchange.d.ts +78 -0
- package/dist/types/rest/endpoints/GetExchange.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetExchange.js +9 -0
- package/dist/types/rest/endpoints/GetFills.d.ts +178 -0
- package/dist/types/rest/endpoints/GetFills.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetFills.js +2 -0
- package/dist/types/rest/endpoints/GetFundingPayments.d.ts +52 -0
- package/dist/types/rest/endpoints/GetFundingPayments.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetFundingPayments.js +2 -0
- package/dist/types/rest/endpoints/GetFundingRates.d.ts +34 -0
- package/dist/types/rest/endpoints/GetFundingRates.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetFundingRates.js +2 -0
- package/dist/types/rest/endpoints/GetGasFees.d.ts +23 -0
- package/dist/types/rest/endpoints/GetGasFees.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetGasFees.js +2 -0
- package/dist/types/rest/endpoints/GetHistoricalPnL.d.ts +39 -0
- package/dist/types/rest/endpoints/GetHistoricalPnL.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetHistoricalPnL.js +2 -0
- package/dist/types/rest/endpoints/GetInitialMarginFractionOverride.d.ts +31 -0
- package/dist/types/rest/endpoints/GetInitialMarginFractionOverride.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetInitialMarginFractionOverride.js +2 -0
- package/dist/types/rest/endpoints/GetLiquidations.d.ts +52 -0
- package/dist/types/rest/endpoints/GetLiquidations.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetLiquidations.js +2 -0
- package/dist/types/rest/endpoints/GetMarketMakerRewardsEpochs.d.ts +534 -0
- package/dist/types/rest/endpoints/GetMarketMakerRewardsEpochs.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetMarketMakerRewardsEpochs.js +2 -0
- package/dist/types/rest/endpoints/GetMarkets.d.ts +161 -0
- package/dist/types/rest/endpoints/GetMarkets.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetMarkets.js +2 -0
- package/dist/types/rest/endpoints/GetOrderBook.d.ts +176 -0
- package/dist/types/rest/endpoints/GetOrderBook.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetOrderBook.js +2 -0
- package/dist/types/rest/endpoints/GetOrders.d.ts +188 -0
- package/dist/types/rest/endpoints/GetOrders.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetOrders.js +2 -0
- package/dist/types/rest/endpoints/GetPing.d.ts +8 -0
- package/dist/types/rest/endpoints/GetPing.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetPing.js +2 -0
- package/dist/types/rest/endpoints/GetPositions.d.ts +104 -0
- package/dist/types/rest/endpoints/GetPositions.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetPositions.js +2 -0
- package/dist/types/rest/endpoints/GetTickers.d.ts +129 -0
- package/dist/types/rest/endpoints/GetTickers.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetTickers.js +2 -0
- package/dist/types/rest/endpoints/GetTime.d.ts +14 -0
- package/dist/types/rest/endpoints/GetTime.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetTime.js +2 -0
- package/dist/types/rest/endpoints/GetTrades.d.ts +62 -0
- package/dist/types/rest/endpoints/GetTrades.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetTrades.js +2 -0
- package/dist/types/rest/endpoints/GetWallets.d.ts +121 -0
- package/dist/types/rest/endpoints/GetWallets.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetWallets.js +2 -0
- package/dist/types/rest/endpoints/GetWithdrawals.d.ts +98 -0
- package/dist/types/rest/endpoints/GetWithdrawals.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetWithdrawals.js +2 -0
- package/dist/types/rest/endpoints/GetWithdrawalsFromManagedAccount.d.ts +98 -0
- package/dist/types/rest/endpoints/GetWithdrawalsFromManagedAccount.d.ts.map +1 -0
- package/dist/types/rest/endpoints/GetWithdrawalsFromManagedAccount.js +2 -0
- package/dist/types/rest/endpoints/Payouts.d.ts +199 -0
- package/dist/types/rest/endpoints/Payouts.d.ts.map +1 -0
- package/dist/types/rest/endpoints/Payouts.js +2 -0
- package/dist/types/rest/endpoints/SetInitialMarginFractionOverride.d.ts +83 -0
- package/dist/types/rest/endpoints/SetInitialMarginFractionOverride.d.ts.map +1 -0
- package/dist/types/rest/endpoints/SetInitialMarginFractionOverride.js +2 -0
- package/dist/types/rest/endpoints/WithdrawFunds.d.ts +144 -0
- package/dist/types/rest/endpoints/WithdrawFunds.d.ts.map +1 -0
- package/dist/types/rest/endpoints/WithdrawFunds.js +2 -0
- package/dist/types/rest/endpoints/WithdrawFundsFromManagedAccountByQuantity.d.ts +161 -0
- package/dist/types/rest/endpoints/WithdrawFundsFromManagedAccountByQuantity.d.ts.map +1 -0
- package/dist/types/rest/endpoints/WithdrawFundsFromManagedAccountByQuantity.js +2 -0
- package/dist/types/rest/endpoints/WithdrawFundsFromManagedAccountByShares.d.ts +160 -0
- package/dist/types/rest/endpoints/WithdrawFundsFromManagedAccountByShares.d.ts.map +1 -0
- package/dist/types/rest/endpoints/WithdrawFundsFromManagedAccountByShares.js +2 -0
- package/dist/types/rest/endpoints/index.d.ts +33 -0
- package/dist/types/rest/endpoints/index.d.ts.map +1 -0
- package/dist/types/rest/endpoints/index.js +35 -0
- package/dist/types/rest/endpoints/internal.d.ts +329 -0
- package/dist/types/rest/endpoints/internal.d.ts.map +1 -0
- package/dist/types/rest/endpoints/internal.js +14 -0
- package/dist/types/rest/index.d.ts +4 -0
- package/dist/types/rest/index.d.ts.map +1 -0
- package/dist/types/rest/index.js +6 -0
- package/dist/types/swaps.d.ts +11 -0
- package/dist/types/swaps.d.ts.map +1 -0
- package/dist/types/swaps.js +2 -0
- package/dist/types/utils.d.ts +67 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +3 -0
- package/dist/types/webSocket/base.d.ts +83 -0
- package/dist/types/webSocket/base.d.ts.map +1 -0
- package/dist/types/webSocket/base.js +2 -0
- package/dist/types/webSocket/constants.d.ts +41 -0
- package/dist/types/webSocket/constants.d.ts.map +1 -0
- package/dist/types/webSocket/constants.js +54 -0
- package/dist/types/webSocket/index.d.ts +6 -0
- package/dist/types/webSocket/index.d.ts.map +1 -0
- package/dist/types/webSocket/index.js +8 -0
- package/dist/types/webSocket/options.d.ts +276 -0
- package/dist/types/webSocket/options.d.ts.map +1 -0
- package/dist/types/webSocket/options.js +2 -0
- package/dist/types/webSocket/request/index.d.ts +3 -0
- package/dist/types/webSocket/request/index.d.ts.map +1 -0
- package/dist/types/webSocket/request/index.js +5 -0
- package/dist/types/webSocket/request/request.d.ts +137 -0
- package/dist/types/webSocket/request/request.d.ts.map +1 -0
- package/dist/types/webSocket/request/request.js +2 -0
- package/dist/types/webSocket/request/subscriptions.d.ts +498 -0
- package/dist/types/webSocket/request/subscriptions.d.ts.map +1 -0
- package/dist/types/webSocket/request/subscriptions.js +2 -0
- package/dist/types/webSocket/response/candles.d.ts +138 -0
- package/dist/types/webSocket/response/candles.d.ts.map +1 -0
- package/dist/types/webSocket/response/candles.js +2 -0
- package/dist/types/webSocket/response/deposits.d.ts +80 -0
- package/dist/types/webSocket/response/deposits.d.ts.map +1 -0
- package/dist/types/webSocket/response/deposits.js +2 -0
- package/dist/types/webSocket/response/fundingPayments.d.ts +78 -0
- package/dist/types/webSocket/response/fundingPayments.d.ts.map +1 -0
- package/dist/types/webSocket/response/fundingPayments.js +2 -0
- package/dist/types/webSocket/response/index.d.ts +13 -0
- package/dist/types/webSocket/response/index.d.ts.map +1 -0
- package/dist/types/webSocket/response/index.js +15 -0
- package/dist/types/webSocket/response/liquidations.d.ts +78 -0
- package/dist/types/webSocket/response/liquidations.d.ts.map +1 -0
- package/dist/types/webSocket/response/liquidations.js +2 -0
- package/dist/types/webSocket/response/orderbook.d.ts +214 -0
- package/dist/types/webSocket/response/orderbook.d.ts.map +1 -0
- package/dist/types/webSocket/response/orderbook.js +2 -0
- package/dist/types/webSocket/response/orders.d.ts +355 -0
- package/dist/types/webSocket/response/orders.d.ts.map +1 -0
- package/dist/types/webSocket/response/orders.js +2 -0
- package/dist/types/webSocket/response/ordersFill.d.ts +138 -0
- package/dist/types/webSocket/response/ordersFill.d.ts.map +1 -0
- package/dist/types/webSocket/response/ordersFill.js +2 -0
- package/dist/types/webSocket/response/positions.d.ts +120 -0
- package/dist/types/webSocket/response/positions.d.ts.map +1 -0
- package/dist/types/webSocket/response/positions.js +2 -0
- package/dist/types/webSocket/response/tickers.d.ts +131 -0
- package/dist/types/webSocket/response/tickers.d.ts.map +1 -0
- package/dist/types/webSocket/response/tickers.js +2 -0
- package/dist/types/webSocket/response/trades.d.ts +90 -0
- package/dist/types/webSocket/response/trades.d.ts.map +1 -0
- package/dist/types/webSocket/response/trades.js +2 -0
- package/dist/types/webSocket/response/webclient/base.d.ts +24 -0
- package/dist/types/webSocket/response/webclient/base.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/base.js +2 -0
- package/dist/types/webSocket/response/webclient/events/exchangeStatus.d.ts +31 -0
- package/dist/types/webSocket/response/webclient/events/exchangeStatus.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/events/exchangeStatus.js +2 -0
- package/dist/types/webSocket/response/webclient/events/index.d.ts +4 -0
- package/dist/types/webSocket/response/webclient/events/index.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/events/index.js +6 -0
- package/dist/types/webSocket/response/webclient/events/reloadBanners.d.ts +17 -0
- package/dist/types/webSocket/response/webclient/events/reloadBanners.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/events/reloadBanners.js +2 -0
- package/dist/types/webSocket/response/webclient/events/transactionSettled.d.ts +76 -0
- package/dist/types/webSocket/response/webclient/events/transactionSettled.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/events/transactionSettled.js +2 -0
- package/dist/types/webSocket/response/webclient/index.d.ts +3 -0
- package/dist/types/webSocket/response/webclient/index.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/index.js +5 -0
- package/dist/types/webSocket/response/webclient/webclient.d.ts +13 -0
- package/dist/types/webSocket/response/webclient/webclient.d.ts.map +1 -0
- package/dist/types/webSocket/response/webclient/webclient.js +2 -0
- package/dist/types/webSocket/response/withdrawals.d.ts +83 -0
- package/dist/types/webSocket/response/withdrawals.d.ts.map +1 -0
- package/dist/types/webSocket/response/withdrawals.js +2 -0
- package/dist/utils.d.ts +63 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +136 -0
- package/package.json +200 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrderBookRealTimeClient = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const _pipmath_1 = require("#pipmath");
|
|
6
|
+
const _utils_1 = require("#utils");
|
|
7
|
+
const utils_1 = require("#client/orderBook/utils");
|
|
8
|
+
const public_1 = require("#client/rest/public");
|
|
9
|
+
const index_1 = require("#client/webSocket/index");
|
|
10
|
+
const apiConversions_1 = require("#orderbook/apiConversions");
|
|
11
|
+
const quantities_1 = require("#orderbook/quantities");
|
|
12
|
+
const utils_2 = require("#orderbook/utils");
|
|
13
|
+
const index_2 = require("#types/enums/index");
|
|
14
|
+
/**
|
|
15
|
+
* Orderbook API client
|
|
16
|
+
*
|
|
17
|
+
* @see typedoc [Reference Documentation](https://sdk-js-docs-v1-perps.katana.network/classes/OrderBookRealTimeClient.html)
|
|
18
|
+
* @see options {@link OrderBookRealTimeClientOptions}
|
|
19
|
+
* @see events {@link OrderBookRealTimeClientEvent}
|
|
20
|
+
*
|
|
21
|
+
* @category API Clients
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* import {
|
|
26
|
+
* OrderBookRealTimeClient,
|
|
27
|
+
* OrderBookRealTimeClientEvent,
|
|
28
|
+
* type L2OrderBook
|
|
29
|
+
* } from '@katanaperps/katana-perps-sdk';
|
|
30
|
+
*
|
|
31
|
+
* // type is just to show it will match the form string-string.
|
|
32
|
+
* // actual type will be typed as string
|
|
33
|
+
* type MarketSymbol = `${string}-${string}`;
|
|
34
|
+
*
|
|
35
|
+
* const LIMIT = 10;
|
|
36
|
+
* const MARKETS: MarketSymbol[] = ['BTC-USD'];
|
|
37
|
+
*
|
|
38
|
+
* const client = new OrderBookRealTimeClient({
|
|
39
|
+
* sandbox: true,
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* client.start(MARKETS);
|
|
43
|
+
*
|
|
44
|
+
* const orderbooksMap = new Map<MarketSymbol, L2OrderBook>()
|
|
45
|
+
*
|
|
46
|
+
* async function handleOrderBookLevel2(market: MarketSymbol) {
|
|
47
|
+
* const levelTwoOrderBook = await client.getOrderBookL2(market, LIMIT);
|
|
48
|
+
*
|
|
49
|
+
* orderbooksMap.set(market, levelTwoOrderBook)
|
|
50
|
+
*
|
|
51
|
+
* console.log('Updated OrderBook for market: ', market, levelTwoOrderBook);
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* client.on(OrderBookRealTimeClientEvent.ready, () => {
|
|
55
|
+
* MARKETS.forEach(market => {
|
|
56
|
+
* handleOrderBookLevel2(market)
|
|
57
|
+
* })
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* client.on(OrderBookRealTimeClientEvent.l2, handleOrderBookLevel2);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
class OrderBookRealTimeClient extends events_1.EventEmitter {
|
|
64
|
+
l1OrderBooks = new Map();
|
|
65
|
+
l2OrderBooks = new Map();
|
|
66
|
+
l2OrderBookUpdates = new Map();
|
|
67
|
+
markets = [];
|
|
68
|
+
marketsByAssetSymbol = new Map();
|
|
69
|
+
/**
|
|
70
|
+
* When creating an {@link OrderBookRealTimeClient}, a public client is automatically
|
|
71
|
+
* created and can be used based to make additional public requests if needed.
|
|
72
|
+
*
|
|
73
|
+
* - Can be utilized to fetch public data instead of creating both clients.
|
|
74
|
+
*
|
|
75
|
+
* @category Accessors
|
|
76
|
+
*/
|
|
77
|
+
public;
|
|
78
|
+
marketsResponse = undefined;
|
|
79
|
+
isTickSizesLoaded = false;
|
|
80
|
+
tickSizesByMarket = new Map();
|
|
81
|
+
webSocketClient;
|
|
82
|
+
webSocketConnectionListenersConfigured = false;
|
|
83
|
+
webSocketResponseListenerConfigured = false;
|
|
84
|
+
/**
|
|
85
|
+
* @see typedoc [Reference Documentation](https://sdk-js-docs-v1-perps.katana.network/classes/OrderBookRealTimeClient.html)
|
|
86
|
+
*
|
|
87
|
+
* @category Constructor
|
|
88
|
+
*/
|
|
89
|
+
constructor(options = {}) {
|
|
90
|
+
super();
|
|
91
|
+
const { sandbox = false } = options;
|
|
92
|
+
this.marketsResponse = options.marketsResponse;
|
|
93
|
+
this.public = new public_1.RestPublicClient({
|
|
94
|
+
sandbox,
|
|
95
|
+
apiKey: options.apiKey,
|
|
96
|
+
baseURL: options.baseRestApiURL,
|
|
97
|
+
});
|
|
98
|
+
// monitor realtime client
|
|
99
|
+
this.public[_utils_1.INTERNAL_SYMBOL].realtime();
|
|
100
|
+
this.webSocketClient = new index_1.WebSocketClient({
|
|
101
|
+
sandbox,
|
|
102
|
+
baseRestApiURL: options.baseRestApiURL,
|
|
103
|
+
baseWebSocketURL: options.baseWebSocketURL,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Loads initial state from REST API and begin listening to orderbook updates.
|
|
108
|
+
*
|
|
109
|
+
* @see typedoc [Reference Documentation](https://sdk-js-docs-v1-perps.katana.network/classes/OrderBookRealTimeClient.html#start)
|
|
110
|
+
*
|
|
111
|
+
* @category Connection Management
|
|
112
|
+
*/
|
|
113
|
+
async start(markets, marketsResponse) {
|
|
114
|
+
this.markets = markets;
|
|
115
|
+
if (marketsResponse) {
|
|
116
|
+
this.marketsResponse = marketsResponse;
|
|
117
|
+
}
|
|
118
|
+
this.mapTokensToMarkets();
|
|
119
|
+
this.setupInternalWebSocket();
|
|
120
|
+
await this.webSocketClient.connect(true);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Stop the order book client, and reset internal state.
|
|
124
|
+
* Call this when you are no longer using the client, to release memory and network resources.
|
|
125
|
+
*
|
|
126
|
+
* @see typedoc [Reference Documentation](https://sdk-js-docs-v1-perps.katana.network/classes/OrderBookRealTimeClient.html#stop)
|
|
127
|
+
*
|
|
128
|
+
* @category Connection Management
|
|
129
|
+
*/
|
|
130
|
+
stop() {
|
|
131
|
+
if (this.webSocketClient.isConnected) {
|
|
132
|
+
this.unsubscribe();
|
|
133
|
+
this.webSocketClient.disconnect();
|
|
134
|
+
}
|
|
135
|
+
this.resetInternalState(true);
|
|
136
|
+
}
|
|
137
|
+
async getMaximumTickSizeUnderSpread(market) {
|
|
138
|
+
const { bids } = await this.getOrderBookL2(market, 1000);
|
|
139
|
+
const minBidPrice = bids.length > 0 && bids[bids.length - 1][0];
|
|
140
|
+
const numDigits = minBidPrice ?
|
|
141
|
+
(0, _pipmath_1.decimalToPip)(minBidPrice).toString().length
|
|
142
|
+
: _pipmath_1.exchangeDecimals;
|
|
143
|
+
return BigInt(10 ** (Math.min(numDigits, _pipmath_1.exchangeDecimals) - 1));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Load the current state of the level 1 orderbook for this market.
|
|
147
|
+
*
|
|
148
|
+
* @param tickSize
|
|
149
|
+
* Minimum price movement expressed in pips (10^-8), defaults to market setting
|
|
150
|
+
*
|
|
151
|
+
* @see typedoc [Reference Documentation](https://sdk-js-docs-v1-perps.katana.network/classes/OrderBookRealTimeClient.html#getOrderBookL1)
|
|
152
|
+
* @see response {@link RestResponseGetOrderBookLevel1}
|
|
153
|
+
*
|
|
154
|
+
* @category Requests
|
|
155
|
+
*/
|
|
156
|
+
async getOrderBookL1(market, tickSize) {
|
|
157
|
+
return (0, apiConversions_1.L1OrderBookToRestResponse)((await this.getOrderBooks(market, tickSize)).l1);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Load the current state of the level 2 orderbook for this market.
|
|
161
|
+
*
|
|
162
|
+
* @param limit
|
|
163
|
+
* Total number of price levels (bids + asks) to return
|
|
164
|
+
* - Between 2 and 1000
|
|
165
|
+
* - Defaults to `100`
|
|
166
|
+
* @param tickSize
|
|
167
|
+
* Minimum price movement expressed in pips (10^-8), defaults to market setting
|
|
168
|
+
*
|
|
169
|
+
* @see typedoc [Reference Documentation](https://sdk-js-docs-v1-perps.katana.network/classes/OrderBookRealTimeClient.html#getOrderBookL2)
|
|
170
|
+
* @see response {@link RestResponseGetOrderBookLevel2}
|
|
171
|
+
*
|
|
172
|
+
* @category Requests
|
|
173
|
+
*/
|
|
174
|
+
async getOrderBookL2(market, limit, tickSize) {
|
|
175
|
+
return (0, apiConversions_1.L2OrderBookToRestResponse)((await this.getOrderBooks(market, tickSize)).l2, limit ?? 100);
|
|
176
|
+
}
|
|
177
|
+
async getOrderBooks(market, tickSize) {
|
|
178
|
+
const appliedTickSize = tickSize || this.tickSizesByMarket.get(market) || BigInt(1);
|
|
179
|
+
const l2 = (0, quantities_1.aggregateL2OrderBookAtTickSize)(await this.loadLevel2(market), appliedTickSize);
|
|
180
|
+
return { l1: (0, utils_2.L2toL1OrderBook)(l2), l2 };
|
|
181
|
+
}
|
|
182
|
+
async applyOrderBookUpdates(market) {
|
|
183
|
+
const updates = this.l2OrderBookUpdates.get(market);
|
|
184
|
+
if (!updates) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const book = this.l2OrderBooks.get(market);
|
|
188
|
+
// If this market has not yet been synchronized from the REST API, then halt processing -
|
|
189
|
+
// messages for the market will queue and proccess after it runs
|
|
190
|
+
if (!book) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const beforeL1 = (0, utils_2.L2toL1OrderBook)(book);
|
|
194
|
+
for (const update of updates) {
|
|
195
|
+
// outdated sequence, ignore
|
|
196
|
+
if (book.sequence >= update.sequence) {
|
|
197
|
+
// eslint-disable-next-line no-continue
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
// an expected next update has arrived
|
|
201
|
+
else if (book.sequence + 1 === update.sequence) {
|
|
202
|
+
(0, utils_1.updateL2Levels)(book, update);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
// If an invalid update arrives, reset all data and synchronize anew
|
|
206
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.disconnected);
|
|
207
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.error, new Error(`Missing l2 update sequence, current book is ${book.sequence} message was ${update.sequence}, awaiting ${update.sequence - book.sequence} updates from REST API...`));
|
|
208
|
+
// this.unsubscribe();
|
|
209
|
+
this.resetInternalState();
|
|
210
|
+
// this.subscribe();
|
|
211
|
+
// eslint-disable-next-line no-await-in-loop
|
|
212
|
+
await this.synchronizeFromRestApi();
|
|
213
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.connected);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const afterL1 = (0, utils_2.L2toL1OrderBook)(book);
|
|
218
|
+
this.l1OrderBooks.set(market, (0, utils_2.L2toL1OrderBook)(book));
|
|
219
|
+
if (!(0, utils_1.L1Equal)(beforeL1, afterL1)) {
|
|
220
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.l1, market);
|
|
221
|
+
}
|
|
222
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.l2, market);
|
|
223
|
+
this.l2OrderBookUpdates.delete(market);
|
|
224
|
+
}
|
|
225
|
+
async synchronizeFromRestApi() {
|
|
226
|
+
let reconnectAttempt = 0;
|
|
227
|
+
// Updates cannot be applied until successfully synchronized with the REST API, so keep trying
|
|
228
|
+
// with exponential backoff until success
|
|
229
|
+
// eslint-disable-next-line no-constant-condition
|
|
230
|
+
while (true) {
|
|
231
|
+
const backoffSeconds = 2 ** reconnectAttempt;
|
|
232
|
+
reconnectAttempt += 1;
|
|
233
|
+
try {
|
|
234
|
+
// Load minimums and token prices first so synthetic orderbook calculations are accurate
|
|
235
|
+
// eslint-disable-next-line no-await-in-loop
|
|
236
|
+
await this.loadTickSizes();
|
|
237
|
+
// eslint-disable-next-line no-await-in-loop
|
|
238
|
+
await Promise.all([
|
|
239
|
+
...this.markets.map(async (market) => {
|
|
240
|
+
await this.loadLevel2(market);
|
|
241
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.ready, market);
|
|
242
|
+
}),
|
|
243
|
+
]);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.error, error);
|
|
248
|
+
// eslint-disable-next-line no-await-in-loop
|
|
249
|
+
await sleep(backoffSeconds * 1000);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async loadLevel2(market) {
|
|
254
|
+
let l2 = this.l2OrderBooks.get(market);
|
|
255
|
+
if (!l2) {
|
|
256
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.sync, market);
|
|
257
|
+
l2 = (0, apiConversions_1.restResponseToL2OrderBook)(await this.public.getOrderBookLevel2({
|
|
258
|
+
market,
|
|
259
|
+
limit: 1000,
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
this.l2OrderBooks.set(market, l2);
|
|
263
|
+
return l2;
|
|
264
|
+
}
|
|
265
|
+
async loadTickSizes() {
|
|
266
|
+
// Market tick sizes only need to be loaded once as they are effectively static
|
|
267
|
+
if (this.isTickSizesLoaded) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
this.marketsResponse =
|
|
271
|
+
this.marketsResponse ?? (await this.public.getMarkets());
|
|
272
|
+
for (const market of this.marketsResponse) {
|
|
273
|
+
this.tickSizesByMarket.set(market.market, (0, _pipmath_1.decimalToPip)(market.tickSize));
|
|
274
|
+
}
|
|
275
|
+
this.isTickSizesLoaded = true;
|
|
276
|
+
}
|
|
277
|
+
mapTokensToMarkets() {
|
|
278
|
+
for (const market of this.markets) {
|
|
279
|
+
const [baseSymbol, quoteSymbol] = market.split('-');
|
|
280
|
+
const marketsByBase = this.marketsByAssetSymbol.get(baseSymbol) || new Set();
|
|
281
|
+
marketsByBase.add(market);
|
|
282
|
+
this.marketsByAssetSymbol.set(baseSymbol, marketsByBase);
|
|
283
|
+
const marketsByQuote = this.marketsByAssetSymbol.get(quoteSymbol) || new Set();
|
|
284
|
+
marketsByQuote.add(market);
|
|
285
|
+
this.marketsByAssetSymbol.set(quoteSymbol, marketsByQuote);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
resetInternalState(includeUpdates = false) {
|
|
289
|
+
this.l1OrderBooks.clear();
|
|
290
|
+
this.l2OrderBooks.clear();
|
|
291
|
+
if (includeUpdates) {
|
|
292
|
+
this.l2OrderBookUpdates.clear();
|
|
293
|
+
}
|
|
294
|
+
//
|
|
295
|
+
}
|
|
296
|
+
/* Connection management */
|
|
297
|
+
setupInternalWebSocket() {
|
|
298
|
+
if (!this.webSocketConnectionListenersConfigured) {
|
|
299
|
+
this.webSocketClient.onConnect(this.webSocketHandleConnect.bind(this));
|
|
300
|
+
this.webSocketClient.onDisconnect(this.webSocketHandleDisconnect.bind(this));
|
|
301
|
+
this.webSocketClient.onError(this.webSocketHandleError.bind(this));
|
|
302
|
+
this.webSocketConnectionListenersConfigured = true;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
subscribe() {
|
|
306
|
+
this.webSocketClient.subscribePublic([{ name: index_2.SubscriptionNamePublic.l2orderbook }], this.markets);
|
|
307
|
+
}
|
|
308
|
+
unsubscribe() {
|
|
309
|
+
this.webSocketClient.unsubscribe([index_2.SubscriptionNamePublic.l2orderbook]);
|
|
310
|
+
}
|
|
311
|
+
/* Event handlers */
|
|
312
|
+
async webSocketHandleConnect() {
|
|
313
|
+
if (!this.webSocketResponseListenerConfigured) {
|
|
314
|
+
this.webSocketClient.onMessage(this.webSocketHandleResponse.bind(this));
|
|
315
|
+
this.webSocketResponseListenerConfigured = true;
|
|
316
|
+
}
|
|
317
|
+
this.subscribe();
|
|
318
|
+
await this.synchronizeFromRestApi();
|
|
319
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.connected);
|
|
320
|
+
}
|
|
321
|
+
webSocketHandleDisconnect() {
|
|
322
|
+
// Assume messages will be lost during disconnection and clear state. State will be re-synchronized again on reconnect
|
|
323
|
+
this.resetInternalState(true);
|
|
324
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.disconnected);
|
|
325
|
+
}
|
|
326
|
+
webSocketHandleError(error) {
|
|
327
|
+
this.emit(index_2.OrderBookRealTimeClientEvent.error, error instanceof Error ? error : error.error);
|
|
328
|
+
}
|
|
329
|
+
async webSocketHandleResponse(response) {
|
|
330
|
+
if (response.type === index_2.MessageEventType.l2orderbook) {
|
|
331
|
+
// accumulate L2 updates to be applied
|
|
332
|
+
const updatesToApply = this.l2OrderBookUpdates.get(response.data.market) || [];
|
|
333
|
+
updatesToApply.push((0, apiConversions_1.webSocketResponseToL2OrderBook)(response.data));
|
|
334
|
+
this.l2OrderBookUpdates.set(response.data.market, updatesToApply);
|
|
335
|
+
await this.applyOrderBookUpdates(response.data.market);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
exports.OrderBookRealTimeClient = OrderBookRealTimeClient;
|
|
340
|
+
function sleep(ms) {
|
|
341
|
+
return new Promise((resolve) => {
|
|
342
|
+
setTimeout(resolve, ms);
|
|
343
|
+
});
|
|
344
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { L1OrderBook, L2OrderBook } from '#types/orderBook';
|
|
2
|
+
/**
|
|
3
|
+
* Determine whether two level 1 order books are equal
|
|
4
|
+
*/
|
|
5
|
+
export declare function L1Equal(beforeL1: L1OrderBook, afterL1: L1OrderBook): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Updates a level 2 orderbook using a partial "diff" received over websockets
|
|
8
|
+
*
|
|
9
|
+
* @param updatedLevels
|
|
10
|
+
* - level 2 orderbook containing only limit order price levels that have changed
|
|
11
|
+
*
|
|
12
|
+
* @returns orderbook is updated in-place
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateL2Levels(book: L2OrderBook, updatedLevels: L2OrderBook): void;
|
|
15
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/client/orderBook/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAEZ,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAS5E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,WAAW,GACzB,IAAI,CAMN"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateL2Levels = exports.L1Equal = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Determine whether two level 1 order books are equal
|
|
6
|
+
*/
|
|
7
|
+
function L1Equal(beforeL1, afterL1) {
|
|
8
|
+
return (beforeL1.asks.price === afterL1.asks.price &&
|
|
9
|
+
beforeL1.bids.price === afterL1.bids.price &&
|
|
10
|
+
beforeL1.asks.size === afterL1.asks.size &&
|
|
11
|
+
beforeL1.bids.size === afterL1.bids.size &&
|
|
12
|
+
beforeL1.asks.numOrders === afterL1.asks.numOrders &&
|
|
13
|
+
beforeL1.bids.numOrders === afterL1.bids.numOrders);
|
|
14
|
+
}
|
|
15
|
+
exports.L1Equal = L1Equal;
|
|
16
|
+
/**
|
|
17
|
+
* Updates a level 2 orderbook using a partial "diff" received over websockets
|
|
18
|
+
*
|
|
19
|
+
* @param updatedLevels
|
|
20
|
+
* - level 2 orderbook containing only limit order price levels that have changed
|
|
21
|
+
*
|
|
22
|
+
* @returns orderbook is updated in-place
|
|
23
|
+
*/
|
|
24
|
+
function updateL2Levels(book, updatedLevels) {
|
|
25
|
+
/* eslint-disable no-param-reassign */
|
|
26
|
+
book.sequence = updatedLevels.sequence;
|
|
27
|
+
book.asks = updateL2Side(true, book.asks, updatedLevels.asks);
|
|
28
|
+
book.bids = updateL2Side(false, book.bids, updatedLevels.bids);
|
|
29
|
+
/* eslint-enable no-param-reassign */
|
|
30
|
+
}
|
|
31
|
+
exports.updateL2Levels = updateL2Levels;
|
|
32
|
+
function isBeforeOrEqual(isAscending, a, b) {
|
|
33
|
+
if (isAscending && a.price <= b.price) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (!isAscending && a.price >= b.price) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Applies a changeset to a single side of the orderbook
|
|
43
|
+
*
|
|
44
|
+
* @param {boolean} isAscending
|
|
45
|
+
* `true` for asks, `false` for bids (ordering of price levels)
|
|
46
|
+
*/
|
|
47
|
+
function updateL2Side(isAscending, side, updates) {
|
|
48
|
+
let nextUpdate = updates.shift();
|
|
49
|
+
if (!nextUpdate) {
|
|
50
|
+
return side;
|
|
51
|
+
}
|
|
52
|
+
let lastPriceUpdated = BigInt(0);
|
|
53
|
+
const newLevels = [];
|
|
54
|
+
for (const level of side) {
|
|
55
|
+
// push all updated price levels prior to the existing level
|
|
56
|
+
// skip any with no size, and no orders
|
|
57
|
+
while (nextUpdate && isBeforeOrEqual(isAscending, nextUpdate, level)) {
|
|
58
|
+
if (nextUpdate.size > BigInt(0) && nextUpdate.numOrders > BigInt(0)) {
|
|
59
|
+
newLevels.push(nextUpdate);
|
|
60
|
+
}
|
|
61
|
+
lastPriceUpdated = nextUpdate.price;
|
|
62
|
+
nextUpdate = updates.shift();
|
|
63
|
+
}
|
|
64
|
+
// if the current level was not already updated, add it
|
|
65
|
+
if (level.price !== lastPriceUpdated) {
|
|
66
|
+
newLevels.push(level);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// add all updates that go beyond the current end of the book
|
|
70
|
+
while (nextUpdate &&
|
|
71
|
+
nextUpdate.size > BigInt(0) &&
|
|
72
|
+
nextUpdate.numOrders > BigInt(0)) {
|
|
73
|
+
newLevels.push(nextUpdate);
|
|
74
|
+
nextUpdate = updates.shift();
|
|
75
|
+
}
|
|
76
|
+
return newLevels;
|
|
77
|
+
}
|