@drift-labs/common 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Config.d.ts +26 -0
- package/lib/Config.js +29 -0
- package/lib/Config.js.map +1 -0
- package/lib/EnvironmentConstants.d.ts +40 -0
- package/lib/EnvironmentConstants.js +64 -0
- package/lib/EnvironmentConstants.js.map +1 -0
- package/lib/actions/actionHelpers/accountDeletionHelpers.d.ts +16 -0
- package/lib/actions/actionHelpers/accountDeletionHelpers.js +151 -0
- package/lib/actions/actionHelpers/accountDeletionHelpers.js.map +1 -0
- package/lib/actions/actionHelpers/actionHelpers.d.ts +13 -0
- package/lib/actions/actionHelpers/actionHelpers.js +8 -0
- package/lib/actions/actionHelpers/actionHelpers.js.map +1 -0
- package/lib/chartConstants.d.ts +2 -0
- package/lib/chartConstants.js +14 -0
- package/lib/chartConstants.js.map +1 -0
- package/lib/clients/candleClient.d.ts +74 -0
- package/lib/clients/candleClient.js +364 -0
- package/lib/clients/candleClient.js.map +1 -0
- package/lib/clients/dataApiWsClient.d.ts +33 -0
- package/lib/clients/dataApiWsClient.js +118 -0
- package/lib/clients/dataApiWsClient.js.map +1 -0
- package/lib/clients/index.d.ts +1 -0
- package/lib/clients/index.js +19 -0
- package/lib/clients/index.js.map +1 -0
- package/lib/clients/marketDataFeed.d.ts +42 -0
- package/lib/clients/marketDataFeed.js +422 -0
- package/lib/clients/marketDataFeed.js.map +1 -0
- package/lib/clients/redisClient.d.ts +89 -0
- package/lib/clients/redisClient.js +647 -0
- package/lib/clients/redisClient.js.map +1 -0
- package/lib/clients/swiftClient.d.ts +57 -0
- package/lib/clients/swiftClient.js +289 -0
- package/lib/clients/swiftClient.js.map +1 -0
- package/lib/clients/tvFeed.d.ts +63 -0
- package/lib/clients/tvFeed.js +351 -0
- package/lib/clients/tvFeed.js.map +1 -0
- package/lib/common-ui-utils/commonUiUtils.d.ts +211 -0
- package/lib/common-ui-utils/commonUiUtils.js +624 -0
- package/lib/common-ui-utils/commonUiUtils.js.map +1 -0
- package/lib/common-ui-utils/index.d.ts +6 -0
- package/lib/common-ui-utils/index.js +23 -0
- package/lib/common-ui-utils/index.js.map +1 -0
- package/lib/common-ui-utils/market.d.ts +27 -0
- package/lib/common-ui-utils/market.js +80 -0
- package/lib/common-ui-utils/market.js.map +1 -0
- package/lib/common-ui-utils/order.d.ts +11 -0
- package/lib/common-ui-utils/order.js +161 -0
- package/lib/common-ui-utils/order.js.map +1 -0
- package/lib/common-ui-utils/settings/settings.d.ts +51 -0
- package/lib/common-ui-utils/settings/settings.js +84 -0
- package/lib/common-ui-utils/settings/settings.js.map +1 -0
- package/lib/common-ui-utils/trading.d.ts +56 -0
- package/lib/common-ui-utils/trading.js +200 -0
- package/lib/common-ui-utils/trading.js.map +1 -0
- package/lib/common-ui-utils/user.d.ts +13 -0
- package/lib/common-ui-utils/user.js +124 -0
- package/lib/common-ui-utils/user.js.map +1 -0
- package/lib/constants/autogenerated/driftErrors.json +1787 -0
- package/lib/constants/autogenerated/jup-v4-error-codes.json +67 -0
- package/lib/constants/autogenerated/jup-v6-error-codes.json +115 -0
- package/lib/constants/dev.d.ts +15 -0
- package/lib/constants/dev.js +19 -0
- package/lib/constants/dev.js.map +1 -0
- package/lib/constants/geoblockList.d.ts +4 -0
- package/lib/constants/geoblockList.js +32 -0
- package/lib/constants/geoblockList.js.map +1 -0
- package/lib/constants/index.d.ts +9 -0
- package/lib/constants/index.js +26 -0
- package/lib/constants/index.js.map +1 -0
- package/lib/constants/markets.d.ts +1 -0
- package/lib/constants/markets.js +5 -0
- package/lib/constants/markets.js.map +1 -0
- package/lib/constants/misc.d.ts +23 -0
- package/lib/constants/misc.js +27 -0
- package/lib/constants/misc.js.map +1 -0
- package/lib/constants/orders.d.ts +12 -0
- package/lib/constants/orders.js +79 -0
- package/lib/constants/orders.js.map +1 -0
- package/lib/constants/pools.d.ts +5 -0
- package/lib/constants/pools.js +9 -0
- package/lib/constants/pools.js.map +1 -0
- package/lib/constants/predictionMarket.d.ts +3 -0
- package/lib/constants/predictionMarket.js +7 -0
- package/lib/constants/predictionMarket.js.map +1 -0
- package/lib/constants/superstake.d.ts +22 -0
- package/lib/constants/superstake.js +45 -0
- package/lib/constants/superstake.js.map +1 -0
- package/lib/constants/trade.d.ts +2 -0
- package/lib/constants/trade.js +9 -0
- package/lib/constants/trade.js.map +1 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftL2OrderbookManager.d.ts +68 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftL2OrderbookManager.js +146 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftL2OrderbookManager.js.map +1 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.d.ts +204 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js +530 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js.map +1 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/types.d.ts +90 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/types.js +3 -0
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/types.js.map +1 -0
- package/lib/drift/Drift/clients/AuthorityDrift/SubscriptionManager.d.ts +139 -0
- package/lib/drift/Drift/clients/AuthorityDrift/SubscriptionManager.js +287 -0
- package/lib/drift/Drift/clients/AuthorityDrift/SubscriptionManager.js.map +1 -0
- package/lib/drift/Drift/clients/AuthorityDrift/index.d.ts +242 -0
- package/lib/drift/Drift/clients/AuthorityDrift/index.js +503 -0
- package/lib/drift/Drift/clients/AuthorityDrift/index.js.map +1 -0
- package/lib/drift/Drift/clients/CentralServerDrift.d.ts +91 -0
- package/lib/drift/Drift/clients/CentralServerDrift.js +326 -0
- package/lib/drift/Drift/clients/CentralServerDrift.js.map +1 -0
- package/lib/drift/Drift/clients/index.d.ts +3 -0
- package/lib/drift/Drift/clients/index.js +20 -0
- package/lib/drift/Drift/clients/index.js.map +1 -0
- package/lib/drift/Drift/constants/blockchain.d.ts +24 -0
- package/lib/drift/Drift/constants/blockchain.js +32 -0
- package/lib/drift/Drift/constants/blockchain.js.map +1 -0
- package/lib/drift/Drift/constants/errors.d.ts +6 -0
- package/lib/drift/Drift/constants/errors.js +14 -0
- package/lib/drift/Drift/constants/errors.js.map +1 -0
- package/lib/drift/Drift/constants/index.d.ts +3 -0
- package/lib/drift/Drift/constants/index.js +20 -0
- package/lib/drift/Drift/constants/index.js.map +1 -0
- package/lib/drift/Drift/constants/orderbook.d.ts +7 -0
- package/lib/drift/Drift/constants/orderbook.js +10 -0
- package/lib/drift/Drift/constants/orderbook.js.map +1 -0
- package/lib/drift/Drift/data/PollingDlob.d.ts +154 -0
- package/lib/drift/Drift/data/PollingDlob.js +387 -0
- package/lib/drift/Drift/data/PollingDlob.js.map +1 -0
- package/lib/drift/Drift/data/index.d.ts +1 -0
- package/lib/drift/Drift/data/index.js +18 -0
- package/lib/drift/Drift/data/index.js.map +1 -0
- package/lib/drift/Drift/index.d.ts +4 -0
- package/lib/drift/Drift/index.js +21 -0
- package/lib/drift/Drift/index.js.map +1 -0
- package/lib/drift/Drift/stores/MarkPriceCache.d.ts +27 -0
- package/lib/drift/Drift/stores/MarkPriceCache.js +59 -0
- package/lib/drift/Drift/stores/MarkPriceCache.js.map +1 -0
- package/lib/drift/Drift/stores/OraclePriceCache.d.ts +21 -0
- package/lib/drift/Drift/stores/OraclePriceCache.js +57 -0
- package/lib/drift/Drift/stores/OraclePriceCache.js.map +1 -0
- package/lib/drift/Drift/stores/UserAccountCache.d.ts +49 -0
- package/lib/drift/Drift/stores/UserAccountCache.js +107 -0
- package/lib/drift/Drift/stores/UserAccountCache.js.map +1 -0
- package/lib/drift/Drift/stores/index.d.ts +3 -0
- package/lib/drift/Drift/stores/index.js +20 -0
- package/lib/drift/Drift/stores/index.js.map +1 -0
- package/lib/drift/base/actions/index.d.ts +4 -0
- package/lib/drift/base/actions/index.js +21 -0
- package/lib/drift/base/actions/index.js.map +1 -0
- package/lib/drift/base/actions/perp/index.d.ts +2 -0
- package/lib/drift/base/actions/perp/index.js +19 -0
- package/lib/drift/base/actions/perp/index.js.map +1 -0
- package/lib/drift/base/actions/perp/settleFunding.d.ts +25 -0
- package/lib/drift/base/actions/perp/settleFunding.js +41 -0
- package/lib/drift/base/actions/perp/settleFunding.js.map +1 -0
- package/lib/drift/base/actions/perp/settlePnl.d.ts +35 -0
- package/lib/drift/base/actions/perp/settlePnl.js +44 -0
- package/lib/drift/base/actions/perp/settlePnl.js.map +1 -0
- package/lib/drift/base/actions/spot/borrow.d.ts +1 -0
- package/lib/drift/base/actions/spot/borrow.js +8 -0
- package/lib/drift/base/actions/spot/borrow.js.map +1 -0
- package/lib/drift/base/actions/spot/deposit.d.ts +40 -0
- package/lib/drift/base/actions/spot/deposit.js +82 -0
- package/lib/drift/base/actions/spot/deposit.js.map +1 -0
- package/lib/drift/base/actions/spot/index.d.ts +3 -0
- package/lib/drift/base/actions/spot/index.js +20 -0
- package/lib/drift/base/actions/spot/index.js.map +1 -0
- package/lib/drift/base/actions/spot/withdraw.d.ts +16 -0
- package/lib/drift/base/actions/spot/withdraw.js +39 -0
- package/lib/drift/base/actions/spot/withdraw.js.map +1 -0
- package/lib/drift/base/actions/trade/cancelOrder.d.ts +47 -0
- package/lib/drift/base/actions/trade/cancelOrder.js +55 -0
- package/lib/drift/base/actions/trade/cancelOrder.js.map +1 -0
- package/lib/drift/base/actions/trade/editOrder.d.ts +55 -0
- package/lib/drift/base/actions/trade/editOrder.js +35 -0
- package/lib/drift/base/actions/trade/editOrder.js.map +1 -0
- package/lib/drift/base/actions/trade/index.d.ts +4 -0
- package/lib/drift/base/actions/trade/index.js +21 -0
- package/lib/drift/base/actions/trade/index.js.map +1 -0
- package/lib/drift/base/actions/trade/openPerpOrder/index.d.ts +3 -0
- package/lib/drift/base/actions/trade/openPerpOrder/index.js +20 -0
- package/lib/drift/base/actions/trade/openPerpOrder/index.js.map +1 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.d.ts +84 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js +293 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js.map +1 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.d.ts +19 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +161 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js.map +1 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.d.ts +166 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js +156 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openSwiftOrder/index.js.map +1 -0
- package/lib/drift/base/actions/trade/swap.d.ts +62 -0
- package/lib/drift/base/actions/trade/swap.js +60 -0
- package/lib/drift/base/actions/trade/swap.js.map +1 -0
- package/lib/drift/base/actions/user/create.d.ts +75 -0
- package/lib/drift/base/actions/user/create.js +104 -0
- package/lib/drift/base/actions/user/create.js.map +1 -0
- package/lib/drift/base/actions/user/delete.d.ts +47 -0
- package/lib/drift/base/actions/user/delete.js +39 -0
- package/lib/drift/base/actions/user/delete.js.map +1 -0
- package/lib/drift/base/actions/user/index.d.ts +1 -0
- package/lib/drift/base/actions/user/index.js +18 -0
- package/lib/drift/base/actions/user/index.js.map +1 -0
- package/lib/drift/base/constants/accountNames.d.ts +1 -0
- package/lib/drift/base/constants/accountNames.js +13 -0
- package/lib/drift/base/constants/accountNames.js.map +1 -0
- package/lib/drift/base/details/index.d.ts +2 -0
- package/lib/drift/base/details/index.js +19 -0
- package/lib/drift/base/details/index.js.map +1 -0
- package/lib/drift/base/details/market/funding.d.ts +9 -0
- package/lib/drift/base/details/market/funding.js +50 -0
- package/lib/drift/base/details/market/funding.js.map +1 -0
- package/lib/drift/base/details/market/index.d.ts +2 -0
- package/lib/drift/base/details/market/index.js +19 -0
- package/lib/drift/base/details/market/index.js.map +1 -0
- package/lib/drift/base/details/market/openInterest.d.ts +5 -0
- package/lib/drift/base/details/market/openInterest.js +12 -0
- package/lib/drift/base/details/market/openInterest.js.map +1 -0
- package/lib/drift/base/details/user/balances.d.ts +40 -0
- package/lib/drift/base/details/user/balances.js +39 -0
- package/lib/drift/base/details/user/balances.js.map +1 -0
- package/lib/drift/base/details/user/index.d.ts +4 -0
- package/lib/drift/base/details/user/index.js +21 -0
- package/lib/drift/base/details/user/index.js.map +1 -0
- package/lib/drift/base/details/user/marginInfo.d.ts +29 -0
- package/lib/drift/base/details/user/marginInfo.js +49 -0
- package/lib/drift/base/details/user/marginInfo.js.map +1 -0
- package/lib/drift/base/details/user/orders.d.ts +3 -0
- package/lib/drift/base/details/user/orders.js +11 -0
- package/lib/drift/base/details/user/orders.js.map +1 -0
- package/lib/drift/base/details/user/positions.d.ts +70 -0
- package/lib/drift/base/details/user/positions.js +146 -0
- package/lib/drift/base/details/user/positions.js.map +1 -0
- package/lib/drift/cli.d.ts +25 -0
- package/lib/drift/cli.js +900 -0
- package/lib/drift/cli.js.map +1 -0
- package/lib/drift/constants/apiUrls.d.ts +27 -0
- package/lib/drift/constants/apiUrls.js +31 -0
- package/lib/drift/constants/apiUrls.js.map +1 -0
- package/lib/drift/example.d.ts +19 -0
- package/lib/drift/example.js +249 -0
- package/lib/drift/example.js.map +1 -0
- package/lib/drift/index.d.ts +3 -0
- package/lib/drift/index.js +20 -0
- package/lib/drift/index.js.map +1 -0
- package/lib/drift/utils/auctionParamsResponseMapper.d.ts +45 -0
- package/lib/drift/utils/auctionParamsResponseMapper.js +148 -0
- package/lib/drift/utils/auctionParamsResponseMapper.js.map +1 -0
- package/lib/drift/utils/funding.d.ts +2 -0
- package/lib/drift/utils/funding.js +9 -0
- package/lib/drift/utils/funding.js.map +1 -0
- package/lib/drift/utils/index.d.ts +3 -0
- package/lib/drift/utils/index.js +23 -0
- package/lib/drift/utils/index.js.map +1 -0
- package/lib/drift/utils/orderParams.d.ts +48 -0
- package/lib/drift/utils/orderParams.js +140 -0
- package/lib/drift/utils/orderParams.js.map +1 -0
- package/lib/index.d.ts +45 -0
- package/lib/index.js +68 -0
- package/lib/index.js.map +1 -0
- package/lib/serializableTypes.d.ts +961 -0
- package/lib/serializableTypes.js +3887 -0
- package/lib/serializableTypes.js.map +1 -0
- package/lib/types/MarketId.d.ts +26 -0
- package/lib/types/MarketId.js +64 -0
- package/lib/types/MarketId.js.map +1 -0
- package/lib/types/Superstake.d.ts +7 -0
- package/lib/types/Superstake.js +3 -0
- package/lib/types/Superstake.js.map +1 -0
- package/lib/types/UIEnv.d.ts +26 -0
- package/lib/types/UIEnv.js +49 -0
- package/lib/types/UIEnv.js.map +1 -0
- package/lib/types/UIMarket.d.ts +94 -0
- package/lib/types/UIMarket.js +224 -0
- package/lib/types/UIMarket.js.map +1 -0
- package/lib/types/candles.d.ts +4 -0
- package/lib/types/candles.js +9 -0
- package/lib/types/candles.js.map +1 -0
- package/lib/types/dataServer.d.ts +53 -0
- package/lib/types/dataServer.js +3 -0
- package/lib/types/dataServer.js.map +1 -0
- package/lib/types/historyServer.d.ts +38 -0
- package/lib/types/historyServer.js +11 -0
- package/lib/types/historyServer.js.map +1 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.js +29 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/leaderboard.d.ts +80 -0
- package/lib/types/leaderboard.js +11 -0
- package/lib/types/leaderboard.js.map +1 -0
- package/lib/types/remote-configs.d.ts +61 -0
- package/lib/types/remote-configs.js +3 -0
- package/lib/types/remote-configs.js.map +1 -0
- package/lib/types/trade.d.ts +18 -0
- package/lib/types/trade.js +3 -0
- package/lib/types/trade.js.map +1 -0
- package/lib/types/user.d.ts +40 -0
- package/lib/types/user.js +3 -0
- package/lib/types/user.js.map +1 -0
- package/lib/types/utility.d.ts +15 -0
- package/lib/types/utility.js +3 -0
- package/lib/types/utility.js.map +1 -0
- package/lib/utils/CircularBuffers/CircularBuffer.d.ts +22 -0
- package/lib/utils/CircularBuffers/CircularBuffer.js +73 -0
- package/lib/utils/CircularBuffers/CircularBuffer.js.map +1 -0
- package/lib/utils/CircularBuffers/UniqueCircularBuffer.d.ts +19 -0
- package/lib/utils/CircularBuffers/UniqueCircularBuffer.js +78 -0
- package/lib/utils/CircularBuffers/UniqueCircularBuffer.js.map +1 -0
- package/lib/utils/CircularBuffers/index.d.ts +2 -0
- package/lib/utils/CircularBuffers/index.js +19 -0
- package/lib/utils/CircularBuffers/index.js.map +1 -0
- package/lib/utils/MultiplexWebSocket.d.ts +95 -0
- package/lib/utils/MultiplexWebSocket.js +416 -0
- package/lib/utils/MultiplexWebSocket.js.map +1 -0
- package/lib/utils/NumLib.d.ts +106 -0
- package/lib/utils/NumLib.js +300 -0
- package/lib/utils/NumLib.js.map +1 -0
- package/lib/utils/SharedInterval.d.ts +21 -0
- package/lib/utils/SharedInterval.js +47 -0
- package/lib/utils/SharedInterval.js.map +1 -0
- package/lib/utils/SlotBasedResultValidator.d.ts +9 -0
- package/lib/utils/SlotBasedResultValidator.js +27 -0
- package/lib/utils/SlotBasedResultValidator.js.map +1 -0
- package/lib/utils/Stopwatch.d.ts +15 -0
- package/lib/utils/Stopwatch.js +31 -0
- package/lib/utils/Stopwatch.js.map +1 -0
- package/lib/utils/StrictEventEmitter.d.ts +15 -0
- package/lib/utils/StrictEventEmitter.js +55 -0
- package/lib/utils/StrictEventEmitter.js.map +1 -0
- package/lib/utils/WalletConnectionState.d.ts +31 -0
- package/lib/utils/WalletConnectionState.js +83 -0
- package/lib/utils/WalletConnectionState.js.map +1 -0
- package/lib/utils/assert.d.ts +1 -0
- package/lib/utils/assert.js +10 -0
- package/lib/utils/assert.js.map +1 -0
- package/lib/utils/candles/Candle.d.ts +94 -0
- package/lib/utils/candles/Candle.js +580 -0
- package/lib/utils/candles/Candle.js.map +1 -0
- package/lib/utils/candles/types.d.ts +8 -0
- package/lib/utils/candles/types.js +3 -0
- package/lib/utils/candles/types.js.map +1 -0
- package/lib/utils/dlob-server/DlobServerWebsocketUtils.d.ts +57 -0
- package/lib/utils/dlob-server/DlobServerWebsocketUtils.js +137 -0
- package/lib/utils/dlob-server/DlobServerWebsocketUtils.js.map +1 -0
- package/lib/utils/driftEvents.d.ts +10 -0
- package/lib/utils/driftEvents.js +123 -0
- package/lib/utils/driftEvents.js.map +1 -0
- package/lib/utils/equalityChecks.d.ts +12 -0
- package/lib/utils/equalityChecks.js +71 -0
- package/lib/utils/equalityChecks.js.map +1 -0
- package/lib/utils/featureFlags.d.ts +3 -0
- package/lib/utils/featureFlags.js +7 -0
- package/lib/utils/featureFlags.js.map +1 -0
- package/lib/utils/geoblock/index.d.ts +4 -0
- package/lib/utils/geoblock/index.js +20 -0
- package/lib/utils/geoblock/index.js.map +1 -0
- package/lib/utils/index.d.ts +181 -0
- package/lib/utils/index.js +608 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/insuranceFund.d.ts +15 -0
- package/lib/utils/insuranceFund.js +84 -0
- package/lib/utils/insuranceFund.js.map +1 -0
- package/lib/utils/logger.d.ts +5 -0
- package/lib/utils/logger.js +53 -0
- package/lib/utils/logger.js.map +1 -0
- package/lib/utils/math.d.ts +10 -0
- package/lib/utils/math.js +89 -0
- package/lib/utils/math.js.map +1 -0
- package/lib/utils/orderbook/index.d.ts +65 -0
- package/lib/utils/orderbook/index.js +80 -0
- package/lib/utils/orderbook/index.js.map +1 -0
- package/lib/utils/pollingSequenceGuard.d.ts +9 -0
- package/lib/utils/pollingSequenceGuard.js +24 -0
- package/lib/utils/pollingSequenceGuard.js.map +1 -0
- package/lib/utils/priority-fees/PriorityFeeCalculator.d.ts +24 -0
- package/lib/utils/priority-fees/PriorityFeeCalculator.js +53 -0
- package/lib/utils/priority-fees/PriorityFeeCalculator.js.map +1 -0
- package/lib/utils/priority-fees/PriorityFeeStrategies.d.ts +5 -0
- package/lib/utils/priority-fees/PriorityFeeStrategies.js +43 -0
- package/lib/utils/priority-fees/PriorityFeeStrategies.js.map +1 -0
- package/lib/utils/priority-fees/index.d.ts +2 -0
- package/lib/utils/priority-fees/index.js +19 -0
- package/lib/utils/priority-fees/index.js.map +1 -0
- package/lib/utils/priorityFees.d.ts +14 -0
- package/lib/utils/priorityFees.js +68 -0
- package/lib/utils/priorityFees.js.map +1 -0
- package/lib/utils/rpcLatency.d.ts +7 -0
- package/lib/utils/rpcLatency.js +49 -0
- package/lib/utils/rpcLatency.js.map +1 -0
- package/lib/utils/rxjs.d.ts +11 -0
- package/lib/utils/rxjs.js +24 -0
- package/lib/utils/rxjs.js.map +1 -0
- package/lib/utils/s3Buckets.d.ts +43 -0
- package/lib/utils/s3Buckets.js +108 -0
- package/lib/utils/s3Buckets.js.map +1 -0
- package/lib/utils/superstake.d.ts +86 -0
- package/lib/utils/superstake.js +224 -0
- package/lib/utils/superstake.js.map +1 -0
- package/lib/utils/token.d.ts +16 -0
- package/lib/utils/token.js +44 -0
- package/lib/utils/token.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Candle.js","sourceRoot":"","sources":["../../../src/utils/candles/Candle.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBASE_PRECISION_EXP,\n\tBN,\n\tBigNum,\n\tCandleResolution,\n\tOrderAction,\n\tOrderActionExplanation,\n\tPRICE_PRECISION_EXP,\n\tQUOTE_PRECISION_EXP,\n\tWrappedEvent,\n\tZERO,\n} from '@drift-labs/sdk';\nimport {\n\tSerializableCandle,\n\tUISerializableCandle,\n} from '../../serializableTypes';\nimport { CandleType } from '../../types';\nimport {\n\tENUM_UTILS,\n\tgetPriceForUIOrderRecord,\n\tPartialUISerializableOrderActionRecord,\n\tsortUIOrderActionRecords,\n} from '..';\nimport { Bar } from './types';\n\nconst FLAGS = {\n\tDEFAULT_HANDLE_BAD_CANDLES: true,\n};\n\ntype CandleData = Pick<\n\tCandle,\n\t| 'baseVolume'\n\t| 'fillOpen'\n\t| 'fillHigh'\n\t| 'fillClose'\n\t| 'fillLow'\n\t| 'oracleOpen'\n\t| 'oracleHigh'\n\t| 'oracleClose'\n\t| 'oracleLow'\n\t| 'quoteVolume'\n\t| 'resolution'\n\t| 'start'\n>;\n\ntype CandleProps = {\n\tstart: BN;\n\tfillOpen: BN;\n\tfillHigh: BN;\n\tfillClose: BN;\n\tfillLow: BN;\n\toracleOpen: BN;\n\toracleHigh: BN;\n\toracleClose: BN;\n\toracleLow: BN;\n\tquoteVolume: BN;\n\tbaseVolume: BN;\n\tresolution: CandleResolution;\n};\n\nconst logBadCandleProp = () => {\n\tconsole.trace('Would have created bad candle here');\n};\n\nexport class Candle {\n\tpublic start: BN;\n\tpublic fillOpen: BN;\n\tpublic fillHigh: BN;\n\tpublic fillClose: BN;\n\tpublic fillLow: BN;\n\tpublic oracleOpen: BN;\n\tpublic oracleHigh: BN;\n\tpublic oracleClose: BN;\n\tpublic oracleLow: BN;\n\tpublic quoteVolume: BN;\n\tpublic baseVolume: BN;\n\tpublic resolution: CandleResolution;\n\n\tpublic static getSafeProps(props: CandleProps) {\n\t\tconst safeProps = { ...props };\n\n\t\tif (props.fillHigh.lt(props.fillLow)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.fillHigh = safeProps.fillLow;\n\t\t}\n\n\t\tif (props.fillHigh.lt(props.fillOpen)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.fillHigh = safeProps.fillOpen;\n\t\t}\n\n\t\tif (props.fillHigh.lt(props.fillClose)) {\n\t\t\tlogBadCandleProp();\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.fillHigh = safeProps.fillClose;\n\t\t}\n\n\t\tif (props.oracleHigh.lt(props.oracleLow)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.oracleHigh = safeProps.oracleLow;\n\t\t}\n\n\t\tif (props.oracleHigh.lt(props.oracleOpen)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.oracleHigh = safeProps.oracleOpen;\n\t\t}\n\n\t\tif (props.oracleHigh.lt(props.oracleClose)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.oracleHigh = safeProps.oracleClose;\n\t\t}\n\n\t\tif (props.fillLow.gt(props.fillHigh)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.fillLow = safeProps.fillHigh;\n\t\t}\n\n\t\tif (props.fillLow.gt(props.fillOpen)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.fillLow = props.fillOpen;\n\t\t}\n\n\t\tif (props.fillLow.gt(props.fillClose)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.fillLow = safeProps.fillClose;\n\t\t}\n\n\t\tif (props.oracleLow.gt(props.oracleHigh)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.oracleLow = safeProps.oracleHigh;\n\t\t}\n\n\t\tif (props.oracleLow.gt(props.oracleOpen)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.oracleLow = props.oracleOpen;\n\t\t}\n\n\t\tif (props.oracleLow.gt(props.oracleClose)) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.oracleLow = safeProps.oracleClose;\n\t\t}\n\n\t\tif (props.quoteVolume.isNeg()) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.quoteVolume = ZERO;\n\t\t}\n\n\t\tif (props.baseVolume.isNeg()) {\n\t\t\tlogBadCandleProp();\n\t\t\tsafeProps.baseVolume = ZERO;\n\t\t}\n\n\t\treturn safeProps;\n\t}\n\n\tpublic static sanityCheckProps(props: CandleProps) {\n\t\tif (props.start.toString().length !== 13)\n\t\t\tthrow new Error(`Candle's start time is not given in milliseconds`);\n\n\t\tif (props.fillHigh.lt(props.fillLow)) {\n\t\t\tthrow new Error(`Candle's fillHigh is lower than its low`);\n\t\t}\n\n\t\tif (props.fillHigh.lt(props.fillOpen)) {\n\t\t\tthrow new Error(`Candle's fillHigh is lower than its open`);\n\t\t}\n\n\t\tif (props.fillHigh.lt(props.fillClose)) {\n\t\t\tthrow new Error(`Candle's fillHigh is lower than its close`);\n\t\t}\n\n\t\tif (props.oracleHigh.lt(props.oracleLow)) {\n\t\t\tthrow new Error(`Candle's oracleHigh is lower than its low`);\n\t\t}\n\n\t\tif (props.oracleHigh.lt(props.oracleOpen)) {\n\t\t\tthrow new Error(`Candle's oracleHigh is lower than its open`);\n\t\t}\n\n\t\tif (props.oracleHigh.lt(props.oracleClose)) {\n\t\t\tthrow new Error(`Candle's oracleHigh is lower than its close`);\n\t\t}\n\n\t\tif (props.fillLow.gt(props.fillHigh)) {\n\t\t\tthrow new Error(`Candle's fillLow is higher than its high`);\n\t\t}\n\n\t\tif (props.fillLow.gt(props.fillOpen)) {\n\t\t\tthrow new Error(`Candle's fillLow is higher than its open`);\n\t\t}\n\n\t\tif (props.fillLow.gt(props.fillClose)) {\n\t\t\tthrow new Error(`Candle's fillLow is higher than its close`);\n\t\t}\n\n\t\tif (props.oracleLow.gt(props.oracleHigh)) {\n\t\t\tthrow new Error(`Candle's oracleLow is higher than its high`);\n\t\t}\n\n\t\tif (props.oracleLow.gt(props.oracleOpen)) {\n\t\t\tthrow new Error(`Candle's oracleLow is higher than its open`);\n\t\t}\n\n\t\tif (props.oracleLow.gt(props.oracleClose)) {\n\t\t\tthrow new Error(`Candle's oracleLow is higher than its close`);\n\t\t}\n\n\t\tif (props.quoteVolume.isNeg())\n\t\t\tthrow new Error(`Can't have negative quote volume`);\n\n\t\tif (props.baseVolume.isNeg())\n\t\t\tthrow new Error(`Can't have negative base volume`);\n\n\t\tif (props.start.toNumber() > Date.now())\n\t\t\tthrow new Error(`Can't create a candle in the future`);\n\n\t\tif (\n\t\t\tprops.start.toNumber() !==\n\t\t\tCandle.startTimeForCandle(props.start.toNumber(), props.resolution)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Got a candle with a start time that doesn't match its resolution`\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate constructor(props: {\n\t\tstart: BN;\n\t\tfillOpen: BN;\n\t\tfillHigh: BN;\n\t\tfillClose: BN;\n\t\tfillLow: BN;\n\t\toracleOpen: BN;\n\t\toracleHigh: BN;\n\t\toracleClose: BN;\n\t\toracleLow: BN;\n\t\tquoteVolume: BN;\n\t\tbaseVolume: BN;\n\t\tresolution: CandleResolution;\n\t\thandleBadCandle?: boolean;\n\t}) {\n\t\tconst handleBadCandle =\n\t\t\tprops.handleBadCandle ?? FLAGS.DEFAULT_HANDLE_BAD_CANDLES;\n\n\t\t// eslint-disable-next-line no-useless-catch\n\t\ttry {\n\t\t\tif (handleBadCandle) {\n\t\t\t\tconst safeProps = Candle.getSafeProps(props);\n\n\t\t\t\tthis.start = safeProps.start;\n\t\t\t\tthis.fillOpen = safeProps.fillOpen;\n\t\t\t\tthis.fillHigh = safeProps.fillHigh;\n\t\t\t\tthis.fillClose = safeProps.fillClose;\n\t\t\t\tthis.fillLow = safeProps.fillLow;\n\t\t\t\tthis.oracleOpen = safeProps.oracleOpen;\n\t\t\t\tthis.oracleHigh = safeProps.oracleHigh;\n\t\t\t\tthis.oracleClose = safeProps.oracleClose;\n\t\t\t\tthis.oracleLow = safeProps.oracleLow;\n\t\t\t\tthis.quoteVolume = safeProps.quoteVolume;\n\t\t\t\tthis.baseVolume = safeProps.baseVolume;\n\t\t\t\tthis.resolution = safeProps.resolution;\n\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tCandle.sanityCheckProps(props);\n\t\t\t\tthis.start = props.start;\n\t\t\t\tthis.fillOpen = props.fillOpen;\n\t\t\t\tthis.fillHigh = props.fillHigh;\n\t\t\t\tthis.fillClose = props.fillClose;\n\t\t\t\tthis.fillLow = props.fillLow;\n\t\t\t\tthis.oracleOpen = props.oracleOpen;\n\t\t\t\tthis.oracleHigh = props.oracleHigh;\n\t\t\t\tthis.oracleClose = props.oracleClose;\n\t\t\t\tthis.oracleLow = props.oracleLow;\n\t\t\t\tthis.quoteVolume = props.quoteVolume;\n\t\t\t\tthis.baseVolume = props.baseVolume;\n\t\t\t\tthis.resolution = props.resolution;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Just doing this syntax for an easy breakpoint to catch bad props\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tpublic print() {\n\t\tconst printBn = (bn: BN) => bn.toString();\n\t\tconst printString = `${printBn(this.fillOpen)},${printBn(\n\t\t\tthis.fillHigh\n\t\t)},${printBn(this.fillLow)},${printBn(this.fillClose)} : ${\n\t\t\tthis.resolution\n\t\t} , ${new Date(this.start.toNumber()).toLocaleString()}`;\n\t\treturn printString;\n\t}\n\n\tpublic toSerializable(): SerializableCandle {\n\t\treturn {\n\t\t\tfillOpen: this.fillOpen,\n\t\t\tfillClose: this.fillClose,\n\t\t\tfillHigh: this.fillHigh,\n\t\t\tfillLow: this.fillLow,\n\t\t\toracleOpen: this.oracleOpen,\n\t\t\toracleClose: this.oracleClose,\n\t\t\toracleHigh: this.oracleHigh,\n\t\t\toracleLow: this.oracleLow,\n\t\t\tquoteVolume: this.quoteVolume,\n\t\t\tbaseVolume: this.baseVolume,\n\t\t\tstart: this.start,\n\t\t\tresolution: this.resolution,\n\t\t};\n\t}\n\n\tpublic toUISerializable(): UISerializableCandle {\n\t\treturn {\n\t\t\tstart: this.start,\n\t\t\tfillOpen: BigNum.from(this.fillOpen, PRICE_PRECISION_EXP),\n\t\t\tfillClose: BigNum.from(this.fillClose, PRICE_PRECISION_EXP),\n\t\t\tfillHigh: BigNum.from(this.fillHigh, PRICE_PRECISION_EXP),\n\t\t\tfillLow: BigNum.from(this.fillLow, PRICE_PRECISION_EXP),\n\t\t\toracleOpen: BigNum.from(this.oracleOpen, PRICE_PRECISION_EXP),\n\t\t\toracleClose: BigNum.from(this.oracleClose, PRICE_PRECISION_EXP),\n\t\t\toracleHigh: BigNum.from(this.oracleHigh, PRICE_PRECISION_EXP),\n\t\t\toracleLow: BigNum.from(this.oracleLow, PRICE_PRECISION_EXP),\n\t\t\tquoteVolume: BigNum.from(this.quoteVolume, QUOTE_PRECISION_EXP),\n\t\t\tbaseVolume: BigNum.from(this.baseVolume, BASE_PRECISION_EXP),\n\t\t\tresolution: this.resolution,\n\t\t};\n\t}\n\n\tstatic fromData(candle: CandleData) {\n\t\treturn new Candle({\n\t\t\tstart: candle.start,\n\t\t\tfillOpen: candle.fillOpen,\n\t\t\tfillHigh: candle.fillHigh,\n\t\t\tfillClose: candle.fillClose,\n\t\t\tfillLow: candle.fillLow,\n\t\t\toracleOpen: candle.oracleOpen,\n\t\t\toracleHigh: candle.oracleHigh,\n\t\t\toracleClose: candle.oracleClose,\n\t\t\toracleLow: candle.oracleLow,\n\t\t\tquoteVolume: candle.quoteVolume,\n\t\t\tbaseVolume: candle.baseVolume,\n\t\t\tresolution: candle.resolution,\n\t\t});\n\t}\n\n\tstatic fromUICandle(candle: UISerializableCandle, handleBadCandle?: boolean) {\n\t\treturn new Candle({\n\t\t\tstart: candle.start,\n\t\t\tfillOpen: candle.fillOpen.val,\n\t\t\tfillHigh: candle.fillHigh.val,\n\t\t\tfillClose: candle.fillClose.val,\n\t\t\tfillLow: candle.fillLow.val,\n\t\t\toracleOpen: candle.oracleOpen.val,\n\t\t\toracleHigh: candle.oracleHigh.val,\n\t\t\toracleClose: candle.oracleClose.val,\n\t\t\toracleLow: candle.oracleLow.val,\n\t\t\tquoteVolume: candle.quoteVolume?.val ?? new BN(0),\n\t\t\tbaseVolume: candle.baseVolume.val,\n\t\t\tresolution: candle.resolution,\n\t\t\thandleBadCandle,\n\t\t});\n\t}\n\n\tstatic blank(\n\t\tstartMs: BN,\n\t\tresolution: CandleResolution,\n\t\tfillPrice = ZERO,\n\t\toraclePrice = ZERO\n\t) {\n\t\treturn new Candle({\n\t\t\tstart: startMs,\n\t\t\tfillOpen: fillPrice,\n\t\t\tfillHigh: fillPrice,\n\t\t\tfillClose: fillPrice,\n\t\t\tfillLow: fillPrice,\n\t\t\toracleOpen: oraclePrice,\n\t\t\toracleHigh: oraclePrice,\n\t\t\toracleClose: oraclePrice,\n\t\t\toracleLow: oraclePrice,\n\t\t\tquoteVolume: ZERO,\n\t\t\tbaseVolume: ZERO,\n\t\t\tresolution,\n\t\t});\n\t}\n\n\tstatic clone(candle: Candle) {\n\t\treturn new Candle({\n\t\t\tstart: candle.start,\n\t\t\tfillOpen: candle.fillOpen,\n\t\t\tfillHigh: candle.fillHigh,\n\t\t\tfillClose: candle.fillClose,\n\t\t\tfillLow: candle.fillLow,\n\t\t\toracleOpen: candle.oracleOpen,\n\t\t\toracleHigh: candle.oracleHigh,\n\t\t\toracleClose: candle.oracleClose,\n\t\t\toracleLow: candle.oracleLow,\n\t\t\tquoteVolume: candle.quoteVolume,\n\t\t\tbaseVolume: candle.baseVolume,\n\t\t\tresolution: candle.resolution,\n\t\t});\n\t}\n\n\tstatic mergeSmallCandlesIntoBig(\n\t\tstart: number,\n\t\tsmallCandles: Candle[],\n\t\toutputResolution: CandleResolution\n\t): Candle {\n\t\tif (smallCandles.length === 0) return null;\n\n\t\tconst clonedCandles = smallCandles.map((candle) => Candle.clone(candle));\n\n\t\t// Temporarily small candles to have same resolution and start time, so that we can merge them\n\t\tclonedCandles.forEach((candle) => {\n\t\t\tcandle.resolution = outputResolution;\n\t\t\tcandle.start = new BN(start);\n\t\t});\n\n\t\tconst mergedCandle = Candle.fromMergeAll(clonedCandles);\n\n\t\treturn mergedCandle;\n\t}\n\n\t/**\n\t * Merge two candles together. The previous candle should be from either the same window or a previous window.\n\t *\n\t * - If the previous candle is in the same window => outputs both the candles merged into one\n\t * - If the previous candle is in the previous window => ensures the current candle correctly \"follows\" the previous one (updates open price, etc.)\n\t *\n\t * @param current\n\t * @param previous\n\t * @returns\n\t */\n\tstatic fromMerge(current: Candle, previous?: Candle) {\n\t\tconst cloned = Candle.clone(current);\n\n\t\tif (!previous) return cloned;\n\n\t\t// If the current candle has no quote or base volume, then\n\t\tif (current.baseVolume === ZERO && current.quoteVolume === ZERO) {\n\t\t\treturn this.fromBlankAfterPrevious(\n\t\t\t\tprevious,\n\t\t\t\tcurrent.resolution,\n\t\t\t\tcurrent.start.toNumber()\n\t\t\t);\n\t\t}\n\n\t\tif (previous.resolution !== current.resolution) {\n\t\t\tthrow new Error(`Can't merge candles with different resolutions`);\n\t\t}\n\n\t\tif (previous.start.gt(current.start)) {\n\t\t\tthrow new Error(`Previous candle is later than current candle in merge`);\n\t\t}\n\n\t\tconst previousCandleIsInSameWindow = previous.start.eq(current.start);\n\n\t\tconst fillOpen = previousCandleIsInSameWindow\n\t\t\t? previous.fillOpen\n\t\t\t: previous.fillClose;\n\t\tconst fillClose = cloned.fillClose;\n\n\t\tconst fillHigh = previousCandleIsInSameWindow\n\t\t\t? BN.max(previous.fillHigh, cloned.fillHigh)\n\t\t\t: BN.max(fillOpen, cloned.fillHigh);\n\n\t\tconst fillLow = previousCandleIsInSameWindow\n\t\t\t? BN.min(previous.fillLow, cloned.fillLow)\n\t\t\t: BN.min(fillOpen, cloned.fillLow);\n\n\t\tconst oracleOpen = previousCandleIsInSameWindow\n\t\t\t? previous.oracleOpen\n\t\t\t: previous.oracleClose;\n\t\tconst oracleClose = cloned.oracleClose;\n\n\t\tconst oracleHigh = previousCandleIsInSameWindow\n\t\t\t? BN.max(previous.oracleHigh, cloned.oracleHigh)\n\t\t\t: BN.max(oracleOpen, cloned.oracleHigh);\n\n\t\tconst oracleLow = previousCandleIsInSameWindow\n\t\t\t? BN.min(previous.oracleLow, cloned.oracleLow)\n\t\t\t: BN.min(oracleOpen, cloned.oracleLow);\n\n\t\tconst baseVolume = previousCandleIsInSameWindow\n\t\t\t? previous.baseVolume.add(cloned.baseVolume)\n\t\t\t: cloned.baseVolume;\n\n\t\tconst quoteVolume = previousCandleIsInSameWindow\n\t\t\t? previous.quoteVolume.add(cloned.quoteVolume)\n\t\t\t: cloned.quoteVolume;\n\n\t\treturn new Candle({\n\t\t\tstart: current.start,\n\t\t\tfillOpen,\n\t\t\tfillHigh,\n\t\t\tfillClose,\n\t\t\tfillLow,\n\t\t\toracleOpen,\n\t\t\toracleHigh,\n\t\t\toracleClose,\n\t\t\toracleLow,\n\t\t\tquoteVolume,\n\t\t\tbaseVolume,\n\t\t\tresolution: cloned.resolution,\n\t\t});\n\t}\n\n\tstatic fromBlankAfterPrevious(\n\t\tpreviousCandle: Candle,\n\t\tresolution: CandleResolution,\n\t\tstart: number\n\t) {\n\t\t// Candle hasn't changed\n\t\tif (start === previousCandle.start.toNumber()) {\n\t\t\treturn this.clone(previousCandle);\n\t\t}\n\n\t\t// New candle starts from previous\n\t\tconst newCandle = this.blank(\n\t\t\tnew BN(start),\n\t\t\tresolution,\n\t\t\tpreviousCandle.fillClose,\n\t\t\tpreviousCandle.oracleClose\n\t\t);\n\n\t\treturn this.clone(newCandle);\n\t}\n\n\tstatic fromMergeAll(candles: Candle[]) {\n\t\tif (candles.length === 0) {\n\t\t\tthrow new Error('Trying to merge empty array of candles');\n\t\t}\n\n\t\tlet mergedCandle: Candle = candles[0];\n\n\t\tfor (const candle of candles.slice(1)) {\n\t\t\tmergedCandle = Candle.fromMerge(candle, mergedCandle);\n\t\t}\n\n\t\treturn mergedCandle;\n\t}\n\n\tstatic resolutionStringToCandleLengthMs(\n\t\tresolutionString: CandleResolution\n\t): number {\n\t\tswitch (resolutionString) {\n\t\t\tcase '1':\n\t\t\t\treturn 1 * 60 * 1000;\n\t\t\tcase '5':\n\t\t\t\treturn 5 * 60 * 1000;\n\t\t\tcase '15':\n\t\t\t\treturn 15 * 60 * 1000;\n\t\t\tcase '60':\n\t\t\t\treturn 60 * 60 * 1000;\n\t\t\tcase '240':\n\t\t\t\treturn 240 * 60 * 1000;\n\t\t\tcase 'D':\n\t\t\t\treturn 24 * 60 * 60 * 1000;\n\t\t\tcase 'W':\n\t\t\t\treturn 7 * 24 * 60 * 60 * 1000;\n\t\t\tcase 'M':\n\t\t\t\treturn 30 * 24 * 60 * 60 * 1000;\n\t\t}\n\t}\n\n\tprivate static tsIsSeconds(ts: number) {\n\t\treturn ts.toString().length <= 10;\n\t}\n\n\tstatic startTimeForCandle(ts: number, resolution: CandleResolution) {\n\t\tif (Candle.tsIsSeconds(ts)) {\n\t\t\tthrow new Error('Timestamp for candle should be in milliseconds');\n\t\t}\n\t\treturn ts - (ts % Candle.resolutionStringToCandleLengthMs(resolution));\n\t}\n\n\tstatic endTimeForCandle(ts: number, resolution: CandleResolution) {\n\t\tif (Candle.tsIsSeconds(ts)) {\n\t\t\tthrow new Error('Timestamp for candle should be in milliseconds');\n\t\t}\n\t\treturn (\n\t\t\tCandle.startTimeForCandle(ts, resolution) +\n\t\t\tCandle.resolutionStringToCandleLengthMs(resolution)\n\t\t);\n\t}\n\n\tstatic getDividingResolution(\n\t\tresolutionString: CandleResolution\n\t): CandleResolution {\n\t\tswitch (resolutionString) {\n\t\t\tcase '1':\n\t\t\t\treturn '1';\n\t\t\tcase '5':\n\t\t\t\treturn '1';\n\t\t\tcase '15':\n\t\t\t\treturn '5';\n\t\t\tcase '60':\n\t\t\t\treturn '15';\n\t\t\tcase '240':\n\t\t\t\treturn '60';\n\t\t\tcase 'D':\n\t\t\t\treturn '240';\n\t\t\tcase 'W':\n\t\t\t\treturn 'D';\n\t\t\tcase 'M':\n\t\t\t\treturn 'D';\n\t\t}\n\t}\n\n\t/**\n\t * Filter for trades which we want to include in candles, which may change over time.\n\t */\n\tstatic filterOrderActionsForCandles(\n\t\ttradeEvent: Pick<\n\t\t\tWrappedEvent<'OrderActionRecord'>,\n\t\t\t'action' | 'actionExplanation'\n\t\t>\n\t) {\n\t\tif (!ENUM_UTILS.match(tradeEvent.action, OrderAction.FILL)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\tENUM_UTILS.match(\n\t\t\t\ttradeEvent.actionExplanation,\n\t\t\t\tOrderActionExplanation.LIQUIDATION\n\t\t\t) ||\n\t\t\tENUM_UTILS.match(\n\t\t\t\ttradeEvent.actionExplanation,\n\t\t\t\tOrderActionExplanation.TRANSFER_PERP_POSITION\n\t\t\t)\n\t\t) {\n\t\t\t// Don't include liquidations in candle prices\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tstatic candleFromTrade(\n\t\tstart: number,\n\t\tresolution: CandleResolution,\n\t\ttrade: Omit<PartialUISerializableOrderActionRecord, 'slot'>\n\t) {\n\t\tconst price = getPriceForUIOrderRecord(trade).val;\n\n\t\treturn Candle.fromData({\n\t\t\tstart: new BN(Candle.startTimeForCandle(start, resolution)),\n\t\t\tfillOpen: price,\n\t\t\tfillHigh: price,\n\t\t\tfillClose: price,\n\t\t\tfillLow: price,\n\t\t\toracleOpen: trade.oraclePrice.val,\n\t\t\toracleHigh: trade.oraclePrice.val,\n\t\t\toracleClose: trade.oraclePrice.val,\n\t\t\toracleLow: trade.oraclePrice.val,\n\t\t\tquoteVolume: trade.quoteAssetAmountFilled.val,\n\t\t\tbaseVolume: trade.baseAssetAmountFilled.val,\n\t\t\tresolution,\n\t\t});\n\t}\n\n\tstatic stitchCandles(allCandles: Candle[]) {\n\t\tconst stitchedCandles: Candle[] = [];\n\n\t\tconst allCandlesAsc = [...allCandles].sort(\n\t\t\t(a, b) => a.start.toNumber() - b.start.toNumber()\n\t\t);\n\n\t\tallCandlesAsc.forEach((candle, index) => {\n\t\t\tif (index === 0) {\n\t\t\t\tstitchedCandles[index] = candle;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newCandle = Candle.fromMerge(candle, stitchedCandles[index - 1]);\n\t\t\tstitchedCandles[index] = newCandle;\n\t\t\treturn;\n\t\t});\n\n\t\treturn stitchedCandles;\n\t}\n\n\t/**\n\t * Create an array of candles from an array of trades. Merges trades into a single candle if they are in the same candle window.\n\t */\n\tstatic mergeTradesIntoCandles(\n\t\ttrades: PartialUISerializableOrderActionRecord[],\n\t\tresolution: CandleResolution\n\t): Candle[] {\n\t\tconst ascOrderedTrades = [...trades].sort(\n\t\t\t(tradeA, tradeB) => tradeA.slot - tradeB.slot\n\t\t);\n\n\t\tconst candleTradeBuckets = new Map<\n\t\t\tnumber,\n\t\t\tPartialUISerializableOrderActionRecord[]\n\t\t>();\n\n\t\t// Sort trades into buckets for candles\n\t\tfor (const trade of ascOrderedTrades) {\n\t\t\tconst candleTs = Candle.startTimeForCandle(\n\t\t\t\ttrade.ts.toNumber() * 1000,\n\t\t\t\tresolution\n\t\t\t);\n\t\t\tif (candleTradeBuckets.get(candleTs)) {\n\t\t\t\tcandleTradeBuckets.get(candleTs).push(trade);\n\t\t\t} else {\n\t\t\t\tcandleTradeBuckets.set(candleTs, [trade]);\n\t\t\t}\n\t\t}\n\n\t\t// Create a candle for each bucket\n\t\tconst allCandles: Candle[] = [];\n\t\tfor (const [startTime, tradesInBucket] of candleTradeBuckets.entries()) {\n\t\t\tconst innerCandles = tradesInBucket.map((trade) =>\n\t\t\t\tCandle.candleFromTrade(startTime, resolution, trade)\n\t\t\t);\n\t\t\tconst mergedCandle = Candle.fromMergeAll(innerCandles);\n\t\t\tallCandles.push(mergedCandle);\n\t\t}\n\t\tallCandles.sort(\n\t\t\t(candleA, candleB) => candleA.start.toNumber() - candleB.start.toNumber()\n\t\t);\n\n\t\t// Stitch candles together\n\t\tconst stitchedCandles: Candle[] = Candle.stitchCandles(allCandles);\n\n\t\treturn stitchedCandles;\n\t}\n\n\tstatic mergeTradesIntoCandle(\n\t\ttrades: PartialUISerializableOrderActionRecord[],\n\t\tcandle: UISerializableCandle\n\t): Candle {\n\t\tif (trades.length === 0) return Candle.fromUICandle(candle);\n\n\t\tconst candlesFromTrades = trades.map((trade) =>\n\t\t\tCandle.candleFromTrade(candle.start.toNumber(), candle.resolution, trade)\n\t\t);\n\n\t\tconst mergedCandleFromTrades = Candle.fromMergeAll([...candlesFromTrades]);\n\n\t\tconst mergedCandle = Candle.fromMerge(\n\t\t\tmergedCandleFromTrades,\n\t\t\tCandle.fromUICandle(candle)\n\t\t);\n\n\t\treturn mergedCandle;\n\t}\n\n\tstatic convertTradesToCandle(\n\t\ttrades: PartialUISerializableOrderActionRecord[],\n\t\tfromMs: number,\n\t\tresolution: CandleResolution,\n\t\tpreviousCandle?: UISerializableCandle\n\t): Candle {\n\t\tconst resolutionMs = Candle.resolutionStringToCandleLengthMs(resolution);\n\t\tconst toMs = fromMs + resolutionMs;\n\n\t\tconst filteredTrades = trades.filter((t) => {\n\t\t\tconst tradeMs = t.ts.mul(new BN(1000));\n\n\t\t\tif (fromMs && tradeMs.lt(new BN(fromMs))) return false;\n\t\t\tif (toMs && tradeMs.gte(new BN(toMs))) return false;\n\t\t\treturn true;\n\t\t});\n\n\t\tif (filteredTrades.length === 0) {\n\t\t\treturn previousCandle ? Candle.fromUICandle(previousCandle) : undefined;\n\t\t}\n\n\t\tconst sortedTrades = sortUIOrderActionRecords(filteredTrades, 'asc');\n\n\t\tconst candleForPrevious = previousCandle\n\t\t\t? Candle.fromUICandle(previousCandle)\n\t\t\t: undefined;\n\n\t\tconst candlesForTrades = sortedTrades.map((trade) =>\n\t\t\tCandle.candleFromTrade(fromMs, resolution, trade)\n\t\t);\n\n\t\tconst candlesToMerge = candleForPrevious\n\t\t\t? [candleForPrevious, ...candlesForTrades]\n\t\t\t: [...candlesForTrades];\n\n\t\tconst mergedCandles = Candle.fromMergeAll(candlesToMerge);\n\n\t\treturn mergedCandles;\n\t}\n\n\tstatic candleToTvBar(\n\t\tcandle: UISerializableCandle,\n\t\tcandleType: CandleType\n\t): Bar {\n\t\tconst useFill = candleType === CandleType.FILL_PRICE;\n\n\t\treturn {\n\t\t\ttime: candle.start.toNumber(),\n\t\t\topen: (useFill ? candle.fillOpen : candle.oracleOpen).toNum(),\n\t\t\tclose: (useFill ? candle.fillClose : candle.oracleClose).toNum(),\n\t\t\tlow: (useFill ? candle.fillLow : candle.oracleLow).toNum(),\n\t\t\thigh: (useFill ? candle.fillHigh : candle.oracleHigh).toNum(),\n\t\t\tvolume: candle.quoteVolume.toNum(),\n\t\t};\n\t}\n\n\t/**\n\t * This method handles the candles that come back from the exchange history server and converts them into Bars for the TradingView Chart. It also fills any gaps in the candles with blanks.\n\t */\n\tstatic candlesToTvBars(\n\t\tcandles: UISerializableCandle[],\n\t\tresolution: CandleResolution,\n\t\tcandleType: CandleType\n\t): Bar[] {\n\t\tconst candlesWithBlanks: UISerializableCandle[] = [];\n\n\t\tcandles.forEach((candle, index) => {\n\t\t\tif (index == 0) {\n\t\t\t\tcandlesWithBlanks.push(candle);\n\t\t\t} else {\n\t\t\t\tconst previousCandle = candles[index - 1];\n\t\t\t\tlet msBetweenCandles =\n\t\t\t\t\tcandle.start.toNumber() - previousCandle.start.toNumber();\n\t\t\t\tconst interval = Candle.resolutionStringToCandleLengthMs(resolution);\n\t\t\t\tlet blankCandleCount = 1;\n\n\t\t\t\twhile (msBetweenCandles > interval) {\n\t\t\t\t\tconst blankCandle = Candle.fromData({\n\t\t\t\t\t\tstart: new BN(\n\t\t\t\t\t\t\tpreviousCandle.start.toNumber() + interval * blankCandleCount\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfillOpen: previousCandle.fillClose.val,\n\t\t\t\t\t\tfillClose: previousCandle.fillClose.val,\n\t\t\t\t\t\tfillHigh: previousCandle.fillClose.val,\n\t\t\t\t\t\tfillLow: previousCandle.fillClose.val,\n\t\t\t\t\t\toracleOpen: previousCandle.oracleClose.val,\n\t\t\t\t\t\toracleClose: previousCandle.oracleClose.val,\n\t\t\t\t\t\toracleHigh: previousCandle.oracleClose.val,\n\t\t\t\t\t\toracleLow: previousCandle.oracleClose.val,\n\t\t\t\t\t\tquoteVolume: BigNum.zero(QUOTE_PRECISION_EXP).val,\n\t\t\t\t\t\tbaseVolume: BigNum.zero(BASE_PRECISION_EXP).val,\n\t\t\t\t\t\tresolution,\n\t\t\t\t\t}).toUISerializable();\n\n\t\t\t\t\tcandlesWithBlanks.push(blankCandle);\n\t\t\t\t\tblankCandleCount++;\n\t\t\t\t\tmsBetweenCandles -= interval;\n\t\t\t\t}\n\n\t\t\t\tcandlesWithBlanks.push(candle);\n\t\t\t}\n\t\t});\n\n\t\treturn candlesWithBlanks.map((candle) =>\n\t\t\tCandle.candleToTvBar(candle, candleType)\n\t\t);\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/candles/types.ts"],"names":[],"mappings":"","sourcesContent":["// This Type is copied from tradingview charting_library\nexport type Bar = {\n\ttime: number;\n\topen: number;\n\thigh: number;\n\tlow: number;\n\tclose: number;\n\tvolume?: number;\n};\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { MarketId } from '../../types/MarketId';
|
|
2
|
+
export type OrderbookGrouping = 1 | 10 | 100 | 500 | 1000;
|
|
3
|
+
export type DlobServerChannel = 'trades' | 'orderbook' | 'orderbook_indicative' | 'heartbeat';
|
|
4
|
+
type BaseSubscriptionOutputProps<T extends DlobServerChannel> = {
|
|
5
|
+
type: 'subscribe';
|
|
6
|
+
channel: T;
|
|
7
|
+
};
|
|
8
|
+
interface OrderbookSubscriptionOutputProps extends BaseSubscriptionOutputProps<'orderbook' | 'orderbook_indicative'> {
|
|
9
|
+
marketType: 'perp' | 'spot';
|
|
10
|
+
market: string;
|
|
11
|
+
grouping?: OrderbookGrouping;
|
|
12
|
+
}
|
|
13
|
+
interface TradeSubscriptionOutputProps extends BaseSubscriptionOutputProps<'trades'> {
|
|
14
|
+
marketType: 'perp' | 'spot';
|
|
15
|
+
market: string;
|
|
16
|
+
}
|
|
17
|
+
type WebsocketSubscriptionOutputProps = TradeSubscriptionOutputProps | OrderbookSubscriptionOutputProps;
|
|
18
|
+
type BaseUnsubscriptionOutputProps<T extends DlobServerChannel> = {
|
|
19
|
+
type: 'unsubscribe';
|
|
20
|
+
channel: T;
|
|
21
|
+
};
|
|
22
|
+
interface OrderbookUnsubscriptionOutputProps extends BaseUnsubscriptionOutputProps<'orderbook' | 'orderbook_indicative'> {
|
|
23
|
+
marketType: 'perp' | 'spot';
|
|
24
|
+
market: string;
|
|
25
|
+
grouping?: OrderbookGrouping;
|
|
26
|
+
}
|
|
27
|
+
interface TradeUnsubscriptionOutputProps extends BaseUnsubscriptionOutputProps<'trades'> {
|
|
28
|
+
marketType: 'perp' | 'spot';
|
|
29
|
+
market: string;
|
|
30
|
+
}
|
|
31
|
+
type WebsocketUnsubscriptionOutputProps = OrderbookUnsubscriptionOutputProps | TradeUnsubscriptionOutputProps;
|
|
32
|
+
type BaseSubscriptionProps<T extends DlobServerChannel> = {
|
|
33
|
+
type: T;
|
|
34
|
+
};
|
|
35
|
+
type TargetMarketProps = {
|
|
36
|
+
market: MarketId;
|
|
37
|
+
};
|
|
38
|
+
interface OrderbookSubscriptionProps extends BaseSubscriptionProps<'orderbook' | 'orderbook_indicative'>, TargetMarketProps {
|
|
39
|
+
grouping?: OrderbookGrouping;
|
|
40
|
+
}
|
|
41
|
+
interface TradesSubscriptionProps extends BaseSubscriptionProps<'trades'>, TargetMarketProps {
|
|
42
|
+
}
|
|
43
|
+
type WebsocketSubscriptionProps = TradesSubscriptionProps | OrderbookSubscriptionProps;
|
|
44
|
+
export type WebsocketServerResponse = {
|
|
45
|
+
channel: string;
|
|
46
|
+
data: string;
|
|
47
|
+
error?: any;
|
|
48
|
+
};
|
|
49
|
+
export declare const DLOB_SERVER_WEBSOCKET_UTILS: {
|
|
50
|
+
getSubscriptionProps: (props: WebsocketSubscriptionProps) => WebsocketSubscriptionOutputProps;
|
|
51
|
+
getUnsubscriptionProps: (props: WebsocketSubscriptionProps) => WebsocketUnsubscriptionOutputProps;
|
|
52
|
+
getMessageFilter: (props: WebsocketSubscriptionProps) => ((message: {
|
|
53
|
+
channel: string;
|
|
54
|
+
data: any;
|
|
55
|
+
}) => boolean);
|
|
56
|
+
};
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DLOB_SERVER_WEBSOCKET_UTILS = void 0;
|
|
4
|
+
const UIMarket_1 = require("../../types/UIMarket");
|
|
5
|
+
const getMarketSymbolFromId = (marketId) => {
|
|
6
|
+
var _a, _b;
|
|
7
|
+
const isPerp = marketId.isPerp;
|
|
8
|
+
if (isPerp) {
|
|
9
|
+
const perpMarket = UIMarket_1.UIMarket.perpMarkets.find((m) => marketId.marketIndex === m.marketIndex);
|
|
10
|
+
return (_a = perpMarket === null || perpMarket === void 0 ? void 0 : perpMarket.symbol) !== null && _a !== void 0 ? _a : '';
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
const spotMarket = UIMarket_1.UIMarket.spotMarkets.find((m) => marketId.marketIndex === m.marketIndex);
|
|
14
|
+
return (_b = spotMarket === null || spotMarket === void 0 ? void 0 : spotMarket.symbol) !== null && _b !== void 0 ? _b : '';
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const getSubscriptionProps = (props) => {
|
|
18
|
+
const type = props.type;
|
|
19
|
+
switch (type) {
|
|
20
|
+
case 'orderbook': {
|
|
21
|
+
return {
|
|
22
|
+
type: 'subscribe',
|
|
23
|
+
channel: 'orderbook',
|
|
24
|
+
market: getMarketSymbolFromId(props.market),
|
|
25
|
+
marketType: props.market.isPerp ? 'perp' : 'spot',
|
|
26
|
+
...(props.grouping && { grouping: props.grouping }),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
case 'orderbook_indicative': {
|
|
30
|
+
return {
|
|
31
|
+
type: 'subscribe',
|
|
32
|
+
channel: 'orderbook_indicative',
|
|
33
|
+
market: getMarketSymbolFromId(props.market),
|
|
34
|
+
marketType: props.market.isPerp ? 'perp' : 'spot',
|
|
35
|
+
...(props.grouping && { grouping: props.grouping }),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
case 'trades': {
|
|
39
|
+
return {
|
|
40
|
+
type: 'subscribe',
|
|
41
|
+
channel: 'trades',
|
|
42
|
+
market: getMarketSymbolFromId(props.market),
|
|
43
|
+
marketType: props.market.isPerp ? 'perp' : 'spot',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
default: {
|
|
47
|
+
const exhaustiveCheck = type;
|
|
48
|
+
throw new Error(`Unhandled case: ${exhaustiveCheck}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const getUnsubscriptionProps = (props) => {
|
|
53
|
+
const type = props.type;
|
|
54
|
+
switch (type) {
|
|
55
|
+
case 'orderbook': {
|
|
56
|
+
return {
|
|
57
|
+
type: 'unsubscribe',
|
|
58
|
+
channel: 'orderbook',
|
|
59
|
+
market: getMarketSymbolFromId(props.market),
|
|
60
|
+
marketType: props.market.isPerp ? 'perp' : 'spot',
|
|
61
|
+
...(props.grouping && { grouping: props.grouping }),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case 'orderbook_indicative': {
|
|
65
|
+
return {
|
|
66
|
+
type: 'unsubscribe',
|
|
67
|
+
channel: 'orderbook_indicative',
|
|
68
|
+
market: getMarketSymbolFromId(props.market),
|
|
69
|
+
marketType: props.market.isPerp ? 'perp' : 'spot',
|
|
70
|
+
...(props.grouping && { grouping: props.grouping }),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
case 'trades': {
|
|
74
|
+
return {
|
|
75
|
+
type: 'unsubscribe',
|
|
76
|
+
channel: 'trades',
|
|
77
|
+
market: getMarketSymbolFromId(props.market),
|
|
78
|
+
marketType: props.market.isPerp ? 'perp' : 'spot',
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
default: {
|
|
82
|
+
const exhaustiveCheck = type;
|
|
83
|
+
throw new Error(`Unhandled case: ${exhaustiveCheck}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* This function needs to take the subscription probs and map it into matching channel key that is returned by the websocket for the subscription
|
|
89
|
+
* @param props
|
|
90
|
+
* @returns
|
|
91
|
+
*/
|
|
92
|
+
const getChannelKey = (props) => {
|
|
93
|
+
const type = props.type;
|
|
94
|
+
switch (type) {
|
|
95
|
+
case 'orderbook': {
|
|
96
|
+
return `orderbook_${props.market.isPerp ? 'perp' : 'spot'}_${props.market.marketIndex}${props.grouping ? `_grouped_${props.grouping}` : ''}`;
|
|
97
|
+
}
|
|
98
|
+
case 'orderbook_indicative': {
|
|
99
|
+
return `orderbook_${props.market.isPerp ? 'perp' : 'spot'}_${props.market.marketIndex}${props.grouping ? `_grouped_${props.grouping}` : ''}_indicative`;
|
|
100
|
+
}
|
|
101
|
+
case 'trades': {
|
|
102
|
+
return `trades_${props.market.isPerp ? 'perp' : 'spot'}_${props.market.marketIndex}`;
|
|
103
|
+
}
|
|
104
|
+
default: {
|
|
105
|
+
const exhaustiveCheck = type;
|
|
106
|
+
throw new Error(`Unhandled case: ${exhaustiveCheck}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const getMessageFilter = (props) => {
|
|
111
|
+
const type = props.type;
|
|
112
|
+
switch (type) {
|
|
113
|
+
case 'orderbook':
|
|
114
|
+
case 'orderbook_indicative': {
|
|
115
|
+
return (message) => {
|
|
116
|
+
return (message.channel === getChannelKey(props) ||
|
|
117
|
+
// This is a special extra message which comes through once, immediately after subscribing, to let the subscriber know the initial state of the orderbook
|
|
118
|
+
message.channel ===
|
|
119
|
+
`last_update_orderbook_${props.market.marketTypeStr}_${props.market.marketIndex}`);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
case 'trades': {
|
|
123
|
+
return (message) => message.channel === getChannelKey(props) ||
|
|
124
|
+
message.channel === 'heartbeat';
|
|
125
|
+
}
|
|
126
|
+
default: {
|
|
127
|
+
const exhaustiveCheck = type;
|
|
128
|
+
throw new Error(`Unhandled case: ${exhaustiveCheck}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
exports.DLOB_SERVER_WEBSOCKET_UTILS = {
|
|
133
|
+
getSubscriptionProps,
|
|
134
|
+
getUnsubscriptionProps,
|
|
135
|
+
getMessageFilter,
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=DlobServerWebsocketUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DlobServerWebsocketUtils.js","sourceRoot":"","sources":["../../../src/utils/dlob-server/DlobServerWebsocketUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { MarketId } from '../../types/MarketId';\nimport { UIMarket } from '../../types/UIMarket';\n\nexport type OrderbookGrouping = 1 | 10 | 100 | 500 | 1000;\n\nexport type DlobServerChannel =\n\t| 'trades'\n\t| 'orderbook'\n\t| 'orderbook_indicative'\n\t| 'heartbeat';\n\ntype BaseSubscriptionOutputProps<T extends DlobServerChannel> = {\n\ttype: 'subscribe';\n\tchannel: T;\n};\n\ninterface OrderbookSubscriptionOutputProps\n\textends BaseSubscriptionOutputProps<'orderbook' | 'orderbook_indicative'> {\n\tmarketType: 'perp' | 'spot';\n\tmarket: string;\n\tgrouping?: OrderbookGrouping;\n}\n\ninterface TradeSubscriptionOutputProps\n\textends BaseSubscriptionOutputProps<'trades'> {\n\tmarketType: 'perp' | 'spot';\n\tmarket: string;\n}\n\ntype WebsocketSubscriptionOutputProps =\n\t| TradeSubscriptionOutputProps\n\t| OrderbookSubscriptionOutputProps;\n\ntype BaseUnsubscriptionOutputProps<T extends DlobServerChannel> = {\n\ttype: 'unsubscribe';\n\tchannel: T;\n};\n\ninterface OrderbookUnsubscriptionOutputProps\n\textends BaseUnsubscriptionOutputProps<'orderbook' | 'orderbook_indicative'> {\n\tmarketType: 'perp' | 'spot';\n\tmarket: string;\n\tgrouping?: OrderbookGrouping;\n}\n\ninterface TradeUnsubscriptionOutputProps\n\textends BaseUnsubscriptionOutputProps<'trades'> {\n\tmarketType: 'perp' | 'spot';\n\tmarket: string;\n}\n\ntype WebsocketUnsubscriptionOutputProps =\n\t| OrderbookUnsubscriptionOutputProps\n\t| TradeUnsubscriptionOutputProps;\n\ntype BaseSubscriptionProps<T extends DlobServerChannel> = {\n\ttype: T;\n};\n\ntype TargetMarketProps = { market: MarketId };\n\ninterface OrderbookSubscriptionProps\n\textends BaseSubscriptionProps<'orderbook' | 'orderbook_indicative'>,\n\t\tTargetMarketProps {\n\tgrouping?: OrderbookGrouping;\n}\n\ninterface TradesSubscriptionProps\n\textends BaseSubscriptionProps<'trades'>,\n\t\tTargetMarketProps {}\n\ntype WebsocketSubscriptionProps =\n\t| TradesSubscriptionProps\n\t| OrderbookSubscriptionProps;\n\nexport type WebsocketServerResponse = {\n\tchannel: string;\n\tdata: string;\n\terror?: any;\n};\n\nconst getMarketSymbolFromId = (marketId: MarketId) => {\n\tconst isPerp = marketId.isPerp;\n\n\tif (isPerp) {\n\t\tconst perpMarket = UIMarket.perpMarkets.find(\n\t\t\t(m) => marketId.marketIndex === m.marketIndex\n\t\t);\n\t\treturn perpMarket?.symbol ?? '';\n\t} else {\n\t\tconst spotMarket = UIMarket.spotMarkets.find(\n\t\t\t(m) => marketId.marketIndex === m.marketIndex\n\t\t);\n\t\treturn spotMarket?.symbol ?? '';\n\t}\n};\n\nconst getSubscriptionProps = (\n\tprops: WebsocketSubscriptionProps\n): WebsocketSubscriptionOutputProps => {\n\tconst type = props.type;\n\n\tswitch (type) {\n\t\tcase 'orderbook': {\n\t\t\treturn {\n\t\t\t\ttype: 'subscribe',\n\t\t\t\tchannel: 'orderbook',\n\t\t\t\tmarket: getMarketSymbolFromId(props.market),\n\t\t\t\tmarketType: props.market.isPerp ? 'perp' : 'spot',\n\t\t\t\t...(props.grouping && { grouping: props.grouping }),\n\t\t\t};\n\t\t}\n\t\tcase 'orderbook_indicative': {\n\t\t\treturn {\n\t\t\t\ttype: 'subscribe',\n\t\t\t\tchannel: 'orderbook_indicative',\n\t\t\t\tmarket: getMarketSymbolFromId(props.market),\n\t\t\t\tmarketType: props.market.isPerp ? 'perp' : 'spot',\n\t\t\t\t...(props.grouping && { grouping: props.grouping }),\n\t\t\t};\n\t\t}\n\t\tcase 'trades': {\n\t\t\treturn {\n\t\t\t\ttype: 'subscribe',\n\t\t\t\tchannel: 'trades',\n\t\t\t\tmarket: getMarketSymbolFromId(props.market),\n\t\t\t\tmarketType: props.market.isPerp ? 'perp' : 'spot',\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustiveCheck: never = type;\n\t\t\tthrow new Error(`Unhandled case: ${exhaustiveCheck}`);\n\t\t}\n\t}\n};\n\nconst getUnsubscriptionProps = (\n\tprops: WebsocketSubscriptionProps\n): WebsocketUnsubscriptionOutputProps => {\n\tconst type = props.type;\n\n\tswitch (type) {\n\t\tcase 'orderbook': {\n\t\t\treturn {\n\t\t\t\ttype: 'unsubscribe',\n\t\t\t\tchannel: 'orderbook',\n\t\t\t\tmarket: getMarketSymbolFromId(props.market),\n\t\t\t\tmarketType: props.market.isPerp ? 'perp' : 'spot',\n\t\t\t\t...(props.grouping && { grouping: props.grouping }),\n\t\t\t};\n\t\t}\n\t\tcase 'orderbook_indicative': {\n\t\t\treturn {\n\t\t\t\ttype: 'unsubscribe',\n\t\t\t\tchannel: 'orderbook_indicative',\n\t\t\t\tmarket: getMarketSymbolFromId(props.market),\n\t\t\t\tmarketType: props.market.isPerp ? 'perp' : 'spot',\n\t\t\t\t...(props.grouping && { grouping: props.grouping }),\n\t\t\t};\n\t\t}\n\t\tcase 'trades': {\n\t\t\treturn {\n\t\t\t\ttype: 'unsubscribe',\n\t\t\t\tchannel: 'trades',\n\t\t\t\tmarket: getMarketSymbolFromId(props.market),\n\t\t\t\tmarketType: props.market.isPerp ? 'perp' : 'spot',\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustiveCheck: never = type;\n\t\t\tthrow new Error(`Unhandled case: ${exhaustiveCheck}`);\n\t\t}\n\t}\n};\n\n/**\n * This function needs to take the subscription probs and map it into matching channel key that is returned by the websocket for the subscription\n * @param props\n * @returns\n */\nconst getChannelKey = (props: WebsocketSubscriptionProps) => {\n\tconst type = props.type;\n\n\tswitch (type) {\n\t\tcase 'orderbook': {\n\t\t\treturn `orderbook_${props.market.isPerp ? 'perp' : 'spot'}_${\n\t\t\t\tprops.market.marketIndex\n\t\t\t}${props.grouping ? `_grouped_${props.grouping}` : ''}`;\n\t\t}\n\t\tcase 'orderbook_indicative': {\n\t\t\treturn `orderbook_${props.market.isPerp ? 'perp' : 'spot'}_${\n\t\t\t\tprops.market.marketIndex\n\t\t\t}${props.grouping ? `_grouped_${props.grouping}` : ''}_indicative`;\n\t\t}\n\t\tcase 'trades': {\n\t\t\treturn `trades_${props.market.isPerp ? 'perp' : 'spot'}_${\n\t\t\t\tprops.market.marketIndex\n\t\t\t}`;\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustiveCheck: never = type;\n\t\t\tthrow new Error(`Unhandled case: ${exhaustiveCheck}`);\n\t\t}\n\t}\n};\n\nconst getMessageFilter = (\n\tprops: WebsocketSubscriptionProps\n): ((message: { channel: string; data: any }) => boolean) => {\n\tconst type = props.type;\n\n\tswitch (type) {\n\t\tcase 'orderbook':\n\t\tcase 'orderbook_indicative': {\n\t\t\treturn (message: { channel: string; data: any }) => {\n\t\t\t\treturn (\n\t\t\t\t\tmessage.channel === getChannelKey(props) ||\n\t\t\t\t\t// This is a special extra message which comes through once, immediately after subscribing, to let the subscriber know the initial state of the orderbook\n\t\t\t\t\tmessage.channel ===\n\t\t\t\t\t\t`last_update_orderbook_${props.market.marketTypeStr}_${props.market.marketIndex}`\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\t\tcase 'trades': {\n\t\t\treturn (message: { channel: string; data: any }) =>\n\t\t\t\tmessage.channel === getChannelKey(props) ||\n\t\t\t\tmessage.channel === 'heartbeat';\n\t\t}\n\t\tdefault: {\n\t\t\tconst exhaustiveCheck: never = type;\n\t\t\tthrow new Error(`Unhandled case: ${exhaustiveCheck}`);\n\t\t}\n\t}\n};\n\nexport const DLOB_SERVER_WEBSOCKET_UTILS = {\n\tgetSubscriptionProps,\n\tgetUnsubscriptionProps,\n\tgetMessageFilter,\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EventType, WrappedEvent } from '@drift-labs/sdk';
|
|
2
|
+
type UniqableOrderActionRecord = Pick<WrappedEvent<'OrderActionRecord'>, 'eventType' | 'action' | 'marketIndex' | 'takerOrderId' | 'makerOrderId' | 'txSig' | 'fillRecordId' | 'taker' | 'maker'>;
|
|
3
|
+
export type UniqableDriftEvent = WrappedEvent<Exclude<EventType, 'OrderActionRecord'>> | UniqableOrderActionRecord;
|
|
4
|
+
/**
|
|
5
|
+
* Utility method to get a unique key for any drift event.
|
|
6
|
+
* @param event
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export declare const getDriftEventKey: (event: UniqableDriftEvent) => string;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDriftEventKey = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
/**
|
|
6
|
+
* Utility method to get a unique key for any drift event.
|
|
7
|
+
* @param event
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
const getDriftEventKey = (event) => {
|
|
11
|
+
var _a, _b, _c, _d, _e, _f;
|
|
12
|
+
const _eventType = event.eventType;
|
|
13
|
+
switch (_eventType) {
|
|
14
|
+
case 'SwapRecord': {
|
|
15
|
+
const _typedEvent = event;
|
|
16
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${_typedEvent.txSig}_${_typedEvent.inMarketIndex}_${_typedEvent.outMarketIndex}`;
|
|
17
|
+
}
|
|
18
|
+
case 'OrderRecord': {
|
|
19
|
+
const _typedEvent = event;
|
|
20
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${_typedEvent.order.userOrderId}_${_typedEvent.order.orderId}`;
|
|
21
|
+
}
|
|
22
|
+
case 'CurveRecord': {
|
|
23
|
+
const _typedEvent = event;
|
|
24
|
+
return `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.recordId.toString()}`;
|
|
25
|
+
}
|
|
26
|
+
case 'DeleteUserRecord': {
|
|
27
|
+
const _typedEvent = event;
|
|
28
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}`;
|
|
29
|
+
}
|
|
30
|
+
case 'DepositRecord': {
|
|
31
|
+
const _typedEvent = event;
|
|
32
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${_typedEvent.depositRecordId.toString()}`;
|
|
33
|
+
}
|
|
34
|
+
case 'FundingPaymentRecord': {
|
|
35
|
+
const _typedEvent = event;
|
|
36
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${_typedEvent.txSig}_${_typedEvent.marketIndex}`;
|
|
37
|
+
}
|
|
38
|
+
case 'FuelSeasonRecord': {
|
|
39
|
+
const _typedEvent = event;
|
|
40
|
+
return `${_typedEvent.eventType}_${_typedEvent.authority.toString()}_${_typedEvent.txSig}`;
|
|
41
|
+
}
|
|
42
|
+
case 'FuelSweepRecord': {
|
|
43
|
+
const _typedEvent = event;
|
|
44
|
+
return `${_typedEvent.eventType}_${_typedEvent.authority.toString()}_${_typedEvent.txSig}`;
|
|
45
|
+
}
|
|
46
|
+
case 'LiquidationRecord': {
|
|
47
|
+
const _typedEvent = event;
|
|
48
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${_typedEvent.liquidationId}`;
|
|
49
|
+
}
|
|
50
|
+
case 'FundingRateRecord': {
|
|
51
|
+
const _typedEvent = event;
|
|
52
|
+
return `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.recordId.toString()}`;
|
|
53
|
+
}
|
|
54
|
+
case 'NewUserRecord': {
|
|
55
|
+
const _typedEvent = event;
|
|
56
|
+
return `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${_typedEvent.txSig}`;
|
|
57
|
+
}
|
|
58
|
+
case 'InsuranceFundRecord': {
|
|
59
|
+
const _typedEvent = event;
|
|
60
|
+
return `${_typedEvent.eventType}_${_typedEvent.txSig}`;
|
|
61
|
+
}
|
|
62
|
+
case 'InsuranceFundStakeRecord': {
|
|
63
|
+
const _typedEvent = event;
|
|
64
|
+
return `${_typedEvent.eventType}_${_1.ENUM_UTILS.toStr(_typedEvent.action)}_${_typedEvent.txSig}`;
|
|
65
|
+
}
|
|
66
|
+
case 'SpotMarketVaultDepositRecord': {
|
|
67
|
+
const _typedEvent = event;
|
|
68
|
+
return `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.txSig}`;
|
|
69
|
+
}
|
|
70
|
+
case 'SpotInterestRecord': {
|
|
71
|
+
const _typedEvent = event;
|
|
72
|
+
return `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.txSig}`;
|
|
73
|
+
}
|
|
74
|
+
case 'LPRecord': {
|
|
75
|
+
const _typedEvent = event;
|
|
76
|
+
return `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_1.ENUM_UTILS.toStr(_typedEvent.action)}_${_typedEvent.txSig}`;
|
|
77
|
+
}
|
|
78
|
+
case 'SettlePnlRecord': {
|
|
79
|
+
const _typedEvent = event;
|
|
80
|
+
return `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.user.toString()}_${_typedEvent.txSig}`;
|
|
81
|
+
}
|
|
82
|
+
case 'SignedMsgOrderRecord': {
|
|
83
|
+
const _typedEvent = event;
|
|
84
|
+
return `${_typedEvent.eventType}_${_typedEvent.hash}`;
|
|
85
|
+
}
|
|
86
|
+
case 'OrderActionRecord': {
|
|
87
|
+
const _typedEvent = event;
|
|
88
|
+
const _actionStr = _1.ENUM_UTILS.toStr(_typedEvent.action);
|
|
89
|
+
switch (_actionStr) {
|
|
90
|
+
case 'trigger': {
|
|
91
|
+
return `${_typedEvent.eventType}_${_actionStr}_${_typedEvent.marketIndex}_${_typedEvent.takerOrderId}_${_typedEvent.makerOrderId}_${_typedEvent.txSig}`;
|
|
92
|
+
}
|
|
93
|
+
case 'fill': {
|
|
94
|
+
const orderId = _typedEvent.taker
|
|
95
|
+
? _typedEvent.takerOrderId
|
|
96
|
+
: _typedEvent.makerOrderId;
|
|
97
|
+
const pubkey = _typedEvent.taker
|
|
98
|
+
? _typedEvent.taker
|
|
99
|
+
: _typedEvent.maker;
|
|
100
|
+
return `${_typedEvent.eventType}_${pubkey.toString()}_${_typedEvent.marketIndex.toString()}_${orderId.toString()}_${_typedEvent.fillRecordId}_${_1.ENUM_UTILS.toStr(_typedEvent.action)}_${_typedEvent.txSig.toString()}`;
|
|
101
|
+
}
|
|
102
|
+
case 'expire': {
|
|
103
|
+
return `${_typedEvent.eventType}_${_actionStr}_${_typedEvent.marketIndex}_${_typedEvent.takerOrderId}_${_typedEvent.makerOrderId}_${(_a = _typedEvent.taker) === null || _a === void 0 ? void 0 : _a.toString()}_${(_b = _typedEvent.maker) === null || _b === void 0 ? void 0 : _b.toString()}_${_typedEvent.txSig}`;
|
|
104
|
+
}
|
|
105
|
+
case 'place': {
|
|
106
|
+
return `${_typedEvent.eventType}_${_actionStr}_${_typedEvent.marketIndex}_${_typedEvent.takerOrderId}_${_typedEvent.makerOrderId}_${(_c = _typedEvent.taker) === null || _c === void 0 ? void 0 : _c.toString()}_${(_d = _typedEvent.maker) === null || _d === void 0 ? void 0 : _d.toString()}_${_typedEvent.txSig}`;
|
|
107
|
+
}
|
|
108
|
+
case 'cancel': {
|
|
109
|
+
return `${_typedEvent.eventType}_${_actionStr}_${_typedEvent.marketIndex}_${_typedEvent.takerOrderId}_${_typedEvent.makerOrderId}_${(_e = _typedEvent.taker) === null || _e === void 0 ? void 0 : _e.toString()}_${(_f = _typedEvent.maker) === null || _f === void 0 ? void 0 : _f.toString()}_${_typedEvent.txSig}`;
|
|
110
|
+
}
|
|
111
|
+
default: {
|
|
112
|
+
throw new Error(`Unhandled Order Action: ${_actionStr}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
default: {
|
|
117
|
+
const _unhandledEvent = _eventType;
|
|
118
|
+
throw new Error(`Unhandled event type: ${_unhandledEvent}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
exports.getDriftEventKey = getDriftEventKey;
|
|
123
|
+
//# sourceMappingURL=driftEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driftEvents.js","sourceRoot":"","sources":["../../src/utils/driftEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventType, WrappedEvent } from '@drift-labs/sdk';\nimport { ENUM_UTILS } from '.';\n\n// Pick the relevant fields from OrderActionRecord that we care about for getDriftEventKey. This enables us to use UISerializableOrderActionRecord and OrderActionRecord interchangeably.\ntype UniqableOrderActionRecord = Pick<\n\tWrappedEvent<'OrderActionRecord'>,\n\t| 'eventType'\n\t| 'action'\n\t| 'marketIndex'\n\t| 'takerOrderId'\n\t| 'makerOrderId'\n\t| 'txSig'\n\t| 'fillRecordId'\n\t| 'taker'\n\t| 'maker'\n>;\n\n// Create a generic type using typescript transforms that allows any relevant order types to be used in getDriftEventKey.\nexport type UniqableDriftEvent =\n\t| WrappedEvent<Exclude<EventType, 'OrderActionRecord'>>\n\t| UniqableOrderActionRecord;\n\n/**\n * Utility method to get a unique key for any drift event.\n * @param event\n * @returns\n */\nexport const getDriftEventKey = (event: UniqableDriftEvent) => {\n\tconst _eventType = event.eventType;\n\tswitch (_eventType) {\n\t\tcase 'SwapRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'SwapRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${\n\t\t\t\t_typedEvent.txSig\n\t\t\t}_${_typedEvent.inMarketIndex}_${_typedEvent.outMarketIndex}`;\n\t\t}\n\t\tcase 'OrderRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'OrderRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${\n\t\t\t\t_typedEvent.order.userOrderId\n\t\t\t}_${_typedEvent.order.orderId}`;\n\t\t}\n\t\tcase 'CurveRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'CurveRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${\n\t\t\t\t_typedEvent.marketIndex\n\t\t\t}_${_typedEvent.recordId.toString()}`;\n\t\t}\n\t\tcase 'DeleteUserRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'DeleteUserRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.user.toString()}`;\n\t\t}\n\t\tcase 'DepositRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'DepositRecord'>;\n\t\t\treturn `${\n\t\t\t\t_typedEvent.eventType\n\t\t\t}_${_typedEvent.user.toString()}_${_typedEvent.depositRecordId.toString()}`;\n\t\t}\n\t\tcase 'FundingPaymentRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'FundingPaymentRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${\n\t\t\t\t_typedEvent.txSig\n\t\t\t}_${_typedEvent.marketIndex}`;\n\t\t}\n\t\tcase 'FuelSeasonRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'FuelSeasonRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.authority.toString()}_${\n\t\t\t\t_typedEvent.txSig\n\t\t\t}`;\n\t\t}\n\t\tcase 'FuelSweepRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'FuelSweepRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.authority.toString()}_${\n\t\t\t\t_typedEvent.txSig\n\t\t\t}`;\n\t\t}\n\t\tcase 'LiquidationRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'LiquidationRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${\n\t\t\t\t_typedEvent.liquidationId\n\t\t\t}`;\n\t\t}\n\t\tcase 'FundingRateRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'FundingRateRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${\n\t\t\t\t_typedEvent.marketIndex\n\t\t\t}_${_typedEvent.recordId.toString()}`;\n\t\t}\n\t\tcase 'NewUserRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'NewUserRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.user.toString()}_${\n\t\t\t\t_typedEvent.txSig\n\t\t\t}`;\n\t\t}\n\t\tcase 'InsuranceFundRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'InsuranceFundRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.txSig}`;\n\t\t}\n\t\tcase 'InsuranceFundStakeRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'InsuranceFundStakeRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${ENUM_UTILS.toStr(\n\t\t\t\t_typedEvent.action\n\t\t\t)}_${_typedEvent.txSig}`;\n\t\t}\n\t\tcase 'SpotMarketVaultDepositRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'SpotMarketVaultDepositRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.txSig}`;\n\t\t}\n\t\tcase 'SpotInterestRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'SpotInterestRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.marketIndex}_${_typedEvent.txSig}`;\n\t\t}\n\t\tcase 'LPRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'LPRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${\n\t\t\t\t_typedEvent.marketIndex\n\t\t\t}_${ENUM_UTILS.toStr(_typedEvent.action)}_${_typedEvent.txSig}`;\n\t\t}\n\t\tcase 'SettlePnlRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'SettlePnlRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${\n\t\t\t\t_typedEvent.marketIndex\n\t\t\t}_${_typedEvent.user.toString()}_${_typedEvent.txSig}`;\n\t\t}\n\t\tcase 'SignedMsgOrderRecord': {\n\t\t\tconst _typedEvent = event as WrappedEvent<'SignedMsgOrderRecord'>;\n\t\t\treturn `${_typedEvent.eventType}_${_typedEvent.hash}`;\n\t\t}\n\t\tcase 'OrderActionRecord': {\n\t\t\tconst _typedEvent = event as UniqableOrderActionRecord;\n\t\t\tconst _actionStr = ENUM_UTILS.toStr(_typedEvent.action);\n\t\t\tswitch (_actionStr) {\n\t\t\t\tcase 'trigger': {\n\t\t\t\t\treturn `${_typedEvent.eventType}_${_actionStr}_${_typedEvent.marketIndex}_${_typedEvent.takerOrderId}_${_typedEvent.makerOrderId}_${_typedEvent.txSig}`;\n\t\t\t\t}\n\t\t\t\tcase 'fill': {\n\t\t\t\t\tconst orderId = _typedEvent.taker\n\t\t\t\t\t\t? _typedEvent.takerOrderId\n\t\t\t\t\t\t: _typedEvent.makerOrderId;\n\t\t\t\t\tconst pubkey = _typedEvent.taker\n\t\t\t\t\t\t? _typedEvent.taker\n\t\t\t\t\t\t: _typedEvent.maker;\n\n\t\t\t\t\treturn `${\n\t\t\t\t\t\t_typedEvent.eventType\n\t\t\t\t\t}_${pubkey.toString()}_${_typedEvent.marketIndex.toString()}_${orderId.toString()}_${\n\t\t\t\t\t\t_typedEvent.fillRecordId\n\t\t\t\t\t}_${ENUM_UTILS.toStr(\n\t\t\t\t\t\t_typedEvent.action\n\t\t\t\t\t)}_${_typedEvent.txSig.toString()}`;\n\t\t\t\t}\n\t\t\t\tcase 'expire': {\n\t\t\t\t\treturn `${_typedEvent.eventType}_${_actionStr}_${\n\t\t\t\t\t\t_typedEvent.marketIndex\n\t\t\t\t\t}_${_typedEvent.takerOrderId}_${\n\t\t\t\t\t\t_typedEvent.makerOrderId\n\t\t\t\t\t}_${_typedEvent.taker?.toString()}_${_typedEvent.maker?.toString()}_${\n\t\t\t\t\t\t_typedEvent.txSig\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'place': {\n\t\t\t\t\treturn `${_typedEvent.eventType}_${_actionStr}_${\n\t\t\t\t\t\t_typedEvent.marketIndex\n\t\t\t\t\t}_${_typedEvent.takerOrderId}_${\n\t\t\t\t\t\t_typedEvent.makerOrderId\n\t\t\t\t\t}_${_typedEvent.taker?.toString()}_${_typedEvent.maker?.toString()}_${\n\t\t\t\t\t\t_typedEvent.txSig\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\treturn `${_typedEvent.eventType}_${_actionStr}_${\n\t\t\t\t\t\t_typedEvent.marketIndex\n\t\t\t\t\t}_${_typedEvent.takerOrderId}_${\n\t\t\t\t\t\t_typedEvent.makerOrderId\n\t\t\t\t\t}_${_typedEvent.taker?.toString()}_${_typedEvent.maker?.toString()}_${\n\t\t\t\t\t\t_typedEvent.txSig\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tthrow new Error(`Unhandled Order Action: ${_actionStr}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdefault: {\n\t\t\tconst _unhandledEvent: string = _eventType;\n\t\t\tthrow new Error(`Unhandled event type: ${_unhandledEvent}`);\n\t\t}\n\t}\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OpenPosition } from '../types';
|
|
2
|
+
export type PropertyType = 'primitive' | 'primitiveArray' | 'bn' | 'bignum' | 'programEnum' | 'custom';
|
|
3
|
+
export type PropertyAndType<KeyOfObject> = [
|
|
4
|
+
property: KeyOfObject,
|
|
5
|
+
type: PropertyType,
|
|
6
|
+
customEqualityFn?: (a: any, b: any) => boolean
|
|
7
|
+
];
|
|
8
|
+
export declare const EQUALITY_CHECKS: {
|
|
9
|
+
arePropertiesEqual: (obj1: any, obj2: any, properties: PropertyAndType<any>[]) => boolean;
|
|
10
|
+
openPosition: (openPosition1: OpenPosition, openPosition2: OpenPosition) => boolean;
|
|
11
|
+
openPositionLists: (openPositions1: OpenPosition[], openPositions2: OpenPosition[]) => boolean;
|
|
12
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EQUALITY_CHECKS = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const arePropertiesEqual = (obj1, obj2, properties) => {
|
|
6
|
+
return properties.every((property) => {
|
|
7
|
+
var _a, _b, _c, _d;
|
|
8
|
+
const propertyName = property[0];
|
|
9
|
+
const propertyType = property[1];
|
|
10
|
+
const customEqualityFn = property[2];
|
|
11
|
+
switch (propertyType) {
|
|
12
|
+
case 'primitive':
|
|
13
|
+
return obj1[propertyName] === obj2[propertyName];
|
|
14
|
+
case 'primitiveArray':
|
|
15
|
+
return (((_a = obj1[propertyName]) === null || _a === void 0 ? void 0 : _a.length) === ((_b = obj2[propertyName]) === null || _b === void 0 ? void 0 : _b.length) &&
|
|
16
|
+
((_c = obj1[propertyName]) === null || _c === void 0 ? void 0 : _c.every((value, index) => {
|
|
17
|
+
var _a;
|
|
18
|
+
return value === ((_a = obj2[propertyName]) === null || _a === void 0 ? void 0 : _a[index]);
|
|
19
|
+
})));
|
|
20
|
+
case 'bn':
|
|
21
|
+
case 'bignum':
|
|
22
|
+
return (_d = obj1[propertyName]) === null || _d === void 0 ? void 0 : _d.eq(obj2[propertyName]);
|
|
23
|
+
case 'programEnum':
|
|
24
|
+
return _1.ENUM_UTILS.match(obj1[propertyName], obj2[propertyName]);
|
|
25
|
+
case 'custom':
|
|
26
|
+
if (!customEqualityFn)
|
|
27
|
+
throw new Error('You need to provide a custom equality function for this property');
|
|
28
|
+
return customEqualityFn(obj1[propertyName], obj2[propertyName]);
|
|
29
|
+
default:
|
|
30
|
+
throw new Error('Invalid property type');
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
const areTwoOpenPositionsEqual = (openPosition1, openPosition2) => {
|
|
35
|
+
const propertiesToCompare = [
|
|
36
|
+
['marketIndex', 'primitive'],
|
|
37
|
+
['marketSymbol', 'primitive'],
|
|
38
|
+
['direction', 'primitive'],
|
|
39
|
+
['notional', 'bn'],
|
|
40
|
+
['baseSize', 'bn'],
|
|
41
|
+
['entryPrice', 'bn'],
|
|
42
|
+
['exitPrice', 'bn'],
|
|
43
|
+
['liqPrice', 'bn'],
|
|
44
|
+
['pnlVsOracle', 'bn'],
|
|
45
|
+
['pnlVsMark', 'bn'],
|
|
46
|
+
['quoteAssetNotionalAmount', 'bn'],
|
|
47
|
+
['quoteEntryAmount', 'bn'],
|
|
48
|
+
['unrealizedFundingPnl', 'bn'],
|
|
49
|
+
['lastCumulativeFundingRate', 'bn'],
|
|
50
|
+
['openOrders', 'primitive'],
|
|
51
|
+
['unsettledPnl', 'bn'],
|
|
52
|
+
['unsettledFundingPnl', 'bn'],
|
|
53
|
+
['totalUnrealizedPnl', 'bn'],
|
|
54
|
+
['costBasis', 'bn'],
|
|
55
|
+
['pnlIsClaimable', 'primitive'],
|
|
56
|
+
['realizedPnl', 'bn'],
|
|
57
|
+
['lpShares', 'bn'],
|
|
58
|
+
];
|
|
59
|
+
return arePropertiesEqual(openPosition1, openPosition2, propertiesToCompare);
|
|
60
|
+
};
|
|
61
|
+
const areOpenPositionListsEqual = (openPositions1, openPositions2) => {
|
|
62
|
+
if (openPositions1.length !== openPositions2.length)
|
|
63
|
+
return false;
|
|
64
|
+
return openPositions1.every((openPosition, index) => areTwoOpenPositionsEqual(openPosition, openPositions2[index]));
|
|
65
|
+
};
|
|
66
|
+
exports.EQUALITY_CHECKS = {
|
|
67
|
+
arePropertiesEqual,
|
|
68
|
+
openPosition: areTwoOpenPositionsEqual,
|
|
69
|
+
openPositionLists: areOpenPositionListsEqual,
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=equalityChecks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equalityChecks.js","sourceRoot":"","sources":["../../src/utils/equalityChecks.ts"],"names":[],"mappings":"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","sourcesContent":["import { ENUM_UTILS } from '.';\nimport { OpenPosition } from '../types';\n\nexport type PropertyType =\n\t| 'primitive'\n\t| 'primitiveArray'\n\t| 'bn'\n\t| 'bignum'\n\t| 'programEnum'\n\t| 'custom';\nexport type PropertyAndType<KeyOfObject> = [\n\tproperty: KeyOfObject,\n\ttype: PropertyType,\n\tcustomEqualityFn?: (a: any, b: any) => boolean\n];\n\nconst arePropertiesEqual = (\n\tobj1: any,\n\tobj2: any,\n\tproperties: PropertyAndType<any>[]\n) => {\n\treturn properties.every((property) => {\n\t\tconst propertyName = property[0];\n\t\tconst propertyType = property[1];\n\t\tconst customEqualityFn = property[2];\n\n\t\tswitch (propertyType) {\n\t\t\tcase 'primitive':\n\t\t\t\treturn obj1[propertyName] === obj2[propertyName];\n\t\t\tcase 'primitiveArray':\n\t\t\t\treturn (\n\t\t\t\t\tobj1[propertyName]?.length === obj2[propertyName]?.length &&\n\t\t\t\t\tobj1[propertyName]?.every((value: any, index: number) => {\n\t\t\t\t\t\treturn value === obj2[propertyName]?.[index];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\tcase 'bn':\n\t\t\tcase 'bignum':\n\t\t\t\treturn obj1[propertyName]?.eq(obj2[propertyName]);\n\t\t\tcase 'programEnum':\n\t\t\t\treturn ENUM_UTILS.match(obj1[propertyName], obj2[propertyName]);\n\t\t\tcase 'custom':\n\t\t\t\tif (!customEqualityFn)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'You need to provide a custom equality function for this property'\n\t\t\t\t\t);\n\n\t\t\t\treturn customEqualityFn(obj1[propertyName], obj2[propertyName]);\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Invalid property type');\n\t\t}\n\t});\n};\n\nconst areTwoOpenPositionsEqual = (\n\topenPosition1: OpenPosition,\n\topenPosition2: OpenPosition\n) => {\n\tconst propertiesToCompare: PropertyAndType<keyof OpenPosition>[] = [\n\t\t['marketIndex', 'primitive'],\n\t\t['marketSymbol', 'primitive'],\n\t\t['direction', 'primitive'],\n\t\t['notional', 'bn'],\n\t\t['baseSize', 'bn'],\n\t\t['entryPrice', 'bn'],\n\t\t['exitPrice', 'bn'],\n\t\t['liqPrice', 'bn'],\n\t\t['pnlVsOracle', 'bn'],\n\t\t['pnlVsMark', 'bn'],\n\t\t['quoteAssetNotionalAmount', 'bn'],\n\t\t['quoteEntryAmount', 'bn'],\n\t\t['unrealizedFundingPnl', 'bn'],\n\t\t['lastCumulativeFundingRate', 'bn'],\n\t\t['openOrders', 'primitive'],\n\t\t['unsettledPnl', 'bn'],\n\t\t['unsettledFundingPnl', 'bn'],\n\t\t['totalUnrealizedPnl', 'bn'],\n\t\t['costBasis', 'bn'],\n\t\t['pnlIsClaimable', 'primitive'],\n\t\t['realizedPnl', 'bn'],\n\t\t['lpShares', 'bn'],\n\t];\n\n\treturn arePropertiesEqual(openPosition1, openPosition2, propertiesToCompare);\n};\n\nconst areOpenPositionListsEqual = (\n\topenPositions1: OpenPosition[],\n\topenPositions2: OpenPosition[]\n) => {\n\tif (openPositions1.length !== openPositions2.length) return false;\n\n\treturn openPositions1.every((openPosition, index) =>\n\t\tareTwoOpenPositionsEqual(openPosition, openPositions2[index])\n\t);\n};\n\nexport const EQUALITY_CHECKS = {\n\tarePropertiesEqual,\n\topenPosition: areTwoOpenPositionsEqual,\n\topenPositionLists: areOpenPositionListsEqual,\n};\n"]}
|