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/dist/replay.js
CHANGED
|
@@ -6,23 +6,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.replayNormalized = exports.replay = void 0;
|
|
7
7
|
const fs_extra_1 = require("fs-extra");
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const stream_1 = require("stream");
|
|
9
10
|
const worker_threads_1 = require("worker_threads");
|
|
10
11
|
const zlib_1 = require("zlib");
|
|
11
12
|
const binarysplit_1 = require("./binarysplit");
|
|
13
|
+
const clearcache_1 = require("./clearcache");
|
|
12
14
|
const consts_1 = require("./consts");
|
|
13
15
|
const debug_1 = require("./debug");
|
|
14
16
|
const handy_1 = require("./handy");
|
|
15
17
|
const mappers_1 = require("./mappers");
|
|
16
18
|
const options_1 = require("./options");
|
|
17
|
-
const clearcache_1 = require("./clearcache");
|
|
18
19
|
async function* replay({ exchange, from, to, filters, skipDecoding = undefined, withDisconnects = undefined, apiKey = undefined, withMicroseconds = undefined, autoCleanup = undefined, waitWhenDataNotYetAvailable = undefined }) {
|
|
19
20
|
validateReplayOptions(exchange, from, to, filters);
|
|
20
|
-
const fromDate = handy_1.parseAsUTCDate(from);
|
|
21
|
-
const toDate = handy_1.parseAsUTCDate(to);
|
|
21
|
+
const fromDate = (0, handy_1.parseAsUTCDate)(from);
|
|
22
|
+
const toDate = (0, handy_1.parseAsUTCDate)(to);
|
|
22
23
|
const cachedSlicePaths = new Map();
|
|
23
24
|
let replayError;
|
|
24
|
-
debug_1.debug('replay for exchange: %s started - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
25
|
-
const options = options_1.getOptions();
|
|
25
|
+
(0, debug_1.debug)('replay for exchange: %s started - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
26
|
+
const options = (0, options_1.getOptions)();
|
|
26
27
|
// initialize worker thread that will fetch and cache data feed slices and "report back" by setting proper key/values in cachedSlicePaths
|
|
27
28
|
const payload = {
|
|
28
29
|
cacheDir: options.cacheDir,
|
|
@@ -35,32 +36,25 @@ async function* replay({ exchange, from, to, filters, skipDecoding = undefined,
|
|
|
35
36
|
filters: filters || [],
|
|
36
37
|
waitWhenDataNotYetAvailable
|
|
37
38
|
};
|
|
38
|
-
const worker = new
|
|
39
|
-
workerData: payload
|
|
40
|
-
});
|
|
39
|
+
const worker = new ReliableWorker(payload);
|
|
41
40
|
worker.on('message', (message) => {
|
|
42
41
|
cachedSlicePaths.set(message.sliceKey, message.slicePath);
|
|
43
42
|
});
|
|
44
43
|
worker.on('error', (err) => {
|
|
45
|
-
debug_1.debug('worker error %o', err);
|
|
44
|
+
(0, debug_1.debug)('worker error %o', err);
|
|
46
45
|
replayError = err;
|
|
47
46
|
});
|
|
48
|
-
worker.on('exit', (code) => {
|
|
49
|
-
debug_1.debug('worker finished with code: %d', code);
|
|
50
|
-
});
|
|
51
47
|
try {
|
|
52
48
|
// date is always formatted to have length of 28 so we can skip looking for first space in line and use it
|
|
53
49
|
// as hardcoded value
|
|
54
50
|
const DATE_MESSAGE_SPLIT_INDEX = 28;
|
|
55
|
-
//
|
|
51
|
+
// more lenient gzip decompression
|
|
56
52
|
// see https://github.com/request/request/pull/2492 and https://github.com/node-fetch/node-fetch/pull/239
|
|
57
|
-
const ZLIB_OPTIONS =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
: { chunkSize: 128 * 1024 };
|
|
53
|
+
const ZLIB_OPTIONS = {
|
|
54
|
+
chunkSize: 128 * 1024,
|
|
55
|
+
flush: zlib_1.constants.Z_SYNC_FLUSH,
|
|
56
|
+
finishFlush: zlib_1.constants.Z_SYNC_FLUSH
|
|
57
|
+
};
|
|
64
58
|
// helper flag that helps us not yielding two subsequent undefined/disconnect messages
|
|
65
59
|
let lastMessageWasUndefined = false;
|
|
66
60
|
let currentSliceDate = new Date(fromDate);
|
|
@@ -68,7 +62,7 @@ async function* replay({ exchange, from, to, filters, skipDecoding = undefined,
|
|
|
68
62
|
// get cached slice paths, read them as file streams, decompress, split by new lines and yield as messages
|
|
69
63
|
while (currentSliceDate < toDate) {
|
|
70
64
|
const sliceKey = currentSliceDate.toISOString();
|
|
71
|
-
debug_1.debug('getting slice: %s, exchange: %s', sliceKey, exchange);
|
|
65
|
+
(0, debug_1.debug)('getting slice: %s, exchange: %s', sliceKey, exchange);
|
|
72
66
|
let cachedSlicePath;
|
|
73
67
|
while (cachedSlicePath === undefined) {
|
|
74
68
|
cachedSlicePath = cachedSlicePaths.get(sliceKey);
|
|
@@ -78,22 +72,22 @@ async function* replay({ exchange, from, to, filters, skipDecoding = undefined,
|
|
|
78
72
|
}
|
|
79
73
|
if (cachedSlicePath === undefined) {
|
|
80
74
|
// if response for requested date is not ready yet wait 100ms and try again
|
|
81
|
-
debug_1.debug('waiting for slice: %s, exchange: %s', sliceKey, exchange);
|
|
82
|
-
await handy_1.wait(100);
|
|
75
|
+
(0, debug_1.debug)('waiting for slice: %s, exchange: %s', sliceKey, exchange);
|
|
76
|
+
await (0, handy_1.wait)(100);
|
|
83
77
|
}
|
|
84
78
|
}
|
|
85
79
|
// response is a path to file on disk let' read it as stream
|
|
86
|
-
const linesStream = fs_extra_1.createReadStream(cachedSlicePath, { highWaterMark: 128 * 1024 })
|
|
80
|
+
const linesStream = (0, fs_extra_1.createReadStream)(cachedSlicePath, { highWaterMark: 128 * 1024 })
|
|
87
81
|
// unzip it
|
|
88
|
-
.pipe(zlib_1.createGunzip(ZLIB_OPTIONS))
|
|
82
|
+
.pipe((0, zlib_1.createGunzip)(ZLIB_OPTIONS))
|
|
89
83
|
.on('error', function onGunzipError(err) {
|
|
90
|
-
debug_1.debug('gunzip error %o', err);
|
|
84
|
+
(0, debug_1.debug)('gunzip error %o', err);
|
|
91
85
|
linesStream.destroy(err);
|
|
92
86
|
})
|
|
93
87
|
// and split by new line
|
|
94
88
|
.pipe(new binarysplit_1.BinarySplitStream())
|
|
95
89
|
.on('error', function onBinarySplitStreamError(err) {
|
|
96
|
-
debug_1.debug('binary split stream error %o', err);
|
|
90
|
+
(0, debug_1.debug)('binary split stream error %o', err);
|
|
97
91
|
linesStream.destroy(err);
|
|
98
92
|
});
|
|
99
93
|
let linesCount = 0;
|
|
@@ -117,7 +111,7 @@ async function* replay({ exchange, from, to, filters, skipDecoding = undefined,
|
|
|
117
111
|
if (withMicroseconds) {
|
|
118
112
|
// provide additionally fractions of millisecond at microsecond resolution
|
|
119
113
|
// local timestamp always has format like this 2019-06-01T00:03:03.1238784Z
|
|
120
|
-
localTimestamp.μs = handy_1.parseμs(localTimestampString);
|
|
114
|
+
localTimestamp.μs = (0, handy_1.parseμs)(localTimestampString);
|
|
121
115
|
}
|
|
122
116
|
yield {
|
|
123
117
|
// when skipDecoding is not set, decode timestamp to Date and message to object
|
|
@@ -133,25 +127,28 @@ async function* replay({ exchange, from, to, filters, skipDecoding = undefined,
|
|
|
133
127
|
yield undefined;
|
|
134
128
|
}
|
|
135
129
|
}
|
|
136
|
-
debug_1.debug('processed slice: %s, exchange: %s, count: %d', sliceKey, exchange, linesCount);
|
|
130
|
+
(0, debug_1.debug)('processed slice: %s, exchange: %s, count: %d', sliceKey, exchange, linesCount);
|
|
137
131
|
// remove slice key from the map as it's already processed
|
|
138
132
|
cachedSlicePaths.delete(sliceKey);
|
|
139
133
|
// move one minute forward
|
|
140
134
|
currentSliceDate.setUTCMinutes(currentSliceDate.getUTCMinutes() + 1);
|
|
141
135
|
}
|
|
142
|
-
debug_1.debug('replay for exchange: %s finished - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
136
|
+
(0, debug_1.debug)('replay for exchange: %s finished - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
143
137
|
}
|
|
144
138
|
finally {
|
|
145
139
|
if (autoCleanup) {
|
|
146
|
-
debug_1.debug('replay for exchange %s auto cleanup started - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
140
|
+
(0, debug_1.debug)('replay for exchange %s auto cleanup started - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
147
141
|
let startDate = new Date(fromDate);
|
|
148
142
|
while (startDate < toDate) {
|
|
149
|
-
clearcache_1.clearCacheSync(exchange, filters, startDate.getUTCFullYear(), startDate.getUTCMonth() + 1, startDate.getUTCDate());
|
|
150
|
-
startDate = handy_1.addDays(startDate, 1);
|
|
143
|
+
(0, clearcache_1.clearCacheSync)(exchange, filters, startDate.getUTCFullYear(), startDate.getUTCMonth() + 1, startDate.getUTCDate());
|
|
144
|
+
startDate = (0, handy_1.addDays)(startDate, 1);
|
|
151
145
|
}
|
|
152
|
-
debug_1.debug('replay for exchange %s auto cleanup finished - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
146
|
+
(0, debug_1.debug)('replay for exchange %s auto cleanup finished - from: %s, to: %s, filters: %o', exchange, fromDate.toISOString(), toDate.toISOString(), filters);
|
|
147
|
+
}
|
|
148
|
+
const underlyingWorker = worker.getUnderlyingWorker();
|
|
149
|
+
if (underlyingWorker !== undefined) {
|
|
150
|
+
await terminateWorker(underlyingWorker, 500);
|
|
153
151
|
}
|
|
154
|
-
await terminateWorker(worker, 500);
|
|
155
152
|
}
|
|
156
153
|
}
|
|
157
154
|
exports.replay = replay;
|
|
@@ -175,11 +172,11 @@ function replayNormalized({ exchange, symbols, from, to, withDisconnectMessages
|
|
|
175
172
|
if (symbols !== undefined) {
|
|
176
173
|
symbols = symbols.map((s) => s.toUpperCase());
|
|
177
174
|
}
|
|
178
|
-
const fromDate = handy_1.parseAsUTCDate(from);
|
|
175
|
+
const fromDate = (0, handy_1.parseAsUTCDate)(from);
|
|
179
176
|
validateReplayNormalizedOptions(fromDate, normalizers);
|
|
180
177
|
const createMappers = (localTimestamp) => normalizers.map((m) => m(exchange, localTimestamp));
|
|
181
178
|
const mappers = createMappers(fromDate);
|
|
182
|
-
const filters = handy_1.getFilters(mappers, symbols);
|
|
179
|
+
const filters = (0, handy_1.getFilters)(mappers, symbols);
|
|
183
180
|
const messages = replay({
|
|
184
181
|
exchange,
|
|
185
182
|
from,
|
|
@@ -196,7 +193,7 @@ function replayNormalized({ exchange, symbols, from, to, withDisconnectMessages
|
|
|
196
193
|
const filter = (symbol) => {
|
|
197
194
|
return symbols === undefined || symbols.length === 0 || symbols.includes(symbol);
|
|
198
195
|
};
|
|
199
|
-
return handy_1.normalizeMessages(exchange, messages, mappers, createMappers, withDisconnectMessages, filter);
|
|
196
|
+
return (0, handy_1.normalizeMessages)(exchange, messages, mappers, createMappers, withDisconnectMessages, filter);
|
|
200
197
|
}
|
|
201
198
|
exports.replayNormalized = replayNormalized;
|
|
202
199
|
function validateReplayOptions(exchange, from, to, filters) {
|
|
@@ -209,7 +206,7 @@ function validateReplayOptions(exchange, from, to, filters) {
|
|
|
209
206
|
if (!to || isNaN(Date.parse(to))) {
|
|
210
207
|
throw new Error(`Invalid "to" argument: ${to}. Please provide valid date string.`);
|
|
211
208
|
}
|
|
212
|
-
if (handy_1.parseAsUTCDate(to) < handy_1.parseAsUTCDate(from)) {
|
|
209
|
+
if ((0, handy_1.parseAsUTCDate)(to) < (0, handy_1.parseAsUTCDate)(from)) {
|
|
213
210
|
throw new Error(`Invalid "to" and "from" arguments combination. Please provide "to" date that is later than "from" date.`);
|
|
214
211
|
}
|
|
215
212
|
if (filters && filters.length > 0) {
|
|
@@ -228,7 +225,45 @@ function validateReplayNormalizedOptions(fromDate, normalizers) {
|
|
|
228
225
|
const hasBookChangeNormalizer = normalizers.some((n) => n === mappers_1.normalizeBookChanges);
|
|
229
226
|
const dateDoesNotStartAtTheBeginningOfTheDay = fromDate.getUTCHours() !== 0 || fromDate.getUTCMinutes() !== 0;
|
|
230
227
|
if (hasBookChangeNormalizer && dateDoesNotStartAtTheBeginningOfTheDay) {
|
|
231
|
-
debug_1.debug('Initial order book snapshots are available only at 00:00 UTC');
|
|
228
|
+
(0, debug_1.debug)('Initial order book snapshots are available only at 00:00 UTC');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
class ReliableWorker extends stream_1.EventEmitter {
|
|
232
|
+
constructor(_payload) {
|
|
233
|
+
super();
|
|
234
|
+
this._payload = _payload;
|
|
235
|
+
this._errorsCount = 0;
|
|
236
|
+
this._worker = undefined;
|
|
237
|
+
this._handleError = async (err) => {
|
|
238
|
+
(0, debug_1.debug)('underlying worker error %o', err);
|
|
239
|
+
if (err.message.includes('HttpError') === false && this._errorsCount < 30) {
|
|
240
|
+
this._errorsCount++;
|
|
241
|
+
const delayMS = Math.min(Math.pow(2, this._errorsCount) * 1000, 120 * 1000);
|
|
242
|
+
(0, debug_1.debug)('re-init worker after: %d ms', delayMS);
|
|
243
|
+
await (0, handy_1.wait)(delayMS);
|
|
244
|
+
// it was most likely unhandled socket hang up error, let's retry first with new worker and don't emit error right away
|
|
245
|
+
this._initWorker();
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this.emit('error', err);
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
this._initWorker();
|
|
252
|
+
}
|
|
253
|
+
_initWorker() {
|
|
254
|
+
this._worker = new worker_threads_1.Worker(path_1.default.resolve(__dirname, 'worker.js'), {
|
|
255
|
+
workerData: this._payload
|
|
256
|
+
});
|
|
257
|
+
this._worker.on('message', (message) => {
|
|
258
|
+
this.emit('message', message);
|
|
259
|
+
});
|
|
260
|
+
this._worker.on('error', this._handleError);
|
|
261
|
+
this._worker.on('exit', (code) => {
|
|
262
|
+
(0, debug_1.debug)('worker finished with code: %d', code);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
getUnderlyingWorker() {
|
|
266
|
+
return this._worker;
|
|
232
267
|
}
|
|
233
268
|
}
|
|
234
269
|
//# sourceMappingURL=replay.js.map
|
package/dist/replay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA2C;AAC3C,gDAAuB;AACvB,mDAAuC;AACvC,+BAA8C;AAC9C,+CAAiD;AACjD,qCAA4D;AAC5D,mCAA+B;AAC/B,mCAA+F;AAC/F,uCAA+D;AAC/D,uCAAsC;
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA2C;AAC3C,gDAAuB;AACvB,mCAAqC;AACrC,mDAAuC;AACvC,+BAA8C;AAC9C,+CAAiD;AACjD,6CAA6C;AAC7C,qCAA4D;AAC5D,mCAA+B;AAC/B,mCAA+F;AAC/F,uCAA+D;AAC/D,uCAAsC;AAI/B,KAAK,SAAS,CAAC,CAAC,MAAM,CAA2E,EACtG,QAAQ,EACR,IAAI,EACJ,EAAE,EACF,OAAO,EACP,YAAY,GAAG,SAAS,EACxB,eAAe,GAAG,SAAS,EAC3B,MAAM,GAAG,SAAS,EAClB,gBAAgB,GAAG,SAAS,EAC5B,WAAW,GAAG,SAAS,EACvB,2BAA2B,GAAG,SAAS,EAChB;IASvB,qBAAqB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;IAElD,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,IAAA,sBAAc,EAAC,EAAE,CAAC,CAAA;IACjC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAA;IAClD,IAAI,WAAW,CAAA;IACf,IAAA,aAAK,EAAC,iEAAiE,EAAE,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAA;IAEzI,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAA;IAE5B,yIAAyI;IACzI,MAAM,OAAO,GAAqB;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM;QAChC,SAAS,EAAE,OAAO,CAAC,UAAU;QAC7B,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,2BAA2B;KAC5B,CAAA;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;IAE1C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE;QAC9C,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,IAAA,aAAK,EAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;QAE7B,WAAW,GAAG,GAAG,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,IAAI;QACF,0GAA0G;QAC1G,qBAAqB;QACrB,MAAM,wBAAwB,GAAG,EAAE,CAAA;QAEnC,kCAAkC;QAClC,yGAAyG;QAEzG,MAAM,YAAY,GAAG;YACnB,SAAS,EAAE,GAAG,GAAG,IAAI;YACrB,KAAK,EAAE,gBAAS,CAAC,YAAY;YAC7B,WAAW,EAAE,gBAAS,CAAC,YAAY;SACpC,CAAA;QAED,sFAAsF;QACtF,IAAI,uBAAuB,GAAG,KAAK,CAAA;QAEnC,IAAI,gBAAgB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzC,qDAAqD;QACrD,0GAA0G;QAC1G,OAAO,gBAAgB,GAAG,MAAM,EAAE;YAChC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAA;YAE/C,IAAA,aAAK,EAAC,iCAAiC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAE5D,IAAI,eAAe,CAAA;YACnB,OAAO,eAAe,KAAK,SAAS,EAAE;gBACpC,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAEhD,uEAAuE;gBACvE,IAAI,WAAW,KAAK,SAAS,EAAE;oBAC7B,MAAM,WAAW,CAAA;iBAClB;gBAED,IAAI,eAAe,KAAK,SAAS,EAAE;oBACjC,2EAA2E;oBAC3E,IAAA,aAAK,EAAC,qCAAqC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;oBAChE,MAAM,IAAA,YAAI,EAAC,GAAG,CAAC,CAAA;iBAChB;aACF;YAED,4DAA4D;YAC5D,MAAM,WAAW,GAAG,IAAA,2BAAgB,EAAC,eAAe,EAAE,EAAE,aAAa,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;gBAClF,WAAW;iBACV,IAAI,CAAC,IAAA,mBAAY,EAAC,YAAY,CAAC,CAAC;iBAChC,EAAE,CAAC,OAAO,EAAE,SAAS,aAAa,CAAC,GAAG;gBACrC,IAAA,aAAK,EAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;gBAC7B,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC,CAAC;gBACF,wBAAwB;iBACvB,IAAI,CAAC,IAAI,+BAAiB,EAAE,CAAC;iBAC7B,EAAE,CAAC,OAAO,EAAE,SAAS,wBAAwB,CAAC,GAAG;gBAChD,IAAA,aAAK,EAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;gBAC1C,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;YAEJ,IAAI,UAAU,GAAG,CAAC,CAAA;YAElB,IAAI,KAAK,EAAE,MAAM,UAAU,IAAI,WAA0C,EAAE;gBACzE,UAAU,EAAE,CAAA;gBACZ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,uBAAuB,GAAG,KAAK,CAAA;oBAC/B,MAAM,oBAAoB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAA;oBAC1E,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAA;oBACpE,qEAAqE;oBACrE,IAAI,YAAY,KAAK,IAAI,EAAE;wBACzB,MAAM;4BACJ,cAAc,EAAE,oBAAoB;4BACpC,OAAO,EAAE,aAAa;yBAChB,CAAA;qBACT;yBAAM;wBACL,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAoB,CAAC,CAAA;wBAChD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAA;wBAC5D,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAA;wBACrD,IAAI,gBAAgB,EAAE;4BACpB,0EAA0E;4BAC1E,2EAA2E;4BAC3E,cAAc,CAAC,EAAE,GAAG,IAAA,eAAO,EAAC,oBAAoB,CAAC,CAAA;yBAClD;wBAED,MAAM;4BACJ,+EAA+E;4BAC/E,cAAc;4BACd,OAAO;yBACD,CAAA;qBACT;oBACD,2DAA2D;oBAC3D,6CAA6C;iBAC9C;qBAAM,IAAI,eAAe,KAAK,IAAI,IAAI,uBAAuB,KAAK,KAAK,EAAE;oBACxE,uBAAuB,GAAG,IAAI,CAAA;oBAC9B,MAAM,SAAgB,CAAA;iBACvB;aACF;YAED,IAAA,aAAK,EAAC,8CAA8C,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;YAErF,0DAA0D;YAC1D,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,0BAA0B;YAC1B,gBAAgB,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAA;SACrE;QAED,IAAA,aAAK,EACH,kEAAkE,EAClE,QAAQ,EACR,QAAQ,CAAC,WAAW,EAAE,EACtB,MAAM,CAAC,WAAW,EAAE,EACpB,OAAO,CACR,CAAA;KACF;YAAS;QACR,IAAI,WAAW,EAAE;YACf,IAAA,aAAK,EACH,6EAA6E,EAC7E,QAAQ,EACR,QAAQ,CAAC,WAAW,EAAE,EACtB,MAAM,CAAC,WAAW,EAAE,EACpB,OAAO,CACR,CAAA;YACD,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAA;YAClC,OAAO,SAAS,GAAG,MAAM,EAAE;gBACzB,IAAA,2BAAc,EAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;gBAElH,SAAS,GAAG,IAAA,eAAO,EAAC,SAAS,EAAE,CAAC,CAAC,CAAA;aAClC;YAED,IAAA,aAAK,EACH,8EAA8E,EAC9E,QAAQ,EACR,QAAQ,CAAC,WAAW,EAAE,EACtB,MAAM,CAAC,WAAW,EAAE,EACpB,OAAO,CACR,CAAA;SACF;QAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAA;QACrD,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAClC,MAAM,eAAe,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAA;SAC7C;KACF;AACH,CAAC;AAlMD,wBAkMC;AAED,8BAA8B;AAC9B,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,WAAmB;IAChE,IAAI,UAAU,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;IACzB,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAClD,UAAU,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACrD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,kDAAoC,IAAI,OAAO,EAAE,CAAC,CAAA;IAC7F,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEnB,MAAM,CAAC,WAAW,2CAA+B,CAAA;IACjD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAA;IACpD,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;AAC1B,CAAC;AAED,SAAgB,gBAAgB,CAC9B,EACE,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,EAAE,EACF,sBAAsB,GAAG,SAAS,EAClC,MAAM,GAAG,SAAS,EAClB,WAAW,GAAG,SAAS,EACvB,2BAA2B,GAAG,SAAS,EACT,EAChC,GAAG,WAAc;IAUjB,wDAAwD;IACxD,sEAAsE;IACtE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;KAC9C;IAED,MAAM,QAAQ,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,CAAA;IAErC,+BAA+B,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAEtD,MAAM,aAAa,GAAG,CAAC,cAAoB,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAA;IACnG,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAE5C,MAAM,QAAQ,GAAG,MAAM,CAAC;QACtB,QAAQ;QACR,IAAI;QACJ,EAAE;QACF,eAAe,EAAE,IAAI;QACrB,OAAO;QACP,MAAM;QACN,gBAAgB,EAAE,IAAI;QACtB,WAAW;QACX,2BAA2B;KAC5B,CAAC,CAAA;IAEF,+HAA+H;IAC/H,sCAAsC;IACtC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE;QAChC,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAClF,CAAC,CAAA;IAED,OAAO,IAAA,yBAAiB,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAA;AACtG,CAAC;AAtDD,4CAsDC;AAED,SAAS,qBAAqB,CAAqB,QAAW,EAAE,IAAY,EAAE,EAAU,EAAE,OAA+B;IACvH,IAAI,CAAC,QAAQ,IAAI,kBAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;QACvD,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,oDAAoD,kBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACrI;IAED,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,qCAAqC,CAAC,CAAA;KACvF;IAED,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,0BAA0B,EAAE,qCAAqC,CAAC,CAAA;KACnF;IAED,IAAI,IAAA,sBAAc,EAAC,EAAE,CAAC,GAAG,IAAA,sBAAc,EAAC,IAAI,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAA;KAC3H;IAED,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAEzB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAK,+BAAsB,CAAC,QAAQ,CAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;gBACnG,MAAM,IAAI,KAAK,CACb,yCAAyC,MAAM,CAAC,OAAO,mDAAmD,+BAAsB,CAC9H,QAAQ,CACT,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChB,CAAA;aACF;YAED,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;gBAC7D,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,CAAC,OAAO,0CAA0C,CAAC,CAAA;aACnH;SACF;KACF;AACH,CAAC;AAED,SAAS,+BAA+B,CAAC,QAAc,EAAE,WAAsC;IAC7F,MAAM,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,8BAAoB,CAAC,CAAA;IACnF,MAAM,sCAAsC,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IAE7G,IAAI,uBAAuB,IAAI,sCAAsC,EAAE;QACrE,IAAA,aAAK,EAAC,8DAA8D,CAAC,CAAA;KACtE;AACH,CAAC;AAED,MAAM,cAAe,SAAQ,qBAAY;IAIvC,YAA6B,QAA0B;QACrD,KAAK,EAAE,CAAA;QADoB,aAAQ,GAAR,QAAQ,CAAkB;QAH/C,iBAAY,GAAG,CAAC,CAAA;QAChB,YAAO,GAAuB,SAAS,CAAA;QAwBvC,iBAAY,GAAG,KAAK,EAAE,GAAU,EAAE,EAAE;YAC1C,IAAA,aAAK,EAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;YAExC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE;gBACzE,IAAI,CAAC,YAAY,EAAE,CAAA;gBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAA;gBAC3E,IAAA,aAAK,EAAC,6BAA6B,EAAE,OAAO,CAAC,CAAA;gBAC7C,MAAM,IAAA,YAAI,EAAC,OAAO,CAAC,CAAA;gBACnB,uHAAuH;gBACvH,IAAI,CAAC,WAAW,EAAE,CAAA;aACnB;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;aACxB;QACH,CAAC,CAAA;QAhCC,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAM,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;YAC9D,UAAU,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAsB,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAE3C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAA,aAAK,EAAC,+BAA+B,EAAE,IAAI,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC;IAiBM,mBAAmB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
|
package/dist/stream.js
CHANGED
|
@@ -6,7 +6,7 @@ const handy_1 = require("./handy");
|
|
|
6
6
|
const realtimefeeds_1 = require("./realtimefeeds");
|
|
7
7
|
async function* _stream({ exchange, filters, timeoutIntervalMS = 10000, withDisconnects = undefined, onError = undefined }) {
|
|
8
8
|
validateStreamOptions(filters);
|
|
9
|
-
const realTimeFeed = realtimefeeds_1.createRealTimeFeed(exchange, filters, timeoutIntervalMS, onError);
|
|
9
|
+
const realTimeFeed = (0, realtimefeeds_1.createRealTimeFeed)(exchange, filters, timeoutIntervalMS, onError);
|
|
10
10
|
for await (const message of realTimeFeed) {
|
|
11
11
|
if (message.__disconnect__ === true) {
|
|
12
12
|
// __disconnect__ message means that websocket connection has been closed
|
|
@@ -39,7 +39,7 @@ async function* _streamNormalized({ exchange, symbols, timeoutIntervalMS = 10000
|
|
|
39
39
|
try {
|
|
40
40
|
const createMappers = (localTimestamp) => normalizers.map((m) => m(exchange, localTimestamp));
|
|
41
41
|
const mappers = createMappers(new Date());
|
|
42
|
-
const filters = handy_1.getFilters(mappers, symbols);
|
|
42
|
+
const filters = (0, handy_1.getFilters)(mappers, symbols);
|
|
43
43
|
const messages = _stream({
|
|
44
44
|
exchange,
|
|
45
45
|
withDisconnects: true,
|
|
@@ -52,7 +52,7 @@ async function* _streamNormalized({ exchange, symbols, timeoutIntervalMS = 10000
|
|
|
52
52
|
const filter = (symbol) => {
|
|
53
53
|
return symbols === undefined || symbols.length === 0 || symbols.includes(symbol);
|
|
54
54
|
};
|
|
55
|
-
const normalizedMessages = handy_1.normalizeMessages(exchange, messages, mappers, createMappers, withDisconnectMessages, filter, new Date());
|
|
55
|
+
const normalizedMessages = (0, handy_1.normalizeMessages)(exchange, messages, mappers, createMappers, withDisconnectMessages, filter, new Date());
|
|
56
56
|
for await (const message of normalizedMessages) {
|
|
57
57
|
yield message;
|
|
58
58
|
}
|
|
@@ -61,7 +61,7 @@ async function* _streamNormalized({ exchange, symbols, timeoutIntervalMS = 10000
|
|
|
61
61
|
if (onError !== undefined) {
|
|
62
62
|
onError(error);
|
|
63
63
|
}
|
|
64
|
-
debug_1.debug('%s normalize messages error: %o, retrying with new connection...', exchange, error);
|
|
64
|
+
(0, debug_1.debug)('%s normalize messages error: %o, retrying with new connection...', exchange, error);
|
|
65
65
|
if (withDisconnectMessages) {
|
|
66
66
|
// yield it as disconnect as well if flag is set
|
|
67
67
|
const disconnect = {
|
package/dist/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,mCAAuD;AAEvD,mDAAoD;AAGpD,KAAK,SAAS,CAAC,CAAC,OAAO,CAAgD,EACrE,QAAQ,EACR,OAAO,EACP,iBAAiB,GAAG,KAAK,EACzB,eAAe,GAAG,SAAS,EAC3B,OAAO,GAAG,SAAS,EACC;IAGpB,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAE9B,MAAM,YAAY,GAAG,kCAAkB,
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,mCAAuD;AAEvD,mDAAoD;AAGpD,KAAK,SAAS,CAAC,CAAC,OAAO,CAAgD,EACrE,QAAQ,EACR,OAAO,EACP,iBAAiB,GAAG,KAAK,EACzB,eAAe,GAAG,SAAS,EAC3B,OAAO,GAAG,SAAS,EACC;IAGpB,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAE9B,MAAM,YAAY,GAAG,IAAA,kCAAkB,EAAC,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAA;IAEtF,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,YAAY,EAAE;QACxC,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,EAAE;YACnC,yEAAyE;YACzE,uDAAuD;YACvD,IAAI,eAAe,EAAE;gBACnB,MAAM,SAAgB,CAAA;aACvB;SACF;aAAM;YACL,MAAM;gBACJ,cAAc,EAAE,IAAI,IAAI,EAAE;gBAC1B,OAAO;aACD,CAAA;SACT;KACF;AACH,CAAC;AAED,SAAgB,MAAM,CAAgD,EACpE,QAAQ,EACR,OAAO,EACP,iBAAiB,GAAG,KAAK,EACzB,eAAe,GAAG,SAAS,EAC3B,OAAO,GAAG,SAAS,EACC;IAGpB,IAAI,SAAS,GAAG,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAE1F;IAAC,SAAiB,CAAC,YAAY,GAAG,IAAI,CAAA;IAEvC,OAAO,SAAS,CAAA;AAClB,CAAC;AAdD,wBAcC;AAED,KAAK,SAAS,CAAC,CAAC,iBAAiB,CAC/B,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE,sBAAsB,GAAG,SAAS,EAAE,OAAO,GAAG,SAAS,EAAiC,EACxI,GAAG,WAAc;IAUjB,wDAAwD;IACxD,sEAAsE;IACtE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;KAC9C;IAED,OAAO,IAAI,EAAE;QACX,IAAI;YACF,MAAM,aAAa,GAAG,CAAC,cAAoB,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAA;YACnG,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC;gBACvB,QAAQ;gBACR,eAAe,EAAE,IAAI;gBACrB,iBAAiB;gBACjB,OAAO;gBACP,OAAO;aACR,CAAC,CAAA;YAEF,+HAA+H;YAC/H,uCAAuC;YACvC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,EAAE;gBAChC,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClF,CAAC,CAAA;YAED,MAAM,kBAAkB,GAAG,IAAA,yBAAiB,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;YAEpI,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,kBAAkB,EAAE;gBAC9C,MAAM,OAAO,CAAA;aACd;SACF;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,OAAO,KAAK,SAAS,EAAE;gBACzB,OAAO,CAAC,KAAK,CAAC,CAAA;aACf;YACD,IAAA,aAAK,EAAC,kEAAkE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC1F,IAAI,sBAAsB,EAAE;gBAC1B,gDAAgD;gBAChD,MAAM,UAAU,GAAe;oBAC7B,IAAI,EAAE,YAAY;oBAClB,QAAQ;oBACR,cAAc,EAAE,IAAI,IAAI,EAAE;iBAC3B,CAAA;gBAED,MAAM,UAAiB,CAAA;aACxB;SACF;KACF;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAyB;IACtD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;KAC5E;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QAEzB,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE;YAC7D,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,CAAC,OAAO,0CAA0C,CAAC,CAAA;SACnH;KACF;AACH,CAAC;AAkBD,SAAgB,gBAAgB,CAC9B,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,KAAK,EAAE,sBAAsB,GAAG,SAAS,EAAE,OAAO,GAAG,SAAS,EAAiC,EACxI,GAAG,WAAc;IAUjB,IAAI,SAAS,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,OAAO,EAAE,EAAE,GAAG,WAAW,CAAC,CAE3H;IAAC,SAAiB,CAAC,YAAY,GAAG,IAAI,CAAA;IAEvC,OAAO,SAAS,CAAA;AAClB,CAAC;AAjBD,4CAiBC"}
|
package/dist/worker.js
CHANGED
|
@@ -8,14 +8,14 @@ const fs_extra_1 = require("fs-extra");
|
|
|
8
8
|
const p_map_1 = __importDefault(require("p-map"));
|
|
9
9
|
const worker_threads_1 = require("worker_threads");
|
|
10
10
|
const handy_1 = require("./handy");
|
|
11
|
-
const debug = debug_1.default('tardis-dev');
|
|
11
|
+
const debug = (0, debug_1.default)('tardis-dev');
|
|
12
12
|
if (worker_threads_1.isMainThread) {
|
|
13
13
|
debug('existing, worker is not meant to run in main thread');
|
|
14
14
|
}
|
|
15
15
|
else {
|
|
16
16
|
worker_threads_1.parentPort.on('message', (signal) => {
|
|
17
17
|
if (signal === "BEFORE_TERMINATE" /* BEFORE_TERMINATE */) {
|
|
18
|
-
handy_1.cleanTempFiles();
|
|
18
|
+
(0, handy_1.cleanTempFiles)();
|
|
19
19
|
worker_threads_1.parentPort.postMessage("READY_TO_TERMINATE" /* READY_TO_TERMINATE */);
|
|
20
20
|
}
|
|
21
21
|
});
|
|
@@ -29,12 +29,12 @@ async function getDataFeedSlices(payload) {
|
|
|
29
29
|
const MILLISECONDS_IN_MINUTE = 60 * 1000;
|
|
30
30
|
const CONCURRENCY_LIMIT = 60;
|
|
31
31
|
// deduplicate filters (if the channel was provided multiple times)
|
|
32
|
-
const filters = handy_1.optimizeFilters(payload.filters);
|
|
32
|
+
const filters = (0, handy_1.optimizeFilters)(payload.filters);
|
|
33
33
|
// let's calculate number of minutes between "from" and "to" dates as those will give us total number of requests or checks
|
|
34
34
|
// that will have to be performed concurrently with CONCURRENCY_LIMIT
|
|
35
35
|
const minutesCountToFetch = Math.floor((payload.toDate.getTime() - payload.fromDate.getTime()) / MILLISECONDS_IN_MINUTE);
|
|
36
36
|
// each filter will have separate sub dir based on it's sha hash
|
|
37
|
-
const cacheDir = `${payload.cacheDir}/feeds/${payload.exchange}/${handy_1.sha256(filters)}`;
|
|
37
|
+
const cacheDir = `${payload.cacheDir}/feeds/${payload.exchange}/${(0, handy_1.sha256)(filters)}`;
|
|
38
38
|
const waitOffsetMS = typeof payload.waitWhenDataNotYetAvailable === 'number'
|
|
39
39
|
? payload.waitWhenDataNotYetAvailable * MILLISECONDS_IN_MINUTE
|
|
40
40
|
: 30 * MILLISECONDS_IN_MINUTE;
|
|
@@ -44,13 +44,13 @@ async function getDataFeedSlices(payload) {
|
|
|
44
44
|
if (timestampForLastAvailableData < payload.fromDate.valueOf()) {
|
|
45
45
|
const initialWaitTime = payload.fromDate.valueOf() - timestampForLastAvailableData;
|
|
46
46
|
if (initialWaitTime > 0) {
|
|
47
|
-
await handy_1.wait(initialWaitTime);
|
|
47
|
+
await (0, handy_1.wait)(initialWaitTime);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
// fetch concurently any data that is already available
|
|
51
51
|
timestampForLastAvailableData = new Date().valueOf() - waitOffsetMS;
|
|
52
52
|
const minutesCountThatAreAlreadyAvailableToFetch = Math.floor((timestampForLastAvailableData - payload.fromDate.valueOf()) / MILLISECONDS_IN_MINUTE);
|
|
53
|
-
await p_map_1.default(handy_1.sequence(minutesCountThatAreAlreadyAvailableToFetch, 0), (offset) => getDataFeedSlice(payload, offset, filters, cacheDir), {
|
|
53
|
+
await (0, p_map_1.default)((0, handy_1.sequence)(minutesCountThatAreAlreadyAvailableToFetch, 0), (offset) => getDataFeedSlice(payload, offset, filters, cacheDir), {
|
|
54
54
|
concurrency: CONCURRENCY_LIMIT
|
|
55
55
|
});
|
|
56
56
|
// for remaining data iterate one by one and wait as needed
|
|
@@ -59,7 +59,7 @@ async function getDataFeedSlices(payload) {
|
|
|
59
59
|
timestampForLastAvailableData = new Date().valueOf() - waitOffsetMS;
|
|
60
60
|
if (timestampToFetch > timestampForLastAvailableData) {
|
|
61
61
|
const waitTime = timestampToFetch - timestampForLastAvailableData + 100;
|
|
62
|
-
await handy_1.wait(waitTime);
|
|
62
|
+
await (0, handy_1.wait)(waitTime);
|
|
63
63
|
}
|
|
64
64
|
await getDataFeedSlice(payload, offset, filters, cacheDir);
|
|
65
65
|
}
|
|
@@ -70,21 +70,21 @@ async function getDataFeedSlices(payload) {
|
|
|
70
70
|
// fetch first slice - it will tell us if user has access to the beginning of requested date range
|
|
71
71
|
await getDataFeedSlice(payload, 0, filters, cacheDir);
|
|
72
72
|
// it both begining and end date of the range is accessible fetch all remaning slices concurently with CONCURRENCY_LIMIT
|
|
73
|
-
await p_map_1.default(handy_1.sequence(minutesCountToFetch, 1), // this will produce Iterable sequence from 1 to minutesCountToFetch
|
|
73
|
+
await (0, p_map_1.default)((0, handy_1.sequence)(minutesCountToFetch, 1), // this will produce Iterable sequence from 1 to minutesCountToFetch
|
|
74
74
|
(offset) => getDataFeedSlice(payload, offset, filters, cacheDir), { concurrency: CONCURRENCY_LIMIT });
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
async function getDataFeedSlice({ exchange, fromDate, endpoint, apiKey, userAgent }, offset, filters, cacheDir) {
|
|
78
|
-
const sliceTimestamp = handy_1.addMinutes(fromDate, offset);
|
|
78
|
+
const sliceTimestamp = (0, handy_1.addMinutes)(fromDate, offset);
|
|
79
79
|
const sliceKey = sliceTimestamp.toISOString();
|
|
80
|
-
const slicePath = `${cacheDir}/${handy_1.formatDateToPath(sliceTimestamp)}.json.gz`;
|
|
81
|
-
const isCached = fs_extra_1.existsSync(slicePath);
|
|
80
|
+
const slicePath = `${cacheDir}/${(0, handy_1.formatDateToPath)(sliceTimestamp)}.json.gz`;
|
|
81
|
+
const isCached = (0, fs_extra_1.existsSync)(slicePath);
|
|
82
82
|
let url = `${endpoint}/data-feeds/${exchange}?from=${fromDate.toISOString()}&offset=${offset}`;
|
|
83
83
|
if (filters.length > 0) {
|
|
84
84
|
url += `&filters=${encodeURIComponent(JSON.stringify(filters))}`;
|
|
85
85
|
}
|
|
86
86
|
if (!isCached) {
|
|
87
|
-
await handy_1.download({
|
|
87
|
+
await (0, handy_1.download)({
|
|
88
88
|
apiKey,
|
|
89
89
|
downloadPath: slicePath,
|
|
90
90
|
url,
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":";;;;;AAAA,kDAAuB;AACvB,uCAAqC;AACrC,kDAAwB;AACxB,mDAAqE;AACrE,mCAAyH;AAGzH,MAAM,KAAK,GAAG,eAAG,
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":";;;;;AAAA,kDAAuB;AACvB,uCAAqC;AACrC,kDAAwB;AACxB,mDAAqE;AACrE,mCAAyH;AAGzH,MAAM,KAAK,GAAG,IAAA,eAAG,EAAC,YAAY,CAAC,CAAA;AAE/B,IAAI,6BAAY,EAAE;IAChB,KAAK,CAAC,qDAAqD,CAAC,CAAA;CAC7D;KAAM;IACL,2BAAW,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,MAAoB,EAAE,EAAE;QACjD,IAAI,MAAM,8CAAkC,EAAE;YAC5C,IAAA,sBAAc,GAAE,CAAA;YAChB,2BAAW,CAAC,WAAW,+CAAiC,CAAA;SACzD;IACH,CAAC,CAAC,CAAA;IACF,iBAAiB,CAAC,2BAA8B,CAAC,CAAA;CAClD;AAED,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;IAChD,KAAK,CAAC,wCAAwC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7D,MAAM,GAAG,CAAA;AACX,CAAC,CAAC,CAAA;AAEF,KAAK,UAAU,iBAAiB,CAAC,OAAyB;IACxD,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAA;IACxC,MAAM,iBAAiB,GAAG,EAAE,CAAA;IAC5B,mEAAmE;IACnE,MAAM,OAAO,GAAG,IAAA,uBAAe,EAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEhD,2HAA2H;IAC3H,qEAAqE;IACrE,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAA;IAExH,gEAAgE;IAChE,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,QAAQ,UAAU,OAAO,CAAC,QAAQ,IAAI,IAAA,cAAM,EAAC,OAAO,CAAC,EAAE,CAAA;IAEnF,MAAM,YAAY,GAChB,OAAO,OAAO,CAAC,2BAA2B,KAAK,QAAQ;QACrD,CAAC,CAAC,OAAO,CAAC,2BAA2B,GAAG,sBAAsB;QAC9D,CAAC,CAAC,EAAE,GAAG,sBAAsB,CAAA;IAEjC,IAAI,OAAO,CAAC,2BAA2B,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,EAAE;QACvH,IAAI,6BAA6B,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,CAAA;QAEvE,4EAA4E;QAC5E,IAAI,6BAA6B,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;YAC9D,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,6BAA6B,CAAA;YAClF,IAAI,eAAe,GAAG,CAAC,EAAE;gBACvB,MAAM,IAAA,YAAI,EAAC,eAAe,CAAC,CAAA;aAC5B;SACF;QAED,uDAAuD;QACvD,6BAA6B,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,CAAA;QACnE,MAAM,0CAA0C,GAAG,IAAI,CAAC,KAAK,CAC3D,CAAC,6BAA6B,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,sBAAsB,CACtF,CAAA;QAED,MAAM,IAAA,eAAI,EAAC,IAAA,gBAAQ,EAAC,0CAA0C,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE;YACpI,WAAW,EAAE,iBAAiB;SAC/B,CAAC,CAAA;QAEF,2DAA2D;QAC3D,KAAK,IAAI,MAAM,GAAG,0CAA0C,EAAE,MAAM,GAAG,mBAAmB,EAAE,MAAM,EAAE,EAAE;YACpG,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,sBAAsB,CAAA;YACrF,6BAA6B,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,CAAA;YAEnE,IAAI,gBAAgB,GAAG,6BAA6B,EAAE;gBACpD,MAAM,QAAQ,GAAG,gBAAgB,GAAG,6BAA6B,GAAG,GAAG,CAAA;gBAEvE,MAAM,IAAA,YAAI,EAAC,QAAQ,CAAC,CAAA;aACrB;YACD,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;SAC3D;KACF;SAAM;QACL,iHAAiH;QACjH,MAAM,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE3E,kGAAkG;QAClG,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAErD,wHAAwH;QACxH,MAAM,IAAA,eAAI,EACR,IAAA,gBAAQ,EAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,oEAAoE;QACtG,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAChE,EAAE,WAAW,EAAE,iBAAiB,EAAE,CACnC,CAAA;KACF;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAoB,EACrE,MAAc,EACd,OAAiB,EACjB,QAAgB;IAEhB,MAAM,cAAc,GAAG,IAAA,kBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IACnD,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,EAAE,CAAA;IAC7C,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,IAAA,wBAAgB,EAAC,cAAc,CAAC,UAAU,CAAA;IAC3E,MAAM,QAAQ,GAAG,IAAA,qBAAU,EAAC,SAAS,CAAC,CAAA;IAEtC,IAAI,GAAG,GAAG,GAAG,QAAQ,eAAe,QAAQ,SAAS,QAAQ,CAAC,WAAW,EAAE,WAAW,MAAM,EAAE,CAAA;IAE9F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,GAAG,IAAI,YAAY,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAA;KACjE;IAED,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAA,gBAAQ,EAAC;YACb,MAAM;YACN,YAAY,EAAE,SAAS;YACvB,GAAG;YACH,SAAS;SACV,CAAC,CAAA;QAEF,KAAK,CAAC,kDAAkD,EAAE,QAAQ,CAAC,CAAA;KACpE;SAAM;QACL,KAAK,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAA;KACvD;IACD,oGAAoG;IACpG,MAAM,OAAO,GAAkB;QAC7B,QAAQ;QACR,SAAS;KACV,CAAA;IACD,2BAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tardis-dev",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.6.7",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=12"
|
|
6
6
|
},
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc",
|
|
15
15
|
"precommit": "lint-staged",
|
|
16
|
-
"test": "npm run build && jest --
|
|
16
|
+
"test": "npm run build && jest --forceExit --runInBand",
|
|
17
17
|
"prepare": "npm run build",
|
|
18
|
-
"
|
|
18
|
+
"format": "prettier --write .",
|
|
19
|
+
"check-format": "prettier --check ."
|
|
19
20
|
},
|
|
20
21
|
"files": [
|
|
21
22
|
"src",
|
|
@@ -50,27 +51,27 @@
|
|
|
50
51
|
"dependencies": {
|
|
51
52
|
"@types/bintrees": "^1.0.3",
|
|
52
53
|
"bintrees": "^1.0.2",
|
|
53
|
-
"debug": "^4.3.
|
|
54
|
+
"debug": "^4.3.2",
|
|
54
55
|
"fs-extra": "^10.0.0",
|
|
55
56
|
"got": "^11.8.2",
|
|
57
|
+
"https-proxy-agent": "^5.0.0",
|
|
56
58
|
"p-map": "^4.0.0",
|
|
57
|
-
"ws": "^
|
|
58
|
-
"https-proxy-agent": "^5.0.0"
|
|
59
|
+
"ws": "^8.2.2"
|
|
59
60
|
},
|
|
60
61
|
"devDependencies": {
|
|
61
|
-
"@types/debug": "^4.1.
|
|
62
|
-
"@types/fs-extra": "^9.0.
|
|
63
|
-
"@types/jest": "^
|
|
64
|
-
"@types/node": "^
|
|
65
|
-
"@types/ws": "^
|
|
62
|
+
"@types/debug": "^4.1.7",
|
|
63
|
+
"@types/fs-extra": "^9.0.13",
|
|
64
|
+
"@types/jest": "^27.0.2",
|
|
65
|
+
"@types/node": "^16.10.1",
|
|
66
|
+
"@types/ws": "^8.2.0",
|
|
66
67
|
"cross-var": "^1.1.0",
|
|
67
|
-
"husky": "^
|
|
68
|
-
"jest": "^27.
|
|
69
|
-
"lint-staged": "^11.
|
|
70
|
-
"prettier": "^2.
|
|
71
|
-
"source-map-support": "^0.5.
|
|
72
|
-
"ts-jest": "^27.0.
|
|
73
|
-
"typescript": "^4.3
|
|
68
|
+
"husky": "^7.0.2",
|
|
69
|
+
"jest": "^27.2.2",
|
|
70
|
+
"lint-staged": "^11.1.2",
|
|
71
|
+
"prettier": "^2.4.1",
|
|
72
|
+
"source-map-support": "^0.5.20",
|
|
73
|
+
"ts-jest": "^27.0.5",
|
|
74
|
+
"typescript": "^4.4.3"
|
|
74
75
|
},
|
|
75
76
|
"lint-staged": {
|
|
76
77
|
"*.{ts}": [
|
|
@@ -12,8 +12,10 @@ type BookSnapshotComputableOptions = {
|
|
|
12
12
|
onCrossedLevelRemoved?: OnLevelRemovedCB
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export const computeBookSnapshots =
|
|
16
|
-
|
|
15
|
+
export const computeBookSnapshots =
|
|
16
|
+
(options: BookSnapshotComputableOptions): (() => Computable<BookSnapshot>) =>
|
|
17
|
+
() =>
|
|
18
|
+
new BookSnapshotComputable(options)
|
|
17
19
|
|
|
18
20
|
const emptyBookLevel = {
|
|
19
21
|
price: undefined,
|
|
@@ -7,7 +7,10 @@ type BarKind = 'time' | 'volume' | 'tick'
|
|
|
7
7
|
|
|
8
8
|
type TradeBarComputableOptions = { kind: BarKind; interval: number; name?: string }
|
|
9
9
|
|
|
10
|
-
export const computeTradeBars =
|
|
10
|
+
export const computeTradeBars =
|
|
11
|
+
(options: TradeBarComputableOptions): (() => Computable<TradeBar>) =>
|
|
12
|
+
() =>
|
|
13
|
+
new TradeBarComputable(options)
|
|
11
14
|
|
|
12
15
|
const kindSuffix: { [key in BarKind]: string } = {
|
|
13
16
|
tick: 'ticks',
|