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/bullish.ts
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, asNumberOrUndefined } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookPriceLevel, BookTicker, DerivativeTicker, OptionSummary, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
export const bullishMappers = exchangeMappers({
|
|
7
|
+
bullish: {
|
|
8
|
+
trades: () => new BullishTradesMapper(),
|
|
9
|
+
bookChanges: () => new BullishBookChangeMapper(),
|
|
10
|
+
derivativeTickers: () => new BullishDerivativeTickerMapper(),
|
|
11
|
+
optionsSummary: () => new BullishOptionSummaryMapper(),
|
|
12
|
+
bookTickers: () => new BullishBookTickerMapper()
|
|
13
|
+
}
|
|
14
|
+
})
|
|
4
15
|
|
|
5
|
-
|
|
16
|
+
class BullishTradesMapper implements Mapper<'bullish', Trade> {
|
|
6
17
|
canHandle(message: BullishMessage): message is BullishAnonymousTradeUpdateMessage {
|
|
7
18
|
return message.dataType === 'V1TAAnonymousTradeUpdate' && message.type === 'update'
|
|
8
19
|
}
|
|
@@ -43,7 +54,7 @@ export class BullishTradesMapper implements Mapper<'bullish', Trade> {
|
|
|
43
54
|
}
|
|
44
55
|
}
|
|
45
56
|
|
|
46
|
-
|
|
57
|
+
class BullishBookChangeMapper implements Mapper<'bullish', BookChange> {
|
|
47
58
|
canHandle(message: BullishMessage): message is BullishLevel2Message {
|
|
48
59
|
return message.dataType === 'V1TALevel2'
|
|
49
60
|
}
|
|
@@ -83,7 +94,7 @@ export class BullishBookChangeMapper implements Mapper<'bullish', BookChange> {
|
|
|
83
94
|
}
|
|
84
95
|
}
|
|
85
96
|
|
|
86
|
-
|
|
97
|
+
class BullishBookTickerMapper implements Mapper<'bullish', BookTicker> {
|
|
87
98
|
canHandle(message: BullishMessage): message is BullishLevel1Message {
|
|
88
99
|
return message.dataType === 'V1TALevel1' && (message.type === 'snapshot' || message.type === 'update')
|
|
89
100
|
}
|
|
@@ -112,7 +123,7 @@ export class BullishBookTickerMapper implements Mapper<'bullish', BookTicker> {
|
|
|
112
123
|
}
|
|
113
124
|
}
|
|
114
125
|
|
|
115
|
-
|
|
126
|
+
class BullishDerivativeTickerMapper implements Mapper<'bullish', DerivativeTicker> {
|
|
116
127
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
117
128
|
private readonly indexPrices = new Map<string, { price: number; timestamp: Date }>()
|
|
118
129
|
|
|
@@ -123,8 +134,9 @@ export class BullishDerivativeTickerMapper implements Mapper<'bullish', Derivati
|
|
|
123
134
|
|
|
124
135
|
if (message.dataType === 'V1TATickerResponse' && (message.type === 'snapshot' || message.type === 'update')) {
|
|
125
136
|
const tickerMessage = message as BullishTickerMessage
|
|
137
|
+
const symbol = tickerMessage.data?.symbol
|
|
126
138
|
|
|
127
|
-
return
|
|
139
|
+
return symbol !== undefined && (symbol.endsWith('-PERP') || /-\d{8}$/.test(symbol))
|
|
128
140
|
}
|
|
129
141
|
|
|
130
142
|
return false
|
|
@@ -173,7 +185,7 @@ export class BullishDerivativeTickerMapper implements Mapper<'bullish', Derivati
|
|
|
173
185
|
}
|
|
174
186
|
}
|
|
175
187
|
|
|
176
|
-
|
|
188
|
+
class BullishOptionSummaryMapper implements Mapper<'bullish', OptionSummary> {
|
|
177
189
|
private readonly indexPrices = new Map<string, { price: number; timestamp: Date }>()
|
|
178
190
|
|
|
179
191
|
canHandle(message: BullishMessage): message is BullishOptionTickerMessage | BullishIndexPriceMessage {
|
|
@@ -183,8 +195,9 @@ export class BullishOptionSummaryMapper implements Mapper<'bullish', OptionSumma
|
|
|
183
195
|
|
|
184
196
|
if (message.dataType === 'V1TATickerResponse' && (message.type === 'snapshot' || message.type === 'update')) {
|
|
185
197
|
const tickerMessage = message as BullishTickerMessage
|
|
198
|
+
const symbol = tickerMessage.data?.symbol
|
|
186
199
|
|
|
187
|
-
return
|
|
200
|
+
return symbol !== undefined && (symbol.endsWith('-C') || symbol.endsWith('-P'))
|
|
188
201
|
}
|
|
189
202
|
|
|
190
203
|
return false
|
|
@@ -263,7 +276,7 @@ type BullishMessageRole = 'snapshot' | 'update'
|
|
|
263
276
|
type BullishAnonymousTradeUpdateMessage = BullishDataMessage<'V1TAAnonymousTradeUpdate', BullishAnonymousTradeUpdateData>
|
|
264
277
|
type BullishLevel2Message = BullishDataMessage<'V1TALevel2', BullishLevel2Data>
|
|
265
278
|
type BullishLevel1Message = BullishDataMessage<'V1TALevel1', BullishLevel1Data>
|
|
266
|
-
type BullishTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishTickerData>
|
|
279
|
+
type BullishTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishTickerData | null>
|
|
267
280
|
type BullishDerivativeTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishDerivativeTickerData>
|
|
268
281
|
type BullishOptionTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishOptionTickerData>
|
|
269
282
|
type BullishIndexPriceMessage = BullishDataMessage<'V1TAIndexPrice', BullishIndexPriceData>
|
package/src/mappers/bybit.ts
CHANGED
|
@@ -1,10 +1,57 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Exchange, Liquidation, OptionSummary, Trade } from '../types.ts'
|
|
3
|
+
import { BybitSpotBookChangeMapper, BybitSpotBookTickerMapper, BybitSpotTradesMapper } from './bybitspot.ts'
|
|
3
4
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
5
|
+
import { exchangeMappers, mapper } from './registry.ts'
|
|
6
|
+
|
|
7
|
+
const BYBIT_V5_API_SWITCH_DATE = new Date('2023-04-05T00:00:00.000Z')
|
|
8
|
+
const BYBIT_V5_API_ALL_LIQUIDATION_SUPPORT_DATE = new Date('2025-02-26T00:00:00.000Z')
|
|
9
|
+
|
|
10
|
+
export const bybitMappers = exchangeMappers({
|
|
11
|
+
bybit: {
|
|
12
|
+
trades: mapper([
|
|
13
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitTradesMapper('bybit') },
|
|
14
|
+
{ use: () => new BybitV5TradesMapper('bybit') }
|
|
15
|
+
]),
|
|
16
|
+
bookChanges: mapper([
|
|
17
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitBookChangeMapper('bybit', { useBook200Channel: false }) },
|
|
18
|
+
{ use: () => new BybitV5BookChangeMapper('bybit', { depth: 50 }) }
|
|
19
|
+
]),
|
|
20
|
+
derivativeTickers: mapper([
|
|
21
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitDerivativeTickerMapper() },
|
|
22
|
+
{ use: () => new BybitV5DerivativeTickerMapper() }
|
|
23
|
+
]),
|
|
24
|
+
liquidations: mapper([
|
|
25
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitLiquidationsMapper('bybit') },
|
|
26
|
+
{ until: BYBIT_V5_API_ALL_LIQUIDATION_SUPPORT_DATE, use: () => new BybitV5LiquidationsMapper('bybit') },
|
|
27
|
+
{ use: () => new BybitV5AllLiquidationsMapper('bybit') }
|
|
28
|
+
]),
|
|
29
|
+
bookTickers: () => new BybitV5BookTickerMapper('bybit')
|
|
30
|
+
},
|
|
31
|
+
'bybit-spot': {
|
|
32
|
+
trades: mapper([
|
|
33
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitSpotTradesMapper('bybit-spot') },
|
|
34
|
+
{ use: () => new BybitV5TradesMapper('bybit-spot') }
|
|
35
|
+
]),
|
|
36
|
+
bookChanges: mapper([
|
|
37
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitSpotBookChangeMapper('bybit-spot') },
|
|
38
|
+
{ use: () => new BybitV5BookChangeMapper('bybit-spot', { depth: 50 }) }
|
|
39
|
+
]),
|
|
40
|
+
bookTickers: mapper([
|
|
41
|
+
{ until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitSpotBookTickerMapper('bybit-spot') },
|
|
42
|
+
{ use: () => new BybitV5BookTickerMapper('bybit-spot') }
|
|
43
|
+
])
|
|
44
|
+
},
|
|
45
|
+
'bybit-options': {
|
|
46
|
+
trades: () => new BybitV5TradesMapper('bybit-options'),
|
|
47
|
+
bookChanges: () => new BybitV5BookChangeMapper('bybit-options', { depth: 25 }),
|
|
48
|
+
optionsSummary: () => new BybitV5OptionSummaryMapper()
|
|
49
|
+
}
|
|
50
|
+
})
|
|
4
51
|
|
|
5
52
|
// v5 https://bybit-exchange.github.io/docs/v5/ws/connect
|
|
6
53
|
|
|
7
|
-
|
|
54
|
+
class BybitV5TradesMapper implements Mapper<'bybit' | 'bybit-spot' | 'bybit-options', Trade> {
|
|
8
55
|
constructor(private readonly _exchange: Exchange) {}
|
|
9
56
|
|
|
10
57
|
canHandle(message: BybitV5Trade) {
|
|
@@ -43,11 +90,15 @@ export class BybitV5TradesMapper implements Mapper<'bybit' | 'bybit-spot' | 'byb
|
|
|
43
90
|
}
|
|
44
91
|
}
|
|
45
92
|
|
|
46
|
-
|
|
93
|
+
class BybitV5BookChangeMapper implements Mapper<'bybit' | 'bybit-spot' | 'bybit-options', BookChange> {
|
|
94
|
+
private readonly _depth: number
|
|
95
|
+
|
|
47
96
|
constructor(
|
|
48
97
|
protected readonly _exchange: Exchange,
|
|
49
|
-
|
|
50
|
-
) {
|
|
98
|
+
{ depth }: { depth: number }
|
|
99
|
+
) {
|
|
100
|
+
this._depth = depth
|
|
101
|
+
}
|
|
51
102
|
|
|
52
103
|
canHandle(message: BybitV5OrderBookMessage) {
|
|
53
104
|
if (message.topic === undefined) {
|
|
@@ -84,7 +135,7 @@ export class BybitV5BookChangeMapper implements Mapper<'bybit' | 'bybit-spot' |
|
|
|
84
135
|
}
|
|
85
136
|
}
|
|
86
137
|
|
|
87
|
-
|
|
138
|
+
class BybitV5BookTickerMapper implements Mapper<'bybit' | 'bybit-spot', BookTicker> {
|
|
88
139
|
private _snapshots: {
|
|
89
140
|
[key: string]: {
|
|
90
141
|
askAmount: number | undefined
|
|
@@ -154,7 +205,7 @@ export class BybitV5BookTickerMapper implements Mapper<'bybit' | 'bybit-spot', B
|
|
|
154
205
|
}
|
|
155
206
|
}
|
|
156
207
|
|
|
157
|
-
|
|
208
|
+
class BybitV5DerivativeTickerMapper implements Mapper<'bybit', DerivativeTicker> {
|
|
158
209
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
159
210
|
|
|
160
211
|
canHandle(message: BybitV5DerivTickerMessage) {
|
|
@@ -213,7 +264,7 @@ export class BybitV5DerivativeTickerMapper implements Mapper<'bybit', Derivative
|
|
|
213
264
|
}
|
|
214
265
|
}
|
|
215
266
|
|
|
216
|
-
|
|
267
|
+
class BybitV5LiquidationsMapper implements Mapper<'bybit', Liquidation> {
|
|
217
268
|
constructor(private readonly _exchange: Exchange) {}
|
|
218
269
|
canHandle(message: BybitV5LiquidationMessage) {
|
|
219
270
|
if (message.topic === undefined) {
|
|
@@ -254,7 +305,7 @@ export class BybitV5LiquidationsMapper implements Mapper<'bybit', Liquidation> {
|
|
|
254
305
|
}
|
|
255
306
|
}
|
|
256
307
|
|
|
257
|
-
|
|
308
|
+
class BybitV5AllLiquidationsMapper implements Mapper<'bybit', Liquidation> {
|
|
258
309
|
constructor(private readonly _exchange: Exchange) {}
|
|
259
310
|
canHandle(message: BybitV5AllLiquidationMessage) {
|
|
260
311
|
if (message.topic === undefined) {
|
|
@@ -294,7 +345,7 @@ export class BybitV5AllLiquidationsMapper implements Mapper<'bybit', Liquidation
|
|
|
294
345
|
}
|
|
295
346
|
}
|
|
296
347
|
}
|
|
297
|
-
|
|
348
|
+
class BybitV5OptionSummaryMapper implements Mapper<'bybit-options', OptionSummary> {
|
|
298
349
|
canHandle(message: BybitV5OptionTickerMessage) {
|
|
299
350
|
if (message.topic === undefined) {
|
|
300
351
|
return false
|
|
@@ -364,7 +415,7 @@ export class BybitV5OptionSummaryMapper implements Mapper<'bybit-options', Optio
|
|
|
364
415
|
|
|
365
416
|
// https://github.com/bybit-exchange/bybit-official-api-docs/blob/master/en/websocket.md
|
|
366
417
|
|
|
367
|
-
|
|
418
|
+
class BybitTradesMapper implements Mapper<'bybit', Trade> {
|
|
368
419
|
constructor(private readonly _exchange: Exchange) {}
|
|
369
420
|
canHandle(message: BybitDataMessage) {
|
|
370
421
|
if (message.topic === undefined) {
|
|
@@ -409,11 +460,15 @@ export class BybitTradesMapper implements Mapper<'bybit', Trade> {
|
|
|
409
460
|
}
|
|
410
461
|
}
|
|
411
462
|
|
|
412
|
-
|
|
463
|
+
class BybitBookChangeMapper implements Mapper<'bybit', BookChange> {
|
|
464
|
+
private readonly _canUseBook200Channel: boolean
|
|
465
|
+
|
|
413
466
|
constructor(
|
|
414
467
|
protected readonly _exchange: Exchange,
|
|
415
|
-
|
|
416
|
-
) {
|
|
468
|
+
{ useBook200Channel }: { useBook200Channel: boolean }
|
|
469
|
+
) {
|
|
470
|
+
this._canUseBook200Channel = useBook200Channel
|
|
471
|
+
}
|
|
417
472
|
|
|
418
473
|
canHandle(message: BybitDataMessage) {
|
|
419
474
|
if (message.topic === undefined) {
|
|
@@ -480,7 +535,7 @@ export class BybitBookChangeMapper implements Mapper<'bybit', BookChange> {
|
|
|
480
535
|
}
|
|
481
536
|
}
|
|
482
537
|
|
|
483
|
-
|
|
538
|
+
class BybitDerivativeTickerMapper implements Mapper<'bybit', DerivativeTicker> {
|
|
484
539
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
485
540
|
|
|
486
541
|
canHandle(message: BybitDataMessage) {
|
|
@@ -578,7 +633,7 @@ export class BybitDerivativeTickerMapper implements Mapper<'bybit', DerivativeTi
|
|
|
578
633
|
}
|
|
579
634
|
}
|
|
580
635
|
|
|
581
|
-
|
|
636
|
+
class BybitLiquidationsMapper implements Mapper<'bybit', Liquidation> {
|
|
582
637
|
constructor(private readonly _exchange: Exchange) {}
|
|
583
638
|
canHandle(message: BybitDataMessage) {
|
|
584
639
|
if (message.topic === undefined) {
|
package/src/mappers/coinbase.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { parseμs, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookPriceLevel, BookTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://docs.pro.coinbase.com/#websocket-feed
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const coinbaseMappers = exchangeMappers({
|
|
9
|
+
coinbase: {
|
|
10
|
+
trades: () => coinbaseTradesMapper,
|
|
11
|
+
bookChanges: () => new CoinbaseBookChangMapper(),
|
|
12
|
+
bookTickers: () => coinbaseBookTickerMapper
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const coinbaseTradesMapper: Mapper<'coinbase', Trade> = {
|
|
8
17
|
canHandle(message: CoinbaseTrade | CoinbaseLevel2Snapshot | CoinbaseLevel2Update) {
|
|
9
18
|
return message.type === 'match'
|
|
10
19
|
},
|
|
@@ -63,7 +72,7 @@ const validAmountsOnly = (level: BookPriceLevel) => {
|
|
|
63
72
|
return true
|
|
64
73
|
}
|
|
65
74
|
|
|
66
|
-
|
|
75
|
+
class CoinbaseBookChangMapper implements Mapper<'coinbase', BookChange> {
|
|
67
76
|
private readonly _symbolLastTimestampMap = new Map<string, Date>()
|
|
68
77
|
|
|
69
78
|
canHandle(message: CoinbaseTrade | CoinbaseLevel2Snapshot | CoinbaseLevel2Update) {
|
|
@@ -138,7 +147,7 @@ export class CoinbaseBookChangMapper implements Mapper<'coinbase', BookChange> {
|
|
|
138
147
|
}
|
|
139
148
|
}
|
|
140
149
|
|
|
141
|
-
|
|
150
|
+
const coinbaseBookTickerMapper: Mapper<'coinbase', BookTicker> = {
|
|
142
151
|
canHandle(message: CoinbaseTicker) {
|
|
143
152
|
return message.type === 'ticker'
|
|
144
153
|
},
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { addMinutes, upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookPriceLevel, BookTicker, DerivativeTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
export const coinbaseInternationalMappers = exchangeMappers({
|
|
7
|
+
'coinbase-international': {
|
|
8
|
+
trades: () => coinbaseInternationalTradesMapper,
|
|
9
|
+
bookChanges: () => new CoinbaseInternationalBookChangMapper(),
|
|
10
|
+
derivativeTickers: () => new CoinbaseInternationalDerivativeTickerMapper(),
|
|
11
|
+
bookTickers: () => coinbaseInternationalBookTickerMapper
|
|
12
|
+
}
|
|
13
|
+
})
|
|
4
14
|
|
|
5
|
-
|
|
15
|
+
const coinbaseInternationalTradesMapper: Mapper<'coinbase-international', Trade> = {
|
|
6
16
|
canHandle(message: CoinbaseInternationalTradeMessage) {
|
|
7
17
|
return message.channel === 'MATCH' && message.type === 'UPDATE'
|
|
8
18
|
},
|
|
@@ -58,7 +68,7 @@ const validAmountsOnly = (level: BookPriceLevel) => {
|
|
|
58
68
|
return true
|
|
59
69
|
}
|
|
60
70
|
|
|
61
|
-
|
|
71
|
+
class CoinbaseInternationalBookChangMapper implements Mapper<'coinbase-international', BookChange> {
|
|
62
72
|
canHandle(message: CoinbaseInternationalLevel2Snapshot | CoinbaseInternationalLevel2Update) {
|
|
63
73
|
return message.channel === 'LEVEL2' && (message.type === 'SNAPSHOT' || message.type === 'UPDATE')
|
|
64
74
|
}
|
|
@@ -116,7 +126,7 @@ export class CoinbaseInternationalBookChangMapper implements Mapper<'coinbase-in
|
|
|
116
126
|
}
|
|
117
127
|
}
|
|
118
128
|
|
|
119
|
-
|
|
129
|
+
const coinbaseInternationalBookTickerMapper: Mapper<'coinbase-international', BookTicker> = {
|
|
120
130
|
canHandle(message: CoinbaseInternationalLevel1Message) {
|
|
121
131
|
return message.channel === 'LEVEL1' && (message.type === 'SNAPSHOT' || message.type === 'UPDATE')
|
|
122
132
|
},
|
|
@@ -153,7 +163,7 @@ export const coinbaseInternationalBookTickerMapper: Mapper<'coinbase-internation
|
|
|
153
163
|
}
|
|
154
164
|
}
|
|
155
165
|
|
|
156
|
-
|
|
166
|
+
class CoinbaseInternationalDerivativeTickerMapper implements Mapper<'coinbase-international', DerivativeTicker> {
|
|
157
167
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
158
168
|
|
|
159
169
|
canHandle(message: CoinbaseInternationalTradeMessage | CoinbaseInternationalRiskMessage | CoinbaseInternationalFundingMessage) {
|
package/src/mappers/coinflex.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, DerivativeTicker, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://docs.coinflex.com/v2/#websocket-api-subscriptions-public
|
|
6
7
|
|
|
7
|
-
export const
|
|
8
|
+
export const coinflexMappers = exchangeMappers({
|
|
9
|
+
coinflex: {
|
|
10
|
+
trades: () => coinflexTradesMapper,
|
|
11
|
+
bookChanges: () => coinflexBookChangeMapper,
|
|
12
|
+
derivativeTickers: () => new CoinflexDerivativeTickerMapper()
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const coinflexTradesMapper: Mapper<'coinflex', Trade> = {
|
|
8
17
|
canHandle(message: CoinflexTrades) {
|
|
9
18
|
return message.table === 'trade'
|
|
10
19
|
},
|
|
@@ -44,7 +53,7 @@ const mapBookLevel = (level: CoinflexBookLevel) => {
|
|
|
44
53
|
return { price, amount }
|
|
45
54
|
}
|
|
46
55
|
|
|
47
|
-
|
|
56
|
+
const coinflexBookChangeMapper: Mapper<'coinflex', BookChange> = {
|
|
48
57
|
canHandle(message: CoinflexBookDepthMessage) {
|
|
49
58
|
return message.table === 'futures/depth'
|
|
50
59
|
},
|
|
@@ -76,7 +85,7 @@ export const coinflexBookChangeMapper: Mapper<'coinflex', BookChange> = {
|
|
|
76
85
|
}
|
|
77
86
|
}
|
|
78
87
|
|
|
79
|
-
|
|
88
|
+
class CoinflexDerivativeTickerMapper implements Mapper<'coinflex', DerivativeTicker> {
|
|
80
89
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
81
90
|
|
|
82
91
|
canHandle(message: CoinflexTickerMessage) {
|
package/src/mappers/cryptocom.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, Exchange, BookTicker, Trade, DerivativeTicker } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
export const cryptoComMappers = exchangeMappers({
|
|
7
|
+
'crypto-com': {
|
|
8
|
+
trades: () => new CryptoComTradesMapper('crypto-com'),
|
|
9
|
+
bookChanges: () => new CryptoComBookChangeMapper('crypto-com'),
|
|
10
|
+
derivativeTickers: () => new CryptoComDerivativeTickerMapper('crypto-com'),
|
|
11
|
+
bookTickers: () => new CryptoComBookTickerMapper('crypto-com')
|
|
12
|
+
}
|
|
13
|
+
})
|
|
4
14
|
|
|
5
|
-
|
|
15
|
+
class CryptoComTradesMapper implements Mapper<'crypto-com', Trade> {
|
|
6
16
|
constructor(private readonly _exchange: Exchange) {}
|
|
7
17
|
canHandle(message: CryptoComTradeMessage) {
|
|
8
18
|
return message.result !== undefined && message.result.channel === 'trade'
|
|
@@ -40,7 +50,7 @@ export class CryptoComTradesMapper implements Mapper<'crypto-com', Trade> {
|
|
|
40
50
|
}
|
|
41
51
|
}
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
class CryptoComBookChangeMapper implements Mapper<'crypto-com', BookChange> {
|
|
44
54
|
constructor(protected readonly _exchange: Exchange) {}
|
|
45
55
|
|
|
46
56
|
canHandle(message: CryptoComBookMessage) {
|
|
@@ -82,7 +92,7 @@ export class CryptoComBookChangeMapper implements Mapper<'crypto-com', BookChang
|
|
|
82
92
|
}
|
|
83
93
|
}
|
|
84
94
|
|
|
85
|
-
|
|
95
|
+
class CryptoComBookTickerMapper implements Mapper<'crypto-com', BookTicker> {
|
|
86
96
|
constructor(protected readonly _exchange: Exchange) {}
|
|
87
97
|
|
|
88
98
|
canHandle(message: CryptoComTickerMessage) {
|
|
@@ -119,7 +129,7 @@ export class CryptoComBookTickerMapper implements Mapper<'crypto-com', BookTicke
|
|
|
119
129
|
}
|
|
120
130
|
}
|
|
121
131
|
|
|
122
|
-
|
|
132
|
+
class CryptoComDerivativeTickerMapper implements Mapper<'crypto-com', DerivativeTicker> {
|
|
123
133
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
124
134
|
private readonly _indexPrices = new Map<string, number>()
|
|
125
135
|
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
import { upperCaseSymbols } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Liquidation, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers, mapper } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://www.cryptofacilities.com/resources/hc/en-us/categories/115000132213-API
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
const CRYPTOFACILITIES_RELATIVE_FUNDING_SWITCH_DATE = new Date('2022-09-29T00:00:00.000Z')
|
|
9
|
+
|
|
10
|
+
export const cryptofacilitiesMappers = exchangeMappers({
|
|
11
|
+
cryptofacilities: {
|
|
12
|
+
trades: () => cryptofacilitiesTradesMapper,
|
|
13
|
+
bookChanges: () => cryptofacilitiesBookChangeMapper,
|
|
14
|
+
derivativeTickers: mapper([
|
|
15
|
+
{
|
|
16
|
+
until: CRYPTOFACILITIES_RELATIVE_FUNDING_SWITCH_DATE,
|
|
17
|
+
use: () => new CryptofacilitiesDerivativeTickerMapper({ useRelativeFundingRate: false })
|
|
18
|
+
},
|
|
19
|
+
{ use: () => new CryptofacilitiesDerivativeTickerMapper({ useRelativeFundingRate: true }) }
|
|
20
|
+
]),
|
|
21
|
+
liquidations: () => cryptofacilitiesLiquidationsMapper,
|
|
22
|
+
bookTickers: () => cryptofacilitiesBookTickerMapper
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const cryptofacilitiesTradesMapper: Mapper<'cryptofacilities', Trade> = {
|
|
8
27
|
canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
|
|
9
28
|
return message.feed === 'trade' && message.event === undefined
|
|
10
29
|
},
|
|
@@ -39,7 +58,7 @@ const mapBookLevel = ({ price, qty }: CryptofacilitiesBookLevel) => {
|
|
|
39
58
|
return { price, amount: qty < 0 ? 0 : qty }
|
|
40
59
|
}
|
|
41
60
|
|
|
42
|
-
|
|
61
|
+
const cryptofacilitiesBookChangeMapper: Mapper<'cryptofacilities', BookChange> = {
|
|
43
62
|
canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
|
|
44
63
|
return message.event === undefined && (message.feed === 'book' || message.feed === 'book_snapshot')
|
|
45
64
|
},
|
|
@@ -94,8 +113,13 @@ export const cryptofacilitiesBookChangeMapper: Mapper<'cryptofacilities', BookCh
|
|
|
94
113
|
}
|
|
95
114
|
}
|
|
96
115
|
|
|
97
|
-
|
|
98
|
-
|
|
116
|
+
class CryptofacilitiesDerivativeTickerMapper implements Mapper<'cryptofacilities', DerivativeTicker> {
|
|
117
|
+
private readonly _useRelativeFundingRate: boolean
|
|
118
|
+
|
|
119
|
+
constructor({ useRelativeFundingRate }: { useRelativeFundingRate: boolean }) {
|
|
120
|
+
this._useRelativeFundingRate = useRelativeFundingRate
|
|
121
|
+
}
|
|
122
|
+
|
|
99
123
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
100
124
|
canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
|
|
101
125
|
return message.feed === 'ticker' && message.event === undefined
|
|
@@ -141,7 +165,7 @@ export class CryptofacilitiesDerivativeTickerMapper implements Mapper<'cryptofac
|
|
|
141
165
|
}
|
|
142
166
|
}
|
|
143
167
|
|
|
144
|
-
|
|
168
|
+
const cryptofacilitiesLiquidationsMapper: Mapper<'cryptofacilities', Liquidation> = {
|
|
145
169
|
canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
|
|
146
170
|
return message.feed === 'trade' && message.event === undefined && message.type === 'liquidation'
|
|
147
171
|
},
|
|
@@ -172,7 +196,7 @@ export const cryptofacilitiesLiquidationsMapper: Mapper<'cryptofacilities', Liqu
|
|
|
172
196
|
}
|
|
173
197
|
}
|
|
174
198
|
|
|
175
|
-
|
|
199
|
+
const cryptofacilitiesBookTickerMapper: Mapper<'cryptofacilities', BookTicker> = {
|
|
176
200
|
canHandle(message: CryptofacilitiesTicker) {
|
|
177
201
|
return message.feed === 'ticker' && message.event === undefined
|
|
178
202
|
},
|
package/src/mappers/delta.ts
CHANGED
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
import { fromMicroSecondsToDate, 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, mapper } from './registry.ts'
|
|
5
|
+
|
|
6
|
+
const DELTA_V2_API_SWITCH_DATE = new Date('2020-10-14T00:00:00.000Z')
|
|
7
|
+
const DELTA_BOOK_CHANGE_SWITCH_DATE = new Date('2023-04-01T00:00:00.000Z')
|
|
8
|
+
|
|
9
|
+
export const deltaMappers = exchangeMappers({
|
|
10
|
+
delta: {
|
|
11
|
+
trades: mapper([
|
|
12
|
+
{ until: DELTA_V2_API_SWITCH_DATE, use: () => new DeltaTradesMapper({ useV2Channels: false }) },
|
|
13
|
+
{ use: () => new DeltaTradesMapper({ useV2Channels: true }) }
|
|
14
|
+
]),
|
|
15
|
+
bookChanges: mapper([
|
|
16
|
+
{ until: DELTA_BOOK_CHANGE_SWITCH_DATE, use: () => new DeltaBookChangeMapper({ useL2UpdatesChannel: false }) },
|
|
17
|
+
{ use: () => new DeltaBookChangeMapper({ useL2UpdatesChannel: true }) }
|
|
18
|
+
]),
|
|
19
|
+
derivativeTickers: mapper([
|
|
20
|
+
{ until: DELTA_V2_API_SWITCH_DATE, use: () => new DeltaDerivativeTickerMapper({ useV2Channels: false }) },
|
|
21
|
+
{ use: () => new DeltaDerivativeTickerMapper({ useV2Channels: true }) }
|
|
22
|
+
]),
|
|
23
|
+
bookTickers: () => new DeltaBookTickerMapper()
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
class DeltaTradesMapper implements Mapper<'delta', Trade> {
|
|
28
|
+
private readonly _useV2Channels: boolean
|
|
4
29
|
|
|
5
|
-
|
|
6
|
-
|
|
30
|
+
constructor({ useV2Channels }: { useV2Channels: boolean }) {
|
|
31
|
+
this._useV2Channels = useV2Channels
|
|
32
|
+
}
|
|
7
33
|
|
|
8
34
|
canHandle(message: DeltaTrade) {
|
|
9
35
|
return message.type === (this._useV2Channels ? 'all_trades' : 'recent_trade')
|
|
@@ -49,8 +75,12 @@ const mapL2Level = (level: DeltaL2Level) => {
|
|
|
49
75
|
}
|
|
50
76
|
}
|
|
51
77
|
|
|
52
|
-
|
|
53
|
-
|
|
78
|
+
class DeltaBookChangeMapper implements Mapper<'delta', BookChange> {
|
|
79
|
+
private readonly _useL2UpdatesChannel: boolean
|
|
80
|
+
|
|
81
|
+
constructor({ useL2UpdatesChannel }: { useL2UpdatesChannel: boolean }) {
|
|
82
|
+
this._useL2UpdatesChannel = useL2UpdatesChannel
|
|
83
|
+
}
|
|
54
84
|
|
|
55
85
|
canHandle(message: DeltaL2OrderBook | DeltaL2UpdateMessage) {
|
|
56
86
|
if (this._useL2UpdatesChannel) {
|
|
@@ -109,8 +139,12 @@ export class DeltaBookChangeMapper implements Mapper<'delta', BookChange> {
|
|
|
109
139
|
}
|
|
110
140
|
}
|
|
111
141
|
|
|
112
|
-
|
|
113
|
-
|
|
142
|
+
class DeltaDerivativeTickerMapper implements Mapper<'delta', DerivativeTicker> {
|
|
143
|
+
private readonly _useV2Channels: boolean
|
|
144
|
+
|
|
145
|
+
constructor({ useV2Channels }: { useV2Channels: boolean }) {
|
|
146
|
+
this._useV2Channels = useV2Channels
|
|
147
|
+
}
|
|
114
148
|
|
|
115
149
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
116
150
|
|
|
@@ -173,7 +207,7 @@ export class DeltaDerivativeTickerMapper implements Mapper<'delta', DerivativeTi
|
|
|
173
207
|
}
|
|
174
208
|
}
|
|
175
209
|
|
|
176
|
-
|
|
210
|
+
class DeltaBookTickerMapper implements Mapper<'delta', BookTicker> {
|
|
177
211
|
canHandle(message: DeltaL1Message) {
|
|
178
212
|
return message.type === 'l1_orderbook'
|
|
179
213
|
}
|
package/src/mappers/deribit.ts
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { asNonZeroNumberOrUndefined } from '../handy.ts'
|
|
2
2
|
import { BookChange, BookTicker, DerivativeTicker, Liquidation, OptionSummary, Trade } from '../types.ts'
|
|
3
3
|
import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
|
|
4
|
+
import { exchangeMappers } from './registry.ts'
|
|
4
5
|
|
|
5
6
|
// https://docs.deribit.com/v2/#subscriptions
|
|
6
7
|
|
|
8
|
+
export const deribitMappers = exchangeMappers({
|
|
9
|
+
deribit: {
|
|
10
|
+
trades: () => deribitTradesMapper,
|
|
11
|
+
bookChanges: () => deribitBookChangeMapper,
|
|
12
|
+
derivativeTickers: () => new DeribitDerivativeTickerMapper(),
|
|
13
|
+
optionsSummary: () => new DeribitOptionSummaryMapper(),
|
|
14
|
+
liquidations: () => deribitLiquidationsMapper,
|
|
15
|
+
bookTickers: () => deribitBookTickerMapper
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
|
|
7
19
|
function deribitCasing(symbols?: string[]) {
|
|
8
20
|
if (symbols !== undefined) {
|
|
9
21
|
return symbols.map((symbol) => {
|
|
@@ -24,7 +36,7 @@ function deribitCasing(symbols?: string[]) {
|
|
|
24
36
|
return
|
|
25
37
|
}
|
|
26
38
|
|
|
27
|
-
|
|
39
|
+
const deribitTradesMapper: Mapper<'deribit', Trade> = {
|
|
28
40
|
canHandle(message: any) {
|
|
29
41
|
const channel = message.params !== undefined ? (message.params.channel as string | undefined) : undefined
|
|
30
42
|
if (channel === undefined) {
|
|
@@ -69,7 +81,7 @@ const mapBookLevel = (level: DeribitBookLevel) => {
|
|
|
69
81
|
return { price, amount }
|
|
70
82
|
}
|
|
71
83
|
|
|
72
|
-
|
|
84
|
+
const deribitBookChangeMapper: Mapper<'deribit', BookChange> = {
|
|
73
85
|
canHandle(message: any) {
|
|
74
86
|
const channel = message.params && (message.params.channel as string | undefined)
|
|
75
87
|
if (channel === undefined) {
|
|
@@ -111,7 +123,7 @@ export const deribitBookChangeMapper: Mapper<'deribit', BookChange> = {
|
|
|
111
123
|
}
|
|
112
124
|
}
|
|
113
125
|
|
|
114
|
-
|
|
126
|
+
class DeribitDerivativeTickerMapper implements Mapper<'deribit', DerivativeTicker> {
|
|
115
127
|
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
116
128
|
|
|
117
129
|
canHandle(message: any) {
|
|
@@ -151,7 +163,7 @@ export class DeribitDerivativeTickerMapper implements Mapper<'deribit', Derivati
|
|
|
151
163
|
}
|
|
152
164
|
}
|
|
153
165
|
|
|
154
|
-
|
|
166
|
+
class DeribitOptionSummaryMapper implements Mapper<'deribit', OptionSummary> {
|
|
155
167
|
getFilters(symbols?: string[]) {
|
|
156
168
|
symbols = deribitCasing(symbols)
|
|
157
169
|
|
|
@@ -231,7 +243,7 @@ export class DeribitOptionSummaryMapper implements Mapper<'deribit', OptionSumma
|
|
|
231
243
|
}
|
|
232
244
|
}
|
|
233
245
|
|
|
234
|
-
|
|
246
|
+
const deribitLiquidationsMapper: Mapper<'deribit', Liquidation> = {
|
|
235
247
|
canHandle(message: any) {
|
|
236
248
|
const channel = message.params !== undefined ? (message.params.channel as string | undefined) : undefined
|
|
237
249
|
if (channel === undefined) {
|
|
@@ -279,7 +291,7 @@ export const deribitLiquidationsMapper: Mapper<'deribit', Liquidation> = {
|
|
|
279
291
|
}
|
|
280
292
|
}
|
|
281
293
|
|
|
282
|
-
|
|
294
|
+
const deribitBookTickerMapper: Mapper<'deribit', BookTicker> = {
|
|
283
295
|
canHandle(message: any) {
|
|
284
296
|
const channel = message.params !== undefined ? (message.params.channel as string | undefined) : undefined
|
|
285
297
|
if (channel === undefined) {
|