@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.
- package/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-lint$colon$check.log +5 -0
- package/.turbo/turbo-lint.log +5 -0
- package/decibel_transactions.md +1049 -0
- package/dist/abi/abi-manager.d.ts +13 -0
- package/dist/abi/abi-manager.d.ts.map +1 -0
- package/dist/abi/abi-manager.js +21 -0
- package/dist/abi/abis.json +1322 -0
- package/dist/abi/bytecode-manager.d.ts +57 -0
- package/dist/abi/bytecode-manager.d.ts.map +1 -0
- package/dist/abi/bytecode-manager.js +62 -0
- package/dist/abi/bytecode.json +24 -0
- package/dist/abi/fetch-abis.d.ts +7 -0
- package/dist/abi/fetch-abis.d.ts.map +1 -0
- package/dist/abi/fetch-abis.js +132 -0
- package/dist/abi/fetch-bytecode.d.ts +24 -0
- package/dist/abi/fetch-bytecode.d.ts.map +1 -0
- package/dist/abi/fetch-bytecode.js +123 -0
- package/dist/abi/generate-abis.d.ts +6 -0
- package/dist/abi/generate-abis.d.ts.map +1 -0
- package/dist/abi/generate-abis.js +170 -0
- package/dist/abi/json/netna.json +1323 -0
- package/dist/abi/json/testnet.json +1315 -0
- package/dist/abi/types.d.ts +22 -0
- package/dist/abi/types.d.ts.map +1 -0
- package/dist/abi/types.js +2 -0
- package/dist/admin.d.ts +29 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +203 -0
- package/dist/base.d.ts +42 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +176 -0
- package/dist/constants.d.ts +41 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +78 -0
- package/dist/fee-pay.d.ts +11 -0
- package/dist/fee-pay.d.ts.map +1 -0
- package/dist/fee-pay.js +30 -0
- package/dist/gas/gas-price-manager.d.ts +35 -0
- package/dist/gas/gas-price-manager.d.ts.map +1 -0
- package/dist/gas/gas-price-manager.js +93 -0
- package/dist/gas-price-manager.d.ts +31 -0
- package/dist/gas-price-manager.d.ts.map +1 -0
- package/dist/gas-price-manager.js +84 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/order-event.types.d.ts +55 -0
- package/dist/order-event.types.d.ts.map +1 -0
- package/dist/order-event.types.js +3 -0
- package/dist/order-status.d.ts +43 -0
- package/dist/order-status.d.ts.map +1 -0
- package/dist/order-status.js +86 -0
- package/dist/read/account-overview/account-overview.reader.d.ts +37 -0
- package/dist/read/account-overview/account-overview.reader.d.ts.map +1 -0
- package/dist/read/account-overview/account-overview.reader.js +35 -0
- package/dist/read/account-overview/account-overview.types.d.ts +52 -0
- package/dist/read/account-overview/account-overview.types.d.ts.map +1 -0
- package/dist/read/account-overview/account-overview.types.js +36 -0
- package/dist/read/api-wallets/api-wallets.reader.d.ts +17 -0
- package/dist/read/api-wallets/api-wallets.reader.d.ts.map +1 -0
- package/dist/read/api-wallets/api-wallets.reader.js +27 -0
- package/dist/read/api-wallets/api-wallets.types.d.ts +17 -0
- package/dist/read/api-wallets/api-wallets.types.d.ts.map +1 -0
- package/dist/read/api-wallets/api-wallets.types.js +13 -0
- package/dist/read/base-reader.d.ts +22 -0
- package/dist/read/base-reader.d.ts.map +1 -0
- package/dist/read/base-reader.js +29 -0
- package/dist/read/candlesticks/candlesticks.reader.d.ts +31 -0
- package/dist/read/candlesticks/candlesticks.reader.d.ts.map +1 -0
- package/dist/read/candlesticks/candlesticks.reader.js +43 -0
- package/dist/read/candlesticks/candlesticks.types.d.ts +45 -0
- package/dist/read/candlesticks/candlesticks.types.d.ts.map +1 -0
- package/dist/read/candlesticks/candlesticks.types.js +36 -0
- package/dist/read/delegations/delegations.reader.d.ts +15 -0
- package/dist/read/delegations/delegations.reader.d.ts.map +1 -0
- package/dist/read/delegations/delegations.reader.js +23 -0
- package/dist/read/delegations/delegations.types.d.ts +17 -0
- package/dist/read/delegations/delegations.types.d.ts.map +1 -0
- package/dist/read/delegations/delegations.types.js +13 -0
- package/dist/read/index.d.ts +105 -0
- package/dist/read/index.d.ts.map +1 -0
- package/dist/read/index.js +244 -0
- package/dist/read/leaderboard/leaderboard.reader.d.ts +21 -0
- package/dist/read/leaderboard/leaderboard.reader.d.ts.map +1 -0
- package/dist/read/leaderboard/leaderboard.reader.js +22 -0
- package/dist/read/leaderboard/leaderboard.types.d.ts +27 -0
- package/dist/read/leaderboard/leaderboard.types.d.ts.map +1 -0
- package/dist/read/leaderboard/leaderboard.types.js +14 -0
- package/dist/read/market-contexts/market-contexts.reader.d.ts +22 -0
- package/dist/read/market-contexts/market-contexts.reader.d.ts.map +1 -0
- package/dist/read/market-contexts/market-contexts.reader.js +27 -0
- package/dist/read/market-contexts/market-contexts.types.d.ts +26 -0
- package/dist/read/market-contexts/market-contexts.types.d.ts.map +1 -0
- package/dist/read/market-contexts/market-contexts.types.js +19 -0
- package/dist/read/market-depth/market-depth.reader.d.ts +30 -0
- package/dist/read/market-depth/market-depth.reader.d.ts.map +1 -0
- package/dist/read/market-depth/market-depth.reader.js +46 -0
- package/dist/read/market-depth/market-depth.types.d.ts +20 -0
- package/dist/read/market-depth/market-depth.types.d.ts.map +1 -0
- package/dist/read/market-depth/market-depth.types.js +16 -0
- package/dist/read/market-prices/market-prices.reader.d.ts +44 -0
- package/dist/read/market-prices/market-prices.reader.d.ts.map +1 -0
- package/dist/read/market-prices/market-prices.reader.js +51 -0
- package/dist/read/market-prices/market-prices.types.d.ts +48 -0
- package/dist/read/market-prices/market-prices.types.d.ts.map +1 -0
- package/dist/read/market-prices/market-prices.types.js +26 -0
- package/dist/read/market-trades/market-trades.reader.d.ts +33 -0
- package/dist/read/market-trades/market-trades.reader.d.ts.map +1 -0
- package/dist/read/market-trades/market-trades.reader.js +39 -0
- package/dist/read/market-trades/market-trades.types.d.ts +52 -0
- package/dist/read/market-trades/market-trades.types.d.ts.map +1 -0
- package/dist/read/market-trades/market-trades.types.js +23 -0
- package/dist/read/markets/markets.reader.d.ts +38 -0
- package/dist/read/markets/markets.reader.d.ts.map +1 -0
- package/dist/read/markets/markets.reader.js +80 -0
- package/dist/read/markets/markets.types.d.ts +82 -0
- package/dist/read/markets/markets.types.d.ts.map +1 -0
- package/dist/read/markets/markets.types.js +46 -0
- package/dist/read/pagination.types.d.ts +14 -0
- package/dist/read/pagination.types.d.ts.map +1 -0
- package/dist/read/pagination.types.js +12 -0
- package/dist/read/portfolio-chart/portfolio-chart.reader.d.ts +14 -0
- package/dist/read/portfolio-chart/portfolio-chart.reader.d.ts.map +1 -0
- package/dist/read/portfolio-chart/portfolio-chart.reader.js +21 -0
- package/dist/read/portfolio-chart/portfolio-chart.types.d.ts +14 -0
- package/dist/read/portfolio-chart/portfolio-chart.types.d.ts.map +1 -0
- package/dist/read/portfolio-chart/portfolio-chart.types.js +12 -0
- package/dist/read/public-vaults/public-vaults.reader.d.ts +38 -0
- package/dist/read/public-vaults/public-vaults.reader.d.ts.map +1 -0
- package/dist/read/public-vaults/public-vaults.reader.js +31 -0
- package/dist/read/public-vaults/public-vaults.types.d.ts +62 -0
- package/dist/read/public-vaults/public-vaults.types.d.ts.map +1 -0
- package/dist/read/public-vaults/public-vaults.types.js +33 -0
- package/dist/read/types.d.ts +178 -0
- package/dist/read/types.d.ts.map +1 -0
- package/dist/read/types.js +87 -0
- package/dist/read/user-active-twaps/user-active-twaps.reader.d.ts +31 -0
- package/dist/read/user-active-twaps/user-active-twaps.reader.d.ts.map +1 -0
- package/dist/read/user-active-twaps/user-active-twaps.reader.js +31 -0
- package/dist/read/user-active-twaps/user-active-twaps.types.d.ts +49 -0
- package/dist/read/user-active-twaps/user-active-twaps.types.d.ts.map +1 -0
- package/dist/read/user-active-twaps/user-active-twaps.types.js +25 -0
- package/dist/read/user-bulk-orders/user-bulk-orders.reader.d.ts +31 -0
- package/dist/read/user-bulk-orders/user-bulk-orders.reader.d.ts.map +1 -0
- package/dist/read/user-bulk-orders/user-bulk-orders.reader.js +32 -0
- package/dist/read/user-bulk-orders/user-bulk-orders.types.d.ts +46 -0
- package/dist/read/user-bulk-orders/user-bulk-orders.types.d.ts.map +1 -0
- package/dist/read/user-bulk-orders/user-bulk-orders.types.js +24 -0
- package/dist/read/user-funding-history/user-funding-history.reader.d.ts +28 -0
- package/dist/read/user-funding-history/user-funding-history.reader.d.ts.map +1 -0
- package/dist/read/user-funding-history/user-funding-history.reader.js +32 -0
- package/dist/read/user-funding-history/user-funding-history.types.d.ts +37 -0
- package/dist/read/user-funding-history/user-funding-history.types.d.ts.map +1 -0
- package/dist/read/user-funding-history/user-funding-history.types.js +21 -0
- package/dist/read/user-notifications/user-notifications.reader.d.ts +13 -0
- package/dist/read/user-notifications/user-notifications.reader.d.ts.map +1 -0
- package/dist/read/user-notifications/user-notifications.reader.js +19 -0
- package/dist/read/user-notifications/user-notifications.types.d.ts +49 -0
- package/dist/read/user-notifications/user-notifications.types.d.ts.map +1 -0
- package/dist/read/user-notifications/user-notifications.types.js +18 -0
- package/dist/read/user-open-orders/user-open-orders.reader.d.ts +40 -0
- package/dist/read/user-open-orders/user-open-orders.reader.d.ts.map +1 -0
- package/dist/read/user-open-orders/user-open-orders.reader.js +31 -0
- package/dist/read/user-open-orders/user-open-orders.types.d.ts +76 -0
- package/dist/read/user-open-orders/user-open-orders.types.d.ts.map +1 -0
- package/dist/read/user-open-orders/user-open-orders.types.js +34 -0
- package/dist/read/user-order-history/user-order-history.reader.d.ts +40 -0
- package/dist/read/user-order-history/user-order-history.reader.d.ts.map +1 -0
- package/dist/read/user-order-history/user-order-history.reader.js +28 -0
- package/dist/read/user-order-history/user-order-history.types.d.ts +85 -0
- package/dist/read/user-order-history/user-order-history.types.d.ts.map +1 -0
- package/dist/read/user-order-history/user-order-history.types.js +37 -0
- package/dist/read/user-positions/user-positions.reader.d.ts +37 -0
- package/dist/read/user-positions/user-positions.reader.d.ts.map +1 -0
- package/dist/read/user-positions/user-positions.reader.js +41 -0
- package/dist/read/user-positions/user-positions.types.d.ts +2590 -0
- package/dist/read/user-positions/user-positions.types.d.ts.map +1 -0
- package/dist/read/user-positions/user-positions.types.js +31 -0
- package/dist/read/user-subaccounts/user-subaccounts.reader.d.ts +18 -0
- package/dist/read/user-subaccounts/user-subaccounts.reader.d.ts.map +1 -0
- package/dist/read/user-subaccounts/user-subaccounts.reader.js +28 -0
- package/dist/read/user-subaccounts/user-subaccounts.types.d.ts +21 -0
- package/dist/read/user-subaccounts/user-subaccounts.types.d.ts.map +1 -0
- package/dist/read/user-subaccounts/user-subaccounts.types.js +15 -0
- package/dist/read/user-trade-history/user-trade-history.reader.d.ts +33 -0
- package/dist/read/user-trade-history/user-trade-history.reader.d.ts.map +1 -0
- package/dist/read/user-trade-history/user-trade-history.reader.js +32 -0
- package/dist/read/user-trade-history/user-trade-history.types.d.ts +52 -0
- package/dist/read/user-trade-history/user-trade-history.types.d.ts.map +1 -0
- package/dist/read/user-trade-history/user-trade-history.types.js +26 -0
- package/dist/read/user-vaults/user-vaults.reader.d.ts +26 -0
- package/dist/read/user-vaults/user-vaults.reader.d.ts.map +1 -0
- package/dist/read/user-vaults/user-vaults.reader.js +32 -0
- package/dist/read/user-vaults/user-vaults.types.d.ts +39 -0
- package/dist/read/user-vaults/user-vaults.types.d.ts.map +1 -0
- package/dist/read/user-vaults/user-vaults.types.js +21 -0
- package/dist/read/vault/vault.reader.d.ts +95 -0
- package/dist/read/vault/vault.reader.d.ts.map +1 -0
- package/dist/read/vault/vault.reader.js +168 -0
- package/dist/read/vault/vault.types.d.ts +49 -0
- package/dist/read/vault/vault.types.d.ts.map +1 -0
- package/dist/read/vault/vault.types.js +45 -0
- package/dist/read/vaults/vaults.reader.d.ts +72 -0
- package/dist/read/vaults/vaults.reader.d.ts.map +1 -0
- package/dist/read/vaults/vaults.reader.js +63 -0
- package/dist/read/vaults/vaults.types.d.ts +140 -0
- package/dist/read/vaults/vaults.types.d.ts.map +1 -0
- package/dist/read/vaults/vaults.types.js +71 -0
- package/dist/read/ws-subscription.d.ts +21 -0
- package/dist/read/ws-subscription.d.ts.map +1 -0
- package/dist/read/ws-subscription.js +170 -0
- package/dist/subaccount-types.d.ts +24 -0
- package/dist/subaccount-types.d.ts.map +1 -0
- package/dist/subaccount-types.js +11 -0
- package/dist/transaction-builder.d.ts +14 -0
- package/dist/transaction-builder.d.ts.map +1 -0
- package/dist/transaction-builder.js +40 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils.d.ts +56 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +164 -0
- package/dist/vault-types.d.ts +43 -0
- package/dist/vault-types.d.ts.map +1 -0
- package/dist/vault-types.js +11 -0
- package/dist/write.d.ts +271 -0
- package/dist/write.d.ts.map +1 -0
- package/dist/write.js +485 -0
- package/eslint.config.mjs +25 -0
- package/package.json +39 -0
- package/readme.md +257 -0
- package/sdk_reference.md +876 -0
- package/src/abi/generate-abis.ts +164 -0
- package/src/abi/json/netna.json +1323 -0
- package/src/abi/json/testnet.json +1315 -0
- package/src/abi/types.ts +23 -0
- package/src/admin.ts +284 -0
- package/src/base.ts +218 -0
- package/src/constants.ts +118 -0
- package/src/fee-pay.ts +39 -0
- package/src/gas/gas-price-manager.ts +115 -0
- package/src/index.ts +10 -0
- package/src/order-event.types.ts +65 -0
- package/src/order-status.ts +89 -0
- package/src/read/account-overview/account-overview.reader.ts +43 -0
- package/src/read/account-overview/account-overview.types.ts +45 -0
- package/src/read/base-reader.ts +41 -0
- package/src/read/candlesticks/candlesticks.reader.ts +61 -0
- package/src/read/candlesticks/candlesticks.types.ts +46 -0
- package/src/read/delegations/delegations.reader.ts +22 -0
- package/src/read/delegations/delegations.types.ts +19 -0
- package/src/read/index.ts +271 -0
- package/src/read/leaderboard/leaderboard.reader.ts +21 -0
- package/src/read/leaderboard/leaderboard.types.ts +26 -0
- package/src/read/market-contexts/market-contexts.reader.ts +26 -0
- package/src/read/market-contexts/market-contexts.types.ts +18 -0
- package/src/read/market-depth/market-depth.reader.ts +60 -0
- package/src/read/market-depth/market-depth.types.ts +24 -0
- package/src/read/market-prices/market-prices.reader.ts +61 -0
- package/src/read/market-prices/market-prices.types.ts +38 -0
- package/src/read/market-trades/market-trades.reader.ts +46 -0
- package/src/read/market-trades/market-trades.types.ts +34 -0
- package/src/read/markets/markets.reader.ts +82 -0
- package/src/read/markets/markets.types.ts +54 -0
- package/src/read/pagination.types.ts +18 -0
- package/src/read/portfolio-chart/portfolio-chart.reader.ts +20 -0
- package/src/read/portfolio-chart/portfolio-chart.types.ts +21 -0
- package/src/read/types.ts +129 -0
- package/src/read/user-active-twaps/user-active-twaps.reader.ts +36 -0
- package/src/read/user-active-twaps/user-active-twaps.types.ts +33 -0
- package/src/read/user-bulk-orders/user-bulk-orders.reader.ts +37 -0
- package/src/read/user-bulk-orders/user-bulk-orders.types.ts +32 -0
- package/src/read/user-funding-history/user-funding-history.reader.ts +38 -0
- package/src/read/user-funding-history/user-funding-history.types.ts +29 -0
- package/src/read/user-notifications/user-notifications.reader.ts +17 -0
- package/src/read/user-notifications/user-notifications.types.ts +61 -0
- package/src/read/user-open-orders/user-open-orders.reader.ts +36 -0
- package/src/read/user-open-orders/user-open-orders.types.ts +42 -0
- package/src/read/user-order-history/user-order-history.reader.ts +34 -0
- package/src/read/user-order-history/user-order-history.types.ts +44 -0
- package/src/read/user-positions/user-positions.reader.ts +55 -0
- package/src/read/user-positions/user-positions.types.ts +43 -0
- package/src/read/user-subaccounts/user-subaccounts.reader.ts +30 -0
- package/src/read/user-subaccounts/user-subaccounts.types.ts +21 -0
- package/src/read/user-trade-history/user-trade-history.reader.ts +38 -0
- package/src/read/user-trade-history/user-trade-history.types.ts +33 -0
- package/src/read/vaults/vaults.reader.ts +79 -0
- package/src/read/vaults/vaults.types.ts +106 -0
- package/src/read/ws-subscription.ts +200 -0
- package/src/subaccount-types.ts +31 -0
- package/src/transaction-builder.ts +75 -0
- package/src/utils.ts +255 -0
- package/src/write.ts +965 -0
- 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>;
|