@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,271 @@
1
+ import { AccountAddress, Aptos, AptosConfig, createObjectAddress } from "@aptos-labs/ts-sdk";
2
+ import { ErrorEvent } from "isomorphic-ws";
3
+
4
+ import { DecibelConfig, DecibelReaderDeps } from "../constants";
5
+ import { AccountOverviewReader } from "./account-overview/account-overview.reader";
6
+ import { CandlesticksReader } from "./candlesticks/candlesticks.reader";
7
+ import { DelegationsReader } from "./delegations/delegations.reader";
8
+ import { LeaderboardReader } from "./leaderboard/leaderboard.reader";
9
+ import { MarketContextsReader } from "./market-contexts/market-contexts.reader";
10
+ import { MarketDepthReader } from "./market-depth/market-depth.reader";
11
+ import { MarketPricesReader } from "./market-prices/market-prices.reader";
12
+ import { MarketTradesReader } from "./market-trades/market-trades.reader";
13
+ import { MarketsReader } from "./markets/markets.reader";
14
+ import { PortfolioChartReader } from "./portfolio-chart/portfolio-chart.reader";
15
+ import { CrossedPosition } from "./types";
16
+ import { UserActiveTwapsReader } from "./user-active-twaps/user-active-twaps.reader";
17
+ import { UserBulkOrdersReader } from "./user-bulk-orders/user-bulk-orders.reader";
18
+ import { UserFundingHistoryReader } from "./user-funding-history/user-funding-history.reader";
19
+ import { UserNotificationsReader } from "./user-notifications/user-notifications.reader";
20
+ import { UserOpenOrdersReader } from "./user-open-orders/user-open-orders.reader";
21
+ import { UserOrderHistoryReader } from "./user-order-history/user-order-history.reader";
22
+ import { UserPositionsReader } from "./user-positions/user-positions.reader";
23
+ import { UserSubaccountsReader } from "./user-subaccounts/user-subaccounts.reader";
24
+ import { UserTradeHistoryReader } from "./user-trade-history/user-trade-history.reader";
25
+ import { VaultsReader } from "./vaults/vaults.reader";
26
+ import { DecibelWsSubscription } from "./ws-subscription";
27
+
28
+ export * from "./types";
29
+
30
+ interface Cache {
31
+ usdcDecimals?: number;
32
+ }
33
+
34
+ export class DecibelReadDex {
35
+ readonly cache: Cache;
36
+ readonly deps: DecibelReaderDeps;
37
+ readonly accountOverview: AccountOverviewReader;
38
+ readonly markets: MarketsReader;
39
+ readonly marketContexts: MarketContextsReader;
40
+ readonly marketDepth: MarketDepthReader;
41
+ readonly marketPrices: MarketPricesReader;
42
+ readonly marketTrades: MarketTradesReader;
43
+ readonly userFundingHistory: UserFundingHistoryReader;
44
+ readonly userTradeHistory: UserTradeHistoryReader;
45
+ readonly candlesticks: CandlesticksReader;
46
+ readonly userSubaccounts: UserSubaccountsReader;
47
+ readonly userPositions: UserPositionsReader;
48
+ readonly userOrderHistory: UserOrderHistoryReader;
49
+ readonly userOpenOrders: UserOpenOrdersReader;
50
+ readonly userBulkOrders: UserBulkOrdersReader;
51
+ readonly userActiveTwaps: UserActiveTwapsReader;
52
+ readonly portfolioChart: PortfolioChartReader;
53
+ readonly leaderboard: LeaderboardReader;
54
+ readonly vaults: VaultsReader;
55
+ readonly delegations: DelegationsReader;
56
+ readonly userNotifications: UserNotificationsReader;
57
+
58
+ constructor(
59
+ readonly config: DecibelConfig,
60
+ opts?: {
61
+ nodeApiKey?: string;
62
+ onWsError?: (error: ErrorEvent) => void;
63
+ },
64
+ ) {
65
+ const aptosConfig = new AptosConfig({
66
+ network: config.network,
67
+ fullnode: config.fullnodeUrl,
68
+ clientConfig: { API_KEY: opts?.nodeApiKey },
69
+ });
70
+
71
+ this.deps = {
72
+ aptos: new Aptos(aptosConfig),
73
+ ws: new DecibelWsSubscription(config, opts?.onWsError),
74
+ config: this.config,
75
+ apiKey: opts?.nodeApiKey,
76
+ };
77
+
78
+ this.cache = {};
79
+ this.accountOverview = new AccountOverviewReader(this.deps);
80
+ this.markets = new MarketsReader(this.deps);
81
+ this.marketContexts = new MarketContextsReader(this.deps);
82
+ this.marketDepth = new MarketDepthReader(this.deps);
83
+ this.marketPrices = new MarketPricesReader(this.deps);
84
+ this.marketTrades = new MarketTradesReader(this.deps);
85
+ this.userPositions = new UserPositionsReader(this.deps);
86
+ this.userOrderHistory = new UserOrderHistoryReader(this.deps);
87
+ this.userSubaccounts = new UserSubaccountsReader(this.deps);
88
+ this.userOpenOrders = new UserOpenOrdersReader(this.deps);
89
+ this.userBulkOrders = new UserBulkOrdersReader(this.deps);
90
+ this.userFundingHistory = new UserFundingHistoryReader(this.deps);
91
+ this.userTradeHistory = new UserTradeHistoryReader(this.deps);
92
+ this.userActiveTwaps = new UserActiveTwapsReader(this.deps);
93
+ this.candlesticks = new CandlesticksReader(this.deps);
94
+ this.portfolioChart = new PortfolioChartReader(this.deps);
95
+ this.leaderboard = new LeaderboardReader(this.deps);
96
+ this.vaults = new VaultsReader(this.deps);
97
+ this.delegations = new DelegationsReader(this.deps);
98
+ this.userNotifications = new UserNotificationsReader(this.deps);
99
+ }
100
+
101
+ async globalPerpEngineState() {
102
+ try {
103
+ // Attempt to get the global perp engine state resource
104
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return, custom/no-get-account-resource
105
+ return await this.deps.aptos.getAccountResource({
106
+ accountAddress: this.config.deployment.package,
107
+ resourceType: `${this.config.deployment.package}::perp_engine::Global`,
108
+ });
109
+ } catch {
110
+ return false;
111
+ }
112
+ }
113
+
114
+ async collateralBalanceDecimals() {
115
+ const decimals = await this.deps.aptos.view<[string]>({
116
+ payload: {
117
+ function: `${this.config.deployment.package}::perp_engine::collateral_balance_decimals`,
118
+ typeArguments: [],
119
+ functionArguments: [],
120
+ },
121
+ });
122
+ return Number(decimals[0]);
123
+ }
124
+
125
+ async usdcDecimals() {
126
+ if (this.cache.usdcDecimals) {
127
+ return this.cache.usdcDecimals;
128
+ }
129
+ const decimals = await this.deps.aptos.view<[string]>({
130
+ payload: {
131
+ function: `0x1::fungible_asset::decimals`,
132
+ typeArguments: ["0x1::fungible_asset::Metadata"],
133
+ functionArguments: [this.config.deployment.usdc],
134
+ },
135
+ });
136
+ this.cache.usdcDecimals = Number(decimals[0]);
137
+ return this.cache.usdcDecimals;
138
+ }
139
+
140
+ async usdcBalance(addr: string | AccountAddress) {
141
+ const usdcDecimals = await this.usdcDecimals();
142
+ const balance = await this.deps.aptos.view<[string]>({
143
+ payload: {
144
+ function: `0x1::primary_fungible_store::balance`,
145
+ typeArguments: ["0x1::fungible_asset::Metadata"],
146
+ functionArguments: [addr, this.config.deployment.usdc],
147
+ },
148
+ });
149
+ return Number(balance[0]) / 10 ** usdcDecimals;
150
+ }
151
+
152
+ /**
153
+ * Get the number of restricted mints remaining for the day.
154
+ * Global value. Not specific to an account.
155
+ *
156
+ * @remarks This method is temporary and only for use in testnet. The mints_remaining
157
+ * view function is a testnet-only feature and should be removed before mainnet deployment.
158
+ */
159
+ async mintsRemaining(): Promise<number> {
160
+ const result = await this.deps.aptos.view<[string]>({
161
+ payload: {
162
+ function: `${this.config.deployment.package}::usdc::mints_remaining`,
163
+ typeArguments: [],
164
+ functionArguments: [],
165
+ },
166
+ });
167
+ return Number(result[0]);
168
+ }
169
+
170
+ /**
171
+ * Get the available restricted mint amount for an account (account limit).
172
+ * Returns the amount in chain units (raw u64).
173
+ *
174
+ * @remarks This method is temporary and only for use in testnet. The available_restricted_mint_for
175
+ * view function is a testnet-only feature and should be removed before mainnet deployment.
176
+ */
177
+ async availableRestrictedMintFor(addr: string | AccountAddress): Promise<number> {
178
+ const result = await this.deps.aptos.view<[string]>({
179
+ payload: {
180
+ function: `${this.config.deployment.package}::usdc::available_restricted_mint_for`,
181
+ typeArguments: [],
182
+ functionArguments: [addr],
183
+ },
184
+ });
185
+ return Number(result[0]);
186
+ }
187
+
188
+ /**
189
+ * Get the timestamp when the restricted mint limits reset (in seconds).
190
+ *
191
+ * @remarks This method is temporary and only for use in testnet. The restricted_mint_daily_reset_timestamp
192
+ * view function is a testnet-only feature and should be removed before mainnet deployment.
193
+ */
194
+ async getTriggerResetMintTs(): Promise<number> {
195
+ const result = await this.deps.aptos.view<[string]>({
196
+ payload: {
197
+ function: `${this.config.deployment.package}::usdc::restricted_mint_daily_reset_timestamp`,
198
+ typeArguments: [],
199
+ functionArguments: [],
200
+ },
201
+ });
202
+ return Number(result[0]);
203
+ }
204
+
205
+ async tokenBalance(
206
+ addr: string | AccountAddress,
207
+ tokenAddr: string | AccountAddress,
208
+ tokenDecimals: number,
209
+ ) {
210
+ const balance = await this.deps.aptos.view<[string]>({
211
+ payload: {
212
+ function: `0x1::primary_fungible_store::balance`,
213
+ typeArguments: ["0x1::fungible_asset::Metadata"],
214
+ functionArguments: [addr, tokenAddr],
215
+ },
216
+ });
217
+ return Number(balance[0]) / 10 ** tokenDecimals;
218
+ }
219
+
220
+ /**
221
+ * Get the balance of the account
222
+ * @returns The balance of the account
223
+ */
224
+ async accountBalance(addr: AccountAddress) {
225
+ const balance = await this.deps.aptos.view<[number]>({
226
+ payload: {
227
+ function: `${this.config.deployment.package}::perp_engine::get_account_balance_fungible`,
228
+ typeArguments: [],
229
+ functionArguments: [addr],
230
+ },
231
+ });
232
+ return balance[0];
233
+ }
234
+
235
+ /**
236
+ * Get the size of the position for an account
237
+ * @param addr The address of the account to get the position size for
238
+ * @param marketAddr The name of the market to get the position size for
239
+ * @returns The size of the position for the account
240
+ */
241
+ async positionSize(addr: AccountAddress, marketAddr: string) {
242
+ return await this.deps.aptos.view<[number]>({
243
+ payload: {
244
+ function: `${this.config.deployment.package}::perp_engine::get_position_size`,
245
+ typeArguments: [],
246
+ functionArguments: [addr, marketAddr],
247
+ },
248
+ });
249
+ }
250
+
251
+ /**
252
+ * Get the crossed position for an account
253
+ * @param addr The address of the account to get the crossed position for
254
+ * @returns The crossed position for the account
255
+ */
256
+ async getCrossedPosition(addr: AccountAddress) {
257
+ const seed = new TextEncoder().encode("perp_position");
258
+ const crossedPositionAddr = createObjectAddress(addr, seed);
259
+ try {
260
+ // TODO: Fix lint error
261
+ // eslint-disable-next-line custom/no-get-account-resource
262
+ const crossedPosition = await this.deps.aptos.getAccountResource<CrossedPosition>({
263
+ accountAddress: crossedPositionAddr,
264
+ resourceType: `${this.config.deployment.package}::perp_positions::CrossedPosition`,
265
+ });
266
+ return CrossedPosition.parse(crossedPosition);
267
+ } catch {
268
+ return null;
269
+ }
270
+ }
271
+ }
@@ -0,0 +1,21 @@
1
+ import { constructKnownQueryParams } from "../../utils";
2
+ import { BaseReader } from "../base-reader";
3
+ import { LeaderboardRequestArgs, LeaderboardSchema } from "./leaderboard.types";
4
+
5
+ export class LeaderboardReader extends BaseReader {
6
+ /**
7
+ * Get the leaderboard
8
+ * @param queryParams The query parameters for the leaderboard
9
+ * @returns The leaderboard
10
+ */
11
+ async getLeaderboard({ fetchOptions, ...args }: LeaderboardRequestArgs) {
12
+ const response = await this.getRequest({
13
+ schema: LeaderboardSchema,
14
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/leaderboard`,
15
+ queryParams: constructKnownQueryParams(args),
16
+ options: fetchOptions,
17
+ });
18
+
19
+ return response.data;
20
+ }
21
+ }
@@ -0,0 +1,26 @@
1
+ import { z } from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+ import { PageParams, PaginatedResponseSchema, SearchTermParams, SortParams } from "../types";
5
+
6
+ export type LeaderboardSortKey = "volume" | "realized_pnl" | "roi" | "account_value";
7
+
8
+ export interface LeaderboardRequestArgs
9
+ extends BaseRequestArgs,
10
+ PageParams,
11
+ SearchTermParams,
12
+ SortParams<LeaderboardSortKey> {}
13
+
14
+ export const LeaderboardItemSchema = z.object({
15
+ rank: z.number(),
16
+ account: z.string(),
17
+ account_value: z.number(),
18
+ realized_pnl: z.number(),
19
+ roi: z.number(),
20
+ volume: z.number(),
21
+ });
22
+
23
+ export const LeaderboardSchema = PaginatedResponseSchema(LeaderboardItemSchema);
24
+
25
+ export type LeaderboardItem = z.infer<typeof LeaderboardItemSchema>;
26
+ export type Leaderboard = z.infer<typeof LeaderboardSchema>;
@@ -0,0 +1,26 @@
1
+ import { BaseReader, BaseRequestArgs } from "../base-reader";
2
+ import { MarketContextsSchema } from "./market-contexts.types";
3
+
4
+ export class MarketContextsReader extends BaseReader {
5
+ /**
6
+ * Get the asset context for a given market
7
+ *
8
+ * // DEV NOTE: marketName is not supported by the API yet
9
+ * // @param marketName The name of the market to get asset context for
10
+ * @returns The asset context for the given market or all if no market name is provided
11
+ */
12
+ async getAll({ fetchOptions }: BaseRequestArgs = {}) {
13
+ // const marketAddr = marketName
14
+ // ? getMarketAddr(marketName, this.config.deployment.perpEngineGlobal)
15
+ // : undefined;
16
+ const response = await this.getRequest({
17
+ schema: MarketContextsSchema,
18
+ // TODO: Update this when the API is /market_contexts
19
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/asset_contexts`,
20
+ // queryParams: marketAddr ? { market: marketAddr.toString() } : undefined,
21
+ options: fetchOptions,
22
+ });
23
+
24
+ return response.data;
25
+ }
26
+ }
@@ -0,0 +1,18 @@
1
+ import z from "zod/v4";
2
+
3
+ export const MarketContextSchema = z.object({
4
+ market: z.string(),
5
+ volume_24h: z.number(),
6
+ open_interest: z.number(),
7
+ mark_price: z.number(),
8
+ mid_price: z.number(),
9
+ oracle_price: z.number(),
10
+ previous_day_price: z.number(),
11
+ price_change_pct_24h: z.number(),
12
+ price_history: z.array(z.number()),
13
+ });
14
+
15
+ export const MarketContextsSchema = z.array(MarketContextSchema);
16
+
17
+ export type MarketContext = z.infer<typeof MarketContextSchema>;
18
+ export type MarketContexts = z.infer<typeof MarketContextsSchema>;
@@ -0,0 +1,60 @@
1
+ import { getMarketAddr } from "../../utils";
2
+ import { BaseReader } from "../base-reader";
3
+ import {
4
+ MarketDepth,
5
+ MarketDepthAggregationSize,
6
+ MarketDepthRequestArgs,
7
+ MarketDepthSchema,
8
+ } from "./market-depth.types";
9
+
10
+ export class MarketDepthReader extends BaseReader {
11
+ /**
12
+ * Get the market depth data for a given market
13
+ * @param marketName The name of the market to get market depth for
14
+ * @returns The market depth data for the given market
15
+ */
16
+ async getByName({ marketName, limit, fetchOptions }: MarketDepthRequestArgs) {
17
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
18
+ const queryParams = new URLSearchParams({ market: marketAddr.toString() });
19
+ if (limit !== undefined) {
20
+ queryParams.set("limit", limit.toString());
21
+ }
22
+
23
+ const response = await this.getRequest({
24
+ schema: MarketDepthSchema,
25
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/depth`,
26
+ queryParams,
27
+ options: fetchOptions,
28
+ });
29
+
30
+ return response.data;
31
+ }
32
+
33
+ /**
34
+ * Subscribe to market depth updates for a given market ID
35
+ * @param marketName The name of the market to subscribe to
36
+ * @param onData Callback function for received market depth data
37
+ * @returns A function to unsubscribe from the market depth updates
38
+ */
39
+ subscribeByName(
40
+ marketName: string,
41
+ aggregationSize: MarketDepthAggregationSize,
42
+ onData: (data: MarketDepth) => void,
43
+ ) {
44
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
45
+ const topic = `depth:${marketAddr}:${aggregationSize}`;
46
+
47
+ return this.deps.ws.subscribe(topic, MarketDepthSchema, onData);
48
+ }
49
+
50
+ resetSubscriptionByName(marketName: string, aggregationSize: MarketDepthAggregationSize = 1) {
51
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
52
+ const topic = `depth:${marketAddr}:${aggregationSize}`;
53
+
54
+ this.deps.ws.reset(topic);
55
+ }
56
+
57
+ getAggregationSizes() {
58
+ return [1, 2, 5, 10] as const satisfies MarketDepthAggregationSize[];
59
+ }
60
+ }
@@ -0,0 +1,24 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface MarketDepthRequestArgs extends BaseRequestArgs {
6
+ marketName: string;
7
+ limit?: number;
8
+ }
9
+
10
+ export const MarketOrderSchema = z.object({
11
+ price: z.number(),
12
+ size: z.number(),
13
+ });
14
+
15
+ export const MarketDepthSchema = z.object({
16
+ market: z.string(),
17
+ bids: z.array(MarketOrderSchema),
18
+ asks: z.array(MarketOrderSchema),
19
+ });
20
+
21
+ // TODO: These values will change in the near future
22
+ export type MarketDepthAggregationSize = 1 | 2 | 5 | 10;
23
+ export type MarketOrder = z.infer<typeof MarketOrderSchema>;
24
+ export type MarketDepth = z.infer<typeof MarketDepthSchema>;
@@ -0,0 +1,61 @@
1
+ import { getMarketAddr } from "../../utils";
2
+ import { BaseReader, BaseRequestArgs } from "../base-reader";
3
+ import {
4
+ MarketPricesByNameRequestArgs,
5
+ MarketPricesSchema,
6
+ MarketPriceWsMessage,
7
+ MarketPriceWsMessageSchema,
8
+ } from "./market-prices.types";
9
+
10
+ export class MarketPricesReader extends BaseReader {
11
+ async getAll({ fetchOptions }: BaseRequestArgs = {}) {
12
+ const response = await this.getRequest({
13
+ schema: MarketPricesSchema,
14
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/prices`,
15
+ options: fetchOptions,
16
+ });
17
+ return response.data;
18
+ }
19
+
20
+ /**
21
+ * Get the price data for a given market
22
+ * @param marketName The name of the market to get prices for
23
+ * @returns The price data for the given market
24
+ */
25
+ async getByName({ marketName, fetchOptions }: MarketPricesByNameRequestArgs) {
26
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
27
+
28
+ const response = await this.getRequest({
29
+ schema: MarketPricesSchema,
30
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/prices`,
31
+ queryParams: { market: marketAddr.toString() },
32
+ options: fetchOptions,
33
+ });
34
+ return response.data;
35
+ }
36
+
37
+ /**
38
+ * Subscribe to price updates for a market
39
+ * @param marketName The name of the market to subscribe to
40
+ * @param onData Callback function for received price data
41
+ * @returns A function to unsubscribe from the oracle price updates
42
+ */
43
+ subscribeByName(marketName: string, onData: (data: MarketPriceWsMessage) => void) {
44
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
45
+ const topic = `market_price:${marketAddr}`;
46
+
47
+ return this.deps.ws.subscribe(topic, MarketPriceWsMessageSchema, onData);
48
+ }
49
+
50
+ /**
51
+ * Subscribe to price updates for a market
52
+ * @param marketAddr The address of the market to subscribe to
53
+ * @param onData Callback function for received price data
54
+ * @returns A function to unsubscribe from the oracle price updates
55
+ */
56
+ subscribeByAddress(marketAddr: string, onData: (data: MarketPriceWsMessage) => void) {
57
+ const topic = `market_price:${marketAddr}`;
58
+
59
+ return this.deps.ws.subscribe(topic, MarketPriceWsMessageSchema, onData);
60
+ }
61
+ }
@@ -0,0 +1,38 @@
1
+ import { z } from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface MarketPricesByNameRequestArgs extends BaseRequestArgs {
6
+ marketName: string;
7
+ }
8
+
9
+ export const PricesSchema = z.object({
10
+ market: z.string(),
11
+ mark_px: z.number(),
12
+ mid_px: z.number(),
13
+ oracle_px: z.number(),
14
+ funding_rate_bps: z.number(),
15
+ is_funding_positive: z.boolean(),
16
+ open_interest: z.number(),
17
+ transaction_unix_ms: z.number(),
18
+ });
19
+
20
+ export const MarketPricesSchema = z.array(PricesSchema);
21
+
22
+ export const MarketPriceSchema = z.object({
23
+ market: z.string(),
24
+ mark_px: z.number(),
25
+ mid_px: z.number(),
26
+ oracle_px: z.number(),
27
+ funding_rate_bps: z.number(),
28
+ is_funding_positive: z.boolean(),
29
+ open_interest: z.number(),
30
+ transaction_unix_ms: z.number(),
31
+ });
32
+
33
+ export const MarketPriceWsMessageSchema = z.object({ price: MarketPriceSchema });
34
+
35
+ export type Prices = z.infer<typeof PricesSchema>;
36
+ export type MarketPrices = z.infer<typeof MarketPricesSchema>;
37
+ export type MarketPrice = z.infer<typeof MarketPriceSchema>;
38
+ export type MarketPriceWsMessage = z.infer<typeof MarketPriceWsMessageSchema>;
@@ -0,0 +1,46 @@
1
+ import { getMarketAddr } from "../../utils";
2
+ import { BaseReader } from "../base-reader";
3
+ import {
4
+ MarketTradesHistorySchema,
5
+ MarketTradesRequestArgs,
6
+ MarketTradeWsMessage,
7
+ MarketTradeWsMessageSchema,
8
+ } from "./market-trades.types";
9
+
10
+ export class MarketTradesReader extends BaseReader {
11
+ /**
12
+ * Get the latest market trades for a given market
13
+ * @param marketName The name of the market to get market trades for
14
+ * @param limit The number of market trades to get
15
+ * @returns The market trades for the given market
16
+ */
17
+ async getByName({ marketName, limit, fetchOptions }: MarketTradesRequestArgs) {
18
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
19
+ const queryParams = new URLSearchParams({ market: marketAddr.toString() });
20
+ if (limit !== undefined) {
21
+ queryParams.set("limit", limit.toString());
22
+ }
23
+
24
+ const response = await this.getRequest({
25
+ schema: MarketTradesHistorySchema,
26
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/trades`,
27
+ queryParams,
28
+ options: fetchOptions,
29
+ });
30
+
31
+ return response.data;
32
+ }
33
+
34
+ /**
35
+ * Subscribe to the latest market trades for a given market
36
+ * @param marketName The name of the market to subscribe to
37
+ * @param onData Callback function for received market trades data
38
+ * @returns A function to unsubscribe from the market trades updates
39
+ */
40
+ subscribeByName(marketName: string, onData: (data: MarketTradeWsMessage) => void) {
41
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
42
+ const topic = `trades:${marketAddr}`;
43
+
44
+ return this.deps.ws.subscribe(topic, MarketTradeWsMessageSchema, onData);
45
+ }
46
+ }
@@ -0,0 +1,34 @@
1
+ import { z } from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface MarketTradesRequestArgs extends BaseRequestArgs {
6
+ marketName: string;
7
+ limit?: number;
8
+ }
9
+
10
+ export const MarketTradeSchema = z.object({
11
+ account: z.string(),
12
+ market: z.string(),
13
+ action: z.string(),
14
+ size: z.number(),
15
+ price: z.number(),
16
+ is_profit: z.boolean(),
17
+ realized_pnl_amount: z.number(),
18
+ is_funding_positive: z.boolean(),
19
+ realized_funding_amount: z.number(),
20
+ is_rebate: z.boolean(),
21
+ fee_amount: z.number(),
22
+ transaction_unix_ms: z.number(),
23
+ transaction_version: z.number(),
24
+ });
25
+
26
+ export const MarketTradesHistorySchema = z.array(MarketTradeSchema);
27
+
28
+ export const MarketTradeWsMessageSchema = z.object({
29
+ trades: z.array(MarketTradeSchema),
30
+ });
31
+
32
+ export type MarketTrade = z.infer<typeof MarketTradeSchema>;
33
+ export type MarketTradesHistory = z.infer<typeof MarketTradesHistorySchema>;
34
+ export type MarketTradeWsMessage = z.infer<typeof MarketTradeWsMessageSchema>;