ccxt 4.2.29 → 4.2.31

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 (164) hide show
  1. package/README.md +5 -6
  2. package/dist/ccxt.browser.js +2196 -601
  3. package/dist/ccxt.browser.min.js +7 -7
  4. package/dist/cjs/ccxt.js +3 -1
  5. package/dist/cjs/src/ascendex.js +5 -5
  6. package/dist/cjs/src/base/Exchange.js +33 -25
  7. package/dist/cjs/src/base/errors.js +3 -3
  8. package/dist/cjs/src/base/functions/type.js +12 -0
  9. package/dist/cjs/src/bigone.js +2 -2
  10. package/dist/cjs/src/binance.js +897 -218
  11. package/dist/cjs/src/bingx.js +1 -1
  12. package/dist/cjs/src/bitfinex.js +1 -1
  13. package/dist/cjs/src/bitfinex2.js +457 -93
  14. package/dist/cjs/src/bitforex.js +3 -0
  15. package/dist/cjs/src/bitget.js +8 -4
  16. package/dist/cjs/src/bitmart.js +3 -3
  17. package/dist/cjs/src/bitmex.js +4 -4
  18. package/dist/cjs/src/bitrue.js +1 -1
  19. package/dist/cjs/src/bitso.js +1 -1
  20. package/dist/cjs/src/bitteam.js +2 -2
  21. package/dist/cjs/src/btcalpha.js +1 -1
  22. package/dist/cjs/src/bybit.js +3 -3
  23. package/dist/cjs/src/coinbase.js +22 -5
  24. package/dist/cjs/src/coincheck.js +1 -1
  25. package/dist/cjs/src/coinex.js +2 -2
  26. package/dist/cjs/src/coinlist.js +1 -1
  27. package/dist/cjs/src/coinmate.js +1 -1
  28. package/dist/cjs/src/coinmetro.js +2 -2
  29. package/dist/cjs/src/coinsph.js +1 -1
  30. package/dist/cjs/src/cryptocom.js +3 -3
  31. package/dist/cjs/src/deribit.js +1 -0
  32. package/dist/cjs/src/digifinex.js +6 -4
  33. package/dist/cjs/src/exmo.js +2 -2
  34. package/dist/cjs/src/gate.js +5 -5
  35. package/dist/cjs/src/gemini.js +3 -3
  36. package/dist/cjs/src/hitbtc.js +14 -20
  37. package/dist/cjs/src/hollaex.js +2 -2
  38. package/dist/cjs/src/htx.js +6 -6
  39. package/dist/cjs/src/huobijp.js +1 -1
  40. package/dist/cjs/src/kraken.js +3 -1
  41. package/dist/cjs/src/krakenfutures.js +4 -1
  42. package/dist/cjs/src/kucoin.js +17 -17
  43. package/dist/cjs/src/kucoinfutures.js +3 -3
  44. package/dist/cjs/src/lbank.js +28 -27
  45. package/dist/cjs/src/mexc.js +7 -7
  46. package/dist/cjs/src/novadax.js +1 -1
  47. package/dist/cjs/src/okcoin.js +2 -2
  48. package/dist/cjs/src/okx.js +23 -8
  49. package/dist/cjs/src/p2b.js +1 -0
  50. package/dist/cjs/src/phemex.js +3 -3
  51. package/dist/cjs/src/poloniexfutures.js +6 -3
  52. package/dist/cjs/src/pro/alpaca.js +1 -1
  53. package/dist/cjs/src/pro/binance.js +4 -4
  54. package/dist/cjs/src/pro/bitget.js +1 -1
  55. package/dist/cjs/src/pro/bitmart.js +1 -1
  56. package/dist/cjs/src/pro/bitmex.js +49 -6
  57. package/dist/cjs/src/pro/bitvavo.js +1 -1
  58. package/dist/cjs/src/pro/bybit.js +2 -2
  59. package/dist/cjs/src/pro/cex.js +2 -2
  60. package/dist/cjs/src/pro/independentreserve.js +1 -1
  61. package/dist/cjs/src/pro/okx.js +1 -1
  62. package/dist/cjs/src/pro/onetrading.js +2 -2
  63. package/dist/cjs/src/pro/p2b.js +432 -0
  64. package/dist/cjs/src/pro/probit.js +5 -5
  65. package/dist/cjs/src/pro/whitebit.js +1 -1
  66. package/dist/cjs/src/probit.js +1 -1
  67. package/dist/cjs/src/timex.js +2 -2
  68. package/dist/cjs/src/tokocrypto.js +3 -3
  69. package/dist/cjs/src/wavesexchange.js +2 -2
  70. package/dist/cjs/src/whitebit.js +3 -3
  71. package/dist/cjs/src/woo.js +3 -3
  72. package/dist/cjs/src/yobit.js +1 -1
  73. package/dist/cjs/src/zaif.js +1 -1
  74. package/dist/cjs/src/zonda.js +3 -3
  75. package/js/ccxt.d.ts +4 -1
  76. package/js/ccxt.js +3 -1
  77. package/js/src/abstract/bybit.d.ts +2 -2
  78. package/js/src/abstract/coinbase.d.ts +10 -0
  79. package/js/src/abstract/okx.d.ts +12 -1
  80. package/js/src/ascendex.js +5 -5
  81. package/js/src/base/Exchange.d.ts +2 -2
  82. package/js/src/base/Exchange.js +33 -25
  83. package/js/src/base/errorHierarchy.d.ts +7 -6
  84. package/js/src/base/errorHierarchy.js +7 -6
  85. package/js/src/base/errors.d.ts +3 -3
  86. package/js/src/base/errors.js +3 -3
  87. package/js/src/base/functions/type.js +12 -0
  88. package/js/src/bigone.js +2 -2
  89. package/js/src/binance.d.ts +1 -0
  90. package/js/src/binance.js +898 -219
  91. package/js/src/bingx.js +1 -1
  92. package/js/src/bitfinex.js +1 -1
  93. package/js/src/bitfinex2.d.ts +6 -1
  94. package/js/src/bitfinex2.js +457 -93
  95. package/js/src/bitforex.js +3 -0
  96. package/js/src/bitget.js +8 -4
  97. package/js/src/bitmart.js +3 -3
  98. package/js/src/bitmex.js +4 -4
  99. package/js/src/bitrue.js +1 -1
  100. package/js/src/bitso.d.ts +1 -1
  101. package/js/src/bitso.js +1 -1
  102. package/js/src/bitteam.js +2 -2
  103. package/js/src/btcalpha.js +1 -1
  104. package/js/src/bybit.js +3 -3
  105. package/js/src/coinbase.js +22 -5
  106. package/js/src/coincheck.js +1 -1
  107. package/js/src/coinex.js +2 -2
  108. package/js/src/coinlist.js +1 -1
  109. package/js/src/coinmate.js +1 -1
  110. package/js/src/coinmetro.d.ts +1 -1
  111. package/js/src/coinmetro.js +2 -2
  112. package/js/src/coinsph.js +1 -1
  113. package/js/src/cryptocom.js +3 -3
  114. package/js/src/deribit.js +1 -0
  115. package/js/src/digifinex.js +6 -4
  116. package/js/src/exmo.js +2 -2
  117. package/js/src/gate.js +5 -5
  118. package/js/src/gemini.d.ts +1 -1
  119. package/js/src/gemini.js +3 -3
  120. package/js/src/hitbtc.js +14 -20
  121. package/js/src/hollaex.js +2 -2
  122. package/js/src/htx.js +6 -6
  123. package/js/src/huobijp.js +1 -1
  124. package/js/src/kraken.js +3 -1
  125. package/js/src/krakenfutures.js +4 -1
  126. package/js/src/kucoin.js +17 -17
  127. package/js/src/kucoinfutures.js +3 -3
  128. package/js/src/lbank.d.ts +1 -1
  129. package/js/src/lbank.js +28 -27
  130. package/js/src/mexc.js +7 -7
  131. package/js/src/novadax.js +1 -1
  132. package/js/src/okcoin.js +2 -2
  133. package/js/src/okx.js +23 -8
  134. package/js/src/p2b.js +1 -0
  135. package/js/src/phemex.js +3 -3
  136. package/js/src/poloniexfutures.js +6 -3
  137. package/js/src/pro/alpaca.js +1 -1
  138. package/js/src/pro/binance.js +4 -4
  139. package/js/src/pro/bitget.js +1 -1
  140. package/js/src/pro/bitmart.js +1 -1
  141. package/js/src/pro/bitmex.d.ts +2 -1
  142. package/js/src/pro/bitmex.js +49 -6
  143. package/js/src/pro/bitvavo.js +1 -1
  144. package/js/src/pro/bybit.js +2 -2
  145. package/js/src/pro/cex.js +2 -2
  146. package/js/src/pro/independentreserve.js +1 -1
  147. package/js/src/pro/okx.js +1 -1
  148. package/js/src/pro/onetrading.js +2 -2
  149. package/js/src/pro/p2b.d.ts +23 -0
  150. package/js/src/pro/p2b.js +433 -0
  151. package/js/src/pro/probit.js +5 -5
  152. package/js/src/pro/whitebit.js +1 -1
  153. package/js/src/probit.js +1 -1
  154. package/js/src/timex.js +2 -2
  155. package/js/src/tokocrypto.js +3 -3
  156. package/js/src/wavesexchange.js +2 -2
  157. package/js/src/whitebit.js +3 -3
  158. package/js/src/woo.js +3 -3
  159. package/js/src/yobit.js +1 -1
  160. package/js/src/zaif.js +1 -1
  161. package/js/src/zonda.d.ts +1 -1
  162. package/js/src/zonda.js +3 -3
  163. package/package.json +1 -1
  164. package/skip-tests.json +3 -10
package/js/src/binance.js CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/binance.js';
9
- import { ExchangeError, ArgumentsRequired, ExchangeNotAvailable, InsufficientFunds, OrderNotFound, InvalidOrder, DDoSProtection, InvalidNonce, AuthenticationError, RateLimitExceeded, PermissionDenied, NotSupported, BadRequest, BadSymbol, AccountSuspended, OrderImmediatelyFillable, OnMaintenance, BadResponse, RequestTimeout, OrderNotFillable, MarginModeAlreadySet } from './base/errors.js';
9
+ import { ExchangeError, ArgumentsRequired, OperationFailed, OperationRejected, InsufficientFunds, OrderNotFound, InvalidOrder, DDoSProtection, InvalidNonce, AuthenticationError, RateLimitExceeded, PermissionDenied, NotSupported, BadRequest, BadSymbol, AccountSuspended, OrderImmediatelyFillable, OnMaintenance, BadResponse, RequestTimeout, OrderNotFillable, MarginModeAlreadySet } from './base/errors.js';
10
10
  import { Precise } from './base/Precise.js';
11
11
  import { TRUNCATE, DECIMAL_PLACES } from './base/functions/number.js';
12
12
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
@@ -1435,234 +1435,885 @@ export default class binance extends Exchange {
1435
1435
  'BUSD': 'USD',
1436
1436
  },
1437
1437
  },
1438
- // https://binance-docs.github.io/apidocs/spot/en/#error-codes-2
1439
1438
  'exceptions': {
1439
+ 'spot': {
1440
+ // https://binance-docs.github.io/apidocs/spot/en/#error-codes
1441
+ 'exact': {
1442
+ '-1000': OperationFailed,
1443
+ '-1001': OperationFailed,
1444
+ '-1002': AuthenticationError,
1445
+ '-1003': RateLimitExceeded,
1446
+ '-1004': OperationFailed,
1447
+ '-1006': OperationFailed,
1448
+ '-1007': RequestTimeout,
1449
+ '-1008': OperationFailed,
1450
+ '-1010': OperationFailed,
1451
+ '-1013': OperationFailed,
1452
+ '-1014': InvalidOrder,
1453
+ '-1015': RateLimitExceeded,
1454
+ '-1016': BadRequest,
1455
+ '-1020': BadRequest,
1456
+ '-1021': InvalidNonce,
1457
+ '-1022': AuthenticationError,
1458
+ '-1099': AuthenticationError,
1459
+ '-1100': BadRequest,
1460
+ '-1101': BadRequest,
1461
+ '-1102': BadRequest,
1462
+ '-1103': BadRequest,
1463
+ '-1104': BadRequest,
1464
+ '-1105': BadRequest,
1465
+ '-1106': BadRequest,
1466
+ '-1108': BadRequest,
1467
+ '-1111': BadRequest,
1468
+ '-1112': OperationFailed,
1469
+ '-1114': BadRequest,
1470
+ '-1115': BadRequest,
1471
+ '-1116': BadRequest,
1472
+ '-1117': BadRequest,
1473
+ '-1118': BadRequest,
1474
+ '-1119': BadRequest,
1475
+ '-1120': BadRequest,
1476
+ '-1121': BadSymbol,
1477
+ '-1125': AuthenticationError,
1478
+ '-1127': BadRequest,
1479
+ '-1128': BadRequest,
1480
+ '-1130': BadRequest,
1481
+ '-1131': BadRequest,
1482
+ '-1134': BadRequest,
1483
+ '-1135': BadRequest,
1484
+ '-1145': BadRequest,
1485
+ '-1151': BadSymbol,
1486
+ '-2008': AuthenticationError,
1487
+ '-2010': InvalidOrder,
1488
+ '-2011': OrderNotFound,
1489
+ '-2013': OrderNotFound,
1490
+ '-2014': AuthenticationError,
1491
+ '-2015': AuthenticationError,
1492
+ '-2016': OperationRejected,
1493
+ '-2021': BadResponse,
1494
+ '-2022': BadResponse,
1495
+ '-2026': InvalidOrder,
1496
+ // 3xxx errors are available only for spot
1497
+ '-3000': OperationFailed,
1498
+ '-3001': AuthenticationError,
1499
+ '-3002': BadSymbol,
1500
+ '-3003': BadRequest,
1501
+ '-3004': OperationRejected,
1502
+ '-3005': BadRequest,
1503
+ '-3006': BadRequest,
1504
+ '-3007': OperationFailed,
1505
+ '-3008': BadRequest,
1506
+ '-3009': OperationRejected,
1507
+ '-3010': BadRequest,
1508
+ '-3011': BadRequest,
1509
+ '-3012': OperationRejected,
1510
+ '-3013': BadRequest,
1511
+ '-3014': AccountSuspended,
1512
+ '-3015': BadRequest,
1513
+ '-3016': BadRequest,
1514
+ '-3017': OperationRejected,
1515
+ '-3018': AccountSuspended,
1516
+ '-3019': AccountSuspended,
1517
+ '-3020': BadRequest,
1518
+ '-3021': BadRequest,
1519
+ '-3022': AccountSuspended,
1520
+ '-3023': OperationRejected,
1521
+ '-3024': OperationRejected,
1522
+ '-3025': BadRequest,
1523
+ '-3026': BadRequest,
1524
+ '-3027': BadSymbol,
1525
+ '-3028': BadSymbol,
1526
+ '-3029': OperationFailed,
1527
+ '-3036': AccountSuspended,
1528
+ '-3037': OperationFailed,
1529
+ '-3038': BadRequest,
1530
+ '-3041': InsufficientFunds,
1531
+ '-3042': BadRequest,
1532
+ '-3043': PermissionDenied,
1533
+ '-3044': OperationFailed,
1534
+ '-3045': OperationFailed,
1535
+ '-3999': PermissionDenied,
1536
+ '-4001': BadRequest,
1537
+ '-4002': BadRequest,
1538
+ '-4003': BadRequest,
1539
+ '-4004': AuthenticationError,
1540
+ '-4005': RateLimitExceeded,
1541
+ '-4006': BadRequest,
1542
+ '-4007': PermissionDenied,
1543
+ '-4008': PermissionDenied,
1544
+ '-4009': ExchangeError,
1545
+ '-4010': PermissionDenied,
1546
+ '-4011': BadRequest,
1547
+ '-4012': PermissionDenied,
1548
+ '-4013': AuthenticationError,
1549
+ '-4014': OperationFailed,
1550
+ '-4015': PermissionDenied,
1551
+ '-4016': PermissionDenied,
1552
+ '-4017': PermissionDenied,
1553
+ '-4018': BadSymbol,
1554
+ '-4019': BadRequest,
1555
+ '-4021': BadRequest,
1556
+ '-4022': BadRequest,
1557
+ '-4023': OperationFailed,
1558
+ '-4024': InsufficientFunds,
1559
+ '-4025': InsufficientFunds,
1560
+ '-4026': InsufficientFunds,
1561
+ '-4027': OperationFailed,
1562
+ '-4028': BadRequest,
1563
+ '-4029': BadRequest,
1564
+ '-4030': BadResponse,
1565
+ '-4031': OperationFailed,
1566
+ '-4032': OperationFailed,
1567
+ '-4033': BadRequest,
1568
+ '-4034': OperationRejected,
1569
+ '-4035': PermissionDenied,
1570
+ '-4036': PermissionDenied,
1571
+ '-4037': OperationFailed,
1572
+ '-4038': OperationFailed,
1573
+ '-4039': PermissionDenied,
1574
+ '-4040': OperationRejected,
1575
+ '-4041': OperationFailed,
1576
+ '-4042': OperationRejected,
1577
+ '-4043': OperationRejected,
1578
+ '-4044': PermissionDenied,
1579
+ '-4045': OperationFailed,
1580
+ '-4046': AuthenticationError,
1581
+ '-4047': BadRequest,
1582
+ '-4060': OperationFailed,
1583
+ '-5001': BadRequest,
1584
+ '-5002': InsufficientFunds,
1585
+ '-5003': InsufficientFunds,
1586
+ '-5004': OperationRejected,
1587
+ '-5005': OperationRejected,
1588
+ '-5006': OperationFailed,
1589
+ '-5007': BadRequest,
1590
+ '-5008': OperationRejected,
1591
+ '-5009': BadSymbol,
1592
+ '-5010': OperationFailed,
1593
+ '-5011': BadRequest,
1594
+ '-5012': OperationFailed,
1595
+ '-5013': InsufficientFunds,
1596
+ '-5021': BadRequest,
1597
+ '-5022': BadRequest,
1598
+ '-6001': BadSymbol,
1599
+ '-6003': PermissionDenied,
1600
+ '-6004': BadRequest,
1601
+ '-6005': BadRequest,
1602
+ '-6006': BadRequest,
1603
+ '-6007': OperationFailed,
1604
+ '-6008': OperationFailed,
1605
+ '-6009': RateLimitExceeded,
1606
+ '-6011': OperationRejected,
1607
+ '-6012': InsufficientFunds,
1608
+ '-6013': BadResponse,
1609
+ '-6014': OperationRejected,
1610
+ '-6015': BadRequest,
1611
+ '-6016': BadRequest,
1612
+ '-6017': PermissionDenied,
1613
+ '-6018': InsufficientFunds,
1614
+ '-6019': OperationRejected,
1615
+ '-6020': BadRequest,
1616
+ '-7001': BadRequest,
1617
+ '-7002': BadRequest,
1618
+ '-10001': OperationFailed,
1619
+ '-10002': BadRequest,
1620
+ '-10005': BadResponse,
1621
+ '-10007': BadRequest,
1622
+ '-10008': BadRequest,
1623
+ '-10009': BadRequest,
1624
+ '-10010': BadRequest,
1625
+ '-10011': InsufficientFunds,
1626
+ '-10012': BadRequest,
1627
+ '-10013': InsufficientFunds,
1628
+ '-10015': OperationFailed,
1629
+ '-10016': OperationFailed,
1630
+ '-10017': OperationRejected,
1631
+ '-10018': BadRequest,
1632
+ '-10019': BadRequest,
1633
+ '-10020': BadRequest,
1634
+ '-10021': InvalidOrder,
1635
+ '-10022': BadRequest,
1636
+ '-10023': OperationFailed,
1637
+ '-10024': BadRequest,
1638
+ '-10025': OperationFailed,
1639
+ '-10026': BadRequest,
1640
+ '-10028': BadRequest,
1641
+ '-10029': OperationRejected,
1642
+ '-10030': OperationRejected,
1643
+ '-10031': OperationRejected,
1644
+ '-10032': OperationFailed,
1645
+ '-10034': OperationRejected,
1646
+ '-10039': OperationRejected,
1647
+ '-10040': OperationRejected,
1648
+ '-10041': OperationFailed,
1649
+ '-10042': BadSymbol,
1650
+ '-10043': OperationRejected,
1651
+ '-10044': OperationRejected,
1652
+ '-10045': OperationRejected,
1653
+ '-10046': OperationRejected,
1654
+ '-10047': PermissionDenied,
1655
+ '-11008': OperationRejected,
1656
+ '-12014': RateLimitExceeded,
1657
+ // BLVT
1658
+ '-13000': OperationRejected,
1659
+ '-13001': OperationRejected,
1660
+ '-13002': OperationRejected,
1661
+ '-13003': PermissionDenied,
1662
+ '-13004': OperationRejected,
1663
+ '-13005': OperationRejected,
1664
+ '-13006': OperationRejected,
1665
+ '-13007': PermissionDenied,
1666
+ // 18xxx - BINANCE CODE
1667
+ '-18002': OperationRejected,
1668
+ '-18003': OperationRejected,
1669
+ '-18004': OperationRejected,
1670
+ '-18005': PermissionDenied,
1671
+ '-18006': OperationRejected,
1672
+ '-18007': OperationRejected,
1673
+ // spot & futures algo (TBD for OPTIONS & PORTFOLIO MARGIN)
1674
+ '-20121': BadSymbol,
1675
+ '-20124': BadRequest,
1676
+ '-20130': BadRequest,
1677
+ '-20132': BadRequest,
1678
+ '-20194': BadRequest,
1679
+ '-20195': BadRequest,
1680
+ '-20196': BadRequest,
1681
+ '-20198': OperationRejected,
1682
+ '-20204': BadRequest,
1683
+ // 21xxx - PORTFOLIO MARGIN
1684
+ '-21001': BadRequest,
1685
+ '-21002': BadRequest,
1686
+ '-21003': BadResponse,
1687
+ '-21004': OperationRejected,
1688
+ '-21005': InsufficientFunds,
1689
+ '-21006': OperationFailed,
1690
+ '-21007': OperationFailed,
1691
+ '-32603': BadRequest,
1692
+ '400002': BadRequest,
1693
+ '100001003': AuthenticationError,
1694
+ '200003903': AuthenticationError, // undocumented, {"code":200003903,"msg":"Your identity verification has been rejected. Please complete identity verification again."}
1695
+ },
1696
+ },
1697
+ 'linear': {
1698
+ // https://binance-docs.github.io/apidocs/futures/en/#error-codes
1699
+ 'exact': {
1700
+ '-1000': OperationFailed,
1701
+ '-1001': OperationFailed,
1702
+ '-1002': AuthenticationError,
1703
+ '-1003': RateLimitExceeded,
1704
+ '-1004': OperationRejected,
1705
+ '-1005': PermissionDenied,
1706
+ '-1006': OperationFailed,
1707
+ '-1007': RequestTimeout,
1708
+ '-1008': OperationFailed,
1709
+ '-1010': OperationFailed,
1710
+ '-1011': PermissionDenied,
1711
+ '-1013': BadRequest,
1712
+ '-1014': InvalidOrder,
1713
+ '-1015': RateLimitExceeded,
1714
+ '-1016': BadRequest,
1715
+ '-1020': BadRequest,
1716
+ '-1021': InvalidNonce,
1717
+ '-1022': AuthenticationError,
1718
+ '-1023': BadRequest,
1719
+ '-1099': AuthenticationError,
1720
+ '-1100': BadRequest,
1721
+ '-1101': BadRequest,
1722
+ '-1102': BadRequest,
1723
+ '-1103': BadRequest,
1724
+ '-1104': BadRequest,
1725
+ '-1105': BadRequest,
1726
+ '-1106': BadRequest,
1727
+ '-1108': BadSymbol,
1728
+ '-1109': PermissionDenied,
1729
+ '-1110': BadRequest,
1730
+ '-1111': BadRequest,
1731
+ '-1112': OperationFailed,
1732
+ '-1113': BadRequest,
1733
+ '-1114': BadRequest,
1734
+ '-1115': BadRequest,
1735
+ '-1116': BadRequest,
1736
+ '-1117': BadRequest,
1737
+ '-1118': BadRequest,
1738
+ '-1119': BadRequest,
1739
+ '-1120': BadRequest,
1740
+ '-1121': BadSymbol,
1741
+ '-1122': BadRequest,
1742
+ '-1125': AuthenticationError,
1743
+ '-1126': BadSymbol,
1744
+ '-1127': BadRequest,
1745
+ '-1128': BadRequest,
1746
+ '-1130': BadRequest,
1747
+ '-1136': BadRequest,
1748
+ '-2010': OrderNotFound,
1749
+ '-2011': OrderNotFound,
1750
+ '-2012': OperationFailed,
1751
+ '-2013': OrderNotFound,
1752
+ '-2014': AuthenticationError,
1753
+ '-2015': AuthenticationError,
1754
+ '-2016': OperationRejected,
1755
+ '-2017': PermissionDenied,
1756
+ '-2018': InsufficientFunds,
1757
+ '-2019': InsufficientFunds,
1758
+ '-2020': OperationFailed,
1759
+ '-2021': OrderImmediatelyFillable,
1760
+ '-2022': InvalidOrder,
1761
+ '-2023': OperationFailed,
1762
+ '-2024': InsufficientFunds,
1763
+ '-2025': OperationRejected,
1764
+ '-2026': InvalidOrder,
1765
+ '-2027': OperationRejected,
1766
+ '-2028': OperationRejected,
1767
+ '-4000': InvalidOrder,
1768
+ '-4001': BadRequest,
1769
+ '-4002': BadRequest,
1770
+ '-4003': BadRequest,
1771
+ '-4004': BadRequest,
1772
+ '-4005': BadRequest,
1773
+ '-4006': BadRequest,
1774
+ '-4007': BadRequest,
1775
+ '-4008': BadRequest,
1776
+ '-4009': BadRequest,
1777
+ '-4010': BadRequest,
1778
+ '-4011': BadRequest,
1779
+ '-4012': BadRequest,
1780
+ '-4013': BadRequest,
1781
+ '-4014': BadRequest,
1782
+ '-4015': BadRequest,
1783
+ '-4016': OperationRejected,
1784
+ '-4017': BadRequest,
1785
+ '-4018': BadRequest,
1786
+ '-4019': OperationRejected,
1787
+ '-4020': BadRequest,
1788
+ '-4021': BadRequest,
1789
+ '-4022': BadRequest,
1790
+ '-4023': BadRequest,
1791
+ '-4024': BadRequest,
1792
+ '-4025': BadRequest,
1793
+ '-4026': BadRequest,
1794
+ '-4027': BadRequest,
1795
+ '-4028': BadRequest,
1796
+ '-4029': BadRequest,
1797
+ '-4030': BadRequest,
1798
+ '-4031': BadRequest,
1799
+ '-4032': OperationRejected,
1800
+ '-4033': BadRequest,
1801
+ '-4044': BadRequest,
1802
+ '-4045': OperationRejected,
1803
+ '-4046': OperationRejected,
1804
+ '-4047': OperationRejected,
1805
+ '-4048': OperationRejected,
1806
+ '-4049': BadRequest,
1807
+ '-4050': InsufficientFunds,
1808
+ '-4051': InsufficientFunds,
1809
+ '-4052': OperationRejected,
1810
+ '-4053': BadRequest,
1811
+ '-4054': OperationRejected,
1812
+ '-4055': BadRequest,
1813
+ '-4056': AuthenticationError,
1814
+ '-4057': AuthenticationError,
1815
+ '-4058': BadRequest,
1816
+ '-4059': OperationRejected,
1817
+ '-4060': BadRequest,
1818
+ '-4061': BadRequest,
1819
+ '-4062': BadRequest,
1820
+ '-4063': BadRequest,
1821
+ '-4064': BadRequest,
1822
+ '-4065': BadRequest,
1823
+ '-4066': BadRequest,
1824
+ '-4067': OperationRejected,
1825
+ '-4068': OperationRejected,
1826
+ '-4069': BadRequest,
1827
+ '-4070': BadRequest,
1828
+ '-4071': BadRequest,
1829
+ '-4072': OperationRejected,
1830
+ '-4073': BadRequest,
1831
+ '-4074': OperationRejected,
1832
+ '-4075': BadRequest,
1833
+ '-4076': OperationRejected,
1834
+ '-4077': OperationRejected,
1835
+ '-4078': OperationFailed,
1836
+ '-4079': BadRequest,
1837
+ '-4080': PermissionDenied,
1838
+ '-4081': BadRequest,
1839
+ '-4082': OperationRejected,
1840
+ '-4083': OperationFailed,
1841
+ '-4084': BadRequest,
1842
+ '-4085': BadRequest,
1843
+ '-4086': BadRequest,
1844
+ '-4087': PermissionDenied,
1845
+ '-4088': PermissionDenied,
1846
+ '-4104': BadRequest,
1847
+ '-4114': BadRequest,
1848
+ '-4115': BadRequest,
1849
+ '-4118': OperationRejected,
1850
+ '-4131': OperationRejected,
1851
+ '-4135': BadRequest,
1852
+ '-4137': BadRequest,
1853
+ '-4138': BadRequest,
1854
+ '-4139': BadRequest,
1855
+ '-4140': BadRequest,
1856
+ '-4141': OperationRejected,
1857
+ '-4142': OrderImmediatelyFillable,
1858
+ '-4144': BadSymbol,
1859
+ '-4164': OperationRejected,
1860
+ '-4165': BadRequest,
1861
+ '-4167': BadRequest,
1862
+ '-4168': BadRequest,
1863
+ '-4169': OperationRejected,
1864
+ '-4170': OperationRejected,
1865
+ '-4171': OperationRejected,
1866
+ '-4172 ': OperationRejected,
1867
+ '-4183': BadRequest,
1868
+ '-4184': BadRequest,
1869
+ '-4192': PermissionDenied,
1870
+ '-4202': PermissionDenied,
1871
+ '-4203': PermissionDenied,
1872
+ '-4205': PermissionDenied,
1873
+ '-4206': PermissionDenied,
1874
+ '-4208': OperationRejected,
1875
+ '-4209': OperationRejected,
1876
+ '-4210': BadRequest,
1877
+ '-4211': BadRequest,
1878
+ '-4400': PermissionDenied,
1879
+ '-4401': PermissionDenied,
1880
+ '-4402': PermissionDenied,
1881
+ '-4403': PermissionDenied,
1882
+ '-5021': OrderNotFillable,
1883
+ '-5022': OrderNotFillable,
1884
+ '-5024': OperationRejected,
1885
+ '-5025': OperationRejected,
1886
+ '-5026': OperationRejected,
1887
+ '-5027': OperationRejected,
1888
+ '-5028': BadRequest,
1889
+ '-5037': BadRequest,
1890
+ '-5038': BadRequest,
1891
+ '-5039': BadRequest,
1892
+ '-5040': BadRequest,
1893
+ '-5041': OperationFailed,
1894
+ //
1895
+ // spot & futures algo (TBD for OPTIONS & PORTFOLIO MARGIN)
1896
+ //
1897
+ '-20121': BadSymbol,
1898
+ '-20124': BadRequest,
1899
+ '-20130': BadRequest,
1900
+ '-20132': BadRequest,
1901
+ '-20194': BadRequest,
1902
+ '-20195': BadRequest,
1903
+ '-20196': BadRequest,
1904
+ '-20198': OperationRejected,
1905
+ '-20204': BadRequest, // The notional of USD is less or more than the limit.
1906
+ },
1907
+ },
1908
+ 'inverse': {
1909
+ // https://binance-docs.github.io/apidocs/delivery/en/#error-codes
1910
+ 'exact': {
1911
+ '-1000': OperationFailed,
1912
+ '-1001': OperationFailed,
1913
+ '-1002': AuthenticationError,
1914
+ '-1003': RateLimitExceeded,
1915
+ '-1004': OperationRejected,
1916
+ '-1005': PermissionDenied,
1917
+ '-1006': OperationFailed,
1918
+ '-1007': RequestTimeout,
1919
+ '-1010': OperationFailed,
1920
+ '-1011': PermissionDenied,
1921
+ '-1013': BadRequest,
1922
+ '-1014': InvalidOrder,
1923
+ '-1015': RateLimitExceeded,
1924
+ '-1016': BadRequest,
1925
+ '-1020': BadRequest,
1926
+ '-1021': InvalidNonce,
1927
+ '-1022': AuthenticationError,
1928
+ '-1023': BadRequest,
1929
+ '-1100': BadRequest,
1930
+ '-1101': BadRequest,
1931
+ '-1102': BadRequest,
1932
+ '-1103': BadRequest,
1933
+ '-1104': BadRequest,
1934
+ '-1105': BadRequest,
1935
+ '-1106': BadRequest,
1936
+ '-1108': BadSymbol,
1937
+ '-1109': AuthenticationError,
1938
+ '-1110': BadSymbol,
1939
+ '-1111': BadRequest,
1940
+ '-1112': OperationFailed,
1941
+ '-1113': BadRequest,
1942
+ '-1114': BadRequest,
1943
+ '-1115': BadRequest,
1944
+ '-1116': BadRequest,
1945
+ '-1117': BadRequest,
1946
+ '-1118': BadRequest,
1947
+ '-1119': BadRequest,
1948
+ '-1120': BadRequest,
1949
+ '-1121': BadSymbol,
1950
+ '-1125': AuthenticationError,
1951
+ '-1127': BadRequest,
1952
+ '-1128': BadRequest,
1953
+ '-1130': BadRequest,
1954
+ '-1136': BadRequest,
1955
+ '-2010': InvalidOrder,
1956
+ '-2011': OrderNotFound,
1957
+ '-2013': OrderNotFound,
1958
+ '-2014': AuthenticationError,
1959
+ '-2015': AuthenticationError,
1960
+ '-2016': OperationRejected,
1961
+ '-2018': InsufficientFunds,
1962
+ '-2019': InsufficientFunds,
1963
+ '-2020': OperationFailed,
1964
+ '-2021': OrderImmediatelyFillable,
1965
+ '-2022': InvalidOrder,
1966
+ '-2023': OperationFailed,
1967
+ '-2024': BadRequest,
1968
+ '-2025': OperationRejected,
1969
+ '-2026': InvalidOrder,
1970
+ '-2027': OperationRejected,
1971
+ '-2028': OperationRejected,
1972
+ '-4000': InvalidOrder,
1973
+ '-4001': BadRequest,
1974
+ '-4002': BadRequest,
1975
+ '-4003': BadRequest,
1976
+ '-4004': BadRequest,
1977
+ '-4005': BadRequest,
1978
+ '-4006': BadRequest,
1979
+ '-4007': BadRequest,
1980
+ '-4008': BadRequest,
1981
+ '-4009': BadRequest,
1982
+ '-4010': BadRequest,
1983
+ '-4011': BadRequest,
1984
+ '-4012': BadRequest,
1985
+ '-4013': BadRequest,
1986
+ '-4014': BadRequest,
1987
+ '-4015': BadRequest,
1988
+ '-4016': BadRequest,
1989
+ '-4017': BadRequest,
1990
+ '-4018': BadRequest,
1991
+ '-4019': OperationRejected,
1992
+ '-4020': BadRequest,
1993
+ '-4021': BadRequest,
1994
+ '-4022': BadRequest,
1995
+ '-4023': BadRequest,
1996
+ '-4024': BadRequest,
1997
+ '-4025': BadRequest,
1998
+ '-4026': BadRequest,
1999
+ '-4027': BadRequest,
2000
+ '-4028': BadRequest,
2001
+ '-4029': BadRequest,
2002
+ '-4030': BadRequest,
2003
+ '-4031': BadRequest,
2004
+ '-4032': OperationRejected,
2005
+ '-4033': BadRequest,
2006
+ '-4044': BadRequest,
2007
+ '-4045': OperationRejected,
2008
+ '-4046': BadRequest,
2009
+ '-4047': OperationRejected,
2010
+ '-4048': OperationRejected,
2011
+ '-4049': OperationRejected,
2012
+ '-4050': InsufficientFunds,
2013
+ '-4051': InsufficientFunds,
2014
+ '-4052': OperationRejected,
2015
+ '-4053': OperationRejected,
2016
+ '-4054': OperationRejected,
2017
+ '-4055': BadRequest,
2018
+ '-4056': AuthenticationError,
2019
+ '-4057': AuthenticationError,
2020
+ '-4058': BadRequest,
2021
+ '-4059': OperationRejected,
2022
+ '-4060': BadRequest,
2023
+ '-4061': OperationRejected,
2024
+ '-4062': BadRequest,
2025
+ //
2026
+ '-4067': OperationRejected,
2027
+ '-4068': OperationRejected,
2028
+ '-4082': OperationRejected,
2029
+ '-4083': OperationRejected,
2030
+ '-4084': BadRequest,
2031
+ '-4086': BadRequest,
2032
+ '-4087': BadSymbol,
2033
+ '-4088': BadRequest,
2034
+ '-4089': PermissionDenied,
2035
+ '-4090': PermissionDenied,
2036
+ '-4104': BadRequest,
2037
+ '-4110': BadRequest,
2038
+ '-4111': BadRequest,
2039
+ '-4112': OperationRejected,
2040
+ '-4113': OperationRejected,
2041
+ '-4135': BadRequest,
2042
+ '-4137': BadRequest,
2043
+ '-4138': BadRequest,
2044
+ '-4139': BadRequest,
2045
+ '-4142': OrderImmediatelyFillable,
2046
+ '-4150': OperationRejected,
2047
+ '-4151': BadRequest,
2048
+ '-4152': BadRequest,
2049
+ '-4154': BadRequest,
2050
+ '-4155': BadRequest,
2051
+ '-4178': BadRequest,
2052
+ '-4192': PermissionDenied,
2053
+ '-4194': PermissionDenied,
2054
+ '-4195': PermissionDenied,
2055
+ '-4196': BadRequest,
2056
+ '-4197': OperationRejected,
2057
+ '-4198': OperationRejected,
2058
+ '-4199': BadRequest,
2059
+ '-4200': PermissionDenied,
2060
+ '-4201': PermissionDenied,
2061
+ '-4202': OperationRejected,
2062
+ '-4188': BadRequest,
2063
+ //
2064
+ // spot & futures algo
2065
+ //
2066
+ '-20121': BadSymbol,
2067
+ '-20124': BadRequest,
2068
+ '-20130': BadRequest,
2069
+ '-20132': BadRequest,
2070
+ '-20194': BadRequest,
2071
+ '-20195': BadRequest,
2072
+ '-20196': BadRequest,
2073
+ '-20198': OperationRejected,
2074
+ '-20204': BadRequest, // The notional of USD is less or more than the limit.
2075
+ },
2076
+ },
2077
+ 'option': {
2078
+ // https://binance-docs.github.io/apidocs/voptions/en/#error-codes
2079
+ 'exact': {
2080
+ '-1000': OperationFailed,
2081
+ '-1001': OperationFailed,
2082
+ '-1002': AuthenticationError,
2083
+ '-1008': RateLimitExceeded,
2084
+ '-1014': InvalidOrder,
2085
+ '-1015': RateLimitExceeded,
2086
+ '-1016': BadRequest,
2087
+ '-1020': BadRequest,
2088
+ '-1021': InvalidNonce,
2089
+ '-1022': AuthenticationError,
2090
+ '-1100': BadRequest,
2091
+ '-1101': BadRequest,
2092
+ '-1102': BadRequest,
2093
+ '-1103': BadRequest,
2094
+ '-1104': BadRequest,
2095
+ '-1105': BadRequest,
2096
+ '-1106': BadRequest,
2097
+ '-1111': BadRequest,
2098
+ '-1115': BadRequest,
2099
+ '-1116': BadRequest,
2100
+ '-1117': BadRequest,
2101
+ '-1118': BadRequest,
2102
+ '-1119': BadRequest,
2103
+ '-1120': BadRequest,
2104
+ '-1121': BadSymbol,
2105
+ '-1125': AuthenticationError,
2106
+ '-1127': BadRequest,
2107
+ '-1128': BadSymbol,
2108
+ '-1129': BadSymbol,
2109
+ '-1130': BadRequest,
2110
+ '-1131': BadRequest,
2111
+ '-2010': InvalidOrder,
2112
+ '-2013': OrderNotFound,
2113
+ '-2014': AuthenticationError,
2114
+ '-2015': AuthenticationError,
2115
+ '-2018': InsufficientFunds,
2116
+ '-2027': InsufficientFunds,
2117
+ '-3029': OperationFailed,
2118
+ '-4001': BadRequest,
2119
+ '-4002': BadRequest,
2120
+ '-4003': BadRequest,
2121
+ '-4004': BadRequest,
2122
+ '-4005': BadRequest,
2123
+ '-4013': BadRequest,
2124
+ '-4029': BadRequest,
2125
+ '-4030': BadRequest,
2126
+ '-4055': BadRequest, // AMOUNT_MUST_BE_POSITIVE
2127
+ },
2128
+ },
2129
+ 'portfolioMargin': {
2130
+ 'exact': {
2131
+ '-1000': OperationFailed,
2132
+ '-1001': OperationFailed,
2133
+ '-1002': AuthenticationError,
2134
+ '-1003': RateLimitExceeded,
2135
+ '-1004': OperationRejected,
2136
+ '-1005': PermissionDenied,
2137
+ '-1006': OperationFailed,
2138
+ '-1007': RequestTimeout,
2139
+ '-1010': OperationFailed,
2140
+ '-1011': PermissionDenied,
2141
+ '-1013': OperationFailed,
2142
+ '-1014': InvalidOrder,
2143
+ '-1015': RateLimitExceeded,
2144
+ '-1016': BadRequest,
2145
+ '-1020': BadRequest,
2146
+ '-1021': InvalidNonce,
2147
+ '-1022': AuthenticationError,
2148
+ '-1023': BadRequest,
2149
+ '-1100': BadRequest,
2150
+ '-1101': BadRequest,
2151
+ '-1102': BadRequest,
2152
+ '-1103': BadRequest,
2153
+ '-1104': BadRequest,
2154
+ '-1105': BadRequest,
2155
+ '-1106': BadRequest,
2156
+ '-1108': BadSymbol,
2157
+ '-1109': BadRequest,
2158
+ '-1110': BadSymbol,
2159
+ '-1111': BadRequest,
2160
+ '-1112': OperationFailed,
2161
+ '-1113': BadRequest,
2162
+ '-1114': BadRequest,
2163
+ '-1115': BadRequest,
2164
+ '-1116': BadRequest,
2165
+ '-1117': BadRequest,
2166
+ '-1118': BadRequest,
2167
+ '-1119': BadRequest,
2168
+ '-1120': BadRequest,
2169
+ '-1121': BadSymbol,
2170
+ '-1125': AuthenticationError,
2171
+ '-1127': BadRequest,
2172
+ '-1128': BadRequest,
2173
+ '-1130': BadRequest,
2174
+ '-1136': BadRequest,
2175
+ '-2010': InvalidOrder,
2176
+ '-2011': OrderNotFound,
2177
+ '-2013': OrderNotFound,
2178
+ '-2014': AuthenticationError,
2179
+ '-2015': AuthenticationError,
2180
+ '-2016': OperationRejected,
2181
+ '-2018': InsufficientFunds,
2182
+ '-2019': InsufficientFunds,
2183
+ '-2020': OrderNotFillable,
2184
+ '-2021': OrderImmediatelyFillable,
2185
+ '-2022': InvalidOrder,
2186
+ '-2023': OperationFailed,
2187
+ '-2024': OperationRejected,
2188
+ '-2025': OperationRejected,
2189
+ '-2026': InvalidOrder,
2190
+ '-2027': OperationRejected,
2191
+ '-2028': OperationRejected,
2192
+ '-4000': InvalidOrder,
2193
+ '-4001': BadRequest,
2194
+ '-4002': BadRequest,
2195
+ '-4003': BadRequest,
2196
+ '-4004': BadRequest,
2197
+ '-4005': BadRequest,
2198
+ '-4006': BadRequest,
2199
+ '-4007': BadRequest,
2200
+ '-4008': BadRequest,
2201
+ '-4009': BadRequest,
2202
+ '-4010': BadRequest,
2203
+ '-4011': BadRequest,
2204
+ '-4012': BadRequest,
2205
+ '-4013': BadRequest,
2206
+ '-4014': BadRequest,
2207
+ '-4015': BadRequest,
2208
+ '-4016': BadRequest,
2209
+ '-4017': BadRequest,
2210
+ '-4018': BadRequest,
2211
+ '-4019': OperationRejected,
2212
+ '-4020': BadRequest,
2213
+ '-4021': BadRequest,
2214
+ '-4022': BadRequest,
2215
+ '-4023': BadRequest,
2216
+ '-4024': BadRequest,
2217
+ '-4025': BadRequest,
2218
+ '-4026': BadRequest,
2219
+ '-4027': BadRequest,
2220
+ '-4028': BadRequest,
2221
+ '-4029': BadRequest,
2222
+ '-4030': BadRequest,
2223
+ '-4031': BadRequest,
2224
+ '-4032': OperationRejected,
2225
+ '-4033': BadRequest,
2226
+ '-4044': BadRequest,
2227
+ '-4045': OperationRejected,
2228
+ '-4046': OperationRejected,
2229
+ '-4047': OperationRejected,
2230
+ '-4048': OperationRejected,
2231
+ '-4049': BadRequest,
2232
+ '-4050': InsufficientFunds,
2233
+ '-4051': InsufficientFunds,
2234
+ '-4052': OperationRejected,
2235
+ '-4053': BadRequest,
2236
+ '-4054': OperationRejected,
2237
+ '-4055': BadRequest,
2238
+ '-4056': AuthenticationError,
2239
+ '-4057': AuthenticationError,
2240
+ '-4058': BadRequest,
2241
+ '-4059': OperationRejected,
2242
+ '-4060': BadRequest,
2243
+ '-4061': BadRequest,
2244
+ '-4062': BadRequest,
2245
+ '-4063': BadRequest,
2246
+ '-4064': BadRequest,
2247
+ '-4065': BadRequest,
2248
+ '-4066': BadRequest,
2249
+ '-4067': OperationRejected,
2250
+ '-4068': OperationRejected,
2251
+ '-4069': BadRequest,
2252
+ '-4070': BadRequest,
2253
+ '-4071': BadRequest,
2254
+ '-4072': OperationRejected,
2255
+ '-4073': BadRequest,
2256
+ '-4074': BadRequest,
2257
+ '-4075': BadRequest,
2258
+ '-4076': OperationRejected,
2259
+ '-4077': OperationRejected,
2260
+ '-4078': OperationFailed,
2261
+ '-4079': BadRequest,
2262
+ '-4080': PermissionDenied,
2263
+ '-4081': BadRequest,
2264
+ '-4082': BadRequest,
2265
+ '-4083': OperationFailed,
2266
+ '-4084': BadRequest,
2267
+ '-4085': BadRequest,
2268
+ '-4086': BadRequest,
2269
+ '-4087': PermissionDenied,
2270
+ '-4088': PermissionDenied,
2271
+ '-4104': BadRequest,
2272
+ '-4114': BadRequest,
2273
+ '-4115': BadRequest,
2274
+ '-4118': OperationRejected,
2275
+ '-4131': OperationRejected,
2276
+ '-4135': BadRequest,
2277
+ '-4137': BadRequest,
2278
+ '-4138': BadRequest,
2279
+ '-4139': BadRequest,
2280
+ '-4140': BadRequest,
2281
+ '-4141': BadRequest,
2282
+ '-4142': OrderImmediatelyFillable,
2283
+ '-4144': BadSymbol,
2284
+ '-4161': OperationRejected,
2285
+ '-4164': OperationRejected,
2286
+ '-4165': BadRequest,
2287
+ '-4183': BadRequest,
2288
+ '-4184': BadRequest,
2289
+ '-5021': OrderNotFillable,
2290
+ '-5022': OrderNotFillable, // Due to the order could not be executed as maker, the Post Only order will be rejected.
2291
+ },
2292
+ },
1440
2293
  'exact': {
1441
2294
  'System is under maintenance.': OnMaintenance,
1442
- 'System abnormality': ExchangeError,
2295
+ 'System abnormality': OperationFailed,
1443
2296
  'You are not authorized to execute this request.': PermissionDenied,
1444
2297
  'API key does not exist': AuthenticationError,
1445
2298
  'Order would trigger immediately.': OrderImmediatelyFillable,
1446
2299
  'Stop price would trigger immediately.': OrderImmediatelyFillable,
1447
2300
  'Order would immediately match and take.': OrderImmediatelyFillable,
1448
2301
  'Account has insufficient balance for requested action.': InsufficientFunds,
1449
- 'Rest API trading is not enabled.': ExchangeNotAvailable,
1450
- 'This account may not place or cancel orders.': ExchangeNotAvailable,
2302
+ 'Rest API trading is not enabled.': PermissionDenied,
2303
+ 'This account may not place or cancel orders.': PermissionDenied,
1451
2304
  "You don't have permission.": PermissionDenied,
1452
- 'Market is closed.': ExchangeNotAvailable,
1453
- 'Too many requests. Please try again later.': DDoSProtection,
2305
+ 'Market is closed.': OperationRejected,
2306
+ 'Too many requests. Please try again later.': RateLimitExceeded,
1454
2307
  'This action is disabled on this account.': AccountSuspended,
1455
2308
  'Limit orders require GTC for this phase.': BadRequest,
1456
2309
  'This order type is not possible in this trading phase.': BadRequest,
1457
- 'This type of sub-account exceeds the maximum number limit': BadRequest,
2310
+ 'This type of sub-account exceeds the maximum number limit': OperationRejected,
1458
2311
  'This symbol is restricted for this account.': PermissionDenied,
1459
- 'This symbol is not permitted for this account.': PermissionDenied,
1460
- '-1000': ExchangeNotAvailable,
1461
- '-1001': ExchangeNotAvailable,
1462
- '-1002': AuthenticationError,
1463
- '-1003': RateLimitExceeded,
1464
- '-1004': DDoSProtection,
1465
- '-1005': PermissionDenied,
1466
- '-1006': BadResponse,
1467
- '-1007': RequestTimeout,
1468
- '-1010': BadResponse,
1469
- '-1011': PermissionDenied,
1470
- '-1013': InvalidOrder,
1471
- '-1014': InvalidOrder,
1472
- '-1015': RateLimitExceeded,
1473
- '-1016': ExchangeNotAvailable,
1474
- '-1020': BadRequest,
1475
- '-1021': InvalidNonce,
1476
- '-1022': AuthenticationError,
1477
- '-1023': BadRequest,
1478
- '-1099': AuthenticationError,
1479
- '-1100': BadRequest,
1480
- '-1101': BadRequest,
1481
- '-1102': BadRequest,
1482
- '-1103': BadRequest,
1483
- '-1104': BadRequest,
1484
- '-1105': BadRequest,
1485
- '-1106': BadRequest,
1486
- '-1108': BadRequest,
1487
- '-1109': AuthenticationError,
1488
- '-1110': BadRequest,
1489
- '-1111': BadRequest,
1490
- '-1112': InvalidOrder,
1491
- '-1113': BadRequest,
1492
- '-1114': BadRequest,
1493
- '-1115': BadRequest,
1494
- '-1116': BadRequest,
1495
- '-1117': BadRequest,
1496
- '-1118': BadRequest,
1497
- '-1119': BadRequest,
1498
- '-1120': BadRequest,
1499
- '-1121': BadSymbol,
1500
- '-1125': AuthenticationError,
1501
- '-1127': BadRequest,
1502
- '-1128': BadRequest,
1503
- '-1130': BadRequest,
1504
- '-1131': BadRequest,
1505
- '-1135': BadRequest,
1506
- '-1136': BadRequest,
1507
- '-2008': AuthenticationError,
1508
- '-2010': ExchangeError,
1509
- '-2011': OrderNotFound,
1510
- '-2013': OrderNotFound,
1511
- '-2014': AuthenticationError,
1512
- '-2015': AuthenticationError,
1513
- '-2016': BadRequest,
1514
- '-2018': InsufficientFunds,
1515
- '-2019': InsufficientFunds,
1516
- '-2020': OrderNotFillable,
1517
- '-2021': OrderImmediatelyFillable,
1518
- '-2022': InvalidOrder,
1519
- '-2023': InsufficientFunds,
1520
- '-2024': InsufficientFunds,
1521
- '-2025': InvalidOrder,
1522
- '-2026': InvalidOrder,
1523
- '-2027': InvalidOrder,
1524
- '-2028': InsufficientFunds,
1525
- '-3000': ExchangeError,
1526
- '-3001': AuthenticationError,
1527
- '-3002': BadSymbol,
1528
- '-3003': BadRequest,
1529
- '-3004': ExchangeError,
1530
- '-3005': InsufficientFunds,
1531
- '-3006': InsufficientFunds,
1532
- '-3007': ExchangeError,
1533
- '-3008': InsufficientFunds,
1534
- '-3009': BadRequest,
1535
- '-3010': BadRequest,
1536
- '-3011': BadRequest,
1537
- '-3012': InsufficientFunds,
1538
- '-3013': BadRequest,
1539
- '-3014': AccountSuspended,
1540
- '-3015': BadRequest,
1541
- '-3016': BadRequest,
1542
- '-3017': ExchangeError,
1543
- '-3018': AccountSuspended,
1544
- '-3019': AccountSuspended,
1545
- '-3020': InsufficientFunds,
1546
- '-3021': BadRequest,
1547
- '-3022': AccountSuspended,
1548
- '-3023': BadRequest,
1549
- '-3024': ExchangeError,
1550
- '-3025': BadRequest,
1551
- '-3026': BadRequest,
1552
- '-3027': BadSymbol,
1553
- '-3028': BadSymbol,
1554
- '-3029': ExchangeError,
1555
- '-3036': AccountSuspended,
1556
- '-3037': ExchangeError,
1557
- '-3038': BadRequest,
1558
- '-3041': InsufficientFunds,
1559
- '-3042': BadRequest,
1560
- '-3043': BadRequest,
1561
- '-3044': DDoSProtection,
1562
- '-3045': ExchangeError,
1563
- '-3999': ExchangeError,
1564
- '-4001': BadRequest,
1565
- '-4002': BadRequest,
1566
- '-4003': BadRequest,
1567
- '-4004': AuthenticationError,
1568
- '-4005': RateLimitExceeded,
1569
- '-4006': BadRequest,
1570
- '-4007': BadRequest,
1571
- '-4008': BadRequest,
1572
- '-4010': BadRequest,
1573
- '-4011': BadRequest,
1574
- '-4012': BadRequest,
1575
- '-4013': AuthenticationError,
1576
- '-4014': PermissionDenied,
1577
- '-4015': ExchangeError,
1578
- '-4016': PermissionDenied,
1579
- '-4017': PermissionDenied,
1580
- '-4018': BadSymbol,
1581
- '-4019': BadSymbol,
1582
- '-4021': BadRequest,
1583
- '-4022': BadRequest,
1584
- '-4023': ExchangeError,
1585
- '-4024': InsufficientFunds,
1586
- '-4025': InsufficientFunds,
1587
- '-4026': InsufficientFunds,
1588
- '-4027': ExchangeError,
1589
- '-4028': BadRequest,
1590
- '-4029': BadRequest,
1591
- '-4030': ExchangeError,
1592
- '-4031': ExchangeError,
1593
- '-4032': ExchangeError,
1594
- '-4033': BadRequest,
1595
- '-4034': ExchangeError,
1596
- '-4035': PermissionDenied,
1597
- '-4036': BadRequest,
1598
- '-4037': ExchangeError,
1599
- '-4038': ExchangeError,
1600
- '-4039': BadRequest,
1601
- '-4040': BadRequest,
1602
- '-4041': ExchangeError,
1603
- '-4042': ExchangeError,
1604
- '-4043': BadRequest,
1605
- '-4044': BadRequest,
1606
- '-4045': ExchangeError,
1607
- '-4046': AuthenticationError,
1608
- '-4047': BadRequest,
1609
- '-4054': BadRequest,
1610
- '-4164': InvalidOrder,
1611
- '-5001': BadRequest,
1612
- '-5002': InsufficientFunds,
1613
- '-5003': InsufficientFunds,
1614
- '-5004': BadRequest,
1615
- '-5005': InsufficientFunds,
1616
- '-5006': BadRequest,
1617
- '-5007': BadRequest,
1618
- '-5008': InsufficientFunds,
1619
- '-5009': BadRequest,
1620
- '-5010': ExchangeError,
1621
- '-5011': BadRequest,
1622
- '-5012': ExchangeError,
1623
- '-5013': InsufficientFunds,
1624
- '-5021': BadRequest,
1625
- '-6001': BadRequest,
1626
- '-6003': BadRequest,
1627
- '-6004': ExchangeError,
1628
- '-6005': InvalidOrder,
1629
- '-6006': BadRequest,
1630
- '-6007': BadRequest,
1631
- '-6008': BadRequest,
1632
- '-6009': RateLimitExceeded,
1633
- '-6011': BadRequest,
1634
- '-6012': InsufficientFunds,
1635
- '-6013': ExchangeError,
1636
- '-6014': BadRequest,
1637
- '-6015': BadRequest,
1638
- '-6016': BadRequest,
1639
- '-6017': BadRequest,
1640
- '-6018': BadRequest,
1641
- '-6019': AuthenticationError,
1642
- '-6020': BadRequest,
1643
- '-7001': BadRequest,
1644
- '-7002': BadRequest,
1645
- '-9000': InsufficientFunds,
1646
- '-10017': BadRequest,
1647
- '-11008': InsufficientFunds,
1648
- '-12014': RateLimitExceeded,
1649
- '-13000': BadRequest,
1650
- '-13001': BadRequest,
1651
- '-13002': BadRequest,
1652
- '-13003': BadRequest,
1653
- '-13004': BadRequest,
1654
- '-13005': BadRequest,
1655
- '-13006': InvalidOrder,
1656
- '-13007': AuthenticationError,
1657
- '-21001': BadRequest,
1658
- '-21002': BadRequest,
1659
- '-21003': BadRequest,
1660
- '100001003': AuthenticationError,
1661
- '200003903': AuthenticationError, // {"code":200003903,"msg":"Your identity verification has been rejected. Please complete identity verification again."}
2312
+ 'This symbol is not permitted for this account.': PermissionDenied, // {"code":-2010,"msg":"This symbol is not permitted for this account."}
1662
2313
  },
1663
2314
  'broad': {
1664
2315
  'has no operation privilege': PermissionDenied,
1665
- 'MAX_POSITION': InvalidOrder, // {"code":-2010,"msg":"Filter failure: MAX_POSITION"}
2316
+ 'MAX_POSITION': BadRequest, // {"code":-2010,"msg":"Filter failure: MAX_POSITION"}
1666
2317
  },
1667
2318
  },
1668
2319
  });
@@ -2375,7 +3026,7 @@ export default class binance extends Exchange {
2375
3026
  }
2376
3027
  }
2377
3028
  }
2378
- const isMarginTradingAllowed = this.safeValue(market, 'isMarginTradingAllowed', false);
3029
+ const isMarginTradingAllowed = this.safeBool(market, 'isMarginTradingAllowed', false);
2379
3030
  let unifiedType = undefined;
2380
3031
  if (spot) {
2381
3032
  unifiedType = 'spot';
@@ -3114,7 +3765,7 @@ export default class binance extends Exchange {
3114
3765
  response = await this.dapiPublicGetTicker24hr(this.extend(request, params));
3115
3766
  }
3116
3767
  else {
3117
- const rolling = this.safeValue(params, 'rolling', false);
3768
+ const rolling = this.safeBool(params, 'rolling', false);
3118
3769
  params = this.omit(params, 'rolling');
3119
3770
  if (rolling) {
3120
3771
  response = await this.publicGetTicker(this.extend(request, params));
@@ -4567,7 +5218,7 @@ export default class binance extends Exchange {
4567
5218
  }
4568
5219
  // support for testing orders
4569
5220
  if (market['spot'] || marketType === 'margin') {
4570
- const test = this.safeValue(query, 'test', false);
5221
+ const test = this.safeBool(query, 'test', false);
4571
5222
  if (test) {
4572
5223
  method += 'Test';
4573
5224
  }
@@ -5205,7 +5856,7 @@ export default class binance extends Exchange {
5205
5856
  params = this.omit(params, 'type');
5206
5857
  const orders = await this.fetchOrders(symbol, since, undefined, params);
5207
5858
  const filteredOrders = this.filterBy(orders, 'status', 'canceled');
5208
- return this.filterByLimit(filteredOrders, limit);
5859
+ return this.filterBySinceLimit(filteredOrders, since, limit);
5209
5860
  }
5210
5861
  async cancelOrder(id, symbol = undefined, params = {}) {
5211
5862
  /**
@@ -5749,7 +6400,7 @@ export default class binance extends Exchange {
5749
6400
  let response = undefined;
5750
6401
  const request = {};
5751
6402
  const legalMoney = this.safeValue(this.options, 'legalMoney', {});
5752
- const fiatOnly = this.safeValue(params, 'fiat', false);
6403
+ const fiatOnly = this.safeBool(params, 'fiat', false);
5753
6404
  params = this.omit(params, 'fiatOnly');
5754
6405
  const until = this.safeInteger(params, 'until');
5755
6406
  params = this.omit(params, 'until');
@@ -5861,7 +6512,7 @@ export default class binance extends Exchange {
5861
6512
  return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params);
5862
6513
  }
5863
6514
  const legalMoney = this.safeValue(this.options, 'legalMoney', {});
5864
- const fiatOnly = this.safeValue(params, 'fiat', false);
6515
+ const fiatOnly = this.safeBool(params, 'fiat', false);
5865
6516
  params = this.omit(params, 'fiatOnly');
5866
6517
  const request = {};
5867
6518
  const until = this.safeInteger(params, 'until');
@@ -8800,6 +9451,30 @@ export default class binance extends Exchange {
8800
9451
  }
8801
9452
  return { 'url': url, 'method': method, 'body': body, 'headers': headers };
8802
9453
  }
9454
+ getExceptionsByUrl(url, exactOrBroad) {
9455
+ let marketType = undefined;
9456
+ const hostname = (this.hostname !== undefined) ? this.hostname : 'binance.com';
9457
+ if (url.startsWith('https://api.' + hostname + '/')) {
9458
+ marketType = 'spot';
9459
+ }
9460
+ else if (url.startsWith('https://dapi.' + hostname + '/')) {
9461
+ marketType = 'inverse';
9462
+ }
9463
+ else if (url.startsWith('https://fapi.' + hostname + '/')) {
9464
+ marketType = 'linear';
9465
+ }
9466
+ else if (url.startsWith('https://eapi.' + hostname + '/')) {
9467
+ marketType = 'option';
9468
+ }
9469
+ else if (url.startsWith('https://papi.' + hostname + '/')) {
9470
+ marketType = 'portfoliomargin';
9471
+ }
9472
+ if (marketType !== undefined) {
9473
+ const exceptionsForMarketType = this.safeValue(this.exceptions, marketType, {});
9474
+ return this.safeValue(exceptionsForMarketType, exactOrBroad, {});
9475
+ }
9476
+ return {};
9477
+ }
8803
9478
  handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
8804
9479
  if ((code === 418) || (code === 429)) {
8805
9480
  throw new DDoSProtection(this.id + ' ' + code.toString() + ' ' + reason + ' ' + body);
@@ -8822,7 +9497,7 @@ export default class binance extends Exchange {
8822
9497
  return undefined; // fallback to default error handler
8823
9498
  }
8824
9499
  // response in format {'msg': 'The coin does not exist.', 'success': true/false}
8825
- const success = this.safeValue(response, 'success', true);
9500
+ const success = this.safeBool(response, 'success', true);
8826
9501
  if (!success) {
8827
9502
  const messageNew = this.safeString(response, 'msg');
8828
9503
  let parsedMessage = undefined;
@@ -8841,7 +9516,9 @@ export default class binance extends Exchange {
8841
9516
  }
8842
9517
  const message = this.safeString(response, 'msg');
8843
9518
  if (message !== undefined) {
9519
+ this.throwExactlyMatchedException(this.getExceptionsByUrl(url, 'exact'), message, this.id + ' ' + message);
8844
9520
  this.throwExactlyMatchedException(this.exceptions['exact'], message, this.id + ' ' + message);
9521
+ this.throwBroadlyMatchedException(this.getExceptionsByUrl(url, 'broad'), message, this.id + ' ' + message);
8845
9522
  this.throwBroadlyMatchedException(this.exceptions['broad'], message, this.id + ' ' + message);
8846
9523
  }
8847
9524
  // checks against error codes
@@ -8867,6 +9544,7 @@ export default class binance extends Exchange {
8867
9544
  // binanceusdm {"code":-4046,"msg":"No need to change margin type."}
8868
9545
  throw new MarginModeAlreadySet(feedback);
8869
9546
  }
9547
+ this.throwExactlyMatchedException(this.getExceptionsByUrl(url, 'exact'), error, feedback);
8870
9548
  this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
8871
9549
  throw new ExchangeError(feedback);
8872
9550
  }
@@ -8880,6 +9558,7 @@ export default class binance extends Exchange {
8880
9558
  const element = response[0];
8881
9559
  const errorCode = this.safeString(element, 'code');
8882
9560
  if (errorCode !== undefined) {
9561
+ this.throwExactlyMatchedException(this.getExceptionsByUrl(url, 'exact'), errorCode, this.id + ' ' + body);
8883
9562
  this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, this.id + ' ' + body);
8884
9563
  }
8885
9564
  }