tardis-dev 16.5.1 → 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 +15 -5
- 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 +16 -5
- 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/ascendex.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
export const ascendexMappers = exchangeMappers({
|
|
7
|
+
ascendex: {
|
|
8
|
+
trades: () => new AscendexTradesMapper(),
|
|
9
|
+
bookChanges: () => new AscendexBookChangeMapper(),
|
|
10
|
+
derivativeTickers: () => new AscendexDerivativeTickerMapper(),
|
|
11
|
+
bookTickers: () => new AscendexBookTickerMapper()
|
|
12
|
+
}
|
|
13
|
+
})
|
|
4
14
|
|
|
5
|
-
|
|
15
|
+
class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
|
|
6
16
|
canHandle(message: AscendexTrade) {
|
|
7
17
|
return message.m === 'trades'
|
|
8
18
|
}
|
|
@@ -34,7 +44,7 @@ export class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
|
|
|
34
44
|
}
|
|
35
45
|
}
|
|
36
46
|
|
|
37
|
-
|
|
47
|
+
class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange> {
|
|
38
48
|
canHandle(message: AscendexDepthRealTime | AscendexDepthRealTimeSnapshot) {
|
|
39
49
|
return message.m === 'depth-realtime' || message.m === 'depth-snapshot-realtime'
|
|
40
50
|
}
|
|
@@ -77,7 +87,7 @@ export class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange>
|
|
|
77
87
|
}
|
|
78
88
|
}
|
|
79
89
|
|
|
80
|
-
|
|
90
|
+
class AscendexDerivativeTickerMapper implements Mapper<'ascendex', DerivativeTicker> {
|
|
81
91
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
82
92
|
|
|
83
93
|
canHandle(message: AscendexFuturesData | AscendexTrade) {
|
|
@@ -122,7 +132,7 @@ export class AscendexDerivativeTickerMapper implements Mapper<'ascendex', Deriva
|
|
|
122
132
|
}
|
|
123
133
|
}
|
|
124
134
|
|
|
125
|
-
|
|
135
|
+
class AscendexBookTickerMapper implements Mapper<'ascendex', BookTicker> {
|
|
126
136
|
canHandle(message: AscendexTicker) {
|
|
127
137
|
return message.m === 'bbo'
|
|
128
138
|
}
|
package/src/mappers/binance.ts
CHANGED
|
@@ -2,13 +2,59 @@ import { debug } from '../debug.ts'
|
|
|
2
2
|
import { CircularBuffer, fromMicroSecondsToDate, lowerCaseSymbols } from '../handy.ts'
|
|
3
3
|
import { BookChange, BookTicker, DerivativeTicker, Exchange, FilterForExchange, Liquidation, Trade } from '../types.ts'
|
|
4
4
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
5
|
+
import { exchangeMappers, isRealTime } from './registry.ts'
|
|
5
6
|
|
|
6
7
|
// https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md
|
|
7
8
|
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
export const binanceMappers = exchangeMappers({
|
|
10
|
+
binance: {
|
|
11
|
+
trades: () => new BinanceTradesMapper('binance'),
|
|
12
|
+
bookChanges: (localTimestamp) =>
|
|
13
|
+
new BinanceBookChangeMapper('binance', { ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp) }),
|
|
14
|
+
bookTickers: () => new BinanceBookTickerMapper('binance')
|
|
15
|
+
},
|
|
16
|
+
'binance-us': {
|
|
17
|
+
trades: () => new BinanceTradesMapper('binance-us'),
|
|
18
|
+
bookChanges: (localTimestamp) =>
|
|
19
|
+
new BinanceBookChangeMapper('binance-us', { ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp) }),
|
|
20
|
+
bookTickers: () => new BinanceBookTickerMapper('binance-us')
|
|
21
|
+
},
|
|
22
|
+
'binance-jersey': {
|
|
23
|
+
trades: () => new BinanceTradesMapper('binance-jersey'),
|
|
24
|
+
bookChanges: (localTimestamp) =>
|
|
25
|
+
new BinanceBookChangeMapper('binance-jersey', { ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp) })
|
|
26
|
+
},
|
|
27
|
+
'binance-futures': {
|
|
28
|
+
trades: () => new BinanceTradesMapper('binance-futures'),
|
|
29
|
+
bookChanges: (localTimestamp) =>
|
|
30
|
+
new BinanceFuturesBookChangeMapper('binance-futures', {
|
|
31
|
+
ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp)
|
|
32
|
+
}),
|
|
33
|
+
derivativeTickers: () => new BinanceFuturesDerivativeTickerMapper('binance-futures'),
|
|
34
|
+
liquidations: () => new BinanceLiquidationsMapper('binance-futures'),
|
|
35
|
+
bookTickers: () => new BinanceBookTickerMapper('binance-futures')
|
|
36
|
+
},
|
|
37
|
+
'binance-delivery': {
|
|
38
|
+
trades: () => new BinanceTradesMapper('binance-delivery'),
|
|
39
|
+
bookChanges: (localTimestamp) =>
|
|
40
|
+
new BinanceFuturesBookChangeMapper('binance-delivery', {
|
|
41
|
+
ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp)
|
|
42
|
+
}),
|
|
43
|
+
derivativeTickers: () => new BinanceFuturesDerivativeTickerMapper('binance-delivery'),
|
|
44
|
+
liquidations: () => new BinanceLiquidationsMapper('binance-delivery'),
|
|
45
|
+
bookTickers: () => new BinanceBookTickerMapper('binance-delivery')
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
function shouldIgnoreBookSnapshotOverlap(date?: Date) {
|
|
50
|
+
if (process.env.IGNORE_BOOK_SNAPSHOT_OVERLAP_ERROR) {
|
|
51
|
+
return true
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return isRealTime(date) === false
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
class BinanceTradesMapper implements Mapper<'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery', Trade> {
|
|
12
58
|
constructor(private readonly _exchange: Exchange) {}
|
|
13
59
|
|
|
14
60
|
canHandle(message: BinanceResponse<any>) {
|
|
@@ -54,7 +100,7 @@ export class BinanceTradesMapper implements Mapper<
|
|
|
54
100
|
}
|
|
55
101
|
}
|
|
56
102
|
|
|
57
|
-
|
|
103
|
+
class BinanceBookChangeMapper implements Mapper<
|
|
58
104
|
'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery',
|
|
59
105
|
BookChange
|
|
60
106
|
> {
|
|
@@ -64,8 +110,12 @@ export class BinanceBookChangeMapper implements Mapper<
|
|
|
64
110
|
|
|
65
111
|
constructor(
|
|
66
112
|
protected readonly exchange: Exchange,
|
|
67
|
-
|
|
68
|
-
) {
|
|
113
|
+
{ ignoreBookSnapshotOverlapError }: { ignoreBookSnapshotOverlapError: boolean }
|
|
114
|
+
) {
|
|
115
|
+
this.ignoreBookSnapshotOverlapError = ignoreBookSnapshotOverlapError
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
protected readonly ignoreBookSnapshotOverlapError: boolean
|
|
69
119
|
|
|
70
120
|
canHandle(message: BinanceResponse<any>) {
|
|
71
121
|
if (message.stream === undefined) {
|
|
@@ -218,17 +268,7 @@ export class BinanceBookChangeMapper implements Mapper<
|
|
|
218
268
|
}
|
|
219
269
|
}
|
|
220
270
|
|
|
221
|
-
|
|
222
|
-
extends BinanceBookChangeMapper
|
|
223
|
-
implements Mapper<'binance-futures' | 'binance-delivery', BookChange>
|
|
224
|
-
{
|
|
225
|
-
constructor(
|
|
226
|
-
protected readonly exchange: Exchange,
|
|
227
|
-
protected readonly ignoreBookSnapshotOverlapError: boolean
|
|
228
|
-
) {
|
|
229
|
-
super(exchange, ignoreBookSnapshotOverlapError)
|
|
230
|
-
}
|
|
231
|
-
|
|
271
|
+
class BinanceFuturesBookChangeMapper extends BinanceBookChangeMapper implements Mapper<'binance-futures' | 'binance-delivery', BookChange> {
|
|
232
272
|
protected mapBookDepthUpdate(binanceDepthUpdateData: BinanceFuturesDepthData, localTimestamp: Date): BookChange | undefined {
|
|
233
273
|
// we can safely assume here that depthContext and lastUpdateId aren't null here as this is method only works
|
|
234
274
|
// when we've already processed the snapshot
|
|
@@ -273,7 +313,7 @@ export class BinanceFuturesBookChangeMapper
|
|
|
273
313
|
}
|
|
274
314
|
}
|
|
275
315
|
|
|
276
|
-
|
|
316
|
+
class BinanceFuturesDerivativeTickerMapper implements Mapper<'binance-futures' | 'binance-delivery', DerivativeTicker> {
|
|
277
317
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
278
318
|
private readonly _indexPrices = new Map<string, number>()
|
|
279
319
|
|
|
@@ -369,7 +409,7 @@ export class BinanceFuturesDerivativeTickerMapper implements Mapper<'binance-fut
|
|
|
369
409
|
}
|
|
370
410
|
}
|
|
371
411
|
|
|
372
|
-
|
|
412
|
+
class BinanceLiquidationsMapper implements Mapper<'binance-futures' | 'binance-delivery', Liquidation> {
|
|
373
413
|
constructor(private readonly _exchange: Exchange) {}
|
|
374
414
|
|
|
375
415
|
canHandle(message: BinanceResponse<any>) {
|
|
@@ -414,7 +454,7 @@ export class BinanceLiquidationsMapper implements Mapper<'binance-futures' | 'bi
|
|
|
414
454
|
}
|
|
415
455
|
}
|
|
416
456
|
|
|
417
|
-
|
|
457
|
+
class BinanceBookTickerMapper implements Mapper<'binance-futures' | 'binance-delivery' | 'binance', BookTicker> {
|
|
418
458
|
constructor(private readonly _exchange: Exchange) {}
|
|
419
459
|
|
|
420
460
|
canHandle(message: BinanceResponse<any>) {
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://docs.binance.org/api-reference/dex-api/ws-streams.html
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const binanceDexMappers = exchangeMappers({
|
|
9
|
+
'binance-dex': {
|
|
10
|
+
trades: () => binanceDexTradesMapper,
|
|
11
|
+
bookChanges: () => binanceDexBookChangeMapper,
|
|
12
|
+
bookTickers: () => binanceDexBookTickerMapper
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const binanceDexTradesMapper: Mapper<'binance-dex', Trade> = {
|
|
8
17
|
canHandle(message: BinanceDexResponse<any>) {
|
|
9
18
|
return message.stream === 'trades'
|
|
10
19
|
},
|
|
@@ -43,7 +52,7 @@ const mapBookLevel = (level: BinanceDexBookLevel) => {
|
|
|
43
52
|
return { price, amount }
|
|
44
53
|
}
|
|
45
54
|
|
|
46
|
-
|
|
55
|
+
const binanceDexBookChangeMapper: Mapper<'binance-dex', BookChange> = {
|
|
47
56
|
canHandle(message: BinanceDexResponse<any>) {
|
|
48
57
|
return message.stream === 'marketDiff' || message.stream === 'depthSnapshot'
|
|
49
58
|
},
|
|
@@ -94,7 +103,7 @@ export const binanceDexBookChangeMapper: Mapper<'binance-dex', BookChange> = {
|
|
|
94
103
|
}
|
|
95
104
|
}
|
|
96
105
|
|
|
97
|
-
|
|
106
|
+
const binanceDexBookTickerMapper: Mapper<'binance-dex', BookTicker> = {
|
|
98
107
|
canHandle(message: BinanceDexResponse<any>) {
|
|
99
108
|
return message.stream === 'ticker'
|
|
100
109
|
},
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, lowerCaseSymbols, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, OptionSummary, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers, mapper } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
const BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE = new Date('2025-12-17T00:00:00.000Z')
|
|
4
7
|
|
|
5
8
|
// https://binance-docs.github.io/apidocs/voptions/en/#websocket-market-streams
|
|
6
9
|
|
|
7
|
-
export
|
|
10
|
+
export const binanceEuropeanOptionsMappers = exchangeMappers({
|
|
11
|
+
'binance-european-options': {
|
|
12
|
+
trades: mapper([
|
|
13
|
+
{ until: BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE, use: () => new BinanceEuropeanOptionsTradesMapper() },
|
|
14
|
+
{ use: () => new BinanceEuropeanOptionsTradesMapperV2() }
|
|
15
|
+
]),
|
|
16
|
+
bookChanges: mapper([
|
|
17
|
+
{ until: BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE, use: () => new BinanceEuropeanOptionsBookChangeMapper() },
|
|
18
|
+
{ use: () => new BinanceEuropeanOptionsBookChangeMapperV2() }
|
|
19
|
+
]),
|
|
20
|
+
optionsSummary: mapper([
|
|
21
|
+
{ until: BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE, use: () => new BinanceEuropeanOptionSummaryMapper() },
|
|
22
|
+
{ use: () => new BinanceEuropeanOptionSummaryMapperV2() }
|
|
23
|
+
]),
|
|
24
|
+
bookTickers: () => new BinanceEuropeanOptionsBookTickerMapper()
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
class BinanceEuropeanOptionsTradesMapper implements Mapper<'binance-european-options', Trade> {
|
|
8
29
|
canHandle(message: BinanceResponse<any>) {
|
|
9
30
|
if (message.stream === undefined) {
|
|
10
31
|
return false
|
|
@@ -41,7 +62,7 @@ export class BinanceEuropeanOptionsTradesMapper implements Mapper<'binance-europ
|
|
|
41
62
|
}
|
|
42
63
|
}
|
|
43
64
|
|
|
44
|
-
|
|
65
|
+
class BinanceEuropeanOptionsTradesMapperV2 implements Mapper<'binance-european-options', Trade> {
|
|
45
66
|
canHandle(message: BinanceResponse<any>) {
|
|
46
67
|
if (message.stream === undefined) {
|
|
47
68
|
return false
|
|
@@ -78,7 +99,7 @@ export class BinanceEuropeanOptionsTradesMapperV2 implements Mapper<'binance-eur
|
|
|
78
99
|
}
|
|
79
100
|
}
|
|
80
101
|
|
|
81
|
-
|
|
102
|
+
class BinanceEuropeanOptionsBookChangeMapper implements Mapper<'binance-european-options', BookChange> {
|
|
82
103
|
canHandle(message: BinanceResponse<any>) {
|
|
83
104
|
if (message.stream === undefined) {
|
|
84
105
|
return false
|
|
@@ -120,7 +141,7 @@ export class BinanceEuropeanOptionsBookChangeMapper implements Mapper<'binance-e
|
|
|
120
141
|
}
|
|
121
142
|
}
|
|
122
143
|
|
|
123
|
-
|
|
144
|
+
class BinanceEuropeanOptionsBookChangeMapperV2 implements Mapper<'binance-european-options', BookChange> {
|
|
124
145
|
canHandle(message: BinanceResponse<any>) {
|
|
125
146
|
if (message.stream === undefined) {
|
|
126
147
|
return false
|
|
@@ -162,7 +183,7 @@ export class BinanceEuropeanOptionsBookChangeMapperV2 implements Mapper<'binance
|
|
|
162
183
|
}
|
|
163
184
|
}
|
|
164
185
|
|
|
165
|
-
|
|
186
|
+
class BinanceEuropeanOptionsBookTickerMapper implements Mapper<'binance-european-options', BookTicker> {
|
|
166
187
|
canHandle(message: BinanceResponse<any>) {
|
|
167
188
|
if (message.stream === undefined) {
|
|
168
189
|
return false
|
|
@@ -204,7 +225,7 @@ export class BinanceEuropeanOptionsBookTickerMapper implements Mapper<'binance-e
|
|
|
204
225
|
}
|
|
205
226
|
}
|
|
206
227
|
|
|
207
|
-
|
|
228
|
+
class BinanceEuropeanOptionSummaryMapper implements Mapper<'binance-european-options', OptionSummary> {
|
|
208
229
|
private readonly _indexPrices = new Map<string, number>()
|
|
209
230
|
private readonly _openInterests = new Map<string, number>()
|
|
210
231
|
|
|
@@ -330,7 +351,7 @@ export class BinanceEuropeanOptionSummaryMapper implements Mapper<'binance-europ
|
|
|
330
351
|
}
|
|
331
352
|
}
|
|
332
353
|
|
|
333
|
-
|
|
354
|
+
class BinanceEuropeanOptionSummaryMapperV2 implements Mapper<'binance-european-options', OptionSummary> {
|
|
334
355
|
private readonly _lastPrices = new Map<string, number>()
|
|
335
356
|
private readonly _openInterests = new Map<string, number>()
|
|
336
357
|
|
package/src/mappers/bitfinex.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Exchange, FilterForExchange, 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.bitfinex.com/v2/docs/ws-general
|
|
6
7
|
|
|
7
|
-
export
|
|
8
|
+
export const bitfinexMappers = exchangeMappers({
|
|
9
|
+
bitfinex: {
|
|
10
|
+
trades: () => new BitfinexTradesMapper('bitfinex'),
|
|
11
|
+
bookChanges: () => new BitfinexBookChangeMapper('bitfinex'),
|
|
12
|
+
bookTickers: () => new BitfinexBookTickerMapper('bitfinex')
|
|
13
|
+
},
|
|
14
|
+
'bitfinex-derivatives': {
|
|
15
|
+
trades: () => new BitfinexTradesMapper('bitfinex-derivatives'),
|
|
16
|
+
bookChanges: () => new BitfinexBookChangeMapper('bitfinex-derivatives'),
|
|
17
|
+
derivativeTickers: () => new BitfinexDerivativeTickerMapper(),
|
|
18
|
+
liquidations: () => new BitfinexLiquidationsMapper('bitfinex-derivatives'),
|
|
19
|
+
bookTickers: () => new BitfinexBookTickerMapper('bitfinex-derivatives')
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
class BitfinexTradesMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', Trade> {
|
|
8
24
|
private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
|
|
9
25
|
|
|
10
26
|
constructor(private readonly _exchange: Exchange) {}
|
|
@@ -80,7 +96,7 @@ export class BitfinexTradesMapper implements Mapper<'bitfinex' | 'bitfinex-deriv
|
|
|
80
96
|
}
|
|
81
97
|
}
|
|
82
98
|
|
|
83
|
-
|
|
99
|
+
class BitfinexBookChangeMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', BookChange> {
|
|
84
100
|
private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
|
|
85
101
|
|
|
86
102
|
constructor(private readonly _exchange: Exchange) {}
|
|
@@ -162,7 +178,7 @@ export class BitfinexBookChangeMapper implements Mapper<'bitfinex' | 'bitfinex-d
|
|
|
162
178
|
}
|
|
163
179
|
}
|
|
164
180
|
|
|
165
|
-
|
|
181
|
+
class BitfinexDerivativeTickerMapper implements Mapper<'bitfinex-derivatives', DerivativeTicker> {
|
|
166
182
|
private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
|
|
167
183
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
168
184
|
|
|
@@ -245,7 +261,7 @@ export class BitfinexDerivativeTickerMapper implements Mapper<'bitfinex-derivati
|
|
|
245
261
|
}
|
|
246
262
|
}
|
|
247
263
|
|
|
248
|
-
|
|
264
|
+
class BitfinexLiquidationsMapper implements Mapper<'bitfinex-derivatives', Liquidation> {
|
|
249
265
|
private _liquidationsChannelId: number | undefined = undefined
|
|
250
266
|
|
|
251
267
|
constructor(private readonly _exchange: Exchange) {}
|
|
@@ -322,7 +338,7 @@ export class BitfinexLiquidationsMapper implements Mapper<'bitfinex-derivatives'
|
|
|
322
338
|
}
|
|
323
339
|
}
|
|
324
340
|
|
|
325
|
-
|
|
341
|
+
class BitfinexBookTickerMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', BookTicker> {
|
|
326
342
|
private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
|
|
327
343
|
|
|
328
344
|
constructor(private readonly _exchange: Exchange) {}
|
package/src/mappers/bitflyer.ts
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { parseμs, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
|
-
export const
|
|
6
|
+
export const bitflyerMappers = exchangeMappers({
|
|
7
|
+
bitflyer: {
|
|
8
|
+
trades: () => bitflyerTradesMapper,
|
|
9
|
+
bookChanges: () => new BitflyerBookChangeMapper(),
|
|
10
|
+
bookTickers: () => bitflyerBookTickerMapper
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
const bitflyerTradesMapper: Mapper<'bitflyer', Trade> = {
|
|
6
15
|
canHandle(message: BitflyerExecutions | BitflyerBoard) {
|
|
7
16
|
return message.params.channel.startsWith('lightning_executions')
|
|
8
17
|
},
|
|
@@ -46,7 +55,7 @@ const mapBookLevel = ({ price, size }: BitflyerBookLevel) => {
|
|
|
46
55
|
return { price, amount: size }
|
|
47
56
|
}
|
|
48
57
|
|
|
49
|
-
|
|
58
|
+
class BitflyerBookChangeMapper implements Mapper<'bitflyer', BookChange> {
|
|
50
59
|
private readonly _snapshotsInfo: Map<string, boolean> = new Map()
|
|
51
60
|
|
|
52
61
|
canHandle(message: BitflyerExecutions | BitflyerBoard) {
|
|
@@ -95,7 +104,7 @@ export class BitflyerBookChangeMapper implements Mapper<'bitflyer', BookChange>
|
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
106
|
|
|
98
|
-
|
|
107
|
+
const bitflyerBookTickerMapper: Mapper<'bitflyer', BookTicker> = {
|
|
99
108
|
canHandle(message: BitflyerTicker) {
|
|
100
109
|
return message.params.channel.startsWith('lightning_ticker')
|
|
101
110
|
},
|
package/src/mappers/bitget.ts
CHANGED
|
@@ -1,8 +1,47 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, 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, mapper } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
const BITGET_V3_API_SWITCH_DATE = new Date('2026-04-28T00:00:00.000Z')
|
|
7
|
+
|
|
8
|
+
export const bitgetMappers = exchangeMappers({
|
|
9
|
+
bitget: {
|
|
10
|
+
trades: mapper([
|
|
11
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetTradesMapper('bitget') },
|
|
12
|
+
{ use: () => new BitgetV3TradesMapper('bitget') }
|
|
13
|
+
]),
|
|
14
|
+
bookChanges: mapper([
|
|
15
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookChangeMapper('bitget') },
|
|
16
|
+
{ use: () => new BitgetV3BookChangeMapper('bitget') }
|
|
17
|
+
]),
|
|
18
|
+
bookTickers: mapper([
|
|
19
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookTickerMapper('bitget') },
|
|
20
|
+
{ use: () => new BitgetV3BookTickerMapper('bitget') }
|
|
21
|
+
])
|
|
22
|
+
},
|
|
23
|
+
'bitget-futures': {
|
|
24
|
+
trades: mapper([
|
|
25
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetTradesMapper('bitget-futures') },
|
|
26
|
+
{ use: () => new BitgetV3TradesMapper('bitget-futures') }
|
|
27
|
+
]),
|
|
28
|
+
bookChanges: mapper([
|
|
29
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookChangeMapper('bitget-futures') },
|
|
30
|
+
{ use: () => new BitgetV3BookChangeMapper('bitget-futures') }
|
|
31
|
+
]),
|
|
32
|
+
derivativeTickers: mapper([
|
|
33
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetDerivativeTickerMapper() },
|
|
34
|
+
{ use: () => new BitgetV3DerivativeTickerMapper() }
|
|
35
|
+
]),
|
|
36
|
+
liquidations: () => new BitgetV3LiquidationsMapper(),
|
|
37
|
+
bookTickers: mapper([
|
|
38
|
+
{ until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookTickerMapper('bitget-futures') },
|
|
39
|
+
{ use: () => new BitgetV3BookTickerMapper('bitget-futures') }
|
|
40
|
+
])
|
|
41
|
+
}
|
|
42
|
+
})
|
|
4
43
|
|
|
5
|
-
|
|
44
|
+
class BitgetTradesMapper implements Mapper<'bitget' | 'bitget-futures', Trade> {
|
|
6
45
|
constructor(private readonly _exchange: Exchange) {}
|
|
7
46
|
|
|
8
47
|
canHandle(message: BitgetTradeMessage) {
|
|
@@ -43,7 +82,7 @@ function mapPriceLevel(level: [string, string]) {
|
|
|
43
82
|
amount: Number(level[1])
|
|
44
83
|
}
|
|
45
84
|
}
|
|
46
|
-
|
|
85
|
+
class BitgetBookChangeMapper implements Mapper<'bitget' | 'bitget-futures', BookChange> {
|
|
47
86
|
constructor(private readonly _exchange: Exchange) {}
|
|
48
87
|
|
|
49
88
|
canHandle(message: BitgetOrderbookMessage) {
|
|
@@ -77,7 +116,7 @@ export class BitgetBookChangeMapper implements Mapper<'bitget' | 'bitget-futures
|
|
|
77
116
|
}
|
|
78
117
|
}
|
|
79
118
|
|
|
80
|
-
|
|
119
|
+
class BitgetBookTickerMapper implements Mapper<'bitget' | 'bitget-futures', BookTicker> {
|
|
81
120
|
constructor(private readonly _exchange: Exchange) {}
|
|
82
121
|
|
|
83
122
|
canHandle(message: BitgetBBoMessage) {
|
|
@@ -116,7 +155,7 @@ export class BitgetBookTickerMapper implements Mapper<'bitget' | 'bitget-futures
|
|
|
116
155
|
}
|
|
117
156
|
}
|
|
118
157
|
|
|
119
|
-
|
|
158
|
+
class BitgetDerivativeTickerMapper implements Mapper<'bitget-futures', DerivativeTicker> {
|
|
120
159
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
121
160
|
|
|
122
161
|
canHandle(message: BitgetTickerMessage) {
|
|
@@ -155,7 +194,7 @@ export class BitgetDerivativeTickerMapper implements Mapper<'bitget-futures', De
|
|
|
155
194
|
}
|
|
156
195
|
}
|
|
157
196
|
|
|
158
|
-
|
|
197
|
+
class BitgetV3TradesMapper implements Mapper<'bitget' | 'bitget-futures', Trade> {
|
|
159
198
|
constructor(private readonly _exchange: Exchange) {}
|
|
160
199
|
|
|
161
200
|
canHandle(message: BitgetV3TradeMessage) {
|
|
@@ -190,7 +229,7 @@ export class BitgetV3TradesMapper implements Mapper<'bitget' | 'bitget-futures',
|
|
|
190
229
|
}
|
|
191
230
|
}
|
|
192
231
|
|
|
193
|
-
|
|
232
|
+
class BitgetV3BookChangeMapper implements Mapper<'bitget' | 'bitget-futures', BookChange> {
|
|
194
233
|
constructor(private readonly _exchange: Exchange) {}
|
|
195
234
|
|
|
196
235
|
canHandle(message: BitgetV3OrderbookMessage) {
|
|
@@ -224,7 +263,7 @@ export class BitgetV3BookChangeMapper implements Mapper<'bitget' | 'bitget-futur
|
|
|
224
263
|
}
|
|
225
264
|
}
|
|
226
265
|
|
|
227
|
-
|
|
266
|
+
class BitgetV3BookTickerMapper implements Mapper<'bitget' | 'bitget-futures', BookTicker> {
|
|
228
267
|
constructor(private readonly _exchange: Exchange) {}
|
|
229
268
|
|
|
230
269
|
canHandle(message: BitgetV3BBoMessage) {
|
|
@@ -259,7 +298,7 @@ export class BitgetV3BookTickerMapper implements Mapper<'bitget' | 'bitget-futur
|
|
|
259
298
|
}
|
|
260
299
|
}
|
|
261
300
|
|
|
262
|
-
|
|
301
|
+
class BitgetV3DerivativeTickerMapper implements Mapper<'bitget-futures', DerivativeTicker> {
|
|
263
302
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
264
303
|
|
|
265
304
|
canHandle(message: BitgetV3TickerMessage) {
|
|
@@ -299,7 +338,7 @@ export class BitgetV3DerivativeTickerMapper implements Mapper<'bitget-futures',
|
|
|
299
338
|
}
|
|
300
339
|
}
|
|
301
340
|
|
|
302
|
-
|
|
341
|
+
class BitgetV3LiquidationsMapper implements Mapper<'bitget-futures', Liquidation> {
|
|
303
342
|
canHandle(message: BitgetV3LiquidationMessage) {
|
|
304
343
|
return message.arg.topic === 'liquidation' && message.action === 'update'
|
|
305
344
|
}
|
package/src/mappers/bitmex.ts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookPriceLevel, BookTicker, DerivativeTicker, FilterForExchange, Liquidation, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://www.bitmex.com/app/wsAPI
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const bitmexMappers = exchangeMappers({
|
|
9
|
+
bitmex: {
|
|
10
|
+
trades: () => bitmexTradesMapper,
|
|
11
|
+
bookChanges: () => new BitmexBookChangeMapper(),
|
|
12
|
+
derivativeTickers: () => new BitmexDerivativeTickerMapper(),
|
|
13
|
+
liquidations: () => bitmexLiquidationsMapper,
|
|
14
|
+
bookTickers: () => bitmexBookTickerMapper
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const bitmexTradesMapper: Mapper<'bitmex', Trade> = {
|
|
8
19
|
canHandle(message: BitmexDataMessage) {
|
|
9
20
|
return message.table === 'trade' && message.action === 'insert'
|
|
10
21
|
},
|
|
@@ -39,7 +50,7 @@ export const bitmexTradesMapper: Mapper<'bitmex', Trade> = {
|
|
|
39
50
|
}
|
|
40
51
|
}
|
|
41
52
|
|
|
42
|
-
|
|
53
|
+
class BitmexBookChangeMapper implements Mapper<'bitmex', BookChange> {
|
|
43
54
|
private readonly _idToPriceLevelMap: Map<number, number> = new Map()
|
|
44
55
|
|
|
45
56
|
canHandle(message: BitmexDataMessage) {
|
|
@@ -158,7 +169,7 @@ export class BitmexBookChangeMapper implements Mapper<'bitmex', BookChange> {
|
|
|
158
169
|
}
|
|
159
170
|
}
|
|
160
171
|
|
|
161
|
-
|
|
172
|
+
class BitmexDerivativeTickerMapper implements Mapper<'bitmex', DerivativeTicker> {
|
|
162
173
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
163
174
|
|
|
164
175
|
canHandle(message: BitmexDataMessage) {
|
|
@@ -210,7 +221,7 @@ export class BitmexDerivativeTickerMapper implements Mapper<'bitmex', Derivative
|
|
|
210
221
|
}
|
|
211
222
|
}
|
|
212
223
|
|
|
213
|
-
|
|
224
|
+
const bitmexLiquidationsMapper: Mapper<'bitmex', Liquidation> = {
|
|
214
225
|
canHandle(message: BitmexDataMessage) {
|
|
215
226
|
return message.table === 'liquidation' && message.action === 'insert'
|
|
216
227
|
},
|
|
@@ -245,7 +256,7 @@ export const bitmexLiquidationsMapper: Mapper<'bitmex', Liquidation> = {
|
|
|
245
256
|
}
|
|
246
257
|
}
|
|
247
258
|
|
|
248
|
-
|
|
259
|
+
const bitmexBookTickerMapper: Mapper<'bitmex', BookTicker> = {
|
|
249
260
|
canHandle(message: BitmexDataMessage) {
|
|
250
261
|
return message.table === 'quote' && message.action === 'insert'
|
|
251
262
|
},
|
package/src/mappers/bitnomial.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { parseμs, 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
|
-
export const
|
|
6
|
+
export const bitnomialMappers = exchangeMappers({
|
|
7
|
+
bitnomial: {
|
|
8
|
+
trades: () => bitnomialTradesMapper,
|
|
9
|
+
bookChanges: () => new BitnomialBookChangMapper()
|
|
10
|
+
}
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const bitnomialTradesMapper: Mapper<'bitnomial', Trade> = {
|
|
6
14
|
canHandle(message: BitnomialTrade) {
|
|
7
15
|
return message.type === 'trade'
|
|
8
16
|
},
|
|
@@ -40,7 +48,7 @@ const mapBookLevel = (level: BookLevel) => {
|
|
|
40
48
|
return { price: level[0], amount: level[1] }
|
|
41
49
|
}
|
|
42
50
|
|
|
43
|
-
|
|
51
|
+
class BitnomialBookChangMapper implements Mapper<'bitnomial', BookChange> {
|
|
44
52
|
canHandle(message: BitnomialBookMessage) {
|
|
45
53
|
return message.type === 'book' || message.type === 'level'
|
|
46
54
|
}
|
package/src/mappers/bitstamp.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { lowerCaseSymbols } 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://www.bitstamp.net/websocket/v2/
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const bitstampMappers = exchangeMappers({
|
|
9
|
+
bitstamp: {
|
|
10
|
+
trades: () => bitstampTradesMapper,
|
|
11
|
+
bookChanges: () => new BitstampBookChangeMapper()
|
|
12
|
+
}
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
const bitstampTradesMapper: Mapper<'bitstamp', Trade> = {
|
|
8
16
|
canHandle(message: BitstampTrade | BitstampDiffOrderBook | BitstampDiffOrderBookSnapshot) {
|
|
9
17
|
if (message.data === undefined) {
|
|
10
18
|
return false
|
|
@@ -45,7 +53,7 @@ export const bitstampTradesMapper: Mapper<'bitstamp', Trade> = {
|
|
|
45
53
|
}
|
|
46
54
|
}
|
|
47
55
|
|
|
48
|
-
|
|
56
|
+
class BitstampBookChangeMapper implements Mapper<'bitstamp', BookChange> {
|
|
49
57
|
private readonly _symbolToDepthInfoMapping: { [key: string]: LocalDepthInfo } = {}
|
|
50
58
|
|
|
51
59
|
canHandle(message: BitstampTrade | BitstampDiffOrderBook | BitstampDiffOrderBookSnapshot) {
|
|
@@ -1,8 +1,16 @@
|
|
|
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
|
-
export
|
|
6
|
+
export const blockchainComMappers = exchangeMappers({
|
|
7
|
+
'blockchain-com': {
|
|
8
|
+
trades: () => new BlockchainComTradesMapper(),
|
|
9
|
+
bookChanges: () => new BlockchainComBookChangeMapper()
|
|
10
|
+
}
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
class BlockchainComTradesMapper implements Mapper<'blockchain-com', Trade> {
|
|
6
14
|
canHandle(message: BlockchainComTradeMessage) {
|
|
7
15
|
return message.channel === 'trades' && message.event === 'updated'
|
|
8
16
|
}
|
|
@@ -32,7 +40,7 @@ export class BlockchainComTradesMapper implements Mapper<'blockchain-com', Trade
|
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
|
|
35
|
-
|
|
43
|
+
class BlockchainComBookChangeMapper implements Mapper<'blockchain-com', BookChange> {
|
|
36
44
|
canHandle(message: BlockchainComL2Message) {
|
|
37
45
|
return message.channel == 'l2' && (message.event === 'snapshot' || message.event === 'updated')
|
|
38
46
|
}
|