ccxt 4.2.23 → 4.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/ccxt.browser.js +447 -12
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/binanceus.js +108 -6
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bitfinex2.js +189 -1
- package/dist/cjs/src/gate.js +1 -1
- package/dist/cjs/src/phemex.js +1 -1
- package/dist/cjs/src/pro/bitopro.js +146 -1
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binanceus.d.ts +52 -1
- package/js/src/binanceus.js +108 -6
- package/js/src/bingx.js +2 -2
- package/js/src/bitfinex2.d.ts +6 -3
- package/js/src/bitfinex2.js +189 -1
- package/js/src/gate.js +1 -1
- package/js/src/phemex.js +1 -1
- package/js/src/pro/bitopro.d.ts +4 -1
- package/js/src/pro/bitopro.js +147 -2
- package/package.json +1 -1
- package/skip-tests.json +1 -0
package/js/src/pro/bitopro.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// ----------------------------------------------------------------------------
|
|
8
8
|
import bitoproRest from '../bitopro.js';
|
|
9
9
|
import { ExchangeError } from '../base/errors.js';
|
|
10
|
-
import { ArrayCache } from '../base/ws/Cache.js';
|
|
10
|
+
import { ArrayCache, ArrayCacheBySymbolById } from '../base/ws/Cache.js';
|
|
11
11
|
import { sha384 } from '../static_dependencies/noble-hashes/sha512.js';
|
|
12
12
|
// ----------------------------------------------------------------------------
|
|
13
13
|
export default class bitopro extends bitoproRest {
|
|
@@ -16,7 +16,7 @@ export default class bitopro extends bitoproRest {
|
|
|
16
16
|
'has': {
|
|
17
17
|
'ws': true,
|
|
18
18
|
'watchBalance': true,
|
|
19
|
-
'watchMyTrades':
|
|
19
|
+
'watchMyTrades': true,
|
|
20
20
|
'watchOHLCV': false,
|
|
21
21
|
'watchOrderBook': true,
|
|
22
22
|
'watchOrders': false,
|
|
@@ -177,6 +177,150 @@ export default class bitopro extends bitoproRest {
|
|
|
177
177
|
this.trades[symbol] = tradesCache;
|
|
178
178
|
client.resolve(tradesCache, messageHash);
|
|
179
179
|
}
|
|
180
|
+
async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
181
|
+
/**
|
|
182
|
+
* @method
|
|
183
|
+
* @name bitopro#watchMyTrades
|
|
184
|
+
* @description watches information on multiple trades made by the user
|
|
185
|
+
* @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/matches_stream.md
|
|
186
|
+
* @param {string} symbol unified market symbol of the market trades were made in
|
|
187
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
188
|
+
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
189
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
190
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
|
|
191
|
+
*/
|
|
192
|
+
this.checkRequiredCredentials();
|
|
193
|
+
await this.loadMarkets();
|
|
194
|
+
let messageHash = 'USER_TRADE';
|
|
195
|
+
if (symbol !== undefined) {
|
|
196
|
+
const market = this.market(symbol);
|
|
197
|
+
messageHash = messageHash + ':' + market['symbol'];
|
|
198
|
+
}
|
|
199
|
+
const url = this.urls['ws']['private'] + '/' + 'user-trades';
|
|
200
|
+
this.authenticate(url);
|
|
201
|
+
const trades = await this.watch(url, messageHash, undefined, messageHash);
|
|
202
|
+
if (this.newUpdates) {
|
|
203
|
+
limit = trades.getLimit(symbol, limit);
|
|
204
|
+
}
|
|
205
|
+
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
206
|
+
}
|
|
207
|
+
handleMyTrade(client, message) {
|
|
208
|
+
//
|
|
209
|
+
// {
|
|
210
|
+
// "event": "USER_TRADE",
|
|
211
|
+
// "timestamp": 1694667358782,
|
|
212
|
+
// "datetime": "2023-09-14T12:55:58.782Z",
|
|
213
|
+
// "data": {
|
|
214
|
+
// "base": "usdt",
|
|
215
|
+
// "quote": "twd",
|
|
216
|
+
// "side": "ask",
|
|
217
|
+
// "price": "32.039",
|
|
218
|
+
// "volume": "1",
|
|
219
|
+
// "fee": "6407800",
|
|
220
|
+
// "feeCurrency": "twd",
|
|
221
|
+
// "transactionTimestamp": 1694667358,
|
|
222
|
+
// "eventTimestamp": 1694667358,
|
|
223
|
+
// "orderID": 390733918,
|
|
224
|
+
// "orderType": "LIMIT",
|
|
225
|
+
// "matchID": "bd07673a-94b1-419e-b5ee-d7b723261a5d",
|
|
226
|
+
// "isMarket": false,
|
|
227
|
+
// "isMaker": false
|
|
228
|
+
// }
|
|
229
|
+
// }
|
|
230
|
+
//
|
|
231
|
+
const data = this.safeValue(message, 'data', {});
|
|
232
|
+
const baseId = this.safeString(data, 'base');
|
|
233
|
+
const quoteId = this.safeString(data, 'quote');
|
|
234
|
+
const base = this.safeCurrencyCode(baseId);
|
|
235
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
236
|
+
const symbol = this.symbol(base + '/' + quote);
|
|
237
|
+
const messageHash = this.safeString(message, 'event');
|
|
238
|
+
if (this.myTrades === undefined) {
|
|
239
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
240
|
+
this.myTrades = new ArrayCacheBySymbolById(limit);
|
|
241
|
+
}
|
|
242
|
+
const trades = this.myTrades;
|
|
243
|
+
const parsed = this.parseWsTrade(data);
|
|
244
|
+
trades.append(parsed);
|
|
245
|
+
client.resolve(trades, messageHash);
|
|
246
|
+
client.resolve(trades, messageHash + ':' + symbol);
|
|
247
|
+
}
|
|
248
|
+
parseWsTrade(trade, market = undefined) {
|
|
249
|
+
//
|
|
250
|
+
// {
|
|
251
|
+
// "base": "usdt",
|
|
252
|
+
// "quote": "twd",
|
|
253
|
+
// "side": "ask",
|
|
254
|
+
// "price": "32.039",
|
|
255
|
+
// "volume": "1",
|
|
256
|
+
// "fee": "6407800",
|
|
257
|
+
// "feeCurrency": "twd",
|
|
258
|
+
// "transactionTimestamp": 1694667358,
|
|
259
|
+
// "eventTimestamp": 1694667358,
|
|
260
|
+
// "orderID": 390733918,
|
|
261
|
+
// "orderType": "LIMIT",
|
|
262
|
+
// "matchID": "bd07673a-94b1-419e-b5ee-d7b723261a5d",
|
|
263
|
+
// "isMarket": false,
|
|
264
|
+
// "isMaker": false
|
|
265
|
+
// }
|
|
266
|
+
//
|
|
267
|
+
const id = this.safeString(trade, 'matchID');
|
|
268
|
+
const orderId = this.safeString(trade, 'orderID');
|
|
269
|
+
const timestamp = this.safeTimestamp(trade, 'transactionTimestamp');
|
|
270
|
+
const baseId = this.safeString(trade, 'base');
|
|
271
|
+
const quoteId = this.safeString(trade, 'quote');
|
|
272
|
+
const base = this.safeCurrencyCode(baseId);
|
|
273
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
274
|
+
const symbol = this.symbol(base + '/' + quote);
|
|
275
|
+
market = this.safeMarket(symbol, market);
|
|
276
|
+
const price = this.safeString(trade, 'price');
|
|
277
|
+
const type = this.safeStringLower(trade, 'orderType');
|
|
278
|
+
let side = this.safeString(trade, 'side');
|
|
279
|
+
if (side !== undefined) {
|
|
280
|
+
if (side === 'ask') {
|
|
281
|
+
side = 'sell';
|
|
282
|
+
}
|
|
283
|
+
else if (side === 'bid') {
|
|
284
|
+
side = 'buy';
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
const amount = this.safeString(trade, 'volume');
|
|
288
|
+
let fee = undefined;
|
|
289
|
+
const feeAmount = this.safeString(trade, 'fee');
|
|
290
|
+
const feeSymbol = this.safeCurrencyCode(this.safeString(trade, 'feeCurrency'));
|
|
291
|
+
if (feeAmount !== undefined) {
|
|
292
|
+
fee = {
|
|
293
|
+
'cost': feeAmount,
|
|
294
|
+
'currency': feeSymbol,
|
|
295
|
+
'rate': undefined,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
const isMaker = this.safeValue(trade, 'isMaker');
|
|
299
|
+
let takerOrMaker = undefined;
|
|
300
|
+
if (isMaker !== undefined) {
|
|
301
|
+
if (isMaker) {
|
|
302
|
+
takerOrMaker = 'maker';
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
takerOrMaker = 'taker';
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return this.safeTrade({
|
|
309
|
+
'id': id,
|
|
310
|
+
'info': trade,
|
|
311
|
+
'order': orderId,
|
|
312
|
+
'timestamp': timestamp,
|
|
313
|
+
'datetime': this.iso8601(timestamp),
|
|
314
|
+
'symbol': symbol,
|
|
315
|
+
'takerOrMaker': takerOrMaker,
|
|
316
|
+
'type': type,
|
|
317
|
+
'side': side,
|
|
318
|
+
'price': price,
|
|
319
|
+
'amount': amount,
|
|
320
|
+
'cost': undefined,
|
|
321
|
+
'fee': fee,
|
|
322
|
+
}, market);
|
|
323
|
+
}
|
|
180
324
|
async watchTicker(symbol, params = {}) {
|
|
181
325
|
/**
|
|
182
326
|
* @method
|
|
@@ -319,6 +463,7 @@ export default class bitopro extends bitoproRest {
|
|
|
319
463
|
'TICKER': this.handleTicker,
|
|
320
464
|
'ORDER_BOOK': this.handleOrderBook,
|
|
321
465
|
'ACCOUNT_BALANCE': this.handleBalance,
|
|
466
|
+
'USER_TRADE': this.handleMyTrade,
|
|
322
467
|
};
|
|
323
468
|
const event = this.safeString(message, 'event');
|
|
324
469
|
const method = this.safeValue(methods, event);
|
package/package.json
CHANGED