@decibeltrade/sdk 0.1.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 (294) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/.turbo/turbo-lint$colon$check.log +5 -0
  3. package/.turbo/turbo-lint.log +5 -0
  4. package/decibel_transactions.md +1049 -0
  5. package/dist/abi/abi-manager.d.ts +13 -0
  6. package/dist/abi/abi-manager.d.ts.map +1 -0
  7. package/dist/abi/abi-manager.js +21 -0
  8. package/dist/abi/abis.json +1322 -0
  9. package/dist/abi/bytecode-manager.d.ts +57 -0
  10. package/dist/abi/bytecode-manager.d.ts.map +1 -0
  11. package/dist/abi/bytecode-manager.js +62 -0
  12. package/dist/abi/bytecode.json +24 -0
  13. package/dist/abi/fetch-abis.d.ts +7 -0
  14. package/dist/abi/fetch-abis.d.ts.map +1 -0
  15. package/dist/abi/fetch-abis.js +132 -0
  16. package/dist/abi/fetch-bytecode.d.ts +24 -0
  17. package/dist/abi/fetch-bytecode.d.ts.map +1 -0
  18. package/dist/abi/fetch-bytecode.js +123 -0
  19. package/dist/abi/generate-abis.d.ts +6 -0
  20. package/dist/abi/generate-abis.d.ts.map +1 -0
  21. package/dist/abi/generate-abis.js +170 -0
  22. package/dist/abi/json/netna.json +1323 -0
  23. package/dist/abi/json/testnet.json +1315 -0
  24. package/dist/abi/types.d.ts +22 -0
  25. package/dist/abi/types.d.ts.map +1 -0
  26. package/dist/abi/types.js +2 -0
  27. package/dist/admin.d.ts +29 -0
  28. package/dist/admin.d.ts.map +1 -0
  29. package/dist/admin.js +203 -0
  30. package/dist/base.d.ts +42 -0
  31. package/dist/base.d.ts.map +1 -0
  32. package/dist/base.js +176 -0
  33. package/dist/constants.d.ts +41 -0
  34. package/dist/constants.d.ts.map +1 -0
  35. package/dist/constants.js +78 -0
  36. package/dist/fee-pay.d.ts +11 -0
  37. package/dist/fee-pay.d.ts.map +1 -0
  38. package/dist/fee-pay.js +30 -0
  39. package/dist/gas/gas-price-manager.d.ts +35 -0
  40. package/dist/gas/gas-price-manager.d.ts.map +1 -0
  41. package/dist/gas/gas-price-manager.js +93 -0
  42. package/dist/gas-price-manager.d.ts +31 -0
  43. package/dist/gas-price-manager.d.ts.map +1 -0
  44. package/dist/gas-price-manager.js +84 -0
  45. package/dist/index.d.ts +11 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +26 -0
  48. package/dist/order-event.types.d.ts +55 -0
  49. package/dist/order-event.types.d.ts.map +1 -0
  50. package/dist/order-event.types.js +3 -0
  51. package/dist/order-status.d.ts +43 -0
  52. package/dist/order-status.d.ts.map +1 -0
  53. package/dist/order-status.js +86 -0
  54. package/dist/read/account-overview/account-overview.reader.d.ts +37 -0
  55. package/dist/read/account-overview/account-overview.reader.d.ts.map +1 -0
  56. package/dist/read/account-overview/account-overview.reader.js +35 -0
  57. package/dist/read/account-overview/account-overview.types.d.ts +52 -0
  58. package/dist/read/account-overview/account-overview.types.d.ts.map +1 -0
  59. package/dist/read/account-overview/account-overview.types.js +36 -0
  60. package/dist/read/api-wallets/api-wallets.reader.d.ts +17 -0
  61. package/dist/read/api-wallets/api-wallets.reader.d.ts.map +1 -0
  62. package/dist/read/api-wallets/api-wallets.reader.js +27 -0
  63. package/dist/read/api-wallets/api-wallets.types.d.ts +17 -0
  64. package/dist/read/api-wallets/api-wallets.types.d.ts.map +1 -0
  65. package/dist/read/api-wallets/api-wallets.types.js +13 -0
  66. package/dist/read/base-reader.d.ts +22 -0
  67. package/dist/read/base-reader.d.ts.map +1 -0
  68. package/dist/read/base-reader.js +29 -0
  69. package/dist/read/candlesticks/candlesticks.reader.d.ts +31 -0
  70. package/dist/read/candlesticks/candlesticks.reader.d.ts.map +1 -0
  71. package/dist/read/candlesticks/candlesticks.reader.js +43 -0
  72. package/dist/read/candlesticks/candlesticks.types.d.ts +45 -0
  73. package/dist/read/candlesticks/candlesticks.types.d.ts.map +1 -0
  74. package/dist/read/candlesticks/candlesticks.types.js +36 -0
  75. package/dist/read/delegations/delegations.reader.d.ts +15 -0
  76. package/dist/read/delegations/delegations.reader.d.ts.map +1 -0
  77. package/dist/read/delegations/delegations.reader.js +23 -0
  78. package/dist/read/delegations/delegations.types.d.ts +17 -0
  79. package/dist/read/delegations/delegations.types.d.ts.map +1 -0
  80. package/dist/read/delegations/delegations.types.js +13 -0
  81. package/dist/read/index.d.ts +105 -0
  82. package/dist/read/index.d.ts.map +1 -0
  83. package/dist/read/index.js +244 -0
  84. package/dist/read/leaderboard/leaderboard.reader.d.ts +21 -0
  85. package/dist/read/leaderboard/leaderboard.reader.d.ts.map +1 -0
  86. package/dist/read/leaderboard/leaderboard.reader.js +22 -0
  87. package/dist/read/leaderboard/leaderboard.types.d.ts +27 -0
  88. package/dist/read/leaderboard/leaderboard.types.d.ts.map +1 -0
  89. package/dist/read/leaderboard/leaderboard.types.js +14 -0
  90. package/dist/read/market-contexts/market-contexts.reader.d.ts +22 -0
  91. package/dist/read/market-contexts/market-contexts.reader.d.ts.map +1 -0
  92. package/dist/read/market-contexts/market-contexts.reader.js +27 -0
  93. package/dist/read/market-contexts/market-contexts.types.d.ts +26 -0
  94. package/dist/read/market-contexts/market-contexts.types.d.ts.map +1 -0
  95. package/dist/read/market-contexts/market-contexts.types.js +19 -0
  96. package/dist/read/market-depth/market-depth.reader.d.ts +30 -0
  97. package/dist/read/market-depth/market-depth.reader.d.ts.map +1 -0
  98. package/dist/read/market-depth/market-depth.reader.js +46 -0
  99. package/dist/read/market-depth/market-depth.types.d.ts +20 -0
  100. package/dist/read/market-depth/market-depth.types.d.ts.map +1 -0
  101. package/dist/read/market-depth/market-depth.types.js +16 -0
  102. package/dist/read/market-prices/market-prices.reader.d.ts +44 -0
  103. package/dist/read/market-prices/market-prices.reader.d.ts.map +1 -0
  104. package/dist/read/market-prices/market-prices.reader.js +51 -0
  105. package/dist/read/market-prices/market-prices.types.d.ts +48 -0
  106. package/dist/read/market-prices/market-prices.types.d.ts.map +1 -0
  107. package/dist/read/market-prices/market-prices.types.js +26 -0
  108. package/dist/read/market-trades/market-trades.reader.d.ts +33 -0
  109. package/dist/read/market-trades/market-trades.reader.d.ts.map +1 -0
  110. package/dist/read/market-trades/market-trades.reader.js +39 -0
  111. package/dist/read/market-trades/market-trades.types.d.ts +52 -0
  112. package/dist/read/market-trades/market-trades.types.d.ts.map +1 -0
  113. package/dist/read/market-trades/market-trades.types.js +23 -0
  114. package/dist/read/markets/markets.reader.d.ts +38 -0
  115. package/dist/read/markets/markets.reader.d.ts.map +1 -0
  116. package/dist/read/markets/markets.reader.js +80 -0
  117. package/dist/read/markets/markets.types.d.ts +82 -0
  118. package/dist/read/markets/markets.types.d.ts.map +1 -0
  119. package/dist/read/markets/markets.types.js +46 -0
  120. package/dist/read/pagination.types.d.ts +14 -0
  121. package/dist/read/pagination.types.d.ts.map +1 -0
  122. package/dist/read/pagination.types.js +12 -0
  123. package/dist/read/portfolio-chart/portfolio-chart.reader.d.ts +14 -0
  124. package/dist/read/portfolio-chart/portfolio-chart.reader.d.ts.map +1 -0
  125. package/dist/read/portfolio-chart/portfolio-chart.reader.js +21 -0
  126. package/dist/read/portfolio-chart/portfolio-chart.types.d.ts +14 -0
  127. package/dist/read/portfolio-chart/portfolio-chart.types.d.ts.map +1 -0
  128. package/dist/read/portfolio-chart/portfolio-chart.types.js +12 -0
  129. package/dist/read/public-vaults/public-vaults.reader.d.ts +38 -0
  130. package/dist/read/public-vaults/public-vaults.reader.d.ts.map +1 -0
  131. package/dist/read/public-vaults/public-vaults.reader.js +31 -0
  132. package/dist/read/public-vaults/public-vaults.types.d.ts +62 -0
  133. package/dist/read/public-vaults/public-vaults.types.d.ts.map +1 -0
  134. package/dist/read/public-vaults/public-vaults.types.js +33 -0
  135. package/dist/read/types.d.ts +178 -0
  136. package/dist/read/types.d.ts.map +1 -0
  137. package/dist/read/types.js +87 -0
  138. package/dist/read/user-active-twaps/user-active-twaps.reader.d.ts +31 -0
  139. package/dist/read/user-active-twaps/user-active-twaps.reader.d.ts.map +1 -0
  140. package/dist/read/user-active-twaps/user-active-twaps.reader.js +31 -0
  141. package/dist/read/user-active-twaps/user-active-twaps.types.d.ts +49 -0
  142. package/dist/read/user-active-twaps/user-active-twaps.types.d.ts.map +1 -0
  143. package/dist/read/user-active-twaps/user-active-twaps.types.js +25 -0
  144. package/dist/read/user-bulk-orders/user-bulk-orders.reader.d.ts +31 -0
  145. package/dist/read/user-bulk-orders/user-bulk-orders.reader.d.ts.map +1 -0
  146. package/dist/read/user-bulk-orders/user-bulk-orders.reader.js +32 -0
  147. package/dist/read/user-bulk-orders/user-bulk-orders.types.d.ts +46 -0
  148. package/dist/read/user-bulk-orders/user-bulk-orders.types.d.ts.map +1 -0
  149. package/dist/read/user-bulk-orders/user-bulk-orders.types.js +24 -0
  150. package/dist/read/user-funding-history/user-funding-history.reader.d.ts +28 -0
  151. package/dist/read/user-funding-history/user-funding-history.reader.d.ts.map +1 -0
  152. package/dist/read/user-funding-history/user-funding-history.reader.js +32 -0
  153. package/dist/read/user-funding-history/user-funding-history.types.d.ts +37 -0
  154. package/dist/read/user-funding-history/user-funding-history.types.d.ts.map +1 -0
  155. package/dist/read/user-funding-history/user-funding-history.types.js +21 -0
  156. package/dist/read/user-notifications/user-notifications.reader.d.ts +13 -0
  157. package/dist/read/user-notifications/user-notifications.reader.d.ts.map +1 -0
  158. package/dist/read/user-notifications/user-notifications.reader.js +19 -0
  159. package/dist/read/user-notifications/user-notifications.types.d.ts +49 -0
  160. package/dist/read/user-notifications/user-notifications.types.d.ts.map +1 -0
  161. package/dist/read/user-notifications/user-notifications.types.js +18 -0
  162. package/dist/read/user-open-orders/user-open-orders.reader.d.ts +40 -0
  163. package/dist/read/user-open-orders/user-open-orders.reader.d.ts.map +1 -0
  164. package/dist/read/user-open-orders/user-open-orders.reader.js +31 -0
  165. package/dist/read/user-open-orders/user-open-orders.types.d.ts +76 -0
  166. package/dist/read/user-open-orders/user-open-orders.types.d.ts.map +1 -0
  167. package/dist/read/user-open-orders/user-open-orders.types.js +34 -0
  168. package/dist/read/user-order-history/user-order-history.reader.d.ts +40 -0
  169. package/dist/read/user-order-history/user-order-history.reader.d.ts.map +1 -0
  170. package/dist/read/user-order-history/user-order-history.reader.js +28 -0
  171. package/dist/read/user-order-history/user-order-history.types.d.ts +85 -0
  172. package/dist/read/user-order-history/user-order-history.types.d.ts.map +1 -0
  173. package/dist/read/user-order-history/user-order-history.types.js +37 -0
  174. package/dist/read/user-positions/user-positions.reader.d.ts +37 -0
  175. package/dist/read/user-positions/user-positions.reader.d.ts.map +1 -0
  176. package/dist/read/user-positions/user-positions.reader.js +41 -0
  177. package/dist/read/user-positions/user-positions.types.d.ts +2590 -0
  178. package/dist/read/user-positions/user-positions.types.d.ts.map +1 -0
  179. package/dist/read/user-positions/user-positions.types.js +31 -0
  180. package/dist/read/user-subaccounts/user-subaccounts.reader.d.ts +18 -0
  181. package/dist/read/user-subaccounts/user-subaccounts.reader.d.ts.map +1 -0
  182. package/dist/read/user-subaccounts/user-subaccounts.reader.js +28 -0
  183. package/dist/read/user-subaccounts/user-subaccounts.types.d.ts +21 -0
  184. package/dist/read/user-subaccounts/user-subaccounts.types.d.ts.map +1 -0
  185. package/dist/read/user-subaccounts/user-subaccounts.types.js +15 -0
  186. package/dist/read/user-trade-history/user-trade-history.reader.d.ts +33 -0
  187. package/dist/read/user-trade-history/user-trade-history.reader.d.ts.map +1 -0
  188. package/dist/read/user-trade-history/user-trade-history.reader.js +32 -0
  189. package/dist/read/user-trade-history/user-trade-history.types.d.ts +52 -0
  190. package/dist/read/user-trade-history/user-trade-history.types.d.ts.map +1 -0
  191. package/dist/read/user-trade-history/user-trade-history.types.js +26 -0
  192. package/dist/read/user-vaults/user-vaults.reader.d.ts +26 -0
  193. package/dist/read/user-vaults/user-vaults.reader.d.ts.map +1 -0
  194. package/dist/read/user-vaults/user-vaults.reader.js +32 -0
  195. package/dist/read/user-vaults/user-vaults.types.d.ts +39 -0
  196. package/dist/read/user-vaults/user-vaults.types.d.ts.map +1 -0
  197. package/dist/read/user-vaults/user-vaults.types.js +21 -0
  198. package/dist/read/vault/vault.reader.d.ts +95 -0
  199. package/dist/read/vault/vault.reader.d.ts.map +1 -0
  200. package/dist/read/vault/vault.reader.js +168 -0
  201. package/dist/read/vault/vault.types.d.ts +49 -0
  202. package/dist/read/vault/vault.types.d.ts.map +1 -0
  203. package/dist/read/vault/vault.types.js +45 -0
  204. package/dist/read/vaults/vaults.reader.d.ts +72 -0
  205. package/dist/read/vaults/vaults.reader.d.ts.map +1 -0
  206. package/dist/read/vaults/vaults.reader.js +63 -0
  207. package/dist/read/vaults/vaults.types.d.ts +140 -0
  208. package/dist/read/vaults/vaults.types.d.ts.map +1 -0
  209. package/dist/read/vaults/vaults.types.js +71 -0
  210. package/dist/read/ws-subscription.d.ts +21 -0
  211. package/dist/read/ws-subscription.d.ts.map +1 -0
  212. package/dist/read/ws-subscription.js +170 -0
  213. package/dist/subaccount-types.d.ts +24 -0
  214. package/dist/subaccount-types.d.ts.map +1 -0
  215. package/dist/subaccount-types.js +11 -0
  216. package/dist/transaction-builder.d.ts +14 -0
  217. package/dist/transaction-builder.d.ts.map +1 -0
  218. package/dist/transaction-builder.js +40 -0
  219. package/dist/tsconfig.tsbuildinfo +1 -0
  220. package/dist/utils.d.ts +56 -0
  221. package/dist/utils.d.ts.map +1 -0
  222. package/dist/utils.js +164 -0
  223. package/dist/vault-types.d.ts +43 -0
  224. package/dist/vault-types.d.ts.map +1 -0
  225. package/dist/vault-types.js +11 -0
  226. package/dist/write.d.ts +271 -0
  227. package/dist/write.d.ts.map +1 -0
  228. package/dist/write.js +485 -0
  229. package/eslint.config.mjs +25 -0
  230. package/package.json +39 -0
  231. package/readme.md +257 -0
  232. package/sdk_reference.md +876 -0
  233. package/src/abi/generate-abis.ts +164 -0
  234. package/src/abi/json/netna.json +1323 -0
  235. package/src/abi/json/testnet.json +1315 -0
  236. package/src/abi/types.ts +23 -0
  237. package/src/admin.ts +284 -0
  238. package/src/base.ts +218 -0
  239. package/src/constants.ts +118 -0
  240. package/src/fee-pay.ts +39 -0
  241. package/src/gas/gas-price-manager.ts +115 -0
  242. package/src/index.ts +10 -0
  243. package/src/order-event.types.ts +65 -0
  244. package/src/order-status.ts +89 -0
  245. package/src/read/account-overview/account-overview.reader.ts +43 -0
  246. package/src/read/account-overview/account-overview.types.ts +45 -0
  247. package/src/read/base-reader.ts +41 -0
  248. package/src/read/candlesticks/candlesticks.reader.ts +61 -0
  249. package/src/read/candlesticks/candlesticks.types.ts +46 -0
  250. package/src/read/delegations/delegations.reader.ts +22 -0
  251. package/src/read/delegations/delegations.types.ts +19 -0
  252. package/src/read/index.ts +271 -0
  253. package/src/read/leaderboard/leaderboard.reader.ts +21 -0
  254. package/src/read/leaderboard/leaderboard.types.ts +26 -0
  255. package/src/read/market-contexts/market-contexts.reader.ts +26 -0
  256. package/src/read/market-contexts/market-contexts.types.ts +18 -0
  257. package/src/read/market-depth/market-depth.reader.ts +60 -0
  258. package/src/read/market-depth/market-depth.types.ts +24 -0
  259. package/src/read/market-prices/market-prices.reader.ts +61 -0
  260. package/src/read/market-prices/market-prices.types.ts +38 -0
  261. package/src/read/market-trades/market-trades.reader.ts +46 -0
  262. package/src/read/market-trades/market-trades.types.ts +34 -0
  263. package/src/read/markets/markets.reader.ts +82 -0
  264. package/src/read/markets/markets.types.ts +54 -0
  265. package/src/read/pagination.types.ts +18 -0
  266. package/src/read/portfolio-chart/portfolio-chart.reader.ts +20 -0
  267. package/src/read/portfolio-chart/portfolio-chart.types.ts +21 -0
  268. package/src/read/types.ts +129 -0
  269. package/src/read/user-active-twaps/user-active-twaps.reader.ts +36 -0
  270. package/src/read/user-active-twaps/user-active-twaps.types.ts +33 -0
  271. package/src/read/user-bulk-orders/user-bulk-orders.reader.ts +37 -0
  272. package/src/read/user-bulk-orders/user-bulk-orders.types.ts +32 -0
  273. package/src/read/user-funding-history/user-funding-history.reader.ts +38 -0
  274. package/src/read/user-funding-history/user-funding-history.types.ts +29 -0
  275. package/src/read/user-notifications/user-notifications.reader.ts +17 -0
  276. package/src/read/user-notifications/user-notifications.types.ts +61 -0
  277. package/src/read/user-open-orders/user-open-orders.reader.ts +36 -0
  278. package/src/read/user-open-orders/user-open-orders.types.ts +42 -0
  279. package/src/read/user-order-history/user-order-history.reader.ts +34 -0
  280. package/src/read/user-order-history/user-order-history.types.ts +44 -0
  281. package/src/read/user-positions/user-positions.reader.ts +55 -0
  282. package/src/read/user-positions/user-positions.types.ts +43 -0
  283. package/src/read/user-subaccounts/user-subaccounts.reader.ts +30 -0
  284. package/src/read/user-subaccounts/user-subaccounts.types.ts +21 -0
  285. package/src/read/user-trade-history/user-trade-history.reader.ts +38 -0
  286. package/src/read/user-trade-history/user-trade-history.types.ts +33 -0
  287. package/src/read/vaults/vaults.reader.ts +79 -0
  288. package/src/read/vaults/vaults.types.ts +106 -0
  289. package/src/read/ws-subscription.ts +200 -0
  290. package/src/subaccount-types.ts +31 -0
  291. package/src/transaction-builder.ts +75 -0
  292. package/src/utils.ts +255 -0
  293. package/src/write.ts +965 -0
  294. package/tsconfig.json +8 -0
@@ -0,0 +1,82 @@
1
+ import { getMarketAddr } from "../../utils";
2
+ import { BaseReader, BaseRequestArgs } from "../base-reader";
3
+ import { PerpMarketConfig, PerpMarketConfigSchema, PerpMarketsSchema } from "./markets.types";
4
+
5
+ export class MarketsReader extends BaseReader {
6
+ /**
7
+ * Get all of the available markets
8
+ * @returns The list of available markets
9
+ */
10
+ async getAll({ fetchOptions }: BaseRequestArgs = {}) {
11
+ const response = await this.getRequest({
12
+ schema: PerpMarketsSchema,
13
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/markets`,
14
+ options: fetchOptions,
15
+ });
16
+
17
+ // TODO: Remove once API is fixed and doesn't return duplicate markets
18
+ const seen = new Set<string>();
19
+ const uniqueMarkets = response.data.filter((market) => {
20
+ if (seen.has(market.market_addr)) {
21
+ return false;
22
+ }
23
+ seen.add(market.market_addr);
24
+ return true;
25
+ });
26
+
27
+ return uniqueMarkets;
28
+ }
29
+
30
+ /**
31
+ * Get the market config for a given market name
32
+ * @param marketName The name of the market to get
33
+ * @returns The market config for the given name
34
+ */
35
+ async getByName(marketName: string): Promise<PerpMarketConfig | null> {
36
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
37
+ try {
38
+ // TODO: Fix lint error
39
+ // eslint-disable-next-line custom/no-get-account-resource
40
+ const market = await this.deps.aptos.getAccountResource<PerpMarketConfig>({
41
+ accountAddress: marketAddr,
42
+ resourceType: `${this.deps.config.deployment.package}::perp_market_config::PerpMarketConfig`,
43
+ });
44
+ // TODO: Handle different __variant__ values
45
+ return PerpMarketConfigSchema.parse(market);
46
+ } catch (e) {
47
+ console.error(e);
48
+ return null;
49
+ }
50
+ }
51
+
52
+ /**
53
+ * List all of the market addresses
54
+ * @returns The list of market addresses
55
+ */
56
+ async listMarketAddresses() {
57
+ const markets = await this.deps.aptos.view<[string[]]>({
58
+ payload: {
59
+ function: `${this.deps.config.deployment.package}::perp_engine::list_markets`,
60
+ typeArguments: [],
61
+ functionArguments: [],
62
+ },
63
+ });
64
+ return markets[0];
65
+ }
66
+
67
+ /**
68
+ * Get the name of a market by address
69
+ * @param marketAddr The address of the market
70
+ * @returns The name of the market
71
+ */
72
+ async marketNameByAddress(marketAddr: string) {
73
+ const name = await this.deps.aptos.view<[string]>({
74
+ payload: {
75
+ function: `${this.deps.config.deployment.package}::perp_engine::market_name`,
76
+ typeArguments: [],
77
+ functionArguments: [marketAddr],
78
+ },
79
+ });
80
+ return name[0];
81
+ }
82
+ }
@@ -0,0 +1,54 @@
1
+ import { z } from "zod/v4";
2
+
3
+ export const MarketModeConfigSchema = z.discriminatedUnion("__variant__", [
4
+ z.object({ __variant__: z.literal("Open") }),
5
+ z.object({ __variant__: z.literal("ReduceOnly") }),
6
+ z.object({
7
+ __variant__: z.literal("AllowlistOnly"),
8
+ allowlist: z.array(z.string()),
9
+ }),
10
+ z.object({ __variant__: z.literal("Halt") }),
11
+ ]);
12
+
13
+ export const PerpMarketConfigSchema = z.object({
14
+ __variant__: z.literal("V1"),
15
+ name: z.string(),
16
+ sz_precision: z.object({
17
+ decimals: z.number(),
18
+ multiplier: z.string(),
19
+ }),
20
+ min_size: z.string(),
21
+ lot_size: z.string(),
22
+ ticker_size: z.string(),
23
+ max_leverage: z.number(),
24
+ mode: MarketModeConfigSchema,
25
+ });
26
+
27
+ export const MarketModeSchema = z.enum([
28
+ "Open",
29
+ "ReduceOnly",
30
+ "AllowlistOnly",
31
+ "Halt",
32
+ "Delisting",
33
+ ]);
34
+
35
+ export const PerpMarketSchema = z.object({
36
+ market_addr: z.string(),
37
+ market_name: z.string(),
38
+ sz_decimals: z.number(),
39
+ px_decimals: z.number(),
40
+ max_leverage: z.number(),
41
+ tick_size: z.number(),
42
+ min_size: z.number(),
43
+ lot_size: z.number(),
44
+ max_open_interest: z.number(),
45
+ mode: MarketModeSchema,
46
+ });
47
+
48
+ export const PerpMarketsSchema = z.array(PerpMarketSchema);
49
+
50
+ export type MarketModeConfig = z.infer<typeof MarketModeConfigSchema>;
51
+ export type PerpMarketConfig = z.infer<typeof PerpMarketConfigSchema>;
52
+ export type MarketMode = z.infer<typeof MarketModeSchema>;
53
+ export type PerpMarket = z.infer<typeof PerpMarketSchema>;
54
+ export type PerpMarkets = z.infer<typeof PerpMarketsSchema>;
@@ -0,0 +1,18 @@
1
+ import z from "zod/v4";
2
+
3
+ export const PaginatedResponseSchema = <T extends z.ZodType>(itemSchema: T) =>
4
+ z.object({
5
+ items: z.array(itemSchema),
6
+ total_count: z.number(),
7
+ });
8
+
9
+ export interface PaginatedResponse<T> {
10
+ items: T[];
11
+ total_count: number;
12
+ }
13
+
14
+ // Page related types
15
+ export interface PageParams {
16
+ limit?: number;
17
+ offset?: number;
18
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import { PortfolioChartRequestArgs, PortfolioChartSchema } from "./portfolio-chart.types";
3
+
4
+ export class PortfolioChartReader extends BaseReader {
5
+ /**
6
+ * Get the portfolio chart for a given user
7
+ * @param subAddr The subaccount address to get the account overview for
8
+ * @returns The account overview for the given subaccount address
9
+ */
10
+ async getByAddr({ subAddr, range, type, fetchOptions }: PortfolioChartRequestArgs) {
11
+ const response = await this.getRequest({
12
+ schema: PortfolioChartSchema,
13
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/portfolio_chart`,
14
+ queryParams: { user: subAddr, range, data_type: type },
15
+ options: fetchOptions,
16
+ });
17
+
18
+ return response.data;
19
+ }
20
+ }
@@ -0,0 +1,21 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface PortfolioChartRequestArgs extends BaseRequestArgs {
6
+ subAddr: string;
7
+ range: PortfolioChartTimeRange;
8
+ type: PortfolioChartType;
9
+ }
10
+
11
+ export const PortfolioChartPnlItemSchema = z.object({
12
+ timestamp: z.number(),
13
+ data_points: z.number(),
14
+ });
15
+
16
+ export const PortfolioChartSchema = z.array(PortfolioChartPnlItemSchema);
17
+
18
+ export type PortfolioChartType = "pnl" | "account_value";
19
+ export type PortfolioChartTimeRange = "24h" | "7d" | "30d" | "90d";
20
+ export type PortfolioChartItem = z.infer<typeof PortfolioChartPnlItemSchema>;
21
+ export type PortfolioChart = z.infer<typeof PortfolioChartSchema>;
@@ -0,0 +1,129 @@
1
+ import { z } from "zod/v4";
2
+
3
+ // Export all types from readers
4
+ export * from "./account-overview/account-overview.types";
5
+ export * from "./candlesticks/candlesticks.types";
6
+ export * from "./delegations/delegations.types";
7
+ export * from "./leaderboard/leaderboard.types";
8
+ export * from "./market-contexts/market-contexts.types";
9
+ export * from "./market-depth/market-depth.types";
10
+ export * from "./market-prices/market-prices.types";
11
+ export * from "./market-trades/market-trades.types";
12
+ export * from "./markets/markets.types";
13
+ export * from "./pagination.types";
14
+ export * from "./portfolio-chart/portfolio-chart.types";
15
+ export * from "./user-active-twaps/user-active-twaps.types";
16
+ export * from "./user-bulk-orders/user-bulk-orders.types";
17
+ export * from "./user-funding-history/user-funding-history.types";
18
+ export * from "./user-notifications/user-notifications.types";
19
+ export * from "./user-open-orders/user-open-orders.types";
20
+ export * from "./user-order-history/user-order-history.types";
21
+ export * from "./user-positions/user-positions.types";
22
+ export * from "./user-subaccounts/user-subaccounts.types";
23
+ export * from "./user-trade-history/user-trade-history.types";
24
+ export * from "./vaults/vaults.types";
25
+
26
+ export const PerpPosition = z.object({
27
+ size: z.number(),
28
+ sz_decimals: z.number(),
29
+ entry_px: z.number(),
30
+ max_leverage: z.number(),
31
+ is_long: z.boolean(),
32
+ token_type: z.string(),
33
+ });
34
+ export type PerpPosition = z.infer<typeof PerpPosition>;
35
+
36
+ export const CrossedPosition = z.object({
37
+ positions: z.array(PerpPosition),
38
+ });
39
+ export type CrossedPosition = z.infer<typeof CrossedPosition>;
40
+
41
+ export const LiquidationConfigV1 = z.object({
42
+ __variant__: z.literal("V1"),
43
+ backstop_liquidator: z.string(),
44
+ backstop_margin_maintenance_divisor: z.string(),
45
+ backstop_margin_maintenance_multiplier: z.string(),
46
+ maintenance_margin_leverage_divisor: z.string(),
47
+ maintenance_margin_leverage_multiplier: z.string(),
48
+ });
49
+ export type LiquidationConfigV1 = z.infer<typeof LiquidationConfigV1>;
50
+
51
+ export const CollateralBalanceSheet = z.object({
52
+ asset_type: z.object({
53
+ inner: z.string(),
54
+ }),
55
+ asset_precision: z.object({
56
+ decimals: z.number(),
57
+ multiplier: z.string(),
58
+ }),
59
+ balance_precision: z.object({
60
+ decimals: z.number(),
61
+ multiplier: z.string(),
62
+ }),
63
+ balance_table: z.object({
64
+ handle: z.string(),
65
+ }),
66
+ store: z.object({
67
+ inner: z.string(),
68
+ }),
69
+ store_extend_ref: z.object({
70
+ self: z.string(),
71
+ }),
72
+ });
73
+ export type CollateralBalanceSheet = z.infer<typeof CollateralBalanceSheet>;
74
+
75
+ export const GlobalAccountsStateV1 = z.object({
76
+ __variant__: z.string(),
77
+ collateral: CollateralBalanceSheet,
78
+ liquidation_config: LiquidationConfigV1,
79
+ });
80
+ export type GlobalAccountsStateV1 = z.infer<typeof GlobalAccountsStateV1>;
81
+
82
+ export const GlobalAccountsState = GlobalAccountsStateV1;
83
+ export type GlobalAccountsState = z.infer<typeof GlobalAccountsState>;
84
+
85
+ // Search term
86
+ export interface SearchTermParams {
87
+ searchTerm?: string;
88
+ }
89
+
90
+ // Sort direction
91
+ export type SortDirection = "ASC" | "DESC" | undefined;
92
+
93
+ // Sort params
94
+ export interface SortParams<T extends string> {
95
+ sortKey?: T;
96
+ sortDir?: SortDirection;
97
+ }
98
+
99
+ // Vaults
100
+ export interface CreateVaultArgs {
101
+ contributionAssetType?: string;
102
+ vaultName: string;
103
+ vaultDescription: string;
104
+ vaultSocialLinks: string[];
105
+ vaultShareSymbol: string;
106
+ vaultShareIconUri?: string;
107
+ vaultShareProjectUri?: string;
108
+ feeBps: number;
109
+ feeIntervalS: number;
110
+ contributionLockupDurationS: number;
111
+ initialFunding: number;
112
+ acceptsContributions: boolean;
113
+ delegateToCreator: boolean;
114
+ }
115
+
116
+ export interface ActivateVaultArgs {
117
+ vaultAddress: string;
118
+ additionalFunding?: number;
119
+ }
120
+
121
+ export interface DepositToVaultArgs {
122
+ vaultAddress: string;
123
+ amount: number;
124
+ }
125
+
126
+ export interface WithdrawFromVaultArgs {
127
+ vaultAddress: string;
128
+ shares: number;
129
+ }
@@ -0,0 +1,36 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import {
3
+ UserActiveTwapsRequestArgs,
4
+ UserActiveTwapsSchema,
5
+ UserActiveTwapsWsMessage,
6
+ UserActiveTwapsWsMessageSchema,
7
+ } from "./user-active-twaps.types";
8
+
9
+ export class UserActiveTwapsReader extends BaseReader {
10
+ /**
11
+ * Get the active twaps for a given user
12
+ * @param subAddr The subaccount address of the user to get active twaps for
13
+ * @returns The active twaps for the given user
14
+ */
15
+ async getByAddr({ subAddr, fetchOptions }: UserActiveTwapsRequestArgs) {
16
+ const response = await this.getRequest({
17
+ schema: UserActiveTwapsSchema,
18
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/active_twaps`,
19
+ queryParams: { user: subAddr },
20
+ options: fetchOptions,
21
+ });
22
+
23
+ return response.data;
24
+ }
25
+
26
+ /**
27
+ * Subscribe to active twaps updates
28
+ * @param subAddr The subaccount address of the user to subscribe to
29
+ * @param onData Callback function for received active twaps data
30
+ * @returns A function to unsubscribe from the active twaps updates
31
+ */
32
+ subscribeByAddr(subAddr: string, onData: (data: UserActiveTwapsWsMessage) => void) {
33
+ const topic = `user_active_twaps:${subAddr}`;
34
+ return this.deps.ws.subscribe(topic, UserActiveTwapsWsMessageSchema, onData);
35
+ }
36
+ }
@@ -0,0 +1,33 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface UserActiveTwapsRequestArgs extends BaseRequestArgs {
6
+ subAddr: string;
7
+ }
8
+
9
+ export const UserActiveTwapSchema = z.object({
10
+ market: z.string(),
11
+ is_buy: z.boolean(),
12
+ order_id: z.string(),
13
+ client_order_id: z.string().nullable().optional(),
14
+ is_reduce_only: z.boolean(),
15
+ start_unix_ms: z.number(),
16
+ frequency_s: z.number(),
17
+ duration_s: z.number(),
18
+ orig_size: z.number(),
19
+ remaining_size: z.number(),
20
+ status: z.string(),
21
+ transaction_unix_ms: z.number(),
22
+ transaction_version: z.number(),
23
+ });
24
+
25
+ export const UserActiveTwapsSchema = z.array(UserActiveTwapSchema);
26
+
27
+ export const UserActiveTwapsWsMessageSchema = z.object({
28
+ twaps: z.array(UserActiveTwapSchema),
29
+ });
30
+
31
+ export type UserActiveTwap = z.infer<typeof UserActiveTwapSchema>;
32
+ export type UserActiveTwaps = z.infer<typeof UserActiveTwapsSchema>;
33
+ export type UserActiveTwapsWsMessage = z.infer<typeof UserActiveTwapsWsMessageSchema>;
@@ -0,0 +1,37 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import {
3
+ UserBulkOrdersRequestArgs,
4
+ UserBulkOrdersSchema,
5
+ UserBulkOrdersWsMessage,
6
+ UserBulkOrdersWsMessageSchema,
7
+ } from "./user-bulk-orders.types";
8
+
9
+ export class UserBulkOrdersReader extends BaseReader {
10
+ /**
11
+ * Get the bulk orders for a given user
12
+ * @param subAddr The subaccount address of the user to get bulk orders for
13
+ * @param market Optional market address to filter by specific market
14
+ * @returns The bulk orders for the given user
15
+ */
16
+ async getByAddr({ subAddr, market, fetchOptions }: UserBulkOrdersRequestArgs) {
17
+ const response = await this.getRequest({
18
+ schema: UserBulkOrdersSchema,
19
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/bulk_orders`,
20
+ queryParams: { user: subAddr, market: market || "all" },
21
+ options: fetchOptions,
22
+ });
23
+
24
+ return response.data;
25
+ }
26
+
27
+ /**
28
+ * Subscribe to user bulk orders updates
29
+ * @param subAddr The subaccount address of the user to subscribe to
30
+ * @param onData Callback function for received user bulk orders data
31
+ * @returns A function to unsubscribe from the user bulk orders updates
32
+ */
33
+ subscribeByAddr(subAddr: string, onData: (data: UserBulkOrdersWsMessage) => void) {
34
+ const topic = `bulk_orders:${subAddr}`;
35
+ return this.deps.ws.subscribe(topic, UserBulkOrdersWsMessageSchema, onData);
36
+ }
37
+ }
@@ -0,0 +1,32 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface UserBulkOrdersRequestArgs extends BaseRequestArgs {
6
+ subAddr: string;
7
+ market?: string;
8
+ }
9
+
10
+ export const UserBulkOrderSchema = z.object({
11
+ market: z.string(),
12
+ sequence_number: z.number(),
13
+ previous_seq_num: z.number(),
14
+ bid_prices: z.array(z.number()),
15
+ bid_sizes: z.array(z.number()),
16
+ ask_prices: z.array(z.number()),
17
+ ask_sizes: z.array(z.number()),
18
+ cancelled_bid_prices: z.array(z.number()),
19
+ cancelled_bid_sizes: z.array(z.number()),
20
+ cancelled_ask_prices: z.array(z.number()),
21
+ cancelled_ask_sizes: z.array(z.number()),
22
+ });
23
+
24
+ export const UserBulkOrdersSchema = z.array(UserBulkOrderSchema);
25
+
26
+ export const UserBulkOrdersWsMessageSchema = z.object({
27
+ bulk_orders: z.array(UserBulkOrderSchema),
28
+ });
29
+
30
+ export type UserBulkOrder = z.infer<typeof UserBulkOrderSchema>;
31
+ export type UserBulkOrders = z.infer<typeof UserBulkOrdersSchema>;
32
+ export type UserBulkOrdersWsMessage = z.infer<typeof UserBulkOrdersWsMessageSchema>;
@@ -0,0 +1,38 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import {
3
+ UserFundingHistoryRequestArgs,
4
+ UserFundingHistorySchema,
5
+ UserFundingHistoryWsMessage,
6
+ UserFundingHistoryWsMessageSchema,
7
+ } from "./user-funding-history.types";
8
+
9
+ export class UserFundingHistoryReader extends BaseReader {
10
+ /**
11
+ * Get the trade history for a given user
12
+ * @param subAddr The subaccount address of the user to get trade history for
13
+ * @param limit The number of trades to get (default: 10)
14
+ * @returns The trade history for the given user
15
+ */
16
+ async getByAddr({ subAddr, limit = 10, fetchOptions }: UserFundingHistoryRequestArgs) {
17
+ const response = await this.getRequest({
18
+ schema: UserFundingHistorySchema,
19
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/funding_rate_history`,
20
+ queryParams: { user: subAddr, limit: limit.toString() },
21
+ options: fetchOptions,
22
+ });
23
+
24
+ return response.data;
25
+ }
26
+
27
+ /**
28
+ * Subscribe to trade history updates
29
+ * @param subAddr The subaccount address of the user to subscribe to
30
+ * @param onData Callback function for received trade history data
31
+ * @returns A function to unsubscribe from the trade history updates
32
+ */
33
+ subscribeByAddr(subAddr: string, onData: (data: UserFundingHistoryWsMessage) => void) {
34
+ const topic = `user_funding_rate_history:${subAddr}`;
35
+
36
+ return this.deps.ws.subscribe(topic, UserFundingHistoryWsMessageSchema, onData);
37
+ }
38
+ }
@@ -0,0 +1,29 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface UserFundingHistoryRequestArgs extends BaseRequestArgs {
6
+ subAddr: string;
7
+ limit?: number;
8
+ }
9
+
10
+ export const UserFundingSchema = z.object({
11
+ market: z.string(),
12
+ action: z.string(),
13
+ size: z.number(),
14
+ is_funding_positive: z.boolean(),
15
+ realized_funding_amount: z.number(),
16
+ is_rebate: z.boolean(),
17
+ fee_amount: z.number(),
18
+ transaction_unix_ms: z.number(),
19
+ });
20
+
21
+ export const UserFundingHistorySchema = z.array(UserFundingSchema);
22
+
23
+ export const UserFundingHistoryWsMessageSchema = z.object({
24
+ funding_history: UserFundingHistorySchema,
25
+ });
26
+
27
+ export type UserFunding = z.infer<typeof UserFundingSchema>;
28
+ export type UserFundingHistory = z.infer<typeof UserFundingHistorySchema>;
29
+ export type UserFundingHistoryWsMessage = z.infer<typeof UserFundingHistoryWsMessageSchema>;
@@ -0,0 +1,17 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import { UserNotification, UserNotificationSchema } from "./user-notifications.types";
3
+
4
+ export class UserNotificationsReader extends BaseReader {
5
+ /**
6
+ * Subscribe to user positions updates
7
+ * @param subAddr The subaccount address of the user to subscribe to
8
+ * @param apiUrl The WebSocket server URL
9
+ * @param onData Callback function for received user positions data
10
+ * @returns A function to unsubscribe from the user positions updates
11
+ */
12
+ subscribeByAddr(subAddr: string, onData: (data: UserNotification) => void) {
13
+ const topic = `notifications:${subAddr}`;
14
+
15
+ return this.deps.ws.subscribe(topic, UserNotificationSchema, onData);
16
+ }
17
+ }
@@ -0,0 +1,61 @@
1
+ import z from "zod/v4";
2
+
3
+ import { UserActiveTwapSchema } from "../user-active-twaps/user-active-twaps.types";
4
+ import { UserOrderSchema } from "../user-order-history/user-order-history.types";
5
+
6
+ // from /rust/trading-api-dto/src/notification.rs
7
+ export enum NotificationType {
8
+ MarketOrderPlaced = "MarketOrderPlaced",
9
+ LimitOrderPlaced = "LimitOrderPlaced",
10
+ StopMarketOrderPlaced = "StopMarketOrderPlaced",
11
+ StopMarketOrderTriggered = "StopMarketOrderTriggered",
12
+ StopLimitOrderPlaced = "StopLimitOrderPlaced",
13
+ StopLimitOrderTriggered = "StopLimitOrderTriggered",
14
+ OrderPartiallyFilled = "OrderPartiallyFilled",
15
+ OrderFilled = "OrderFilled",
16
+ OrderSizeReduced = "OrderSizeReduced",
17
+ OrderCancelled = "OrderCancelled",
18
+ OrderRejected = "OrderRejected",
19
+ OrderErrored = "OrderErrored",
20
+ TwapOrderPlaced = "TwapOrderPlaced",
21
+ TwapOrderTriggered = "TwapOrderTriggered",
22
+ TwapOrderCompleted = "TwapOrderCompleted",
23
+ TwapOrderCancelled = "TwapOrderCancelled",
24
+ TwapOrderErrored = "TwapOrderErrored",
25
+ AccountDeposit = "AccountDeposit",
26
+ AccountWithdrawal = "AccountWithdrawal",
27
+ TpSlSet = "TpSlSet",
28
+ TpHit = "TpHit",
29
+ SlHit = "SlHit",
30
+ TpCancelled = "TpCancelled",
31
+ SlCancelled = "SlCancelled",
32
+ }
33
+
34
+ export enum ClientNotificationType {
35
+ TwapPlaced = "TwapPlaced",
36
+ OrderCancellationPlaced = "OrderCancellationPlaced",
37
+ PositionCancellationPlaced = "PositionCancellationPlaced",
38
+ TwapCancellationPlaced = "TwapCancellationPlaced",
39
+ OrderCancellationErrored = "OrderCancellationErrored",
40
+ PositionCancellationErrored = "PositionCancellationErrored",
41
+ TwapCancellationErrored = "TwapCancellationErrored",
42
+ }
43
+
44
+ export const NotificationMetadataSchema = z.object({
45
+ trigger_price: z.number().optional(),
46
+ reason: z.string().optional(),
47
+ amount: z.number().optional(),
48
+ filled_size: z.number().optional(),
49
+ });
50
+
51
+ export const UserNotificationSchema = z.object({
52
+ notification: z.object({
53
+ account: z.string(),
54
+ notification_metadata: NotificationMetadataSchema.optional(),
55
+ notification_type: z.enum(NotificationType),
56
+ order: UserOrderSchema.optional(),
57
+ twap: UserActiveTwapSchema.optional(),
58
+ }),
59
+ });
60
+
61
+ export type UserNotification = z.infer<typeof UserNotificationSchema>;
@@ -0,0 +1,36 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import {
3
+ UserOpenOrdersRequestArgs,
4
+ UserOpenOrdersSchema,
5
+ UserOpenOrdersWsMessage,
6
+ UserOpenOrdersWsMessageSchema,
7
+ } from "./user-open-orders.types";
8
+
9
+ export class UserOpenOrdersReader extends BaseReader {
10
+ /**
11
+ * Get the open orders for a given user
12
+ * @param subAddr The subaccount address of the user to get open orders for
13
+ * @returns The open orders for the given user
14
+ */
15
+ async getByAddr({ subAddr, fetchOptions }: UserOpenOrdersRequestArgs) {
16
+ const response = await this.getRequest({
17
+ schema: UserOpenOrdersSchema,
18
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/open_orders`,
19
+ queryParams: { user: subAddr },
20
+ options: fetchOptions,
21
+ });
22
+
23
+ return response.data;
24
+ }
25
+
26
+ /**
27
+ * Subscribe to user orders updates
28
+ * @param subAddr The subaccount address of the user to subscribe to
29
+ * @param onData Callback function for received user orders data
30
+ * @returns A function to unsubscribe from the user orders updates
31
+ */
32
+ subscribeByAddr(subAddr: string, onData: (data: UserOpenOrdersWsMessage) => void) {
33
+ const topic = `user_open_orders:${subAddr}`;
34
+ return this.deps.ws.subscribe(topic, UserOpenOrdersWsMessageSchema, onData);
35
+ }
36
+ }