@ritbit/v4-client-js 1.3.17

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 (412) hide show
  1. package/.env +1 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.js +15 -0
  4. package/.gitleaks.toml +24 -0
  5. package/.gitleaksignore +1 -0
  6. package/.nvmrc +1 -0
  7. package/.prettierignore +3 -0
  8. package/.prettierrc.json +6 -0
  9. package/.releaserc +10 -0
  10. package/.vscode/launch.json +11 -0
  11. package/LICENSE +13 -0
  12. package/README.md +83 -0
  13. package/__native__/__ios__/v4-native-client.js +209891 -0
  14. package/__native__/__ios__/v4-native-client.js.map +1 -0
  15. package/__tests__/clients/composite-client.test.ts +140 -0
  16. package/__tests__/helpers/baseClients.ts +23 -0
  17. package/__tests__/helpers/constants.ts +130 -0
  18. package/__tests__/lib/helpers.test.ts +53 -0
  19. package/__tests__/lib/util.test.ts +77 -0
  20. package/__tests__/lib/validation.test.ts +289 -0
  21. package/__tests__/modules/client/AccountEndpoints.test.ts +236 -0
  22. package/__tests__/modules/client/FaucetEndpoint.test.ts +14 -0
  23. package/__tests__/modules/client/MarketsEndpoints.test.ts +84 -0
  24. package/__tests__/modules/client/Transfers.test.ts +44 -0
  25. package/__tests__/modules/client/UtilityEndpoints.test.ts +29 -0
  26. package/__tests__/modules/client/ValidatorGetEndpoints.test.ts +50 -0
  27. package/__tests__/modules/client/ValidatorPostEndpoints.test.ts +52 -0
  28. package/__tests__/modules/client/constants.ts +5 -0
  29. package/__tests__/modules/onboarding.test.ts +66 -0
  30. package/build/cjs/clients/composite-client.js +788 -0
  31. package/build/cjs/clients/constants.js +293 -0
  32. package/build/cjs/clients/faucet-client.js +36 -0
  33. package/build/cjs/clients/helpers/chain-helpers.js +178 -0
  34. package/build/cjs/clients/helpers/request-helpers.js +65 -0
  35. package/build/cjs/clients/indexer-client.js +56 -0
  36. package/build/cjs/clients/lib/axios/axiosRequest.js +34 -0
  37. package/build/cjs/clients/lib/axios/errors.js +28 -0
  38. package/build/cjs/clients/lib/axios/index.js +23 -0
  39. package/build/cjs/clients/lib/axios/types.js +11 -0
  40. package/build/cjs/clients/lib/cctpProto.js +3242 -0
  41. package/build/cjs/clients/lib/errors.js +58 -0
  42. package/build/cjs/clients/lib/registry.js +51 -0
  43. package/build/cjs/clients/modules/account.js +223 -0
  44. package/build/cjs/clients/modules/composer.js +404 -0
  45. package/build/cjs/clients/modules/get.js +469 -0
  46. package/build/cjs/clients/modules/local-wallet.js +59 -0
  47. package/build/cjs/clients/modules/markets.js +54 -0
  48. package/build/cjs/clients/modules/post.js +391 -0
  49. package/build/cjs/clients/modules/proto-includes.js +72 -0
  50. package/build/cjs/clients/modules/rest.js +33 -0
  51. package/build/cjs/clients/modules/signer.js +93 -0
  52. package/build/cjs/clients/modules/tendermintClient.js +137 -0
  53. package/build/cjs/clients/modules/utility.js +44 -0
  54. package/build/cjs/clients/modules/vault.js +25 -0
  55. package/build/cjs/clients/noble-client.js +75 -0
  56. package/build/cjs/clients/socket-client.js +301 -0
  57. package/build/cjs/clients/subaccount.js +33 -0
  58. package/build/cjs/clients/types.js +43 -0
  59. package/build/cjs/clients/validator-client.js +81 -0
  60. package/build/cjs/index.js +73 -0
  61. package/build/cjs/lib/constants.js +23 -0
  62. package/build/cjs/lib/errors.js +37 -0
  63. package/build/cjs/lib/helpers.js +98 -0
  64. package/build/cjs/lib/onboarding.js +75 -0
  65. package/build/cjs/lib/trading-key-utils.js +108 -0
  66. package/build/cjs/lib/utils.js +79 -0
  67. package/build/cjs/lib/validation.js +150 -0
  68. package/build/cjs/network_optimizer.js +96 -0
  69. package/build/cjs/package.json +1 -0
  70. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  71. package/build/cjs/types.js +25 -0
  72. package/build/esm/__tests__/clients/composite-client.test.d.ts +2 -0
  73. package/build/esm/__tests__/clients/composite-client.test.d.ts.map +1 -0
  74. package/build/esm/__tests__/clients/composite-client.test.js +128 -0
  75. package/build/esm/__tests__/helpers/baseClients.d.ts +19 -0
  76. package/build/esm/__tests__/helpers/baseClients.d.ts.map +1 -0
  77. package/build/esm/__tests__/helpers/baseClients.js +22 -0
  78. package/build/esm/__tests__/helpers/constants.d.ts +19 -0
  79. package/build/esm/__tests__/helpers/constants.d.ts.map +1 -0
  80. package/build/esm/__tests__/helpers/constants.js +104 -0
  81. package/build/esm/__tests__/lib/helpers.test.d.ts +2 -0
  82. package/build/esm/__tests__/lib/helpers.test.d.ts.map +1 -0
  83. package/build/esm/__tests__/lib/helpers.test.js +40 -0
  84. package/build/esm/__tests__/lib/util.test.d.ts +2 -0
  85. package/build/esm/__tests__/lib/util.test.d.ts.map +1 -0
  86. package/build/esm/__tests__/lib/util.test.js +65 -0
  87. package/build/esm/__tests__/lib/validation.test.d.ts +2 -0
  88. package/build/esm/__tests__/lib/validation.test.d.ts.map +1 -0
  89. package/build/esm/__tests__/lib/validation.test.js +249 -0
  90. package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts +2 -0
  91. package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts.map +1 -0
  92. package/build/esm/__tests__/modules/client/AccountEndpoints.test.js +169 -0
  93. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts +2 -0
  94. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts.map +1 -0
  95. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.js +13 -0
  96. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts +2 -0
  97. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts.map +1 -0
  98. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.js +66 -0
  99. package/build/esm/__tests__/modules/client/Transfers.test.d.ts +2 -0
  100. package/build/esm/__tests__/modules/client/Transfers.test.d.ts.map +1 -0
  101. package/build/esm/__tests__/modules/client/Transfers.test.js +39 -0
  102. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts +2 -0
  103. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts.map +1 -0
  104. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.js +26 -0
  105. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts +2 -0
  106. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts.map +1 -0
  107. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.js +44 -0
  108. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts +2 -0
  109. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts.map +1 -0
  110. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.js +48 -0
  111. package/build/esm/__tests__/modules/client/constants.d.ts +4 -0
  112. package/build/esm/__tests__/modules/client/constants.d.ts.map +1 -0
  113. package/build/esm/__tests__/modules/client/constants.js +4 -0
  114. package/build/esm/__tests__/modules/onboarding.test.d.ts +2 -0
  115. package/build/esm/__tests__/modules/onboarding.test.d.ts.map +1 -0
  116. package/build/esm/__tests__/modules/onboarding.test.js +48 -0
  117. package/build/esm/examples/account_endpoints.d.ts +5 -0
  118. package/build/esm/examples/account_endpoints.d.ts.map +1 -0
  119. package/build/esm/examples/account_endpoints.js +127 -0
  120. package/build/esm/examples/batch_cancel_orders_example.d.ts +2 -0
  121. package/build/esm/examples/batch_cancel_orders_example.d.ts.map +1 -0
  122. package/build/esm/examples/batch_cancel_orders_example.js +88 -0
  123. package/build/esm/examples/composite_example.d.ts +2 -0
  124. package/build/esm/examples/composite_example.d.ts.map +1 -0
  125. package/build/esm/examples/composite_example.js +45 -0
  126. package/build/esm/examples/constants.d.ts +13 -0
  127. package/build/esm/examples/constants.d.ts.map +1 -0
  128. package/build/esm/examples/constants.js +29 -0
  129. package/build/esm/examples/faucet_endpoint.d.ts +5 -0
  130. package/build/esm/examples/faucet_endpoint.d.ts.map +1 -0
  131. package/build/esm/examples/faucet_endpoint.js +21 -0
  132. package/build/esm/examples/gov_add_new_market.d.ts +2 -0
  133. package/build/esm/examples/gov_add_new_market.d.ts.map +1 -0
  134. package/build/esm/examples/gov_add_new_market.js +72 -0
  135. package/build/esm/examples/human_readable_orders.json +86 -0
  136. package/build/esm/examples/human_readable_short_term_orders.json +42 -0
  137. package/build/esm/examples/json-encoding.d.ts +2 -0
  138. package/build/esm/examples/json-encoding.d.ts.map +1 -0
  139. package/build/esm/examples/json-encoding.js +27 -0
  140. package/build/esm/examples/long_term_order_cancel_example.d.ts +2 -0
  141. package/build/esm/examples/long_term_order_cancel_example.d.ts.map +1 -0
  142. package/build/esm/examples/long_term_order_cancel_example.js +58 -0
  143. package/build/esm/examples/markets_endpoints.d.ts +5 -0
  144. package/build/esm/examples/markets_endpoints.d.ts.map +1 -0
  145. package/build/esm/examples/markets_endpoints.js +131 -0
  146. package/build/esm/examples/native_examples.d.ts +2 -0
  147. package/build/esm/examples/native_examples.d.ts.map +1 -0
  148. package/build/esm/examples/native_examples.js +110 -0
  149. package/build/esm/examples/noble_example.d.ts +2 -0
  150. package/build/esm/examples/noble_example.d.ts.map +1 -0
  151. package/build/esm/examples/noble_example.js +83 -0
  152. package/build/esm/examples/optimal_node.d.ts +2 -0
  153. package/build/esm/examples/optimal_node.d.ts.map +1 -0
  154. package/build/esm/examples/optimal_node.js +68 -0
  155. package/build/esm/examples/permissioned_keys_example.d.ts +2 -0
  156. package/build/esm/examples/permissioned_keys_example.d.ts.map +1 -0
  157. package/build/esm/examples/permissioned_keys_example.js +99 -0
  158. package/build/esm/examples/raw_orders.json +130 -0
  159. package/build/esm/examples/short_term_order_cancel_example.d.ts +2 -0
  160. package/build/esm/examples/short_term_order_cancel_example.d.ts.map +1 -0
  161. package/build/esm/examples/short_term_order_cancel_example.js +49 -0
  162. package/build/esm/examples/short_term_order_composite_example.d.ts +2 -0
  163. package/build/esm/examples/short_term_order_composite_example.d.ts.map +1 -0
  164. package/build/esm/examples/short_term_order_composite_example.js +63 -0
  165. package/build/esm/examples/test.d.ts +2 -0
  166. package/build/esm/examples/test.d.ts.map +1 -0
  167. package/build/esm/examples/test.js +45 -0
  168. package/build/esm/examples/transfer_example_deposit.d.ts +2 -0
  169. package/build/esm/examples/transfer_example_deposit.d.ts.map +1 -0
  170. package/build/esm/examples/transfer_example_deposit.js +24 -0
  171. package/build/esm/examples/transfer_example_send.d.ts +2 -0
  172. package/build/esm/examples/transfer_example_send.d.ts.map +1 -0
  173. package/build/esm/examples/transfer_example_send.js +37 -0
  174. package/build/esm/examples/transfer_example_subaccount_transfer.d.ts +2 -0
  175. package/build/esm/examples/transfer_example_subaccount_transfer.d.ts.map +1 -0
  176. package/build/esm/examples/transfer_example_subaccount_transfer.js +24 -0
  177. package/build/esm/examples/transfer_example_withdraw.d.ts +2 -0
  178. package/build/esm/examples/transfer_example_withdraw.d.ts.map +1 -0
  179. package/build/esm/examples/transfer_example_withdraw.js +25 -0
  180. package/build/esm/examples/transfer_example_withdraw_other.d.ts +2 -0
  181. package/build/esm/examples/transfer_example_withdraw_other.d.ts.map +1 -0
  182. package/build/esm/examples/transfer_example_withdraw_other.js +37 -0
  183. package/build/esm/examples/utility_endpoints.d.ts +5 -0
  184. package/build/esm/examples/utility_endpoints.d.ts.map +1 -0
  185. package/build/esm/examples/utility_endpoints.js +40 -0
  186. package/build/esm/examples/validator_get_example.d.ts +2 -0
  187. package/build/esm/examples/validator_get_example.d.ts.map +1 -0
  188. package/build/esm/examples/validator_get_example.js +156 -0
  189. package/build/esm/examples/validator_post_example.d.ts +2 -0
  190. package/build/esm/examples/validator_post_example.d.ts.map +1 -0
  191. package/build/esm/examples/validator_post_example.js +71 -0
  192. package/build/esm/examples/wallet_address.d.ts +2 -0
  193. package/build/esm/examples/wallet_address.d.ts.map +1 -0
  194. package/build/esm/examples/wallet_address.js +17 -0
  195. package/build/esm/examples/websocket_example.d.ts +2 -0
  196. package/build/esm/examples/websocket_example.d.ts.map +1 -0
  197. package/build/esm/examples/websocket_example.js +34 -0
  198. package/build/esm/examples/websocket_orderbook_example.d.ts +2 -0
  199. package/build/esm/examples/websocket_orderbook_example.d.ts.map +1 -0
  200. package/build/esm/examples/websocket_orderbook_example.js +194 -0
  201. package/build/esm/src/clients/composite-client.d.ts +406 -0
  202. package/build/esm/src/clients/composite-client.d.ts.map +1 -0
  203. package/build/esm/src/clients/composite-client.js +781 -0
  204. package/build/esm/src/clients/constants.d.ts +170 -0
  205. package/build/esm/src/clients/constants.d.ts.map +1 -0
  206. package/build/esm/src/clients/constants.js +269 -0
  207. package/build/esm/src/clients/faucet-client.d.ts +18 -0
  208. package/build/esm/src/clients/faucet-client.d.ts.map +1 -0
  209. package/build/esm/src/clients/faucet-client.js +29 -0
  210. package/build/esm/src/clients/helpers/chain-helpers.d.ts +15 -0
  211. package/build/esm/src/clients/helpers/chain-helpers.d.ts.map +1 -0
  212. package/build/esm/src/clients/helpers/chain-helpers.js +163 -0
  213. package/build/esm/src/clients/helpers/request-helpers.d.ts +3 -0
  214. package/build/esm/src/clients/helpers/request-helpers.d.ts.map +1 -0
  215. package/build/esm/src/clients/helpers/request-helpers.js +58 -0
  216. package/build/esm/src/clients/indexer-client.d.ts +40 -0
  217. package/build/esm/src/clients/indexer-client.d.ts.map +1 -0
  218. package/build/esm/src/clients/indexer-client.js +49 -0
  219. package/build/esm/src/clients/lib/axios/axiosRequest.d.ts +9 -0
  220. package/build/esm/src/clients/lib/axios/axiosRequest.d.ts.map +1 -0
  221. package/build/esm/src/clients/lib/axios/axiosRequest.js +28 -0
  222. package/build/esm/src/clients/lib/axios/errors.d.ts +31 -0
  223. package/build/esm/src/clients/lib/axios/errors.d.ts.map +1 -0
  224. package/build/esm/src/clients/lib/axios/errors.js +23 -0
  225. package/build/esm/src/clients/lib/axios/index.d.ts +7 -0
  226. package/build/esm/src/clients/lib/axios/index.d.ts.map +1 -0
  227. package/build/esm/src/clients/lib/axios/index.js +7 -0
  228. package/build/esm/src/clients/lib/axios/types.d.ts +7 -0
  229. package/build/esm/src/clients/lib/axios/types.d.ts.map +1 -0
  230. package/build/esm/src/clients/lib/axios/types.js +8 -0
  231. package/build/esm/src/clients/lib/cctpProto.d.ts +670 -0
  232. package/build/esm/src/clients/lib/cctpProto.d.ts.map +1 -0
  233. package/build/esm/src/clients/lib/cctpProto.js +3234 -0
  234. package/build/esm/src/clients/lib/errors.d.ts +38 -0
  235. package/build/esm/src/clients/lib/errors.d.ts.map +1 -0
  236. package/build/esm/src/clients/lib/errors.js +50 -0
  237. package/build/esm/src/clients/lib/registry.d.ts +4 -0
  238. package/build/esm/src/clients/lib/registry.d.ts.map +1 -0
  239. package/build/esm/src/clients/lib/registry.js +47 -0
  240. package/build/esm/src/clients/modules/account.d.ts +30 -0
  241. package/build/esm/src/clients/modules/account.d.ts.map +1 -0
  242. package/build/esm/src/clients/modules/account.js +217 -0
  243. package/build/esm/src/clients/modules/composer.d.ts +37 -0
  244. package/build/esm/src/clients/modules/composer.d.ts.map +1 -0
  245. package/build/esm/src/clients/modules/composer.js +397 -0
  246. package/build/esm/src/clients/modules/get.d.ts +193 -0
  247. package/build/esm/src/clients/modules/get.d.ts.map +1 -0
  248. package/build/esm/src/clients/modules/get.js +429 -0
  249. package/build/esm/src/clients/modules/local-wallet.d.ts +19 -0
  250. package/build/esm/src/clients/modules/local-wallet.d.ts.map +1 -0
  251. package/build/esm/src/clients/modules/local-wallet.js +53 -0
  252. package/build/esm/src/clients/modules/markets.d.ts +14 -0
  253. package/build/esm/src/clients/modules/markets.d.ts.map +1 -0
  254. package/build/esm/src/clients/modules/markets.js +48 -0
  255. package/build/esm/src/clients/modules/post.d.ts +133 -0
  256. package/build/esm/src/clients/modules/post.d.ts.map +1 -0
  257. package/build/esm/src/clients/modules/post.js +384 -0
  258. package/build/esm/src/clients/modules/proto-includes.d.ts +30 -0
  259. package/build/esm/src/clients/modules/proto-includes.d.ts.map +1 -0
  260. package/build/esm/src/clients/modules/proto-includes.js +32 -0
  261. package/build/esm/src/clients/modules/rest.d.ts +12 -0
  262. package/build/esm/src/clients/modules/rest.d.ts.map +1 -0
  263. package/build/esm/src/clients/modules/rest.js +27 -0
  264. package/build/esm/src/clients/modules/signer.d.ts +19 -0
  265. package/build/esm/src/clients/modules/signer.d.ts.map +1 -0
  266. package/build/esm/src/clients/modules/signer.js +86 -0
  267. package/build/esm/src/clients/modules/tendermintClient.d.ts +54 -0
  268. package/build/esm/src/clients/modules/tendermintClient.d.ts.map +1 -0
  269. package/build/esm/src/clients/modules/tendermintClient.js +133 -0
  270. package/build/esm/src/clients/modules/utility.d.ts +27 -0
  271. package/build/esm/src/clients/modules/utility.d.ts.map +1 -0
  272. package/build/esm/src/clients/modules/utility.js +38 -0
  273. package/build/esm/src/clients/modules/vault.d.ts +12 -0
  274. package/build/esm/src/clients/modules/vault.d.ts.map +1 -0
  275. package/build/esm/src/clients/modules/vault.js +19 -0
  276. package/build/esm/src/clients/native.d.ts +75 -0
  277. package/build/esm/src/clients/native.d.ts.map +1 -0
  278. package/build/esm/src/clients/native.js +1237 -0
  279. package/build/esm/src/clients/noble-client.d.ts +18 -0
  280. package/build/esm/src/clients/noble-client.d.ts.map +1 -0
  281. package/build/esm/src/clients/noble-client.js +71 -0
  282. package/build/esm/src/clients/socket-client.d.ts +146 -0
  283. package/build/esm/src/clients/socket-client.d.ts.map +1 -0
  284. package/build/esm/src/clients/socket-client.js +294 -0
  285. package/build/esm/src/clients/subaccount.d.ts +14 -0
  286. package/build/esm/src/clients/subaccount.d.ts.map +1 -0
  287. package/build/esm/src/clients/subaccount.js +29 -0
  288. package/build/esm/src/clients/types.d.ts +137 -0
  289. package/build/esm/src/clients/types.d.ts.map +1 -0
  290. package/build/esm/src/clients/types.js +26 -0
  291. package/build/esm/src/clients/validator-client.d.ts +35 -0
  292. package/build/esm/src/clients/validator-client.d.ts.map +1 -0
  293. package/build/esm/src/clients/validator-client.js +74 -0
  294. package/build/esm/src/index.d.ts +17 -0
  295. package/build/esm/src/index.d.ts.map +1 -0
  296. package/build/esm/src/index.js +19 -0
  297. package/build/esm/src/lib/constants.d.ts +13 -0
  298. package/build/esm/src/lib/constants.d.ts.map +1 -0
  299. package/build/esm/src/lib/constants.js +20 -0
  300. package/build/esm/src/lib/errors.d.ts +23 -0
  301. package/build/esm/src/lib/errors.d.ts.map +1 -0
  302. package/build/esm/src/lib/errors.js +31 -0
  303. package/build/esm/src/lib/helpers.d.ts +22 -0
  304. package/build/esm/src/lib/helpers.d.ts.map +1 -0
  305. package/build/esm/src/lib/helpers.js +88 -0
  306. package/build/esm/src/lib/onboarding.d.ts +46 -0
  307. package/build/esm/src/lib/onboarding.d.ts.map +1 -0
  308. package/build/esm/src/lib/onboarding.js +69 -0
  309. package/build/esm/src/lib/trading-key-utils.d.ts +22 -0
  310. package/build/esm/src/lib/trading-key-utils.d.ts.map +1 -0
  311. package/build/esm/src/lib/trading-key-utils.js +99 -0
  312. package/build/esm/src/lib/utils.d.ts +39 -0
  313. package/build/esm/src/lib/utils.d.ts.map +1 -0
  314. package/build/esm/src/lib/utils.js +69 -0
  315. package/build/esm/src/lib/validation.d.ts +26 -0
  316. package/build/esm/src/lib/validation.d.ts.map +1 -0
  317. package/build/esm/src/lib/validation.js +138 -0
  318. package/build/esm/src/network_optimizer.d.ts +8 -0
  319. package/build/esm/src/network_optimizer.d.ts.map +1 -0
  320. package/build/esm/src/network_optimizer.js +91 -0
  321. package/build/esm/src/types.d.ts +26 -0
  322. package/build/esm/src/types.d.ts.map +1 -0
  323. package/build/esm/src/types.js +8 -0
  324. package/build/esm/tsconfig.esm.tsbuildinfo +1 -0
  325. package/commitlint.config.js +8 -0
  326. package/examples/account_endpoints.ts +129 -0
  327. package/examples/batch_cancel_orders_example.ts +130 -0
  328. package/examples/composite_example.ts +65 -0
  329. package/examples/constants.ts +42 -0
  330. package/examples/faucet_endpoint.ts +24 -0
  331. package/examples/gov_add_new_market.json +64 -0
  332. package/examples/gov_add_new_market.ts +95 -0
  333. package/examples/human_readable_orders.json +86 -0
  334. package/examples/human_readable_short_term_orders.json +42 -0
  335. package/examples/json-encoding.ts +33 -0
  336. package/examples/long_term_order_cancel_example.ts +87 -0
  337. package/examples/markets_endpoints.ts +134 -0
  338. package/examples/native_examples.ts +151 -0
  339. package/examples/noble_example.ts +107 -0
  340. package/examples/optimal_node.ts +70 -0
  341. package/examples/permissioned_keys_example.ts +162 -0
  342. package/examples/raw_orders.json +130 -0
  343. package/examples/short_term_order_cancel_example.ts +68 -0
  344. package/examples/short_term_order_composite_example.ts +80 -0
  345. package/examples/test.ts +65 -0
  346. package/examples/transfer_example_deposit.ts +28 -0
  347. package/examples/transfer_example_send.ts +60 -0
  348. package/examples/transfer_example_subaccount_transfer.ts +29 -0
  349. package/examples/transfer_example_withdraw.ts +31 -0
  350. package/examples/transfer_example_withdraw_other.ts +60 -0
  351. package/examples/utility_endpoints.ts +42 -0
  352. package/examples/validator_get_example.ts +160 -0
  353. package/examples/validator_post_example.ts +81 -0
  354. package/examples/wallet_address.ts +18 -0
  355. package/examples/websocket_example.ts +44 -0
  356. package/examples/websocket_orderbook_example.ts +239 -0
  357. package/jest.config.js +12 -0
  358. package/jest.globalSetup.js +5 -0
  359. package/jest.setup.js +1 -0
  360. package/package.json +113 -0
  361. package/ritbit-v4-client-js-1.3.17.tgz +0 -0
  362. package/scripts/bump_version.sh +16 -0
  363. package/scripts/generate-cctp-protos.sh +41 -0
  364. package/scripts/mobile_build_pack.sh +5 -0
  365. package/scripts/publish-if-not-exists.sh +21 -0
  366. package/src/clients/composite-client.ts +1431 -0
  367. package/src/clients/constants.ts +358 -0
  368. package/src/clients/faucet-client.ts +48 -0
  369. package/src/clients/helpers/chain-helpers.ts +231 -0
  370. package/src/clients/helpers/request-helpers.ts +71 -0
  371. package/src/clients/indexer-client.ts +61 -0
  372. package/src/clients/lib/axios/axiosRequest.ts +41 -0
  373. package/src/clients/lib/axios/errors.ts +41 -0
  374. package/src/clients/lib/axios/index.ts +7 -0
  375. package/src/clients/lib/axios/types.ts +6 -0
  376. package/src/clients/lib/cctpProto.ts +4197 -0
  377. package/src/clients/lib/errors.ts +63 -0
  378. package/src/clients/lib/registry.ts +88 -0
  379. package/src/clients/modules/account.ts +388 -0
  380. package/src/clients/modules/composer.ts +645 -0
  381. package/src/clients/modules/get.ts +740 -0
  382. package/src/clients/modules/local-wallet.ts +79 -0
  383. package/src/clients/modules/markets.ts +71 -0
  384. package/src/clients/modules/post.ts +1016 -0
  385. package/src/clients/modules/proto-includes.ts +33 -0
  386. package/src/clients/modules/rest.ts +40 -0
  387. package/src/clients/modules/signer.ts +139 -0
  388. package/src/clients/modules/tendermintClient.ts +168 -0
  389. package/src/clients/modules/utility.ts +47 -0
  390. package/src/clients/modules/vault.ts +23 -0
  391. package/src/clients/native.ts +1508 -0
  392. package/src/clients/noble-client.ts +108 -0
  393. package/src/clients/socket-client.ts +331 -0
  394. package/src/clients/subaccount.ts +57 -0
  395. package/src/clients/types.ts +191 -0
  396. package/src/clients/validator-client.ts +103 -0
  397. package/src/index.ts +20 -0
  398. package/src/lib/constants.ts +28 -0
  399. package/src/lib/errors.ts +38 -0
  400. package/src/lib/helpers.ts +99 -0
  401. package/src/lib/onboarding.ts +96 -0
  402. package/src/lib/trading-key-utils.ts +136 -0
  403. package/src/lib/utils.ts +84 -0
  404. package/src/lib/validation.ts +197 -0
  405. package/src/network_optimizer.ts +132 -0
  406. package/src/types.ts +44 -0
  407. package/tasks.json +16 -0
  408. package/tsconfig.base.json +15 -0
  409. package/tsconfig.cjs.json +20 -0
  410. package/tsconfig.eslint.json +14 -0
  411. package/tsconfig.esm.json +11 -0
  412. package/webpack.config.js +56 -0
@@ -0,0 +1,358 @@
1
+ import { PageRequest } from '@ritbit/v4-proto/src/codegen/cosmos/base/query/v1beta1/pagination';
2
+ import { AxiosProxyConfig } from 'axios';
3
+ import Long from 'long';
4
+
5
+ import { BroadcastOptions, DenomConfig } from './types';
6
+
7
+ export * from '../lib/constants';
8
+
9
+ /**
10
+ * Disclaimer: Note that as of the date hereof, the testnet and RITBIT Chain deployment are the only known deployments of the
11
+ * RITBIT Chain software, and other deployment options may be added.
12
+ */
13
+
14
+ // Chain ID
15
+ export const DEV_CHAIN_ID = 'ritbit-local';
16
+ export const STAGING_CHAIN_ID = 'ritbit-testnet';
17
+ export const TESTNET_CHAIN_ID = 'ritbit-testnet';
18
+ export const LOCAL_CHAIN_ID = 'ritbit-local';
19
+ export const MAINNET_CHAIN_ID = 'ritbit-mainnet';
20
+
21
+ // ------------ API URLs ------------
22
+ export enum IndexerApiHost {
23
+ TESTNET = 'https://indexer.testnet.ritbit.trade/',
24
+ STAGING = 'https://indexer.testnet.ritbit.trade/',
25
+ LOCAL = 'http://local.ritbit.ru:3002',
26
+ MAINNET = 'https://indexer.ritbit.trade',
27
+ }
28
+
29
+ export enum IndexerWSHost {
30
+ TESTNET = 'wss://indexer.testnet.ritbit.trade/v4/ws',
31
+ STAGING = 'wss://indexer.testnet.ritbit.trade/v4/ws',
32
+ LOCAL = 'ws://local.ritbit.ru:3003',
33
+ MAINNET = 'wss://indexer.ritbit.trade/v4/ws',
34
+ }
35
+
36
+ export enum FaucetApiHost {
37
+ TESTNET = 'https://faucet.testnet.ritbit.trade',
38
+ }
39
+
40
+ export enum ValidatorApiHost {
41
+ TESTNET = 'https://validator.testnet.ritbit.trade',
42
+ STAGING = 'https://validator.testnet.ritbit.trade',
43
+ LOCAL = 'http://local.ritbit.ru:26657',
44
+ MAINNET = 'https://validator.ritbit.trade',
45
+ }
46
+
47
+ // ------------ Network IDs ------------
48
+
49
+ export enum NetworkId {
50
+ TESTNET = 'ritbit-testnet',
51
+ MAINNET = 'ritbit-mainnet',
52
+ }
53
+ export const NETWORK_ID_TESTNET: string = 'ritbit-testnet';
54
+ export const NETWORK_ID_MAINNET: string = 'ritbit-mainnet';
55
+
56
+ // ------------ Gas Denoms ------------
57
+ export enum SelectedGasDenom {
58
+ NATIVE = 'NATIVE',
59
+ USDC = 'USDC',
60
+ }
61
+
62
+ // ------------ MsgType URLs ------------
63
+ // Default CosmosSDK
64
+ // x/bank
65
+ export const TYPE_URL_MSG_SEND = '/cosmos.bank.v1beta1.MsgSend';
66
+
67
+ // x/gov
68
+ export const TYPE_URL_MSG_SUBMIT_PROPOSAL = '/cosmos.gov.v1.MsgSubmitProposal';
69
+
70
+ // x/clob
71
+ export const TYPE_URL_MSG_PLACE_ORDER = '/ritbit.clob.MsgPlaceOrder';
72
+ export const TYPE_URL_MSG_CANCEL_ORDER = '/ritbit.clob.MsgCancelOrder';
73
+ export const TYPE_URL_BATCH_CANCEL = '/ritbit.clob.MsgBatchCancel';
74
+ export const TYPE_URL_MSG_CREATE_CLOB_PAIR = '/ritbit.clob.MsgCreateClobPair';
75
+ export const TYPE_URL_MSG_UPDATE_CLOB_PAIR = '/ritbit.clob.MsgUpdateClobPair';
76
+
77
+ // x/delaymsg
78
+ export const TYPE_URL_MSG_DELAY_MESSAGE = '/ritbit.delaymsg.MsgDelayMessage';
79
+
80
+ // x/listing
81
+ export const TYPE_URL_MSG_CREATE_MARKET_PERMISSIONLESS =
82
+ '/ritbit.listing.MsgCreateMarketPermissionless';
83
+
84
+ // x/perpetuals
85
+ export const TYPE_URL_MSG_CREATE_PERPETUAL = '/ritbit.perpetuals.MsgCreatePerpetual';
86
+
87
+ // x/prices
88
+ export const TYPE_URL_MSG_CREATE_ORACLE_MARKET = '/ritbit.prices.MsgCreateOracleMarket';
89
+
90
+ // x/sending
91
+ export const TYPE_URL_MSG_CREATE_TRANSFER = '/ritbit.sending.MsgCreateTransfer';
92
+ export const TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT =
93
+ '/ritbit.sending.MsgWithdrawFromSubaccount';
94
+ export const TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT = '/ritbit.sending.MsgDepositToSubaccount';
95
+
96
+ // x/affiliates
97
+ export const TYPE_URL_MSG_REGISTER_AFFILIATE = '/ritbit.affiliates.MsgRegisterAffiliate';
98
+
99
+ // x/vault
100
+ export const TYPE_URL_MSG_DEPOSIT_TO_MEGAVAULT = '/ritbit.vault.MsgDepositToMegavault';
101
+ export const TYPE_URL_MSG_WITHDRAW_FROM_MEGAVAULT = '/ritbit.vault.MsgWithdrawFromMegavault';
102
+
103
+ // x/staking
104
+ export const TYPE_URL_MSG_DELEGATE = '/cosmos.staking.v1beta1.MsgDelegate';
105
+ export const TYPE_URL_MSG_UNDELEGATE = '/cosmos.staking.v1beta1.MsgUndelegate';
106
+
107
+ // x/distribution
108
+ export const TYPE_URL_MSG_WITHDRAW_DELEGATOR_REWARD =
109
+ '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward';
110
+
111
+ // x/accountplus
112
+ export const TYPE_URL_MSG_ADD_AUTHENTICATOR = '/ritbit.accountplus.MsgAddAuthenticator';
113
+ export const TYPE_URL_MSG_REMOVE_AUTHENTICATOR = '/ritbit.accountplus.MsgRemoveAuthenticator';
114
+
115
+ // ------------ Chain Constants ------------
116
+ // The following are same across different networks / deployments.
117
+ export const GOV_MODULE_ADDRESS = 'rit10d07y265gmmuvt4z0w9aw880jnsr700j086rvs';
118
+ export const DELAYMSG_MODULE_ADDRESS = 'rit1mkkvp26dngu6n8rmalaxyp3gwkjuzztqg7pc3h';
119
+ export const MEGAVAULT_MODULE_ADDRESS = 'rit18tkxrnrkqc2t0lr3zxr5g6a4hdvqksyl6u4m0h';
120
+
121
+ // ------------ Market Statistic Day Types ------------
122
+ export enum MarketStatisticDay {
123
+ ONE = '1',
124
+ SEVEN = '7',
125
+ THIRTY = '30',
126
+ }
127
+
128
+ // ------------ Order Types ------------
129
+ // This should match OrderType in Abacus
130
+ export enum OrderType {
131
+ LIMIT = 'LIMIT',
132
+ MARKET = 'MARKET',
133
+ STOP_LIMIT = 'STOP_LIMIT',
134
+ TAKE_PROFIT_LIMIT = 'TAKE_PROFIT',
135
+ STOP_MARKET = 'STOP_MARKET',
136
+ TAKE_PROFIT_MARKET = 'TAKE_PROFIT_MARKET',
137
+ }
138
+
139
+ // ------------ Order Side ------------
140
+ // This should match OrderSide in Abacus
141
+ export enum OrderSide {
142
+ BUY = 'BUY',
143
+ SELL = 'SELL',
144
+ }
145
+
146
+ // ------------ Order TimeInForce ------------
147
+ // This should match OrderTimeInForce in Abacus
148
+ export enum OrderTimeInForce {
149
+ GTT = 'GTT',
150
+ IOC = 'IOC',
151
+ FOK = 'FOK',
152
+ }
153
+
154
+ // ------------ Order Execution ------------
155
+ // This should match OrderExecution in Abacus
156
+ export enum OrderExecution {
157
+ DEFAULT = 'DEFAULT',
158
+ IOC = 'IOC',
159
+ FOK = 'FOK',
160
+ POST_ONLY = 'POST_ONLY',
161
+ }
162
+
163
+ // ------------ Order Status ------------
164
+ // This should match OrderStatus in Abacus
165
+ export enum OrderStatus {
166
+ BEST_EFFORT_OPENED = 'BEST_EFFORT_OPENED',
167
+ OPEN = 'OPEN',
168
+ FILLED = 'FILLED',
169
+ BEST_EFFORT_CANCELED = 'BEST_EFFORT_CANCELED',
170
+ CANCELED = 'CANCELED',
171
+ }
172
+
173
+ export enum TickerType {
174
+ PERPETUAL = 'PERPETUAL', // Only PERPETUAL is supported right now
175
+ }
176
+
177
+ export enum PositionStatus {
178
+ OPEN = 'OPEN',
179
+ CLOSED = 'CLOSED',
180
+ LIQUIDATED = 'LIQUIDATED',
181
+ }
182
+
183
+ // ----------- Time Period for Sparklines -------------
184
+
185
+ export enum TimePeriod {
186
+ ONE_DAY = 'ONE_DAY',
187
+ SEVEN_DAYS = 'SEVEN_DAYS',
188
+ }
189
+
190
+ export enum PnlTickInterval {
191
+ HOUR = 'hour',
192
+ day = 'day',
193
+ }
194
+
195
+ // ----------- Authenticators -------------
196
+
197
+ export enum AuthenticatorType {
198
+ ALL_OF = 'AllOf',
199
+ ANY_OF = 'AnyOf',
200
+ SIGNATURE_VERIFICATION = 'SignatureVerification',
201
+ MESSAGE_FILTER = 'MessageFilter',
202
+ CLOB_PAIR_ID_FILTER = 'ClobPairIdFilter',
203
+ SUBACCOUNT_FILTER = 'SubaccountFilter',
204
+ }
205
+
206
+ export interface Authenticator {
207
+ type: AuthenticatorType;
208
+ config: string | Authenticator[];
209
+ }
210
+
211
+ export enum TradingRewardAggregationPeriod {
212
+ DAILY = 'DAILY',
213
+ WEEKLY = 'WEEKLY',
214
+ MONTHLY = 'MONTHLY',
215
+ }
216
+
217
+ // ------------ API Defaults ------------
218
+ export const DEFAULT_API_TIMEOUT: number = 3_000;
219
+
220
+ export const MAX_MEMO_CHARACTERS: number = 256;
221
+
222
+ export const SHORT_BLOCK_WINDOW: number = 20;
223
+
224
+ export const SHORT_BLOCK_FORWARD: number = 15;
225
+
226
+ // Querying
227
+ export const PAGE_REQUEST: PageRequest = {
228
+ key: new Uint8Array(),
229
+ offset: Long.UZERO,
230
+ limit: Long.MAX_UNSIGNED_VALUE,
231
+ countTotal: true,
232
+ reverse: false,
233
+ };
234
+
235
+ export class IndexerConfig {
236
+ public restEndpoint: string;
237
+ public websocketEndpoint: string;
238
+ public proxy?: AxiosProxyConfig;
239
+
240
+ constructor(restEndpoint: string, websocketEndpoint: string, proxy?: AxiosProxyConfig) {
241
+ this.restEndpoint = restEndpoint;
242
+ this.websocketEndpoint = websocketEndpoint;
243
+ this.proxy = proxy;
244
+ }
245
+ }
246
+
247
+ export class ValidatorConfig {
248
+ public restEndpoint: string;
249
+ public chainId: string;
250
+ public denoms: DenomConfig;
251
+ public broadcastOptions?: BroadcastOptions;
252
+ public defaultClientMemo?: string;
253
+ public useTimestampNonce?: boolean;
254
+ public timestampNonceOffsetMs?: number;
255
+
256
+ constructor(
257
+ restEndpoint: string,
258
+ chainId: string,
259
+ denoms: DenomConfig,
260
+ broadcastOptions?: BroadcastOptions,
261
+ defaultClientMemo?: string,
262
+ useTimestampNonce?: boolean,
263
+ timestampNonceOffsetMs?: number,
264
+ ) {
265
+ this.restEndpoint = restEndpoint?.endsWith('/') ? restEndpoint.slice(0, -1) : restEndpoint;
266
+ this.chainId = chainId;
267
+
268
+ this.denoms = denoms;
269
+ this.broadcastOptions = broadcastOptions;
270
+ this.defaultClientMemo = defaultClientMemo;
271
+ this.useTimestampNonce = useTimestampNonce;
272
+ this.timestampNonceOffsetMs = timestampNonceOffsetMs;
273
+ }
274
+ }
275
+
276
+ export class Network {
277
+ constructor(
278
+ public env: string,
279
+ public indexerConfig: IndexerConfig,
280
+ public validatorConfig: ValidatorConfig,
281
+ ) {}
282
+
283
+ static testnet(): Network {
284
+ const indexerConfig = new IndexerConfig(IndexerApiHost.TESTNET, IndexerWSHost.TESTNET);
285
+ const validatorConfig = new ValidatorConfig(
286
+ ValidatorApiHost.TESTNET,
287
+ TESTNET_CHAIN_ID,
288
+ {
289
+ CHAINTOKEN_DENOM: 'urit',
290
+ USDC_DENOM: 'ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5',
291
+ USDC_GAS_DENOM: 'uusdc',
292
+ USDC_DECIMALS: 6,
293
+ CHAINTOKEN_DECIMALS: 18,
294
+ },
295
+ undefined,
296
+ 'Client Example',
297
+ );
298
+ return new Network('testnet', indexerConfig, validatorConfig);
299
+ }
300
+
301
+ static staging(): Network {
302
+ const indexerConfig = new IndexerConfig(IndexerApiHost.STAGING, IndexerWSHost.STAGING);
303
+ const validatorConfig = new ValidatorConfig(
304
+ ValidatorApiHost.STAGING,
305
+ STAGING_CHAIN_ID,
306
+ {
307
+ CHAINTOKEN_DENOM: 'urit',
308
+ USDC_DENOM: 'ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5',
309
+ USDC_GAS_DENOM: 'uusdc',
310
+ USDC_DECIMALS: 6,
311
+ CHAINTOKEN_DECIMALS: 18,
312
+ },
313
+ undefined,
314
+ 'Client Example',
315
+ );
316
+ return new Network('staging', indexerConfig, validatorConfig);
317
+ }
318
+
319
+ static local(): Network {
320
+ const indexerConfig = new IndexerConfig(IndexerApiHost.LOCAL, IndexerWSHost.LOCAL);
321
+ const validatorConfig = new ValidatorConfig(
322
+ ValidatorApiHost.LOCAL,
323
+ LOCAL_CHAIN_ID,
324
+ {
325
+ CHAINTOKEN_DENOM: 'urit',
326
+ USDC_DENOM: 'ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5',
327
+ USDC_GAS_DENOM: 'uusdc',
328
+ USDC_DECIMALS: 6,
329
+ CHAINTOKEN_DECIMALS: 18,
330
+ },
331
+ undefined,
332
+ 'Client Example',
333
+ );
334
+ return new Network('local', indexerConfig, validatorConfig);
335
+ }
336
+
337
+ static mainnet(): Network {
338
+ const indexerConfig = new IndexerConfig(IndexerApiHost.MAINNET, IndexerWSHost.MAINNET);
339
+ const validatorConfig = new ValidatorConfig(
340
+ ValidatorApiHost.MAINNET,
341
+ MAINNET_CHAIN_ID,
342
+ {
343
+ CHAINTOKEN_DENOM: 'urit',
344
+ USDC_DENOM: 'ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5',
345
+ USDC_GAS_DENOM: 'uusdc',
346
+ USDC_DECIMALS: 6,
347
+ CHAINTOKEN_DECIMALS: 18,
348
+ },
349
+ undefined,
350
+ 'Client Example',
351
+ );
352
+ return new Network('mainnet', indexerConfig, validatorConfig);
353
+ }
354
+
355
+ getString(): string {
356
+ return this.env;
357
+ }
358
+ }
@@ -0,0 +1,48 @@
1
+ import { Response } from './lib/axios';
2
+ import RestClient from './modules/rest';
3
+
4
+ export class FaucetClient extends RestClient {
5
+ /**
6
+ * @description For testnet only, add USDC to an subaccount
7
+ *
8
+ * @returns The HTTP response.
9
+ */
10
+ public async fill(
11
+ address: string,
12
+ subaccountNumber: number,
13
+ amount: number,
14
+ headers?: {},
15
+ ): Promise<Response> {
16
+ const uri = '/faucet/tokens';
17
+
18
+ return this.post(
19
+ uri,
20
+ {},
21
+ {
22
+ address,
23
+ subaccountNumber,
24
+ amount,
25
+ },
26
+ headers,
27
+ );
28
+ }
29
+
30
+ /**
31
+ * @description For testnet only, add native tokens to an address
32
+ * @param address destination address for native tokens
33
+ * @param headers requestHeaders
34
+ * @returns The HTTP response.
35
+ */
36
+ public async fillNative(address: string, headers?: {}): Promise<Response> {
37
+ const uri = '/faucet/native-token';
38
+
39
+ return this.post(
40
+ uri,
41
+ {},
42
+ {
43
+ address,
44
+ },
45
+ headers,
46
+ );
47
+ }
48
+ }
@@ -0,0 +1,231 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import Long from 'long';
3
+
4
+ import { OrderType, OrderSide, OrderTimeInForce, OrderExecution } from '../constants';
5
+ import { Order_ConditionType, Order_Side, Order_TimeInForce } from '../modules/proto-includes';
6
+ import { OrderFlags } from '../types';
7
+
8
+ export function round(input: number, base: number): number {
9
+ return BigNumber(input)
10
+ .div(BigNumber(base))
11
+ .integerValue(BigNumber.ROUND_FLOOR)
12
+ .times(BigNumber(base))
13
+ .toNumber();
14
+ }
15
+
16
+ export function calculateQuantums(
17
+ size: number,
18
+ atomicResolution: number,
19
+ stepBaseQuantums: number,
20
+ ): Long {
21
+ const rawQuantums = BigNumber(size).times(
22
+ BigNumber(10).pow(BigNumber(atomicResolution).negated()),
23
+ );
24
+ const quantums = round(rawQuantums.toNumber(), stepBaseQuantums);
25
+ // stepBaseQuantums functions as minimum order size
26
+ const result = Math.max(quantums, stepBaseQuantums);
27
+ return Long.fromNumber(result);
28
+ }
29
+
30
+ export function calculateVaultQuantums(size: number): bigint {
31
+ return BigInt(BigNumber(size).times(1_000_000).toFixed(0, BigNumber.ROUND_FLOOR));
32
+ }
33
+
34
+ export function calculateSubticks(
35
+ price: number,
36
+ atomicResolution: number,
37
+ quantumConversionExponent: number,
38
+ subticksPerTick: number,
39
+ ): Long {
40
+ const QUOTE_QUANTUMS_ATOMIC_RESOLUTION = -6;
41
+ const exponent = atomicResolution - quantumConversionExponent - QUOTE_QUANTUMS_ATOMIC_RESOLUTION;
42
+ const rawSubticks = BigNumber(price).times(BigNumber(10).pow(exponent));
43
+ const subticks = round(rawSubticks.toNumber(), subticksPerTick);
44
+ const result = Math.max(subticks, subticksPerTick);
45
+ return Long.fromNumber(result);
46
+ }
47
+
48
+ export function calculateSide(side: OrderSide): Order_Side {
49
+ return side === OrderSide.BUY ? Order_Side.SIDE_BUY : Order_Side.SIDE_SELL;
50
+ }
51
+
52
+ export function calculateTimeInForce(
53
+ type: OrderType,
54
+ timeInForce?: OrderTimeInForce,
55
+ execution?: OrderExecution,
56
+ postOnly?: boolean,
57
+ ): Order_TimeInForce {
58
+ switch (type) {
59
+ case OrderType.MARKET:
60
+ switch (timeInForce) {
61
+ case OrderTimeInForce.FOK:
62
+ return Order_TimeInForce.TIME_IN_FORCE_FILL_OR_KILL;
63
+
64
+ default:
65
+ return Order_TimeInForce.TIME_IN_FORCE_IOC;
66
+ }
67
+
68
+ case OrderType.LIMIT:
69
+ switch (timeInForce) {
70
+ case OrderTimeInForce.GTT:
71
+ if (postOnly == null) {
72
+ throw new Error('postOnly must be set if order type is LIMIT and timeInForce is GTT');
73
+ }
74
+ return postOnly
75
+ ? Order_TimeInForce.TIME_IN_FORCE_POST_ONLY
76
+ : Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED;
77
+
78
+ case OrderTimeInForce.FOK:
79
+ return Order_TimeInForce.TIME_IN_FORCE_FILL_OR_KILL;
80
+
81
+ case OrderTimeInForce.IOC:
82
+ return Order_TimeInForce.TIME_IN_FORCE_IOC;
83
+
84
+ default:
85
+ throw new Error('Unexpected code path: timeInForce');
86
+ }
87
+
88
+ case OrderType.STOP_LIMIT:
89
+ case OrderType.TAKE_PROFIT_LIMIT:
90
+ if (execution == null) {
91
+ throw new Error('execution must be set if order type is STOP_LIMIT or TAKE_PROFIT_LIMIT');
92
+ }
93
+ switch (execution) {
94
+ case OrderExecution.DEFAULT:
95
+ return Order_TimeInForce.TIME_IN_FORCE_UNSPECIFIED;
96
+
97
+ case OrderExecution.POST_ONLY:
98
+ return Order_TimeInForce.TIME_IN_FORCE_POST_ONLY;
99
+
100
+ case OrderExecution.FOK:
101
+ return Order_TimeInForce.TIME_IN_FORCE_FILL_OR_KILL;
102
+
103
+ case OrderExecution.IOC:
104
+ return Order_TimeInForce.TIME_IN_FORCE_IOC;
105
+
106
+ default:
107
+ throw new Error('Unexpected code path: timeInForce');
108
+ }
109
+
110
+ case OrderType.STOP_MARKET:
111
+ case OrderType.TAKE_PROFIT_MARKET:
112
+ if (execution == null) {
113
+ throw new Error('execution must be set if order type is STOP_MARKET or TAKE_PROFIT_MARKET');
114
+ }
115
+ switch (execution) {
116
+ case OrderExecution.DEFAULT:
117
+ throw new Error(
118
+ 'Execution value DEFAULT not supported for STOP_MARKET or TAKE_PROFIT_MARKET',
119
+ );
120
+
121
+ case OrderExecution.POST_ONLY:
122
+ throw new Error(
123
+ 'Execution value POST_ONLY not supported for STOP_MARKET or TAKE_PROFIT_MARKET',
124
+ );
125
+
126
+ case OrderExecution.FOK:
127
+ return Order_TimeInForce.TIME_IN_FORCE_FILL_OR_KILL;
128
+
129
+ case OrderExecution.IOC:
130
+ return Order_TimeInForce.TIME_IN_FORCE_IOC;
131
+
132
+ default:
133
+ throw new Error('Unexpected code path: timeInForce');
134
+ }
135
+
136
+ default:
137
+ throw new Error('Unexpected code path: timeInForce');
138
+ }
139
+ }
140
+
141
+ export function calculateOrderFlags(type: OrderType, timeInForce?: OrderTimeInForce): OrderFlags {
142
+ switch (type) {
143
+ case OrderType.MARKET:
144
+ return OrderFlags.SHORT_TERM;
145
+
146
+ case OrderType.LIMIT:
147
+ if (timeInForce === undefined) {
148
+ throw new Error('timeInForce must be set if orderType is LIMIT');
149
+ }
150
+ if (timeInForce === OrderTimeInForce.GTT) {
151
+ return OrderFlags.LONG_TERM;
152
+ } else {
153
+ return OrderFlags.SHORT_TERM;
154
+ }
155
+
156
+ case OrderType.STOP_LIMIT:
157
+ case OrderType.TAKE_PROFIT_LIMIT:
158
+ case OrderType.STOP_MARKET:
159
+ case OrderType.TAKE_PROFIT_MARKET:
160
+ return OrderFlags.CONDITIONAL;
161
+
162
+ default:
163
+ throw new Error('Unexpected code path: orderFlags');
164
+ }
165
+ }
166
+
167
+ export function calculateClientMetadata(orderType: OrderType): number {
168
+ switch (orderType) {
169
+ case OrderType.MARKET:
170
+ case OrderType.STOP_MARKET:
171
+ case OrderType.TAKE_PROFIT_MARKET:
172
+ return 1;
173
+
174
+ default:
175
+ return 0;
176
+ }
177
+ }
178
+
179
+ export function calculateConditionType(orderType: OrderType): Order_ConditionType {
180
+ switch (orderType) {
181
+ case OrderType.LIMIT:
182
+ return Order_ConditionType.CONDITION_TYPE_UNSPECIFIED;
183
+
184
+ case OrderType.MARKET:
185
+ return Order_ConditionType.CONDITION_TYPE_UNSPECIFIED;
186
+
187
+ case OrderType.STOP_LIMIT:
188
+ case OrderType.STOP_MARKET:
189
+ return Order_ConditionType.CONDITION_TYPE_STOP_LOSS;
190
+
191
+ case OrderType.TAKE_PROFIT_LIMIT:
192
+ case OrderType.TAKE_PROFIT_MARKET:
193
+ return Order_ConditionType.CONDITION_TYPE_TAKE_PROFIT;
194
+
195
+ default:
196
+ return Order_ConditionType.CONDITION_TYPE_UNSPECIFIED;
197
+ }
198
+ }
199
+
200
+ export function calculateConditionalOrderTriggerSubticks(
201
+ orderType: OrderType,
202
+ atomicResolution: number,
203
+ quantumConversionExponent: number,
204
+ subticksPerTick: number,
205
+ triggerPrice?: number,
206
+ ): Long {
207
+ switch (orderType) {
208
+ case OrderType.LIMIT:
209
+ case OrderType.MARKET:
210
+ return Long.fromNumber(0);
211
+
212
+ case OrderType.STOP_LIMIT:
213
+ case OrderType.STOP_MARKET:
214
+ case OrderType.TAKE_PROFIT_LIMIT:
215
+ case OrderType.TAKE_PROFIT_MARKET:
216
+ if (triggerPrice === undefined) {
217
+ throw new Error(
218
+ 'triggerPrice must be set if orderType is STOP_LIMIT, STOP_MARKET, TAKE_PROFIT_LIMIT, or TAKE_PROFIT_MARKET',
219
+ );
220
+ }
221
+ return calculateSubticks(
222
+ triggerPrice,
223
+ atomicResolution,
224
+ quantumConversionExponent,
225
+ subticksPerTick,
226
+ );
227
+
228
+ default:
229
+ return Long.fromNumber(0);
230
+ }
231
+ }
@@ -0,0 +1,71 @@
1
+ import Long from "long";
2
+
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ export function generateQueryPath(url: string, params: {}): string {
5
+ const definedEntries = Object.entries(params).filter(
6
+ ([_key, value]: [string, unknown]) => value !== undefined,
7
+ );
8
+
9
+ if (!definedEntries.length) {
10
+ return url;
11
+ }
12
+
13
+ const paramsString = definedEntries
14
+ .map(([key, value]: [string, unknown]) => `${key}=${value}`)
15
+ .join('&');
16
+ return `${url}?${paramsString}`;
17
+ }
18
+
19
+ export function parseToPrimitives<T>(x: T): T {
20
+ if (typeof x === 'number' || typeof x === 'string' || typeof x === 'boolean' || x === null) {
21
+ return x;
22
+ }
23
+
24
+ if (Array.isArray(x)) {
25
+ return x.map((item) => parseToPrimitives(item)) as T;
26
+ }
27
+
28
+ if (Long.isLong(x)) {
29
+ return x.toString() as T;
30
+ }
31
+
32
+ if (x instanceof Uint8Array) {
33
+ return bytesToBigInt(x).toString() as T;
34
+ }
35
+
36
+ if (x instanceof Date) {
37
+ return x.toString() as T;
38
+ }
39
+
40
+ if (typeof x === 'object') {
41
+ const parsedObj: { [key: string]: any } = {};
42
+ // eslint-disable-next-line no-restricted-syntax
43
+ for (const key in x) {
44
+ if (Object.prototype.hasOwnProperty.call(x, key)) {
45
+ parsedObj[key] = parseToPrimitives((x as any)[key]);
46
+ }
47
+ }
48
+ return parsedObj as T;
49
+ }
50
+
51
+ if (typeof x === 'bigint') {
52
+ return x.toString() as T;
53
+ }
54
+
55
+ throw new Error(`Unsupported data type: ${typeof x}`);
56
+ }
57
+
58
+ /**
59
+ * Converts a byte array (representing an arbitrary-size signed integer) into a bigint.
60
+ * @param u Array of bytes represented as a Uint8Array.
61
+ */
62
+ function bytesToBigInt(u: Uint8Array): bigint {
63
+ if (u.length <= 1) {
64
+ return BigInt(0);
65
+ }
66
+ // eslint-disable-next-line no-bitwise
67
+ const negated: boolean = (u[0] & 1) === 1;
68
+ const hex: string = Buffer.from(u.slice(1)).toString('hex');
69
+ const abs: bigint = BigInt(`0x${hex}`);
70
+ return negated ? -abs : abs;
71
+ }