tardis-dev 13.11.0 → 13.13.0
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/consts.d.ts +2 -1
- package/dist/consts.d.ts.map +1 -1
- package/dist/consts.js +15 -2
- package/dist/consts.js.map +1 -1
- package/dist/mappers/binance.d.ts +1 -1
- package/dist/mappers/binance.js +2 -2
- package/dist/mappers/binance.js.map +1 -1
- package/dist/mappers/bybit.d.ts +1 -1
- package/dist/mappers/bybitspot.d.ts +1 -1
- package/dist/mappers/cryptocom.d.ts +1 -1
- package/dist/mappers/huobi.d.ts +3 -3
- package/dist/mappers/index.d.ts +4 -4
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +9 -4
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/woox.d.ts +111 -0
- package/dist/mappers/woox.d.ts.map +1 -0
- package/dist/mappers/woox.js +236 -0
- package/dist/mappers/woox.js.map +1 -0
- package/dist/realtimefeeds/index.d.ts.map +1 -1
- package/dist/realtimefeeds/index.js +3 -1
- package/dist/realtimefeeds/index.js.map +1 -1
- package/dist/realtimefeeds/woox.d.ts +11 -0
- package/dist/realtimefeeds/woox.d.ts.map +1 -0
- package/dist/realtimefeeds/woox.js +65 -0
- package/dist/realtimefeeds/woox.js.map +1 -0
- package/package.json +1 -1
- package/src/consts.ts +16 -2
- package/src/mappers/binance.ts +3 -3
- package/src/mappers/index.ts +9 -4
- package/src/mappers/woox.ts +322 -0
- package/src/realtimefeeds/index.ts +3 -1
- package/src/realtimefeeds/woox.ts +70 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WooxBookTickerMapper = exports.WooxDerivativeTickerMapper = exports.WooxBookChangeMapper = exports.wooxTradesMapper = void 0;
|
|
4
|
+
const handy_1 = require("../handy");
|
|
5
|
+
const mapper_1 = require("./mapper");
|
|
6
|
+
exports.wooxTradesMapper = {
|
|
7
|
+
canHandle(message) {
|
|
8
|
+
return message.topic !== undefined && message.topic.endsWith('@trade');
|
|
9
|
+
},
|
|
10
|
+
getFilters(symbols) {
|
|
11
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
channel: 'trade',
|
|
15
|
+
symbols
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
},
|
|
19
|
+
*map(message, localTimestamp) {
|
|
20
|
+
const timestamp = new Date(message.ts);
|
|
21
|
+
yield {
|
|
22
|
+
type: 'trade',
|
|
23
|
+
symbol: message.data.symbol,
|
|
24
|
+
exchange: 'woo-x',
|
|
25
|
+
id: undefined,
|
|
26
|
+
price: message.data.price,
|
|
27
|
+
amount: message.data.size,
|
|
28
|
+
side: message.data.side === 'SELL' ? 'sell' : 'buy',
|
|
29
|
+
timestamp,
|
|
30
|
+
localTimestamp: localTimestamp
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
class WooxBookChangeMapper {
|
|
35
|
+
constructor() {
|
|
36
|
+
this._symbolToDepthInfoMapping = {};
|
|
37
|
+
}
|
|
38
|
+
canHandle(message) {
|
|
39
|
+
if ('id' in message) {
|
|
40
|
+
return message.id.endsWith('@orderbook');
|
|
41
|
+
}
|
|
42
|
+
if ('topic' in message) {
|
|
43
|
+
return message.topic.endsWith('@orderbookupdate');
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
getFilters(symbols) {
|
|
48
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
49
|
+
return [
|
|
50
|
+
{
|
|
51
|
+
channel: 'orderbook',
|
|
52
|
+
symbols
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
channel: 'orderbookupdate',
|
|
56
|
+
symbols
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
}
|
|
60
|
+
*map(message, localTimestamp) {
|
|
61
|
+
const symbol = message.data.symbol;
|
|
62
|
+
if (this._symbolToDepthInfoMapping[symbol] === undefined) {
|
|
63
|
+
this._symbolToDepthInfoMapping[symbol] = {
|
|
64
|
+
bufferedUpdates: []
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const symbolDepthInfo = this._symbolToDepthInfoMapping[symbol];
|
|
68
|
+
const snapshotAlreadyProcessed = symbolDepthInfo.snapshotProcessed;
|
|
69
|
+
// first check if received message is snapshot and process it as such if it is
|
|
70
|
+
if ('id' in message && message.success) {
|
|
71
|
+
yield {
|
|
72
|
+
type: 'book_change',
|
|
73
|
+
symbol,
|
|
74
|
+
exchange: 'woo-x',
|
|
75
|
+
isSnapshot: true,
|
|
76
|
+
bids: message.data.bids.map(this._mapBookLevel),
|
|
77
|
+
asks: message.data.asks.map(this._mapBookLevel),
|
|
78
|
+
timestamp: new Date(message.data.ts),
|
|
79
|
+
localTimestamp
|
|
80
|
+
};
|
|
81
|
+
// mark given symbol depth info that has snapshot processed
|
|
82
|
+
symbolDepthInfo.lastUpdateTimestamp = message.data.ts;
|
|
83
|
+
symbolDepthInfo.snapshotProcessed = true;
|
|
84
|
+
// if there were any depth updates buffered, let's proccess those
|
|
85
|
+
for (const update of symbolDepthInfo.bufferedUpdates) {
|
|
86
|
+
const bookChange = this._mapBookDepthUpdate(update, localTimestamp, symbolDepthInfo, symbol);
|
|
87
|
+
if (bookChange !== undefined) {
|
|
88
|
+
yield bookChange;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// remove all buffered updates
|
|
92
|
+
symbolDepthInfo.bufferedUpdates = [];
|
|
93
|
+
}
|
|
94
|
+
else if (snapshotAlreadyProcessed) {
|
|
95
|
+
// snapshot was already processed let's map the message as normal book_change
|
|
96
|
+
const bookChange = this._mapBookDepthUpdate(message, localTimestamp, symbolDepthInfo, symbol);
|
|
97
|
+
if (bookChange !== undefined) {
|
|
98
|
+
yield bookChange;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// if snapshot hasn't been yet processed and we've got depthUpdate message, let's buffer it for later processing
|
|
103
|
+
symbolDepthInfo.bufferedUpdates.push(message);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
_mapBookDepthUpdate(wooxBookUpdate, localTimestamp, depthInfo, symbol) {
|
|
107
|
+
if (wooxBookUpdate.data.prevTs < depthInfo.lastUpdateTimestamp) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
type: 'book_change',
|
|
112
|
+
symbol,
|
|
113
|
+
exchange: 'woo-x',
|
|
114
|
+
isSnapshot: false,
|
|
115
|
+
bids: wooxBookUpdate.data.bids.map(this._mapBookLevel),
|
|
116
|
+
asks: wooxBookUpdate.data.asks.map(this._mapBookLevel),
|
|
117
|
+
timestamp: new Date(wooxBookUpdate.ts),
|
|
118
|
+
localTimestamp
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
_mapBookLevel(level) {
|
|
122
|
+
const price = level[0];
|
|
123
|
+
const amount = level[1];
|
|
124
|
+
return { price, amount };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.WooxBookChangeMapper = WooxBookChangeMapper;
|
|
128
|
+
class WooxDerivativeTickerMapper {
|
|
129
|
+
constructor() {
|
|
130
|
+
this.pendingTickerInfoHelper = new mapper_1.PendingTickerInfoHelper();
|
|
131
|
+
this._indexPrices = new Map();
|
|
132
|
+
}
|
|
133
|
+
canHandle(message) {
|
|
134
|
+
if (message.topic === undefined) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const symbol = (message.data && message.data.symbol) || '';
|
|
138
|
+
const isPerp = symbol.startsWith('PERP_');
|
|
139
|
+
return ((message.topic.endsWith('@trade') && isPerp) ||
|
|
140
|
+
(message.topic.endsWith('@markprice') && isPerp) ||
|
|
141
|
+
(message.topic.endsWith('@estfundingrate') && isPerp) ||
|
|
142
|
+
message.topic.endsWith('@indexprice') ||
|
|
143
|
+
(message.topic.endsWith('@openinterest') && isPerp));
|
|
144
|
+
}
|
|
145
|
+
getFilters(symbols) {
|
|
146
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
147
|
+
const spotSymbols = symbols !== undefined ? symbols.map((s) => s.replace('PERP_', 'SPOT_')) : [];
|
|
148
|
+
return [
|
|
149
|
+
{
|
|
150
|
+
channel: 'trade',
|
|
151
|
+
symbols
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
channel: 'markprice',
|
|
155
|
+
symbols
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
channel: 'estfundingrate',
|
|
159
|
+
symbols
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
channel: 'openinterest',
|
|
163
|
+
symbols
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
channel: 'indexprice',
|
|
167
|
+
symbols: spotSymbols
|
|
168
|
+
}
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
*map(message, localTimestamp) {
|
|
172
|
+
if (message.topic.endsWith('@indexprice')) {
|
|
173
|
+
this._indexPrices.set(message.data.symbol.replace('SPOT_', 'PERP_'), message.data.price);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
const symbol = message.data.symbol;
|
|
177
|
+
const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(symbol, 'woo-x');
|
|
178
|
+
const lastIndexPrice = this._indexPrices.get(symbol);
|
|
179
|
+
if (lastIndexPrice !== undefined) {
|
|
180
|
+
pendingTickerInfo.updateIndexPrice(lastIndexPrice);
|
|
181
|
+
}
|
|
182
|
+
if (message.topic.endsWith('@markprice')) {
|
|
183
|
+
pendingTickerInfo.updateMarkPrice(message.data.price);
|
|
184
|
+
pendingTickerInfo.updateTimestamp(new Date(message.ts));
|
|
185
|
+
}
|
|
186
|
+
if (message.topic.endsWith('@trade')) {
|
|
187
|
+
pendingTickerInfo.updateLastPrice(message.data.price);
|
|
188
|
+
pendingTickerInfo.updateTimestamp(new Date(message.ts));
|
|
189
|
+
}
|
|
190
|
+
if (message.topic.endsWith('@estfundingrate')) {
|
|
191
|
+
pendingTickerInfo.updateFundingRate(message.data.fundingRate);
|
|
192
|
+
pendingTickerInfo.updateFundingTimestamp(new Date(message.data.fundingTs));
|
|
193
|
+
pendingTickerInfo.updateTimestamp(new Date(message.ts));
|
|
194
|
+
}
|
|
195
|
+
if (message.topic.endsWith('@openinterest')) {
|
|
196
|
+
pendingTickerInfo.updateOpenInterest(message.data.openInterest);
|
|
197
|
+
pendingTickerInfo.updateTimestamp(new Date(message.ts));
|
|
198
|
+
}
|
|
199
|
+
if (pendingTickerInfo.hasChanged()) {
|
|
200
|
+
yield pendingTickerInfo.getSnapshot(localTimestamp);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
exports.WooxDerivativeTickerMapper = WooxDerivativeTickerMapper;
|
|
206
|
+
class WooxBookTickerMapper {
|
|
207
|
+
canHandle(message) {
|
|
208
|
+
return message.topic !== undefined && message.topic.endsWith('@bbo');
|
|
209
|
+
}
|
|
210
|
+
getFilters(symbols) {
|
|
211
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
212
|
+
return [
|
|
213
|
+
{
|
|
214
|
+
channel: 'bbo',
|
|
215
|
+
symbols
|
|
216
|
+
}
|
|
217
|
+
];
|
|
218
|
+
}
|
|
219
|
+
*map(wooxBBOMessage, localTimestamp) {
|
|
220
|
+
const wooxBookTicker = wooxBBOMessage.data;
|
|
221
|
+
const ticker = {
|
|
222
|
+
type: 'book_ticker',
|
|
223
|
+
symbol: wooxBookTicker.symbol,
|
|
224
|
+
exchange: 'woo-x',
|
|
225
|
+
askAmount: wooxBookTicker.askSize !== undefined ? wooxBookTicker.askSize : undefined,
|
|
226
|
+
askPrice: wooxBookTicker.ask !== undefined ? wooxBookTicker.ask : undefined,
|
|
227
|
+
bidPrice: wooxBookTicker.bid !== undefined ? wooxBookTicker.bid : undefined,
|
|
228
|
+
bidAmount: wooxBookTicker.bidSize !== undefined ? wooxBookTicker.bidSize : undefined,
|
|
229
|
+
timestamp: new Date(wooxBBOMessage.ts),
|
|
230
|
+
localTimestamp: localTimestamp
|
|
231
|
+
};
|
|
232
|
+
yield ticker;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
exports.WooxBookTickerMapper = WooxBookTickerMapper;
|
|
236
|
+
//# sourceMappingURL=woox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"woox.js","sourceRoot":"","sources":["../../src/mappers/woox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AA6B3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AA6B3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAoB7C,cAAc,gBAAgB,CAAA;AAwD9B,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAMvE;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACzB,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,iDAKjC;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,QAEpF"}
|
|
@@ -48,6 +48,7 @@ const bybitspot_1 = require("./bybitspot");
|
|
|
48
48
|
const cryptocom_1 = require("./cryptocom");
|
|
49
49
|
const kucoin_1 = require("./kucoin");
|
|
50
50
|
const bitnomial_1 = require("./bitnomial");
|
|
51
|
+
const woox_1 = require("./woox");
|
|
51
52
|
__exportStar(require("./realtimefeed"), exports);
|
|
52
53
|
const realTimeFeedsMap = {
|
|
53
54
|
bitmex: bitmex_1.BitmexRealTimeFeed,
|
|
@@ -97,7 +98,8 @@ const realTimeFeedsMap = {
|
|
|
97
98
|
'crypto-com': cryptocom_1.CryptoComRealTimeFeed,
|
|
98
99
|
'crypto-com-derivatives': cryptocom_1.CryptoComRealTimeFeed,
|
|
99
100
|
kucoin: kucoin_1.KucoinRealTimeFeed,
|
|
100
|
-
bitnomial: bitnomial_1.BitnomialRealTimeFeed
|
|
101
|
+
bitnomial: bitnomial_1.BitnomialRealTimeFeed,
|
|
102
|
+
'woo-x': woox_1.WooxRealTimeFeed
|
|
101
103
|
};
|
|
102
104
|
function getRealTimeFeedFactory(exchange) {
|
|
103
105
|
if (realTimeFeedsMap[exchange]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,uCAMkB;AAClB,6CAAqD;AACrD,yCAAiD;AACjD,yCAAiD;AACjD,qCAA6C;AAC7C,yCAAiD;AACjD,mCAA+C;AAC/C,yCAAiD;AACjD,yDAAiE;AACjE,uCAAmD;AACnD,+BAA0D;AAC1D,qCAA6C;AAC7C,qCAA6C;AAC7C,mCAMgB;AAChB,qCAA6C;AAC7C,iCAAsF;AAEtF,qCAA6C;AAC7C,mCAA2C;AAC3C,qCAA6C;AAC7C,mDAA2D;AAC3D,yCAAiD;AACjD,yCAAiD;AACjD,qDAA6D;AAC7D,mCAA2C;AAC3C,yCAAiD;AACjD,iCAAyC;AACzC,mCAA2C;AAC3C,2CAAmD;AACnD,mCAA2C;AAC3C,2CAAmD;AACnD,2CAAmD;AACnD,qCAA6C;AAC7C,2CAAmD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Filter } from '../types';
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed';
|
|
3
|
+
export declare class WooxRealTimeFeed extends RealTimeFeedBase {
|
|
4
|
+
protected wssURL: string;
|
|
5
|
+
protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
|
|
6
|
+
protected provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean): Promise<void>;
|
|
7
|
+
protected messageIsError(message: any): boolean;
|
|
8
|
+
protected messageIsHeartbeat(message: any): boolean;
|
|
9
|
+
protected onMessage(msg: any): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=woox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"woox.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/woox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,SAAS,CAAC,MAAM,SAAyE;IAEzF,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;cAmBlD,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO;IA4B7F,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAI/C,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAInD,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG;CAO7B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WooxRealTimeFeed = void 0;
|
|
4
|
+
const handy_1 = require("../handy");
|
|
5
|
+
const realtimefeed_1 = require("./realtimefeed");
|
|
6
|
+
class WooxRealTimeFeed extends realtimefeed_1.RealTimeFeedBase {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.wssURL = 'wss://wss.woo.org/ws/stream/OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY';
|
|
10
|
+
}
|
|
11
|
+
mapToSubscribeMessages(filters) {
|
|
12
|
+
return filters
|
|
13
|
+
.filter((filter) => filter.channel !== 'orderbook')
|
|
14
|
+
.map((filter) => {
|
|
15
|
+
if (!filter.symbols || filter.symbols.length === 0) {
|
|
16
|
+
throw new Error('WooxRealTimeFeed requires explicitly specified symbols when subscribing to live feed');
|
|
17
|
+
}
|
|
18
|
+
return filter.symbols.map((symbol) => {
|
|
19
|
+
return {
|
|
20
|
+
id: `${symbol}@${filter.channel}`,
|
|
21
|
+
topic: `${symbol}@${filter.channel}`,
|
|
22
|
+
event: 'subscribe'
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
})
|
|
26
|
+
.flatMap((f) => f);
|
|
27
|
+
}
|
|
28
|
+
async provideManualSnapshots(filters, shouldCancel) {
|
|
29
|
+
const orderbookFilter = filters.find((f) => f.channel === 'orderbook');
|
|
30
|
+
if (!orderbookFilter) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
await (0, handy_1.wait)(200);
|
|
34
|
+
for (let symbol of orderbookFilter.symbols) {
|
|
35
|
+
if (shouldCancel()) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.send({
|
|
39
|
+
id: `${symbol}@orderbook`,
|
|
40
|
+
event: 'request',
|
|
41
|
+
params: {
|
|
42
|
+
type: 'orderbook',
|
|
43
|
+
symbol
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
await (0, handy_1.wait)(1);
|
|
47
|
+
}
|
|
48
|
+
this.debug('sent orderbook requests for: %s', orderbookFilter.symbols);
|
|
49
|
+
}
|
|
50
|
+
messageIsError(message) {
|
|
51
|
+
return message.success === false || message.errorMsg !== undefined;
|
|
52
|
+
}
|
|
53
|
+
messageIsHeartbeat(message) {
|
|
54
|
+
return message.event === 'ping';
|
|
55
|
+
}
|
|
56
|
+
onMessage(msg) {
|
|
57
|
+
if (msg.event === 'ping') {
|
|
58
|
+
this.send({
|
|
59
|
+
event: 'ping'
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.WooxRealTimeFeed = WooxRealTimeFeed;
|
|
65
|
+
//# sourceMappingURL=woox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"woox.js","sourceRoot":"","sources":["../../src/realtimefeeds/woox.ts"],"names":[],"mappings":";;;AAAA,oCAA+B;AAE/B,iDAAiD;AAEjD,MAAa,gBAAiB,SAAQ,+BAAgB;IAAtD;;QACY,WAAM,GAAG,sEAAsE,CAAA;IAgE3F,CAAC;IA9DW,sBAAsB,CAAC,OAAyB;QACxD,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,WAAW,CAAC;aAClD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClD,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAA;aACxG;YAED,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACnC,OAAO;oBACL,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBACjC,KAAK,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBACpC,KAAK,EAAE,WAAW;iBACnB,CAAA;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC;aACD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IAES,KAAK,CAAC,sBAAsB,CAAC,OAAyB,EAAE,YAA2B;QAC3F,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAA;QACtE,IAAI,CAAC,eAAe,EAAE;YACpB,OAAM;SACP;QAED,MAAM,IAAA,YAAI,EAAC,GAAG,CAAC,CAAA;QAEf,KAAK,IAAI,MAAM,IAAI,eAAe,CAAC,OAAQ,EAAE;YAC3C,IAAI,YAAY,EAAE,EAAE;gBAClB,OAAM;aACP;YAED,IAAI,CAAC,IAAI,CAAC;gBACR,EAAE,EAAE,GAAG,MAAM,YAAY;gBACzB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE;oBACN,IAAI,EAAE,WAAW;oBACjB,MAAM;iBACP;aACF,CAAC,CAAA;YAEF,MAAM,IAAA,YAAI,EAAC,CAAC,CAAC,CAAA;SACd;QAED,IAAI,CAAC,KAAK,CAAC,iCAAiC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;IACxE,CAAC;IAES,cAAc,CAAC,OAAY;QACnC,OAAO,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAA;IACpE,CAAC;IAES,kBAAkB,CAAC,OAAY;QACvC,OAAO,OAAO,CAAC,KAAK,KAAK,MAAM,CAAA;IACjC,CAAC;IAES,SAAS,CAAC,GAAQ;QAC1B,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,MAAM;aACd,CAAC,CAAA;SACH;IACH,CAAC;CACF;AAjED,4CAiEC"}
|
package/package.json
CHANGED
package/src/consts.ts
CHANGED
|
@@ -46,7 +46,8 @@ export const EXCHANGES = [
|
|
|
46
46
|
'crypto-com',
|
|
47
47
|
'crypto-com-derivatives',
|
|
48
48
|
'kucoin',
|
|
49
|
-
'bitnomial'
|
|
49
|
+
'bitnomial',
|
|
50
|
+
'woo-x'
|
|
50
51
|
] as const
|
|
51
52
|
|
|
52
53
|
const BINANCE_CHANNELS = ['trade', 'aggTrade', 'ticker', 'depth', 'depthSnapshot', 'bookTicker', 'recentTrades', 'borrowInterest'] as const
|
|
@@ -386,6 +387,18 @@ const KUCOIN_CHANNELS = ['market/ticker', 'market/snapshot', 'market/level2', 'm
|
|
|
386
387
|
|
|
387
388
|
const BITNOMIAL_CHANNELS = ['trade', 'level', 'book', 'block', 'status']
|
|
388
389
|
|
|
390
|
+
const WOOX_CHANNELS = [
|
|
391
|
+
'trade',
|
|
392
|
+
'orderbook',
|
|
393
|
+
'orderbookupdate',
|
|
394
|
+
'ticker',
|
|
395
|
+
'bbo',
|
|
396
|
+
'indexprice',
|
|
397
|
+
'markprice',
|
|
398
|
+
'openinterest',
|
|
399
|
+
'estfundingrate'
|
|
400
|
+
]
|
|
401
|
+
|
|
389
402
|
export const EXCHANGE_CHANNELS_INFO = {
|
|
390
403
|
bitmex: BITMEX_CHANNELS,
|
|
391
404
|
coinbase: COINBASE_CHANNELS,
|
|
@@ -434,5 +447,6 @@ export const EXCHANGE_CHANNELS_INFO = {
|
|
|
434
447
|
'crypto-com': CRYPTO_COM_CHANNELS,
|
|
435
448
|
'crypto-com-derivatives': CRYPTO_COM_DERIVATIVES,
|
|
436
449
|
kucoin: KUCOIN_CHANNELS,
|
|
437
|
-
bitnomial: BITNOMIAL_CHANNELS
|
|
450
|
+
bitnomial: BITNOMIAL_CHANNELS,
|
|
451
|
+
'woo-x': WOOX_CHANNELS
|
|
438
452
|
}
|
package/src/mappers/binance.ts
CHANGED
|
@@ -395,7 +395,7 @@ export class BinanceLiquidationsMapper implements Mapper<'binance-futures' | 'bi
|
|
|
395
395
|
symbol: binanceLiquidation.s,
|
|
396
396
|
exchange: this._exchange,
|
|
397
397
|
id: undefined,
|
|
398
|
-
price: Number(binanceLiquidation.
|
|
398
|
+
price: Number(binanceLiquidation.p),
|
|
399
399
|
amount: Number(binanceLiquidation.z), // use Order Filled Accumulated Quantity
|
|
400
400
|
side: binanceLiquidation.S === 'SELL' ? 'sell' : 'buy',
|
|
401
401
|
timestamp: new Date(binanceLiquidation.T),
|
|
@@ -439,7 +439,7 @@ export class BinanceBookTickerMapper implements Mapper<'binance-futures' | 'bina
|
|
|
439
439
|
askPrice: binanceBookTicker.a !== undefined ? Number(binanceBookTicker.a) : undefined,
|
|
440
440
|
bidPrice: binanceBookTicker.b !== undefined ? Number(binanceBookTicker.b) : undefined,
|
|
441
441
|
bidAmount: binanceBookTicker.B !== undefined ? Number(binanceBookTicker.B) : undefined,
|
|
442
|
-
timestamp: binanceBookTicker.
|
|
442
|
+
timestamp: binanceBookTicker.E !== undefined ? new Date(binanceBookTicker.E) : localTimestamp,
|
|
443
443
|
localTimestamp: localTimestamp
|
|
444
444
|
}
|
|
445
445
|
|
|
@@ -545,5 +545,5 @@ type BinanceBookTickerData = {
|
|
|
545
545
|
B: string // best bid qty
|
|
546
546
|
a: string // best ask price
|
|
547
547
|
A: string // best ask qty
|
|
548
|
-
|
|
548
|
+
E?: number // transaction time
|
|
549
549
|
}
|
package/src/mappers/index.ts
CHANGED
|
@@ -90,6 +90,7 @@ import { phemexBookChangeMapper, PhemexDerivativeTickerMapper, phemexTradesMappe
|
|
|
90
90
|
import { PoloniexBookChangeMapper, PoloniexTradesMapper, PoloniexV2BookChangeMapper, PoloniexV2TradesMapper } from './poloniex'
|
|
91
91
|
import { SerumBookChangeMapper, SerumBookTickerMapper, SerumTradesMapper } from './serum'
|
|
92
92
|
import { UpbitBookChangeMapper, UpbitTradesMapper } from './upbit'
|
|
93
|
+
import { WooxBookChangeMapper, WooxBookTickerMapper, WooxDerivativeTickerMapper, wooxTradesMapper } from './woox'
|
|
93
94
|
|
|
94
95
|
export * from './mapper'
|
|
95
96
|
|
|
@@ -183,7 +184,8 @@ const tradesMappers = {
|
|
|
183
184
|
'crypto-com': () => new CryptoComTradesMapper('crypto-com'),
|
|
184
185
|
'crypto-com-derivatives': () => new CryptoComTradesMapper('crypto-com-derivatives'),
|
|
185
186
|
kucoin: () => new KucoinTradesMapper('kucoin'),
|
|
186
|
-
bitnomial: () => bitnomialTradesMapper
|
|
187
|
+
bitnomial: () => bitnomialTradesMapper,
|
|
188
|
+
'woo-x': () => wooxTradesMapper
|
|
187
189
|
}
|
|
188
190
|
|
|
189
191
|
const bookChangeMappers = {
|
|
@@ -257,7 +259,8 @@ const bookChangeMappers = {
|
|
|
257
259
|
'crypto-com': () => new CryptoComBookChangeMapper('crypto-com'),
|
|
258
260
|
'crypto-com-derivatives': () => new CryptoComBookChangeMapper('crypto-com-derivatives'),
|
|
259
261
|
kucoin: (localTimestamp: Date) => new KucoinBookChangeMapper('kucoin', isRealTime(localTimestamp) === false),
|
|
260
|
-
bitnomial: () => new BitnomialBookChangMapper()
|
|
262
|
+
bitnomial: () => new BitnomialBookChangMapper(),
|
|
263
|
+
'woo-x': () => new WooxBookChangeMapper()
|
|
261
264
|
}
|
|
262
265
|
|
|
263
266
|
const derivativeTickersMappers = {
|
|
@@ -287,7 +290,8 @@ const derivativeTickersMappers = {
|
|
|
287
290
|
ascendex: () => new AscendexDerivativeTickerMapper(),
|
|
288
291
|
dydx: () => new DydxDerivativeTickerMapper(),
|
|
289
292
|
'crypto-com-derivatives': () => new CryptoComDerivativeTickerMapper('crypto-com-derivatives'),
|
|
290
|
-
'crypto-com': () => new CryptoComDerivativeTickerMapper('crypto-com')
|
|
293
|
+
'crypto-com': () => new CryptoComDerivativeTickerMapper('crypto-com'),
|
|
294
|
+
'woo-x': () => new WooxDerivativeTickerMapper()
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
const optionsSummaryMappers = {
|
|
@@ -367,7 +371,8 @@ const bookTickersMappers = {
|
|
|
367
371
|
'bybit-spot': () => new BybitSpotBookTickerMapper('bybit-spot'),
|
|
368
372
|
'crypto-com': () => new CryptoComBookTickerMapper('crypto-com'),
|
|
369
373
|
'crypto-com-derivatives': () => new CryptoComBookTickerMapper('crypto-com-derivatives'),
|
|
370
|
-
kucoin: () => new KucoinBookTickerMapper('kucoin')
|
|
374
|
+
kucoin: () => new KucoinBookTickerMapper('kucoin'),
|
|
375
|
+
'woo-x': () => new WooxBookTickerMapper()
|
|
371
376
|
}
|
|
372
377
|
|
|
373
378
|
export const normalizeTrades = <T extends keyof typeof tradesMappers>(exchange: T, localTimestamp: Date): Mapper<T, Trade> => {
|