ccxt 4.3.69 → 4.3.71

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 (187) hide show
  1. package/README.md +7 -6
  2. package/dist/ccxt.browser.min.js +13 -10
  3. package/dist/cjs/ccxt.js +8 -1
  4. package/dist/cjs/src/abstract/paradex.js +9 -0
  5. package/dist/cjs/src/ascendex.js +1 -1
  6. package/dist/cjs/src/base/Exchange.js +55 -0
  7. package/dist/cjs/src/binance.js +1 -1
  8. package/dist/cjs/src/blofin.js +63 -6
  9. package/dist/cjs/src/bybit.js +1 -1
  10. package/dist/cjs/src/coinbaseinternational.js +168 -2
  11. package/dist/cjs/src/cryptocom.js +9 -1
  12. package/dist/cjs/src/hitbtc.js +1 -1
  13. package/dist/cjs/src/paradex.js +2075 -0
  14. package/dist/cjs/src/poloniex.js +1 -0
  15. package/dist/cjs/src/pro/bequant.js +4 -0
  16. package/dist/cjs/src/pro/blofin.js +665 -0
  17. package/dist/cjs/src/pro/coinbaseinternational.js +154 -9
  18. package/dist/cjs/src/pro/cryptocom.js +3 -1
  19. package/dist/cjs/src/pro/hitbtc.js +26 -8
  20. package/dist/cjs/src/pro/okx.js +7 -0
  21. package/dist/cjs/src/pro/paradex.js +365 -0
  22. package/dist/cjs/src/pro/poloniex.js +37 -12
  23. package/dist/cjs/src/pro/woo.js +5 -4
  24. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +100 -0
  25. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -0
  26. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +284 -0
  27. package/dist/cjs/src/static_dependencies/starknet/constants.js +60 -0
  28. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +26 -0
  29. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +8 -0
  30. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +13 -0
  31. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +56 -0
  32. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +19 -0
  33. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +15 -0
  34. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +44 -0
  35. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +122 -0
  36. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +137 -0
  37. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +61 -0
  38. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +218 -0
  39. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  40. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  41. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  42. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +66 -0
  43. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +281 -0
  44. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +33 -0
  45. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +37 -0
  46. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  47. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +156 -0
  48. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +250 -0
  49. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +215 -0
  50. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +112 -0
  51. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +206 -0
  52. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +58 -0
  53. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +57 -0
  54. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +76 -0
  55. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +92 -0
  56. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +48 -0
  57. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +101 -0
  58. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +334 -0
  59. package/dist/cjs/src/woo.js +4 -2
  60. package/js/ccxt.d.ts +11 -2
  61. package/js/ccxt.js +8 -2
  62. package/js/src/abstract/coinbaseinternational.d.ts +1 -1
  63. package/js/src/abstract/paradex.d.ts +43 -0
  64. package/js/src/abstract/paradex.js +11 -0
  65. package/js/src/ascendex.js +1 -1
  66. package/js/src/base/Exchange.d.ts +8 -0
  67. package/js/src/base/Exchange.js +51 -0
  68. package/js/src/binance.js +1 -1
  69. package/js/src/blofin.d.ts +1 -1
  70. package/js/src/blofin.js +63 -6
  71. package/js/src/bybit.js +1 -1
  72. package/js/src/coinbaseinternational.d.ts +6 -1
  73. package/js/src/coinbaseinternational.js +168 -2
  74. package/js/src/cryptocom.js +10 -2
  75. package/js/src/hitbtc.js +1 -1
  76. package/js/src/paradex.d.ts +76 -0
  77. package/js/src/paradex.js +2075 -0
  78. package/js/src/poloniex.js +1 -0
  79. package/js/src/pro/bequant.js +4 -0
  80. package/js/src/pro/blofin.d.ts +39 -0
  81. package/js/src/pro/blofin.js +668 -0
  82. package/js/src/pro/coinbaseinternational.d.ts +5 -1
  83. package/js/src/pro/coinbaseinternational.js +155 -10
  84. package/js/src/pro/cryptocom.js +4 -2
  85. package/js/src/pro/hitbtc.d.ts +1 -1
  86. package/js/src/pro/hitbtc.js +26 -8
  87. package/js/src/pro/okx.js +7 -0
  88. package/js/src/pro/paradex.d.ts +15 -0
  89. package/js/src/pro/paradex.js +366 -0
  90. package/js/src/pro/poloniex.js +37 -12
  91. package/js/src/pro/woo.js +5 -4
  92. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +24 -0
  93. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  94. package/js/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  95. package/js/src/static_dependencies/scure-starknet/index.js +323 -0
  96. package/js/src/static_dependencies/starknet/constants.d.ts +61 -0
  97. package/js/src/static_dependencies/starknet/constants.js +67 -0
  98. package/js/src/static_dependencies/starknet/index.d.ts +7 -0
  99. package/js/src/static_dependencies/starknet/index.js +50 -0
  100. package/js/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  101. package/js/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  102. package/js/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  103. package/js/src/static_dependencies/starknet/types/calldata.js +28 -0
  104. package/js/src/static_dependencies/starknet/types/index.d.ts +13 -0
  105. package/js/src/static_dependencies/starknet/types/index.js +16 -0
  106. package/js/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  107. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  108. package/js/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  109. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  110. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  111. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  112. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  113. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  114. package/js/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  115. package/js/src/static_dependencies/starknet/types/lib/index.js +52 -0
  116. package/js/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  117. package/js/src/static_dependencies/starknet/types/typedData.js +19 -0
  118. package/js/src/static_dependencies/starknet/utils/address.d.ts +53 -0
  119. package/js/src/static_dependencies/starknet/utils/address.js +89 -0
  120. package/js/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  121. package/js/src/static_dependencies/starknet/utils/assert.js +17 -0
  122. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  123. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  124. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  125. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  126. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  127. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  128. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  129. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  130. package/js/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  131. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  132. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  133. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  134. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  135. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  136. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  137. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  138. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  139. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  140. package/js/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  141. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  142. package/js/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  143. package/js/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  144. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  145. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  146. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  147. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  148. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  149. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  150. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  151. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  152. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  153. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  154. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  155. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  156. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  157. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  158. package/js/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  159. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  160. package/js/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  161. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  162. package/js/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  163. package/js/src/static_dependencies/starknet/utils/encode.js +282 -0
  164. package/js/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  165. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +224 -0
  166. package/js/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  167. package/js/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  168. package/js/src/static_dependencies/starknet/utils/json.d.ts +24 -0
  169. package/js/src/static_dependencies/starknet/utils/json.js +43 -0
  170. package/js/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  171. package/js/src/static_dependencies/starknet/utils/merkle.js +84 -0
  172. package/js/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  173. package/js/src/static_dependencies/starknet/utils/num.js +244 -0
  174. package/js/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  175. package/js/src/static_dependencies/starknet/utils/selector.js +85 -0
  176. package/js/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  177. package/js/src/static_dependencies/starknet/utils/shortString.js +96 -0
  178. package/js/src/static_dependencies/starknet/utils/starknetId.d.ts +113 -0
  179. package/js/src/static_dependencies/starknet/utils/starknetId.js +265 -0
  180. package/js/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  181. package/js/src/static_dependencies/starknet/utils/typedData.js +321 -0
  182. package/js/src/static_dependencies/starknet/utils/uint256.d.ts +21 -0
  183. package/js/src/static_dependencies/starknet/utils/uint256.js +32 -0
  184. package/js/src/static_dependencies/starknet/utils/url.d.ts +29 -0
  185. package/js/src/static_dependencies/starknet/utils/url.js +70 -0
  186. package/js/src/woo.js +4 -2
  187. package/package.json +1 -1
@@ -0,0 +1,366 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import paradexRest from '../paradex.js';
9
+ import { ArrayCache } from '../base/ws/Cache.js';
10
+ // ---------------------------------------------------------------------------
11
+ export default class paradex extends paradexRest {
12
+ describe() {
13
+ return this.deepExtend(super.describe(), {
14
+ 'has': {
15
+ 'ws': true,
16
+ 'watchTicker': true,
17
+ 'watchTickers': true,
18
+ 'watchOrderBook': true,
19
+ 'watchOrders': false,
20
+ 'watchTrades': true,
21
+ 'watchBalance': false,
22
+ 'watchOHLCV': false,
23
+ },
24
+ 'urls': {
25
+ 'logo': 'https://x.com/tradeparadex/photo',
26
+ 'api': {
27
+ 'ws': 'wss://ws.api.prod.paradex.trade/v1',
28
+ },
29
+ 'test': {
30
+ 'ws': 'wss://ws.api.testnet.paradex.trade/v1',
31
+ },
32
+ 'www': 'https://www.paradex.trade/',
33
+ 'doc': 'https://docs.api.testnet.paradex.trade/',
34
+ 'fees': 'https://docs.paradex.trade/getting-started/trading-fees',
35
+ 'referral': '',
36
+ },
37
+ 'options': {},
38
+ 'streaming': {},
39
+ });
40
+ }
41
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
42
+ /**
43
+ * @method
44
+ * @name paradex#watchTrades
45
+ * @description get the list of most recent trades for a particular symbol
46
+ * @see https://docs.api.testnet.paradex.trade/#sub-trades-market_symbol-operation
47
+ * @param {string} symbol unified symbol of the market to fetch trades for
48
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
49
+ * @param {int} [limit] the maximum amount of trades to fetch
50
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
51
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
52
+ */
53
+ await this.loadMarkets();
54
+ let messageHash = 'trades.';
55
+ if (symbol !== undefined) {
56
+ const market = this.market(symbol);
57
+ messageHash += market['id'];
58
+ }
59
+ else {
60
+ messageHash += 'ALL';
61
+ }
62
+ const url = this.urls['api']['ws'];
63
+ const request = {
64
+ 'jsonrpc': '2.0',
65
+ 'method': 'subscribe',
66
+ 'params': {
67
+ 'channel': messageHash,
68
+ },
69
+ };
70
+ const trades = await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
71
+ if (this.newUpdates) {
72
+ limit = trades.getLimit(symbol, limit);
73
+ }
74
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
75
+ }
76
+ handleTrade(client, message) {
77
+ //
78
+ // {
79
+ // "jsonrpc": "2.0",
80
+ // "method": "subscription",
81
+ // "params": {
82
+ // "channel": "trades.ALL",
83
+ // "data": {
84
+ // "id": "1718179273230201709233240002",
85
+ // "market": "kBONK-USD-PERP",
86
+ // "side": "BUY",
87
+ // "size": "34028",
88
+ // "price": "0.028776",
89
+ // "created_at": 1718179273230,
90
+ // "trade_type": "FILL"
91
+ // }
92
+ // }
93
+ // }
94
+ //
95
+ const params = this.safeDict(message, 'params', {});
96
+ const data = this.safeDict(params, 'data', {});
97
+ const parsedTrade = this.parseTrade(data);
98
+ const symbol = parsedTrade['symbol'];
99
+ const messageHash = this.safeString(params, 'channel');
100
+ let stored = this.safeValue(this.trades, symbol);
101
+ if (stored === undefined) {
102
+ stored = new ArrayCache(this.safeInteger(this.options, 'tradesLimit', 1000));
103
+ this.trades[symbol] = stored;
104
+ }
105
+ stored.append(parsedTrade);
106
+ client.resolve(stored, messageHash);
107
+ return message;
108
+ }
109
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
110
+ /**
111
+ * @method
112
+ * @name paradex#watchOrderBook
113
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
114
+ * @see https://docs.api.testnet.paradex.trade/#sub-order_book-market_symbol-snapshot-15-refresh_rate-operation
115
+ * @param {string} symbol unified symbol of the market to fetch the order book for
116
+ * @param {int} [limit] the maximum amount of order book entries to return
117
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
118
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
119
+ */
120
+ const market = this.market(symbol);
121
+ const messageHash = 'order_book.' + market['id'] + '.snapshot@15@100ms';
122
+ const url = this.urls['api']['ws'];
123
+ const request = {
124
+ 'jsonrpc': '2.0',
125
+ 'method': 'subscribe',
126
+ 'params': {
127
+ 'channel': messageHash,
128
+ },
129
+ };
130
+ const orderbook = await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
131
+ return orderbook.limit();
132
+ }
133
+ handleOrderBook(client, message) {
134
+ //
135
+ // {
136
+ // "jsonrpc": "2.0",
137
+ // "method": "subscription",
138
+ // "params": {
139
+ // "channel": "order_book.BTC-USD-PERP.snapshot@15@50ms",
140
+ // "data": {
141
+ // "seq_no": 14127815,
142
+ // "market": "BTC-USD-PERP",
143
+ // "last_updated_at": 1718267837265,
144
+ // "update_type": "s",
145
+ // "inserts": [
146
+ // {
147
+ // "side": "BUY",
148
+ // "price": "67629.7",
149
+ // "size": "0.992"
150
+ // },
151
+ // {
152
+ // "side": "SELL",
153
+ // "price": "69378.6",
154
+ // "size": "3.137"
155
+ // }
156
+ // ],
157
+ // "updates": [],
158
+ // "deletes": []
159
+ // }
160
+ // }
161
+ // }
162
+ //
163
+ const params = this.safeDict(message, 'params', {});
164
+ const data = this.safeDict(params, 'data', {});
165
+ const marketId = this.safeString(data, 'market');
166
+ const market = this.safeMarket(marketId);
167
+ const timestamp = this.safeInteger(data, 'last_updated_at');
168
+ const symbol = market['symbol'];
169
+ if (!(symbol in this.orderbooks)) {
170
+ this.orderbooks[symbol] = this.orderBook();
171
+ }
172
+ const orderbookData = {
173
+ 'bids': [],
174
+ 'asks': [],
175
+ };
176
+ const inserts = this.safeList(data, 'inserts');
177
+ for (let i = 0; i < inserts.length; i++) {
178
+ const insert = this.safeDict(inserts, i);
179
+ const side = this.safeString(insert, 'side');
180
+ const price = this.safeString(insert, 'price');
181
+ const size = this.safeString(insert, 'size');
182
+ if (side === 'BUY') {
183
+ orderbookData['bids'].push([price, size]);
184
+ }
185
+ else {
186
+ orderbookData['asks'].push([price, size]);
187
+ }
188
+ }
189
+ const orderbook = this.orderbooks[symbol];
190
+ const snapshot = this.parseOrderBook(orderbookData, symbol, timestamp, 'bids', 'asks');
191
+ snapshot['nonce'] = this.safeNumber(data, 'seq_no');
192
+ orderbook.reset(snapshot);
193
+ const messageHash = this.safeString(params, 'channel');
194
+ client.resolve(orderbook, messageHash);
195
+ }
196
+ async watchTicker(symbol, params = {}) {
197
+ /**
198
+ * @method
199
+ * @name paradex#watchTicker
200
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
201
+ * @see https://docs.api.testnet.paradex.trade/#sub-markets_summary-operation
202
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
203
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
204
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
205
+ */
206
+ await this.loadMarkets();
207
+ symbol = this.symbol(symbol);
208
+ const channel = 'markets_summary';
209
+ const url = this.urls['api']['ws'];
210
+ const request = {
211
+ 'jsonrpc': '2.0',
212
+ 'method': 'subscribe',
213
+ 'params': {
214
+ 'channel': channel,
215
+ },
216
+ };
217
+ const messageHash = channel + '.' + symbol;
218
+ return await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
219
+ }
220
+ async watchTickers(symbols = undefined, params = {}) {
221
+ /**
222
+ * @method
223
+ * @name paradex#watchTickers
224
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
225
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
226
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
227
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
228
+ */
229
+ symbols = this.marketSymbols(symbols);
230
+ const channel = 'markets_summary';
231
+ const url = this.urls['api']['ws'];
232
+ const request = {
233
+ 'jsonrpc': '2.0',
234
+ 'method': 'subscribe',
235
+ 'params': {
236
+ 'channel': channel,
237
+ },
238
+ };
239
+ const messageHashes = [];
240
+ if (Array.isArray(symbols)) {
241
+ for (let i = 0; i < symbols.length; i++) {
242
+ const messageHash = channel + '.' + symbols[i];
243
+ messageHashes.push(messageHash);
244
+ }
245
+ }
246
+ else {
247
+ messageHashes.push(channel);
248
+ }
249
+ const newTickers = await this.watchMultiple(url, messageHashes, this.deepExtend(request, params), messageHashes);
250
+ if (this.newUpdates) {
251
+ const result = {};
252
+ result[newTickers['symbol']] = newTickers;
253
+ return result;
254
+ }
255
+ return this.filterByArray(this.tickers, 'symbol', symbols);
256
+ }
257
+ handleTicker(client, message) {
258
+ //
259
+ // {
260
+ // "jsonrpc": "2.0",
261
+ // "method": "subscription",
262
+ // "params": {
263
+ // "channel": "markets_summary",
264
+ // "data": {
265
+ // "symbol": "ORDI-USD-PERP",
266
+ // "oracle_price": "49.80885481",
267
+ // "mark_price": "49.80885481",
268
+ // "last_traded_price": "62.038",
269
+ // "bid": "49.822",
270
+ // "ask": "58.167",
271
+ // "volume_24h": "0",
272
+ // "total_volume": "54542628.66054200416",
273
+ // "created_at": 1718334307698,
274
+ // "underlying_price": "47.93",
275
+ // "open_interest": "6999.5",
276
+ // "funding_rate": "0.03919997509811",
277
+ // "price_change_rate_24h": ""
278
+ // }
279
+ // }
280
+ // }
281
+ //
282
+ const params = this.safeDict(message, 'params', {});
283
+ const data = this.safeDict(params, 'data', {});
284
+ const marketId = this.safeString(data, 'symbol');
285
+ const market = this.safeMarket(marketId);
286
+ const symbol = market['symbol'];
287
+ const channel = this.safeString(params, 'channel');
288
+ const messageHash = channel + '.' + symbol;
289
+ const ticker = this.parseTicker(data, market);
290
+ this.tickers[symbol] = ticker;
291
+ client.resolve(ticker, channel);
292
+ client.resolve(ticker, messageHash);
293
+ return message;
294
+ }
295
+ handleErrorMessage(client, message) {
296
+ //
297
+ // {
298
+ // "jsonrpc": "2.0",
299
+ // "id": 0,
300
+ // "error": {
301
+ // "code": -32600,
302
+ // "message": "invalid subscribe request",
303
+ // "data": "invalid channel"
304
+ // },
305
+ // "usIn": 1718179125962419,
306
+ // "usDiff": 76,
307
+ // "usOut": 1718179125962495
308
+ // }
309
+ //
310
+ const error = this.safeDict(message, 'error');
311
+ if (error === undefined) {
312
+ return true;
313
+ }
314
+ else {
315
+ const errorCode = this.safeString(error, 'code');
316
+ if (errorCode !== undefined) {
317
+ const feedback = this.id + ' ' + this.json(error);
318
+ this.throwExactlyMatchedException(this.exceptions['exact'], '-32600', feedback);
319
+ const messageString = this.safeValue(error, 'message');
320
+ if (messageString !== undefined) {
321
+ this.throwBroadlyMatchedException(this.exceptions['broad'], messageString, feedback);
322
+ }
323
+ }
324
+ return false;
325
+ }
326
+ }
327
+ handleMessage(client, message) {
328
+ if (!this.handleErrorMessage(client, message)) {
329
+ return;
330
+ }
331
+ //
332
+ // {
333
+ // "jsonrpc": "2.0",
334
+ // "method": "subscription",
335
+ // "params": {
336
+ // "channel": "trades.ALL",
337
+ // "data": {
338
+ // "id": "1718179273230201709233240002",
339
+ // "market": "kBONK-USD-PERP",
340
+ // "side": "BUY",
341
+ // "size": "34028",
342
+ // "price": "0.028776",
343
+ // "created_at": 1718179273230,
344
+ // "trade_type": "FILL"
345
+ // }
346
+ // }
347
+ // }
348
+ //
349
+ const data = this.safeDict(message, 'params');
350
+ if (data !== undefined) {
351
+ const channel = this.safeString(data, 'channel');
352
+ const parts = channel.split('.');
353
+ const name = this.safeString(parts, 0);
354
+ const methods = {
355
+ 'trades': this.handleTrade,
356
+ 'order_book': this.handleOrderBook,
357
+ 'markets_summary': this.handleTicker,
358
+ // ...
359
+ };
360
+ const method = this.safeValue(methods, name);
361
+ if (method !== undefined) {
362
+ method.call(this, client, message);
363
+ }
364
+ }
365
+ }
366
+ }
@@ -1179,15 +1179,7 @@ export default class poloniex extends poloniexRest {
1179
1179
  this.handleAuthenticate(client, message);
1180
1180
  }
1181
1181
  else if (type === undefined) {
1182
- const data = this.safeValue(message, 'data');
1183
- const item = this.safeValue(data, 0);
1184
- const orderId = this.safeString(item, 'orderId');
1185
- if (orderId === '0') {
1186
- this.handleErrorMessage(client, item);
1187
- }
1188
- else {
1189
- this.handleOrderRequest(client, message);
1190
- }
1182
+ this.handleOrderRequest(client, message);
1191
1183
  }
1192
1184
  else {
1193
1185
  const data = this.safeValue(message, 'data', []);
@@ -1215,12 +1207,45 @@ export default class poloniex extends poloniexRest {
1215
1207
  // "event": "error",
1216
1208
  // "message": "Platform in maintenance mode"
1217
1209
  // }
1210
+ // {
1211
+ // "id":"1722386782048",
1212
+ // "data":[
1213
+ // {
1214
+ // "orderId":0,
1215
+ // "clientOrderId":null,
1216
+ // "message":"available insufficient",
1217
+ // "code":21721
1218
+ // }
1219
+ // ]
1220
+ // }
1218
1221
  //
1222
+ const id = this.safeString(message, 'id');
1219
1223
  const event = this.safeString(message, 'event');
1220
- const orderId = this.safeString(message, 'orderId');
1224
+ const data = this.safeList(message, 'data');
1225
+ const first = this.safeDict(data, 0);
1226
+ const orderId = this.safeString(first, 'orderId');
1221
1227
  if ((event === 'error') || (orderId === '0')) {
1222
- const error = this.safeString(message, 'message');
1223
- throw new ExchangeError(this.id + ' error: ' + this.json(error));
1228
+ try {
1229
+ const error = this.safeString(first, 'message');
1230
+ const code = this.safeString(first, 'code');
1231
+ const feedback = this.id + ' ' + this.json(message);
1232
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
1233
+ this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
1234
+ throw new ExchangeError(feedback);
1235
+ }
1236
+ catch (e) {
1237
+ if (e instanceof AuthenticationError) {
1238
+ const messageHash = 'authenticated';
1239
+ client.reject(e, messageHash);
1240
+ if (messageHash in client.subscriptions) {
1241
+ delete client.subscriptions[messageHash];
1242
+ }
1243
+ }
1244
+ else {
1245
+ client.reject(e, id);
1246
+ }
1247
+ return true;
1248
+ }
1224
1249
  }
1225
1250
  return false;
1226
1251
  }
package/js/src/pro/woo.js CHANGED
@@ -30,7 +30,7 @@ export default class woo extends wooRest {
30
30
  'api': {
31
31
  'ws': {
32
32
  'public': 'wss://wss.woo.org/ws/stream',
33
- 'private': 'wss://wss.woo.network/v2/ws/private/stream',
33
+ 'private': 'wss://wss.woo.org/v2/ws/private/stream',
34
34
  },
35
35
  },
36
36
  'test': {
@@ -75,7 +75,8 @@ export default class woo extends wooRest {
75
75
  return newValue;
76
76
  }
77
77
  async watchPublic(messageHash, message) {
78
- const url = this.urls['api']['ws']['public'] + '/' + this.uid;
78
+ const urlUid = (this.uid) ? '/' + this.uid : '';
79
+ const url = this.urls['api']['ws']['public'] + urlUid;
79
80
  const requestId = this.requestId(url);
80
81
  const subscribe = {
81
82
  'id': requestId,
@@ -469,7 +470,7 @@ export default class woo extends wooRest {
469
470
  const marketId = this.safeString(trade, 'symbol');
470
471
  market = this.safeMarket(marketId, market);
471
472
  const symbol = market['symbol'];
472
- const price = this.safeString(trade, 'executedPrice', 'price');
473
+ const price = this.safeString2(trade, 'executedPrice', 'price');
473
474
  const amount = this.safeString2(trade, 'executedQuantity', 'size');
474
475
  const cost = Precise.stringMul(price, amount);
475
476
  const side = this.safeStringLower(trade, 'side');
@@ -507,7 +508,7 @@ export default class woo extends wooRest {
507
508
  checkRequiredUid(error = true) {
508
509
  if (!this.uid) {
509
510
  if (error) {
510
- throw new AuthenticationError(this.id + ' requires `uid` credential');
511
+ throw new AuthenticationError(this.id + ' requires `uid` credential (woox calls it `application_id`)');
511
512
  }
512
513
  else {
513
514
  return false;
@@ -87,6 +87,30 @@ export declare type CurvePointsRes<T> = {
87
87
  weierstrassEquation: (x: T) => T;
88
88
  isWithinCurveOrder: (num: bigint) => boolean;
89
89
  };
90
+ export declare const DER: {
91
+ Err: {
92
+ new (m?: string): {
93
+ name: string;
94
+ message: string;
95
+ stack?: string;
96
+ };
97
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
98
+ prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any;
99
+ stackTraceLimit: number;
100
+ };
101
+ _parseInt(data: Uint8Array): {
102
+ d: bigint;
103
+ l: Uint8Array;
104
+ };
105
+ toSig(hex: string | Uint8Array): {
106
+ r: bigint;
107
+ s: bigint;
108
+ };
109
+ hexFromSig(sig: {
110
+ r: bigint;
111
+ s: bigint;
112
+ }): string;
113
+ };
90
114
  export declare function weierstrassPoints<T>(opts: CurvePointsType<T>): {
91
115
  ProjectivePoint: ProjConstructor<T>;
92
116
  normPrivateKeyToScalar: (key: PrivKey) => bigint;
@@ -39,7 +39,7 @@ function validatePointOpts(curve) {
39
39
  }
40
40
  // ASN.1 DER encoding utilities
41
41
  const { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;
42
- const DER = {
42
+ export const DER = {
43
43
  // asn.1 DER encoding utils
44
44
  Err: class DERErr extends Error {
45
45
  constructor(m = '') {
@@ -0,0 +1,79 @@
1
+ import { Field } from '../noble-curves/abstract/modular.js';
2
+ import { poseidon } from '../noble-curves/abstract/poseidon.js';
3
+ import { ProjPointType, SignatureType } from '../noble-curves/abstract/weierstrass.js';
4
+ import * as u from '../noble-curves/abstract/utils.js';
5
+ import type { Hex } from '../noble-curves/abstract/utils';
6
+ declare type ProjectivePoint = ProjPointType<bigint>;
7
+ export declare const MAX_VALUE: bigint;
8
+ export declare const _starkCurve: import("../noble-curves/abstract/weierstrass.js").CurveFn;
9
+ export declare function getPublicKey(privKey: Hex, isCompressed?: boolean): Uint8Array;
10
+ export declare function getSharedSecret(privKeyA: Hex, pubKeyB: Hex): Uint8Array;
11
+ export declare function sign(msgHash: Hex, privKey: Hex, opts?: any): SignatureType;
12
+ export declare function verify(signature: SignatureType | Hex, msgHash: Hex, pubKey: Hex): boolean;
13
+ declare const CURVE: Readonly<{
14
+ readonly nBitLength: number;
15
+ readonly nByteLength: number;
16
+ readonly Fp: Field<bigint>;
17
+ readonly n: bigint;
18
+ readonly h: bigint;
19
+ readonly hEff?: bigint;
20
+ readonly Gx: bigint;
21
+ readonly Gy: bigint;
22
+ readonly allowInfinityPoint?: boolean;
23
+ readonly a: bigint;
24
+ readonly b: bigint;
25
+ readonly allowedPrivateKeyLengths?: readonly number[];
26
+ readonly wrapPrivateKey?: boolean;
27
+ readonly endo?: {
28
+ beta: bigint;
29
+ splitScalar: (k: bigint) => {
30
+ k1neg: boolean;
31
+ k1: bigint;
32
+ k2neg: boolean;
33
+ k2: bigint;
34
+ };
35
+ };
36
+ readonly isTorsionFree?: (c: import("../noble-curves/abstract/weierstrass.js").ProjConstructor<bigint>, point: ProjPointType<bigint>) => boolean;
37
+ readonly clearCofactor?: (c: import("../noble-curves/abstract/weierstrass.js").ProjConstructor<bigint>, point: ProjPointType<bigint>) => ProjPointType<bigint>;
38
+ readonly hash: u.CHash;
39
+ readonly hmac: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;
40
+ readonly randomBytes: (bytesLength?: number) => Uint8Array;
41
+ lowS: boolean;
42
+ readonly bits2int?: (bytes: Uint8Array) => bigint;
43
+ readonly bits2int_modN?: (bytes: Uint8Array) => bigint;
44
+ }>, ProjectivePoint: import("../noble-curves/abstract/weierstrass.js").ProjConstructor<bigint>, Signature: import("../noble-curves/abstract/weierstrass.js").SignatureConstructor, utils: {
45
+ normPrivateKeyToScalar: (key: u.PrivKey) => bigint;
46
+ isValidPrivateKey(privateKey: u.PrivKey): boolean;
47
+ randomPrivateKey: () => Uint8Array;
48
+ precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;
49
+ };
50
+ export { CURVE, ProjectivePoint, Signature, utils };
51
+ export declare function grindKey(seed: Hex): string;
52
+ export declare function getStarkKey(privateKey: Hex): string;
53
+ export declare function ethSigToPrivate(signature: string): string;
54
+ export declare function getAccountPath(layer: string, application: string, ethereumAddress: string, index: number): string;
55
+ declare type PedersenArg = Hex | bigint | number;
56
+ export declare function pedersen(x: PedersenArg, y: PedersenArg): string;
57
+ export declare const computeHashOnElements: (data: PedersenArg[], fn?: typeof pedersen) => PedersenArg;
58
+ export declare const keccak: (data: Uint8Array) => bigint;
59
+ export declare const Fp251: Readonly<Field<bigint> & Required<Pick<Field<bigint>, "isOdd">>>;
60
+ export declare function _poseidonMDS(Fp: Field<bigint>, name: string, m: number, attempt?: number): bigint[][];
61
+ export declare type PoseidonOpts = {
62
+ Fp: Field<bigint>;
63
+ rate: number;
64
+ capacity: number;
65
+ roundsFull: number;
66
+ roundsPartial: number;
67
+ };
68
+ export declare type PoseidonFn = ReturnType<typeof poseidon> & {
69
+ m: number;
70
+ rate: number;
71
+ capacity: number;
72
+ };
73
+ export declare function poseidonBasic(opts: PoseidonOpts, mds: bigint[][]): PoseidonFn;
74
+ export declare function poseidonCreate(opts: PoseidonOpts, mdsAttempt?: number): PoseidonFn;
75
+ export declare const poseidonSmall: PoseidonFn;
76
+ export declare function poseidonHash(x: bigint, y: bigint, fn?: PoseidonFn): bigint;
77
+ export declare function poseidonHashFunc(x: Uint8Array, y: Uint8Array, fn?: PoseidonFn): Uint8Array;
78
+ export declare function poseidonHashSingle(x: bigint, fn?: PoseidonFn): bigint;
79
+ export declare function poseidonHashMany(values: bigint[], fn?: PoseidonFn): bigint;