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,306 +1,303 @@
1
- import { Mapper, PendingTickerInfoHelper } from './mapper'
2
- import { Trade, BookChange, DerivativeTicker, BookPriceLevel } from '../types'
3
-
4
- export class DydxTradesMapper implements Mapper<'dydx', Trade> {
5
- canHandle(message: DyDxTrade) {
6
- return message.channel === 'v3_trades' && message.type === 'channel_data'
7
- }
8
-
9
- getFilters(symbols?: string[]) {
10
- return [
11
- {
12
- channel: 'v3_trades',
13
- symbols
14
- } as const
15
- ]
16
- }
17
-
18
- *map(message: DyDxTrade, localTimestamp: Date): IterableIterator<Trade> {
19
- for (let trade of message.contents.trades) {
20
- yield {
21
- type: 'trade',
22
- symbol: message.id,
23
- exchange: 'dydx',
24
- id: undefined,
25
- price: Number(trade.price),
26
- amount: Number(trade.size),
27
- side: trade.side === 'SELL' ? 'sell' : 'buy',
28
- timestamp: new Date(trade.createdAt),
29
- localTimestamp: localTimestamp
30
- }
31
- }
32
- }
33
- }
34
-
35
- export class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
36
- private _offsets: { [key: string]: { [key: string]: number | undefined } } = {}
37
-
38
- canHandle(message: DyDxOrderbookSnapshot | DyDxOrderBookUpdate) {
39
- return message.channel === 'v3_orderbook'
40
- }
41
-
42
- getFilters(symbols?: string[]) {
43
- return [
44
- {
45
- channel: 'v3_orderbook',
46
- symbols
47
- } as const
48
- ]
49
- }
50
-
51
- *map(message: DyDxOrderbookSnapshot | DyDxOrderBookUpdate, localTimestamp: Date): IterableIterator<BookChange> {
52
- if (message.type === 'subscribed') {
53
- this._offsets[message.id] = {}
54
-
55
- yield {
56
- type: 'book_change',
57
- symbol: message.id,
58
- exchange: 'dydx',
59
- isSnapshot: true,
60
- bids: message.contents.bids.map((bid) => {
61
- this._offsets[message.id][bid.price] = Number(bid.offset)
62
- return {
63
- price: Number(bid.price),
64
- amount: Number(bid.size)
65
- }
66
- }),
67
-
68
- asks: message.contents.asks.map((ask) => {
69
- this._offsets[message.id][ask.price] = Number(ask.offset)
70
- return {
71
- price: Number(ask.price),
72
- amount: Number(ask.size)
73
- }
74
- }),
75
- timestamp: localTimestamp,
76
- localTimestamp
77
- }
78
- } else {
79
- // https://docs.dydx.exchange/#orderbook
80
- const updateOffset = Number(message.contents.offset)
81
-
82
- const bookChange: BookChange = {
83
- type: 'book_change',
84
- symbol: message.id,
85
- exchange: 'dydx',
86
- isSnapshot: false,
87
-
88
- bids: message.contents.bids
89
- .map((bid) => {
90
- const lastPriceLevelOffset = this._offsets[message.id][bid[0]]
91
- if (lastPriceLevelOffset !== undefined && lastPriceLevelOffset >= updateOffset) {
92
- return
93
- }
94
-
95
- return {
96
- price: Number(bid[0]),
97
- amount: Number(bid[1])
98
- }
99
- })
100
- .filter((b) => b !== undefined) as BookPriceLevel[],
101
-
102
- asks: message.contents.asks
103
- .map((ask) => {
104
- const lastPriceLevelOffset = this._offsets[message.id][ask[0]]
105
- if (lastPriceLevelOffset !== undefined && lastPriceLevelOffset >= updateOffset) {
106
- return
107
- }
108
-
109
- return {
110
- price: Number(ask[0]),
111
- amount: Number(ask[1])
112
- }
113
- })
114
- .filter((b) => b !== undefined) as BookPriceLevel[],
115
-
116
- timestamp: localTimestamp,
117
- localTimestamp
118
- }
119
-
120
- for (const bid of message.contents.bids) {
121
- this._offsets[message.id][bid[0]] = updateOffset
122
- }
123
-
124
- for (const ask of message.contents.asks) {
125
- this._offsets[message.id][ask[0]] = updateOffset
126
- }
127
-
128
- if (bookChange.bids.length > 0 || bookChange.asks.length > 0) {
129
- yield bookChange
130
- }
131
- }
132
- }
133
- }
134
-
135
- export class DydxDerivativeTickerMapper implements Mapper<'dydx', DerivativeTicker> {
136
- private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
137
-
138
- canHandle(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade) {
139
- return message.channel === 'v3_markets' || (message.channel === 'v3_trades' && message.type === 'channel_data')
140
- }
141
-
142
- getFilters(symbols?: string[]) {
143
- return [
144
- {
145
- channel: 'v3_markets',
146
- symbols: [] as string[]
147
- } as const,
148
- {
149
- channel: 'v3_trades',
150
- symbols
151
- } as const
152
- ]
153
- }
154
-
155
- *map(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade, localTimestamp: Date): IterableIterator<DerivativeTicker> {
156
- if (message.channel === 'v3_trades') {
157
- const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(message.id, 'dydx')
158
- pendingTickerInfo.updateLastPrice(Number(message.contents.trades[message.contents.trades.length - 1].price))
159
-
160
- return
161
- }
162
-
163
- const contents = message.type === 'subscribed' ? message.contents.markets : message.contents
164
-
165
- for (const key in contents) {
166
- const marketInfo = contents[key]
167
-
168
- const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(key, 'dydx')
169
-
170
- if (marketInfo.indexPrice !== undefined) {
171
- pendingTickerInfo.updateIndexPrice(Number(marketInfo.indexPrice))
172
- }
173
- if (marketInfo.oraclePrice !== undefined) {
174
- pendingTickerInfo.updateMarkPrice(Number(marketInfo.oraclePrice))
175
- }
176
- if (marketInfo.openInterest !== undefined) {
177
- pendingTickerInfo.updateOpenInterest(Number(marketInfo.openInterest))
178
- }
179
-
180
- if (marketInfo.nextFundingRate !== undefined) {
181
- pendingTickerInfo.updateFundingRate(Number(marketInfo.nextFundingRate))
182
- }
183
-
184
- if (marketInfo.nextFundingAt !== undefined) {
185
- pendingTickerInfo.updateFundingTimestamp(new Date(marketInfo.nextFundingAt))
186
- }
187
-
188
- pendingTickerInfo.updateTimestamp(localTimestamp)
189
-
190
- if (pendingTickerInfo.hasChanged()) {
191
- yield pendingTickerInfo.getSnapshot(localTimestamp)
192
- }
193
- }
194
- }
195
- }
196
-
197
- type DyDxTrade = {
198
- type: 'channel_data'
199
- connection_id: 'e368fe1e-a007-44bd-9532-8eacc81a8bbc'
200
- message_id: 229
201
- id: 'BTC-USD'
202
- channel: 'v3_trades'
203
- contents: {
204
- trades: [
205
- { size: '0.075'; side: 'SELL'; price: '57696'; createdAt: '2021-05-01T00:00:34.046Z' },
206
- { size: '0.425'; side: 'SELL'; price: '57673'; createdAt: '2021-05-01T00:00:34.046Z' }
207
- ]
208
- }
209
- }
210
-
211
- type DyDxOrderbookSnapshot = {
212
- type: 'subscribed'
213
- connection_id: '22be6448-1464-45ff-ae7d-1204eac64d0f'
214
- message_id: 1
215
- channel: 'v3_orderbook'
216
- id: '1INCH-USD'
217
- contents: {
218
- bids: [{ price: '5'; offset: '118546101'; size: '50' }]
219
- asks: [{ price: '7'; offset: '120842096'; size: '20' }]
220
- }
221
- }
222
-
223
- type DyDxOrderBookUpdate = {
224
- type: 'channel_data'
225
- connection_id: '22be6448-1464-45ff-ae7d-1204eac64d0f'
226
- message_id: 161
227
- id: '1INCH-USD'
228
- channel: 'v3_orderbook'
229
- contents: {
230
- offset: '125090042'
231
- bids: [string, string][]
232
- asks: [string, string][]
233
- }
234
- }
235
-
236
- type DydxMarketsSnapshot = {
237
- type: 'subscribed'
238
- connection_id: '8c11ee31-dbca-49fa-9df0-fc973948b7b5'
239
- message_id: 3
240
- channel: 'v3_markets'
241
- contents: {
242
- markets: {
243
- [key: string]: {
244
- market: 'BTC-USD'
245
- status: 'ONLINE'
246
- baseAsset: 'BTC'
247
- quoteAsset: 'USD'
248
- stepSize: '0.0001'
249
- tickSize: '1'
250
- indexPrice: '57794.7000'
251
- oraclePrice: '57880.5200'
252
- priceChange24H: '4257.9'
253
- nextFundingRate: '0.0000587260'
254
- nextFundingAt: '2021-05-01T00:00:00.000Z'
255
- minOrderSize: '0.001'
256
- type: 'PERPETUAL'
257
- initialMarginFraction: '0.04'
258
- maintenanceMarginFraction: '0.03'
259
- volume24H: '4710467.697100'
260
- trades24H: '663'
261
- openInterest: '101.2026'
262
- incrementalInitialMarginFraction: '0.01'
263
- incrementalPositionSize: '0.5'
264
- maxPositionSize: '30'
265
- baselinePositionSize: '1.0'
266
- allTimeLiquidationQuoteVolume: '3001153.615633'
267
- dailyLiquidationQuoteVolume: '6047.074828'
268
- }
269
- }
270
- }
271
- }
272
-
273
- type DyDxMarketsUpdate = {
274
- type: 'channel_data'
275
- connection_id: '8c11ee31-dbca-49fa-9df0-fc973948b7b5'
276
- message_id: 221
277
- channel: 'v3_markets'
278
- contents: {
279
- [key: string]: {
280
- market: 'BTC-USD'
281
- status: 'ONLINE'
282
- baseAsset: 'BTC'
283
- quoteAsset: 'USD'
284
- stepSize: '0.0001'
285
- tickSize: '1'
286
- indexPrice: '57794.7000'
287
- oraclePrice: '57880.5200'
288
- priceChange24H: '4257.9'
289
- nextFundingRate: '0.0000587260'
290
- nextFundingAt: '2021-05-01T00:00:00.000Z'
291
- minOrderSize: '0.001'
292
- type: 'PERPETUAL'
293
- initialMarginFraction: '0.04'
294
- maintenanceMarginFraction: '0.03'
295
- volume24H: '4710467.697100'
296
- trades24H: '663'
297
- openInterest: '101.2026'
298
- incrementalInitialMarginFraction: '0.01'
299
- incrementalPositionSize: '0.5'
300
- maxPositionSize: '30'
301
- baselinePositionSize: '1.0'
302
- allTimeLiquidationQuoteVolume: '3001153.615633'
303
- dailyLiquidationQuoteVolume: '6047.074828'
304
- }
305
- }
306
- }
1
+ import { Mapper, PendingTickerInfoHelper } from './mapper'
2
+ import { Trade, BookChange, DerivativeTicker, BookPriceLevel } from '../types'
3
+
4
+ export class DydxTradesMapper implements Mapper<'dydx', Trade> {
5
+ canHandle(message: DyDxTrade) {
6
+ return message.channel === 'v3_trades' && message.type === 'channel_data'
7
+ }
8
+
9
+ getFilters(symbols?: string[]) {
10
+ return [
11
+ {
12
+ channel: 'v3_trades',
13
+ symbols
14
+ } as const
15
+ ]
16
+ }
17
+
18
+ *map(message: DyDxTrade, localTimestamp: Date): IterableIterator<Trade> {
19
+ for (let trade of message.contents.trades) {
20
+ yield {
21
+ type: 'trade',
22
+ symbol: message.id,
23
+ exchange: 'dydx',
24
+ id: undefined,
25
+ price: Number(trade.price),
26
+ amount: Number(trade.size),
27
+ side: trade.side === 'SELL' ? 'sell' : 'buy',
28
+ timestamp: trade.createdAt ? new Date(trade.createdAt) : localTimestamp,
29
+ localTimestamp: localTimestamp
30
+ }
31
+ }
32
+ }
33
+ }
34
+
35
+ export class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
36
+ private _offsets: { [key: string]: { [key: string]: number | undefined } } = {}
37
+
38
+ canHandle(message: DyDxOrderbookSnapshot | DyDxOrderBookUpdate) {
39
+ return message.channel === 'v3_orderbook'
40
+ }
41
+
42
+ getFilters(symbols?: string[]) {
43
+ return [
44
+ {
45
+ channel: 'v3_orderbook',
46
+ symbols
47
+ } as const
48
+ ]
49
+ }
50
+
51
+ *map(message: DyDxOrderbookSnapshot | DyDxOrderBookUpdate, localTimestamp: Date): IterableIterator<BookChange> {
52
+ if (message.type === 'subscribed') {
53
+ this._offsets[message.id] = {}
54
+
55
+ yield {
56
+ type: 'book_change',
57
+ symbol: message.id,
58
+ exchange: 'dydx',
59
+ isSnapshot: true,
60
+ bids: message.contents.bids.map((bid) => {
61
+ this._offsets[message.id][bid.price] = Number(bid.offset)
62
+ return {
63
+ price: Number(bid.price),
64
+ amount: Number(bid.size)
65
+ }
66
+ }),
67
+
68
+ asks: message.contents.asks.map((ask) => {
69
+ this._offsets[message.id][ask.price] = Number(ask.offset)
70
+ return {
71
+ price: Number(ask.price),
72
+ amount: Number(ask.size)
73
+ }
74
+ }),
75
+ timestamp: localTimestamp,
76
+ localTimestamp
77
+ }
78
+ } else {
79
+ // https://docs.dydx.exchange/#orderbook
80
+ const updateOffset = Number(message.contents.offset)
81
+
82
+ const bookChange: BookChange = {
83
+ type: 'book_change',
84
+ symbol: message.id,
85
+ exchange: 'dydx',
86
+ isSnapshot: false,
87
+
88
+ bids: message.contents.bids
89
+ .map((bid) => {
90
+ const lastPriceLevelOffset = this._offsets[message.id][bid[0]]
91
+ if (lastPriceLevelOffset !== undefined && lastPriceLevelOffset >= updateOffset) {
92
+ return
93
+ }
94
+
95
+ return {
96
+ price: Number(bid[0]),
97
+ amount: Number(bid[1])
98
+ }
99
+ })
100
+ .filter((b) => b !== undefined) as BookPriceLevel[],
101
+
102
+ asks: message.contents.asks
103
+ .map((ask) => {
104
+ const lastPriceLevelOffset = this._offsets[message.id][ask[0]]
105
+ if (lastPriceLevelOffset !== undefined && lastPriceLevelOffset >= updateOffset) {
106
+ return
107
+ }
108
+
109
+ return {
110
+ price: Number(ask[0]),
111
+ amount: Number(ask[1])
112
+ }
113
+ })
114
+ .filter((b) => b !== undefined) as BookPriceLevel[],
115
+
116
+ timestamp: localTimestamp,
117
+ localTimestamp
118
+ }
119
+
120
+ for (const bid of message.contents.bids) {
121
+ this._offsets[message.id][bid[0]] = updateOffset
122
+ }
123
+
124
+ for (const ask of message.contents.asks) {
125
+ this._offsets[message.id][ask[0]] = updateOffset
126
+ }
127
+
128
+ if (bookChange.bids.length > 0 || bookChange.asks.length > 0) {
129
+ yield bookChange
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ export class DydxDerivativeTickerMapper implements Mapper<'dydx', DerivativeTicker> {
136
+ private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
137
+
138
+ canHandle(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade) {
139
+ return message.channel === 'v3_markets' || (message.channel === 'v3_trades' && message.type === 'channel_data')
140
+ }
141
+
142
+ getFilters(symbols?: string[]) {
143
+ return [
144
+ {
145
+ channel: 'v3_markets',
146
+ symbols: [] as string[]
147
+ } as const,
148
+ {
149
+ channel: 'v3_trades',
150
+ symbols
151
+ } as const
152
+ ]
153
+ }
154
+
155
+ *map(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade, localTimestamp: Date): IterableIterator<DerivativeTicker> {
156
+ if (message.channel === 'v3_trades') {
157
+ const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(message.id, 'dydx')
158
+ pendingTickerInfo.updateLastPrice(Number(message.contents.trades[message.contents.trades.length - 1].price))
159
+
160
+ return
161
+ }
162
+
163
+ const contents = message.type === 'subscribed' ? message.contents.markets : message.contents
164
+
165
+ for (const key in contents) {
166
+ const marketInfo = contents[key]
167
+
168
+ const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(key, 'dydx')
169
+
170
+ if (marketInfo.indexPrice !== undefined) {
171
+ pendingTickerInfo.updateIndexPrice(Number(marketInfo.indexPrice))
172
+ }
173
+ if (marketInfo.oraclePrice !== undefined) {
174
+ pendingTickerInfo.updateMarkPrice(Number(marketInfo.oraclePrice))
175
+ }
176
+ if (marketInfo.openInterest !== undefined) {
177
+ pendingTickerInfo.updateOpenInterest(Number(marketInfo.openInterest))
178
+ }
179
+
180
+ if (marketInfo.nextFundingRate !== undefined) {
181
+ pendingTickerInfo.updateFundingRate(Number(marketInfo.nextFundingRate))
182
+ }
183
+
184
+ if (marketInfo.nextFundingAt !== undefined) {
185
+ pendingTickerInfo.updateFundingTimestamp(new Date(marketInfo.nextFundingAt))
186
+ }
187
+
188
+ pendingTickerInfo.updateTimestamp(localTimestamp)
189
+
190
+ if (pendingTickerInfo.hasChanged()) {
191
+ yield pendingTickerInfo.getSnapshot(localTimestamp)
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ type DyDxTrade = {
198
+ type: 'channel_data'
199
+ connection_id: 'e368fe1e-a007-44bd-9532-8eacc81a8bbc'
200
+ message_id: 229
201
+ id: 'BTC-USD'
202
+ channel: 'v3_trades'
203
+ contents: {
204
+ trades: [{ size: '0.075'; side: 'SELL'; price: '57696'; createdAt: '2021-05-01T00:00:34.046Z' | undefined }]
205
+ }
206
+ }
207
+
208
+ type DyDxOrderbookSnapshot = {
209
+ type: 'subscribed'
210
+ connection_id: '22be6448-1464-45ff-ae7d-1204eac64d0f'
211
+ message_id: 1
212
+ channel: 'v3_orderbook'
213
+ id: '1INCH-USD'
214
+ contents: {
215
+ bids: [{ price: '5'; offset: '118546101'; size: '50' }]
216
+ asks: [{ price: '7'; offset: '120842096'; size: '20' }]
217
+ }
218
+ }
219
+
220
+ type DyDxOrderBookUpdate = {
221
+ type: 'channel_data'
222
+ connection_id: '22be6448-1464-45ff-ae7d-1204eac64d0f'
223
+ message_id: 161
224
+ id: '1INCH-USD'
225
+ channel: 'v3_orderbook'
226
+ contents: {
227
+ offset: '125090042'
228
+ bids: [string, string][]
229
+ asks: [string, string][]
230
+ }
231
+ }
232
+
233
+ type DydxMarketsSnapshot = {
234
+ type: 'subscribed'
235
+ connection_id: '8c11ee31-dbca-49fa-9df0-fc973948b7b5'
236
+ message_id: 3
237
+ channel: 'v3_markets'
238
+ contents: {
239
+ markets: {
240
+ [key: string]: {
241
+ market: 'BTC-USD'
242
+ status: 'ONLINE'
243
+ baseAsset: 'BTC'
244
+ quoteAsset: 'USD'
245
+ stepSize: '0.0001'
246
+ tickSize: '1'
247
+ indexPrice: '57794.7000'
248
+ oraclePrice: '57880.5200'
249
+ priceChange24H: '4257.9'
250
+ nextFundingRate: '0.0000587260'
251
+ nextFundingAt: '2021-05-01T00:00:00.000Z'
252
+ minOrderSize: '0.001'
253
+ type: 'PERPETUAL'
254
+ initialMarginFraction: '0.04'
255
+ maintenanceMarginFraction: '0.03'
256
+ volume24H: '4710467.697100'
257
+ trades24H: '663'
258
+ openInterest: '101.2026'
259
+ incrementalInitialMarginFraction: '0.01'
260
+ incrementalPositionSize: '0.5'
261
+ maxPositionSize: '30'
262
+ baselinePositionSize: '1.0'
263
+ allTimeLiquidationQuoteVolume: '3001153.615633'
264
+ dailyLiquidationQuoteVolume: '6047.074828'
265
+ }
266
+ }
267
+ }
268
+ }
269
+
270
+ type DyDxMarketsUpdate = {
271
+ type: 'channel_data'
272
+ connection_id: '8c11ee31-dbca-49fa-9df0-fc973948b7b5'
273
+ message_id: 221
274
+ channel: 'v3_markets'
275
+ contents: {
276
+ [key: string]: {
277
+ market: 'BTC-USD'
278
+ status: 'ONLINE'
279
+ baseAsset: 'BTC'
280
+ quoteAsset: 'USD'
281
+ stepSize: '0.0001'
282
+ tickSize: '1'
283
+ indexPrice: '57794.7000'
284
+ oraclePrice: '57880.5200'
285
+ priceChange24H: '4257.9'
286
+ nextFundingRate: '0.0000587260'
287
+ nextFundingAt: '2021-05-01T00:00:00.000Z'
288
+ minOrderSize: '0.001'
289
+ type: 'PERPETUAL'
290
+ initialMarginFraction: '0.04'
291
+ maintenanceMarginFraction: '0.03'
292
+ volume24H: '4710467.697100'
293
+ trades24H: '663'
294
+ openInterest: '101.2026'
295
+ incrementalInitialMarginFraction: '0.01'
296
+ incrementalPositionSize: '0.5'
297
+ maxPositionSize: '30'
298
+ baselinePositionSize: '1.0'
299
+ allTimeLiquidationQuoteVolume: '3001153.615633'
300
+ dailyLiquidationQuoteVolume: '6047.074828'
301
+ }
302
+ }
303
+ }