ccxt 4.4.47 → 4.4.48

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.
Files changed (77) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +16 -16
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/ace.js +1 -1
  5. package/dist/cjs/src/binance.js +18 -14
  6. package/dist/cjs/src/bitget.js +4 -2
  7. package/dist/cjs/src/bitmart.js +7 -2
  8. package/dist/cjs/src/bitmex.js +8 -5
  9. package/dist/cjs/src/bybit.js +7 -2
  10. package/dist/cjs/src/coinbase.js +11 -1
  11. package/dist/cjs/src/coincatch.js +86 -2
  12. package/dist/cjs/src/coincheck.js +52 -0
  13. package/dist/cjs/src/coinlist.js +77 -0
  14. package/dist/cjs/src/coinmate.js +63 -0
  15. package/dist/cjs/src/coinmetro.js +68 -0
  16. package/dist/cjs/src/coinone.js +56 -0
  17. package/dist/cjs/src/coinsph.js +67 -1
  18. package/dist/cjs/src/coinspot.js +47 -0
  19. package/dist/cjs/src/currencycom.js +72 -0
  20. package/dist/cjs/src/defx.js +93 -6
  21. package/dist/cjs/src/delta.js +83 -1
  22. package/dist/cjs/src/gate.js +10 -1
  23. package/dist/cjs/src/htx.js +10 -2
  24. package/dist/cjs/src/hyperliquid.js +6 -1
  25. package/dist/cjs/src/independentreserve.js +60 -0
  26. package/dist/cjs/src/kraken.js +1 -1
  27. package/dist/cjs/src/krakenfutures.js +4 -4
  28. package/dist/cjs/src/okx.js +9 -1
  29. package/dist/cjs/src/paradex.js +5 -2
  30. package/dist/cjs/src/phemex.js +103 -0
  31. package/dist/cjs/src/poloniex.js +61 -0
  32. package/dist/cjs/src/poloniexfutures.js +74 -0
  33. package/dist/cjs/src/upbit.js +61 -0
  34. package/dist/cjs/src/woo.js +6 -1
  35. package/js/ccxt.d.ts +1 -1
  36. package/js/ccxt.js +1 -1
  37. package/js/src/abstract/independentreserve.d.ts +6 -0
  38. package/js/src/ace.js +1 -1
  39. package/js/src/binance.d.ts +7 -0
  40. package/js/src/binance.js +18 -14
  41. package/js/src/bitget.js +4 -2
  42. package/js/src/bitmart.js +7 -2
  43. package/js/src/bitmex.js +8 -5
  44. package/js/src/bybit.d.ts +1 -1
  45. package/js/src/bybit.js +7 -2
  46. package/js/src/coinbase.d.ts +1 -0
  47. package/js/src/coinbase.js +11 -1
  48. package/js/src/coincatch.d.ts +1 -2
  49. package/js/src/coincatch.js +86 -2
  50. package/js/src/coincheck.js +52 -0
  51. package/js/src/coinlist.js +77 -0
  52. package/js/src/coinmate.js +63 -0
  53. package/js/src/coinmetro.js +68 -0
  54. package/js/src/coinone.js +56 -0
  55. package/js/src/coinsph.d.ts +1 -1
  56. package/js/src/coinsph.js +67 -1
  57. package/js/src/coinspot.js +47 -0
  58. package/js/src/currencycom.js +72 -0
  59. package/js/src/defx.js +93 -6
  60. package/js/src/delta.js +83 -1
  61. package/js/src/gate.d.ts +1 -0
  62. package/js/src/gate.js +10 -1
  63. package/js/src/htx.d.ts +1 -0
  64. package/js/src/htx.js +10 -2
  65. package/js/src/hyperliquid.js +6 -1
  66. package/js/src/independentreserve.js +60 -0
  67. package/js/src/kraken.js +1 -1
  68. package/js/src/krakenfutures.js +4 -4
  69. package/js/src/okx.d.ts +1 -0
  70. package/js/src/okx.js +9 -1
  71. package/js/src/paradex.js +5 -2
  72. package/js/src/phemex.js +103 -0
  73. package/js/src/poloniex.js +61 -0
  74. package/js/src/poloniexfutures.js +74 -0
  75. package/js/src/upbit.js +61 -0
  76. package/js/src/woo.js +6 -1
  77. package/package.json +1 -1
@@ -2588,18 +2588,18 @@ export default class krakenfutures extends Exchange {
2588
2588
  for (let i = 0; i < marginLevels.length; i++) {
2589
2589
  const tier = marginLevels[i];
2590
2590
  const initialMargin = this.safeString(tier, 'initialMargin');
2591
- const notionalFloor = this.safeNumber(tier, 'contracts');
2591
+ const minNotional = this.safeNumber(tier, 'numNonContractUnits');
2592
2592
  if (i !== 0) {
2593
2593
  const tiersLength = tiers.length;
2594
2594
  const previousTier = tiers[tiersLength - 1];
2595
- previousTier['notionalCap'] = notionalFloor;
2595
+ previousTier['maxNotional'] = minNotional;
2596
2596
  }
2597
2597
  tiers.push({
2598
2598
  'tier': this.sum(i, 1),
2599
2599
  'symbol': this.safeSymbol(marketId, market),
2600
2600
  'currency': market['quote'],
2601
- 'notionalFloor': notionalFloor,
2602
- 'notionalCap': undefined,
2601
+ 'minNotional': minNotional,
2602
+ 'maxNotional': undefined,
2603
2603
  'maintenanceMarginRate': this.safeNumber(tier, 'maintenanceMargin'),
2604
2604
  'maxLeverage': this.parseNumber(Precise.stringDiv('1', initialMargin)),
2605
2605
  'info': tier,
package/js/src/okx.d.ts CHANGED
@@ -37,6 +37,7 @@ export default class okx extends Exchange {
37
37
  * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
38
38
  */
39
39
  fetchAccounts(params?: {}): Promise<Account[]>;
40
+ nonce(): number;
40
41
  /**
41
42
  * @method
42
43
  * @name okx#fetchMarkets
package/js/src/okx.js CHANGED
@@ -1116,6 +1116,8 @@ export default class okx extends Exchange {
1116
1116
  'createOrder': 'privatePostTradeBatchOrders',
1117
1117
  'createMarketBuyOrderRequiresPrice': false,
1118
1118
  'fetchMarkets': ['spot', 'future', 'swap', 'option'],
1119
+ 'timeDifference': 0,
1120
+ 'adjustForTimeDifference': false,
1119
1121
  'defaultType': 'spot',
1120
1122
  // 'fetchBalance': {
1121
1123
  // 'type': 'spot', // 'funding', 'trading', 'spot'
@@ -1490,6 +1492,9 @@ export default class okx extends Exchange {
1490
1492
  }
1491
1493
  return result;
1492
1494
  }
1495
+ nonce() {
1496
+ return this.milliseconds() - this.options['timeDifference'];
1497
+ }
1493
1498
  /**
1494
1499
  * @method
1495
1500
  * @name okx#fetchMarkets
@@ -1499,6 +1504,9 @@ export default class okx extends Exchange {
1499
1504
  * @returns {object[]} an array of objects representing market data
1500
1505
  */
1501
1506
  async fetchMarkets(params = {}) {
1507
+ if (this.options['adjustForTimeDifference']) {
1508
+ await this.loadTimeDifference();
1509
+ }
1502
1510
  const types = this.safeList(this.options, 'fetchMarkets', []);
1503
1511
  let promises = [];
1504
1512
  let result = [];
@@ -6182,7 +6190,7 @@ export default class okx extends Exchange {
6182
6190
  }
6183
6191
  }
6184
6192
  }
6185
- const timestamp = this.iso8601(this.milliseconds());
6193
+ const timestamp = this.iso8601(this.nonce());
6186
6194
  headers = {
6187
6195
  'OK-ACCESS-KEY': this.apiKey,
6188
6196
  'OK-ACCESS-PASSPHRASE': this.password,
package/js/src/paradex.js CHANGED
@@ -269,7 +269,9 @@ export default class paradex extends Exchange {
269
269
  '40111': AuthenticationError,
270
270
  '40112': PermissionDenied, // Geo IP blocked
271
271
  },
272
- 'broad': {},
272
+ 'broad': {
273
+ 'missing or malformed jwt': AuthenticationError,
274
+ },
273
275
  },
274
276
  'precisionMode': TICK_SIZE,
275
277
  'commonCurrencies': {},
@@ -1032,7 +1034,8 @@ export default class paradex extends Exchange {
1032
1034
  }
1033
1035
  }
1034
1036
  const account = await this.retrieveAccount();
1035
- const expires = now + 86400 * 7;
1037
+ // https://docs.paradex.trade/api-reference/general-information/authentication
1038
+ const expires = now + 180;
1036
1039
  const req = {
1037
1040
  'method': 'POST',
1038
1041
  'path': '/v1/auth',
package/js/src/phemex.js CHANGED
@@ -293,6 +293,109 @@ export default class phemex extends Exchange {
293
293
  'maker': this.parseNumber('0.001'),
294
294
  },
295
295
  },
296
+ 'features': {
297
+ 'default': {
298
+ 'sandbox': true,
299
+ 'createOrder': {
300
+ 'marginMode': false,
301
+ 'triggerPrice': true,
302
+ // todo
303
+ 'triggerPriceType': {
304
+ 'mark': true,
305
+ 'last': true,
306
+ 'index': true,
307
+ },
308
+ 'triggerDirection': false,
309
+ 'stopLossPrice': false,
310
+ 'takeProfitPrice': false,
311
+ 'attachedStopLossTakeProfit': undefined,
312
+ 'timeInForce': {
313
+ 'IOC': true,
314
+ 'FOK': true,
315
+ 'PO': true,
316
+ 'GTD': false,
317
+ },
318
+ 'hedged': false,
319
+ 'leverage': false,
320
+ 'marketBuyByCost': true,
321
+ 'marketBuyRequiresPrice': false,
322
+ 'selfTradePrevention': false,
323
+ 'trailing': false,
324
+ 'iceberg': false,
325
+ },
326
+ 'createOrders': undefined,
327
+ 'fetchMyTrades': {
328
+ 'marginMode': false,
329
+ 'limit': 200,
330
+ 'daysBack': 100000,
331
+ 'untilDays': 2, // todo implement
332
+ },
333
+ 'fetchOrder': {
334
+ 'marginMode': false,
335
+ 'trigger': false,
336
+ 'trailing': false,
337
+ },
338
+ 'fetchOpenOrders': {
339
+ 'marginMode': false,
340
+ 'limit': undefined,
341
+ 'trigger': false,
342
+ 'trailing': false,
343
+ },
344
+ 'fetchOrders': {
345
+ 'marginMode': false,
346
+ 'limit': undefined,
347
+ 'daysBack': undefined,
348
+ 'untilDays': undefined,
349
+ 'trigger': false,
350
+ 'trailing': false,
351
+ },
352
+ 'fetchClosedOrders': {
353
+ 'marginMode': false,
354
+ 'limit': 200,
355
+ 'daysBack': 100000,
356
+ 'daysBackCanceled': 100000,
357
+ 'untilDays': 2,
358
+ 'trigger': false,
359
+ 'trailing': false,
360
+ },
361
+ 'fetchOHLCV': {
362
+ 'limit': 1000,
363
+ },
364
+ },
365
+ 'spot': {
366
+ 'extends': 'default',
367
+ },
368
+ 'forDerivatives': {
369
+ 'extends': 'default',
370
+ 'createOrder': {
371
+ 'triggerDirection': true,
372
+ 'attachedStopLossTakeProfit': {
373
+ 'triggerPriceType': {
374
+ 'mark': true,
375
+ 'last': true,
376
+ 'index': true,
377
+ },
378
+ 'price': true,
379
+ },
380
+ 'hedged': true,
381
+ },
382
+ 'fetchOHLCV': {
383
+ 'limit': 2000,
384
+ },
385
+ },
386
+ 'swap': {
387
+ 'linear': {
388
+ 'extends': 'forDerivatives',
389
+ },
390
+ 'inverse': {
391
+ 'extends': 'forDerivatives',
392
+ },
393
+ },
394
+ 'future': {
395
+ 'linear': undefined,
396
+ 'inverse': undefined,
397
+ },
398
+ },
296
399
  'requiredCredentials': {
297
400
  'apiKey': true,
298
401
  'secret': true,
@@ -274,6 +274,67 @@ export default class poloniex extends Exchange {
274
274
  'futures': 'future',
275
275
  },
276
276
  },
277
+ 'features': {
278
+ 'default': {
279
+ 'sandbox': true,
280
+ 'createOrder': {
281
+ 'marginMode': true,
282
+ 'triggerPrice': true,
283
+ 'triggerPriceType': undefined,
284
+ 'triggerDirection': false,
285
+ 'stopLossPrice': false,
286
+ 'takeProfitPrice': false,
287
+ 'attachedStopLossTakeProfit': undefined,
288
+ 'timeInForce': {
289
+ 'IOC': true,
290
+ 'FOK': true,
291
+ 'PO': false,
292
+ 'GTD': false,
293
+ },
294
+ 'hedged': false,
295
+ 'leverage': false,
296
+ 'marketBuyByCost': true,
297
+ 'marketBuyRequiresPrice': false,
298
+ 'selfTradePrevention': true,
299
+ 'trailing': false,
300
+ 'iceberg': false,
301
+ },
302
+ 'createOrders': undefined,
303
+ 'fetchMyTrades': {
304
+ 'marginMode': false,
305
+ 'limit': 1000,
306
+ 'daysBack': 100000,
307
+ 'untilDays': 100000,
308
+ },
309
+ 'fetchOrder': {
310
+ 'marginMode': false,
311
+ 'trigger': false,
312
+ 'trailing': false,
313
+ },
314
+ 'fetchOpenOrders': {
315
+ 'marginMode': false,
316
+ 'limit': 2000,
317
+ 'trigger': false,
318
+ 'trailing': false,
319
+ },
320
+ 'fetchOrders': undefined,
321
+ 'fetchClosedOrders': undefined,
322
+ 'fetchOHLCV': {
323
+ 'limit': 500,
324
+ },
325
+ },
326
+ 'spot': {
327
+ 'extends': 'default',
328
+ },
329
+ 'swap': {
330
+ 'linear': undefined,
331
+ 'inverse': undefined,
332
+ },
333
+ 'future': {
334
+ 'linear': undefined,
335
+ 'inverse': undefined,
336
+ },
337
+ },
277
338
  'precisionMode': TICK_SIZE,
278
339
  'exceptions': {
279
340
  'exact': {
@@ -181,6 +181,80 @@ export default class poloniexfutures extends Exchange {
181
181
  },
182
182
  },
183
183
  },
184
+ 'features': {
185
+ 'default': {
186
+ 'sandbox': false,
187
+ 'createOrder': {
188
+ 'marginMode': false,
189
+ 'triggerPrice': true,
190
+ // todo implementation
191
+ 'triggerPriceType': {
192
+ 'last': true,
193
+ 'mark': true,
194
+ 'index': true,
195
+ },
196
+ 'triggerDirection': true,
197
+ 'stopLossPrice': false,
198
+ 'takeProfitPrice': false,
199
+ 'attachedStopLossTakeProfit': undefined,
200
+ 'timeInForce': {
201
+ 'IOC': true,
202
+ 'FOK': false,
203
+ 'PO': true,
204
+ 'GTD': false,
205
+ },
206
+ 'hedged': false,
207
+ 'leverage': true,
208
+ 'marketBuyByCost': true,
209
+ 'marketBuyRequiresPrice': false,
210
+ 'selfTradePrevention': false,
211
+ 'trailing': false,
212
+ 'iceberg': true, // deprecated?
213
+ },
214
+ 'createOrders': undefined,
215
+ 'fetchMyTrades': {
216
+ 'marginMode': false,
217
+ 'limit': undefined,
218
+ 'daysBack': 100000,
219
+ 'untilDays': 7,
220
+ },
221
+ 'fetchOrder': {
222
+ 'marginMode': false,
223
+ 'trigger': false,
224
+ 'trailing': false,
225
+ },
226
+ 'fetchOpenOrders': {
227
+ 'marginMode': true,
228
+ 'limit': undefined,
229
+ 'trigger': false,
230
+ 'trailing': false,
231
+ },
232
+ 'fetchOrders': undefined,
233
+ 'fetchClosedOrders': {
234
+ 'marginMode': false,
235
+ 'limit': 100,
236
+ 'daysBack': 100000,
237
+ 'daysBackCanceled': 1,
238
+ 'untilDays': 100000,
239
+ 'trigger': false,
240
+ 'trailing': false,
241
+ },
242
+ 'fetchOHLCV': {
243
+ 'limit': 200, // todo implement
244
+ },
245
+ },
246
+ 'spot': undefined,
247
+ 'swap': {
248
+ 'linear': {
249
+ 'extends': 'default',
250
+ },
251
+ 'inverse': undefined,
252
+ },
253
+ 'future': {
254
+ 'linear': undefined,
255
+ 'inverse': undefined,
256
+ },
257
+ },
184
258
  'exceptions': {
185
259
  'exact': {
186
260
  '400': BadRequest,
package/js/src/upbit.js CHANGED
@@ -167,6 +167,67 @@ export default class upbit extends Exchange {
167
167
  'deposit': {},
168
168
  },
169
169
  },
170
+ 'features': {
171
+ 'spot': {
172
+ 'sandbox': false,
173
+ 'createOrder': {
174
+ 'marginMode': false,
175
+ 'triggerPrice': false,
176
+ 'triggerPriceType': undefined,
177
+ 'triggerDirection': false,
178
+ 'stopLossPrice': false,
179
+ 'takeProfitPrice': false,
180
+ 'attachedStopLossTakeProfit': undefined,
181
+ 'timeInForce': {
182
+ 'IOC': true,
183
+ 'FOK': true,
184
+ 'PO': false,
185
+ 'GTD': false,
186
+ },
187
+ 'hedged': false,
188
+ 'leverage': false,
189
+ 'marketBuyByCost': false,
190
+ 'marketBuyRequiresPrice': false,
191
+ 'selfTradePrevention': false,
192
+ 'trailing': false,
193
+ 'iceberg': false,
194
+ },
195
+ 'createOrders': undefined,
196
+ 'fetchMyTrades': undefined,
197
+ 'fetchOrder': {
198
+ 'marginMode': false,
199
+ 'trigger': false,
200
+ 'trailing': false,
201
+ },
202
+ 'fetchOpenOrders': {
203
+ 'marginMode': true,
204
+ 'limit': 100,
205
+ 'trigger': false,
206
+ 'trailing': false,
207
+ },
208
+ 'fetchOrders': undefined,
209
+ 'fetchClosedOrders': {
210
+ 'marginMode': false,
211
+ 'limit': 1000,
212
+ 'daysBack': 100000,
213
+ 'daysBackCanceled': 1,
214
+ 'untilDays': 7,
215
+ 'trigger': false,
216
+ 'trailing': false,
217
+ },
218
+ 'fetchOHLCV': {
219
+ 'limit': 200,
220
+ },
221
+ },
222
+ 'swap': {
223
+ 'linear': undefined,
224
+ 'inverse': undefined,
225
+ },
226
+ 'future': {
227
+ 'linear': undefined,
228
+ 'inverse': undefined,
229
+ },
230
+ },
170
231
  'precisionMode': TICK_SIZE,
171
232
  'exceptions': {
172
233
  'exact': {
package/js/src/woo.js CHANGED
@@ -288,6 +288,8 @@ export default class woo extends Exchange {
288
288
  },
289
289
  },
290
290
  'options': {
291
+ 'timeDifference': 0,
292
+ 'adjustForTimeDifference': false,
291
293
  'sandboxMode': false,
292
294
  'createMarketBuyOrderRequiresPrice': true,
293
295
  // these network aliases require manual mapping here
@@ -503,6 +505,9 @@ export default class woo extends Exchange {
503
505
  * @returns {object[]} an array of objects representing market data
504
506
  */
505
507
  async fetchMarkets(params = {}) {
508
+ if (this.options['adjustForTimeDifference']) {
509
+ await this.loadTimeDifference();
510
+ }
506
511
  const response = await this.v1PublicGetInfo(params);
507
512
  //
508
513
  // {
@@ -2643,7 +2648,7 @@ export default class woo extends Exchange {
2643
2648
  };
2644
2649
  }
2645
2650
  nonce() {
2646
- return this.milliseconds();
2651
+ return this.milliseconds() - this.options['timeDifference'];
2647
2652
  }
2648
2653
  sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2649
2654
  const version = section[0];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.4.47",
3
+ "version": "4.4.48",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",