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.
Files changed (100) hide show
  1. package/dist/apikeyaccessinfo.js +1 -1
  2. package/dist/apikeyaccessinfo.js.map +1 -1
  3. package/dist/clearcache.js +12 -12
  4. package/dist/clearcache.js.map +1 -1
  5. package/dist/combine.js +1 -1
  6. package/dist/combine.js.map +1 -1
  7. package/dist/computable/booksnapshot.d.ts.map +1 -1
  8. package/dist/computable/booksnapshot.js +1 -1
  9. package/dist/computable/booksnapshot.js.map +1 -1
  10. package/dist/computable/tradebar.d.ts.map +1 -1
  11. package/dist/computable/tradebar.js.map +1 -1
  12. package/dist/debug.js +1 -1
  13. package/dist/debug.js.map +1 -1
  14. package/dist/downloaddatasets.js +13 -13
  15. package/dist/downloaddatasets.js.map +1 -1
  16. package/dist/exchangedetails.js +1 -1
  17. package/dist/exchangedetails.js.map +1 -1
  18. package/dist/filter.js.map +1 -1
  19. package/dist/handy.js +10 -10
  20. package/dist/handy.js.map +1 -1
  21. package/dist/instrumentinfo.js +1 -1
  22. package/dist/instrumentinfo.js.map +1 -1
  23. package/dist/mappers/binance.d.ts.map +1 -1
  24. package/dist/mappers/binance.js +2 -2
  25. package/dist/mappers/binance.js.map +1 -1
  26. package/dist/mappers/binanceoptions.js +10 -10
  27. package/dist/mappers/binanceoptions.js.map +1 -1
  28. package/dist/mappers/bitflyer.js +1 -1
  29. package/dist/mappers/bitflyer.js.map +1 -1
  30. package/dist/mappers/bybit.d.ts +12 -1
  31. package/dist/mappers/bybit.d.ts.map +1 -1
  32. package/dist/mappers/bybit.js +21 -3
  33. package/dist/mappers/bybit.js.map +1 -1
  34. package/dist/mappers/coinbase.js +2 -2
  35. package/dist/mappers/coinbase.js.map +1 -1
  36. package/dist/mappers/dydx.d.ts +6 -14
  37. package/dist/mappers/dydx.d.ts.map +1 -1
  38. package/dist/mappers/dydx.js +1 -1
  39. package/dist/mappers/dydx.js.map +1 -1
  40. package/dist/mappers/ftx.js +2 -2
  41. package/dist/mappers/ftx.js.map +1 -1
  42. package/dist/mappers/huobi.d.ts.map +1 -1
  43. package/dist/mappers/huobi.js +11 -11
  44. package/dist/mappers/huobi.js.map +1 -1
  45. package/dist/mappers/okex.js +14 -14
  46. package/dist/mappers/okex.js.map +1 -1
  47. package/dist/mappers/phemex.d.ts.map +1 -1
  48. package/dist/mappers/phemex.js.map +1 -1
  49. package/dist/realtimefeeds/ascendex.js +2 -2
  50. package/dist/realtimefeeds/ascendex.js.map +1 -1
  51. package/dist/realtimefeeds/binance.js +1 -1
  52. package/dist/realtimefeeds/binance.js.map +1 -1
  53. package/dist/realtimefeeds/bitmex.js +1 -1
  54. package/dist/realtimefeeds/bitmex.js.map +1 -1
  55. package/dist/realtimefeeds/ftx.js +1 -1
  56. package/dist/realtimefeeds/ftx.js.map +1 -1
  57. package/dist/realtimefeeds/huobi.js +7 -7
  58. package/dist/realtimefeeds/huobi.js.map +1 -1
  59. package/dist/realtimefeeds/okex.js +1 -1
  60. package/dist/realtimefeeds/okex.js.map +1 -1
  61. package/dist/realtimefeeds/realtimefeed.js +9 -9
  62. package/dist/realtimefeeds/realtimefeed.js.map +1 -1
  63. package/dist/replay.d.ts.map +1 -1
  64. package/dist/replay.js +75 -40
  65. package/dist/replay.js.map +1 -1
  66. package/dist/stream.js +4 -4
  67. package/dist/stream.js.map +1 -1
  68. package/dist/worker.js +12 -12
  69. package/dist/worker.js.map +1 -1
  70. package/package.json +19 -18
  71. package/src/computable/booksnapshot.ts +4 -2
  72. package/src/computable/tradebar.ts +4 -1
  73. package/src/downloaddatasets.ts +188 -188
  74. package/src/filter.ts +69 -69
  75. package/src/handy.ts +2 -2
  76. package/src/instrumentinfo.ts +1 -1
  77. package/src/mappers/ascendex.ts +156 -156
  78. package/src/mappers/binance.ts +6 -3
  79. package/src/mappers/bybit.ts +28 -4
  80. package/src/mappers/coinflex.ts +159 -159
  81. package/src/mappers/delta.ts +175 -175
  82. package/src/mappers/dydx.ts +303 -306
  83. package/src/mappers/gateio.ts +117 -117
  84. package/src/mappers/gateiofutures.ts +185 -185
  85. package/src/mappers/huobi.ts +4 -2
  86. package/src/mappers/phemex.ts +179 -177
  87. package/src/mappers/poloniex.ts +150 -150
  88. package/src/mappers/serum.ts +103 -103
  89. package/src/mappers/upbit.ts +104 -104
  90. package/src/realtimefeeds/ascendex.ts +65 -65
  91. package/src/realtimefeeds/coinflex.ts +29 -29
  92. package/src/realtimefeeds/delta.ts +27 -27
  93. package/src/realtimefeeds/dydx.ts +40 -40
  94. package/src/realtimefeeds/gateio.ts +41 -41
  95. package/src/realtimefeeds/gateiofutures.ts +90 -90
  96. package/src/realtimefeeds/poloniex.ts +28 -28
  97. package/src/realtimefeeds/realtimefeed.ts +2 -2
  98. package/src/realtimefeeds/upbit.ts +35 -35
  99. package/src/replay.ts +61 -18
  100. package/src/stream.ts +1 -1
@@ -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
+ }
@@ -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
  }
@@ -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
- for (const bybitLiquidation of message.data) {
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: String(bybitLiquidation.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
+ }