gateio-api 0.0.1 → 1.0.2

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 (320) hide show
  1. package/README.md +251 -106
  2. package/dist/cjs/RestClient.d.ts +2534 -0
  3. package/dist/cjs/RestClient.js +2700 -0
  4. package/dist/cjs/RestClient.js.map +1 -0
  5. package/dist/cjs/WebsocketClient.d.ts +107 -0
  6. package/dist/cjs/WebsocketClient.js +504 -0
  7. package/dist/cjs/WebsocketClient.js.map +1 -0
  8. package/dist/cjs/index.d.ts +43 -0
  9. package/dist/cjs/index.js +64 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/lib/BaseRestClient.d.ts +63 -0
  12. package/dist/cjs/lib/BaseRestClient.js +324 -0
  13. package/dist/cjs/lib/BaseRestClient.js.map +1 -0
  14. package/dist/cjs/lib/BaseWSClient.d.ts +172 -0
  15. package/dist/cjs/lib/BaseWSClient.js +619 -0
  16. package/dist/cjs/lib/BaseWSClient.js.map +1 -0
  17. package/dist/cjs/lib/logger.d.ts +6 -0
  18. package/dist/cjs/lib/logger.js +16 -0
  19. package/dist/cjs/lib/logger.js.map +1 -0
  20. package/dist/cjs/lib/misc-util.d.ts +1 -0
  21. package/dist/cjs/lib/misc-util.js +8 -0
  22. package/dist/cjs/lib/misc-util.js.map +1 -0
  23. package/dist/cjs/lib/requestUtils.d.ts +38 -0
  24. package/dist/cjs/lib/requestUtils.js +47 -0
  25. package/dist/cjs/lib/requestUtils.js.map +1 -0
  26. package/dist/cjs/lib/webCryptoAPI.d.ts +10 -0
  27. package/dist/cjs/lib/webCryptoAPI.js +57 -0
  28. package/dist/cjs/lib/webCryptoAPI.js.map +1 -0
  29. package/dist/cjs/lib/websocket/WsStore.d.ts +57 -0
  30. package/dist/cjs/lib/websocket/WsStore.js +249 -0
  31. package/dist/cjs/lib/websocket/WsStore.js.map +1 -0
  32. package/dist/cjs/lib/websocket/WsStore.types.d.ts +44 -0
  33. package/dist/cjs/lib/websocket/WsStore.types.js +13 -0
  34. package/dist/cjs/lib/websocket/WsStore.types.js.map +1 -0
  35. package/dist/cjs/lib/websocket/websocket-util.d.ts +78 -0
  36. package/dist/cjs/lib/websocket/websocket-util.js +153 -0
  37. package/dist/cjs/lib/websocket/websocket-util.js.map +1 -0
  38. package/dist/cjs/package.json +3 -0
  39. package/dist/cjs/types/request/account.d.ts +10 -0
  40. package/dist/cjs/types/request/account.js +7 -0
  41. package/dist/cjs/types/request/account.js.map +1 -0
  42. package/dist/cjs/types/request/collateralLoan.d.ts +39 -0
  43. package/dist/cjs/types/request/collateralLoan.js +7 -0
  44. package/dist/cjs/types/request/collateralLoan.js.map +1 -0
  45. package/dist/cjs/types/request/delivery.d.ts +89 -0
  46. package/dist/cjs/types/request/delivery.js +7 -0
  47. package/dist/cjs/types/request/delivery.js.map +1 -0
  48. package/dist/cjs/types/request/earn.d.ts +16 -0
  49. package/dist/cjs/types/request/earn.js +7 -0
  50. package/dist/cjs/types/request/earn.js.map +1 -0
  51. package/dist/cjs/types/request/earnuni.d.ts +30 -0
  52. package/dist/cjs/types/request/earnuni.js +7 -0
  53. package/dist/cjs/types/request/earnuni.js.map +1 -0
  54. package/dist/cjs/types/request/flashswap.d.ts +28 -0
  55. package/dist/cjs/types/request/flashswap.js +7 -0
  56. package/dist/cjs/types/request/flashswap.js.map +1 -0
  57. package/dist/cjs/types/request/futures.d.ts +168 -0
  58. package/dist/cjs/types/request/futures.js +7 -0
  59. package/dist/cjs/types/request/futures.js.map +1 -0
  60. package/dist/cjs/types/request/margin.d.ts +47 -0
  61. package/dist/cjs/types/request/margin.js +7 -0
  62. package/dist/cjs/types/request/margin.js.map +1 -0
  63. package/dist/cjs/types/request/marginuni.d.ts +29 -0
  64. package/dist/cjs/types/request/marginuni.js +7 -0
  65. package/dist/cjs/types/request/marginuni.js.map +1 -0
  66. package/dist/cjs/types/request/multicollateralLoan.d.ts +55 -0
  67. package/dist/cjs/types/request/multicollateralLoan.js +7 -0
  68. package/dist/cjs/types/request/multicollateralLoan.js.map +1 -0
  69. package/dist/cjs/types/request/options.d.ts +81 -0
  70. package/dist/cjs/types/request/options.js +3 -0
  71. package/dist/cjs/types/request/options.js.map +1 -0
  72. package/dist/cjs/types/request/rebate.d.ts +26 -0
  73. package/dist/cjs/types/request/rebate.js +3 -0
  74. package/dist/cjs/types/request/rebate.js.map +1 -0
  75. package/dist/cjs/types/request/spot.d.ts +115 -0
  76. package/dist/cjs/types/request/spot.js +7 -0
  77. package/dist/cjs/types/request/spot.js.map +1 -0
  78. package/dist/cjs/types/request/subaccount.d.ts +19 -0
  79. package/dist/cjs/types/request/subaccount.js +3 -0
  80. package/dist/cjs/types/request/subaccount.js.map +1 -0
  81. package/dist/cjs/types/request/unified.d.ts +64 -0
  82. package/dist/cjs/types/request/unified.js +3 -0
  83. package/dist/cjs/types/request/unified.js.map +1 -0
  84. package/dist/cjs/types/request/wallet.d.ts +50 -0
  85. package/dist/cjs/types/request/wallet.js +3 -0
  86. package/dist/cjs/types/request/wallet.js.map +1 -0
  87. package/dist/cjs/types/request/withdrawal.d.ts +12 -0
  88. package/dist/cjs/types/request/withdrawal.js +7 -0
  89. package/dist/cjs/types/request/withdrawal.js.map +1 -0
  90. package/dist/cjs/types/response/account.d.ts +24 -0
  91. package/dist/cjs/types/response/account.js +7 -0
  92. package/dist/cjs/types/response/account.js.map +1 -0
  93. package/dist/cjs/types/response/collateralloan.d.ts +58 -0
  94. package/dist/cjs/types/response/collateralloan.js +7 -0
  95. package/dist/cjs/types/response/collateralloan.js.map +1 -0
  96. package/dist/cjs/types/response/delivery.d.ts +144 -0
  97. package/dist/cjs/types/response/delivery.js +7 -0
  98. package/dist/cjs/types/response/delivery.js.map +1 -0
  99. package/dist/cjs/types/response/earn.d.ts +60 -0
  100. package/dist/cjs/types/response/earn.js +7 -0
  101. package/dist/cjs/types/response/earn.js.map +1 -0
  102. package/dist/cjs/types/response/earnuni.d.ts +40 -0
  103. package/dist/cjs/types/response/earnuni.js +7 -0
  104. package/dist/cjs/types/response/earnuni.js.map +1 -0
  105. package/dist/cjs/types/response/flashswap.d.ts +32 -0
  106. package/dist/cjs/types/response/flashswap.js +7 -0
  107. package/dist/cjs/types/response/flashswap.js.map +1 -0
  108. package/dist/cjs/types/response/futures.d.ts +398 -0
  109. package/dist/cjs/types/response/futures.js +7 -0
  110. package/dist/cjs/types/response/futures.js.map +1 -0
  111. package/dist/cjs/types/response/margin.d.ts +96 -0
  112. package/dist/cjs/types/response/margin.js +7 -0
  113. package/dist/cjs/types/response/margin.js.map +1 -0
  114. package/dist/cjs/types/response/marginuni.d.ts +39 -0
  115. package/dist/cjs/types/response/marginuni.js +7 -0
  116. package/dist/cjs/types/response/marginuni.js.map +1 -0
  117. package/dist/cjs/types/response/multicollateralLoan.d.ts +151 -0
  118. package/dist/cjs/types/response/multicollateralLoan.js +7 -0
  119. package/dist/cjs/types/response/multicollateralLoan.js.map +1 -0
  120. package/dist/cjs/types/response/options.d.ts +192 -0
  121. package/dist/cjs/types/response/options.js +7 -0
  122. package/dist/cjs/types/response/options.js.map +1 -0
  123. package/dist/cjs/types/response/rebate.d.ts +40 -0
  124. package/dist/cjs/types/response/rebate.js +3 -0
  125. package/dist/cjs/types/response/rebate.js.map +1 -0
  126. package/dist/cjs/types/response/shared.d.ts +5 -0
  127. package/dist/cjs/types/response/shared.js +3 -0
  128. package/dist/cjs/types/response/shared.js.map +1 -0
  129. package/dist/cjs/types/response/spot.d.ts +224 -0
  130. package/dist/cjs/types/response/spot.js +7 -0
  131. package/dist/cjs/types/response/spot.js.map +1 -0
  132. package/dist/cjs/types/response/subaccount.d.ts +40 -0
  133. package/dist/cjs/types/response/subaccount.js +3 -0
  134. package/dist/cjs/types/response/subaccount.js.map +1 -0
  135. package/dist/cjs/types/response/unified.d.ts +113 -0
  136. package/dist/cjs/types/response/unified.js +3 -0
  137. package/dist/cjs/types/response/unified.js.map +1 -0
  138. package/dist/cjs/types/response/wallet.d.ts +181 -0
  139. package/dist/cjs/types/response/wallet.js +3 -0
  140. package/dist/cjs/types/response/wallet.js.map +1 -0
  141. package/dist/cjs/types/response/withdrawal.d.ts +12 -0
  142. package/dist/cjs/types/response/withdrawal.js +3 -0
  143. package/dist/cjs/types/response/withdrawal.js.map +1 -0
  144. package/dist/cjs/types/shared.d.ts +16 -0
  145. package/dist/cjs/types/shared.js +3 -0
  146. package/dist/cjs/types/shared.js.map +1 -0
  147. package/dist/cjs/types/websockets/client.d.ts +44 -0
  148. package/dist/cjs/types/websockets/client.js +6 -0
  149. package/dist/cjs/types/websockets/client.js.map +1 -0
  150. package/dist/cjs/types/websockets/events.d.ts +5 -0
  151. package/dist/cjs/types/websockets/events.js +3 -0
  152. package/dist/cjs/types/websockets/events.js.map +1 -0
  153. package/dist/cjs/types/websockets/requests.d.ts +36 -0
  154. package/dist/cjs/types/websockets/requests.js +3 -0
  155. package/dist/cjs/types/websockets/requests.js.map +1 -0
  156. package/dist/cjs/types/websockets/wsAPI.d.ts +101 -0
  157. package/dist/cjs/types/websockets/wsAPI.js +8 -0
  158. package/dist/cjs/types/websockets/wsAPI.js.map +1 -0
  159. package/dist/mjs/RestClient.d.ts +2534 -0
  160. package/dist/mjs/RestClient.js +2696 -0
  161. package/dist/mjs/RestClient.js.map +1 -0
  162. package/dist/mjs/WebsocketClient.d.ts +107 -0
  163. package/dist/mjs/WebsocketClient.js +500 -0
  164. package/dist/mjs/WebsocketClient.js.map +1 -0
  165. package/dist/mjs/index.d.ts +43 -0
  166. package/dist/mjs/index.js +48 -0
  167. package/dist/mjs/index.js.map +1 -0
  168. package/dist/mjs/lib/BaseRestClient.d.ts +63 -0
  169. package/dist/mjs/lib/BaseRestClient.js +317 -0
  170. package/dist/mjs/lib/BaseRestClient.js.map +1 -0
  171. package/dist/mjs/lib/BaseWSClient.d.ts +172 -0
  172. package/dist/mjs/lib/BaseWSClient.js +612 -0
  173. package/dist/mjs/lib/BaseWSClient.js.map +1 -0
  174. package/dist/mjs/lib/logger.d.ts +6 -0
  175. package/dist/mjs/lib/logger.js +13 -0
  176. package/dist/mjs/lib/logger.js.map +1 -0
  177. package/dist/mjs/lib/misc-util.d.ts +1 -0
  178. package/dist/mjs/lib/misc-util.js +4 -0
  179. package/dist/mjs/lib/misc-util.js.map +1 -0
  180. package/dist/mjs/lib/requestUtils.d.ts +38 -0
  181. package/dist/mjs/lib/requestUtils.js +41 -0
  182. package/dist/mjs/lib/requestUtils.js.map +1 -0
  183. package/dist/mjs/lib/webCryptoAPI.d.ts +10 -0
  184. package/dist/mjs/lib/webCryptoAPI.js +52 -0
  185. package/dist/mjs/lib/webCryptoAPI.js.map +1 -0
  186. package/dist/mjs/lib/websocket/WsStore.d.ts +57 -0
  187. package/dist/mjs/lib/websocket/WsStore.js +244 -0
  188. package/dist/mjs/lib/websocket/WsStore.js.map +1 -0
  189. package/dist/mjs/lib/websocket/WsStore.types.d.ts +44 -0
  190. package/dist/mjs/lib/websocket/WsStore.types.js +10 -0
  191. package/dist/mjs/lib/websocket/WsStore.types.js.map +1 -0
  192. package/dist/mjs/lib/websocket/websocket-util.d.ts +78 -0
  193. package/dist/mjs/lib/websocket/websocket-util.js +145 -0
  194. package/dist/mjs/lib/websocket/websocket-util.js.map +1 -0
  195. package/dist/mjs/package.json +3 -0
  196. package/dist/mjs/types/request/account.d.ts +10 -0
  197. package/dist/mjs/types/request/account.js +6 -0
  198. package/dist/mjs/types/request/account.js.map +1 -0
  199. package/dist/mjs/types/request/collateralLoan.d.ts +39 -0
  200. package/dist/mjs/types/request/collateralLoan.js +6 -0
  201. package/dist/mjs/types/request/collateralLoan.js.map +1 -0
  202. package/dist/mjs/types/request/delivery.d.ts +89 -0
  203. package/dist/mjs/types/request/delivery.js +6 -0
  204. package/dist/mjs/types/request/delivery.js.map +1 -0
  205. package/dist/mjs/types/request/earn.d.ts +16 -0
  206. package/dist/mjs/types/request/earn.js +6 -0
  207. package/dist/mjs/types/request/earn.js.map +1 -0
  208. package/dist/mjs/types/request/earnuni.d.ts +30 -0
  209. package/dist/mjs/types/request/earnuni.js +6 -0
  210. package/dist/mjs/types/request/earnuni.js.map +1 -0
  211. package/dist/mjs/types/request/flashswap.d.ts +28 -0
  212. package/dist/mjs/types/request/flashswap.js +6 -0
  213. package/dist/mjs/types/request/flashswap.js.map +1 -0
  214. package/dist/mjs/types/request/futures.d.ts +168 -0
  215. package/dist/mjs/types/request/futures.js +6 -0
  216. package/dist/mjs/types/request/futures.js.map +1 -0
  217. package/dist/mjs/types/request/margin.d.ts +47 -0
  218. package/dist/mjs/types/request/margin.js +6 -0
  219. package/dist/mjs/types/request/margin.js.map +1 -0
  220. package/dist/mjs/types/request/marginuni.d.ts +29 -0
  221. package/dist/mjs/types/request/marginuni.js +6 -0
  222. package/dist/mjs/types/request/marginuni.js.map +1 -0
  223. package/dist/mjs/types/request/multicollateralLoan.d.ts +55 -0
  224. package/dist/mjs/types/request/multicollateralLoan.js +6 -0
  225. package/dist/mjs/types/request/multicollateralLoan.js.map +1 -0
  226. package/dist/mjs/types/request/options.d.ts +81 -0
  227. package/dist/mjs/types/request/options.js +2 -0
  228. package/dist/mjs/types/request/options.js.map +1 -0
  229. package/dist/mjs/types/request/rebate.d.ts +26 -0
  230. package/dist/mjs/types/request/rebate.js +2 -0
  231. package/dist/mjs/types/request/rebate.js.map +1 -0
  232. package/dist/mjs/types/request/spot.d.ts +115 -0
  233. package/dist/mjs/types/request/spot.js +6 -0
  234. package/dist/mjs/types/request/spot.js.map +1 -0
  235. package/dist/mjs/types/request/subaccount.d.ts +19 -0
  236. package/dist/mjs/types/request/subaccount.js +2 -0
  237. package/dist/mjs/types/request/subaccount.js.map +1 -0
  238. package/dist/mjs/types/request/unified.d.ts +64 -0
  239. package/dist/mjs/types/request/unified.js +2 -0
  240. package/dist/mjs/types/request/unified.js.map +1 -0
  241. package/dist/mjs/types/request/wallet.d.ts +50 -0
  242. package/dist/mjs/types/request/wallet.js +2 -0
  243. package/dist/mjs/types/request/wallet.js.map +1 -0
  244. package/dist/mjs/types/request/withdrawal.d.ts +12 -0
  245. package/dist/mjs/types/request/withdrawal.js +6 -0
  246. package/dist/mjs/types/request/withdrawal.js.map +1 -0
  247. package/dist/mjs/types/response/account.d.ts +24 -0
  248. package/dist/mjs/types/response/account.js +6 -0
  249. package/dist/mjs/types/response/account.js.map +1 -0
  250. package/dist/mjs/types/response/collateralloan.d.ts +58 -0
  251. package/dist/mjs/types/response/collateralloan.js +6 -0
  252. package/dist/mjs/types/response/collateralloan.js.map +1 -0
  253. package/dist/mjs/types/response/delivery.d.ts +144 -0
  254. package/dist/mjs/types/response/delivery.js +6 -0
  255. package/dist/mjs/types/response/delivery.js.map +1 -0
  256. package/dist/mjs/types/response/earn.d.ts +60 -0
  257. package/dist/mjs/types/response/earn.js +6 -0
  258. package/dist/mjs/types/response/earn.js.map +1 -0
  259. package/dist/mjs/types/response/earnuni.d.ts +40 -0
  260. package/dist/mjs/types/response/earnuni.js +6 -0
  261. package/dist/mjs/types/response/earnuni.js.map +1 -0
  262. package/dist/mjs/types/response/flashswap.d.ts +32 -0
  263. package/dist/mjs/types/response/flashswap.js +6 -0
  264. package/dist/mjs/types/response/flashswap.js.map +1 -0
  265. package/dist/mjs/types/response/futures.d.ts +398 -0
  266. package/dist/mjs/types/response/futures.js +6 -0
  267. package/dist/mjs/types/response/futures.js.map +1 -0
  268. package/dist/mjs/types/response/margin.d.ts +96 -0
  269. package/dist/mjs/types/response/margin.js +6 -0
  270. package/dist/mjs/types/response/margin.js.map +1 -0
  271. package/dist/mjs/types/response/marginuni.d.ts +39 -0
  272. package/dist/mjs/types/response/marginuni.js +6 -0
  273. package/dist/mjs/types/response/marginuni.js.map +1 -0
  274. package/dist/mjs/types/response/multicollateralLoan.d.ts +151 -0
  275. package/dist/mjs/types/response/multicollateralLoan.js +6 -0
  276. package/dist/mjs/types/response/multicollateralLoan.js.map +1 -0
  277. package/dist/mjs/types/response/options.d.ts +192 -0
  278. package/dist/mjs/types/response/options.js +6 -0
  279. package/dist/mjs/types/response/options.js.map +1 -0
  280. package/dist/mjs/types/response/rebate.d.ts +40 -0
  281. package/dist/mjs/types/response/rebate.js +2 -0
  282. package/dist/mjs/types/response/rebate.js.map +1 -0
  283. package/dist/mjs/types/response/shared.d.ts +5 -0
  284. package/dist/mjs/types/response/shared.js +2 -0
  285. package/dist/mjs/types/response/shared.js.map +1 -0
  286. package/dist/mjs/types/response/spot.d.ts +224 -0
  287. package/dist/mjs/types/response/spot.js +6 -0
  288. package/dist/mjs/types/response/spot.js.map +1 -0
  289. package/dist/mjs/types/response/subaccount.d.ts +40 -0
  290. package/dist/mjs/types/response/subaccount.js +2 -0
  291. package/dist/mjs/types/response/subaccount.js.map +1 -0
  292. package/dist/mjs/types/response/unified.d.ts +113 -0
  293. package/dist/mjs/types/response/unified.js +2 -0
  294. package/dist/mjs/types/response/unified.js.map +1 -0
  295. package/dist/mjs/types/response/wallet.d.ts +181 -0
  296. package/dist/mjs/types/response/wallet.js +2 -0
  297. package/dist/mjs/types/response/wallet.js.map +1 -0
  298. package/dist/mjs/types/response/withdrawal.d.ts +12 -0
  299. package/dist/mjs/types/response/withdrawal.js +2 -0
  300. package/dist/mjs/types/response/withdrawal.js.map +1 -0
  301. package/dist/mjs/types/shared.d.ts +16 -0
  302. package/dist/mjs/types/shared.js +2 -0
  303. package/dist/mjs/types/shared.js.map +1 -0
  304. package/dist/mjs/types/websockets/client.d.ts +44 -0
  305. package/dist/mjs/types/websockets/client.js +5 -0
  306. package/dist/mjs/types/websockets/client.js.map +1 -0
  307. package/dist/mjs/types/websockets/events.d.ts +5 -0
  308. package/dist/mjs/types/websockets/events.js +2 -0
  309. package/dist/mjs/types/websockets/events.js.map +1 -0
  310. package/dist/mjs/types/websockets/requests.d.ts +36 -0
  311. package/dist/mjs/types/websockets/requests.js +2 -0
  312. package/dist/mjs/types/websockets/requests.js.map +1 -0
  313. package/dist/mjs/types/websockets/wsAPI.d.ts +101 -0
  314. package/dist/mjs/types/websockets/wsAPI.js +7 -0
  315. package/dist/mjs/types/websockets/wsAPI.js.map +1 -0
  316. package/package.json +49 -38
  317. package/index.js +0 -1
  318. package/lib/index.d.ts +0 -1
  319. package/lib/index.js +0 -16
  320. package/lib/index.js.map +0 -1
@@ -0,0 +1,63 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ import { RestClientOptions } from './requestUtils.js';
3
+ /**
4
+ * Used to switch how authentication/requests work under the hood
5
+ */
6
+ export declare const REST_CLIENT_TYPE_ENUM: {
7
+ readonly main: "main";
8
+ };
9
+ export type RestClientType = (typeof REST_CLIENT_TYPE_ENUM)[keyof typeof REST_CLIENT_TYPE_ENUM];
10
+ /**
11
+ * Some requests require some params to be in the query string and some in the body.
12
+ * This type anticipates both are possible in any combination.
13
+ *
14
+ * The request builder will automatically handle where parameters should go.
15
+ */
16
+ type ParamsInQueryAndOrBody = {
17
+ query?: object;
18
+ body?: object;
19
+ };
20
+ export declare abstract class BaseRestClient {
21
+ private options;
22
+ private baseUrl;
23
+ private baseUrlPath;
24
+ private globalRequestOptions;
25
+ private apiKey;
26
+ private apiSecret;
27
+ /** Defines the client type (affecting how requests & signatures behave) */
28
+ abstract getClientType(): RestClientType;
29
+ /**
30
+ * Create an instance of the REST client. Pass API credentials in the object in the first parameter.
31
+ * @param {RestClientOptions} [restClientOptions={}] options to configure REST API connectivity
32
+ * @param {AxiosRequestConfig} [networkOptions={}] HTTP networking options for axios
33
+ */
34
+ constructor(restClientOptions?: RestClientOptions, networkOptions?: AxiosRequestConfig);
35
+ /**
36
+ * Timestamp used to sign the request. Override this method to implement your own timestamp/sync mechanism
37
+ */
38
+ getSignTimestampMs(): number;
39
+ protected get(endpoint: string, params?: object): Promise<any>;
40
+ protected post(endpoint: string, params?: ParamsInQueryAndOrBody): Promise<any>;
41
+ protected getPrivate(endpoint: string, params?: object): Promise<any>;
42
+ protected postPrivate(endpoint: string, params?: ParamsInQueryAndOrBody): Promise<any>;
43
+ protected deletePrivate(endpoint: string, params?: ParamsInQueryAndOrBody): Promise<any>;
44
+ protected putPrivate(endpoint: string, params?: ParamsInQueryAndOrBody): Promise<any>;
45
+ protected patchPrivate(endpoint: string, params?: ParamsInQueryAndOrBody): Promise<any>;
46
+ /**
47
+ * @private Make a HTTP request to a specific endpoint. Private endpoint API calls are automatically signed.
48
+ */
49
+ private _call;
50
+ /**
51
+ * @private generic handler to parse request exceptions
52
+ */
53
+ parseException(e: any, request: AxiosRequestConfig<any>): unknown;
54
+ /**
55
+ * @private sign request and set recv window
56
+ */
57
+ private signRequest;
58
+ private signMessage;
59
+ private prepareSignParams;
60
+ /** Returns an axios request object. Handles signing process automatically if this is a private API call */
61
+ private buildRequest;
62
+ }
63
+ export {};
@@ -0,0 +1,317 @@
1
+ import axios from 'axios';
2
+ import { neverGuard } from './misc-util.js';
3
+ import { CHANNEL_ID, getRestBaseUrl, serializeParams, } from './requestUtils.js';
4
+ import { hashMessage, signMessage, } from './webCryptoAPI.js';
5
+ const MISSING_API_KEYS_ERROR = 'API Key, Secret & Application ID are ALL required to use the authenticated REST client';
6
+ /**
7
+ * Used to switch how authentication/requests work under the hood
8
+ */
9
+ export const REST_CLIENT_TYPE_ENUM = {
10
+ main: 'main',
11
+ };
12
+ /**
13
+ * Enables:
14
+ * - Detailed request/response logging
15
+ * - Full request dump in any exceptions thrown from API responses
16
+ */
17
+ const ENABLE_HTTP_TRACE = typeof process === 'object' &&
18
+ typeof process.env === 'object' &&
19
+ process.env.GATETRACE;
20
+ if (ENABLE_HTTP_TRACE) {
21
+ axios.interceptors.request.use((request) => {
22
+ console.log(new Date(), 'Starting Request', JSON.stringify({
23
+ url: request.url,
24
+ method: request.method,
25
+ params: request.params,
26
+ data: request.data,
27
+ }, null, 2));
28
+ return request;
29
+ });
30
+ axios.interceptors.response.use((response) => {
31
+ console.log(new Date(), 'Response:', {
32
+ // request: {
33
+ // url: response.config.url,
34
+ // method: response.config.method,
35
+ // data: response.config.data,
36
+ // headers: response.config.headers,
37
+ // },
38
+ response: {
39
+ status: response.status,
40
+ statusText: response.statusText,
41
+ headers: response.headers,
42
+ data: response.data,
43
+ },
44
+ });
45
+ return response;
46
+ });
47
+ }
48
+ /**
49
+ * Impure, mutates params to remove any values that have a key but are undefined.
50
+ */
51
+ function deleteUndefinedValues(params) {
52
+ if (!params) {
53
+ return;
54
+ }
55
+ for (const key in params) {
56
+ const value = params[key];
57
+ if (typeof value === 'undefined') {
58
+ delete params[key];
59
+ }
60
+ }
61
+ }
62
+ export class BaseRestClient {
63
+ options;
64
+ baseUrl;
65
+ baseUrlPath;
66
+ globalRequestOptions;
67
+ apiKey;
68
+ apiSecret;
69
+ /**
70
+ * Create an instance of the REST client. Pass API credentials in the object in the first parameter.
71
+ * @param {RestClientOptions} [restClientOptions={}] options to configure REST API connectivity
72
+ * @param {AxiosRequestConfig} [networkOptions={}] HTTP networking options for axios
73
+ */
74
+ constructor(restClientOptions = {}, networkOptions = {}) {
75
+ this.options = {
76
+ recvWindow: 5000,
77
+ /** Throw errors if any request params are empty */
78
+ strictParamValidation: false,
79
+ ...restClientOptions,
80
+ };
81
+ this.globalRequestOptions = {
82
+ /** in ms == 5 minutes by default */
83
+ timeout: 1000 * 60 * 5,
84
+ /** inject custom rquest options based on axios specs - see axios docs for more guidance on AxiosRequestConfig: https://github.com/axios/axios#request-config */
85
+ ...networkOptions,
86
+ headers: {
87
+ 'Content-Type': 'application/json',
88
+ 'X-Gate-Channel-Id': CHANNEL_ID,
89
+ locale: 'en-US',
90
+ },
91
+ };
92
+ this.baseUrl = getRestBaseUrl(restClientOptions);
93
+ this.baseUrlPath = new URL(this.baseUrl).pathname;
94
+ this.apiKey = this.options.apiKey;
95
+ this.apiSecret = this.options.apiSecret;
96
+ // Throw if one of the 3 values is missing, but at least one of them is set
97
+ const credentials = [this.apiKey, this.apiSecret];
98
+ if (credentials.includes(undefined) &&
99
+ credentials.some((v) => typeof v === 'string')) {
100
+ throw new Error(MISSING_API_KEYS_ERROR);
101
+ }
102
+ }
103
+ /**
104
+ * Timestamp used to sign the request. Override this method to implement your own timestamp/sync mechanism
105
+ */
106
+ getSignTimestampMs() {
107
+ return Date.now();
108
+ }
109
+ get(endpoint, params) {
110
+ const isPublicAPI = true;
111
+ // GET only supports params in the query string
112
+ return this._call('GET', endpoint, { query: params }, isPublicAPI);
113
+ }
114
+ post(endpoint, params) {
115
+ const isPublicAPI = true;
116
+ return this._call('POST', endpoint, params, isPublicAPI);
117
+ }
118
+ getPrivate(endpoint, params) {
119
+ const isPublicAPI = false;
120
+ // GET only supports params in the query string
121
+ return this._call('GET', endpoint, { query: params }, isPublicAPI);
122
+ }
123
+ postPrivate(endpoint, params) {
124
+ const isPublicAPI = false;
125
+ return this._call('POST', endpoint, params, isPublicAPI);
126
+ }
127
+ deletePrivate(endpoint, params) {
128
+ const isPublicAPI = false;
129
+ return this._call('DELETE', endpoint, params, isPublicAPI);
130
+ }
131
+ putPrivate(endpoint, params) {
132
+ const isPublicAPI = false;
133
+ return this._call('PUT', endpoint, params, isPublicAPI);
134
+ }
135
+ // protected patchPrivate(endpoint: string, params?: any) {
136
+ patchPrivate(endpoint, params) {
137
+ const isPublicAPI = false;
138
+ return this._call('PATCH', endpoint, params, isPublicAPI);
139
+ }
140
+ /**
141
+ * @private Make a HTTP request to a specific endpoint. Private endpoint API calls are automatically signed.
142
+ */
143
+ async _call(method, endpoint, params, isPublicApi) {
144
+ // Sanity check to make sure it's only ever prefixed by one forward slash
145
+ const requestUrl = [this.baseUrl, endpoint].join(endpoint.startsWith('/') ? '' : '/');
146
+ // Build a request and handle signature process
147
+ const options = await this.buildRequest(method, endpoint, requestUrl, params, isPublicApi);
148
+ if (ENABLE_HTTP_TRACE) {
149
+ console.log('full request: ', options);
150
+ }
151
+ // Dispatch request
152
+ return axios(options)
153
+ .then((response) => {
154
+ if (response.status == 200 || response.status == 201) {
155
+ // Throw API rejections by parsing the response code from the body
156
+ if (typeof response.data?.code === 'number' &&
157
+ response.data?.code !== 1000) {
158
+ throw { response };
159
+ }
160
+ return response.data;
161
+ }
162
+ throw { response };
163
+ })
164
+ .catch((e) => this.parseException(e, options));
165
+ }
166
+ /**
167
+ * @private generic handler to parse request exceptions
168
+ */
169
+ parseException(e, request) {
170
+ if (this.options.parseExceptions === false) {
171
+ throw e;
172
+ }
173
+ // Something happened in setting up the request that triggered an error
174
+ if (!e.response) {
175
+ if (!e.request) {
176
+ throw e.message;
177
+ }
178
+ // request made but no response received
179
+ throw e;
180
+ }
181
+ // The request was made and the server responded with a status code
182
+ // that falls out of the range of 2xx
183
+ const response = e.response;
184
+ // console.error('err: ', response?.data);
185
+ const debugData = ENABLE_HTTP_TRACE ? { fullRequest: request } : {};
186
+ throw {
187
+ code: response.status,
188
+ message: response.statusText,
189
+ body: response.data,
190
+ headers: response.headers,
191
+ requestOptions: {
192
+ ...this.options,
193
+ // Prevent credentials from leaking into error messages
194
+ apiKey: 'omittedFromError',
195
+ apiMemo: 'omittedFromError',
196
+ apiSecret: 'omittedFromError',
197
+ reqUrl: request.url,
198
+ reqBody: request.data,
199
+ },
200
+ ...debugData,
201
+ };
202
+ }
203
+ /**
204
+ * @private sign request and set recv window
205
+ */
206
+ async signRequest(data, endpoint, method, signMethod) {
207
+ const timestamp = +(this.getSignTimestampMs() / 1000).toFixed(0); // in seconds
208
+ const res = {
209
+ originalParams: {
210
+ // recvWindow: this.options.recvWindow,
211
+ ...data,
212
+ },
213
+ sign: '',
214
+ timestamp,
215
+ recvWindow: 0,
216
+ serializedParams: '',
217
+ queryParamsWithSign: '',
218
+ };
219
+ if (!this.apiKey || !this.apiSecret) {
220
+ return res;
221
+ }
222
+ // It's possible to override the recv window on a per rquest level
223
+ const strictParamValidation = this.options.strictParamValidation;
224
+ const encodeQueryStringValues = true;
225
+ if (signMethod === 'gateV4') {
226
+ const signEncoding = 'hex';
227
+ const signAlgoritm = 'SHA-512';
228
+ const queryStringToSign = data?.query
229
+ ? serializeParams(res.originalParams?.query, strictParamValidation, encodeQueryStringValues, '')
230
+ : '';
231
+ const requestBodyToHash = res.originalParams?.body
232
+ ? JSON.stringify(res.originalParams?.body)
233
+ : '';
234
+ const hashedRequestBody = await hashMessage(requestBodyToHash, signEncoding, signAlgoritm);
235
+ const toSign = [
236
+ method,
237
+ this.baseUrlPath + endpoint,
238
+ queryStringToSign,
239
+ hashedRequestBody,
240
+ timestamp,
241
+ ].join('\n');
242
+ // console.log('sign params: ', {
243
+ // requestBodyToHash,
244
+ // paramsStr: toSign,
245
+ // url: this.baseUrl,
246
+ // urlPath: this.baseUrlPath,
247
+ // });
248
+ res.sign = await this.signMessage(toSign, this.apiSecret, signEncoding, signAlgoritm);
249
+ res.queryParamsWithSign = queryStringToSign;
250
+ return res;
251
+ }
252
+ console.error(new Date(), neverGuard(signMethod, `Unhandled sign method: "${signMessage}"`));
253
+ return res;
254
+ }
255
+ async signMessage(paramsStr, secret, method, algorithm) {
256
+ if (typeof this.options.customSignMessageFn === 'function') {
257
+ return this.options.customSignMessageFn(paramsStr, secret);
258
+ }
259
+ return await signMessage(paramsStr, secret, method, algorithm);
260
+ }
261
+ async prepareSignParams(method, endpoint, signMethod, params, isPublicApi) {
262
+ if (isPublicApi) {
263
+ return {
264
+ originalParams: params,
265
+ paramsWithSign: params,
266
+ };
267
+ }
268
+ if (!this.apiKey || !this.apiSecret) {
269
+ throw new Error(MISSING_API_KEYS_ERROR);
270
+ }
271
+ return this.signRequest(params, endpoint, method, signMethod);
272
+ }
273
+ /** Returns an axios request object. Handles signing process automatically if this is a private API call */
274
+ async buildRequest(method, endpoint, url, params, isPublicApi) {
275
+ const options = {
276
+ ...this.globalRequestOptions,
277
+ url: url,
278
+ method: method,
279
+ };
280
+ deleteUndefinedValues(params);
281
+ deleteUndefinedValues(params?.body);
282
+ deleteUndefinedValues(params?.query);
283
+ if (isPublicApi || !this.apiKey || !this.apiSecret) {
284
+ return {
285
+ ...options,
286
+ params: params?.query || params?.body || params,
287
+ };
288
+ }
289
+ const signResult = await this.prepareSignParams(method, endpoint, 'gateV4', params, isPublicApi);
290
+ const authHeaders = {
291
+ KEY: this.apiKey,
292
+ SIGN: signResult.sign,
293
+ Timestamp: signResult.timestamp,
294
+ };
295
+ const urlWithQueryParams = options.url + '?' + signResult.queryParamsWithSign;
296
+ if (method === 'GET' || !params?.body) {
297
+ return {
298
+ ...options,
299
+ headers: {
300
+ ...authHeaders,
301
+ ...options.headers,
302
+ },
303
+ url: urlWithQueryParams,
304
+ };
305
+ }
306
+ return {
307
+ ...options,
308
+ headers: {
309
+ ...authHeaders,
310
+ ...options.headers,
311
+ },
312
+ url: params?.query ? urlWithQueryParams : options.url,
313
+ data: signResult.originalParams.body,
314
+ };
315
+ }
316
+ }
317
+ //# sourceMappingURL=BaseRestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../../src/lib/BaseRestClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ /// <reference types="node" />
2
+ import EventEmitter from 'events';
3
+ import WebSocket from 'isomorphic-ws';
4
+ import { WebsocketClientOptions, WSClientConfigurableOptions } from '../types/websockets/client.js';
5
+ import { WsOperation } from '../types/websockets/requests.js';
6
+ import { DefaultLogger } from './logger.js';
7
+ import { MessageEventLike } from './requestUtils.js';
8
+ import { WsTopicRequest, WsTopicRequestOrStringTopic } from './websocket/websocket-util.js';
9
+ import { WsStore } from './websocket/WsStore.js';
10
+ import { DeferredPromise } from './websocket/WsStore.types.js';
11
+ interface WSClientEventMap<WsKey extends string> {
12
+ /** Connection opened. If this connection was previously opened and reconnected, expect the reconnected event instead */
13
+ open: (evt: {
14
+ wsKey: WsKey;
15
+ event: any;
16
+ }) => void;
17
+ /** Reconnecting a dropped connection */
18
+ reconnect: (evt: {
19
+ wsKey: WsKey;
20
+ event: any;
21
+ }) => void;
22
+ /** Successfully reconnected a connection that dropped */
23
+ reconnected: (evt: {
24
+ wsKey: WsKey;
25
+ event: any;
26
+ }) => void;
27
+ /** Connection closed */
28
+ close: (evt: {
29
+ wsKey: WsKey;
30
+ event: any;
31
+ }) => void;
32
+ /** Received reply to websocket command (e.g. after subscribing to topics) */
33
+ response: (response: any & {
34
+ wsKey: WsKey;
35
+ }) => void;
36
+ /** Received data for topic */
37
+ update: (response: any & {
38
+ wsKey: WsKey;
39
+ }) => void;
40
+ /** Exception from ws client OR custom listeners (e.g. if you throw inside your event handler) */
41
+ exception: (response: any & {
42
+ wsKey: WsKey;
43
+ }) => void;
44
+ error: (response: any & {
45
+ wsKey: WsKey;
46
+ }) => void;
47
+ /** Confirmation that a connection successfully authenticated */
48
+ authenticated: (event: {
49
+ wsKey: WsKey;
50
+ event: any;
51
+ }) => void;
52
+ }
53
+ export interface EmittableEvent<TEvent = any> {
54
+ eventType: 'response' | 'update' | 'exception' | 'authenticated';
55
+ event: TEvent;
56
+ }
57
+ export interface BaseWebsocketClient<TWSKey extends string> {
58
+ on<U extends keyof WSClientEventMap<TWSKey>>(event: U, listener: WSClientEventMap<TWSKey>[U]): this;
59
+ emit<U extends keyof WSClientEventMap<TWSKey>>(event: U, ...args: Parameters<WSClientEventMap<TWSKey>[U]>): boolean;
60
+ }
61
+ /**
62
+ * Base WebSocket abstraction layer. Handles connections, tracking each connection as a unique "WS Key"
63
+ */
64
+ export declare abstract class BaseWebsocketClient<
65
+ /**
66
+ * The WS connections supported by the client, each identified by a unique primary key
67
+ */
68
+ TWSKey extends string> extends EventEmitter {
69
+ /**
70
+ * State store to track a list of topics (topic requests) we are expected to be subscribed to if reconnected
71
+ */
72
+ private wsStore;
73
+ protected logger: typeof DefaultLogger;
74
+ protected options: WebsocketClientOptions;
75
+ private wsApiRequestId;
76
+ constructor(options?: WSClientConfigurableOptions, logger?: typeof DefaultLogger);
77
+ protected abstract sendPingEvent(wsKey: TWSKey, ws: WebSocket): void;
78
+ protected abstract sendPongEvent(wsKey: TWSKey, ws: WebSocket): void;
79
+ protected abstract isWsPing(data: any): boolean;
80
+ protected abstract isWsPong(data: any): boolean;
81
+ protected abstract getWsAuthRequestEvent(wsKey: TWSKey): Promise<object>;
82
+ protected abstract isPrivateTopicRequest(request: WsTopicRequest<string>, wsKey: TWSKey): boolean;
83
+ protected abstract getPrivateWSKeys(): TWSKey[];
84
+ protected abstract getWsUrl(wsKey: TWSKey): string;
85
+ protected abstract getMaxTopicsPerSubscribeEvent(wsKey: TWSKey): number | null;
86
+ /**
87
+ * Returns a list of string events that can be individually sent upstream to complete subscribing/unsubscribing/etc to these topics
88
+ */
89
+ protected abstract getWsOperationEventsForTopics(topics: WsTopicRequest<string>[], wsKey: TWSKey, operation: WsOperation): Promise<string[]>;
90
+ /**
91
+ * Abstraction called to sort ws events into emittable event types (response to a request, data update, etc)
92
+ */
93
+ protected abstract resolveEmittableEvents(wsKey: TWSKey, event: MessageEventLike): EmittableEvent[];
94
+ /**
95
+ * Request connection of all dependent (public & private) websockets, instead of waiting for automatic connection by library
96
+ */
97
+ protected abstract connectAll(): (DeferredPromise['promise'] | undefined)[];
98
+ protected isPrivateWsKey(wsKey: TWSKey): boolean;
99
+ /** Returns auto-incrementing request ID, used to track promise references for async requests */
100
+ protected getNewRequestId(): string;
101
+ protected abstract sendWSAPIRequest(wsKey: TWSKey, channel: string, params?: any): Promise<unknown>;
102
+ protected abstract sendWSAPIRequest(wsKey: TWSKey, channel: string, params: any): Promise<unknown>;
103
+ /**
104
+ * Don't call directly! Use subscribe() instead!
105
+ *
106
+ * Subscribe to one or more topics on a WS connection (identified by WS Key).
107
+ *
108
+ * - Topics are automatically cached
109
+ * - Connections are automatically opened, if not yet connected
110
+ * - Authentication is automatically handled
111
+ * - Topics are automatically resubscribed to, if something happens to the connection, unless you call unsubsribeTopicsForWsKey(topics, key).
112
+ *
113
+ * @param wsRequests array of topics to subscribe to
114
+ * @param wsKey ws key referring to the ws connection these topics should be subscribed on
115
+ */
116
+ protected subscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<string>[], wsKey: TWSKey): false | Promise<Promise<any> | undefined> | undefined;
117
+ protected unsubscribeTopicsForWsKey(wsTopicRequests: WsTopicRequestOrStringTopic<string>[], wsKey: TWSKey): void;
118
+ /**
119
+ * Splits topic requests into two groups, public & private topic requests
120
+ */
121
+ private sortTopicRequestsIntoPublicPrivate;
122
+ /** Get the WsStore that tracks websockets & topics */
123
+ getWsStore(): WsStore<TWSKey, WsTopicRequest<string>>;
124
+ close(wsKey: TWSKey, force?: boolean): void;
125
+ closeAll(force?: boolean): void;
126
+ isConnected(wsKey: TWSKey): boolean;
127
+ /**
128
+ * Request connection to a specific websocket, instead of waiting for automatic connection.
129
+ */
130
+ protected connect(wsKey: TWSKey): Promise<DeferredPromise['promise'] | undefined>;
131
+ private connectToWsUrl;
132
+ private parseWsError;
133
+ /** Get a signature, build the auth request and send it */
134
+ private sendAuthRequest;
135
+ private reconnectWithDelay;
136
+ private ping;
137
+ private clearTimers;
138
+ private clearPingTimer;
139
+ private clearPongTimer;
140
+ /**
141
+ * Simply builds and sends subscribe events for a list of topics for a ws key
142
+ *
143
+ * @private Use the `subscribe(topics)` or `subscribeTopicsForWsKey(topics, wsKey)` method to subscribe to topics. Send WS message to subscribe to topics.
144
+ */
145
+ private requestSubscribeTopics;
146
+ /**
147
+ * Simply builds and sends unsubscribe events for a list of topics for a ws key
148
+ *
149
+ * @private Use the `unsubscribe(topics)` method to unsubscribe from topics. Send WS message to unsubscribe from topics.
150
+ */
151
+ private requestUnsubscribeTopics;
152
+ /**
153
+ * Try sending a string event on a WS connection (identified by the WS Key)
154
+ */
155
+ tryWsSend(wsKey: TWSKey, wsMessage: string): void;
156
+ private onWsOpen;
157
+ /**
158
+ * Handle subscription to private topics _after_ authentication successfully completes asynchronously.
159
+ *
160
+ * Only used for exchanges that require auth before sending private topic subscription requests
161
+ */
162
+ private onWsAuthenticated;
163
+ private onWsMessage;
164
+ private onWsClose;
165
+ private getWs;
166
+ private setWsState;
167
+ /**
168
+ * Promise-driven method to assert that a ws has successfully connected (will await until connection is open)
169
+ */
170
+ protected assertIsConnected(wsKey: TWSKey): Promise<unknown>;
171
+ }
172
+ export {};