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,117 +1,117 @@
1
- import { BookChange, Exchange, Trade } from '../types'
2
- import { Mapper } from './mapper'
3
-
4
- // https://www.gate.io/docs/websocket/index.html
5
-
6
- export class GateIOTradesMapper implements Mapper<'gate-io', Trade> {
7
- private readonly _seenSymbols = new Set<string>()
8
-
9
- constructor(private readonly _exchange: Exchange) {}
10
-
11
- canHandle(message: any) {
12
- return message.method === 'trades.update'
13
- }
14
-
15
- getFilters(symbols?: string[]) {
16
- return [
17
- {
18
- channel: 'trades',
19
- symbols
20
- } as const
21
- ]
22
- }
23
-
24
- *map(tradesMessage: GateIOTrades, localTimestamp: Date): IterableIterator<Trade> {
25
- const symbol = tradesMessage.params[0]
26
-
27
- // gate io sends trades from newest to oldest for some reason
28
- for (const gateIOTrade of tradesMessage.params[1].reverse()) {
29
- // always ignore first returned trade as it's a 'stale' trade, which has already been published before disconnect
30
- if (this._seenSymbols.has(symbol) === false) {
31
- this._seenSymbols.add(symbol)
32
- break
33
- }
34
-
35
- const timestamp = new Date(gateIOTrade.time * 1000)
36
- timestamp.μs = Math.floor(gateIOTrade.time * 1000000) % 1000
37
- yield {
38
- type: 'trade',
39
- symbol,
40
- exchange: this._exchange,
41
- id: gateIOTrade.id.toString(),
42
- price: Number(gateIOTrade.price),
43
- amount: Number(gateIOTrade.amount),
44
- side: gateIOTrade.type == 'sell' ? 'sell' : 'buy',
45
- timestamp,
46
- localTimestamp: localTimestamp
47
- }
48
- }
49
- }
50
- }
51
-
52
- const mapBookLevel = (level: GateIODepthLevel) => {
53
- const price = Number(level[0])
54
- const amount = Number(level[1])
55
-
56
- return { price, amount }
57
- }
58
-
59
- export class GateIOBookChangeMapper implements Mapper<'gate-io', BookChange> {
60
- constructor(private readonly _exchange: Exchange) {}
61
-
62
- canHandle(message: any) {
63
- return message.method === 'depth.update'
64
- }
65
-
66
- getFilters(symbols?: string[]) {
67
- return [
68
- {
69
- channel: 'depth',
70
- symbols
71
- } as const
72
- ]
73
- }
74
-
75
- *map(depthMessage: GateIODepth, localTimestamp: Date): IterableIterator<BookChange> {
76
- const symbol = depthMessage.params[2]
77
- const isSnapshot = depthMessage.params[0]
78
- const bids = Array.isArray(depthMessage.params[1].bids) ? depthMessage.params[1].bids : []
79
- const asks = Array.isArray(depthMessage.params[1].asks) ? depthMessage.params[1].asks : []
80
- yield {
81
- type: 'book_change',
82
- symbol,
83
- exchange: this._exchange,
84
- isSnapshot,
85
- bids: bids.map(mapBookLevel),
86
- asks: asks.map(mapBookLevel),
87
- timestamp: localTimestamp,
88
- localTimestamp: localTimestamp
89
- }
90
- }
91
- }
92
-
93
- type GateIOTrade = {
94
- id: number
95
- time: number
96
- price: string
97
- amount: string
98
- type: 'sell' | 'buy'
99
- }
100
-
101
- type GateIOTrades = {
102
- method: 'trades.update'
103
- params: [string, GateIOTrade[]]
104
- }
105
- type GateIODepthLevel = [string, string]
106
-
107
- type GateIODepth = {
108
- method: 'depth.update'
109
- params: [
110
- boolean,
111
- {
112
- bids?: GateIODepthLevel[]
113
- asks?: GateIODepthLevel[]
114
- },
115
- string
116
- ]
117
- }
1
+ import { BookChange, Exchange, Trade } from '../types'
2
+ import { Mapper } from './mapper'
3
+
4
+ // https://www.gate.io/docs/websocket/index.html
5
+
6
+ export class GateIOTradesMapper implements Mapper<'gate-io', Trade> {
7
+ private readonly _seenSymbols = new Set<string>()
8
+
9
+ constructor(private readonly _exchange: Exchange) {}
10
+
11
+ canHandle(message: any) {
12
+ return message.method === 'trades.update'
13
+ }
14
+
15
+ getFilters(symbols?: string[]) {
16
+ return [
17
+ {
18
+ channel: 'trades',
19
+ symbols
20
+ } as const
21
+ ]
22
+ }
23
+
24
+ *map(tradesMessage: GateIOTrades, localTimestamp: Date): IterableIterator<Trade> {
25
+ const symbol = tradesMessage.params[0]
26
+
27
+ // gate io sends trades from newest to oldest for some reason
28
+ for (const gateIOTrade of tradesMessage.params[1].reverse()) {
29
+ // always ignore first returned trade as it's a 'stale' trade, which has already been published before disconnect
30
+ if (this._seenSymbols.has(symbol) === false) {
31
+ this._seenSymbols.add(symbol)
32
+ break
33
+ }
34
+
35
+ const timestamp = new Date(gateIOTrade.time * 1000)
36
+ timestamp.μs = Math.floor(gateIOTrade.time * 1000000) % 1000
37
+ yield {
38
+ type: 'trade',
39
+ symbol,
40
+ exchange: this._exchange,
41
+ id: gateIOTrade.id.toString(),
42
+ price: Number(gateIOTrade.price),
43
+ amount: Number(gateIOTrade.amount),
44
+ side: gateIOTrade.type == 'sell' ? 'sell' : 'buy',
45
+ timestamp,
46
+ localTimestamp: localTimestamp
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ const mapBookLevel = (level: GateIODepthLevel) => {
53
+ const price = Number(level[0])
54
+ const amount = Number(level[1])
55
+
56
+ return { price, amount }
57
+ }
58
+
59
+ export class GateIOBookChangeMapper implements Mapper<'gate-io', BookChange> {
60
+ constructor(private readonly _exchange: Exchange) {}
61
+
62
+ canHandle(message: any) {
63
+ return message.method === 'depth.update'
64
+ }
65
+
66
+ getFilters(symbols?: string[]) {
67
+ return [
68
+ {
69
+ channel: 'depth',
70
+ symbols
71
+ } as const
72
+ ]
73
+ }
74
+
75
+ *map(depthMessage: GateIODepth, localTimestamp: Date): IterableIterator<BookChange> {
76
+ const symbol = depthMessage.params[2]
77
+ const isSnapshot = depthMessage.params[0]
78
+ const bids = Array.isArray(depthMessage.params[1].bids) ? depthMessage.params[1].bids : []
79
+ const asks = Array.isArray(depthMessage.params[1].asks) ? depthMessage.params[1].asks : []
80
+ yield {
81
+ type: 'book_change',
82
+ symbol,
83
+ exchange: this._exchange,
84
+ isSnapshot,
85
+ bids: bids.map(mapBookLevel),
86
+ asks: asks.map(mapBookLevel),
87
+ timestamp: localTimestamp,
88
+ localTimestamp: localTimestamp
89
+ }
90
+ }
91
+ }
92
+
93
+ type GateIOTrade = {
94
+ id: number
95
+ time: number
96
+ price: string
97
+ amount: string
98
+ type: 'sell' | 'buy'
99
+ }
100
+
101
+ type GateIOTrades = {
102
+ method: 'trades.update'
103
+ params: [string, GateIOTrade[]]
104
+ }
105
+ type GateIODepthLevel = [string, string]
106
+
107
+ type GateIODepth = {
108
+ method: 'depth.update'
109
+ params: [
110
+ boolean,
111
+ {
112
+ bids?: GateIODepthLevel[]
113
+ asks?: GateIODepthLevel[]
114
+ },
115
+ string
116
+ ]
117
+ }
@@ -1,185 +1,185 @@
1
- import { BookChange, Exchange, Trade, DerivativeTicker } from '../types'
2
- import { Mapper, PendingTickerInfoHelper } from './mapper'
3
-
4
- // https://www.gate.io/docs/futures/ws/index.html
5
-
6
- export class GateIOFuturesTradesMapper implements Mapper<'gate-io-futures', Trade> {
7
- constructor(private readonly _exchange: Exchange) {}
8
-
9
- canHandle(message: any) {
10
- return message.channel === 'futures.trades' && message.event === 'update'
11
- }
12
-
13
- getFilters(symbols?: string[]) {
14
- return [
15
- {
16
- channel: 'trades',
17
- symbols
18
- } as const
19
- ]
20
- }
21
-
22
- *map(tradesMessage: GateIOFuturesTrades, localTimestamp: Date): IterableIterator<Trade> {
23
- for (const trade of tradesMessage.result) {
24
- const timestamp = new Date(trade.create_time * 1000)
25
-
26
- yield {
27
- type: 'trade',
28
- symbol: trade.contract,
29
- exchange: this._exchange,
30
- id: trade.id.toString(),
31
- price: Number(trade.price),
32
- amount: Math.abs(trade.size),
33
- side: trade.size < 0 ? 'sell' : 'buy',
34
- timestamp,
35
- localTimestamp: localTimestamp
36
- }
37
- }
38
- }
39
- }
40
-
41
- const mapBookLevel = (level: GateIOFuturesSnapshotLevel) => {
42
- const price = Number(level.p)
43
-
44
- return { price, amount: Math.abs(level.s) }
45
- }
46
-
47
- export class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures', BookChange> {
48
- constructor(private readonly _exchange: Exchange) {}
49
-
50
- canHandle(message: GateIOFuturesOrderBookSnapshot | GateIOFuturesOrderBookUpdate) {
51
- return message.channel === 'futures.order_book' && (message.event === 'all' || message.event === 'update')
52
- }
53
-
54
- getFilters(symbols?: string[]) {
55
- return [
56
- {
57
- channel: 'order_book',
58
- symbols
59
- } as const
60
- ]
61
- }
62
-
63
- *map(depthMessage: GateIOFuturesOrderBookSnapshot | GateIOFuturesOrderBookUpdate, localTimestamp: Date): IterableIterator<BookChange> {
64
- if (depthMessage.event === 'all') {
65
- // snapshot
66
- yield {
67
- type: 'book_change',
68
- symbol: depthMessage.result.contract,
69
- exchange: this._exchange,
70
- isSnapshot: true,
71
- bids: depthMessage.result.bids.map(mapBookLevel),
72
- asks: depthMessage.result.asks.map(mapBookLevel),
73
- timestamp: new Date(depthMessage.time * 1000),
74
- localTimestamp: localTimestamp
75
- }
76
- } else if (depthMessage.result.length > 0) {
77
- // update
78
- yield {
79
- type: 'book_change',
80
- symbol: depthMessage.result[0].c,
81
- exchange: this._exchange,
82
- isSnapshot: false,
83
- bids: depthMessage.result.filter((l) => l.s >= 0).map(mapBookLevel),
84
- asks: depthMessage.result.filter((l) => l.s <= 0).map(mapBookLevel),
85
- timestamp: new Date(depthMessage.time * 1000),
86
- localTimestamp: localTimestamp
87
- }
88
- }
89
- }
90
- }
91
-
92
- export class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futures', DerivativeTicker> {
93
- private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
94
-
95
- canHandle(message: GateIOFuturesTicker) {
96
- return message.channel === 'futures.tickers' && message.event === 'update'
97
- }
98
-
99
- getFilters(symbols?: string[]) {
100
- return [
101
- {
102
- channel: 'tickers',
103
- symbols
104
- } as const
105
- ]
106
- }
107
-
108
- *map(message: GateIOFuturesTicker, localTimestamp: Date): IterableIterator<DerivativeTicker> {
109
- for (const futuresTicker of message.result) {
110
- if (futuresTicker.contract === undefined) {
111
- return
112
- }
113
- const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(futuresTicker.contract, 'gate-io-futures')
114
-
115
- pendingTickerInfo.updateFundingRate(Number(futuresTicker.funding_rate))
116
- pendingTickerInfo.updatePredictedFundingRate(Number(futuresTicker.funding_rate_indicative))
117
- pendingTickerInfo.updateIndexPrice(Number(futuresTicker.index_price))
118
- pendingTickerInfo.updateMarkPrice(Number(futuresTicker.mark_price))
119
- pendingTickerInfo.updateLastPrice(Number(futuresTicker.last))
120
- pendingTickerInfo.updateTimestamp(new Date(message.time * 1000))
121
-
122
- if (pendingTickerInfo.hasChanged()) {
123
- yield pendingTickerInfo.getSnapshot(localTimestamp)
124
- }
125
- }
126
- }
127
- }
128
-
129
- type GateIOFuturesTrade = {
130
- size: number
131
- id: number
132
- create_time: number
133
- price: string
134
- contract: string
135
- }
136
-
137
- type GateIOFuturesTrades = {
138
- time: number
139
- channel: 'futures.trades'
140
- event: 'update'
141
-
142
- result: GateIOFuturesTrade[]
143
- }
144
-
145
- type GateIOFuturesSnapshotLevel = { p: string; s: number }
146
-
147
- type GateIOFuturesOrderBookSnapshot = {
148
- time: number
149
- channel: 'futures.order_book'
150
- event: 'all'
151
-
152
- result: {
153
- contract: string
154
- asks: GateIOFuturesSnapshotLevel[]
155
- bids: GateIOFuturesSnapshotLevel[]
156
- }
157
- }
158
-
159
- type GateIOFuturesOrderBookUpdate = {
160
- time: number
161
- channel: 'futures.order_book'
162
- event: 'update'
163
- result: {
164
- p: string
165
- s: number
166
- c: string
167
- }[]
168
- }
169
-
170
- type GateIOFuturesTicker = {
171
- time: number
172
- channel: 'futures.tickers'
173
- event: 'update'
174
-
175
- result: [
176
- {
177
- contract: string
178
- last: string
179
- funding_rate: string
180
- mark_price: string
181
- index_price: string
182
- funding_rate_indicative: string
183
- }
184
- ]
185
- }
1
+ import { BookChange, Exchange, Trade, DerivativeTicker } from '../types'
2
+ import { Mapper, PendingTickerInfoHelper } from './mapper'
3
+
4
+ // https://www.gate.io/docs/futures/ws/index.html
5
+
6
+ export class GateIOFuturesTradesMapper implements Mapper<'gate-io-futures', Trade> {
7
+ constructor(private readonly _exchange: Exchange) {}
8
+
9
+ canHandle(message: any) {
10
+ return message.channel === 'futures.trades' && message.event === 'update'
11
+ }
12
+
13
+ getFilters(symbols?: string[]) {
14
+ return [
15
+ {
16
+ channel: 'trades',
17
+ symbols
18
+ } as const
19
+ ]
20
+ }
21
+
22
+ *map(tradesMessage: GateIOFuturesTrades, localTimestamp: Date): IterableIterator<Trade> {
23
+ for (const trade of tradesMessage.result) {
24
+ const timestamp = new Date(trade.create_time * 1000)
25
+
26
+ yield {
27
+ type: 'trade',
28
+ symbol: trade.contract,
29
+ exchange: this._exchange,
30
+ id: trade.id.toString(),
31
+ price: Number(trade.price),
32
+ amount: Math.abs(trade.size),
33
+ side: trade.size < 0 ? 'sell' : 'buy',
34
+ timestamp,
35
+ localTimestamp: localTimestamp
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ const mapBookLevel = (level: GateIOFuturesSnapshotLevel) => {
42
+ const price = Number(level.p)
43
+
44
+ return { price, amount: Math.abs(level.s) }
45
+ }
46
+
47
+ export class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures', BookChange> {
48
+ constructor(private readonly _exchange: Exchange) {}
49
+
50
+ canHandle(message: GateIOFuturesOrderBookSnapshot | GateIOFuturesOrderBookUpdate) {
51
+ return message.channel === 'futures.order_book' && (message.event === 'all' || message.event === 'update')
52
+ }
53
+
54
+ getFilters(symbols?: string[]) {
55
+ return [
56
+ {
57
+ channel: 'order_book',
58
+ symbols
59
+ } as const
60
+ ]
61
+ }
62
+
63
+ *map(depthMessage: GateIOFuturesOrderBookSnapshot | GateIOFuturesOrderBookUpdate, localTimestamp: Date): IterableIterator<BookChange> {
64
+ if (depthMessage.event === 'all') {
65
+ // snapshot
66
+ yield {
67
+ type: 'book_change',
68
+ symbol: depthMessage.result.contract,
69
+ exchange: this._exchange,
70
+ isSnapshot: true,
71
+ bids: depthMessage.result.bids.map(mapBookLevel),
72
+ asks: depthMessage.result.asks.map(mapBookLevel),
73
+ timestamp: new Date(depthMessage.time * 1000),
74
+ localTimestamp: localTimestamp
75
+ }
76
+ } else if (depthMessage.result.length > 0) {
77
+ // update
78
+ yield {
79
+ type: 'book_change',
80
+ symbol: depthMessage.result[0].c,
81
+ exchange: this._exchange,
82
+ isSnapshot: false,
83
+ bids: depthMessage.result.filter((l) => l.s >= 0).map(mapBookLevel),
84
+ asks: depthMessage.result.filter((l) => l.s <= 0).map(mapBookLevel),
85
+ timestamp: new Date(depthMessage.time * 1000),
86
+ localTimestamp: localTimestamp
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ export class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futures', DerivativeTicker> {
93
+ private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
94
+
95
+ canHandle(message: GateIOFuturesTicker) {
96
+ return message.channel === 'futures.tickers' && message.event === 'update'
97
+ }
98
+
99
+ getFilters(symbols?: string[]) {
100
+ return [
101
+ {
102
+ channel: 'tickers',
103
+ symbols
104
+ } as const
105
+ ]
106
+ }
107
+
108
+ *map(message: GateIOFuturesTicker, localTimestamp: Date): IterableIterator<DerivativeTicker> {
109
+ for (const futuresTicker of message.result) {
110
+ if (futuresTicker.contract === undefined) {
111
+ return
112
+ }
113
+ const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(futuresTicker.contract, 'gate-io-futures')
114
+
115
+ pendingTickerInfo.updateFundingRate(Number(futuresTicker.funding_rate))
116
+ pendingTickerInfo.updatePredictedFundingRate(Number(futuresTicker.funding_rate_indicative))
117
+ pendingTickerInfo.updateIndexPrice(Number(futuresTicker.index_price))
118
+ pendingTickerInfo.updateMarkPrice(Number(futuresTicker.mark_price))
119
+ pendingTickerInfo.updateLastPrice(Number(futuresTicker.last))
120
+ pendingTickerInfo.updateTimestamp(new Date(message.time * 1000))
121
+
122
+ if (pendingTickerInfo.hasChanged()) {
123
+ yield pendingTickerInfo.getSnapshot(localTimestamp)
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ type GateIOFuturesTrade = {
130
+ size: number
131
+ id: number
132
+ create_time: number
133
+ price: string
134
+ contract: string
135
+ }
136
+
137
+ type GateIOFuturesTrades = {
138
+ time: number
139
+ channel: 'futures.trades'
140
+ event: 'update'
141
+
142
+ result: GateIOFuturesTrade[]
143
+ }
144
+
145
+ type GateIOFuturesSnapshotLevel = { p: string; s: number }
146
+
147
+ type GateIOFuturesOrderBookSnapshot = {
148
+ time: number
149
+ channel: 'futures.order_book'
150
+ event: 'all'
151
+
152
+ result: {
153
+ contract: string
154
+ asks: GateIOFuturesSnapshotLevel[]
155
+ bids: GateIOFuturesSnapshotLevel[]
156
+ }
157
+ }
158
+
159
+ type GateIOFuturesOrderBookUpdate = {
160
+ time: number
161
+ channel: 'futures.order_book'
162
+ event: 'update'
163
+ result: {
164
+ p: string
165
+ s: number
166
+ c: string
167
+ }[]
168
+ }
169
+
170
+ type GateIOFuturesTicker = {
171
+ time: number
172
+ channel: 'futures.tickers'
173
+ event: 'update'
174
+
175
+ result: [
176
+ {
177
+ contract: string
178
+ last: string
179
+ funding_rate: string
180
+ mark_price: string
181
+ index_price: string
182
+ funding_rate_indicative: string
183
+ }
184
+ ]
185
+ }
@@ -6,7 +6,8 @@ import { asNumberIfValid, CircularBuffer } from '../handy'
6
6
  // https://github.com/huobiapi/API_Docs_en/wiki/WS_api_reference_en
7
7
 
8
8
  export class HuobiTradesMapper
9
- implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options', Trade> {
9
+ implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options', Trade>
10
+ {
10
11
  constructor(private readonly _exchange: Exchange) {}
11
12
  canHandle(message: HuobiDataMessage) {
12
13
  if (message.ch === undefined) {
@@ -46,7 +47,8 @@ export class HuobiTradesMapper
46
47
  }
47
48
 
48
49
  export class HuobiBookChangeMapper
49
- implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options', BookChange> {
50
+ implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options', BookChange>
51
+ {
50
52
  constructor(protected readonly _exchange: Exchange) {}
51
53
 
52
54
  canHandle(message: HuobiDataMessage) {