tardis-dev 16.5.1 → 16.6.1
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/README.md +4 -4
- 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/instrumentinfo.d.ts +1 -1
- package/dist/instrumentinfo.d.ts.map +1 -1
- package/dist/instrumentinfo.js +3 -1
- package/dist/instrumentinfo.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 +15 -5
- 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 +263 -5
- 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/realtimefeeds/woox.d.ts +1 -0
- package/dist/realtimefeeds/woox.d.ts.map +1 -1
- package/dist/realtimefeeds/woox.js +41 -25
- package/dist/realtimefeeds/woox.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/instrumentinfo.ts +5 -2
- 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 +16 -5
- 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 +380 -6
- 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/realtimefeeds/woox.ts +63 -26
- package/src/replay.ts +73 -15
|
@@ -1,63 +1,73 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getJSON } from '../handy.ts'
|
|
2
2
|
import { Filter } from '../types.ts'
|
|
3
3
|
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
|
+
const ORDER_BOOK_DEPTH = 50
|
|
6
|
+
|
|
5
7
|
export class WooxRealTimeFeed extends RealTimeFeedBase {
|
|
6
|
-
protected wssURL = 'wss://wss.
|
|
8
|
+
protected wssURL = 'wss://wss.woox.io/v3/public'
|
|
9
|
+
protected readonly httpURL = 'https://api.woox.io'
|
|
7
10
|
|
|
8
11
|
protected mapToSubscribeMessages(filters: Filter<string>[]): any[] {
|
|
9
|
-
|
|
12
|
+
const symbolToTopics = new Map<string, string[]>()
|
|
13
|
+
|
|
14
|
+
filters
|
|
10
15
|
.filter((filter) => filter.channel !== 'orderbook')
|
|
11
|
-
.
|
|
16
|
+
.forEach((filter) => {
|
|
12
17
|
if (!filter.symbols || filter.symbols.length === 0) {
|
|
13
18
|
throw new Error('WooxRealTimeFeed requires explicitly specified symbols when subscribing to live feed')
|
|
14
19
|
}
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
event: 'subscribe'
|
|
21
|
-
}
|
|
21
|
+
filter.symbols.forEach((symbol) => {
|
|
22
|
+
const topics = symbolToTopics.get(symbol) ?? []
|
|
23
|
+
topics.push(buildTopic(symbol, filter.channel))
|
|
24
|
+
symbolToTopics.set(symbol, topics)
|
|
22
25
|
})
|
|
23
26
|
})
|
|
24
|
-
|
|
27
|
+
|
|
28
|
+
return Array.from(symbolToTopics.entries()).map(([symbol, topics]) => ({
|
|
29
|
+
id: symbol,
|
|
30
|
+
cmd: 'subscribe',
|
|
31
|
+
params: topics
|
|
32
|
+
}))
|
|
25
33
|
}
|
|
26
34
|
|
|
27
35
|
protected async provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean) {
|
|
28
36
|
const orderbookFilter = filters.find((f) => f.channel === 'orderbook')
|
|
29
|
-
if (!orderbookFilter) {
|
|
37
|
+
if (!orderbookFilter?.symbols) {
|
|
30
38
|
return
|
|
31
39
|
}
|
|
32
40
|
|
|
33
|
-
await wait(200)
|
|
34
|
-
|
|
35
41
|
for (let symbol of orderbookFilter.symbols!) {
|
|
36
42
|
if (shouldCancel()) {
|
|
37
43
|
return
|
|
38
44
|
}
|
|
39
45
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
})
|
|
46
|
+
const response = await getJSON<WooxOrderBookSnapshotResponse>(
|
|
47
|
+
`${this.httpURL}/v3/public/orderbook?symbol=${symbol}&maxLevel=${ORDER_BOOK_DEPTH}`
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
if (response.data.success === false) {
|
|
51
|
+
throw new Error(`Woox orderbook snapshot request failed: ${JSON.stringify(response.data)}`)
|
|
52
|
+
}
|
|
48
53
|
|
|
49
|
-
|
|
54
|
+
this.manualSnapshotsBuffer.push({
|
|
55
|
+
topic: buildTopic(symbol, 'orderbook'),
|
|
56
|
+
ts: response.data.timestamp,
|
|
57
|
+
generated: true,
|
|
58
|
+
data: response.data.data
|
|
59
|
+
})
|
|
50
60
|
}
|
|
51
61
|
|
|
52
|
-
this.debug('
|
|
62
|
+
this.debug('fetched orderbook snapshots for: %s', orderbookFilter.symbols)
|
|
53
63
|
}
|
|
54
64
|
|
|
55
65
|
protected messageIsError(message: any): boolean {
|
|
56
|
-
return message.success === false || message.errorMsg !== undefined
|
|
66
|
+
return message.success === false || message.errorMsg !== undefined || message.cmd === 'ERROR'
|
|
57
67
|
}
|
|
58
68
|
|
|
59
69
|
protected messageIsHeartbeat(message: any): boolean {
|
|
60
|
-
return message.event === 'ping'
|
|
70
|
+
return message.event === 'ping' || message.cmd === 'PING'
|
|
61
71
|
}
|
|
62
72
|
|
|
63
73
|
protected onMessage(msg: any) {
|
|
@@ -66,5 +76,32 @@ export class WooxRealTimeFeed extends RealTimeFeedBase {
|
|
|
66
76
|
event: 'ping'
|
|
67
77
|
})
|
|
68
78
|
}
|
|
79
|
+
if (msg.cmd === 'PING') {
|
|
80
|
+
this.send({
|
|
81
|
+
cmd: 'PONG'
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function buildTopic(symbol: string, channel: string) {
|
|
88
|
+
if (channel === 'orderbook' || channel === 'orderbookupdate') {
|
|
89
|
+
return `${channel}@${symbol}@${ORDER_BOOK_DEPTH}`
|
|
69
90
|
}
|
|
91
|
+
|
|
92
|
+
return `${channel}@${symbol}`
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
type WooxOrderBookSnapshotResponse = {
|
|
96
|
+
success: boolean
|
|
97
|
+
timestamp: number
|
|
98
|
+
data: {
|
|
99
|
+
asks: WooxOrderBookSnapshotLevel[]
|
|
100
|
+
bids: WooxOrderBookSnapshotLevel[]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
type WooxOrderBookSnapshotLevel = {
|
|
105
|
+
price: string
|
|
106
|
+
quantity: string
|
|
70
107
|
}
|
package/src/replay.ts
CHANGED
|
@@ -275,27 +275,14 @@ export function replayNormalized<T extends Exchange, U extends MapperFactory<T,
|
|
|
275
275
|
...normalizers: U
|
|
276
276
|
): AsyncIterableIterator<ReplayNormalizedMessage<U, Z>> {
|
|
277
277
|
const fromDate = parseAsUTCDate(from)
|
|
278
|
+
const toDate = parseAsUTCDate(to)
|
|
278
279
|
|
|
279
280
|
validateReplayNormalizedOptions(fromDate, normalizers)
|
|
280
281
|
|
|
281
|
-
//TODO: zrovi replay dzien po dniu, tak ze kazdego dnia przekazuje swierze filters
|
|
282
|
-
|
|
283
282
|
const createMappers = (localTimestamp: Date) => normalizers.map((m) => m(exchange, localTimestamp))
|
|
284
283
|
const mappers = createMappers(fromDate)
|
|
285
284
|
const filters = getFilters(mappers, symbols)
|
|
286
285
|
|
|
287
|
-
const messages = replay({
|
|
288
|
-
exchange,
|
|
289
|
-
from,
|
|
290
|
-
to,
|
|
291
|
-
withDisconnects: true,
|
|
292
|
-
filters,
|
|
293
|
-
apiKey,
|
|
294
|
-
withMicroseconds: true,
|
|
295
|
-
autoCleanup,
|
|
296
|
-
waitWhenDataNotYetAvailable
|
|
297
|
-
})
|
|
298
|
-
|
|
299
286
|
// filter normalized messages by symbol as some exchanges do not provide server side filtering so we could end up with messages
|
|
300
287
|
// for symbols we've not requested for
|
|
301
288
|
const upperCaseSymbols = symbols !== undefined ? symbols.map((s) => s.toUpperCase()) : undefined
|
|
@@ -303,7 +290,78 @@ export function replayNormalized<T extends Exchange, U extends MapperFactory<T,
|
|
|
303
290
|
return upperCaseSymbols === undefined || upperCaseSymbols.length === 0 || upperCaseSymbols.includes(symbol)
|
|
304
291
|
}
|
|
305
292
|
|
|
306
|
-
|
|
293
|
+
const segments = getReplayNormalizedSegments(exchange, normalizers, fromDate, toDate)
|
|
294
|
+
|
|
295
|
+
if (segments.length <= 1) {
|
|
296
|
+
const messages = replay({
|
|
297
|
+
exchange,
|
|
298
|
+
from,
|
|
299
|
+
to,
|
|
300
|
+
withDisconnects: true,
|
|
301
|
+
filters,
|
|
302
|
+
apiKey,
|
|
303
|
+
withMicroseconds: true,
|
|
304
|
+
autoCleanup,
|
|
305
|
+
waitWhenDataNotYetAvailable
|
|
306
|
+
})
|
|
307
|
+
|
|
308
|
+
return normalizeMessages(exchange, undefined, messages, mappers, createMappers, withDisconnectMessages, filter)
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return replayNormalizedSegments()
|
|
312
|
+
|
|
313
|
+
async function* replayNormalizedSegments() {
|
|
314
|
+
for (let i = 0; i < segments.length; i++) {
|
|
315
|
+
const { from: segmentFrom, to: segmentTo } = segments[i]
|
|
316
|
+
const segmentMappers = i === 0 ? mappers : createMappers(segmentFrom)
|
|
317
|
+
const segmentFilters = getFilters(segmentMappers, symbols)
|
|
318
|
+
|
|
319
|
+
const segmentMessages = replay({
|
|
320
|
+
exchange,
|
|
321
|
+
from: segmentFrom.toISOString(),
|
|
322
|
+
to: segmentTo.toISOString(),
|
|
323
|
+
withDisconnects: true,
|
|
324
|
+
filters: segmentFilters,
|
|
325
|
+
apiKey,
|
|
326
|
+
withMicroseconds: true,
|
|
327
|
+
autoCleanup,
|
|
328
|
+
waitWhenDataNotYetAvailable
|
|
329
|
+
})
|
|
330
|
+
|
|
331
|
+
yield* normalizeMessages(exchange, undefined, segmentMessages, segmentMappers, createMappers, withDisconnectMessages, filter)
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function getReplayNormalizedSegments<T extends Exchange>(exchange: T, normalizers: MapperFactory<T, any>[], fromDate: Date, toDate: Date) {
|
|
337
|
+
const fromTime = fromDate.valueOf()
|
|
338
|
+
const toTime = toDate.valueOf()
|
|
339
|
+
if (Number.isFinite(fromTime) === false || Number.isFinite(toTime) === false || fromTime >= toTime) {
|
|
340
|
+
return [{ from: fromDate, to: toDate }]
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const switchTimes = new Set<number>()
|
|
344
|
+
for (const normalizer of normalizers) {
|
|
345
|
+
const switchDates = normalizer.getSwitchDates?.(exchange) ?? []
|
|
346
|
+
for (const switchDate of switchDates) {
|
|
347
|
+
const switchTime = switchDate.valueOf()
|
|
348
|
+
if (fromTime < switchTime && switchTime < toTime) {
|
|
349
|
+
switchTimes.add(switchTime)
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
const switchDates = [...switchTimes].sort((a, b) => a - b).map((switchTime) => new Date(switchTime))
|
|
355
|
+
const segments: { from: Date; to: Date }[] = []
|
|
356
|
+
let segmentFrom = fromDate
|
|
357
|
+
|
|
358
|
+
for (const switchDate of switchDates) {
|
|
359
|
+
segments.push({ from: segmentFrom, to: switchDate })
|
|
360
|
+
segmentFrom = switchDate
|
|
361
|
+
}
|
|
362
|
+
segments.push({ from: segmentFrom, to: toDate })
|
|
363
|
+
|
|
364
|
+
return segments
|
|
307
365
|
}
|
|
308
366
|
|
|
309
367
|
function validateReplayOptions<T extends Exchange>(exchange: T, from: string, to: string, filters: FilterForExchange[T][]) {
|