tardis-dev 16.5.0 → 16.6.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/dist/consts.d.ts +3 -1
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +21 -1
- package/dist/consts.js.map +1 -1
- package/dist/handy.d.ts.map +1 -1
- package/dist/handy.js +6 -3
- package/dist/handy.js.map +1 -1
- package/dist/mappers/ascendex.d.ts +6 -99
- package/dist/mappers/ascendex.d.ts.map +1 -1
- package/dist/mappers/ascendex.js +13 -4
- package/dist/mappers/ascendex.js.map +1 -1
- package/dist/mappers/binance.d.ts +27 -154
- package/dist/mappers/binance.d.ts.map +1 -1
- package/dist/mappers/binance.js +49 -15
- package/dist/mappers/binance.js.map +1 -1
- package/dist/mappers/binancedex.d.ts +7 -4
- package/dist/mappers/binancedex.d.ts.map +1 -1
- package/dist/mappers/binancedex.js +11 -3
- package/dist/mappers/binancedex.js.map +1 -1
- package/dist/mappers/binanceeuropeanoptions.d.ts +6 -216
- package/dist/mappers/binanceeuropeanoptions.d.ts.map +1 -1
- package/dist/mappers/binanceeuropeanoptions.js +26 -7
- package/dist/mappers/binanceeuropeanoptions.js.map +1 -1
- package/dist/mappers/bitfinex.d.ts +15 -100
- package/dist/mappers/bitfinex.d.ts.map +1 -1
- package/dist/mappers/bitfinex.js +20 -5
- package/dist/mappers/bitfinex.js.map +1 -1
- package/dist/mappers/bitflyer.d.ts +5 -41
- package/dist/mappers/bitflyer.d.ts.map +1 -1
- package/dist/mappers/bitflyer.js +11 -3
- package/dist/mappers/bitflyer.js.map +1 -1
- package/dist/mappers/bitget.d.ts +12 -269
- package/dist/mappers/bitget.d.ts.map +1 -1
- package/dist/mappers/bitget.js +46 -9
- package/dist/mappers/bitget.js.map +1 -1
- package/dist/mappers/bitmex.d.ts +8 -56
- package/dist/mappers/bitmex.d.ts.map +1 -1
- package/dist/mappers/bitmex.js +15 -5
- package/dist/mappers/bitmex.js.map +1 -1
- package/dist/mappers/bitnomial.d.ts +4 -44
- package/dist/mappers/bitnomial.d.ts.map +1 -1
- package/dist/mappers/bitnomial.js +9 -2
- package/dist/mappers/bitnomial.js.map +1 -1
- package/dist/mappers/bitstamp.d.ts +4 -44
- package/dist/mappers/bitstamp.d.ts.map +1 -1
- package/dist/mappers/bitstamp.js +9 -2
- package/dist/mappers/bitstamp.js.map +1 -1
- package/dist/mappers/blockchaincom.d.ts +4 -63
- package/dist/mappers/blockchaincom.d.ts.map +1 -1
- package/dist/mappers/blockchaincom.js +9 -2
- package/dist/mappers/blockchaincom.js.map +1 -1
- package/dist/mappers/bullish.d.ts +8 -158
- package/dist/mappers/bullish.d.ts.map +1 -1
- package/dist/mappers/bullish.js +19 -7
- package/dist/mappers/bullish.js.map +1 -1
- package/dist/mappers/bybit.d.ts +61 -407
- package/dist/mappers/bybit.d.ts.map +1 -1
- package/dist/mappers/bybit.js +60 -15
- package/dist/mappers/bybit.js.map +1 -1
- package/dist/mappers/bybitspot.d.ts +1 -1
- package/dist/mappers/coinbase.d.ts +6 -39
- package/dist/mappers/coinbase.d.ts.map +1 -1
- package/dist/mappers/coinbase.js +11 -3
- package/dist/mappers/coinbase.js.map +1 -1
- package/dist/mappers/coinbaseinternational.d.ts +7 -78
- package/dist/mappers/coinbaseinternational.d.ts.map +1 -1
- package/dist/mappers/coinbaseinternational.js +13 -4
- package/dist/mappers/coinbaseinternational.js.map +1 -1
- package/dist/mappers/coinflex.d.ts +6 -24
- package/dist/mappers/coinflex.d.ts.map +1 -1
- package/dist/mappers/coinflex.js +11 -3
- package/dist/mappers/coinflex.js.map +1 -1
- package/dist/mappers/cryptocom.d.ts +22 -328
- package/dist/mappers/cryptocom.d.ts.map +1 -1
- package/dist/mappers/cryptocom.js +13 -4
- package/dist/mappers/cryptocom.js.map +1 -1
- package/dist/mappers/cryptofacilities.d.ts +8 -96
- package/dist/mappers/cryptofacilities.d.ts.map +1 -1
- package/dist/mappers/cryptofacilities.js +24 -7
- package/dist/mappers/cryptofacilities.js.map +1 -1
- package/dist/mappers/delta.d.ts +7 -114
- package/dist/mappers/delta.d.ts.map +1 -1
- package/dist/mappers/delta.js +30 -10
- package/dist/mappers/delta.js.map +1 -1
- package/dist/mappers/deribit.d.ts +8 -66
- package/dist/mappers/deribit.d.ts.map +1 -1
- package/dist/mappers/deribit.js +17 -6
- package/dist/mappers/deribit.js.map +1 -1
- package/dist/mappers/dydx.d.ts +5 -146
- package/dist/mappers/dydx.d.ts.map +1 -1
- package/dist/mappers/dydx.js +11 -3
- package/dist/mappers/dydx.js.map +1 -1
- package/dist/mappers/dydxv4.d.ts +6 -173
- package/dist/mappers/dydxv4.d.ts.map +1 -1
- package/dist/mappers/dydxv4.js +13 -4
- package/dist/mappers/dydxv4.js.map +1 -1
- package/dist/mappers/ftx.d.ts +12 -107
- package/dist/mappers/ftx.d.ts.map +1 -1
- package/dist/mappers/ftx.js +21 -6
- package/dist/mappers/ftx.js.map +1 -1
- package/dist/mappers/gateio.d.ts +6 -191
- package/dist/mappers/gateio.d.ts.map +1 -1
- package/dist/mappers/gateio.js +28 -8
- package/dist/mappers/gateio.js.map +1 -1
- package/dist/mappers/gateiofutures.d.ts +7 -122
- package/dist/mappers/gateiofutures.d.ts.map +1 -1
- package/dist/mappers/gateiofutures.js +13 -4
- package/dist/mappers/gateiofutures.js.map +1 -1
- package/dist/mappers/gemini.d.ts +6 -3
- package/dist/mappers/gemini.d.ts.map +1 -1
- package/dist/mappers/gemini.js +9 -2
- package/dist/mappers/gemini.js.map +1 -1
- package/dist/mappers/hitbtc.d.ts +6 -3
- package/dist/mappers/hitbtc.d.ts.map +1 -1
- package/dist/mappers/hitbtc.js +9 -2
- package/dist/mappers/hitbtc.js.map +1 -1
- package/dist/mappers/huobi.d.ts +118 -289
- package/dist/mappers/huobi.d.ts.map +1 -1
- package/dist/mappers/huobi.js +45 -7
- package/dist/mappers/huobi.js.map +1 -1
- package/dist/mappers/hyperliquid.d.ts +6 -86
- package/dist/mappers/hyperliquid.d.ts.map +1 -1
- package/dist/mappers/hyperliquid.js +13 -4
- package/dist/mappers/hyperliquid.js.map +1 -1
- package/dist/mappers/index.d.ts +784 -272
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +64 -432
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/kraken.d.ts +7 -4
- package/dist/mappers/kraken.d.ts.map +1 -1
- package/dist/mappers/kraken.js +11 -3
- package/dist/mappers/kraken.js.map +1 -1
- package/dist/mappers/kucoin.d.ts +6 -122
- package/dist/mappers/kucoin.d.ts.map +1 -1
- package/dist/mappers/kucoin.js +13 -5
- package/dist/mappers/kucoin.js.map +1 -1
- package/dist/mappers/kucoinfutures.d.ts +6 -207
- package/dist/mappers/kucoinfutures.d.ts.map +1 -1
- package/dist/mappers/kucoinfutures.js +15 -6
- package/dist/mappers/kucoinfutures.js.map +1 -1
- package/dist/mappers/lighter.d.ts +8 -156
- package/dist/mappers/lighter.d.ts.map +1 -1
- package/dist/mappers/lighter.js +15 -5
- package/dist/mappers/lighter.js.map +1 -1
- package/dist/mappers/mapper.d.ts +3 -1
- package/dist/mappers/mapper.d.ts.map +1 -1
- package/dist/mappers/mapper.js.map +1 -1
- package/dist/mappers/mexc.d.ts +122 -0
- package/dist/mappers/mexc.d.ts.map +1 -0
- package/dist/mappers/mexc.js +205 -0
- package/dist/mappers/mexc.js.map +1 -0
- package/dist/mappers/mexcfutures.d.ts +137 -0
- package/dist/mappers/mexcfutures.d.ts.map +1 -0
- package/dist/mappers/mexcfutures.js +225 -0
- package/dist/mappers/mexcfutures.js.map +1 -0
- package/dist/mappers/okex.d.ts +36 -473
- package/dist/mappers/okex.d.ts.map +1 -1
- package/dist/mappers/okex.js +143 -37
- package/dist/mappers/okex.js.map +1 -1
- package/dist/mappers/phemex.d.ts +5 -82
- package/dist/mappers/phemex.d.ts.map +1 -1
- package/dist/mappers/phemex.js +22 -4
- package/dist/mappers/phemex.js.map +1 -1
- package/dist/mappers/poloniex.d.ts +5 -90
- package/dist/mappers/poloniex.d.ts.map +1 -1
- package/dist/mappers/poloniex.js +18 -4
- package/dist/mappers/poloniex.js.map +1 -1
- package/dist/mappers/polymarket.d.ts +7 -31
- package/dist/mappers/polymarket.d.ts.map +1 -1
- package/dist/mappers/polymarket.js +11 -3
- package/dist/mappers/polymarket.js.map +1 -1
- package/dist/mappers/registry.d.ts +41 -0
- package/dist/mappers/registry.d.ts.map +1 -0
- package/dist/mappers/registry.js +111 -0
- package/dist/mappers/registry.js.map +1 -0
- package/dist/mappers/serum.d.ts +16 -89
- package/dist/mappers/serum.d.ts.map +1 -1
- package/dist/mappers/serum.js +21 -3
- package/dist/mappers/serum.js.map +1 -1
- package/dist/mappers/upbit.d.ts +5 -47
- package/dist/mappers/upbit.d.ts.map +1 -1
- package/dist/mappers/upbit.js +9 -2
- package/dist/mappers/upbit.js.map +1 -1
- package/dist/mappers/woox.d.ts +6 -107
- package/dist/mappers/woox.d.ts.map +1 -1
- package/dist/mappers/woox.js +13 -4
- package/dist/mappers/woox.js.map +1 -1
- package/dist/okexsymbols.d.ts +3 -0
- package/dist/okexsymbols.d.ts.map +1 -0
- package/dist/okexsymbols.js +10 -0
- package/dist/okexsymbols.js.map +1 -0
- package/dist/realtimefeeds/hyperliquid.d.ts.map +1 -1
- package/dist/realtimefeeds/hyperliquid.js +3 -1
- package/dist/realtimefeeds/hyperliquid.js.map +1 -1
- package/dist/realtimefeeds/index.d.ts.map +1 -1
- package/dist/realtimefeeds/index.js +4 -0
- package/dist/realtimefeeds/index.js.map +1 -1
- package/dist/realtimefeeds/mexc.d.ts +35 -0
- package/dist/realtimefeeds/mexc.d.ts.map +1 -0
- package/dist/realtimefeeds/mexc.js +261 -0
- package/dist/realtimefeeds/mexc.js.map +1 -0
- package/dist/realtimefeeds/mexcfutures.d.ts +25 -0
- package/dist/realtimefeeds/mexcfutures.d.ts.map +1 -0
- package/dist/realtimefeeds/mexcfutures.js +203 -0
- package/dist/realtimefeeds/mexcfutures.js.map +1 -0
- package/dist/realtimefeeds/okex.d.ts +1 -0
- package/dist/realtimefeeds/okex.d.ts.map +1 -1
- package/dist/realtimefeeds/okex.js +7 -5
- package/dist/realtimefeeds/okex.js.map +1 -1
- package/dist/realtimefeeds/realtimefeed.d.ts +1 -0
- package/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
- package/dist/realtimefeeds/realtimefeed.js +4 -1
- package/dist/realtimefeeds/realtimefeed.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +62 -13
- package/dist/replay.js.map +1 -1
- package/example.js +133 -31
- package/package.json +2 -1
- package/src/consts.ts +22 -1
- package/src/handy.ts +6 -3
- package/src/mappers/ascendex.ts +14 -4
- package/src/mappers/binance.ts +61 -21
- package/src/mappers/binancedex.ts +12 -3
- package/src/mappers/binanceeuropeanoptions.ts +28 -7
- package/src/mappers/bitfinex.ts +21 -5
- package/src/mappers/bitflyer.ts +12 -3
- package/src/mappers/bitget.ts +48 -9
- package/src/mappers/bitmex.ts +16 -5
- package/src/mappers/bitnomial.ts +10 -2
- package/src/mappers/bitstamp.ts +10 -2
- package/src/mappers/blockchaincom.ts +10 -2
- package/src/mappers/bullish.ts +21 -8
- package/src/mappers/bybit.ts +70 -15
- package/src/mappers/coinbase.ts +12 -3
- package/src/mappers/coinbaseinternational.ts +14 -4
- package/src/mappers/coinflex.ts +12 -3
- package/src/mappers/cryptocom.ts +14 -4
- package/src/mappers/cryptofacilities.ts +30 -6
- package/src/mappers/delta.ts +41 -7
- package/src/mappers/deribit.ts +18 -6
- package/src/mappers/dydx.ts +12 -3
- package/src/mappers/dydxv4.ts +14 -4
- package/src/mappers/ftx.ts +22 -6
- package/src/mappers/gateio.ts +34 -8
- package/src/mappers/gateiofutures.ts +14 -4
- package/src/mappers/gemini.ts +10 -2
- package/src/mappers/hitbtc.ts +10 -2
- package/src/mappers/huobi.ts +47 -10
- package/src/mappers/hyperliquid.ts +14 -4
- package/src/mappers/index.ts +133 -679
- package/src/mappers/kraken.ts +12 -3
- package/src/mappers/kucoin.ts +19 -5
- package/src/mappers/kucoinfutures.ts +20 -5
- package/src/mappers/lighter.ts +16 -5
- package/src/mappers/mapper.ts +3 -1
- package/src/mappers/mexc.ts +324 -0
- package/src/mappers/mexcfutures.ts +352 -0
- package/src/mappers/okex.ts +178 -37
- package/src/mappers/phemex.ts +25 -4
- package/src/mappers/poloniex.ts +20 -4
- package/src/mappers/polymarket.ts +12 -3
- package/src/mappers/registry.ts +203 -0
- package/src/mappers/serum.ts +22 -3
- package/src/mappers/upbit.ts +10 -2
- package/src/mappers/woox.ts +14 -4
- package/src/okexsymbols.ts +10 -0
- package/src/realtimefeeds/hyperliquid.ts +4 -1
- package/src/realtimefeeds/index.ts +4 -0
- package/src/realtimefeeds/mexc.ts +327 -0
- package/src/realtimefeeds/mexcfutures.ts +269 -0
- package/src/realtimefeeds/okex.ts +7 -5
- package/src/realtimefeeds/realtimefeed.ts +5 -1
- package/src/replay.ts +73 -15
package/src/mappers/dydx.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookPriceLevel, DerivativeTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
|
-
export
|
|
6
|
+
export const dydxMappers = exchangeMappers({
|
|
7
|
+
dydx: {
|
|
8
|
+
trades: () => new DydxTradesMapper(),
|
|
9
|
+
bookChanges: () => new DydxBookChangeMapper(),
|
|
10
|
+
derivativeTickers: () => new DydxDerivativeTickerMapper()
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
class DydxTradesMapper implements Mapper<'dydx', Trade> {
|
|
6
15
|
canHandle(message: DyDxTrade) {
|
|
7
16
|
return message.channel === 'v3_trades' && message.type === 'channel_data'
|
|
8
17
|
}
|
|
@@ -35,7 +44,7 @@ export class DydxTradesMapper implements Mapper<'dydx', Trade> {
|
|
|
35
44
|
}
|
|
36
45
|
}
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
|
|
39
48
|
private _bidsOffsets: { [key: string]: { [key: string]: number | undefined } } = {}
|
|
40
49
|
private _asksOffsets: { [key: string]: { [key: string]: number | undefined } } = {}
|
|
41
50
|
|
|
@@ -148,7 +157,7 @@ export class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
|
|
|
148
157
|
}
|
|
149
158
|
}
|
|
150
159
|
|
|
151
|
-
|
|
160
|
+
class DydxDerivativeTickerMapper implements Mapper<'dydx', DerivativeTicker> {
|
|
152
161
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
153
162
|
|
|
154
163
|
canHandle(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade) {
|
package/src/mappers/dydxv4.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, DerivativeTicker, Liquidation, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
export const dydxV4Mappers = exchangeMappers({
|
|
7
|
+
'dydx-v4': {
|
|
8
|
+
trades: () => new DydxV4TradesMapper(),
|
|
9
|
+
bookChanges: () => new DydxV4BookChangeMapper(),
|
|
10
|
+
derivativeTickers: () => new DydxV4DerivativeTickerMapper(),
|
|
11
|
+
liquidations: () => new DydxV4LiquidationsMapper()
|
|
12
|
+
}
|
|
13
|
+
})
|
|
4
14
|
|
|
5
|
-
|
|
15
|
+
class DydxV4TradesMapper implements Mapper<'dydx-v4', Trade> {
|
|
6
16
|
canHandle(message: DyDxTrade) {
|
|
7
17
|
return message.channel === 'v4_trades' && message.type === 'channel_data'
|
|
8
18
|
}
|
|
@@ -48,7 +58,7 @@ function mapUpdatePriceLevel(level: [string, string]) {
|
|
|
48
58
|
amount: Number(level[1])
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
|
-
|
|
61
|
+
class DydxV4BookChangeMapper implements Mapper<'dydx-v4', BookChange> {
|
|
52
62
|
canHandle(message: DyDxOrderbookSnapshot | DyDxOrderBookUpdate) {
|
|
53
63
|
return message.channel === 'v4_orderbook'
|
|
54
64
|
}
|
|
@@ -99,7 +109,7 @@ export class DydxV4BookChangeMapper implements Mapper<'dydx-v4', BookChange> {
|
|
|
99
109
|
}
|
|
100
110
|
}
|
|
101
111
|
|
|
102
|
-
|
|
112
|
+
class DydxV4DerivativeTickerMapper implements Mapper<'dydx-v4', DerivativeTicker> {
|
|
103
113
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
104
114
|
|
|
105
115
|
canHandle(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade) {
|
|
@@ -171,7 +181,7 @@ export class DydxV4DerivativeTickerMapper implements Mapper<'dydx-v4', Derivativ
|
|
|
171
181
|
}
|
|
172
182
|
}
|
|
173
183
|
|
|
174
|
-
|
|
184
|
+
class DydxV4LiquidationsMapper implements Mapper<'dydx-v4', Liquidation> {
|
|
175
185
|
canHandle(message: DyDxTrade) {
|
|
176
186
|
return message.channel === 'v4_trades' && message.type === 'channel_data'
|
|
177
187
|
}
|
package/src/mappers/ftx.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, parseμs, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Exchange, Liquidation, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://docs.ftx.com/#websocket-api
|
|
6
7
|
|
|
7
|
-
export
|
|
8
|
+
export const ftxMappers = exchangeMappers({
|
|
9
|
+
ftx: {
|
|
10
|
+
trades: () => new FTXTradesMapper('ftx'),
|
|
11
|
+
bookChanges: () => new FTXBookChangeMapper('ftx'),
|
|
12
|
+
derivativeTickers: () => new FTXDerivativeTickerMapper('ftx'),
|
|
13
|
+
liquidations: () => new FTXLiquidationsMapper(),
|
|
14
|
+
bookTickers: () => new FTXBookTickerMapper('ftx')
|
|
15
|
+
},
|
|
16
|
+
'ftx-us': {
|
|
17
|
+
trades: () => new FTXTradesMapper('ftx-us'),
|
|
18
|
+
bookChanges: () => new FTXBookChangeMapper('ftx-us'),
|
|
19
|
+
bookTickers: () => new FTXBookTickerMapper('ftx-us')
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
class FTXTradesMapper implements Mapper<'ftx' | 'ftx-us', Trade> {
|
|
8
24
|
constructor(private readonly _exchange: Exchange) {}
|
|
9
25
|
|
|
10
26
|
canHandle(message: FtxTrades | FtxOrderBook) {
|
|
@@ -46,14 +62,14 @@ export class FTXTradesMapper implements Mapper<'ftx' | 'ftx-us', Trade> {
|
|
|
46
62
|
}
|
|
47
63
|
}
|
|
48
64
|
|
|
49
|
-
|
|
65
|
+
const mapBookLevel = (level: FtxBookLevel) => {
|
|
50
66
|
const price = level[0]
|
|
51
67
|
const amount = level[1]
|
|
52
68
|
|
|
53
69
|
return { price, amount }
|
|
54
70
|
}
|
|
55
71
|
|
|
56
|
-
|
|
72
|
+
class FTXBookChangeMapper implements Mapper<'ftx' | 'ftx-us', BookChange> {
|
|
57
73
|
constructor(private readonly _exchange: Exchange) {}
|
|
58
74
|
|
|
59
75
|
canHandle(message: FtxTrades | FtxOrderBook) {
|
|
@@ -97,7 +113,7 @@ export class FTXBookChangeMapper implements Mapper<'ftx' | 'ftx-us', BookChange>
|
|
|
97
113
|
}
|
|
98
114
|
}
|
|
99
115
|
|
|
100
|
-
|
|
116
|
+
class FTXDerivativeTickerMapper implements Mapper<'ftx', DerivativeTicker> {
|
|
101
117
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
102
118
|
|
|
103
119
|
constructor(private readonly _exchange: Exchange) {}
|
|
@@ -156,7 +172,7 @@ export class FTXDerivativeTickerMapper implements Mapper<'ftx', DerivativeTicker
|
|
|
156
172
|
}
|
|
157
173
|
}
|
|
158
174
|
|
|
159
|
-
|
|
175
|
+
class FTXLiquidationsMapper implements Mapper<'ftx', Liquidation> {
|
|
160
176
|
canHandle(message: FtxTrades | FtxOrderBook) {
|
|
161
177
|
if (message.data == undefined) {
|
|
162
178
|
return false
|
|
@@ -198,7 +214,7 @@ export class FTXLiquidationsMapper implements Mapper<'ftx', Liquidation> {
|
|
|
198
214
|
}
|
|
199
215
|
}
|
|
200
216
|
|
|
201
|
-
|
|
217
|
+
class FTXBookTickerMapper implements Mapper<'ftx' | 'ftx-us', BookTicker> {
|
|
202
218
|
constructor(private readonly _exchange: Exchange) {}
|
|
203
219
|
|
|
204
220
|
canHandle(message: FTXTicker) {
|
package/src/mappers/gateio.ts
CHANGED
|
@@ -2,8 +2,30 @@ import { debug } from '../debug.ts'
|
|
|
2
2
|
import { CircularBuffer, fromMicroSecondsToDate, upperCaseSymbols } from '../handy.ts'
|
|
3
3
|
import { BookChange, BookTicker, Exchange, Trade } from '../types.ts'
|
|
4
4
|
import { Mapper } from './mapper.ts'
|
|
5
|
+
import { exchangeMappers, mapper } from './registry.ts'
|
|
6
|
+
|
|
7
|
+
const GATE_IO_V4_API_SWITCH_DATE = new Date('2023-04-29T00:00:00.000Z')
|
|
8
|
+
const GATE_IO_V4_ORDER_BOOK_V2_SWITCH_DATE = new Date('2025-08-01T00:00:00.000Z')
|
|
9
|
+
|
|
10
|
+
export const gateIOMappers = exchangeMappers({
|
|
11
|
+
'gate-io': {
|
|
12
|
+
trades: mapper([
|
|
13
|
+
{ until: GATE_IO_V4_API_SWITCH_DATE, use: () => new GateIOTradesMapper('gate-io') },
|
|
14
|
+
{ use: () => new GateIOV4TradesMapper('gate-io') }
|
|
15
|
+
]),
|
|
16
|
+
bookChanges: mapper([
|
|
17
|
+
{ until: GATE_IO_V4_API_SWITCH_DATE, use: () => new GateIOBookChangeMapper('gate-io') },
|
|
18
|
+
{
|
|
19
|
+
until: GATE_IO_V4_ORDER_BOOK_V2_SWITCH_DATE,
|
|
20
|
+
use: () => new GateIOV4BookChangeMapper('gate-io', { ignoreBookSnapshotOverlapError: true })
|
|
21
|
+
},
|
|
22
|
+
{ use: () => new GateIOV4OrderBookV2ChangeMapper('gate-io') }
|
|
23
|
+
]),
|
|
24
|
+
bookTickers: () => new GateIOV4BookTickerMapper('gate-io')
|
|
25
|
+
}
|
|
26
|
+
})
|
|
5
27
|
|
|
6
|
-
|
|
28
|
+
class GateIOV4OrderBookV2ChangeMapper implements Mapper<'gate-io', BookChange> {
|
|
7
29
|
constructor(protected readonly exchange: Exchange) {}
|
|
8
30
|
|
|
9
31
|
canHandle(message: GateV4OrderBookV2Message) {
|
|
@@ -55,15 +77,19 @@ export class GateIOV4OrderBookV2ChangeMapper implements Mapper<'gate-io', BookCh
|
|
|
55
77
|
}
|
|
56
78
|
//v4
|
|
57
79
|
|
|
58
|
-
|
|
80
|
+
class GateIOV4BookChangeMapper implements Mapper<'gate-io', BookChange> {
|
|
59
81
|
protected readonly symbolToDepthInfoMapping: {
|
|
60
82
|
[key: string]: LocalDepthInfo
|
|
61
83
|
} = {}
|
|
62
84
|
|
|
63
85
|
constructor(
|
|
64
86
|
protected readonly exchange: Exchange,
|
|
65
|
-
|
|
66
|
-
) {
|
|
87
|
+
{ ignoreBookSnapshotOverlapError }: { ignoreBookSnapshotOverlapError: boolean }
|
|
88
|
+
) {
|
|
89
|
+
this.ignoreBookSnapshotOverlapError = ignoreBookSnapshotOverlapError
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
protected readonly ignoreBookSnapshotOverlapError: boolean
|
|
67
93
|
|
|
68
94
|
canHandle(message: GateV4OrderBookUpdate | Gatev4OrderBookSnapshot) {
|
|
69
95
|
if (message.channel === undefined) {
|
|
@@ -216,7 +242,7 @@ export class GateIOV4BookChangeMapper implements Mapper<'gate-io', BookChange> {
|
|
|
216
242
|
}
|
|
217
243
|
}
|
|
218
244
|
|
|
219
|
-
|
|
245
|
+
class GateIOV4BookTickerMapper implements Mapper<'gate-io', BookTicker> {
|
|
220
246
|
constructor(private readonly _exchange: Exchange) {}
|
|
221
247
|
|
|
222
248
|
canHandle(message: GateV4BookTicker) {
|
|
@@ -260,7 +286,7 @@ export class GateIOV4BookTickerMapper implements Mapper<'gate-io', BookTicker> {
|
|
|
260
286
|
}
|
|
261
287
|
}
|
|
262
288
|
|
|
263
|
-
|
|
289
|
+
class GateIOV4TradesMapper implements Mapper<'gate-io', Trade> {
|
|
264
290
|
constructor(private readonly _exchange: Exchange) {}
|
|
265
291
|
|
|
266
292
|
canHandle(message: GateV4Trade) {
|
|
@@ -302,7 +328,7 @@ export class GateIOV4TradesMapper implements Mapper<'gate-io', Trade> {
|
|
|
302
328
|
|
|
303
329
|
// v3 https://www.gate.io/docs/websocket/index.html
|
|
304
330
|
|
|
305
|
-
|
|
331
|
+
class GateIOTradesMapper implements Mapper<'gate-io', Trade> {
|
|
306
332
|
private readonly _seenSymbols = new Set<string>()
|
|
307
333
|
|
|
308
334
|
constructor(private readonly _exchange: Exchange) {}
|
|
@@ -361,7 +387,7 @@ const mapBookLevel = (level: GateIODepthLevel) => {
|
|
|
361
387
|
return { price, amount }
|
|
362
388
|
}
|
|
363
389
|
|
|
364
|
-
|
|
390
|
+
class GateIOBookChangeMapper implements Mapper<'gate-io', BookChange> {
|
|
365
391
|
constructor(private readonly _exchange: Exchange) {}
|
|
366
392
|
|
|
367
393
|
canHandle(message: any) {
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, DerivativeTicker, Exchange, Trade, BookTicker } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://www.gate.io/docs/futures/ws/index.html
|
|
6
7
|
|
|
7
|
-
export
|
|
8
|
+
export const gateIOFuturesMappers = exchangeMappers({
|
|
9
|
+
'gate-io-futures': {
|
|
10
|
+
trades: () => new GateIOFuturesTradesMapper('gate-io-futures'),
|
|
11
|
+
bookChanges: () => new GateIOFuturesBookChangeMapper('gate-io-futures'),
|
|
12
|
+
derivativeTickers: () => new GateIOFuturesDerivativeTickerMapper(),
|
|
13
|
+
bookTickers: () => new GateIOFuturesBookTickerMapper('gate-io-futures')
|
|
14
|
+
}
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
class GateIOFuturesTradesMapper implements Mapper<'gate-io-futures', Trade> {
|
|
8
18
|
constructor(private readonly _exchange: Exchange) {}
|
|
9
19
|
|
|
10
20
|
canHandle(message: any) {
|
|
@@ -49,7 +59,7 @@ const mapBookLevel = (level: GateIOFuturesSnapshotLevel) => {
|
|
|
49
59
|
return { price, amount: Math.abs(size) }
|
|
50
60
|
}
|
|
51
61
|
|
|
52
|
-
|
|
62
|
+
class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures', BookChange> {
|
|
53
63
|
constructor(private readonly _exchange: Exchange) {}
|
|
54
64
|
|
|
55
65
|
canHandle(message: GateIOFuturesOrderBookSnapshot | GateIOFuturesOrderBookUpdate) {
|
|
@@ -108,7 +118,7 @@ export class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures',
|
|
|
108
118
|
}
|
|
109
119
|
}
|
|
110
120
|
|
|
111
|
-
|
|
121
|
+
class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futures', DerivativeTicker> {
|
|
112
122
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
113
123
|
|
|
114
124
|
canHandle(message: GateIOFuturesTicker) {
|
|
@@ -155,7 +165,7 @@ export class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futu
|
|
|
155
165
|
}
|
|
156
166
|
}
|
|
157
167
|
|
|
158
|
-
|
|
168
|
+
class GateIOFuturesBookTickerMapper implements Mapper<'gate-io-futures', BookTicker> {
|
|
159
169
|
constructor(private readonly _exchange: Exchange) {}
|
|
160
170
|
|
|
161
171
|
canHandle(message: any) {
|
package/src/mappers/gemini.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://docs.gemini.com/websocket-api/#market-data-version-2
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const geminiMappers = exchangeMappers({
|
|
9
|
+
gemini: {
|
|
10
|
+
trades: () => geminiTradesMapper,
|
|
11
|
+
bookChanges: () => geminiBookChangeMapper
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const geminiTradesMapper: Mapper<'gemini', Trade> = {
|
|
8
16
|
canHandle(message: GeminiL2Updates | GeminiTrade) {
|
|
9
17
|
return message.type === 'trade'
|
|
10
18
|
},
|
|
@@ -42,7 +50,7 @@ const mapBookLevel = (level: GeminiBookLevel) => {
|
|
|
42
50
|
return { price, amount }
|
|
43
51
|
}
|
|
44
52
|
|
|
45
|
-
|
|
53
|
+
const geminiBookChangeMapper: Mapper<'gemini', BookChange> = {
|
|
46
54
|
canHandle(message: GeminiL2Updates | GeminiTrade) {
|
|
47
55
|
return message.type === 'l2_updates'
|
|
48
56
|
},
|
package/src/mappers/hitbtc.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://api.hitbtc.com/#socket-market-data
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const hitBtcMappers = exchangeMappers({
|
|
9
|
+
hitbtc: {
|
|
10
|
+
trades: () => hitBtcTradesMapper,
|
|
11
|
+
bookChanges: () => hitBtcBookChangeMapper
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const hitBtcTradesMapper: Mapper<'hitbtc', Trade> = {
|
|
8
16
|
canHandle(message: HitBtcTradesMessage) {
|
|
9
17
|
return message.method !== undefined && message.method === 'updateTrades'
|
|
10
18
|
},
|
|
@@ -43,7 +51,7 @@ const mapBookLevel = (level: HitBtcBookLevel) => {
|
|
|
43
51
|
return { price, amount }
|
|
44
52
|
}
|
|
45
53
|
|
|
46
|
-
|
|
54
|
+
const hitBtcBookChangeMapper: Mapper<'hitbtc', BookChange> = {
|
|
47
55
|
canHandle(message: HitBtcBookMessage) {
|
|
48
56
|
if (message.method === undefined) {
|
|
49
57
|
return false
|
package/src/mappers/huobi.ts
CHANGED
|
@@ -1,14 +1,51 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, CircularBuffer, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Exchange, FilterForExchange, Liquidation, OptionSummary, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers, mapper } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://huobiapi.github.io/docs/spot/v1/en/#websocket-market-data
|
|
6
7
|
// https://github.com/huobiapi/API_Docs_en/wiki/WS_api_reference_en
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const HUOBI_MBP_BOOK_CHANGE_SWITCH_DATE = new Date('2020-07-03T00:00:00.000Z')
|
|
10
|
+
|
|
11
|
+
export const huobiMappers = exchangeMappers({
|
|
12
|
+
huobi: {
|
|
13
|
+
trades: () => new HuobiTradesMapper('huobi'),
|
|
14
|
+
bookChanges: mapper([
|
|
15
|
+
{ until: HUOBI_MBP_BOOK_CHANGE_SWITCH_DATE, use: () => new HuobiBookChangeMapper('huobi') },
|
|
16
|
+
{ use: () => new HuobiMBPBookChangeMapper('huobi') }
|
|
17
|
+
]),
|
|
18
|
+
bookTickers: () => new HuobiBookTickerMapper('huobi')
|
|
19
|
+
},
|
|
20
|
+
'huobi-dm': {
|
|
21
|
+
trades: () => new HuobiTradesMapper('huobi-dm'),
|
|
22
|
+
bookChanges: () => new HuobiBookChangeMapper('huobi-dm'),
|
|
23
|
+
derivativeTickers: () => new HuobiDerivativeTickerMapper('huobi-dm'),
|
|
24
|
+
liquidations: () => new HuobiLiquidationsMapper('huobi-dm'),
|
|
25
|
+
bookTickers: () => new HuobiBookTickerMapper('huobi-dm')
|
|
26
|
+
},
|
|
27
|
+
'huobi-dm-swap': {
|
|
28
|
+
trades: () => new HuobiTradesMapper('huobi-dm-swap'),
|
|
29
|
+
bookChanges: () => new HuobiBookChangeMapper('huobi-dm-swap'),
|
|
30
|
+
derivativeTickers: () => new HuobiDerivativeTickerMapper('huobi-dm-swap'),
|
|
31
|
+
liquidations: () => new HuobiLiquidationsMapper('huobi-dm-swap'),
|
|
32
|
+
bookTickers: () => new HuobiBookTickerMapper('huobi-dm-swap')
|
|
33
|
+
},
|
|
34
|
+
'huobi-dm-linear-swap': {
|
|
35
|
+
trades: () => new HuobiTradesMapper('huobi-dm-linear-swap'),
|
|
36
|
+
bookChanges: () => new HuobiBookChangeMapper('huobi-dm-linear-swap'),
|
|
37
|
+
derivativeTickers: () => new HuobiDerivativeTickerMapper('huobi-dm-linear-swap'),
|
|
38
|
+
liquidations: () => new HuobiLiquidationsMapper('huobi-dm-linear-swap'),
|
|
39
|
+
bookTickers: () => new HuobiBookTickerMapper('huobi-dm-linear-swap')
|
|
40
|
+
},
|
|
41
|
+
'huobi-dm-options': {
|
|
42
|
+
trades: () => new HuobiTradesMapper('huobi-dm-options'),
|
|
43
|
+
bookChanges: () => new HuobiBookChangeMapper('huobi-dm-options'),
|
|
44
|
+
optionsSummary: () => new HuobiOptionsSummaryMapper()
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
class HuobiTradesMapper implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options', Trade> {
|
|
12
49
|
constructor(private readonly _exchange: Exchange) {}
|
|
13
50
|
canHandle(message: HuobiDataMessage) {
|
|
14
51
|
if (message.ch === undefined) {
|
|
@@ -47,7 +84,7 @@ export class HuobiTradesMapper implements Mapper<
|
|
|
47
84
|
}
|
|
48
85
|
}
|
|
49
86
|
|
|
50
|
-
|
|
87
|
+
class HuobiBookChangeMapper implements Mapper<
|
|
51
88
|
'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options',
|
|
52
89
|
BookChange
|
|
53
90
|
> {
|
|
@@ -103,7 +140,7 @@ function isSnapshot(message: HuobiMBPDataMessage | HuobiMBPSnapshot): message is
|
|
|
103
140
|
return 'rep' in message
|
|
104
141
|
}
|
|
105
142
|
|
|
106
|
-
|
|
143
|
+
class HuobiMBPBookChangeMapper implements Mapper<'huobi', BookChange> {
|
|
107
144
|
protected readonly symbolToMBPInfoMapping: {
|
|
108
145
|
[key: string]: MBPInfo
|
|
109
146
|
} = {}
|
|
@@ -243,7 +280,7 @@ function normalizeSymbols(symbols?: string[]) {
|
|
|
243
280
|
return
|
|
244
281
|
}
|
|
245
282
|
|
|
246
|
-
|
|
283
|
+
class HuobiDerivativeTickerMapper implements Mapper<'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', DerivativeTicker> {
|
|
247
284
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
248
285
|
|
|
249
286
|
constructor(private readonly _exchange: Exchange) {}
|
|
@@ -324,7 +361,7 @@ export class HuobiDerivativeTickerMapper implements Mapper<'huobi-dm' | 'huobi-d
|
|
|
324
361
|
}
|
|
325
362
|
}
|
|
326
363
|
|
|
327
|
-
|
|
364
|
+
class HuobiLiquidationsMapper implements Mapper<'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', Liquidation> {
|
|
328
365
|
private readonly _contractCodeToSymbolMap: Map<string, string> = new Map()
|
|
329
366
|
private readonly _contractTypesSuffixes = { this_week: 'CW', next_week: 'NW', quarter: 'CQ', next_quarter: 'NQ' }
|
|
330
367
|
|
|
@@ -412,7 +449,7 @@ export class HuobiLiquidationsMapper implements Mapper<'huobi-dm' | 'huobi-dm-sw
|
|
|
412
449
|
}
|
|
413
450
|
}
|
|
414
451
|
|
|
415
|
-
|
|
452
|
+
class HuobiOptionsSummaryMapper implements Mapper<'huobi-dm-options', OptionSummary> {
|
|
416
453
|
private readonly _indexPrices = new Map<string, number>()
|
|
417
454
|
private readonly _openInterest = new Map<string, number>()
|
|
418
455
|
|
|
@@ -522,7 +559,7 @@ export class HuobiOptionsSummaryMapper implements Mapper<'huobi-dm-options', Opt
|
|
|
522
559
|
}
|
|
523
560
|
}
|
|
524
561
|
|
|
525
|
-
|
|
562
|
+
class HuobiBookTickerMapper implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', BookTicker> {
|
|
526
563
|
constructor(private readonly _exchange: Exchange) {}
|
|
527
564
|
|
|
528
565
|
canHandle(message: HuobiDataMessage) {
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { BookChange, BookTicker, DerivativeTicker, Trade } from '../types.ts'
|
|
2
2
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
3
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
|
+
|
|
5
|
+
export const hyperliquidMappers = exchangeMappers({
|
|
6
|
+
hyperliquid: {
|
|
7
|
+
trades: () => new HyperliquidTradesMapper(),
|
|
8
|
+
bookChanges: () => new HyperliquidBookChangeMapper(),
|
|
9
|
+
derivativeTickers: () => new HyperliquidDerivativeTickerMapper(),
|
|
10
|
+
bookTickers: () => new HyperliquidBookTickerMapper()
|
|
11
|
+
}
|
|
12
|
+
})
|
|
3
13
|
|
|
4
14
|
const KILO_SYMBOLS = ['kPEPE', 'kSHIB', 'kBONK', 'kFLOKI', 'kLUNC', 'kDOGS', 'kNEIRO']
|
|
5
15
|
|
|
@@ -22,7 +32,7 @@ function getSymbols(symbols?: string[]) {
|
|
|
22
32
|
}
|
|
23
33
|
return
|
|
24
34
|
}
|
|
25
|
-
|
|
35
|
+
class HyperliquidTradesMapper implements Mapper<'hyperliquid', Trade> {
|
|
26
36
|
private readonly _seenSymbols = new Set<string>()
|
|
27
37
|
|
|
28
38
|
canHandle(message: HyperliquidTradeMessage) {
|
|
@@ -67,7 +77,7 @@ function mapHyperliquidLevel(level: HyperliquidWsLevel) {
|
|
|
67
77
|
amount: Number(level.sz)
|
|
68
78
|
}
|
|
69
79
|
}
|
|
70
|
-
|
|
80
|
+
class HyperliquidBookChangeMapper implements Mapper<'hyperliquid', BookChange> {
|
|
71
81
|
canHandle(message: HyperliquidWsBookMessage) {
|
|
72
82
|
return message.channel === 'l2Book'
|
|
73
83
|
}
|
|
@@ -97,7 +107,7 @@ export class HyperliquidBookChangeMapper implements Mapper<'hyperliquid', BookCh
|
|
|
97
107
|
}
|
|
98
108
|
}
|
|
99
109
|
|
|
100
|
-
|
|
110
|
+
class HyperliquidBookTickerMapper implements Mapper<'hyperliquid', BookTicker> {
|
|
101
111
|
canHandle(message: HyperliquidBboMessage) {
|
|
102
112
|
return message.channel === 'bbo'
|
|
103
113
|
}
|
|
@@ -134,7 +144,7 @@ export class HyperliquidBookTickerMapper implements Mapper<'hyperliquid', BookTi
|
|
|
134
144
|
}
|
|
135
145
|
}
|
|
136
146
|
|
|
137
|
-
|
|
147
|
+
class HyperliquidDerivativeTickerMapper implements Mapper<'hyperliquid', DerivativeTicker> {
|
|
138
148
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
139
149
|
|
|
140
150
|
canHandle(message: HyperliquidContextMessage) {
|