tardis-dev 13.27.2 → 13.28.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 +12 -1
- package/dist/consts.js.map +1 -1
- package/dist/mappers/bybit.d.ts +2 -2
- 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 +7 -2
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/kucoinfutures.d.ts +211 -0
- package/dist/mappers/kucoinfutures.d.ts.map +1 -0
- package/dist/mappers/kucoinfutures.js +294 -0
- package/dist/mappers/kucoinfutures.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/kucoinfutures.d.ts +26 -0
- package/dist/realtimefeeds/kucoinfutures.d.ts.map +1 -0
- package/dist/realtimefeeds/kucoinfutures.js +115 -0
- package/dist/realtimefeeds/kucoinfutures.js.map +1 -0
- package/package.json +1 -1
- package/src/consts.ts +13 -1
- package/src/mappers/index.ts +12 -2
- package/src/mappers/kucoinfutures.ts +483 -0
- package/src/realtimefeeds/index.ts +3 -1
- package/src/realtimefeeds/kucoinfutures.ts +135 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KucoinFuturesDerivativeTickerMapper = exports.KucoinFuturesBookTickerMapper = exports.KucoinFuturesBookChangeMapper = exports.KucoinFuturesTradesMapper = void 0;
|
|
4
|
+
const debug_1 = require("../debug");
|
|
5
|
+
const handy_1 = require("../handy");
|
|
6
|
+
const mapper_1 = require("./mapper");
|
|
7
|
+
class KucoinFuturesTradesMapper {
|
|
8
|
+
canHandle(message) {
|
|
9
|
+
return message.type === 'message' && message.topic.startsWith('/contractMarket/execution');
|
|
10
|
+
}
|
|
11
|
+
getFilters(symbols) {
|
|
12
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
channel: 'contractMarket/execution',
|
|
16
|
+
symbols
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
*map(message, localTimestamp) {
|
|
21
|
+
const kucoinTrade = message.data;
|
|
22
|
+
const timestamp = new Date(kucoinTrade.ts / 1000000);
|
|
23
|
+
yield {
|
|
24
|
+
type: 'trade',
|
|
25
|
+
symbol: kucoinTrade.symbol,
|
|
26
|
+
exchange: 'kucoin-futures',
|
|
27
|
+
id: kucoinTrade.tradeId,
|
|
28
|
+
price: Number(kucoinTrade.price),
|
|
29
|
+
amount: Number(kucoinTrade.size),
|
|
30
|
+
side: kucoinTrade.side === 'sell' ? 'sell' : 'buy',
|
|
31
|
+
timestamp,
|
|
32
|
+
localTimestamp
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.KucoinFuturesTradesMapper = KucoinFuturesTradesMapper;
|
|
37
|
+
class KucoinFuturesBookChangeMapper {
|
|
38
|
+
constructor(ignoreBookSnapshotOverlapError) {
|
|
39
|
+
this.ignoreBookSnapshotOverlapError = ignoreBookSnapshotOverlapError;
|
|
40
|
+
this.symbolToDepthInfoMapping = {};
|
|
41
|
+
}
|
|
42
|
+
canHandle(message) {
|
|
43
|
+
return message.type === 'message' && message.topic.startsWith('/contractMarket/level2');
|
|
44
|
+
}
|
|
45
|
+
getFilters(symbols) {
|
|
46
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
47
|
+
return [
|
|
48
|
+
{
|
|
49
|
+
channel: 'contractMarket/level2',
|
|
50
|
+
symbols
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
channel: 'contractMarket/level2Snapshot',
|
|
54
|
+
symbols
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
*map(message, localTimestamp) {
|
|
59
|
+
const symbol = message.topic.split(':')[1];
|
|
60
|
+
if (this.symbolToDepthInfoMapping[symbol] === undefined) {
|
|
61
|
+
this.symbolToDepthInfoMapping[symbol] = {
|
|
62
|
+
bufferedUpdates: new handy_1.CircularBuffer(2000)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const symbolDepthInfo = this.symbolToDepthInfoMapping[symbol];
|
|
66
|
+
const snapshotAlreadyProcessed = symbolDepthInfo.snapshotProcessed;
|
|
67
|
+
// first check if received message is snapshot and process it as such if it is
|
|
68
|
+
if (message.subject === 'level2Snapshot') {
|
|
69
|
+
// if we've already received 'manual' snapshot, ignore if there is another one
|
|
70
|
+
if (snapshotAlreadyProcessed) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// produce snapshot book_change
|
|
74
|
+
const kucoinSnapshotData = message.data;
|
|
75
|
+
if (!kucoinSnapshotData.asks) {
|
|
76
|
+
kucoinSnapshotData.asks = [];
|
|
77
|
+
}
|
|
78
|
+
if (!kucoinSnapshotData.bids) {
|
|
79
|
+
kucoinSnapshotData.bids = [];
|
|
80
|
+
}
|
|
81
|
+
// mark given symbol depth info that has snapshot processed
|
|
82
|
+
symbolDepthInfo.lastUpdateId = Number(kucoinSnapshotData.sequence);
|
|
83
|
+
symbolDepthInfo.snapshotProcessed = true;
|
|
84
|
+
// if there were any depth updates buffered, let's process those by adding to or updating the initial snapshot
|
|
85
|
+
for (const update of symbolDepthInfo.bufferedUpdates.items()) {
|
|
86
|
+
const bookChange = this.mapBookDepthUpdate(update, localTimestamp);
|
|
87
|
+
if (bookChange !== undefined) {
|
|
88
|
+
const mappedChange = this.mapChange(update.data.change);
|
|
89
|
+
if (mappedChange.price == 0) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const matchingSide = mappedChange.isBid ? kucoinSnapshotData.bids : kucoinSnapshotData.asks;
|
|
93
|
+
const matchingLevel = matchingSide.find((b) => b[0] === mappedChange.price);
|
|
94
|
+
if (matchingLevel !== undefined) {
|
|
95
|
+
// remove empty level from snapshot
|
|
96
|
+
if (mappedChange.amount === 0) {
|
|
97
|
+
const index = matchingSide.findIndex((b) => b[0] === mappedChange.price);
|
|
98
|
+
if (index > -1) {
|
|
99
|
+
matchingSide.splice(index, 1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
matchingLevel[1] = mappedChange.amount;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (mappedChange.amount != 0) {
|
|
107
|
+
matchingSide.push([mappedChange.price, mappedChange.amount]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// remove all buffered updates
|
|
112
|
+
symbolDepthInfo.bufferedUpdates.clear();
|
|
113
|
+
const bookChange = {
|
|
114
|
+
type: 'book_change',
|
|
115
|
+
symbol,
|
|
116
|
+
exchange: 'kucoin-futures',
|
|
117
|
+
isSnapshot: true,
|
|
118
|
+
bids: kucoinSnapshotData.bids.map(this.mapBookLevel),
|
|
119
|
+
asks: kucoinSnapshotData.asks.map(this.mapBookLevel),
|
|
120
|
+
timestamp: localTimestamp,
|
|
121
|
+
localTimestamp
|
|
122
|
+
};
|
|
123
|
+
yield bookChange;
|
|
124
|
+
}
|
|
125
|
+
else if (snapshotAlreadyProcessed) {
|
|
126
|
+
// snapshot was already processed let's map the message as normal book_change
|
|
127
|
+
const bookChange = this.mapBookDepthUpdate(message, localTimestamp);
|
|
128
|
+
if (bookChange !== undefined) {
|
|
129
|
+
yield bookChange;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
symbolDepthInfo.bufferedUpdates.append(message);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
mapBookDepthUpdate(l2UpdateMessage, localTimestamp) {
|
|
137
|
+
// we can safely assume here that depthContext and lastUpdateId aren't null here as this is method only works
|
|
138
|
+
// when we've already processed the snapshot
|
|
139
|
+
const symbol = l2UpdateMessage.topic.split(':')[1];
|
|
140
|
+
const depthContext = this.symbolToDepthInfoMapping[symbol];
|
|
141
|
+
const lastUpdateId = depthContext.lastUpdateId;
|
|
142
|
+
// Drop any event where sequence is <= lastUpdateId in the snapshot
|
|
143
|
+
if (l2UpdateMessage.data.sequence <= lastUpdateId) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// The first processed event should have sequence>lastUpdateId
|
|
147
|
+
if (!depthContext.validatedFirstUpdate) {
|
|
148
|
+
// if there is new instrument added it can have empty book at first and that's normal
|
|
149
|
+
const bookSnapshotIsEmpty = lastUpdateId == -1 || lastUpdateId == 0;
|
|
150
|
+
if (l2UpdateMessage.data.sequence === lastUpdateId + 1 || bookSnapshotIsEmpty) {
|
|
151
|
+
depthContext.validatedFirstUpdate = true;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const message = `Book depth snapshot has no overlap with first update, update ${JSON.stringify(l2UpdateMessage)}, lastUpdateId: ${lastUpdateId}, exchange kucoin-futures`;
|
|
155
|
+
if (this.ignoreBookSnapshotOverlapError) {
|
|
156
|
+
depthContext.validatedFirstUpdate = true;
|
|
157
|
+
(0, debug_1.debug)(message);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
throw new Error(message);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const change = this.mapChange(l2UpdateMessage.data.change);
|
|
165
|
+
return {
|
|
166
|
+
type: 'book_change',
|
|
167
|
+
symbol: symbol,
|
|
168
|
+
exchange: 'kucoin-futures',
|
|
169
|
+
isSnapshot: false,
|
|
170
|
+
bids: change.isBid
|
|
171
|
+
? [
|
|
172
|
+
{
|
|
173
|
+
price: change.price,
|
|
174
|
+
amount: change.amount
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
: [],
|
|
178
|
+
asks: change.isBid === false
|
|
179
|
+
? [
|
|
180
|
+
{
|
|
181
|
+
price: change.price,
|
|
182
|
+
amount: change.amount
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
: [],
|
|
186
|
+
timestamp: new Date(l2UpdateMessage.data.timestamp),
|
|
187
|
+
localTimestamp: localTimestamp
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
mapBookLevel(level) {
|
|
191
|
+
return { price: level[0], amount: level[1] };
|
|
192
|
+
}
|
|
193
|
+
mapChange(change) {
|
|
194
|
+
const parts = change.split(',');
|
|
195
|
+
const isBid = parts[1] === 'buy';
|
|
196
|
+
const price = Number(parts[0]);
|
|
197
|
+
const amount = Number(parts[2]);
|
|
198
|
+
return { isBid, price, amount };
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.KucoinFuturesBookChangeMapper = KucoinFuturesBookChangeMapper;
|
|
202
|
+
class KucoinFuturesBookTickerMapper {
|
|
203
|
+
canHandle(message) {
|
|
204
|
+
return message.type === 'message' && message.topic.startsWith('/contractMarket/tickerV2');
|
|
205
|
+
}
|
|
206
|
+
getFilters(symbols) {
|
|
207
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
208
|
+
return [
|
|
209
|
+
{
|
|
210
|
+
channel: 'contractMarket/tickerV2',
|
|
211
|
+
symbols
|
|
212
|
+
}
|
|
213
|
+
];
|
|
214
|
+
}
|
|
215
|
+
*map(message, localTimestamp) {
|
|
216
|
+
const symbol = message.topic.split(':')[1];
|
|
217
|
+
const bookTicker = {
|
|
218
|
+
type: 'book_ticker',
|
|
219
|
+
symbol,
|
|
220
|
+
exchange: 'kucoin-futures',
|
|
221
|
+
askAmount: message.data.bestAskSize !== undefined && message.data.bestAskSize !== null ? message.data.bestAskSize : undefined,
|
|
222
|
+
askPrice: message.data.bestAskPrice !== undefined && message.data.bestAskPrice !== null ? Number(message.data.bestAskPrice) : undefined,
|
|
223
|
+
bidPrice: message.data.bestBidPrice !== undefined && message.data.bestBidPrice !== null ? Number(message.data.bestBidPrice) : undefined,
|
|
224
|
+
bidAmount: message.data.bestBidSize !== undefined && message.data.bestBidSize !== null ? message.data.bestBidSize : undefined,
|
|
225
|
+
timestamp: new Date(message.data.ts / 1000000),
|
|
226
|
+
localTimestamp: localTimestamp
|
|
227
|
+
};
|
|
228
|
+
yield bookTicker;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
exports.KucoinFuturesBookTickerMapper = KucoinFuturesBookTickerMapper;
|
|
232
|
+
class KucoinFuturesDerivativeTickerMapper {
|
|
233
|
+
constructor() {
|
|
234
|
+
this.pendingTickerInfoHelper = new mapper_1.PendingTickerInfoHelper();
|
|
235
|
+
this._lastPrices = new Map();
|
|
236
|
+
this._openInterests = new Map();
|
|
237
|
+
}
|
|
238
|
+
canHandle(message) {
|
|
239
|
+
return (message.type === 'message' &&
|
|
240
|
+
(message.topic.startsWith('/contract/instrument') ||
|
|
241
|
+
message.topic.startsWith('/contractMarket/execution') ||
|
|
242
|
+
message.topic.startsWith('/contract/details')));
|
|
243
|
+
}
|
|
244
|
+
getFilters(symbols) {
|
|
245
|
+
symbols = (0, handy_1.upperCaseSymbols)(symbols);
|
|
246
|
+
return [
|
|
247
|
+
{
|
|
248
|
+
channel: 'contract/instrument',
|
|
249
|
+
symbols
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
channel: 'contractMarket/execution',
|
|
253
|
+
symbols
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
channel: 'contract/details',
|
|
257
|
+
symbols
|
|
258
|
+
}
|
|
259
|
+
];
|
|
260
|
+
}
|
|
261
|
+
*map(message, localTimestamp) {
|
|
262
|
+
const symbol = message.topic.split(':')[1];
|
|
263
|
+
const pendingTickerInfo = this.pendingTickerInfoHelper.getPendingTickerInfo(symbol, 'kucoin-futures');
|
|
264
|
+
if (message.subject === 'match') {
|
|
265
|
+
this._lastPrices.set(symbol, Number(message.data.price));
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
if (message.subject === 'contractDetails') {
|
|
269
|
+
this._openInterests.set(symbol, Number(message.data.openInterest));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const lastPrice = this._lastPrices.get(symbol);
|
|
273
|
+
const openInterest = this._openInterests.get(symbol);
|
|
274
|
+
if (message.subject === 'mark.index.price') {
|
|
275
|
+
pendingTickerInfo.updateIndexPrice(message.data.indexPrice);
|
|
276
|
+
pendingTickerInfo.updateMarkPrice(message.data.markPrice);
|
|
277
|
+
}
|
|
278
|
+
if (message.subject === 'funding.rate') {
|
|
279
|
+
pendingTickerInfo.updateTimestamp(new Date(message.data.timestamp));
|
|
280
|
+
pendingTickerInfo.updateFundingRate(message.data.fundingRate);
|
|
281
|
+
}
|
|
282
|
+
if (lastPrice !== undefined) {
|
|
283
|
+
pendingTickerInfo.updateLastPrice(lastPrice);
|
|
284
|
+
}
|
|
285
|
+
if (openInterest !== undefined) {
|
|
286
|
+
pendingTickerInfo.updateOpenInterest(openInterest);
|
|
287
|
+
}
|
|
288
|
+
if (pendingTickerInfo.hasChanged()) {
|
|
289
|
+
yield pendingTickerInfo.getSnapshot(localTimestamp);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
exports.KucoinFuturesDerivativeTickerMapper = KucoinFuturesDerivativeTickerMapper;
|
|
294
|
+
//# sourceMappingURL=kucoinfutures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kucoinfutures.js","sourceRoot":"","sources":["../../src/mappers/kucoinfutures.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;AAuB7C,cAAc,gBAAgB,CAAA;AA6D9B,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"}
|
|
@@ -51,6 +51,7 @@ const woox_1 = require("./woox");
|
|
|
51
51
|
const blockchaincom_1 = require("./blockchaincom");
|
|
52
52
|
const binanceeuropeanoptions_1 = require("./binanceeuropeanoptions");
|
|
53
53
|
const okexspreads_1 = require("./okexspreads");
|
|
54
|
+
const kucoinfutures_1 = require("./kucoinfutures");
|
|
54
55
|
__exportStar(require("./realtimefeed"), exports);
|
|
55
56
|
const realTimeFeedsMap = {
|
|
56
57
|
bitmex: bitmex_1.BitmexRealTimeFeed,
|
|
@@ -105,7 +106,8 @@ const realTimeFeedsMap = {
|
|
|
105
106
|
'woo-x': woox_1.WooxRealTimeFeed,
|
|
106
107
|
'blockchain-com': blockchaincom_1.BlockchainComRealTimeFeed,
|
|
107
108
|
'binance-european-options': binanceeuropeanoptions_1.BinanceEuropeanOptionsRealTimeFeed,
|
|
108
|
-
'okex-spreads': okexspreads_1.OkexSpreadsRealTimeFeed
|
|
109
|
+
'okex-spreads': okexspreads_1.OkexSpreadsRealTimeFeed,
|
|
110
|
+
'kucoin-futures': kucoinfutures_1.KucoinFuturesRealTimeFeed
|
|
109
111
|
};
|
|
110
112
|
function getRealTimeFeedFactory(exchange) {
|
|
111
113
|
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,mCAAwG;AACxG,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,qCAA6C;AAC7C,2CAAmD;AACnD,iCAAyC;AACzC,mDAA2D;AAC3D,qEAA6E;AAC7E,+CAAuD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Writable } from 'stream';
|
|
3
|
+
import { Filter } from '../types';
|
|
4
|
+
import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed';
|
|
5
|
+
export declare class KucoinFuturesRealTimeFeed extends MultiConnectionRealTimeFeedBase {
|
|
6
|
+
private _httpURL;
|
|
7
|
+
protected _getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void): Generator<KucoinFuturesSingleConnectionRealTimeFeed | KucoinFuturesContractDetailsClient, void, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export declare class KucoinFuturesSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
10
|
+
private readonly _httpURL;
|
|
11
|
+
constructor(exchange: string, filters: Filter<string>[], _httpURL: string, timeoutIntervalMS: number | undefined, onError?: (error: Error) => void);
|
|
12
|
+
protected wssURL: string;
|
|
13
|
+
protected getWebSocketUrl(): Promise<string>;
|
|
14
|
+
protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
|
|
15
|
+
protected provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean): Promise<void>;
|
|
16
|
+
protected messageIsError(message: any): boolean;
|
|
17
|
+
protected sendCustomPing: () => void;
|
|
18
|
+
protected messageIsHeartbeat(msg: any): boolean;
|
|
19
|
+
}
|
|
20
|
+
declare class KucoinFuturesContractDetailsClient extends PoolingClientBase {
|
|
21
|
+
private readonly _httpURL;
|
|
22
|
+
constructor(exchange: string, _httpURL: string);
|
|
23
|
+
protected poolDataToStream(outputStream: Writable): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=kucoinfutures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kucoinfutures.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/kucoinfutures.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAWrG,qBAAa,yBAA0B,SAAQ,+BAA+B;IAC5E,OAAO,CAAC,QAAQ,CAAuC;IAEvD,SAAS,CAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAYvI;AAED,qBAAa,yCAA0C,SAAQ,gBAAgB;IAI3E,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAFzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACR,QAAQ,EAAE,MAAM,EACjC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAIlC,SAAS,CAAC,MAAM,SAAK;cAEL,eAAe;IAM/B,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;cAiBlD,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO;IA8B7F,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAI/C,SAAS,CAAC,cAAc,aAKvB;IAED,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG;CAGtC;AAED,cAAM,kCAAmC,SAAQ,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAA3C,QAAQ,EAAE,MAAM,EAAmB,QAAQ,EAAE,MAAM;cAI/C,gBAAgB,CAAC,YAAY,EAAE,QAAQ;CAiBxD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KucoinFuturesSingleConnectionRealTimeFeed = exports.KucoinFuturesRealTimeFeed = void 0;
|
|
4
|
+
const handy_1 = require("../handy");
|
|
5
|
+
const realtimefeed_1 = require("./realtimefeed");
|
|
6
|
+
const kucoinHttpOptions = {
|
|
7
|
+
timeout: 10 * 1000,
|
|
8
|
+
retry: {
|
|
9
|
+
limit: 10,
|
|
10
|
+
statusCodes: [418, 429, 500, 403],
|
|
11
|
+
maxRetryAfter: 120 * 1000
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
class KucoinFuturesRealTimeFeed extends realtimefeed_1.MultiConnectionRealTimeFeedBase {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this._httpURL = 'https://api-futures.kucoin.com/api';
|
|
18
|
+
}
|
|
19
|
+
*_getRealTimeFeeds(exchange, filters, timeoutIntervalMS, onError) {
|
|
20
|
+
const wsFilters = filters.filter((f) => f.channel !== 'contract/details');
|
|
21
|
+
if (wsFilters.length > 0) {
|
|
22
|
+
yield new KucoinFuturesSingleConnectionRealTimeFeed(exchange, wsFilters, this._httpURL, timeoutIntervalMS, onError);
|
|
23
|
+
}
|
|
24
|
+
const contractDetailsFilters = filters.filter((f) => f.channel === 'contract/details');
|
|
25
|
+
if (contractDetailsFilters.length > 0) {
|
|
26
|
+
yield new KucoinFuturesContractDetailsClient(exchange, this._httpURL);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.KucoinFuturesRealTimeFeed = KucoinFuturesRealTimeFeed;
|
|
31
|
+
class KucoinFuturesSingleConnectionRealTimeFeed extends realtimefeed_1.RealTimeFeedBase {
|
|
32
|
+
constructor(exchange, filters, _httpURL, timeoutIntervalMS, onError) {
|
|
33
|
+
super(exchange, filters, timeoutIntervalMS, onError);
|
|
34
|
+
this._httpURL = _httpURL;
|
|
35
|
+
this.wssURL = '';
|
|
36
|
+
this.sendCustomPing = () => {
|
|
37
|
+
this.send({
|
|
38
|
+
id: new Date().valueOf().toString(),
|
|
39
|
+
type: 'ping'
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async getWebSocketUrl() {
|
|
44
|
+
const response = (await handy_1.httpClient.post(`${this._httpURL}/v1/bullet-public`, { retry: 3, timeout: 10000 }).json());
|
|
45
|
+
return `${response.data.instanceServers[0].endpoint}?token=${response.data.token}&connectId=${(0, handy_1.getRandomString)()}`;
|
|
46
|
+
}
|
|
47
|
+
mapToSubscribeMessages(filters) {
|
|
48
|
+
return filters
|
|
49
|
+
.filter((f) => f.channel !== 'contractMarket/level2Snapshot')
|
|
50
|
+
.map((filter) => {
|
|
51
|
+
if (!filter.symbols || filter.symbols.length === 0) {
|
|
52
|
+
throw new Error('KucoinFuturesRealTimeFeed requires explicitly specified symbols when subscribing to live feed');
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
id: (0, handy_1.getRandomString)(),
|
|
56
|
+
type: 'subscribe',
|
|
57
|
+
topic: `/${filter.channel}:${filter.symbols.join(',')}`,
|
|
58
|
+
response: true
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async provideManualSnapshots(filters, shouldCancel) {
|
|
63
|
+
const depthSnapshotFilter = filters.find((f) => f.channel === 'contractMarket/level2Snapshot');
|
|
64
|
+
if (!depthSnapshotFilter) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.debug('requesting manual snapshots for: %s', depthSnapshotFilter.symbols);
|
|
68
|
+
for (let symbol of depthSnapshotFilter.symbols) {
|
|
69
|
+
if (shouldCancel()) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const depthSnapshotResponse = (await handy_1.httpClient
|
|
73
|
+
.get(`${this._httpURL}/v1/level2/snapshot?symbol=${symbol}`, kucoinHttpOptions)
|
|
74
|
+
.json());
|
|
75
|
+
const snapshot = {
|
|
76
|
+
type: 'message',
|
|
77
|
+
generated: true,
|
|
78
|
+
topic: `/contractMarket/level2Snapshot:${symbol}`,
|
|
79
|
+
subject: 'level2Snapshot',
|
|
80
|
+
...depthSnapshotResponse
|
|
81
|
+
};
|
|
82
|
+
this.manualSnapshotsBuffer.push(snapshot);
|
|
83
|
+
}
|
|
84
|
+
this.debug('requested manual snapshots successfully for: %s ', depthSnapshotFilter.symbols);
|
|
85
|
+
}
|
|
86
|
+
messageIsError(message) {
|
|
87
|
+
return message.type === 'error';
|
|
88
|
+
}
|
|
89
|
+
messageIsHeartbeat(msg) {
|
|
90
|
+
return msg.type === 'pong';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.KucoinFuturesSingleConnectionRealTimeFeed = KucoinFuturesSingleConnectionRealTimeFeed;
|
|
94
|
+
class KucoinFuturesContractDetailsClient extends realtimefeed_1.PoolingClientBase {
|
|
95
|
+
constructor(exchange, _httpURL) {
|
|
96
|
+
super(exchange, 6);
|
|
97
|
+
this._httpURL = _httpURL;
|
|
98
|
+
}
|
|
99
|
+
async poolDataToStream(outputStream) {
|
|
100
|
+
const openInterestResponse = (await handy_1.httpClient.get(`${this._httpURL}/v1/contracts/active`, kucoinHttpOptions).json());
|
|
101
|
+
for (const instrument of openInterestResponse.data) {
|
|
102
|
+
const openInterestMessage = {
|
|
103
|
+
topic: `/contract/details:${instrument.symbol}`,
|
|
104
|
+
type: 'message',
|
|
105
|
+
subject: 'contractDetails',
|
|
106
|
+
generated: true,
|
|
107
|
+
data: instrument
|
|
108
|
+
};
|
|
109
|
+
if (outputStream.writable) {
|
|
110
|
+
outputStream.write(openInterestMessage);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=kucoinfutures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kucoinfutures.js","sourceRoot":"","sources":["../../src/realtimefeeds/kucoinfutures.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/consts.ts
CHANGED
|
@@ -49,6 +49,7 @@ export const EXCHANGES = [
|
|
|
49
49
|
'crypto-com',
|
|
50
50
|
'crypto-com-derivatives',
|
|
51
51
|
'kucoin',
|
|
52
|
+
'kucoin-futures',
|
|
52
53
|
'bitnomial',
|
|
53
54
|
'woo-x',
|
|
54
55
|
'blockchain-com'
|
|
@@ -458,6 +459,16 @@ const BINANCE_EUROPEAN_OPTIONS_CHANNELS = ['trade', 'depth100', 'index', 'markPr
|
|
|
458
459
|
|
|
459
460
|
const OKEX_SPREADS_CHANNELS = ['sprd-public-trades', 'sprd-bbo-tbt', 'sprd-books5', 'sprd-tickers']
|
|
460
461
|
|
|
462
|
+
const KUCOIN_FUTURES_CHANNELS = [
|
|
463
|
+
'contractMarket/execution',
|
|
464
|
+
'contractMarket/level2',
|
|
465
|
+
'contractMarket/level2Snapshot',
|
|
466
|
+
'contractMarket/tickerV2',
|
|
467
|
+
'contract/instrument',
|
|
468
|
+
'contract/details',
|
|
469
|
+
'contractMarket/snapshot'
|
|
470
|
+
]
|
|
471
|
+
|
|
461
472
|
export const EXCHANGE_CHANNELS_INFO = {
|
|
462
473
|
bitmex: BITMEX_CHANNELS,
|
|
463
474
|
coinbase: COINBASE_CHANNELS,
|
|
@@ -511,5 +522,6 @@ export const EXCHANGE_CHANNELS_INFO = {
|
|
|
511
522
|
'woo-x': WOOX_CHANNELS,
|
|
512
523
|
'blockchain-com': BLOCKCHAIN_COM_CHANNELS,
|
|
513
524
|
'binance-european-options': BINANCE_EUROPEAN_OPTIONS_CHANNELS,
|
|
514
|
-
'okex-spreads': OKEX_SPREADS_CHANNELS
|
|
525
|
+
'okex-spreads': OKEX_SPREADS_CHANNELS,
|
|
526
|
+
'kucoin-futures': KUCOIN_FUTURES_CHANNELS
|
|
515
527
|
}
|
package/src/mappers/index.ts
CHANGED
|
@@ -94,6 +94,12 @@ import {
|
|
|
94
94
|
} from './huobi'
|
|
95
95
|
import { krakenBookChangeMapper, krakenBookTickerMapper, krakenTradesMapper } from './kraken'
|
|
96
96
|
import { KucoinBookChangeMapper, KucoinBookTickerMapper, KucoinTradesMapper } from './kucoin'
|
|
97
|
+
import {
|
|
98
|
+
KucoinFuturesBookChangeMapper,
|
|
99
|
+
KucoinFuturesBookTickerMapper,
|
|
100
|
+
KucoinFuturesDerivativeTickerMapper,
|
|
101
|
+
KucoinFuturesTradesMapper
|
|
102
|
+
} from './kucoinfutures'
|
|
97
103
|
import { Mapper } from './mapper'
|
|
98
104
|
import {
|
|
99
105
|
OkexBookChangeMapper,
|
|
@@ -257,6 +263,7 @@ const tradesMappers = {
|
|
|
257
263
|
'crypto-com': () => new CryptoComTradesMapper('crypto-com'),
|
|
258
264
|
'crypto-com-derivatives': () => new CryptoComTradesMapper('crypto-com-derivatives'),
|
|
259
265
|
kucoin: () => new KucoinTradesMapper('kucoin'),
|
|
266
|
+
'kucoin-futures': () => new KucoinFuturesTradesMapper(),
|
|
260
267
|
bitnomial: () => bitnomialTradesMapper,
|
|
261
268
|
'woo-x': () => wooxTradesMapper,
|
|
262
269
|
'blockchain-com': () => new BlockchainComTradesMapper(),
|
|
@@ -343,6 +350,7 @@ const bookChangeMappers = {
|
|
|
343
350
|
'crypto-com': () => new CryptoComBookChangeMapper('crypto-com'),
|
|
344
351
|
'crypto-com-derivatives': () => new CryptoComBookChangeMapper('crypto-com-derivatives'),
|
|
345
352
|
kucoin: (localTimestamp: Date) => new KucoinBookChangeMapper('kucoin', isRealTime(localTimestamp) === false),
|
|
353
|
+
'kucoin-futures': (localTimestamp: Date) => new KucoinFuturesBookChangeMapper(isRealTime(localTimestamp) === false),
|
|
346
354
|
bitnomial: () => new BitnomialBookChangMapper(),
|
|
347
355
|
'woo-x': () => new WooxBookChangeMapper(),
|
|
348
356
|
'blockchain-com': () => new BlockchainComBookChangeMapper(),
|
|
@@ -380,7 +388,8 @@ const derivativeTickersMappers = {
|
|
|
380
388
|
dydx: () => new DydxDerivativeTickerMapper(),
|
|
381
389
|
'crypto-com-derivatives': () => new CryptoComDerivativeTickerMapper('crypto-com-derivatives'),
|
|
382
390
|
'crypto-com': () => new CryptoComDerivativeTickerMapper('crypto-com'),
|
|
383
|
-
'woo-x': () => new WooxDerivativeTickerMapper()
|
|
391
|
+
'woo-x': () => new WooxDerivativeTickerMapper(),
|
|
392
|
+
'kucoin-futures': () => new KucoinFuturesDerivativeTickerMapper()
|
|
384
393
|
}
|
|
385
394
|
|
|
386
395
|
const optionsSummaryMappers = {
|
|
@@ -470,7 +479,8 @@ const bookTickersMappers = {
|
|
|
470
479
|
delta: () => new DeltaBookTickerMapper(),
|
|
471
480
|
bybit: () => new BybitV5BookTickerMapper('bybit'),
|
|
472
481
|
'gate-io': () => new GateIOV4BookTickerMapper('gate-io'),
|
|
473
|
-
'okex-spreads': () => new OkexSpreadsBookTickerMapper()
|
|
482
|
+
'okex-spreads': () => new OkexSpreadsBookTickerMapper(),
|
|
483
|
+
'kucoin-futures': () => new KucoinFuturesBookTickerMapper()
|
|
474
484
|
}
|
|
475
485
|
|
|
476
486
|
export const normalizeTrades = <T extends keyof typeof tradesMappers>(exchange: T, localTimestamp: Date): Mapper<T, Trade> => {
|