ccxt-look 1.81.50

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 (264) hide show
  1. package/.cache/eslintcache +1 -0
  2. package/.dockerignore +6 -0
  3. package/.eslintignore +1 -0
  4. package/.gitattributes +5 -0
  5. package/.readthedocs.yaml +16 -0
  6. package/CONTRIBUTING.md +1049 -0
  7. package/LICENSE.txt +21 -0
  8. package/README.md +537 -0
  9. package/SECURITY.md +5 -0
  10. package/build/cleanup-old-tags.js +94 -0
  11. package/build/countries.js +256 -0
  12. package/build/export-exchanges.js +520 -0
  13. package/build/fs.js +51 -0
  14. package/build/transpile.js +1772 -0
  15. package/build/vss.js +78 -0
  16. package/ccxt.browser.js +7 -0
  17. package/ccxt.d.ts +692 -0
  18. package/ccxt.js +171 -0
  19. package/cleanup.sh +2 -0
  20. package/composer-install.sh +20 -0
  21. package/dist/ccxt.browser.js +208383 -0
  22. package/gource.sh +3 -0
  23. package/index.html +7 -0
  24. package/js/.eslintrc +87 -0
  25. package/js/aax.js +2686 -0
  26. package/js/ascendex.js +2584 -0
  27. package/js/base/.eslintrc.js +43 -0
  28. package/js/base/Exchange.js +2371 -0
  29. package/js/base/Precise.js +283 -0
  30. package/js/base/errorHierarchy.js +47 -0
  31. package/js/base/errors.js +55 -0
  32. package/js/base/functions/crypto.js +158 -0
  33. package/js/base/functions/encode.js +118 -0
  34. package/js/base/functions/generic.js +270 -0
  35. package/js/base/functions/misc.js +138 -0
  36. package/js/base/functions/number.js +329 -0
  37. package/js/base/functions/platform.js +38 -0
  38. package/js/base/functions/string.js +21 -0
  39. package/js/base/functions/throttle.js +79 -0
  40. package/js/base/functions/time.js +210 -0
  41. package/js/base/functions/type.js +66 -0
  42. package/js/base/functions.js +28 -0
  43. package/js/bequant.js +32 -0
  44. package/js/bibox.js +1407 -0
  45. package/js/bigone.js +1366 -0
  46. package/js/binance.js +5652 -0
  47. package/js/binancecoinm.js +46 -0
  48. package/js/binanceus.js +46 -0
  49. package/js/binanceusdm.js +49 -0
  50. package/js/bit2c.js +535 -0
  51. package/js/bitbank.js +842 -0
  52. package/js/bitbay.js +16 -0
  53. package/js/bitbns.js +1073 -0
  54. package/js/bitcoincom.js +15 -0
  55. package/js/bitfinex.js +1433 -0
  56. package/js/bitfinex2.js +2025 -0
  57. package/js/bitflyer.js +840 -0
  58. package/js/bitforex.js +614 -0
  59. package/js/bitget.js +2397 -0
  60. package/js/bithumb.js +980 -0
  61. package/js/bitmart.js +2516 -0
  62. package/js/bitmex.js +1809 -0
  63. package/js/bitopro.js +1443 -0
  64. package/js/bitpanda.js +1782 -0
  65. package/js/bitrue.js +1747 -0
  66. package/js/bitso.js +1062 -0
  67. package/js/bitstamp.js +1757 -0
  68. package/js/bitstamp1.js +343 -0
  69. package/js/bittrex.js +1876 -0
  70. package/js/bitvavo.js +1579 -0
  71. package/js/bkex.js +1233 -0
  72. package/js/bl3p.js +346 -0
  73. package/js/blockchaincom.js +969 -0
  74. package/js/btcalpha.js +680 -0
  75. package/js/btcbox.js +477 -0
  76. package/js/btcmarkets.js +1022 -0
  77. package/js/btctradeua.js +466 -0
  78. package/js/btcturk.js +734 -0
  79. package/js/buda.js +946 -0
  80. package/js/bw.js +1265 -0
  81. package/js/bybit.js +3372 -0
  82. package/js/bytetrade.js +1336 -0
  83. package/js/cdax.js +1646 -0
  84. package/js/cex.js +1410 -0
  85. package/js/coinbase.js +1342 -0
  86. package/js/coinbaseprime.js +31 -0
  87. package/js/coinbasepro.js +1466 -0
  88. package/js/coincheck.js +755 -0
  89. package/js/coinex.js +3400 -0
  90. package/js/coinfalcon.js +880 -0
  91. package/js/coinmate.js +794 -0
  92. package/js/coinone.js +816 -0
  93. package/js/coinspot.js +345 -0
  94. package/js/crex24.js +1636 -0
  95. package/js/cryptocom.js +1832 -0
  96. package/js/currencycom.js +1748 -0
  97. package/js/delta.js +1547 -0
  98. package/js/deribit.js +2148 -0
  99. package/js/digifinex.js +1585 -0
  100. package/js/eqonex.js +1660 -0
  101. package/js/exmo.js +1670 -0
  102. package/js/fairdesk.js +1231 -0
  103. package/js/flowbtc.js +35 -0
  104. package/js/fmfwio.js +34 -0
  105. package/js/ftx.js +2751 -0
  106. package/js/ftxus.js +38 -0
  107. package/js/gateio.js +4174 -0
  108. package/js/gemini.js +1397 -0
  109. package/js/hitbtc.js +1343 -0
  110. package/js/hitbtc3.js +2329 -0
  111. package/js/hollaex.js +1486 -0
  112. package/js/huobi.js +5706 -0
  113. package/js/huobijp.js +1710 -0
  114. package/js/huobipro.js +18 -0
  115. package/js/idex.js +1439 -0
  116. package/js/independentreserve.js +649 -0
  117. package/js/indodax.js +742 -0
  118. package/js/itbit.js +722 -0
  119. package/js/kraken.js +2179 -0
  120. package/js/kucoin.js +2571 -0
  121. package/js/kucoinfutures.js +1771 -0
  122. package/js/kuna.js +809 -0
  123. package/js/latoken.js +1445 -0
  124. package/js/lbank.js +760 -0
  125. package/js/liquid.js +1432 -0
  126. package/js/luno.js +873 -0
  127. package/js/lykke.js +1147 -0
  128. package/js/mercado.js +771 -0
  129. package/js/mexc.js +3151 -0
  130. package/js/ndax.js +2233 -0
  131. package/js/novadax.js +1318 -0
  132. package/js/oceanex.js +816 -0
  133. package/js/okcoin.js +3841 -0
  134. package/js/okex.js +16 -0
  135. package/js/okex5.js +16 -0
  136. package/js/okx.js +4795 -0
  137. package/js/paymium.js +498 -0
  138. package/js/phemex.js +2957 -0
  139. package/js/poloniex.js +1674 -0
  140. package/js/probit.js +1346 -0
  141. package/js/qtrade.js +1588 -0
  142. package/js/ripio.js +1061 -0
  143. package/js/static_dependencies/BN/bn.js +3526 -0
  144. package/js/static_dependencies/README.md +1 -0
  145. package/js/static_dependencies/crypto-js/crypto-js.js +5988 -0
  146. package/js/static_dependencies/elliptic/lib/elliptic/curve/base.js +375 -0
  147. package/js/static_dependencies/elliptic/lib/elliptic/curve/edwards.js +433 -0
  148. package/js/static_dependencies/elliptic/lib/elliptic/curve/index.js +8 -0
  149. package/js/static_dependencies/elliptic/lib/elliptic/curve/mont.js +180 -0
  150. package/js/static_dependencies/elliptic/lib/elliptic/curve/short.js +938 -0
  151. package/js/static_dependencies/elliptic/lib/elliptic/curves.js +204 -0
  152. package/js/static_dependencies/elliptic/lib/elliptic/ec/index.js +240 -0
  153. package/js/static_dependencies/elliptic/lib/elliptic/ec/key.js +119 -0
  154. package/js/static_dependencies/elliptic/lib/elliptic/ec/signature.js +24 -0
  155. package/js/static_dependencies/elliptic/lib/elliptic/eddsa/index.js +145 -0
  156. package/js/static_dependencies/elliptic/lib/elliptic/eddsa/key.js +100 -0
  157. package/js/static_dependencies/elliptic/lib/elliptic/eddsa/signature.js +65 -0
  158. package/js/static_dependencies/elliptic/lib/elliptic/precomputed/secp256k1.js +780 -0
  159. package/js/static_dependencies/elliptic/lib/elliptic/utils.js +214 -0
  160. package/js/static_dependencies/elliptic/lib/elliptic.js +22 -0
  161. package/js/static_dependencies/elliptic/lib/hmac-drbg/hmac-drbg.js +114 -0
  162. package/js/static_dependencies/fetch-ponyfill/fetch-node.js +39 -0
  163. package/js/static_dependencies/node-fetch/index.js +1564 -0
  164. package/js/static_dependencies/node-rsa/NodeRSA.js +223 -0
  165. package/js/static_dependencies/node-rsa/asn1/ber/errors.js +13 -0
  166. package/js/static_dependencies/node-rsa/asn1/ber/index.js +21 -0
  167. package/js/static_dependencies/node-rsa/asn1/ber/reader.js +262 -0
  168. package/js/static_dependencies/node-rsa/asn1/ber/types.js +36 -0
  169. package/js/static_dependencies/node-rsa/asn1/index.js +17 -0
  170. package/js/static_dependencies/node-rsa/encryptEngines/js.js +34 -0
  171. package/js/static_dependencies/node-rsa/formats/components.js +71 -0
  172. package/js/static_dependencies/node-rsa/formats/formats.js +31 -0
  173. package/js/static_dependencies/node-rsa/formats/pkcs1.js +148 -0
  174. package/js/static_dependencies/node-rsa/formats/pkcs8.js +187 -0
  175. package/js/static_dependencies/node-rsa/libs/jsbn.js +1252 -0
  176. package/js/static_dependencies/node-rsa/libs/rsa.js +147 -0
  177. package/js/static_dependencies/node-rsa/schemes/pkcs1.js +176 -0
  178. package/js/static_dependencies/node-rsa/schemes/schemes.js +21 -0
  179. package/js/static_dependencies/node-rsa/utils.js +98 -0
  180. package/js/static_dependencies/qs/formats.js +18 -0
  181. package/js/static_dependencies/qs/index.js +11 -0
  182. package/js/static_dependencies/qs/parse.js +242 -0
  183. package/js/static_dependencies/qs/stringify.js +269 -0
  184. package/js/static_dependencies/qs/utils.js +230 -0
  185. package/js/stex.js +1925 -0
  186. package/js/test/.eslintrc.js +42 -0
  187. package/js/test/Exchange/test.balance.js +61 -0
  188. package/js/test/Exchange/test.borrowRate.js +32 -0
  189. package/js/test/Exchange/test.currency.js +52 -0
  190. package/js/test/Exchange/test.fetchBalance.js +23 -0
  191. package/js/test/Exchange/test.fetchBorrowInterest.js +59 -0
  192. package/js/test/Exchange/test.fetchBorrowRate.js +32 -0
  193. package/js/test/Exchange/test.fetchBorrowRates.js +28 -0
  194. package/js/test/Exchange/test.fetchClosedOrders.js +32 -0
  195. package/js/test/Exchange/test.fetchCurrencies.js +35 -0
  196. package/js/test/Exchange/test.fetchDeposits.js +31 -0
  197. package/js/test/Exchange/test.fetchFundingFees.js +19 -0
  198. package/js/test/Exchange/test.fetchFundingRateHistory.js +40 -0
  199. package/js/test/Exchange/test.fetchL2OrderBook.js +23 -0
  200. package/js/test/Exchange/test.fetchLedger.js +42 -0
  201. package/js/test/Exchange/test.fetchLeverageTiers.js +33 -0
  202. package/js/test/Exchange/test.fetchMarketLeverageTiers.js +22 -0
  203. package/js/test/Exchange/test.fetchMarkets.js +33 -0
  204. package/js/test/Exchange/test.fetchMyTrades.js +42 -0
  205. package/js/test/Exchange/test.fetchOHLCV.js +46 -0
  206. package/js/test/Exchange/test.fetchOpenOrders.js +36 -0
  207. package/js/test/Exchange/test.fetchOrderBook.js +25 -0
  208. package/js/test/Exchange/test.fetchOrderBooks.js +35 -0
  209. package/js/test/Exchange/test.fetchOrders.js +41 -0
  210. package/js/test/Exchange/test.fetchPositions.js +47 -0
  211. package/js/test/Exchange/test.fetchStatus.js +35 -0
  212. package/js/test/Exchange/test.fetchTicker.js +38 -0
  213. package/js/test/Exchange/test.fetchTickers.js +49 -0
  214. package/js/test/Exchange/test.fetchTrades.js +39 -0
  215. package/js/test/Exchange/test.fetchTradingFee.js +18 -0
  216. package/js/test/Exchange/test.fetchTradingFees.js +22 -0
  217. package/js/test/Exchange/test.fetchTransactions.js +31 -0
  218. package/js/test/Exchange/test.fetchWithdrawals.js +31 -0
  219. package/js/test/Exchange/test.ledgerItem.js +46 -0
  220. package/js/test/Exchange/test.leverageTier.js +33 -0
  221. package/js/test/Exchange/test.loadMarkets.js +35 -0
  222. package/js/test/Exchange/test.market.js +129 -0
  223. package/js/test/Exchange/test.ohlcv.js +33 -0
  224. package/js/test/Exchange/test.order.js +62 -0
  225. package/js/test/Exchange/test.orderbook.js +61 -0
  226. package/js/test/Exchange/test.position.js +21 -0
  227. package/js/test/Exchange/test.throttle.js +94 -0
  228. package/js/test/Exchange/test.ticker.js +95 -0
  229. package/js/test/Exchange/test.trade.js +68 -0
  230. package/js/test/Exchange/test.tradingFee.js +34 -0
  231. package/js/test/Exchange/test.transaction.js +35 -0
  232. package/js/test/base/.eslintrc +38 -0
  233. package/js/test/base/functions/test.crypto.js +110 -0
  234. package/js/test/base/functions/test.datetime.js +62 -0
  235. package/js/test/base/functions/test.generic.js +152 -0
  236. package/js/test/base/functions/test.number.js +362 -0
  237. package/js/test/base/functions/test.time.js +56 -0
  238. package/js/test/base/functions/test.type.js +53 -0
  239. package/js/test/base/test.base.js +193 -0
  240. package/js/test/errors/test.InsufficientFunds.js +86 -0
  241. package/js/test/errors/test.InvalidNonce.js +64 -0
  242. package/js/test/errors/test.InvalidOrder.js +35 -0
  243. package/js/test/errors/test.OrderNotFound.js +39 -0
  244. package/js/test/test.js +426 -0
  245. package/js/test/test.timeout_hang.js +12 -0
  246. package/js/therock.js +1431 -0
  247. package/js/tidebit.js +632 -0
  248. package/js/tidex.js +939 -0
  249. package/js/timex.js +1283 -0
  250. package/js/upbit.js +1622 -0
  251. package/js/vcc.js +1353 -0
  252. package/js/wavesexchange.js +2185 -0
  253. package/js/wazirx.js +732 -0
  254. package/js/whitebit.js +1352 -0
  255. package/js/woo.js +1577 -0
  256. package/js/xena.js +1948 -0
  257. package/js/yobit.js +1129 -0
  258. package/js/zaif.js +647 -0
  259. package/js/zb.js +4088 -0
  260. package/js/zipmex.js +40 -0
  261. package/js/zonda.js +1497 -0
  262. package/multilang.sh +159 -0
  263. package/package.json +591 -0
  264. package/postinstall.js +103 -0
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ // ---------------------------------------------------------------------------
4
+
5
+ const binance = require ('./binance.js');
6
+
7
+ // ---------------------------------------------------------------------------
8
+
9
+ module.exports = class binancecoinm extends binance {
10
+ describe () {
11
+ return this.deepExtend (super.describe (), {
12
+ 'id': 'binancecoinm',
13
+ 'name': 'Binance COIN-M',
14
+ 'urls': {
15
+ 'logo': 'https://user-images.githubusercontent.com/1294454/117738721-668c8d80-b205-11eb-8c49-3fad84c4a07f.jpg',
16
+ 'doc': [
17
+ 'https://binance-docs.github.io/apidocs/delivery/en/',
18
+ 'https://binance-docs.github.io/apidocs/spot/en',
19
+ ],
20
+ },
21
+ 'has': {
22
+ 'CORS': undefined,
23
+ 'spot': true,
24
+ 'margin': undefined,
25
+ 'swap': undefined,
26
+ 'future': undefined,
27
+ 'option': undefined,
28
+ 'createStopMarketOrder': true,
29
+ },
30
+ 'options': {
31
+ 'defaultType': 'delivery',
32
+ 'leverageBrackets': undefined,
33
+ },
34
+ });
35
+ }
36
+
37
+ async transferIn (code, amount, params = {}) {
38
+ // transfer from spot wallet to coinm futures wallet
39
+ return await this.futuresTransfer (code, amount, 3, params);
40
+ }
41
+
42
+ async transferOut (code, amount, params = {}) {
43
+ // transfer from coinm futures wallet to spot wallet
44
+ return await this.futuresTransfer (code, amount, 4, params);
45
+ }
46
+ };
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ // ---------------------------------------------------------------------------
4
+
5
+ const binance = require ('./binance.js');
6
+
7
+ // ---------------------------------------------------------------------------
8
+
9
+ module.exports = class binanceus extends binance {
10
+ describe () {
11
+ return this.deepExtend (super.describe (), {
12
+ 'id': 'binanceus',
13
+ 'name': 'Binance US',
14
+ 'countries': [ 'US' ], // US
15
+ 'certified': false,
16
+ 'pro': true,
17
+ 'urls': {
18
+ 'logo': 'https://user-images.githubusercontent.com/1294454/65177307-217b7c80-da5f-11e9-876e-0b748ba0a358.jpg',
19
+ 'api': {
20
+ 'web': 'https://www.binance.us',
21
+ 'sapi': 'https://api.binance.us/sapi/v1',
22
+ 'wapi': 'https://api.binance.us/wapi/v3',
23
+ 'public': 'https://api.binance.us/api/v3',
24
+ 'private': 'https://api.binance.us/api/v3',
25
+ },
26
+ 'www': 'https://www.binance.us',
27
+ 'referral': 'https://www.binance.us/?ref=35005074',
28
+ 'doc': 'https://github.com/binance-us/binance-official-api-docs',
29
+ 'fees': 'https://www.binance.us/en/fee/schedule',
30
+ },
31
+ 'fees': {
32
+ 'trading': {
33
+ 'tierBased': true,
34
+ 'percentage': true,
35
+ 'taker': this.parseNumber ('0.001'), // 0.1% trading fee, zero fees for all trading pairs before November 1
36
+ 'maker': this.parseNumber ('0.001'), // 0.1% trading fee, zero fees for all trading pairs before November 1
37
+ },
38
+ },
39
+ 'options': {
40
+ 'fetchCurrencies': false,
41
+ 'quoteOrderQty': false,
42
+ },
43
+ });
44
+ }
45
+ };
46
+
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ // ---------------------------------------------------------------------------
4
+
5
+ const binance = require ('./binance.js');
6
+
7
+ // ---------------------------------------------------------------------------
8
+
9
+ module.exports = class binanceusdm extends binance {
10
+ describe () {
11
+ return this.deepExtend (super.describe (), {
12
+ 'id': 'binanceusdm',
13
+ 'name': 'Binance USDⓈ-M',
14
+ 'urls': {
15
+ 'logo': 'https://user-images.githubusercontent.com/1294454/117738721-668c8d80-b205-11eb-8c49-3fad84c4a07f.jpg',
16
+ 'doc': [
17
+ 'https://binance-docs.github.io/apidocs/futures/en/',
18
+ 'https://binance-docs.github.io/apidocs/spot/en',
19
+ ],
20
+ },
21
+ 'has': {
22
+ 'CORS': undefined,
23
+ 'spot': true,
24
+ 'margin': undefined,
25
+ 'swap': undefined,
26
+ 'future': undefined,
27
+ 'option': undefined,
28
+ 'createStopMarketOrder': true,
29
+ },
30
+ 'options': {
31
+ 'defaultType': 'future',
32
+ // https://www.binance.com/en/support/faq/360033162192
33
+ // tier amount, maintenance margin, initial margin
34
+ 'leverageBrackets': undefined,
35
+ 'marginTypes': {},
36
+ },
37
+ });
38
+ }
39
+
40
+ async transferIn (code, amount, params = {}) {
41
+ // transfer from spot wallet to usdm futures wallet
42
+ return await this.futuresTransfer (code, amount, 1, params);
43
+ }
44
+
45
+ async transferOut (code, amount, params = {}) {
46
+ // transfer from usdm futures wallet to spot wallet
47
+ return await this.futuresTransfer (code, amount, 2, params);
48
+ }
49
+ };
package/js/bit2c.js ADDED
@@ -0,0 +1,535 @@
1
+ 'use strict';
2
+
3
+ // ---------------------------------------------------------------------------
4
+
5
+ const Exchange = require ('./base/Exchange');
6
+ const { ArgumentsRequired, ExchangeError, InvalidNonce, AuthenticationError, PermissionDenied } = require ('./base/errors');
7
+ const Precise = require ('./base/Precise');
8
+
9
+ // ---------------------------------------------------------------------------
10
+
11
+ module.exports = class bit2c extends Exchange {
12
+ describe () {
13
+ return this.deepExtend (super.describe (), {
14
+ 'id': 'bit2c',
15
+ 'name': 'Bit2C',
16
+ 'countries': [ 'IL' ], // Israel
17
+ 'rateLimit': 3000,
18
+ 'has': {
19
+ 'CORS': undefined,
20
+ 'spot': true,
21
+ 'margin': false,
22
+ 'swap': false,
23
+ 'future': false,
24
+ 'option': false,
25
+ 'addMargin': false,
26
+ 'cancelOrder': true,
27
+ 'createOrder': true,
28
+ 'createReduceOnlyOrder': false,
29
+ 'fetchBalance': true,
30
+ 'fetchBorrowRate': false,
31
+ 'fetchBorrowRateHistories': false,
32
+ 'fetchBorrowRateHistory': false,
33
+ 'fetchBorrowRates': false,
34
+ 'fetchBorrowRatesPerSymbol': false,
35
+ 'fetchFundingHistory': false,
36
+ 'fetchFundingRate': false,
37
+ 'fetchFundingRateHistory': false,
38
+ 'fetchFundingRates': false,
39
+ 'fetchIndexOHLCV': false,
40
+ 'fetchLeverage': false,
41
+ 'fetchLeverageTiers': false,
42
+ 'fetchMarkOHLCV': false,
43
+ 'fetchMyTrades': true,
44
+ 'fetchOpenOrders': true,
45
+ 'fetchOrderBook': true,
46
+ 'fetchPosition': false,
47
+ 'fetchPositions': false,
48
+ 'fetchPositionsRisk': false,
49
+ 'fetchPremiumIndexOHLCV': false,
50
+ 'fetchTicker': true,
51
+ 'fetchTrades': true,
52
+ 'fetchTradingFee': false,
53
+ 'fetchTradingFees': true,
54
+ 'fetchTransfer': false,
55
+ 'fetchTransfers': false,
56
+ 'reduceMargin': false,
57
+ 'setLeverage': false,
58
+ 'setMarginMode': false,
59
+ 'setPositionMode': false,
60
+ 'transfer': false,
61
+ },
62
+ 'urls': {
63
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27766119-3593220e-5ece-11e7-8b3a-5a041f6bcc3f.jpg',
64
+ 'api': 'https://bit2c.co.il',
65
+ 'www': 'https://www.bit2c.co.il',
66
+ 'referral': 'https://bit2c.co.il/Aff/63bfed10-e359-420c-ab5a-ad368dab0baf',
67
+ 'doc': [
68
+ 'https://www.bit2c.co.il/home/api',
69
+ 'https://github.com/OferE/bit2c',
70
+ ],
71
+ },
72
+ 'api': {
73
+ 'public': {
74
+ 'get': [
75
+ 'Exchanges/{pair}/Ticker',
76
+ 'Exchanges/{pair}/orderbook',
77
+ 'Exchanges/{pair}/trades',
78
+ 'Exchanges/{pair}/lasttrades',
79
+ ],
80
+ },
81
+ 'private': {
82
+ 'post': [
83
+ 'Merchant/CreateCheckout',
84
+ 'Order/AddCoinFundsRequest',
85
+ 'Order/AddFund',
86
+ 'Order/AddOrder',
87
+ 'Order/AddOrderMarketPriceBuy',
88
+ 'Order/AddOrderMarketPriceSell',
89
+ 'Order/CancelOrder',
90
+ 'Order/AddCoinFundsRequest',
91
+ 'Order/AddStopOrder',
92
+ 'Payment/GetMyId',
93
+ 'Payment/Send',
94
+ 'Payment/Pay',
95
+ ],
96
+ 'get': [
97
+ 'Account/Balance',
98
+ 'Account/Balance/v2',
99
+ 'Order/MyOrders',
100
+ 'Order/GetById',
101
+ 'Order/AccountHistory',
102
+ 'Order/OrderHistory',
103
+ ],
104
+ },
105
+ },
106
+ 'markets': {
107
+ 'BTC/NIS': { 'id': 'BtcNis', 'symbol': 'BTC/NIS', 'base': 'BTC', 'quote': 'NIS', 'baseId': 'Btc', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
108
+ 'ETH/NIS': { 'id': 'EthNis', 'symbol': 'ETH/NIS', 'base': 'ETH', 'quote': 'NIS', 'baseId': 'Eth', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
109
+ 'BCH/NIS': { 'id': 'BchabcNis', 'symbol': 'BCH/NIS', 'base': 'BCH', 'quote': 'NIS', 'baseId': 'Bchabc', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
110
+ 'LTC/NIS': { 'id': 'LtcNis', 'symbol': 'LTC/NIS', 'base': 'LTC', 'quote': 'NIS', 'baseId': 'Ltc', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
111
+ 'ETC/NIS': { 'id': 'EtcNis', 'symbol': 'ETC/NIS', 'base': 'ETC', 'quote': 'NIS', 'baseId': 'Etc', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
112
+ 'BTG/NIS': { 'id': 'BtgNis', 'symbol': 'BTG/NIS', 'base': 'BTG', 'quote': 'NIS', 'baseId': 'Btg', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
113
+ 'BSV/NIS': { 'id': 'BchsvNis', 'symbol': 'BSV/NIS', 'base': 'BSV', 'quote': 'NIS', 'baseId': 'Bchsv', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
114
+ 'GRIN/NIS': { 'id': 'GrinNis', 'symbol': 'GRIN/NIS', 'base': 'GRIN', 'quote': 'NIS', 'baseId': 'Grin', 'quoteId': 'Nis', 'type': 'spot', 'spot': true },
115
+ },
116
+ 'fees': {
117
+ 'trading': {
118
+ 'maker': this.parseNumber ('0.005'),
119
+ 'taker': this.parseNumber ('0.005'),
120
+ },
121
+ },
122
+ 'options': {
123
+ 'fetchTradesMethod': 'public_get_exchanges_pair_trades',
124
+ },
125
+ 'exceptions': {
126
+ 'exact': {
127
+ 'Please provide valid APIkey': AuthenticationError, // { "error" : "Please provide valid APIkey" }
128
+ },
129
+ 'broad': {
130
+ // { "error": "Please provide valid nonce in Request Nonce (1598218490) is not bigger than last nonce (1598218490)."}
131
+ // { "error": "Please provide valid nonce in Request UInt64.TryParse failed for nonce :" }
132
+ 'Please provide valid nonce': InvalidNonce,
133
+ 'please approve new terms of use on site': PermissionDenied, // { "error" : "please approve new terms of use on site." }
134
+ },
135
+ },
136
+ });
137
+ }
138
+
139
+ parseBalance (response) {
140
+ const result = {
141
+ 'info': response,
142
+ 'timestamp': undefined,
143
+ 'datetime': undefined,
144
+ };
145
+ const codes = Object.keys (this.currencies);
146
+ for (let i = 0; i < codes.length; i++) {
147
+ const code = codes[i];
148
+ const account = this.account ();
149
+ const currency = this.currency (code);
150
+ const uppercase = currency['id'].toUpperCase ();
151
+ if (uppercase in response) {
152
+ account['free'] = this.safeString (response, 'AVAILABLE_' + uppercase);
153
+ account['total'] = this.safeString (response, uppercase);
154
+ }
155
+ result[code] = account;
156
+ }
157
+ return this.safeBalance (result);
158
+ }
159
+
160
+ async fetchBalance (params = {}) {
161
+ await this.loadMarkets ();
162
+ const response = await this.privateGetAccountBalanceV2 (params);
163
+ //
164
+ // {
165
+ // "AVAILABLE_NIS": 0.0,
166
+ // "NIS": 0.0,
167
+ // "LOCKED_NIS": 0.0,
168
+ // "AVAILABLE_BTC": 0.0,
169
+ // "BTC": 0.0,
170
+ // "LOCKED_BTC": 0.0,
171
+ // "AVAILABLE_ETH": 0.0,
172
+ // "ETH": 0.0,
173
+ // "LOCKED_ETH": 0.0,
174
+ // "AVAILABLE_BCHSV": 0.0,
175
+ // "BCHSV": 0.0,
176
+ // "LOCKED_BCHSV": 0.0,
177
+ // "AVAILABLE_BCHABC": 0.0,
178
+ // "BCHABC": 0.0,
179
+ // "LOCKED_BCHABC": 0.0,
180
+ // "AVAILABLE_LTC": 0.0,
181
+ // "LTC": 0.0,
182
+ // "LOCKED_LTC": 0.0,
183
+ // "AVAILABLE_ETC": 0.0,
184
+ // "ETC": 0.0,
185
+ // "LOCKED_ETC": 0.0,
186
+ // "AVAILABLE_BTG": 0.0,
187
+ // "BTG": 0.0,
188
+ // "LOCKED_BTG": 0.0,
189
+ // "AVAILABLE_GRIN": 0.0,
190
+ // "GRIN": 0.0,
191
+ // "LOCKED_GRIN": 0.0,
192
+ // "Fees": {
193
+ // "BtcNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
194
+ // "EthNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
195
+ // "BchabcNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
196
+ // "LtcNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
197
+ // "EtcNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
198
+ // "BtgNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
199
+ // "LtcBtc": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
200
+ // "BchsvNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
201
+ // "GrinNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 }
202
+ // }
203
+ // }
204
+ //
205
+ return this.parseBalance (response);
206
+ }
207
+
208
+ async fetchOrderBook (symbol, limit = undefined, params = {}) {
209
+ await this.loadMarkets ();
210
+ const request = {
211
+ 'pair': this.marketId (symbol),
212
+ };
213
+ const orderbook = await this.publicGetExchangesPairOrderbook (this.extend (request, params));
214
+ return this.parseOrderBook (orderbook, symbol);
215
+ }
216
+
217
+ parseTicker (ticker, market = undefined) {
218
+ const symbol = this.safeSymbol (undefined, market);
219
+ const timestamp = this.milliseconds ();
220
+ const averagePrice = this.safeString (ticker, 'av');
221
+ const baseVolume = this.safeString (ticker, 'a');
222
+ const last = this.safeString (ticker, 'll');
223
+ return this.safeTicker ({
224
+ 'symbol': symbol,
225
+ 'timestamp': timestamp,
226
+ 'datetime': this.iso8601 (timestamp),
227
+ 'high': undefined,
228
+ 'low': undefined,
229
+ 'bid': this.safeString (ticker, 'h'),
230
+ 'bidVolume': undefined,
231
+ 'ask': this.safeString (ticker, 'l'),
232
+ 'askVolume': undefined,
233
+ 'vwap': undefined,
234
+ 'open': undefined,
235
+ 'close': last,
236
+ 'last': last,
237
+ 'previousClose': undefined,
238
+ 'change': undefined,
239
+ 'percentage': undefined,
240
+ 'average': averagePrice,
241
+ 'baseVolume': baseVolume,
242
+ 'quoteVolume': undefined,
243
+ 'info': ticker,
244
+ }, market, false);
245
+ }
246
+
247
+ async fetchTicker (symbol, params = {}) {
248
+ await this.loadMarkets ();
249
+ const market = this.market (symbol);
250
+ const request = {
251
+ 'pair': market['id'],
252
+ };
253
+ const response = await this.publicGetExchangesPairTicker (this.extend (request, params));
254
+ return this.parseTicker (response, market);
255
+ }
256
+
257
+ async fetchTrades (symbol, since = undefined, limit = undefined, params = {}) {
258
+ await this.loadMarkets ();
259
+ const market = this.market (symbol);
260
+ const method = this.options['fetchTradesMethod'];
261
+ const request = {
262
+ 'pair': market['id'],
263
+ };
264
+ if (since !== undefined) {
265
+ request['date'] = parseInt (since);
266
+ }
267
+ if (limit !== undefined) {
268
+ request['limit'] = limit; // max 100000
269
+ }
270
+ const response = await this[method] (this.extend (request, params));
271
+ if (typeof response === 'string') {
272
+ throw new ExchangeError (response);
273
+ }
274
+ return this.parseTrades (response, market, since, limit);
275
+ }
276
+
277
+ async fetchTradingFees (params = {}) {
278
+ await this.loadMarkets ();
279
+ const response = await this.privateGetAccountBalance (params);
280
+ //
281
+ // {
282
+ // "AVAILABLE_NIS": 0.0,
283
+ // "NIS": 0.0,
284
+ // "LOCKED_NIS": 0.0,
285
+ // "AVAILABLE_BTC": 0.0,
286
+ // "BTC": 0.0,
287
+ // "LOCKED_BTC": 0.0,
288
+ // ...
289
+ // "Fees": {
290
+ // "BtcNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
291
+ // "EthNis": { "FeeMaker": 1.0, "FeeTaker": 1.0 },
292
+ // ...
293
+ // }
294
+ // }
295
+ //
296
+ const fees = this.safeValue (response, 'Fees', {});
297
+ const keys = Object.keys (fees);
298
+ const result = {};
299
+ for (let i = 0; i < keys.length; i++) {
300
+ const marketId = keys[i];
301
+ const symbol = this.safeSymbol (marketId);
302
+ const fee = this.safeValue (fees, marketId);
303
+ const makerString = this.safeString (fee, 'FeeMaker');
304
+ const takerString = this.safeString (fee, 'FeeTaker');
305
+ const maker = this.parseNumber (Precise.stringDiv (makerString, '100'));
306
+ const taker = this.parseNumber (Precise.stringDiv (takerString, '100'));
307
+ result[symbol] = {
308
+ 'info': fee,
309
+ 'symbol': symbol,
310
+ 'taker': taker,
311
+ 'maker': maker,
312
+ 'percentage': true,
313
+ 'tierBased': false,
314
+ };
315
+ }
316
+ return result;
317
+ }
318
+
319
+ async createOrder (symbol, type, side, amount, price = undefined, params = {}) {
320
+ await this.loadMarkets ();
321
+ let method = 'privatePostOrderAddOrder';
322
+ const request = {
323
+ 'Amount': amount,
324
+ 'Pair': this.marketId (symbol),
325
+ };
326
+ if (type === 'market') {
327
+ method += 'MarketPrice' + this.capitalize (side);
328
+ } else {
329
+ request['Price'] = price;
330
+ request['Total'] = amount * price;
331
+ request['IsBid'] = (side === 'buy');
332
+ }
333
+ const response = await this[method] (this.extend (request, params));
334
+ return {
335
+ 'info': response,
336
+ 'id': response['NewOrder']['id'],
337
+ };
338
+ }
339
+
340
+ async cancelOrder (id, symbol = undefined, params = {}) {
341
+ const request = {
342
+ 'id': id,
343
+ };
344
+ return await this.privatePostOrderCancelOrder (this.extend (request, params));
345
+ }
346
+
347
+ async fetchOpenOrders (symbol = undefined, since = undefined, limit = undefined, params = {}) {
348
+ if (symbol === undefined) {
349
+ throw new ArgumentsRequired (this.id + ' fetchOpenOrders() requires a symbol argument');
350
+ }
351
+ await this.loadMarkets ();
352
+ const market = this.market (symbol);
353
+ const request = {
354
+ 'pair': market['id'],
355
+ };
356
+ const response = await this.privateGetOrderMyOrders (this.extend (request, params));
357
+ const orders = this.safeValue (response, market['id'], {});
358
+ const asks = this.safeValue (orders, 'ask', []);
359
+ const bids = this.safeValue (orders, 'bid', []);
360
+ return this.parseOrders (this.arrayConcat (asks, bids), market, since, limit);
361
+ }
362
+
363
+ parseOrder (order, market = undefined) {
364
+ const timestamp = this.safeInteger (order, 'created');
365
+ const price = this.safeString (order, 'price');
366
+ const amount = this.safeString (order, 'amount');
367
+ market = this.safeMarket (undefined, market);
368
+ let side = this.safeValue (order, 'type');
369
+ if (side === 0) {
370
+ side = 'buy';
371
+ } else if (side === 1) {
372
+ side = 'sell';
373
+ }
374
+ const id = this.safeString (order, 'id');
375
+ const status = this.safeString (order, 'status');
376
+ return this.safeOrder ({
377
+ 'id': id,
378
+ 'clientOrderId': undefined,
379
+ 'timestamp': timestamp,
380
+ 'datetime': this.iso8601 (timestamp),
381
+ 'lastTradeTimestamp': undefined,
382
+ 'status': status,
383
+ 'symbol': market['symbol'],
384
+ 'type': undefined,
385
+ 'timeInForce': undefined,
386
+ 'postOnly': undefined,
387
+ 'side': side,
388
+ 'price': price,
389
+ 'stopPrice': undefined,
390
+ 'amount': amount,
391
+ 'filled': undefined,
392
+ 'remaining': undefined,
393
+ 'cost': undefined,
394
+ 'trades': undefined,
395
+ 'fee': undefined,
396
+ 'info': order,
397
+ 'average': undefined,
398
+ }, market);
399
+ }
400
+
401
+ async fetchMyTrades (symbol = undefined, since = undefined, limit = undefined, params = {}) {
402
+ await this.loadMarkets ();
403
+ let market = undefined;
404
+ const request = {};
405
+ if (limit !== undefined) {
406
+ request['take'] = limit;
407
+ }
408
+ request['take'] = limit;
409
+ if (since !== undefined) {
410
+ request['toTime'] = this.yyyymmdd (this.milliseconds (), '.');
411
+ request['fromTime'] = this.yyyymmdd (since, '.');
412
+ }
413
+ if (symbol !== undefined) {
414
+ market = this.market (symbol);
415
+ request['pair'] = market['id'];
416
+ }
417
+ const response = await this.privateGetOrderOrderHistory (this.extend (request, params));
418
+ return this.parseTrades (response, market, since, limit);
419
+ }
420
+
421
+ parseTrade (trade, market = undefined) {
422
+ let timestamp = undefined;
423
+ let id = undefined;
424
+ let price = undefined;
425
+ let amount = undefined;
426
+ let orderId = undefined;
427
+ let fee = undefined;
428
+ let side = undefined;
429
+ const reference = this.safeString (trade, 'reference');
430
+ if (reference !== undefined) {
431
+ timestamp = this.safeTimestamp (trade, 'ticks');
432
+ price = this.safeString (trade, 'price');
433
+ amount = this.safeString (trade, 'firstAmount');
434
+ const reference_parts = reference.split ('|'); // reference contains 'pair|orderId|tradeId'
435
+ if (market === undefined) {
436
+ const marketId = this.safeString (trade, 'pair');
437
+ if (marketId in this.markets_by_id[marketId]) {
438
+ market = this.markets_by_id[marketId];
439
+ } else if (reference_parts[0] in this.markets_by_id) {
440
+ market = this.markets_by_id[reference_parts[0]];
441
+ }
442
+ }
443
+ orderId = reference_parts[1];
444
+ id = reference_parts[2];
445
+ side = this.safeInteger (trade, 'action');
446
+ if (side === 0) {
447
+ side = 'buy';
448
+ } else if (side === 1) {
449
+ side = 'sell';
450
+ }
451
+ const feeCost = this.safeString (trade, 'feeAmount');
452
+ if (feeCost !== undefined) {
453
+ fee = {
454
+ 'cost': feeCost,
455
+ 'currency': 'NIS',
456
+ };
457
+ }
458
+ } else {
459
+ timestamp = this.safeTimestamp (trade, 'date');
460
+ id = this.safeString (trade, 'tid');
461
+ price = this.safeString (trade, 'price');
462
+ amount = this.safeString (trade, 'amount');
463
+ side = this.safeValue (trade, 'isBid');
464
+ if (side !== undefined) {
465
+ if (side) {
466
+ side = 'buy';
467
+ } else {
468
+ side = 'sell';
469
+ }
470
+ }
471
+ }
472
+ market = this.safeMarket (undefined, market);
473
+ return this.safeTrade ({
474
+ 'info': trade,
475
+ 'id': id,
476
+ 'timestamp': timestamp,
477
+ 'datetime': this.iso8601 (timestamp),
478
+ 'symbol': market['symbol'],
479
+ 'order': orderId,
480
+ 'type': undefined,
481
+ 'side': side,
482
+ 'takerOrMaker': undefined,
483
+ 'price': price,
484
+ 'amount': amount,
485
+ 'cost': undefined,
486
+ 'fee': fee,
487
+ }, market);
488
+ }
489
+
490
+ sign (path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
491
+ let url = this.urls['api'] + '/' + this.implodeParams (path, params);
492
+ if (api === 'public') {
493
+ url += '.json';
494
+ } else {
495
+ this.checkRequiredCredentials ();
496
+ const nonce = this.nonce ();
497
+ const query = this.extend ({
498
+ 'nonce': nonce,
499
+ }, params);
500
+ const auth = this.urlencode (query);
501
+ if (method === 'GET') {
502
+ if (Object.keys (query).length) {
503
+ url += '?' + auth;
504
+ }
505
+ } else {
506
+ body = auth;
507
+ }
508
+ const signature = this.hmac (this.encode (auth), this.encode (this.secret), 'sha512', 'base64');
509
+ headers = {
510
+ 'Content-Type': 'application/x-www-form-urlencoded',
511
+ 'key': this.apiKey,
512
+ 'sign': signature,
513
+ };
514
+ }
515
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
516
+ }
517
+
518
+ handleErrors (httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
519
+ if (response === undefined) {
520
+ return; // fallback to default error handler
521
+ }
522
+ //
523
+ // { "error" : "please approve new terms of use on site." }
524
+ // { "error": "Please provide valid nonce in Request Nonce (1598218490) is not bigger than last nonce (1598218490)."}
525
+ //
526
+ const error = this.safeString (response, 'error');
527
+ if (error !== undefined) {
528
+ const feedback = this.id + ' ' + body;
529
+ this.throwExactlyMatchedException (this.exceptions['exact'], error, feedback);
530
+ this.throwBroadlyMatchedException (this.exceptions['broad'], error, feedback);
531
+ throw new ExchangeError (feedback); // unknown message
532
+ }
533
+ }
534
+ };
535
+