@perpx/js-sdk 0.0.1

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 (344) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +97 -0
  3. package/build/cjs/__tests__/clients/composite-client.test.js +130 -0
  4. package/build/cjs/__tests__/helpers/baseClients.js +29 -0
  5. package/build/cjs/__tests__/helpers/constants.js +110 -0
  6. package/build/cjs/__tests__/lib/helpers.test.js +45 -0
  7. package/build/cjs/__tests__/lib/util.test.js +67 -0
  8. package/build/cjs/__tests__/lib/validation.test.js +254 -0
  9. package/build/cjs/__tests__/modules/client/AccountEndpoints.test.js +186 -0
  10. package/build/cjs/__tests__/modules/client/FaucetEndpoint.test.js +15 -0
  11. package/build/cjs/__tests__/modules/client/MarketsEndpoints.test.js +69 -0
  12. package/build/cjs/__tests__/modules/client/Transfers.test.js +69 -0
  13. package/build/cjs/__tests__/modules/client/UtilityEndpoints.test.js +28 -0
  14. package/build/cjs/__tests__/modules/client/ValidatorGetEndpoints.test.js +46 -0
  15. package/build/cjs/__tests__/modules/client/ValidatorPostEndpoints.test.js +61 -0
  16. package/build/cjs/__tests__/modules/client/constants.js +7 -0
  17. package/build/cjs/__tests__/modules/onboarding.test.js +51 -0
  18. package/build/cjs/examples/account_endpoints.js +129 -0
  19. package/build/cjs/examples/batch_cancel_orders_example.js +93 -0
  20. package/build/cjs/examples/composite_example.js +50 -0
  21. package/build/cjs/examples/constants.js +35 -0
  22. package/build/cjs/examples/faucet_endpoint.js +23 -0
  23. package/build/cjs/examples/gov_add_new_market.js +77 -0
  24. package/build/cjs/examples/human_readable_orders.json +86 -0
  25. package/build/cjs/examples/human_readable_short_term_orders.json +42 -0
  26. package/build/cjs/examples/json-encoding.js +32 -0
  27. package/build/cjs/examples/long_term_order_cancel_example.js +63 -0
  28. package/build/cjs/examples/markets_endpoints.js +134 -0
  29. package/build/cjs/examples/native_examples.js +112 -0
  30. package/build/cjs/examples/noble_example.js +88 -0
  31. package/build/cjs/examples/optimal_node.js +70 -0
  32. package/build/cjs/examples/permissioned_keys_example.js +104 -0
  33. package/build/cjs/examples/raw_orders.json +130 -0
  34. package/build/cjs/examples/short_term_order_cancel_example.js +54 -0
  35. package/build/cjs/examples/short_term_order_composite_example.js +68 -0
  36. package/build/cjs/examples/test.js +50 -0
  37. package/build/cjs/examples/transfer_example_deposit.js +29 -0
  38. package/build/cjs/examples/transfer_example_send.js +42 -0
  39. package/build/cjs/examples/transfer_example_subaccount_transfer.js +29 -0
  40. package/build/cjs/examples/transfer_example_withdraw.js +30 -0
  41. package/build/cjs/examples/transfer_example_withdraw_other.js +42 -0
  42. package/build/cjs/examples/utility_endpoints.js +42 -0
  43. package/build/cjs/examples/validator_get_example.js +158 -0
  44. package/build/cjs/examples/validator_post_example.js +76 -0
  45. package/build/cjs/examples/wallet_address.js +22 -0
  46. package/build/cjs/examples/websocket_example.js +36 -0
  47. package/build/cjs/examples/websocket_orderbook_example.js +196 -0
  48. package/build/cjs/package.json +1 -0
  49. package/build/cjs/src/clients/composite-client.js +839 -0
  50. package/build/cjs/src/clients/constants.js +288 -0
  51. package/build/cjs/src/clients/faucet-client.js +36 -0
  52. package/build/cjs/src/clients/helpers/chain-helpers.js +178 -0
  53. package/build/cjs/src/clients/helpers/request-helpers.js +65 -0
  54. package/build/cjs/src/clients/indexer-client.js +56 -0
  55. package/build/cjs/src/clients/lib/axios/axiosRequest.js +34 -0
  56. package/build/cjs/src/clients/lib/axios/errors.js +28 -0
  57. package/build/cjs/src/clients/lib/axios/index.js +23 -0
  58. package/build/cjs/src/clients/lib/axios/types.js +11 -0
  59. package/build/cjs/src/clients/lib/cctpProto.js +3242 -0
  60. package/build/cjs/src/clients/lib/errors.js +58 -0
  61. package/build/cjs/src/clients/lib/registry.js +52 -0
  62. package/build/cjs/src/clients/modules/account.js +223 -0
  63. package/build/cjs/src/clients/modules/composer.js +419 -0
  64. package/build/cjs/src/clients/modules/get.js +442 -0
  65. package/build/cjs/src/clients/modules/local-wallet.js +82 -0
  66. package/build/cjs/src/clients/modules/markets.js +54 -0
  67. package/build/cjs/src/clients/modules/post.js +412 -0
  68. package/build/cjs/src/clients/modules/proto-includes.js +69 -0
  69. package/build/cjs/src/clients/modules/rest.js +41 -0
  70. package/build/cjs/src/clients/modules/signer.js +93 -0
  71. package/build/cjs/src/clients/modules/tendermintClient.js +137 -0
  72. package/build/cjs/src/clients/modules/utility.js +52 -0
  73. package/build/cjs/src/clients/modules/vault.js +25 -0
  74. package/build/cjs/src/clients/native.js +1330 -0
  75. package/build/cjs/src/clients/noble-client.js +96 -0
  76. package/build/cjs/src/clients/socket-client.js +304 -0
  77. package/build/cjs/src/clients/subaccount.js +45 -0
  78. package/build/cjs/src/clients/types.js +43 -0
  79. package/build/cjs/src/clients/validator-client.js +87 -0
  80. package/build/cjs/src/index.js +73 -0
  81. package/build/cjs/src/lib/constants.js +23 -0
  82. package/build/cjs/src/lib/errors.js +37 -0
  83. package/build/cjs/src/lib/helpers.js +108 -0
  84. package/build/cjs/src/lib/onboarding.js +75 -0
  85. package/build/cjs/src/lib/trading-key-utils.js +120 -0
  86. package/build/cjs/src/lib/utils.js +89 -0
  87. package/build/cjs/src/lib/validation.js +159 -0
  88. package/build/cjs/src/network_optimizer.js +109 -0
  89. package/build/cjs/src/types.js +25 -0
  90. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  91. package/build/esm/__tests__/clients/composite-client.test.d.ts +2 -0
  92. package/build/esm/__tests__/clients/composite-client.test.d.ts.map +1 -0
  93. package/build/esm/__tests__/clients/composite-client.test.js +128 -0
  94. package/build/esm/__tests__/helpers/baseClients.d.ts +19 -0
  95. package/build/esm/__tests__/helpers/baseClients.d.ts.map +1 -0
  96. package/build/esm/__tests__/helpers/baseClients.js +22 -0
  97. package/build/esm/__tests__/helpers/constants.d.ts +19 -0
  98. package/build/esm/__tests__/helpers/constants.d.ts.map +1 -0
  99. package/build/esm/__tests__/helpers/constants.js +104 -0
  100. package/build/esm/__tests__/lib/helpers.test.d.ts +2 -0
  101. package/build/esm/__tests__/lib/helpers.test.d.ts.map +1 -0
  102. package/build/esm/__tests__/lib/helpers.test.js +40 -0
  103. package/build/esm/__tests__/lib/util.test.d.ts +2 -0
  104. package/build/esm/__tests__/lib/util.test.d.ts.map +1 -0
  105. package/build/esm/__tests__/lib/util.test.js +65 -0
  106. package/build/esm/__tests__/lib/validation.test.d.ts +2 -0
  107. package/build/esm/__tests__/lib/validation.test.d.ts.map +1 -0
  108. package/build/esm/__tests__/lib/validation.test.js +249 -0
  109. package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts +2 -0
  110. package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts.map +1 -0
  111. package/build/esm/__tests__/modules/client/AccountEndpoints.test.js +181 -0
  112. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts +2 -0
  113. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts.map +1 -0
  114. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.js +13 -0
  115. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts +2 -0
  116. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts.map +1 -0
  117. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.js +66 -0
  118. package/build/esm/__tests__/modules/client/Transfers.test.d.ts +2 -0
  119. package/build/esm/__tests__/modules/client/Transfers.test.d.ts.map +1 -0
  120. package/build/esm/__tests__/modules/client/Transfers.test.js +64 -0
  121. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts +2 -0
  122. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts.map +1 -0
  123. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.js +26 -0
  124. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts +2 -0
  125. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts.map +1 -0
  126. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.js +44 -0
  127. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts +2 -0
  128. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts.map +1 -0
  129. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.js +56 -0
  130. package/build/esm/__tests__/modules/client/constants.d.ts +4 -0
  131. package/build/esm/__tests__/modules/client/constants.d.ts.map +1 -0
  132. package/build/esm/__tests__/modules/client/constants.js +4 -0
  133. package/build/esm/__tests__/modules/onboarding.test.d.ts +2 -0
  134. package/build/esm/__tests__/modules/onboarding.test.d.ts.map +1 -0
  135. package/build/esm/__tests__/modules/onboarding.test.js +49 -0
  136. package/build/esm/examples/account_endpoints.d.ts +5 -0
  137. package/build/esm/examples/account_endpoints.d.ts.map +1 -0
  138. package/build/esm/examples/account_endpoints.js +127 -0
  139. package/build/esm/examples/batch_cancel_orders_example.d.ts +2 -0
  140. package/build/esm/examples/batch_cancel_orders_example.d.ts.map +1 -0
  141. package/build/esm/examples/batch_cancel_orders_example.js +88 -0
  142. package/build/esm/examples/composite_example.d.ts +2 -0
  143. package/build/esm/examples/composite_example.d.ts.map +1 -0
  144. package/build/esm/examples/composite_example.js +45 -0
  145. package/build/esm/examples/constants.d.ts +13 -0
  146. package/build/esm/examples/constants.d.ts.map +1 -0
  147. package/build/esm/examples/constants.js +29 -0
  148. package/build/esm/examples/faucet_endpoint.d.ts +5 -0
  149. package/build/esm/examples/faucet_endpoint.d.ts.map +1 -0
  150. package/build/esm/examples/faucet_endpoint.js +21 -0
  151. package/build/esm/examples/gov_add_new_market.d.ts +2 -0
  152. package/build/esm/examples/gov_add_new_market.d.ts.map +1 -0
  153. package/build/esm/examples/gov_add_new_market.js +72 -0
  154. package/build/esm/examples/human_readable_orders.json +86 -0
  155. package/build/esm/examples/human_readable_short_term_orders.json +42 -0
  156. package/build/esm/examples/json-encoding.d.ts +2 -0
  157. package/build/esm/examples/json-encoding.d.ts.map +1 -0
  158. package/build/esm/examples/json-encoding.js +27 -0
  159. package/build/esm/examples/long_term_order_cancel_example.d.ts +2 -0
  160. package/build/esm/examples/long_term_order_cancel_example.d.ts.map +1 -0
  161. package/build/esm/examples/long_term_order_cancel_example.js +58 -0
  162. package/build/esm/examples/markets_endpoints.d.ts +5 -0
  163. package/build/esm/examples/markets_endpoints.d.ts.map +1 -0
  164. package/build/esm/examples/markets_endpoints.js +131 -0
  165. package/build/esm/examples/native_examples.d.ts +2 -0
  166. package/build/esm/examples/native_examples.d.ts.map +1 -0
  167. package/build/esm/examples/native_examples.js +110 -0
  168. package/build/esm/examples/noble_example.d.ts +2 -0
  169. package/build/esm/examples/noble_example.d.ts.map +1 -0
  170. package/build/esm/examples/noble_example.js +83 -0
  171. package/build/esm/examples/optimal_node.d.ts +2 -0
  172. package/build/esm/examples/optimal_node.d.ts.map +1 -0
  173. package/build/esm/examples/optimal_node.js +68 -0
  174. package/build/esm/examples/permissioned_keys_example.d.ts +2 -0
  175. package/build/esm/examples/permissioned_keys_example.d.ts.map +1 -0
  176. package/build/esm/examples/permissioned_keys_example.js +99 -0
  177. package/build/esm/examples/raw_orders.json +130 -0
  178. package/build/esm/examples/short_term_order_cancel_example.d.ts +2 -0
  179. package/build/esm/examples/short_term_order_cancel_example.d.ts.map +1 -0
  180. package/build/esm/examples/short_term_order_cancel_example.js +49 -0
  181. package/build/esm/examples/short_term_order_composite_example.d.ts +2 -0
  182. package/build/esm/examples/short_term_order_composite_example.d.ts.map +1 -0
  183. package/build/esm/examples/short_term_order_composite_example.js +63 -0
  184. package/build/esm/examples/test.d.ts +2 -0
  185. package/build/esm/examples/test.d.ts.map +1 -0
  186. package/build/esm/examples/test.js +45 -0
  187. package/build/esm/examples/transfer_example_deposit.d.ts +2 -0
  188. package/build/esm/examples/transfer_example_deposit.d.ts.map +1 -0
  189. package/build/esm/examples/transfer_example_deposit.js +24 -0
  190. package/build/esm/examples/transfer_example_send.d.ts +2 -0
  191. package/build/esm/examples/transfer_example_send.d.ts.map +1 -0
  192. package/build/esm/examples/transfer_example_send.js +37 -0
  193. package/build/esm/examples/transfer_example_subaccount_transfer.d.ts +2 -0
  194. package/build/esm/examples/transfer_example_subaccount_transfer.d.ts.map +1 -0
  195. package/build/esm/examples/transfer_example_subaccount_transfer.js +24 -0
  196. package/build/esm/examples/transfer_example_withdraw.d.ts +2 -0
  197. package/build/esm/examples/transfer_example_withdraw.d.ts.map +1 -0
  198. package/build/esm/examples/transfer_example_withdraw.js +25 -0
  199. package/build/esm/examples/transfer_example_withdraw_other.d.ts +2 -0
  200. package/build/esm/examples/transfer_example_withdraw_other.d.ts.map +1 -0
  201. package/build/esm/examples/transfer_example_withdraw_other.js +37 -0
  202. package/build/esm/examples/utility_endpoints.d.ts +5 -0
  203. package/build/esm/examples/utility_endpoints.d.ts.map +1 -0
  204. package/build/esm/examples/utility_endpoints.js +40 -0
  205. package/build/esm/examples/validator_get_example.d.ts +2 -0
  206. package/build/esm/examples/validator_get_example.d.ts.map +1 -0
  207. package/build/esm/examples/validator_get_example.js +156 -0
  208. package/build/esm/examples/validator_post_example.d.ts +2 -0
  209. package/build/esm/examples/validator_post_example.d.ts.map +1 -0
  210. package/build/esm/examples/validator_post_example.js +71 -0
  211. package/build/esm/examples/wallet_address.d.ts +2 -0
  212. package/build/esm/examples/wallet_address.d.ts.map +1 -0
  213. package/build/esm/examples/wallet_address.js +17 -0
  214. package/build/esm/examples/websocket_example.d.ts +2 -0
  215. package/build/esm/examples/websocket_example.d.ts.map +1 -0
  216. package/build/esm/examples/websocket_example.js +34 -0
  217. package/build/esm/examples/websocket_orderbook_example.d.ts +2 -0
  218. package/build/esm/examples/websocket_orderbook_example.d.ts.map +1 -0
  219. package/build/esm/examples/websocket_orderbook_example.js +194 -0
  220. package/build/esm/src/clients/composite-client.d.ts +457 -0
  221. package/build/esm/src/clients/composite-client.d.ts.map +1 -0
  222. package/build/esm/src/clients/composite-client.js +832 -0
  223. package/build/esm/src/clients/constants.d.ts +173 -0
  224. package/build/esm/src/clients/constants.d.ts.map +1 -0
  225. package/build/esm/src/clients/constants.js +264 -0
  226. package/build/esm/src/clients/faucet-client.d.ts +18 -0
  227. package/build/esm/src/clients/faucet-client.d.ts.map +1 -0
  228. package/build/esm/src/clients/faucet-client.js +29 -0
  229. package/build/esm/src/clients/helpers/chain-helpers.d.ts +15 -0
  230. package/build/esm/src/clients/helpers/chain-helpers.d.ts.map +1 -0
  231. package/build/esm/src/clients/helpers/chain-helpers.js +163 -0
  232. package/build/esm/src/clients/helpers/request-helpers.d.ts +3 -0
  233. package/build/esm/src/clients/helpers/request-helpers.d.ts.map +1 -0
  234. package/build/esm/src/clients/helpers/request-helpers.js +58 -0
  235. package/build/esm/src/clients/indexer-client.d.ts +40 -0
  236. package/build/esm/src/clients/indexer-client.d.ts.map +1 -0
  237. package/build/esm/src/clients/indexer-client.js +49 -0
  238. package/build/esm/src/clients/lib/axios/axiosRequest.d.ts +9 -0
  239. package/build/esm/src/clients/lib/axios/axiosRequest.d.ts.map +1 -0
  240. package/build/esm/src/clients/lib/axios/axiosRequest.js +28 -0
  241. package/build/esm/src/clients/lib/axios/errors.d.ts +31 -0
  242. package/build/esm/src/clients/lib/axios/errors.d.ts.map +1 -0
  243. package/build/esm/src/clients/lib/axios/errors.js +23 -0
  244. package/build/esm/src/clients/lib/axios/index.d.ts +7 -0
  245. package/build/esm/src/clients/lib/axios/index.d.ts.map +1 -0
  246. package/build/esm/src/clients/lib/axios/index.js +7 -0
  247. package/build/esm/src/clients/lib/axios/types.d.ts +12 -0
  248. package/build/esm/src/clients/lib/axios/types.d.ts.map +1 -0
  249. package/build/esm/src/clients/lib/axios/types.js +8 -0
  250. package/build/esm/src/clients/lib/cctpProto.d.ts +670 -0
  251. package/build/esm/src/clients/lib/cctpProto.d.ts.map +1 -0
  252. package/build/esm/src/clients/lib/cctpProto.js +3234 -0
  253. package/build/esm/src/clients/lib/errors.d.ts +36 -0
  254. package/build/esm/src/clients/lib/errors.d.ts.map +1 -0
  255. package/build/esm/src/clients/lib/errors.js +50 -0
  256. package/build/esm/src/clients/lib/registry.d.ts +4 -0
  257. package/build/esm/src/clients/lib/registry.d.ts.map +1 -0
  258. package/build/esm/src/clients/lib/registry.js +48 -0
  259. package/build/esm/src/clients/modules/account.d.ts +30 -0
  260. package/build/esm/src/clients/modules/account.d.ts.map +1 -0
  261. package/build/esm/src/clients/modules/account.js +217 -0
  262. package/build/esm/src/clients/modules/composer.d.ts +38 -0
  263. package/build/esm/src/clients/modules/composer.d.ts.map +1 -0
  264. package/build/esm/src/clients/modules/composer.js +412 -0
  265. package/build/esm/src/clients/modules/get.d.ts +199 -0
  266. package/build/esm/src/clients/modules/get.d.ts.map +1 -0
  267. package/build/esm/src/clients/modules/get.js +402 -0
  268. package/build/esm/src/clients/modules/local-wallet.d.ts +42 -0
  269. package/build/esm/src/clients/modules/local-wallet.d.ts.map +1 -0
  270. package/build/esm/src/clients/modules/local-wallet.js +76 -0
  271. package/build/esm/src/clients/modules/markets.d.ts +14 -0
  272. package/build/esm/src/clients/modules/markets.d.ts.map +1 -0
  273. package/build/esm/src/clients/modules/markets.js +48 -0
  274. package/build/esm/src/clients/modules/post.d.ts +137 -0
  275. package/build/esm/src/clients/modules/post.d.ts.map +1 -0
  276. package/build/esm/src/clients/modules/post.js +405 -0
  277. package/build/esm/src/clients/modules/proto-includes.d.ts +30 -0
  278. package/build/esm/src/clients/modules/proto-includes.d.ts.map +1 -0
  279. package/build/esm/src/clients/modules/proto-includes.js +30 -0
  280. package/build/esm/src/clients/modules/rest.d.ts +13 -0
  281. package/build/esm/src/clients/modules/rest.d.ts.map +1 -0
  282. package/build/esm/src/clients/modules/rest.js +35 -0
  283. package/build/esm/src/clients/modules/signer.d.ts +19 -0
  284. package/build/esm/src/clients/modules/signer.d.ts.map +1 -0
  285. package/build/esm/src/clients/modules/signer.js +86 -0
  286. package/build/esm/src/clients/modules/tendermintClient.d.ts +52 -0
  287. package/build/esm/src/clients/modules/tendermintClient.d.ts.map +1 -0
  288. package/build/esm/src/clients/modules/tendermintClient.js +133 -0
  289. package/build/esm/src/clients/modules/utility.d.ts +32 -0
  290. package/build/esm/src/clients/modules/utility.d.ts.map +1 -0
  291. package/build/esm/src/clients/modules/utility.js +46 -0
  292. package/build/esm/src/clients/modules/vault.d.ts +12 -0
  293. package/build/esm/src/clients/modules/vault.d.ts.map +1 -0
  294. package/build/esm/src/clients/modules/vault.js +19 -0
  295. package/build/esm/src/clients/native.d.ts +75 -0
  296. package/build/esm/src/clients/native.d.ts.map +1 -0
  297. package/build/esm/src/clients/native.js +1237 -0
  298. package/build/esm/src/clients/noble-client.d.ts +39 -0
  299. package/build/esm/src/clients/noble-client.d.ts.map +1 -0
  300. package/build/esm/src/clients/noble-client.js +92 -0
  301. package/build/esm/src/clients/socket-client.d.ts +149 -0
  302. package/build/esm/src/clients/socket-client.d.ts.map +1 -0
  303. package/build/esm/src/clients/socket-client.js +297 -0
  304. package/build/esm/src/clients/subaccount.d.ts +26 -0
  305. package/build/esm/src/clients/subaccount.d.ts.map +1 -0
  306. package/build/esm/src/clients/subaccount.js +41 -0
  307. package/build/esm/src/clients/types.d.ts +139 -0
  308. package/build/esm/src/clients/types.d.ts.map +1 -0
  309. package/build/esm/src/clients/types.js +26 -0
  310. package/build/esm/src/clients/validator-client.d.ts +41 -0
  311. package/build/esm/src/clients/validator-client.d.ts.map +1 -0
  312. package/build/esm/src/clients/validator-client.js +80 -0
  313. package/build/esm/src/index.d.ts +17 -0
  314. package/build/esm/src/index.d.ts.map +1 -0
  315. package/build/esm/src/index.js +19 -0
  316. package/build/esm/src/lib/constants.d.ts +13 -0
  317. package/build/esm/src/lib/constants.d.ts.map +1 -0
  318. package/build/esm/src/lib/constants.js +20 -0
  319. package/build/esm/src/lib/errors.d.ts +23 -0
  320. package/build/esm/src/lib/errors.d.ts.map +1 -0
  321. package/build/esm/src/lib/errors.js +31 -0
  322. package/build/esm/src/lib/helpers.d.ts +32 -0
  323. package/build/esm/src/lib/helpers.d.ts.map +1 -0
  324. package/build/esm/src/lib/helpers.js +98 -0
  325. package/build/esm/src/lib/onboarding.d.ts +46 -0
  326. package/build/esm/src/lib/onboarding.d.ts.map +1 -0
  327. package/build/esm/src/lib/onboarding.js +69 -0
  328. package/build/esm/src/lib/trading-key-utils.d.ts +37 -0
  329. package/build/esm/src/lib/trading-key-utils.d.ts.map +1 -0
  330. package/build/esm/src/lib/trading-key-utils.js +111 -0
  331. package/build/esm/src/lib/utils.d.ts +49 -0
  332. package/build/esm/src/lib/utils.d.ts.map +1 -0
  333. package/build/esm/src/lib/utils.js +79 -0
  334. package/build/esm/src/lib/validation.d.ts +35 -0
  335. package/build/esm/src/lib/validation.d.ts.map +1 -0
  336. package/build/esm/src/lib/validation.js +147 -0
  337. package/build/esm/src/network_optimizer.d.ts +21 -0
  338. package/build/esm/src/network_optimizer.d.ts.map +1 -0
  339. package/build/esm/src/network_optimizer.js +104 -0
  340. package/build/esm/src/types.d.ts +26 -0
  341. package/build/esm/src/types.d.ts.map +1 -0
  342. package/build/esm/src/types.js +8 -0
  343. package/build/esm/tsconfig.esm.tsbuildinfo +1 -0
  344. package/package.json +129 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const types_1 = require("../../src/types");
7
+ const constants_1 = require("../../src/lib/constants");
8
+ const errors_1 = require("../../src/lib/errors");
9
+ const validation_1 = require("../../src/lib/validation");
10
+ const constants_2 = require("../helpers/constants");
11
+ const long_1 = __importDefault(require("long"));
12
+ const MAX_UINT_32_PLUS_1 = constants_1.MAX_UINT_32 + 1;
13
+ const MAX_SUBACCOUNT_NUMBER_PLUS_1 = constants_1.MAX_SUBACCOUNT_NUMBER + 1;
14
+ describe('Validations', () => {
15
+ it.each([
16
+ ['valid', constants_2.defaultOrder, undefined],
17
+ ['0 value clientId', { ...constants_2.defaultOrder, clientId: 0 }, undefined],
18
+ [
19
+ 'underflow clientId',
20
+ { ...constants_2.defaultOrder, clientId: -1 },
21
+ new errors_1.UserError(`clientId: ${-1} is not a valid uint32`),
22
+ ],
23
+ [
24
+ 'overflow clientId',
25
+ { ...constants_2.defaultOrder, clientId: MAX_UINT_32_PLUS_1 },
26
+ new errors_1.UserError(`clientId: ${MAX_UINT_32_PLUS_1} is not a valid uint32`),
27
+ ],
28
+ [
29
+ 'underflow quantums',
30
+ { ...constants_2.defaultOrder, quantums: long_1.default.NEG_ONE },
31
+ new errors_1.UserError(`quantums: ${-1} cannot be <= 0`),
32
+ ],
33
+ [
34
+ 'underflow goodTilBlock',
35
+ { ...constants_2.defaultOrder, goodTilBlock: -1 },
36
+ new errors_1.UserError(`goodTilBlock: ${-1} is not a valid uint32 or is 0`),
37
+ ],
38
+ [
39
+ 'overflow goodTilBlock',
40
+ { ...constants_2.defaultOrder, goodTilBlock: MAX_UINT_32_PLUS_1 },
41
+ new errors_1.UserError(`goodTilBlock: ${MAX_UINT_32_PLUS_1} is not a valid uint32 or is 0`),
42
+ ],
43
+ [
44
+ '0 goodTilBlock',
45
+ { ...constants_2.defaultOrder, goodTilBlock: 0 },
46
+ new errors_1.UserError(`goodTilBlock: ${0} is not a valid uint32 or is 0`),
47
+ ],
48
+ [
49
+ 'underflow subticks',
50
+ { ...constants_2.defaultOrder, subticks: long_1.default.NEG_ONE },
51
+ new errors_1.UserError(`subticks: ${-1} cannot be <= 0`),
52
+ ],
53
+ ])('Validate order: %s', (_name, order, expectedError) => {
54
+ const validationError = (0, validation_1.validatePlaceOrderMessage)(0, order);
55
+ expect(validationError).toEqual(expectedError);
56
+ });
57
+ it.each([
58
+ ['valid', constants_2.defaultCancelOrder, undefined],
59
+ ['0 value clientId', { ...constants_2.defaultCancelOrder, clientId: 0 }, undefined],
60
+ [
61
+ 'underflow clientId',
62
+ { ...constants_2.defaultCancelOrder, clientId: -1 },
63
+ new errors_1.UserError(`clientId: ${-1} is not a valid uint32`),
64
+ ],
65
+ [
66
+ 'overflow clientId',
67
+ { ...constants_2.defaultCancelOrder, clientId: MAX_UINT_32_PLUS_1 },
68
+ new errors_1.UserError(`clientId: ${MAX_UINT_32_PLUS_1} is not a valid uint32`),
69
+ ],
70
+ [
71
+ 'underflow goodTilBlock',
72
+ { ...constants_2.defaultCancelOrder, goodTilBlock: -1 },
73
+ new errors_1.UserError(`goodTilBlock: ${-1} is not a valid uint32 or is 0`),
74
+ ],
75
+ [
76
+ 'overflow goodTilBlock',
77
+ { ...constants_2.defaultCancelOrder, goodTilBlock: MAX_UINT_32_PLUS_1 },
78
+ new errors_1.UserError(`goodTilBlock: ${MAX_UINT_32_PLUS_1} is not a valid uint32 or is 0`),
79
+ ],
80
+ [
81
+ '0 goodTilBlock',
82
+ { ...constants_2.defaultCancelOrder, goodTilBlock: 0 },
83
+ new errors_1.UserError(`goodTilBlock: ${0} is not a valid uint32 or is 0`),
84
+ ],
85
+ [
86
+ 'contains GoodTilBlockTime',
87
+ { ...constants_2.defaultCancelOrder, goodTilBlockTime: 10 },
88
+ new errors_1.UserError('goodTilBlockTime is 10, but should not be set for non-stateful orders'),
89
+ ],
90
+ [
91
+ 'stateful order - valid',
92
+ {
93
+ ...constants_2.defaultCancelOrder,
94
+ orderFlags: types_1.OrderFlags.LONG_TERM,
95
+ goodTilBlock: undefined,
96
+ goodTilBlockTime: 10,
97
+ },
98
+ undefined,
99
+ ],
100
+ [
101
+ 'stateful order - undefined goodTilBlockTime',
102
+ { ...constants_2.defaultCancelOrder, orderFlags: types_1.OrderFlags.LONG_TERM },
103
+ new errors_1.UserError(`goodTilBlockTime: ${undefined} is not a valid uint32 or is 0`),
104
+ ],
105
+ [
106
+ 'stateful order - zero goodTilBlockTime',
107
+ { ...constants_2.defaultCancelOrder, orderFlags: types_1.OrderFlags.LONG_TERM, goodTilBlockTime: 0 },
108
+ new errors_1.UserError(`goodTilBlockTime: ${0} is not a valid uint32 or is 0`),
109
+ ],
110
+ [
111
+ 'stateful order - underflow goodTilBlockTime',
112
+ { ...constants_2.defaultCancelOrder, orderFlags: types_1.OrderFlags.LONG_TERM, goodTilBlockTime: -1 },
113
+ new errors_1.UserError(`goodTilBlockTime: ${-1} is not a valid uint32 or is 0`),
114
+ ],
115
+ [
116
+ 'stateful order - overflow goodTilBlockTime',
117
+ {
118
+ ...constants_2.defaultCancelOrder,
119
+ orderFlags: types_1.OrderFlags.LONG_TERM,
120
+ goodTilBlockTime: MAX_UINT_32_PLUS_1,
121
+ },
122
+ new errors_1.UserError(`goodTilBlockTime: ${MAX_UINT_32_PLUS_1} is not a valid uint32 or is 0`),
123
+ ],
124
+ [
125
+ 'stateful order - has GoodTilBlock',
126
+ {
127
+ ...constants_2.defaultCancelOrder,
128
+ orderFlags: types_1.OrderFlags.LONG_TERM,
129
+ goodTilBlock: 10,
130
+ goodTilBlockTime: 10,
131
+ },
132
+ new errors_1.UserError('goodTilBlock is 10, but should not be set for stateful orders'),
133
+ ],
134
+ ])('Validate cancel order: %s', (_name, order, expectedError) => {
135
+ const validationError = (0, validation_1.validateCancelOrderMessage)(0, order);
136
+ expect(validationError).toEqual(expectedError);
137
+ });
138
+ it.each([
139
+ ['valid', constants_2.defaultBatchCancelOrder, undefined],
140
+ [
141
+ 'overflow clientId',
142
+ {
143
+ ...constants_2.defaultBatchCancelOrder,
144
+ shortTermOrders: [
145
+ ...constants_2.defaultBatchCancelOrder.shortTermOrders,
146
+ {
147
+ clobPairId: types_1.ClobPairId.PERPETUAL_PAIR_ETH_USD,
148
+ clientIds: [MAX_UINT_32_PLUS_1],
149
+ },
150
+ ],
151
+ },
152
+ new errors_1.UserError(`clientId: ${MAX_UINT_32_PLUS_1} is not a valid uint32`),
153
+ ],
154
+ [
155
+ 'underflow goodTilBlock',
156
+ { ...constants_2.defaultBatchCancelOrder, goodTilBlock: -1 },
157
+ new errors_1.UserError(`goodTilBlock: ${-1} is not a valid uint32 or is 0`),
158
+ ],
159
+ [
160
+ 'overflow goodTilBlock',
161
+ { ...constants_2.defaultBatchCancelOrder, goodTilBlock: MAX_UINT_32_PLUS_1 },
162
+ new errors_1.UserError(`goodTilBlock: ${MAX_UINT_32_PLUS_1} is not a valid uint32 or is 0`),
163
+ ],
164
+ [
165
+ '0 goodTilBlock',
166
+ { ...constants_2.defaultBatchCancelOrder, goodTilBlock: 0 },
167
+ new errors_1.UserError(`goodTilBlock: ${0} is not a valid uint32 or is 0`),
168
+ ],
169
+ ])('Validate batch cancel orders: %s', (_name, orders, expectedError) => {
170
+ const validationError = (0, validation_1.validateBatchCancelOrderMessage)(0, orders);
171
+ expect(validationError).toEqual(expectedError);
172
+ });
173
+ it.each([
174
+ ['valid', constants_2.defaultTransfer, undefined],
175
+ [
176
+ 'underflow senderSubaccountNumber',
177
+ { ...constants_2.defaultTransfer, sender: { owner: constants_2.TEST_ADDRESS, number: -1 } },
178
+ new errors_1.UserError(`senderSubaccountNumber: ${-1} cannot be < 0 or > ${constants_1.MAX_SUBACCOUNT_NUMBER}`),
179
+ ],
180
+ [
181
+ 'exceeds max subaccount number - senderSubaccountNumber',
182
+ { ...constants_2.defaultTransfer, sender: { owner: constants_2.TEST_ADDRESS, number: MAX_SUBACCOUNT_NUMBER_PLUS_1 } },
183
+ new errors_1.UserError(`senderSubaccountNumber: ${MAX_SUBACCOUNT_NUMBER_PLUS_1} cannot be < 0 or > ${constants_1.MAX_SUBACCOUNT_NUMBER}`),
184
+ ],
185
+ [
186
+ '0 senderSubaccountNumber',
187
+ { ...constants_2.defaultTransfer, sender: { owner: constants_2.TEST_ADDRESS, number: 0 } },
188
+ undefined,
189
+ ],
190
+ [
191
+ 'underflow recipientSubaccountNumber',
192
+ { ...constants_2.defaultTransfer, recipient: { owner: constants_2.TEST_ADDRESS, number: -1 } },
193
+ new errors_1.UserError(`recipientSubaccountNumber: ${-1} cannot be < 0 or > ${constants_1.MAX_SUBACCOUNT_NUMBER}`),
194
+ ],
195
+ [
196
+ 'exceeds max subaccount number - recipient.subaccountNumber',
197
+ {
198
+ ...constants_2.defaultTransfer,
199
+ recipient: { owner: constants_2.TEST_ADDRESS, number: MAX_SUBACCOUNT_NUMBER_PLUS_1 },
200
+ },
201
+ new errors_1.UserError(`recipientSubaccountNumber: ${MAX_SUBACCOUNT_NUMBER_PLUS_1} cannot be < 0 or > ${constants_1.MAX_SUBACCOUNT_NUMBER}`),
202
+ ],
203
+ [
204
+ '0 recipientSubaccountNumber',
205
+ { ...constants_2.defaultTransfer, recipient: { owner: constants_2.TEST_ADDRESS, number: 0 } },
206
+ undefined,
207
+ ],
208
+ [
209
+ 'non-zero asset id',
210
+ { ...constants_2.defaultTransfer, assetId: 1 },
211
+ new errors_1.UserError(`asset id: ${1} not supported`),
212
+ ],
213
+ [
214
+ '0 amount',
215
+ { ...constants_2.defaultTransfer, amount: long_1.default.ZERO },
216
+ new errors_1.UserError(`amount: ${0} cannot be <= 0`),
217
+ ],
218
+ [
219
+ 'too short recipientAddress',
220
+ {
221
+ ...constants_2.defaultTransfer,
222
+ recipient: {
223
+ owner: 'perpx14063jves4u9zhm7eja5ltf3t8zspxd92qnk23',
224
+ number: 0,
225
+ },
226
+ },
227
+ new errors_1.UserError('Error: Invalid checksum for perpx14063jves4u9zhm7eja5ltf3t8zspxd92qnk23'),
228
+ ],
229
+ [
230
+ 'invalid recipientAddress',
231
+ {
232
+ ...constants_2.defaultTransfer,
233
+ recipient: {
234
+ owner: 'fakeAddress1234',
235
+ number: 0,
236
+ },
237
+ },
238
+ new errors_1.UserError('Error: Mixed-case string fakeAddress1234'),
239
+ ],
240
+ ])('Validate transfer: %s', (_name, transfer, expectedError) => {
241
+ const validationError = (0, validation_1.validateTransferMessage)(transfer);
242
+ expect(validationError).toEqual(expectedError);
243
+ });
244
+ it.each([
245
+ ['valid', 'perpx17xpfvakm2amg962yls6f84z3kell8c5leg8eqc', true],
246
+ ['invalid: does not start with perpx1', 'perpx27xpfvakm2amg962yls6f84z3kell8c5leg8eqc', false],
247
+ ['invalid: too short', 'perpx17xpfvakm2amg962yls6f84z3kell8c5leg8eq', false],
248
+ ['invalid: too long', 'perpx17xpfvakm2amg962yls6f84z3kell8c5leg8eqcs', false],
249
+ ])('Validate address: %s', (_name, address, expectedResult) => {
250
+ const validationResult = (0, validation_1.isValidAddress)(address);
251
+ expect(validationResult).toEqual(expectedResult);
252
+ });
253
+ });
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vX190ZXN0c19fL2xpYi92YWxpZGF0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FPeUI7QUFDekIsdURBQTZFO0FBQzdFLGlEQUFpRDtBQUNqRCx5REFNa0M7QUFDbEMsb0RBTThCO0FBQzlCLGdEQUF3QjtBQUV4QixNQUFNLGtCQUFrQixHQUFXLHVCQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sNEJBQTRCLEdBQVcsaUNBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBRXZFLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixDQUFDLE9BQU8sRUFBRSx3QkFBWSxFQUFFLFNBQVMsQ0FBQztRQUNsQyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsR0FBRyx3QkFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7UUFDakU7WUFDRSxvQkFBb0I7WUFDcEIsRUFBRSxHQUFHLHdCQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksa0JBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztTQUN2RDtRQUNEO1lBQ0UsbUJBQW1CO1lBQ25CLEVBQUUsR0FBRyx3QkFBWSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTtZQUNqRCxJQUFJLGtCQUFTLENBQUMsYUFBYSxrQkFBa0Isd0JBQXdCLENBQUM7U0FDdkU7UUFDRDtZQUNFLG9CQUFvQjtZQUNwQixFQUFFLEdBQUcsd0JBQVksRUFBRSxRQUFRLEVBQUUsY0FBSSxDQUFDLE9BQU8sRUFBRTtZQUMzQyxJQUFJLGtCQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsaUJBQWlCLENBQUM7U0FDaEQ7UUFDRDtZQUNFLHdCQUF3QjtZQUN4QixFQUFFLEdBQUcsd0JBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDckMsSUFBSSxrQkFBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsZ0NBQWdDLENBQUM7U0FDbkU7UUFDRDtZQUNFLHVCQUF1QjtZQUN2QixFQUFFLEdBQUcsd0JBQVksRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUU7WUFDckQsSUFBSSxrQkFBUyxDQUFDLGlCQUFpQixrQkFBa0IsZ0NBQWdDLENBQUM7U0FDbkY7UUFDRDtZQUNFLGdCQUFnQjtZQUNoQixFQUFFLEdBQUcsd0JBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksa0JBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxnQ0FBZ0MsQ0FBQztTQUNsRTtRQUNEO1lBQ0Usb0JBQW9CO1lBQ3BCLEVBQUUsR0FBRyx3QkFBWSxFQUFFLFFBQVEsRUFBRSxjQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNDLElBQUksa0JBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztTQUNoRDtLQUNGLENBQUMsQ0FDQSxvQkFBb0IsRUFDcEIsQ0FBQyxLQUFhLEVBQUUsS0FBa0IsRUFBRSxhQUFvQyxFQUFFLEVBQUU7UUFDMUUsTUFBTSxlQUFlLEdBQXFCLElBQUEsc0NBQXlCLEVBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUNGLENBQUM7SUFFRixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sQ0FBQyxPQUFPLEVBQUUsOEJBQWtCLEVBQUUsU0FBUyxDQUFDO1FBQ3hDLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLDhCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUM7UUFDdkU7WUFDRSxvQkFBb0I7WUFDcEIsRUFBRSxHQUFHLDhCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUN2QyxJQUFJLGtCQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsd0JBQXdCLENBQUM7U0FDdkQ7UUFDRDtZQUNFLG1CQUFtQjtZQUNuQixFQUFFLEdBQUcsOEJBQWtCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFO1lBQ3ZELElBQUksa0JBQVMsQ0FBQyxhQUFhLGtCQUFrQix3QkFBd0IsQ0FBQztTQUN2RTtRQUNEO1lBQ0Usd0JBQXdCO1lBQ3hCLEVBQUUsR0FBRyw4QkFBa0IsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxrQkFBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsZ0NBQWdDLENBQUM7U0FDbkU7UUFDRDtZQUNFLHVCQUF1QjtZQUN2QixFQUFFLEdBQUcsOEJBQWtCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO1lBQzNELElBQUksa0JBQVMsQ0FBQyxpQkFBaUIsa0JBQWtCLGdDQUFnQyxDQUFDO1NBQ25GO1FBQ0Q7WUFDRSxnQkFBZ0I7WUFDaEIsRUFBRSxHQUFHLDhCQUFrQixFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxrQkFBUyxDQUFDLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDO1NBQ2xFO1FBQ0Q7WUFDRSwyQkFBMkI7WUFDM0IsRUFBRSxHQUFHLDhCQUFrQixFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRTtZQUMvQyxJQUFJLGtCQUFTLENBQUMsdUVBQXVFLENBQUM7U0FDdkY7UUFDRDtZQUNFLHdCQUF3QjtZQUN4QjtnQkFDRSxHQUFHLDhCQUFrQjtnQkFDckIsVUFBVSxFQUFFLGtCQUFVLENBQUMsU0FBUztnQkFDaEMsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLGdCQUFnQixFQUFFLEVBQUU7YUFDckI7WUFDRCxTQUFTO1NBQ1Y7UUFDRDtZQUNFLDZDQUE2QztZQUM3QyxFQUFFLEdBQUcsOEJBQWtCLEVBQUUsVUFBVSxFQUFFLGtCQUFVLENBQUMsU0FBUyxFQUFFO1lBQzNELElBQUksa0JBQVMsQ0FBQyxxQkFBcUIsU0FBUyxnQ0FBZ0MsQ0FBQztTQUM5RTtRQUNEO1lBQ0Usd0NBQXdDO1lBQ3hDLEVBQUUsR0FBRyw4QkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQVUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFO1lBQ2hGLElBQUksa0JBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQztTQUN0RTtRQUNEO1lBQ0UsNkNBQTZDO1lBQzdDLEVBQUUsR0FBRyw4QkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQVUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDakYsSUFBSSxrQkFBUyxDQUFDLHFCQUFxQixDQUFDLENBQUMsZ0NBQWdDLENBQUM7U0FDdkU7UUFDRDtZQUNFLDRDQUE0QztZQUM1QztnQkFDRSxHQUFHLDhCQUFrQjtnQkFDckIsVUFBVSxFQUFFLGtCQUFVLENBQUMsU0FBUztnQkFDaEMsZ0JBQWdCLEVBQUUsa0JBQWtCO2FBQ3JDO1lBQ0QsSUFBSSxrQkFBUyxDQUFDLHFCQUFxQixrQkFBa0IsZ0NBQWdDLENBQUM7U0FDdkY7UUFDRDtZQUNFLG1DQUFtQztZQUNuQztnQkFDRSxHQUFHLDhCQUFrQjtnQkFDckIsVUFBVSxFQUFFLGtCQUFVLENBQUMsU0FBUztnQkFDaEMsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLGdCQUFnQixFQUFFLEVBQUU7YUFDckI7WUFDRCxJQUFJLGtCQUFTLENBQUMsK0RBQStELENBQUM7U0FDL0U7S0FDRixDQUFDLENBQ0EsMkJBQTJCLEVBQzNCLENBQUMsS0FBYSxFQUFFLEtBQW1CLEVBQUUsYUFBb0MsRUFBRSxFQUFFO1FBQzNFLE1BQU0sZUFBZSxHQUFxQixJQUFBLHVDQUEwQixFQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FDRixDQUFDO0lBRUYsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLENBQUMsT0FBTyxFQUFFLG1DQUF1QixFQUFFLFNBQVMsQ0FBQztRQUM3QztZQUNFLG1CQUFtQjtZQUNuQjtnQkFDRSxHQUFHLG1DQUF1QjtnQkFDMUIsZUFBZSxFQUFFO29CQUNmLEdBQUcsbUNBQXVCLENBQUMsZUFBZTtvQkFDMUM7d0JBQ0UsVUFBVSxFQUFFLGtCQUFVLENBQUMsc0JBQXNCO3dCQUM3QyxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztxQkFDaEM7aUJBQ0Y7YUFDRjtZQUNELElBQUksa0JBQVMsQ0FBQyxhQUFhLGtCQUFrQix3QkFBd0IsQ0FBQztTQUN2RTtRQUNEO1lBQ0Usd0JBQXdCO1lBQ3hCLEVBQUUsR0FBRyxtQ0FBdUIsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxrQkFBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsZ0NBQWdDLENBQUM7U0FDbkU7UUFDRDtZQUNFLHVCQUF1QjtZQUN2QixFQUFFLEdBQUcsbUNBQXVCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFO1lBQ2hFLElBQUksa0JBQVMsQ0FBQyxpQkFBaUIsa0JBQWtCLGdDQUFnQyxDQUFDO1NBQ25GO1FBQ0Q7WUFDRSxnQkFBZ0I7WUFDaEIsRUFBRSxHQUFHLG1DQUF1QixFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxrQkFBUyxDQUFDLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDO1NBQ2xFO0tBQ0YsQ0FBQyxDQUNBLGtDQUFrQyxFQUNsQyxDQUFDLEtBQWEsRUFBRSxNQUF5QixFQUFFLGFBQW9DLEVBQUUsRUFBRTtRQUNqRixNQUFNLGVBQWUsR0FBcUIsSUFBQSw0Q0FBK0IsRUFBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckYsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQ0YsQ0FBQztJQUVGLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixDQUFDLE9BQU8sRUFBRSwyQkFBZSxFQUFFLFNBQVMsQ0FBQztRQUNyQztZQUNFLGtDQUFrQztZQUNsQyxFQUFFLEdBQUcsMkJBQWUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsd0JBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuRSxJQUFJLGtCQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQyx1QkFBdUIsaUNBQXFCLEVBQUUsQ0FBQztTQUMzRjtRQUNEO1lBQ0Usd0RBQXdEO1lBQ3hELEVBQUUsR0FBRywyQkFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSx3QkFBWSxFQUFFLE1BQU0sRUFBRSw0QkFBNEIsRUFBRSxFQUFFO1lBQzdGLElBQUksa0JBQVMsQ0FDWCwyQkFBMkIsNEJBQTRCLHVCQUF1QixpQ0FBcUIsRUFBRSxDQUN0RztTQUNGO1FBQ0Q7WUFDRSwwQkFBMEI7WUFDMUIsRUFBRSxHQUFHLDJCQUFlLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLHdCQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xFLFNBQVM7U0FDVjtRQUNEO1lBQ0UscUNBQXFDO1lBQ3JDLEVBQUUsR0FBRywyQkFBZSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSx3QkFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RFLElBQUksa0JBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLHVCQUF1QixpQ0FBcUIsRUFBRSxDQUFDO1NBQzlGO1FBQ0Q7WUFDRSw0REFBNEQ7WUFDNUQ7Z0JBQ0UsR0FBRywyQkFBZTtnQkFDbEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLHdCQUFZLEVBQUUsTUFBTSxFQUFFLDRCQUE0QixFQUFFO2FBQ3pFO1lBQ0QsSUFBSSxrQkFBUyxDQUNYLDhCQUE4Qiw0QkFBNEIsdUJBQXVCLGlDQUFxQixFQUFFLENBQ3pHO1NBQ0Y7UUFDRDtZQUNFLDZCQUE2QjtZQUM3QixFQUFFLEdBQUcsMkJBQWUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsd0JBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckUsU0FBUztTQUNWO1FBQ0Q7WUFDRSxtQkFBbUI7WUFDbkIsRUFBRSxHQUFHLDJCQUFlLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUNsQyxJQUFJLGtCQUFTLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDO1NBQzlDO1FBQ0Q7WUFDRSxVQUFVO1lBQ1YsRUFBRSxHQUFHLDJCQUFlLEVBQUUsTUFBTSxFQUFFLGNBQUksQ0FBQyxJQUFJLEVBQUU7WUFDekMsSUFBSSxrQkFBUyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztTQUM3QztRQUNEO1lBQ0UsNEJBQTRCO1lBQzVCO2dCQUNFLEdBQUcsMkJBQWU7Z0JBQ2xCLFNBQVMsRUFBRTtvQkFDVCxLQUFLLEVBQUUsNkNBQTZDO29CQUNwRCxNQUFNLEVBQUUsQ0FBQztpQkFDVjthQUNGO1lBQ0QsSUFBSSxrQkFBUyxDQUFDLHlFQUF5RSxDQUFDO1NBQ3pGO1FBQ0Q7WUFDRSwwQkFBMEI7WUFDMUI7Z0JBQ0UsR0FBRywyQkFBZTtnQkFDbEIsU0FBUyxFQUFFO29CQUNULEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLE1BQU0sRUFBRSxDQUFDO2lCQUNWO2FBQ0Y7WUFDRCxJQUFJLGtCQUFTLENBQUMsMENBQTBDLENBQUM7U0FDMUQ7S0FDRixDQUFDLENBQ0EsdUJBQXVCLEVBQ3ZCLENBQUMsS0FBYSxFQUFFLFFBQWtCLEVBQUUsYUFBb0MsRUFBRSxFQUFFO1FBQzFFLE1BQU0sZUFBZSxHQUFxQixJQUFBLG9DQUF1QixFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUNGLENBQUM7SUFFRixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sQ0FBQyxPQUFPLEVBQUUsOENBQThDLEVBQUUsSUFBSSxDQUFDO1FBQy9ELENBQUMscUNBQXFDLEVBQUUsOENBQThDLEVBQUUsS0FBSyxDQUFDO1FBQzlGLENBQUMsb0JBQW9CLEVBQUUsNkNBQTZDLEVBQUUsS0FBSyxDQUFDO1FBQzVFLENBQUMsbUJBQW1CLEVBQUUsK0NBQStDLEVBQUUsS0FBSyxDQUFDO0tBQzlFLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsY0FBdUIsRUFBRSxFQUFFO1FBQ3JGLE1BQU0sZ0JBQWdCLEdBQVksSUFBQSwyQkFBYyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tendermint_rpc_1 = require("@cosmjs/tendermint-rpc");
7
+ const long_1 = __importDefault(require("long"));
8
+ const constants_1 = require("../../../src/clients/constants");
9
+ const indexer_client_1 = require("../../../src/clients/indexer-client");
10
+ const local_wallet_1 = __importDefault(require("../../../src/clients/modules/local-wallet"));
11
+ const subaccount_1 = require("../../../src/clients/subaccount");
12
+ const validator_client_1 = require("../../../src/clients/validator-client");
13
+ const src_1 = require("../../../src");
14
+ const constants_2 = require("./constants");
15
+ describe('IndexerClient', () => {
16
+ const client = new indexer_client_1.IndexerClient(constants_1.Network.testnet().indexerConfig);
17
+ describe('Private Endpoints', () => {
18
+ it('Subaccounts', async () => {
19
+ const response = await client.account.getSubaccounts(constants_2.PERPX_TEST_ADDRESS);
20
+ const subaccounts = response.subaccounts;
21
+ expect(subaccounts.size).not.toBeNull();
22
+ const subaccount0 = subaccounts[0];
23
+ const subaccountNumber = subaccount0.subaccountNumber;
24
+ expect(subaccountNumber).not.toBeNull();
25
+ });
26
+ it('Subaccount 0', async () => {
27
+ // Deposit to subaccount 0 first
28
+ const wallet = await local_wallet_1.default.fromMnemonic(constants_2.PERPX_TEST_MNEMONIC, src_1.BECH32_PREFIX);
29
+ const validatorClient = await validator_client_1.ValidatorClient.connect(constants_1.Network.testnet().validatorConfig);
30
+ const subaccountInfo = subaccount_1.SubaccountInfo.forLocalWallet(wallet, 0);
31
+ const depositTx = await validatorClient.post.deposit(subaccountInfo, 0, new long_1.default(10), tendermint_rpc_1.Method.BroadcastTxCommit);
32
+ expect(depositTx).not.toBeUndefined();
33
+ const response = await client.account.getSubaccount(constants_2.PERPX_TEST_ADDRESS, 0);
34
+ const subaccount = response.subaccount;
35
+ expect(subaccount).not.toBeNull();
36
+ const subaccountNumber = subaccount.subaccountNumber;
37
+ expect(subaccountNumber).not.toBeNull();
38
+ });
39
+ it('Asset Positions', async () => {
40
+ const response = await client.account.getSubaccountAssetPositions(constants_2.PERPX_TEST_ADDRESS, 0);
41
+ expect(response).not.toBeNull();
42
+ const positions = response.positions;
43
+ expect(positions).not.toBeNull();
44
+ if (positions.length > 0) {
45
+ const position = positions[0];
46
+ expect(position).not.toBeNull();
47
+ }
48
+ });
49
+ it('Perpetual Positions', async () => {
50
+ const response = await client.account.getSubaccountPerpetualPositions(constants_2.PERPX_TEST_ADDRESS, 0);
51
+ expect(response).not.toBeNull();
52
+ const positions = response.positions;
53
+ expect(positions).not.toBeNull();
54
+ if (positions.length > 0) {
55
+ const position = positions[0];
56
+ expect(position).not.toBeNull();
57
+ }
58
+ });
59
+ it('Transfers', async () => {
60
+ const response = await client.account.getSubaccountTransfers(constants_2.PERPX_TEST_ADDRESS, 0);
61
+ expect(response).not.toBeNull();
62
+ const transfers = response.transfers;
63
+ expect(transfers).not.toBeNull();
64
+ if (transfers.length > 0) {
65
+ const transfer = transfers[0];
66
+ expect(transfer).not.toBeNull();
67
+ }
68
+ });
69
+ it('Transfers ParentSubaccountNumber', async () => {
70
+ const response = await client.account.getParentSubaccountNumberTransfers(constants_2.PERPX_TEST_ADDRESS, 0);
71
+ expect(response).not.toBeNull();
72
+ const transfers = response.transfers;
73
+ expect(transfers).not.toBeNull();
74
+ if (transfers.length > 0) {
75
+ const transfer = transfers[0];
76
+ expect(transfer).not.toBeNull();
77
+ }
78
+ });
79
+ it('Transfers Pagination', async () => {
80
+ const response = await client.account.getSubaccountTransfers(constants_2.PERPX_TEST_ADDRESS, 0, 1, undefined, undefined, 1);
81
+ expect(response).not.toBeNull();
82
+ const transfers = response.transfers;
83
+ expect(transfers).not.toBeNull();
84
+ if (transfers.length > 0) {
85
+ const transfer = transfers[0];
86
+ expect(transfer).not.toBeNull();
87
+ expect(response.totalResults).toBeGreaterThanOrEqual(1);
88
+ }
89
+ expect(response.pageSize).toStrictEqual(1);
90
+ expect(response.offset).toStrictEqual(0);
91
+ });
92
+ it('Transfers ParentSubaccountNumber Pagination', async () => {
93
+ const response = await client.account.getParentSubaccountNumberTransfers(constants_2.PERPX_TEST_ADDRESS, 0, 1, undefined, undefined, 1);
94
+ expect(response).not.toBeNull();
95
+ const transfers = response.transfers;
96
+ expect(transfers).not.toBeNull();
97
+ if (transfers.length > 0) {
98
+ const transfer = transfers[0];
99
+ expect(transfer).not.toBeNull();
100
+ expect(response.totalResults).toBeGreaterThanOrEqual(1);
101
+ }
102
+ expect(response.pageSize).toStrictEqual(1);
103
+ expect(response.offset).toStrictEqual(0);
104
+ });
105
+ it('Orders', async () => {
106
+ const response = await client.account.getSubaccountOrders(constants_2.PERPX_TEST_ADDRESS, 0);
107
+ expect(response).not.toBeNull();
108
+ const orders = response;
109
+ expect(orders).not.toBeNull();
110
+ if (orders.length > 0) {
111
+ const order = orders[0];
112
+ expect(order).not.toBeNull();
113
+ }
114
+ });
115
+ it('Fills', async () => {
116
+ const response = await client.account.getSubaccountFills(constants_2.PERPX_TEST_ADDRESS, 0);
117
+ expect(response).not.toBeNull();
118
+ const fills = response.fills;
119
+ expect(fills).not.toBeNull();
120
+ if (fills.length > 0) {
121
+ const fill = fills[0];
122
+ expect(fill).not.toBeNull();
123
+ }
124
+ });
125
+ it('Fills ParentSubaccountNumber', async () => {
126
+ const response = await client.account.getParentSubaccountNumberFills(constants_2.PERPX_TEST_ADDRESS, 0);
127
+ expect(response).not.toBeNull();
128
+ const fills = response.fills;
129
+ expect(fills).not.toBeNull();
130
+ if (fills.length > 0) {
131
+ const fill = fills[0];
132
+ expect(fill).not.toBeNull();
133
+ }
134
+ });
135
+ it('Fills Pagination', async () => {
136
+ const response = await client.account.getSubaccountFills(constants_2.PERPX_TEST_ADDRESS, 0, undefined, undefined, 1, undefined, undefined, 1);
137
+ expect(response).not.toBeNull();
138
+ const fills = response.fills;
139
+ expect(fills).not.toBeNull();
140
+ if (fills.length > 0) {
141
+ const fill = fills[0];
142
+ expect(fill).not.toBeNull();
143
+ expect(response.totalResults).toBeGreaterThanOrEqual(1);
144
+ }
145
+ expect(response.pageSize).toStrictEqual(1);
146
+ expect(response.offset).toStrictEqual(0);
147
+ });
148
+ it('Fills ParentSubaccountNumber Pagination', async () => {
149
+ const response = await client.account.getParentSubaccountNumberFills(constants_2.PERPX_TEST_ADDRESS, 0, undefined, undefined, 1, undefined, undefined, 1);
150
+ expect(response).not.toBeNull();
151
+ const fills = response.fills;
152
+ expect(fills).not.toBeNull();
153
+ if (fills.length > 0) {
154
+ const fill = fills[0];
155
+ expect(fill).not.toBeNull();
156
+ expect(response.totalResults).toBeGreaterThanOrEqual(1);
157
+ }
158
+ expect(response.pageSize).toStrictEqual(1);
159
+ expect(response.offset).toStrictEqual(0);
160
+ });
161
+ it('Historical PNL', async () => {
162
+ const response = await client.account.getSubaccountHistoricalPNLs(constants_2.PERPX_TEST_ADDRESS, 0);
163
+ expect(response).not.toBeNull();
164
+ const historicalPnl = response.historicalPnl;
165
+ expect(historicalPnl).not.toBeNull();
166
+ if (historicalPnl.length > 0) {
167
+ const historicalPnl0 = historicalPnl[0];
168
+ expect(historicalPnl0).not.toBeNull();
169
+ }
170
+ });
171
+ it('Historical PNL Pagination', async () => {
172
+ const response = await client.account.getSubaccountHistoricalPNLs(constants_2.PERPX_TEST_ADDRESS, 0, undefined, undefined, undefined, undefined, 1, 1);
173
+ expect(response).not.toBeNull();
174
+ const historicalPnl = response.historicalPnl;
175
+ expect(historicalPnl).not.toBeNull();
176
+ if (historicalPnl.length > 0) {
177
+ const historicalPnl0 = historicalPnl[0];
178
+ expect(historicalPnl0).not.toBeNull();
179
+ expect(response.totalResults).toBeGreaterThanOrEqual(1);
180
+ }
181
+ expect(response.pageSize).toStrictEqual(1);
182
+ expect(response.offset).toStrictEqual(0);
183
+ });
184
+ });
185
+ });
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWNjb3VudEVuZHBvaW50cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vX190ZXN0c19fL21vZHVsZXMvY2xpZW50L0FjY291bnRFbmRwb2ludHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJEQUFnRDtBQUNoRCxnREFBd0I7QUFFeEIsOERBQXlEO0FBQ3pELHdFQUFvRTtBQUNwRSw2RkFBb0U7QUFDcEUsZ0VBQWlFO0FBQ2pFLDRFQUF3RTtBQUN4RSxzQ0FBNkM7QUFDN0MsMkNBQXNFO0FBRXRFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksOEJBQWEsQ0FBQyxtQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRWxFLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLDhCQUFrQixDQUFDLENBQUM7WUFDekUsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUN6QyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7WUFDdEQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM1QixnQ0FBZ0M7WUFDaEMsTUFBTSxNQUFNLEdB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
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../../../src/clients/constants");
4
+ const faucet_client_1 = require("../../../src/clients/faucet-client");
5
+ const constants_2 = require("./constants");
6
+ describe('FaucetClient', () => {
7
+ const client = new faucet_client_1.FaucetClient(constants_1.FaucetApiHost.TESTNET);
8
+ describe('Faucet Endpoints', () => {
9
+ it('Fill', async () => {
10
+ const response = await client.fill(constants_2.PERPX_TEST_ADDRESS, 0, 2000);
11
+ expect(response === null || response === void 0 ? void 0 : response.status).toBe(201);
12
+ });
13
+ });
14
+ });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmF1Y2V0RW5kcG9pbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL19fdGVzdHNfXy9tb2R1bGVzL2NsaWVudC9GYXVjZXRFbmRwb2ludC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsOERBQStEO0FBQy9ELHNFQUFrRTtBQUNsRSwyQ0FBaUQ7QUFFakQsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSw0QkFBWSxDQUFDLHlCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdkQsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3BCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBa0IsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MARKET_BTC_USD = void 0;
4
+ const constants_1 = require("../../../src/clients/constants");
5
+ const indexer_client_1 = require("../../../src/clients/indexer-client");
6
+ // ------------ Markets ------------
7
+ exports.MARKET_BTC_USD = 'BTC-USD';
8
+ describe('IndexerClient', () => {
9
+ const client = new indexer_client_1.IndexerClient(constants_1.Network.testnet().indexerConfig);
10
+ describe('Market Endpoints', () => {
11
+ it('Markets', async () => {
12
+ const response = await client.markets.getPerpetualMarkets();
13
+ const btc = response.markets[exports.MARKET_BTC_USD];
14
+ const status = btc.status;
15
+ expect(status).toBe('ACTIVE');
16
+ });
17
+ it('BTC Market', async () => {
18
+ const response = await client.markets.getPerpetualMarkets(exports.MARKET_BTC_USD);
19
+ const btc = response.markets[exports.MARKET_BTC_USD];
20
+ const status = btc.status;
21
+ expect(status).toBe('ACTIVE');
22
+ });
23
+ it('BTC Trades', async () => {
24
+ const response = await client.markets.getPerpetualMarketTrades(exports.MARKET_BTC_USD);
25
+ const trades = response.trades;
26
+ expect(trades).not.toBeUndefined();
27
+ });
28
+ it('BTC Trades Pagination', async () => {
29
+ const response = await client.markets.getPerpetualMarketTrades(exports.MARKET_BTC_USD, undefined, undefined, 1, 1);
30
+ const trades = response.trades;
31
+ expect(trades).not.toBeUndefined();
32
+ if (trades.length > 0) {
33
+ const trade = trades[0];
34
+ expect(trade).not.toBeNull();
35
+ expect(response.totalResults).toBeGreaterThanOrEqual(1);
36
+ }
37
+ expect(response.pageSize).toStrictEqual(1);
38
+ expect(response.offset).toStrictEqual(0);
39
+ });
40
+ it('BTC Orderbook', async () => {
41
+ const response = await client.markets.getPerpetualMarketOrderbook(exports.MARKET_BTC_USD);
42
+ const asks = response.asks;
43
+ const bids = response.bids;
44
+ expect(asks).not.toBeUndefined();
45
+ expect(bids).not.toBeUndefined();
46
+ });
47
+ it('BTC Candles', async () => {
48
+ const response = await client.markets.getPerpetualMarketCandles(exports.MARKET_BTC_USD, '1MIN');
49
+ const candles = response.candles;
50
+ expect(candles).not.toBeUndefined();
51
+ });
52
+ it('BTC Historical Funding', async () => {
53
+ const response = await client.markets.getPerpetualMarketHistoricalFunding(exports.MARKET_BTC_USD);
54
+ expect(response).not.toBeNull();
55
+ const historicalFunding = response.historicalFunding;
56
+ expect(historicalFunding).not.toBeNull();
57
+ if (historicalFunding.length > 0) {
58
+ const historicalFunding0 = historicalFunding[0];
59
+ expect(historicalFunding0).not.toBeNull();
60
+ }
61
+ });
62
+ it('Sparklines', async () => {
63
+ const response = await client.markets.getPerpetualMarketSparklines();
64
+ const btcSparklines = response[exports.MARKET_BTC_USD];
65
+ expect(btcSparklines).not.toBeUndefined();
66
+ });
67
+ });
68
+ });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFya2V0c0VuZHBvaW50cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vX190ZXN0c19fL21vZHVsZXMvY2xpZW50L01hcmtldHNFbmRwb2ludHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBeUQ7QUFDekQsd0VBQW9FO0FBRXBFLG9DQUFvQztBQUN2QixRQUFBLGNBQWMsR0FBVyxTQUFTLENBQUM7QUFFaEQsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSw4QkFBYSxDQUFDLG1CQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEUsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsc0JBQWMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLHNCQUFjLENBQUMsQ0FBQztZQUMxRSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLHNCQUFjLENBQUMsQ0FBQztZQUM3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBYyxDQUFDLENBQUM7WUFDL0UsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FDNUQsc0JBQWMsRUFDZCxTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsRUFDRCxDQUFDLENBQ0YsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVuQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFFN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxzQkFBYyxDQUFDLENBQUM7WUFDbEYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLHNCQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEYsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUNqQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdCQUF3QixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxzQkFBYyxDQUFDLENBQUM7WUFDMUYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekMsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxzQkFBYyxDQUFDLENBQUM7WUFDL0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMifQ==
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const constants_1 = require("../../../src/clients/constants");
7
+ const local_wallet_1 = __importDefault(require("../../../src/clients/modules/local-wallet"));
8
+ const subaccount_1 = require("../../../src/clients/subaccount");
9
+ const validator_client_1 = require("../../../src/clients/validator-client");
10
+ const constants_2 = require("../../../examples/constants");
11
+ const long_1 = __importDefault(require("long"));
12
+ const src_1 = require("../../../src");
13
+ async function sleep(ms) {
14
+ return new Promise((resolve) => setTimeout(resolve, ms));
15
+ }
16
+ /**
17
+ * Safely log transaction response without circular references
18
+ * This prevents Jest serialization errors when logging transaction objects
19
+ */
20
+ function logTxResponse(tx, label) {
21
+ console.log(`**${label}**`);
22
+ const txInfo = {};
23
+ if ('hash' in tx) {
24
+ txInfo.hash = Buffer.from(tx.hash).toString('hex');
25
+ }
26
+ // BroadcastTxSyncResponse has both 'code' and 'log' properties
27
+ if ('code' in tx && 'log' in tx) {
28
+ const syncResponse = tx;
29
+ txInfo.code = syncResponse.code;
30
+ txInfo.log = syncResponse.log;
31
+ }
32
+ // IndexedTx has 'height' and 'txIndex' properties
33
+ if ('height' in tx && 'txIndex' in tx) {
34
+ const indexedTx = tx;
35
+ txInfo.height = indexedTx.height;
36
+ txInfo.txIndex = indexedTx.txIndex;
37
+ }
38
+ console.log(txInfo);
39
+ }
40
+ describe('Validator Client', () => {
41
+ let wallet;
42
+ let subaccount;
43
+ let client;
44
+ describe('Transfers', () => {
45
+ beforeEach(async () => {
46
+ wallet = await local_wallet_1.default.fromMnemonic(constants_2.PERPX_TEST_MNEMONIC, src_1.BECH32_PREFIX);
47
+ subaccount = subaccount_1.SubaccountInfo.forLocalWallet(wallet, 0);
48
+ client = await validator_client_1.ValidatorClient.connect(constants_1.Network.testnet().validatorConfig);
49
+ await sleep(5000); // wait for withdraw to complete
50
+ });
51
+ it('Deposit', async () => {
52
+ // Clear cache right before transaction to ensure fresh account fetch
53
+ // This prevents using stale cached sequence numbers
54
+ // The account will be fetched fresh by deposit() -> send() -> account()
55
+ client.post.clearAccountCache(wallet.address);
56
+ const tx = await client.post.deposit(subaccount, 0, new long_1.default(10));
57
+ logTxResponse(tx, 'Deposit Tx');
58
+ });
59
+ it('Transfer', async () => {
60
+ const tx = await client.post.transfer(subaccount, subaccount.address, 1, 0, new long_1.default(10));
61
+ logTxResponse(tx, 'Transfer Tx');
62
+ });
63
+ it('Withdraw', async () => {
64
+ const tx = await client.post.withdraw(subaccount, 0, new long_1.default(10), undefined);
65
+ logTxResponse(tx, 'Withdraw Tx');
66
+ });
67
+ });
68
+ });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmZXJzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9fX3Rlc3RzX18vbW9kdWxlcy9jbGllbnQvVHJhbnNmZXJzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4REFBeUQ7QUFDekQsNkZBQW9FO0FBQ3BFLGdFQUFpRTtBQUNqRSw0RUFBd0U7QUFDeEUsMkRBQWtFO0FBQ2xFLGdEQUF3QjtBQUN4QixzQ0FBNkM7QUFJN0MsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUFVO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQ3BCLEVBQWtFLEVBQ2xFLEtBQWE7SUFFYixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM1QixNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFDdkIsSUFBSSxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELCtEQUErRDtJQUMvRCxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sWUFBWSxHQUFHLEVBQTZCLENBQUM7UUFDbkQsTUFBTSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBQ0Qsa0RBQWtEO0lBQ2xELElBQUksUUFBUSxJQUFJLEVBQUUsSUFBSSxTQUFTLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxTQUFTLEdBQUcsRUFBZSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsSUFBSSxNQUFtQixDQUFDO0lBQ3hCLElBQUksVUFBMEIsQ0FBQztJQUMvQixJQUFJLE1BQXVCLENBQUM7SUFFNUIsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFDekIsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3BCLE1BQU0sR0FBRyxNQUFNLHNCQUFXLENBQUMsWUFBWSxDQUFDLCtCQUFtQixFQUFFLG1CQUFhLENBQUMsQ0FBQztZQUM1RSxVQUFVLEdBQUcsMkJBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sR0FBRyxNQUFNLGtDQUFlLENBQUMsT0FBTyxDQUFDLG1CQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLHFFQUFxRTtZQUNyRSxvREFBb0Q7WUFDcEQsd0VBQXdFO1lBQ3hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFGLGFBQWEsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3hCLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RSxhQUFhLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyJ9