@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,115 @@
1
+ import { Aptos, AptosConfig } from "@aptos-labs/ts-sdk";
2
+
3
+ import { DecibelConfig } from "../constants";
4
+
5
+ export interface GasPriceInfo {
6
+ gasEstimate: number;
7
+ timestamp: number;
8
+ }
9
+
10
+ export interface GasPriceManagerOptions {
11
+ nodeApiKey?: string;
12
+ multiplier: number;
13
+ refreshIntervalMs: number;
14
+ }
15
+
16
+ export class GasPriceManager {
17
+ private gasPrice: GasPriceInfo | null = null;
18
+ private intervalId: NodeJS.Timeout | null = null;
19
+ private readonly aptos: Aptos;
20
+ private readonly refreshIntervalMs: number;
21
+ private isInitialized = false;
22
+ private readonly multiplier: number;
23
+
24
+ constructor(config: DecibelConfig, opts?: GasPriceManagerOptions) {
25
+ this.aptos = new Aptos(
26
+ new AptosConfig({
27
+ network: config.network,
28
+ fullnode: config.fullnodeUrl,
29
+ clientConfig: { API_KEY: opts?.nodeApiKey },
30
+ }),
31
+ );
32
+ this.refreshIntervalMs = opts?.refreshIntervalMs ?? 60_000; // default to 1 minute
33
+ this.multiplier = opts?.multiplier ?? 2; // default to 2x multilier to ensure we have enough gas for the transactipon
34
+ }
35
+
36
+ getGasPrice(): number | undefined {
37
+ const estimatedGasPrice = this.gasPrice?.gasEstimate;
38
+ if (!estimatedGasPrice) {
39
+ return undefined;
40
+ }
41
+ return estimatedGasPrice;
42
+ }
43
+
44
+ /**
45
+ * Initialize the gas price manager and start fetching gas prices
46
+ */
47
+ async initialize(): Promise<void> {
48
+ try {
49
+ if (this.isInitialized) {
50
+ return;
51
+ }
52
+
53
+ // Fetch initial gas price
54
+ await this.fetchAndSetGasPrice();
55
+
56
+ // Set up interval to refresh gas price
57
+ this.intervalId = setInterval(async () => {
58
+ try {
59
+ await this.fetchAndSetGasPrice();
60
+ } catch (error) {
61
+ console.warn("Failed to fetch gas price:", error);
62
+ }
63
+ }, this.refreshIntervalMs);
64
+
65
+ this.isInitialized = true;
66
+ } catch (error) {
67
+ console.error("Failed to initialize gas price manager:", error);
68
+ }
69
+ }
70
+
71
+ refresh() {
72
+ void this.fetchAndSetGasPrice();
73
+ }
74
+
75
+ /**
76
+ * Stop the gas price manager and clear the interval
77
+ */
78
+ destroy(): void {
79
+ if (this.intervalId) {
80
+ clearInterval(this.intervalId);
81
+ this.intervalId = null;
82
+ }
83
+ this.isInitialized = false;
84
+ this.gasPrice = null; // Clear cached data
85
+ }
86
+
87
+ async fetchGasPriceEstimation(): Promise<number> {
88
+ return this.aptos.getGasPriceEstimation().then((gasEstimation) => {
89
+ return gasEstimation.gas_estimate * this.multiplier; // Multiplier is applied here to ensure we have enough gas for the transaction
90
+ });
91
+ }
92
+
93
+ /**
94
+ * Fetch gas price from the network
95
+ */
96
+ async fetchAndSetGasPrice(): Promise<number> {
97
+ try {
98
+ const gasEstimate = await this.fetchGasPriceEstimation();
99
+
100
+ if (!gasEstimate) {
101
+ throw new Error("Gas estimation returned no gas estimate");
102
+ }
103
+
104
+ this.gasPrice = {
105
+ gasEstimate,
106
+ timestamp: Date.now(),
107
+ };
108
+
109
+ return gasEstimate;
110
+ } catch (error) {
111
+ console.error("Failed to fetch gas price:", error);
112
+ throw error;
113
+ }
114
+ }
115
+ }
package/src/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ export * from "./admin";
2
+ export * from "./constants";
3
+ export * from "./fee-pay";
4
+ export * from "./gas/gas-price-manager";
5
+ export * from "./order-event.types";
6
+ export * from "./order-status";
7
+ export * from "./read/index";
8
+ export * from "./subaccount-types";
9
+ export * from "./utils";
10
+ export * from "./write";
@@ -0,0 +1,65 @@
1
+ // Type definitions for OrderEvent returned by placeOrder transactions
2
+
3
+ export interface OrderEventClientOrderId {
4
+ vec: unknown[];
5
+ }
6
+
7
+ export interface OrderEventStatus {
8
+ __variant__: string;
9
+ }
10
+
11
+ export interface OrderEventTimeInForce {
12
+ __variant__: string;
13
+ }
14
+
15
+ export interface OrderEventTriggerCondition {
16
+ vec: unknown[];
17
+ }
18
+
19
+ export interface OrderEventOrderId {
20
+ order_id: string;
21
+ }
22
+
23
+ export interface OrderEvent {
24
+ client_order_id: OrderEventClientOrderId;
25
+ details: string;
26
+ is_bid: boolean;
27
+ is_taker: boolean;
28
+ market: string;
29
+ metadata_bytes: string;
30
+ order_id: string;
31
+ orig_size: string;
32
+ parent: string;
33
+ price: string;
34
+ remaining_size: string;
35
+ size_delta: string;
36
+ status: OrderEventStatus;
37
+ time_in_force: OrderEventTimeInForce;
38
+ trigger_condition: OrderEventTriggerCondition;
39
+ user: string;
40
+ }
41
+
42
+ export interface TwapEvent {
43
+ account: string;
44
+ duration_s: string;
45
+ frequency_s: string;
46
+ is_buy: boolean;
47
+ is_reduce_only: boolean;
48
+ market: string;
49
+ order_id: OrderEventOrderId;
50
+ orig_size: string;
51
+ remain_size: string;
52
+ start_time_s: string;
53
+ status: OrderEventStatus;
54
+ }
55
+
56
+ export type PlaceOrderResult =
57
+ | {
58
+ success: true;
59
+ orderId: string | undefined;
60
+ transactionHash: string;
61
+ }
62
+ | {
63
+ success: false;
64
+ error: string;
65
+ };
@@ -0,0 +1,89 @@
1
+ import z from "zod/v4";
2
+
3
+ import { DecibelConfig } from "./constants";
4
+
5
+ // Order status response schema
6
+ export const OrderStatusSchema = z.object({
7
+ parent: z.string(),
8
+ market: z.string(),
9
+ order_id: z.string(),
10
+ status: z.string(),
11
+ orig_size: z.number(),
12
+ remaining_size: z.number(),
13
+ size_delta: z.number(),
14
+ price: z.number(),
15
+ is_buy: z.boolean(),
16
+ details: z.string(),
17
+ transaction_version: z.number(),
18
+ unix_ms: z.number(),
19
+ });
20
+
21
+ export type OrderStatus = z.infer<typeof OrderStatusSchema>;
22
+
23
+ export type OrderStatusType = "Acknowledged" | "Filled" | "Cancelled" | "Rejected" | "Unknown";
24
+
25
+ export class OrderStatusClient {
26
+ constructor(private config: DecibelConfig) {}
27
+
28
+ /**
29
+ * Get order status by order ID and market address using REST API
30
+ */
31
+ async getOrderStatus(
32
+ orderId: string,
33
+ marketAddress: string,
34
+ userAddress: string,
35
+ ): Promise<OrderStatus | null> {
36
+ try {
37
+ const url = `${this.config.tradingHttpUrl}/api/v1/orders?order_id=${orderId}&market_address=${marketAddress}&user_address=${userAddress}`;
38
+ const response = await fetch(url);
39
+
40
+ if (!response.ok) {
41
+ if (response.status === 404) {
42
+ return null; // Order not found yet
43
+ }
44
+ throw new Error(`HTTP error! status: ${response.status}`);
45
+ }
46
+
47
+ const data = await response.json();
48
+ return OrderStatusSchema.parse(data);
49
+ } catch (error) {
50
+ console.error("Error fetching order status:", error);
51
+ return null;
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Parse order status string to enum-like type
57
+ */
58
+ parseOrderStatusType(status: string | undefined | null): OrderStatusType {
59
+ if (!status) return "Unknown";
60
+ const upperStatus = status.toLowerCase();
61
+ if (upperStatus.includes("acknowledged")) return "Acknowledged";
62
+ if (upperStatus.includes("filled")) return "Filled";
63
+ if (upperStatus.includes("cancelled")) return "Cancelled";
64
+ if (upperStatus.includes("rejected")) return "Rejected";
65
+ return "Unknown";
66
+ }
67
+
68
+ /**
69
+ * Check if order status represents success
70
+ */
71
+ isSuccessStatus(status: string | undefined | null): boolean {
72
+ return this.parseOrderStatusType(status) === "Filled";
73
+ }
74
+
75
+ /**
76
+ * Check if order status represents failure
77
+ */
78
+ isFailureStatus(status: string | undefined | null): boolean {
79
+ const statusType = this.parseOrderStatusType(status);
80
+ return statusType === "Cancelled" || statusType === "Rejected";
81
+ }
82
+
83
+ /**
84
+ * Check if order status is final (success or failure)
85
+ */
86
+ isFinalStatus(status: string | undefined | null): boolean {
87
+ return this.isSuccessStatus(status) || this.isFailureStatus(status);
88
+ }
89
+ }
@@ -0,0 +1,43 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import {
3
+ AccountOverviewRequestArgs,
4
+ AccountOverviewSchema,
5
+ AccountOverviewWsMessage,
6
+ AccountOverviewWsMessageSchema,
7
+ } from "./account-overview.types";
8
+
9
+ export class AccountOverviewReader extends BaseReader {
10
+ /**
11
+ * Get the account overview for a given user
12
+ * @param subAddr The subaccount address to get the account overview for
13
+ * @returns The account overview for the given subaccount address
14
+ */
15
+ async getByAddr({ subAddr, volumeWindow, fetchOptions }: AccountOverviewRequestArgs) {
16
+ const queryParams = new URLSearchParams({ user: subAddr });
17
+
18
+ if (volumeWindow) {
19
+ queryParams.set("volume_window", volumeWindow);
20
+ }
21
+
22
+ const response = await this.getRequest({
23
+ schema: AccountOverviewSchema,
24
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/account_overviews`,
25
+ queryParams,
26
+ options: fetchOptions,
27
+ });
28
+
29
+ return response.data;
30
+ }
31
+
32
+ /**
33
+ * Subscribe to account overview
34
+ * @param subAddr The subaccount address of the user to subscribe to
35
+ * @param onData Callback function for received account overview data
36
+ * @returns A function to unsubscribe from the account overview updates
37
+ */
38
+ subscribeByAddr(subAddr: string, onData: (data: AccountOverviewWsMessage) => void) {
39
+ const topic = `account_overview:${subAddr}`;
40
+
41
+ return this.deps.ws.subscribe(topic, AccountOverviewWsMessageSchema, onData);
42
+ }
43
+ }
@@ -0,0 +1,45 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface AccountOverviewRequestArgs extends BaseRequestArgs {
6
+ subAddr: string;
7
+ volumeWindow?: VolumeWindow;
8
+ }
9
+
10
+ export const VolumeWindow = {
11
+ SevenDays: "7d",
12
+ FourteenDays: "14d",
13
+ ThirtyDays: "30d",
14
+ NinetyDays: "90d",
15
+ } as const;
16
+
17
+ export type VolumeWindow = (typeof VolumeWindow)[keyof typeof VolumeWindow];
18
+
19
+ export const AccountOverviewSchema = z.object({
20
+ perp_equity_balance: z.number(),
21
+ unrealized_pnl: z.number(),
22
+ unrealized_funding_cost: z.number(),
23
+ cross_margin_ratio: z.number(),
24
+ maintenance_margin: z.number(),
25
+ cross_account_leverage_ratio: z.number().nullable(),
26
+ volume: z.number().nullable(),
27
+ all_time_return: z.number().nullable(),
28
+ pnl_90d: z.number().nullable(),
29
+ sharpe_ratio: z.number().nullable(),
30
+ max_drawdown: z.number().nullable(),
31
+ weekly_win_rate_12w: z.number().nullable(),
32
+ average_cash_position: z.number().nullable(),
33
+ average_leverage: z.number().nullable(),
34
+ cross_account_position: z.number(),
35
+ total_margin: z.number(),
36
+ usdc_cross_withdrawable_balance: z.number(),
37
+ usdc_isolated_withdrawable_balance: z.number(),
38
+ });
39
+
40
+ export const AccountOverviewWsMessageSchema = z.object({
41
+ account_overview: AccountOverviewSchema.omit({ volume: true }),
42
+ });
43
+
44
+ export type AccountOverview = z.infer<typeof AccountOverviewSchema>;
45
+ export type AccountOverviewWsMessage = z.infer<typeof AccountOverviewWsMessageSchema>;
@@ -0,0 +1,41 @@
1
+ import { DecibelReaderDeps } from "../constants";
2
+ import {
3
+ FetchOptions,
4
+ getRequest as baseGetRequest,
5
+ GetRequestArgs,
6
+ patchRequest as basePatchRequest,
7
+ PatchRequestArgs,
8
+ postRequest as basePostRequest,
9
+ PostRequestArgs,
10
+ } from "../utils";
11
+
12
+ export interface BaseRequestArgs {
13
+ fetchOptions?: FetchOptions;
14
+ }
15
+
16
+ export class BaseReader {
17
+ constructor(protected readonly deps: DecibelReaderDeps) {}
18
+
19
+ protected async getRequest<TResponseData>(args: Omit<GetRequestArgs<TResponseData>, "apiKey">) {
20
+ return baseGetRequest({
21
+ ...args,
22
+ apiKey: this.deps.apiKey,
23
+ });
24
+ }
25
+
26
+ protected async postRequest<TResponseData>(args: Omit<PostRequestArgs<TResponseData>, "apiKey">) {
27
+ return basePostRequest({
28
+ ...args,
29
+ apiKey: this.deps.apiKey,
30
+ });
31
+ }
32
+
33
+ protected async patchRequest<TResponseData>(
34
+ args: Omit<PatchRequestArgs<TResponseData>, "apiKey">,
35
+ ) {
36
+ return basePatchRequest({
37
+ ...args,
38
+ apiKey: this.deps.apiKey,
39
+ });
40
+ }
41
+ }
@@ -0,0 +1,61 @@
1
+ import { getMarketAddr } from "../../utils";
2
+ import { BaseReader } from "../base-reader";
3
+ import {
4
+ CandlestickInterval,
5
+ CandlesticksRequestArgs,
6
+ CandlesticksSchema,
7
+ CandlestickWsMessage,
8
+ CandlestickWsMessageSchema,
9
+ } from "./candlesticks.types";
10
+
11
+ export class CandlesticksReader extends BaseReader {
12
+ /**
13
+ * Get the candlestick data points for a given market during a given time period
14
+ * @param marketName The name of the market to get candlestick data for
15
+ * @param interval The time interval of the candlestick data points
16
+ * @param startTime The start time of the candlestick data points
17
+ * @param endTime The end time of the candlestick data points
18
+ * @returns The candlestick data points for the given market during the given time period
19
+ */
20
+ async getByName({
21
+ marketName,
22
+ interval,
23
+ startTime,
24
+ endTime,
25
+ fetchOptions,
26
+ }: CandlesticksRequestArgs) {
27
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
28
+
29
+ const response = await this.getRequest({
30
+ schema: CandlesticksSchema,
31
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/candlesticks`,
32
+ queryParams: {
33
+ market: marketAddr.toString(),
34
+ interval,
35
+ startTime: startTime.toString(),
36
+ endTime: endTime.toString(),
37
+ },
38
+ options: fetchOptions,
39
+ });
40
+
41
+ return response.data;
42
+ }
43
+
44
+ /**
45
+ * Subscribe to candlestick data points for a given market
46
+ * @param marketName The name of the market to subscribe to
47
+ * @param interval The time interval of the candlestick data points
48
+ * @param onData Callback function for received candlestick data points
49
+ * @returns A function to unsubscribe from the candlestick updates
50
+ */
51
+ subscribeByName(
52
+ marketName: string,
53
+ interval: CandlestickInterval,
54
+ onData: (data: CandlestickWsMessage) => void,
55
+ ) {
56
+ const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
57
+ const topic = `market_candlestick:${marketAddr}:${interval}`;
58
+
59
+ return this.deps.ws.subscribe(topic, CandlestickWsMessageSchema, onData);
60
+ }
61
+ }
@@ -0,0 +1,46 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface CandlesticksRequestArgs extends BaseRequestArgs {
6
+ marketName: string;
7
+ interval: CandlestickInterval;
8
+ startTime: number;
9
+ endTime: number;
10
+ }
11
+ export const CandlestickInterval = {
12
+ OneMinute: "1m",
13
+ FifteenMinutes: "15m",
14
+ OneHour: "1h",
15
+ FourHours: "4h",
16
+ OneDay: "1d",
17
+ } as const;
18
+
19
+ export type CandlestickInterval = (typeof CandlestickInterval)[keyof typeof CandlestickInterval];
20
+
21
+ export const CandlestickSchema = z.object({
22
+ /** time end */
23
+ T: z.number(),
24
+ /** close */
25
+ c: z.number(),
26
+ /** high */
27
+ h: z.number(),
28
+ /** internal */
29
+ i: z.string(),
30
+ /** low */
31
+ l: z.number(),
32
+ /** open */
33
+ o: z.number(),
34
+ /** time start */
35
+ t: z.number(),
36
+ /** volume */
37
+ v: z.number(),
38
+ });
39
+ export const CandlesticksSchema = z.array(CandlestickSchema);
40
+ export const CandlestickWsMessageSchema = z.object({
41
+ candle: CandlestickSchema,
42
+ });
43
+
44
+ export type Candlestick = z.infer<typeof CandlestickSchema>;
45
+ export type Candlesticks = z.infer<typeof CandlesticksSchema>;
46
+ export type CandlestickWsMessage = z.infer<typeof CandlestickWsMessageSchema>;
@@ -0,0 +1,22 @@
1
+ import { BaseReader } from "../base-reader";
2
+ import { DelegationsRequestArgs, DelegationsSchema } from "./delegations.types";
3
+
4
+ export class DelegationsReader extends BaseReader {
5
+ /**
6
+ * Get all active delegations for a subaccount
7
+ * @param args The arguments containing the subaccount address
8
+ * @returns The list of active delegations for the given subaccount
9
+ */
10
+ async getAll({ subAddr, fetchOptions }: DelegationsRequestArgs) {
11
+ const response = await this.getRequest({
12
+ schema: DelegationsSchema,
13
+ url: `${this.deps.config.tradingHttpUrl}/api/v1/delegations`,
14
+ queryParams: new URLSearchParams({
15
+ subaccount: subAddr,
16
+ }),
17
+ options: fetchOptions,
18
+ });
19
+
20
+ return response.data;
21
+ }
22
+ }
@@ -0,0 +1,19 @@
1
+ import z from "zod/v4";
2
+
3
+ import { BaseRequestArgs } from "../base-reader";
4
+
5
+ export interface DelegationsRequestArgs extends BaseRequestArgs {
6
+ subAddr: string;
7
+ }
8
+
9
+ export const DelegationSchema = z.object({
10
+ delegated_account: z.string(),
11
+ permission_type: z.string(),
12
+ expiration_time_s: z.number().nullable(),
13
+ });
14
+
15
+ export const DelegationsSchema = z.array(DelegationSchema);
16
+
17
+ export type Delegations = z.infer<typeof DelegationsSchema>;
18
+
19
+ export type Delegation = z.infer<typeof DelegationSchema>;