tardis-dev 12.5.22 → 12.6.7
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/apikeyaccessinfo.js +1 -1
- package/dist/apikeyaccessinfo.js.map +1 -1
- package/dist/clearcache.js +12 -12
- package/dist/clearcache.js.map +1 -1
- package/dist/combine.js +1 -1
- package/dist/combine.js.map +1 -1
- package/dist/computable/booksnapshot.d.ts.map +1 -1
- package/dist/computable/booksnapshot.js +1 -1
- package/dist/computable/booksnapshot.js.map +1 -1
- package/dist/computable/tradebar.d.ts.map +1 -1
- package/dist/computable/tradebar.js.map +1 -1
- package/dist/debug.js +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/downloaddatasets.js +13 -13
- package/dist/downloaddatasets.js.map +1 -1
- package/dist/exchangedetails.js +1 -1
- package/dist/exchangedetails.js.map +1 -1
- package/dist/filter.js.map +1 -1
- package/dist/handy.js +10 -10
- package/dist/handy.js.map +1 -1
- package/dist/instrumentinfo.js +1 -1
- package/dist/instrumentinfo.js.map +1 -1
- package/dist/mappers/binance.d.ts.map +1 -1
- package/dist/mappers/binance.js +2 -2
- package/dist/mappers/binance.js.map +1 -1
- package/dist/mappers/binanceoptions.js +10 -10
- package/dist/mappers/binanceoptions.js.map +1 -1
- package/dist/mappers/bitflyer.js +1 -1
- package/dist/mappers/bitflyer.js.map +1 -1
- package/dist/mappers/bybit.d.ts +12 -1
- package/dist/mappers/bybit.d.ts.map +1 -1
- package/dist/mappers/bybit.js +21 -3
- package/dist/mappers/bybit.js.map +1 -1
- package/dist/mappers/coinbase.js +2 -2
- package/dist/mappers/coinbase.js.map +1 -1
- package/dist/mappers/dydx.d.ts +6 -14
- package/dist/mappers/dydx.d.ts.map +1 -1
- package/dist/mappers/dydx.js +1 -1
- package/dist/mappers/dydx.js.map +1 -1
- package/dist/mappers/ftx.js +2 -2
- package/dist/mappers/ftx.js.map +1 -1
- package/dist/mappers/huobi.d.ts.map +1 -1
- package/dist/mappers/huobi.js +11 -11
- package/dist/mappers/huobi.js.map +1 -1
- package/dist/mappers/okex.js +14 -14
- package/dist/mappers/okex.js.map +1 -1
- package/dist/mappers/phemex.d.ts.map +1 -1
- package/dist/mappers/phemex.js.map +1 -1
- package/dist/realtimefeeds/ascendex.js +2 -2
- package/dist/realtimefeeds/ascendex.js.map +1 -1
- package/dist/realtimefeeds/binance.js +1 -1
- package/dist/realtimefeeds/binance.js.map +1 -1
- package/dist/realtimefeeds/bitmex.js +1 -1
- package/dist/realtimefeeds/bitmex.js.map +1 -1
- package/dist/realtimefeeds/ftx.js +1 -1
- package/dist/realtimefeeds/ftx.js.map +1 -1
- package/dist/realtimefeeds/huobi.js +7 -7
- package/dist/realtimefeeds/huobi.js.map +1 -1
- package/dist/realtimefeeds/okex.js +1 -1
- package/dist/realtimefeeds/okex.js.map +1 -1
- package/dist/realtimefeeds/realtimefeed.js +9 -9
- package/dist/realtimefeeds/realtimefeed.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +75 -40
- package/dist/replay.js.map +1 -1
- package/dist/stream.js +4 -4
- package/dist/stream.js.map +1 -1
- package/dist/worker.js +12 -12
- package/dist/worker.js.map +1 -1
- package/package.json +19 -18
- package/src/computable/booksnapshot.ts +4 -2
- package/src/computable/tradebar.ts +4 -1
- package/src/downloaddatasets.ts +188 -188
- package/src/filter.ts +69 -69
- package/src/handy.ts +2 -2
- package/src/instrumentinfo.ts +1 -1
- package/src/mappers/ascendex.ts +156 -156
- package/src/mappers/binance.ts +6 -3
- package/src/mappers/bybit.ts +28 -4
- package/src/mappers/coinflex.ts +159 -159
- package/src/mappers/delta.ts +175 -175
- package/src/mappers/dydx.ts +303 -306
- package/src/mappers/gateio.ts +117 -117
- package/src/mappers/gateiofutures.ts +185 -185
- package/src/mappers/huobi.ts +4 -2
- package/src/mappers/phemex.ts +179 -177
- package/src/mappers/poloniex.ts +150 -150
- package/src/mappers/serum.ts +103 -103
- package/src/mappers/upbit.ts +104 -104
- package/src/realtimefeeds/ascendex.ts +65 -65
- package/src/realtimefeeds/coinflex.ts +29 -29
- package/src/realtimefeeds/delta.ts +27 -27
- package/src/realtimefeeds/dydx.ts +40 -40
- package/src/realtimefeeds/gateio.ts +41 -41
- package/src/realtimefeeds/gateiofutures.ts +90 -90
- package/src/realtimefeeds/poloniex.ts +28 -28
- package/src/realtimefeeds/realtimefeed.ts +2 -2
- package/src/realtimefeeds/upbit.ts +35 -35
- package/src/replay.ts +61 -18
- package/src/stream.ts +1 -1
package/src/mappers/ascendex.ts
CHANGED
|
@@ -1,156 +1,156 @@
|
|
|
1
|
-
import { Mapper, PendingTickerInfoHelper } from './mapper'
|
|
2
|
-
import { Trade, BookChange, DerivativeTicker } from '../types'
|
|
3
|
-
|
|
4
|
-
export class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
|
|
5
|
-
canHandle(message: AscendexTrade) {
|
|
6
|
-
return message.m === 'trades'
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
getFilters(symbols?: string[]) {
|
|
10
|
-
return [
|
|
11
|
-
{
|
|
12
|
-
channel: 'trades',
|
|
13
|
-
symbols
|
|
14
|
-
} as const
|
|
15
|
-
]
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
*map(message: AscendexTrade, localTimestamp: Date): IterableIterator<Trade> {
|
|
19
|
-
for (let trade of message.data) {
|
|
20
|
-
yield {
|
|
21
|
-
type: 'trade',
|
|
22
|
-
symbol: message.symbol,
|
|
23
|
-
exchange: 'ascendex',
|
|
24
|
-
id: undefined,
|
|
25
|
-
price: Number(trade.p),
|
|
26
|
-
amount: Number(trade.q),
|
|
27
|
-
side: trade.bm === true ? 'sell' : 'buy',
|
|
28
|
-
timestamp: new Date(trade.ts),
|
|
29
|
-
localTimestamp: localTimestamp
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange> {
|
|
36
|
-
canHandle(message: AscendexDepthRealTime | AscendexDepthRealTimeSnapshot) {
|
|
37
|
-
return message.m === 'depth-realtime' || message.m === 'depth-snapshot-realtime'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
getFilters(symbols?: string[]) {
|
|
41
|
-
return [
|
|
42
|
-
{
|
|
43
|
-
channel: 'depth-realtime',
|
|
44
|
-
symbols
|
|
45
|
-
} as const,
|
|
46
|
-
{
|
|
47
|
-
channel: 'depth-snapshot-realtime',
|
|
48
|
-
symbols
|
|
49
|
-
} as const
|
|
50
|
-
]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
*map(message: AscendexDepthRealTime | AscendexDepthRealTimeSnapshot, localTimestamp: Date): IterableIterator<BookChange> {
|
|
54
|
-
yield {
|
|
55
|
-
type: 'book_change',
|
|
56
|
-
symbol: message.symbol,
|
|
57
|
-
exchange: 'ascendex',
|
|
58
|
-
isSnapshot: message.m === 'depth-snapshot-realtime',
|
|
59
|
-
bids: message.data.bids.map(this.mapBookLevel),
|
|
60
|
-
asks: message.data.asks.map(this.mapBookLevel),
|
|
61
|
-
timestamp: message.data.ts > 0 ? new Date(message.data.ts) : localTimestamp,
|
|
62
|
-
localTimestamp
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
protected mapBookLevel(level: AscendexPriceLevel) {
|
|
67
|
-
const price = Number(level[0])
|
|
68
|
-
const amount = Number(level[1])
|
|
69
|
-
return { price, amount }
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export class AscendexDerivativeTickerMapper implements Mapper<'ascendex', DerivativeTicker> {
|
|
74
|
-
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
75
|
-
|
|
76
|
-
canHandle(message: AscendexFuturesData | AscendexTrade) {
|
|
77
|
-
return message.m === 'futures-pricing-data' || message.m === 'trades'
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
getFilters(symbols?: string[]) {
|
|
81
|
-
return [
|
|
82
|
-
{
|
|
83
|
-
channel: 'futures-pricing-data',
|
|
84
|
-
symbols: [] as string[]
|
|
85
|
-
} as const,
|
|
86
|
-
{
|
|
87
|
-
channel: 'trades',
|
|
88
|
-
symbols
|
|
89
|
-
} as const
|
|
90
|
-
]
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
*map(message: AscendexFuturesData | AscendexTrade, localTimestamp: Date): IterableIterator<DerivativeTicker> {
|
|
94
|
-
if (message.m === 'trades') {
|
|
95
|
-
const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(message.symbol, 'ascendex')
|
|
96
|
-
pendingTickerInfo.updateLastPrice(Number(message.data[message.data.length - 1].p))
|
|
97
|
-
return
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
for (const futuresData of message.con) {
|
|
101
|
-
const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(futuresData.s, 'ascendex')
|
|
102
|
-
|
|
103
|
-
pendingTickerInfo.updateIndexPrice(Number(futuresData.ip))
|
|
104
|
-
pendingTickerInfo.updateMarkPrice(Number(futuresData.mp))
|
|
105
|
-
pendingTickerInfo.updateOpenInterest(Number(futuresData.oi))
|
|
106
|
-
pendingTickerInfo.updateTimestamp(new Date(futuresData.t))
|
|
107
|
-
pendingTickerInfo.updateFundingTimestamp(new Date(futuresData.f))
|
|
108
|
-
pendingTickerInfo.updateFundingRate(Number(futuresData.r))
|
|
109
|
-
|
|
110
|
-
if (pendingTickerInfo.hasChanged()) {
|
|
111
|
-
yield pendingTickerInfo.getSnapshot(localTimestamp)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
type AscendexTrade = {
|
|
118
|
-
m: 'trades'
|
|
119
|
-
symbol: string
|
|
120
|
-
data: [{ p: string; q: string; ts: number; bm: boolean; seqnum: number }]
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
type AscendexPriceLevel = [string, string]
|
|
124
|
-
|
|
125
|
-
type AscendexDepthRealTime = {
|
|
126
|
-
m: 'depth-realtime'
|
|
127
|
-
symbol: 'XRP/USDT'
|
|
128
|
-
data: { ts: 1621814400204; seqnum: 39862426; asks: AscendexPriceLevel[]; bids: AscendexPriceLevel[] }
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
type AscendexDepthRealTimeSnapshot = {
|
|
132
|
-
m: 'depth-snapshot-realtime'
|
|
133
|
-
symbol: 'XRP/USDT'
|
|
134
|
-
data: {
|
|
135
|
-
ts: 0
|
|
136
|
-
seqnum: 39862426
|
|
137
|
-
asks: AscendexPriceLevel[]
|
|
138
|
-
bids: AscendexPriceLevel[]
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
type AscendexFuturesData = {
|
|
143
|
-
m: 'futures-pricing-data'
|
|
144
|
-
con: [
|
|
145
|
-
{
|
|
146
|
-
t: 1621814404114
|
|
147
|
-
s: 'BTC-PERP'
|
|
148
|
-
mp: '34878.075977904'
|
|
149
|
-
ip: '34697.17'
|
|
150
|
-
oi: '80.6126'
|
|
151
|
-
r: '0.000093633'
|
|
152
|
-
f: 1621843200000
|
|
153
|
-
fi: 28800000
|
|
154
|
-
}
|
|
155
|
-
]
|
|
156
|
-
}
|
|
1
|
+
import { Mapper, PendingTickerInfoHelper } from './mapper'
|
|
2
|
+
import { Trade, BookChange, DerivativeTicker } from '../types'
|
|
3
|
+
|
|
4
|
+
export class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
|
|
5
|
+
canHandle(message: AscendexTrade) {
|
|
6
|
+
return message.m === 'trades'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
getFilters(symbols?: string[]) {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
channel: 'trades',
|
|
13
|
+
symbols
|
|
14
|
+
} as const
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
*map(message: AscendexTrade, localTimestamp: Date): IterableIterator<Trade> {
|
|
19
|
+
for (let trade of message.data) {
|
|
20
|
+
yield {
|
|
21
|
+
type: 'trade',
|
|
22
|
+
symbol: message.symbol,
|
|
23
|
+
exchange: 'ascendex',
|
|
24
|
+
id: undefined,
|
|
25
|
+
price: Number(trade.p),
|
|
26
|
+
amount: Number(trade.q),
|
|
27
|
+
side: trade.bm === true ? 'sell' : 'buy',
|
|
28
|
+
timestamp: new Date(trade.ts),
|
|
29
|
+
localTimestamp: localTimestamp
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange> {
|
|
36
|
+
canHandle(message: AscendexDepthRealTime | AscendexDepthRealTimeSnapshot) {
|
|
37
|
+
return message.m === 'depth-realtime' || message.m === 'depth-snapshot-realtime'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
getFilters(symbols?: string[]) {
|
|
41
|
+
return [
|
|
42
|
+
{
|
|
43
|
+
channel: 'depth-realtime',
|
|
44
|
+
symbols
|
|
45
|
+
} as const,
|
|
46
|
+
{
|
|
47
|
+
channel: 'depth-snapshot-realtime',
|
|
48
|
+
symbols
|
|
49
|
+
} as const
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
*map(message: AscendexDepthRealTime | AscendexDepthRealTimeSnapshot, localTimestamp: Date): IterableIterator<BookChange> {
|
|
54
|
+
yield {
|
|
55
|
+
type: 'book_change',
|
|
56
|
+
symbol: message.symbol,
|
|
57
|
+
exchange: 'ascendex',
|
|
58
|
+
isSnapshot: message.m === 'depth-snapshot-realtime',
|
|
59
|
+
bids: message.data.bids.map(this.mapBookLevel),
|
|
60
|
+
asks: message.data.asks.map(this.mapBookLevel),
|
|
61
|
+
timestamp: message.data.ts > 0 ? new Date(message.data.ts) : localTimestamp,
|
|
62
|
+
localTimestamp
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
protected mapBookLevel(level: AscendexPriceLevel) {
|
|
67
|
+
const price = Number(level[0])
|
|
68
|
+
const amount = Number(level[1])
|
|
69
|
+
return { price, amount }
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export class AscendexDerivativeTickerMapper implements Mapper<'ascendex', DerivativeTicker> {
|
|
74
|
+
private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
|
|
75
|
+
|
|
76
|
+
canHandle(message: AscendexFuturesData | AscendexTrade) {
|
|
77
|
+
return message.m === 'futures-pricing-data' || message.m === 'trades'
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
getFilters(symbols?: string[]) {
|
|
81
|
+
return [
|
|
82
|
+
{
|
|
83
|
+
channel: 'futures-pricing-data',
|
|
84
|
+
symbols: [] as string[]
|
|
85
|
+
} as const,
|
|
86
|
+
{
|
|
87
|
+
channel: 'trades',
|
|
88
|
+
symbols
|
|
89
|
+
} as const
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
*map(message: AscendexFuturesData | AscendexTrade, localTimestamp: Date): IterableIterator<DerivativeTicker> {
|
|
94
|
+
if (message.m === 'trades') {
|
|
95
|
+
const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(message.symbol, 'ascendex')
|
|
96
|
+
pendingTickerInfo.updateLastPrice(Number(message.data[message.data.length - 1].p))
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (const futuresData of message.con) {
|
|
101
|
+
const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(futuresData.s, 'ascendex')
|
|
102
|
+
|
|
103
|
+
pendingTickerInfo.updateIndexPrice(Number(futuresData.ip))
|
|
104
|
+
pendingTickerInfo.updateMarkPrice(Number(futuresData.mp))
|
|
105
|
+
pendingTickerInfo.updateOpenInterest(Number(futuresData.oi))
|
|
106
|
+
pendingTickerInfo.updateTimestamp(new Date(futuresData.t))
|
|
107
|
+
pendingTickerInfo.updateFundingTimestamp(new Date(futuresData.f))
|
|
108
|
+
pendingTickerInfo.updateFundingRate(Number(futuresData.r))
|
|
109
|
+
|
|
110
|
+
if (pendingTickerInfo.hasChanged()) {
|
|
111
|
+
yield pendingTickerInfo.getSnapshot(localTimestamp)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
type AscendexTrade = {
|
|
118
|
+
m: 'trades'
|
|
119
|
+
symbol: string
|
|
120
|
+
data: [{ p: string; q: string; ts: number; bm: boolean; seqnum: number }]
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
type AscendexPriceLevel = [string, string]
|
|
124
|
+
|
|
125
|
+
type AscendexDepthRealTime = {
|
|
126
|
+
m: 'depth-realtime'
|
|
127
|
+
symbol: 'XRP/USDT'
|
|
128
|
+
data: { ts: 1621814400204; seqnum: 39862426; asks: AscendexPriceLevel[]; bids: AscendexPriceLevel[] }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
type AscendexDepthRealTimeSnapshot = {
|
|
132
|
+
m: 'depth-snapshot-realtime'
|
|
133
|
+
symbol: 'XRP/USDT'
|
|
134
|
+
data: {
|
|
135
|
+
ts: 0
|
|
136
|
+
seqnum: 39862426
|
|
137
|
+
asks: AscendexPriceLevel[]
|
|
138
|
+
bids: AscendexPriceLevel[]
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
type AscendexFuturesData = {
|
|
143
|
+
m: 'futures-pricing-data'
|
|
144
|
+
con: [
|
|
145
|
+
{
|
|
146
|
+
t: 1621814404114
|
|
147
|
+
s: 'BTC-PERP'
|
|
148
|
+
mp: '34878.075977904'
|
|
149
|
+
ip: '34697.17'
|
|
150
|
+
oi: '80.6126'
|
|
151
|
+
r: '0.000093633'
|
|
152
|
+
f: 1621843200000
|
|
153
|
+
fi: 28800000
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
}
|
package/src/mappers/binance.ts
CHANGED
|
@@ -6,7 +6,8 @@ import { Mapper, PendingTickerInfoHelper } from './mapper'
|
|
|
6
6
|
// https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md
|
|
7
7
|
|
|
8
8
|
export class BinanceTradesMapper
|
|
9
|
-
implements Mapper<'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery', Trade>
|
|
9
|
+
implements Mapper<'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery', Trade>
|
|
10
|
+
{
|
|
10
11
|
constructor(private readonly _exchange: Exchange) {}
|
|
11
12
|
|
|
12
13
|
canHandle(message: BinanceResponse<any>) {
|
|
@@ -53,7 +54,8 @@ export class BinanceTradesMapper
|
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
export class BinanceBookChangeMapper
|
|
56
|
-
implements Mapper<'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery', BookChange>
|
|
57
|
+
implements Mapper<'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery', BookChange>
|
|
58
|
+
{
|
|
57
59
|
protected readonly symbolToDepthInfoMapping: {
|
|
58
60
|
[key: string]: LocalDepthInfo
|
|
59
61
|
} = {}
|
|
@@ -213,7 +215,8 @@ export class BinanceBookChangeMapper
|
|
|
213
215
|
|
|
214
216
|
export class BinanceFuturesBookChangeMapper
|
|
215
217
|
extends BinanceBookChangeMapper
|
|
216
|
-
implements Mapper<'binance-futures' | 'binance-delivery', BookChange>
|
|
218
|
+
implements Mapper<'binance-futures' | 'binance-delivery', BookChange>
|
|
219
|
+
{
|
|
217
220
|
constructor(protected readonly exchange: Exchange, protected readonly ignoreBookSnapshotOverlapError: boolean) {
|
|
218
221
|
super(exchange, ignoreBookSnapshotOverlapError)
|
|
219
222
|
}
|
package/src/mappers/bybit.ts
CHANGED
|
@@ -198,15 +198,33 @@ export class BybitLiquidationsMapper implements Mapper<'bybit', Liquidation> {
|
|
|
198
198
|
]
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
*map(message: BybitLiquidationMessage, localTimestamp: Date): IterableIterator<Liquidation> {
|
|
202
|
-
|
|
201
|
+
*map(message: BybitLiquidationMessage | BybitLiquidationNativeMessage, localTimestamp: Date): IterableIterator<Liquidation> {
|
|
202
|
+
// from bybit telegram: When "side":"Buy", a long position was liquidated. Will fix the docs.
|
|
203
|
+
if (message.generated) {
|
|
204
|
+
for (const bybitLiquidation of message.data) {
|
|
205
|
+
const liquidation: Liquidation = {
|
|
206
|
+
type: 'liquidation',
|
|
207
|
+
symbol: bybitLiquidation.symbol,
|
|
208
|
+
exchange: this._exchange,
|
|
209
|
+
id: String(bybitLiquidation.id),
|
|
210
|
+
price: Number(bybitLiquidation.price),
|
|
211
|
+
amount: bybitLiquidation.qty,
|
|
212
|
+
side: bybitLiquidation.side == 'Buy' ? 'sell' : 'buy',
|
|
213
|
+
timestamp: new Date(bybitLiquidation.time),
|
|
214
|
+
localTimestamp
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
yield liquidation
|
|
218
|
+
}
|
|
219
|
+
} else {
|
|
220
|
+
const bybitLiquidation = message.data
|
|
203
221
|
const liquidation: Liquidation = {
|
|
204
222
|
type: 'liquidation',
|
|
205
223
|
symbol: bybitLiquidation.symbol,
|
|
206
224
|
exchange: this._exchange,
|
|
207
|
-
id:
|
|
225
|
+
id: undefined,
|
|
208
226
|
price: Number(bybitLiquidation.price),
|
|
209
|
-
amount: bybitLiquidation.qty,
|
|
227
|
+
amount: Number(bybitLiquidation.qty),
|
|
210
228
|
side: bybitLiquidation.side == 'Buy' ? 'sell' : 'buy',
|
|
211
229
|
timestamp: new Date(bybitLiquidation.time),
|
|
212
230
|
localTimestamp
|
|
@@ -281,6 +299,7 @@ type BybitInstrumentDataMessage = BybitDataMessage & {
|
|
|
281
299
|
}
|
|
282
300
|
|
|
283
301
|
type BybitLiquidationMessage = BybitDataMessage & {
|
|
302
|
+
generated: true
|
|
284
303
|
data: {
|
|
285
304
|
id: number
|
|
286
305
|
qty: number
|
|
@@ -290,3 +309,8 @@ type BybitLiquidationMessage = BybitDataMessage & {
|
|
|
290
309
|
price: number
|
|
291
310
|
}[]
|
|
292
311
|
}
|
|
312
|
+
|
|
313
|
+
type BybitLiquidationNativeMessage = BybitDataMessage & {
|
|
314
|
+
generated: undefined
|
|
315
|
+
data: { symbol: string; side: 'Sell' | 'Buy'; price: string; qty: string; time: number }
|
|
316
|
+
}
|