@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,82 @@
|
|
|
1
|
+
import { getMarketAddr } from "../../utils";
|
|
2
|
+
import { BaseReader, BaseRequestArgs } from "../base-reader";
|
|
3
|
+
import { PerpMarketConfig, PerpMarketConfigSchema, PerpMarketsSchema } from "./markets.types";
|
|
4
|
+
|
|
5
|
+
export class MarketsReader extends BaseReader {
|
|
6
|
+
/**
|
|
7
|
+
* Get all of the available markets
|
|
8
|
+
* @returns The list of available markets
|
|
9
|
+
*/
|
|
10
|
+
async getAll({ fetchOptions }: BaseRequestArgs = {}) {
|
|
11
|
+
const response = await this.getRequest({
|
|
12
|
+
schema: PerpMarketsSchema,
|
|
13
|
+
url: `${this.deps.config.tradingHttpUrl}/api/v1/markets`,
|
|
14
|
+
options: fetchOptions,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// TODO: Remove once API is fixed and doesn't return duplicate markets
|
|
18
|
+
const seen = new Set<string>();
|
|
19
|
+
const uniqueMarkets = response.data.filter((market) => {
|
|
20
|
+
if (seen.has(market.market_addr)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
seen.add(market.market_addr);
|
|
24
|
+
return true;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
return uniqueMarkets;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get the market config for a given market name
|
|
32
|
+
* @param marketName The name of the market to get
|
|
33
|
+
* @returns The market config for the given name
|
|
34
|
+
*/
|
|
35
|
+
async getByName(marketName: string): Promise<PerpMarketConfig | null> {
|
|
36
|
+
const marketAddr = getMarketAddr(marketName, this.deps.config.deployment.perpEngineGlobal);
|
|
37
|
+
try {
|
|
38
|
+
// TODO: Fix lint error
|
|
39
|
+
// eslint-disable-next-line custom/no-get-account-resource
|
|
40
|
+
const market = await this.deps.aptos.getAccountResource<PerpMarketConfig>({
|
|
41
|
+
accountAddress: marketAddr,
|
|
42
|
+
resourceType: `${this.deps.config.deployment.package}::perp_market_config::PerpMarketConfig`,
|
|
43
|
+
});
|
|
44
|
+
// TODO: Handle different __variant__ values
|
|
45
|
+
return PerpMarketConfigSchema.parse(market);
|
|
46
|
+
} catch (e) {
|
|
47
|
+
console.error(e);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* List all of the market addresses
|
|
54
|
+
* @returns The list of market addresses
|
|
55
|
+
*/
|
|
56
|
+
async listMarketAddresses() {
|
|
57
|
+
const markets = await this.deps.aptos.view<[string[]]>({
|
|
58
|
+
payload: {
|
|
59
|
+
function: `${this.deps.config.deployment.package}::perp_engine::list_markets`,
|
|
60
|
+
typeArguments: [],
|
|
61
|
+
functionArguments: [],
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
return markets[0];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get the name of a market by address
|
|
69
|
+
* @param marketAddr The address of the market
|
|
70
|
+
* @returns The name of the market
|
|
71
|
+
*/
|
|
72
|
+
async marketNameByAddress(marketAddr: string) {
|
|
73
|
+
const name = await this.deps.aptos.view<[string]>({
|
|
74
|
+
payload: {
|
|
75
|
+
function: `${this.deps.config.deployment.package}::perp_engine::market_name`,
|
|
76
|
+
typeArguments: [],
|
|
77
|
+
functionArguments: [marketAddr],
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
return name[0];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
|
|
3
|
+
export const MarketModeConfigSchema = z.discriminatedUnion("__variant__", [
|
|
4
|
+
z.object({ __variant__: z.literal("Open") }),
|
|
5
|
+
z.object({ __variant__: z.literal("ReduceOnly") }),
|
|
6
|
+
z.object({
|
|
7
|
+
__variant__: z.literal("AllowlistOnly"),
|
|
8
|
+
allowlist: z.array(z.string()),
|
|
9
|
+
}),
|
|
10
|
+
z.object({ __variant__: z.literal("Halt") }),
|
|
11
|
+
]);
|
|
12
|
+
|
|
13
|
+
export const PerpMarketConfigSchema = z.object({
|
|
14
|
+
__variant__: z.literal("V1"),
|
|
15
|
+
name: z.string(),
|
|
16
|
+
sz_precision: z.object({
|
|
17
|
+
decimals: z.number(),
|
|
18
|
+
multiplier: z.string(),
|
|
19
|
+
}),
|
|
20
|
+
min_size: z.string(),
|
|
21
|
+
lot_size: z.string(),
|
|
22
|
+
ticker_size: z.string(),
|
|
23
|
+
max_leverage: z.number(),
|
|
24
|
+
mode: MarketModeConfigSchema,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export const MarketModeSchema = z.enum([
|
|
28
|
+
"Open",
|
|
29
|
+
"ReduceOnly",
|
|
30
|
+
"AllowlistOnly",
|
|
31
|
+
"Halt",
|
|
32
|
+
"Delisting",
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
export const PerpMarketSchema = z.object({
|
|
36
|
+
market_addr: z.string(),
|
|
37
|
+
market_name: z.string(),
|
|
38
|
+
sz_decimals: z.number(),
|
|
39
|
+
px_decimals: z.number(),
|
|
40
|
+
max_leverage: z.number(),
|
|
41
|
+
tick_size: z.number(),
|
|
42
|
+
min_size: z.number(),
|
|
43
|
+
lot_size: z.number(),
|
|
44
|
+
max_open_interest: z.number(),
|
|
45
|
+
mode: MarketModeSchema,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const PerpMarketsSchema = z.array(PerpMarketSchema);
|
|
49
|
+
|
|
50
|
+
export type MarketModeConfig = z.infer<typeof MarketModeConfigSchema>;
|
|
51
|
+
export type PerpMarketConfig = z.infer<typeof PerpMarketConfigSchema>;
|
|
52
|
+
export type MarketMode = z.infer<typeof MarketModeSchema>;
|
|
53
|
+
export type PerpMarket = z.infer<typeof PerpMarketSchema>;
|
|
54
|
+
export type PerpMarkets = z.infer<typeof PerpMarketsSchema>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
export const PaginatedResponseSchema = <T extends z.ZodType>(itemSchema: T) =>
|
|
4
|
+
z.object({
|
|
5
|
+
items: z.array(itemSchema),
|
|
6
|
+
total_count: z.number(),
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export interface PaginatedResponse<T> {
|
|
10
|
+
items: T[];
|
|
11
|
+
total_count: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Page related types
|
|
15
|
+
export interface PageParams {
|
|
16
|
+
limit?: number;
|
|
17
|
+
offset?: number;
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseReader } from "../base-reader";
|
|
2
|
+
import { PortfolioChartRequestArgs, PortfolioChartSchema } from "./portfolio-chart.types";
|
|
3
|
+
|
|
4
|
+
export class PortfolioChartReader extends BaseReader {
|
|
5
|
+
/**
|
|
6
|
+
* Get the portfolio chart for a given user
|
|
7
|
+
* @param subAddr The subaccount address to get the account overview for
|
|
8
|
+
* @returns The account overview for the given subaccount address
|
|
9
|
+
*/
|
|
10
|
+
async getByAddr({ subAddr, range, type, fetchOptions }: PortfolioChartRequestArgs) {
|
|
11
|
+
const response = await this.getRequest({
|
|
12
|
+
schema: PortfolioChartSchema,
|
|
13
|
+
url: `${this.deps.config.tradingHttpUrl}/api/v1/portfolio_chart`,
|
|
14
|
+
queryParams: { user: subAddr, range, data_type: type },
|
|
15
|
+
options: fetchOptions,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
return response.data;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { BaseRequestArgs } from "../base-reader";
|
|
4
|
+
|
|
5
|
+
export interface PortfolioChartRequestArgs extends BaseRequestArgs {
|
|
6
|
+
subAddr: string;
|
|
7
|
+
range: PortfolioChartTimeRange;
|
|
8
|
+
type: PortfolioChartType;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const PortfolioChartPnlItemSchema = z.object({
|
|
12
|
+
timestamp: z.number(),
|
|
13
|
+
data_points: z.number(),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const PortfolioChartSchema = z.array(PortfolioChartPnlItemSchema);
|
|
17
|
+
|
|
18
|
+
export type PortfolioChartType = "pnl" | "account_value";
|
|
19
|
+
export type PortfolioChartTimeRange = "24h" | "7d" | "30d" | "90d";
|
|
20
|
+
export type PortfolioChartItem = z.infer<typeof PortfolioChartPnlItemSchema>;
|
|
21
|
+
export type PortfolioChart = z.infer<typeof PortfolioChartSchema>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
|
|
3
|
+
// Export all types from readers
|
|
4
|
+
export * from "./account-overview/account-overview.types";
|
|
5
|
+
export * from "./candlesticks/candlesticks.types";
|
|
6
|
+
export * from "./delegations/delegations.types";
|
|
7
|
+
export * from "./leaderboard/leaderboard.types";
|
|
8
|
+
export * from "./market-contexts/market-contexts.types";
|
|
9
|
+
export * from "./market-depth/market-depth.types";
|
|
10
|
+
export * from "./market-prices/market-prices.types";
|
|
11
|
+
export * from "./market-trades/market-trades.types";
|
|
12
|
+
export * from "./markets/markets.types";
|
|
13
|
+
export * from "./pagination.types";
|
|
14
|
+
export * from "./portfolio-chart/portfolio-chart.types";
|
|
15
|
+
export * from "./user-active-twaps/user-active-twaps.types";
|
|
16
|
+
export * from "./user-bulk-orders/user-bulk-orders.types";
|
|
17
|
+
export * from "./user-funding-history/user-funding-history.types";
|
|
18
|
+
export * from "./user-notifications/user-notifications.types";
|
|
19
|
+
export * from "./user-open-orders/user-open-orders.types";
|
|
20
|
+
export * from "./user-order-history/user-order-history.types";
|
|
21
|
+
export * from "./user-positions/user-positions.types";
|
|
22
|
+
export * from "./user-subaccounts/user-subaccounts.types";
|
|
23
|
+
export * from "./user-trade-history/user-trade-history.types";
|
|
24
|
+
export * from "./vaults/vaults.types";
|
|
25
|
+
|
|
26
|
+
export const PerpPosition = z.object({
|
|
27
|
+
size: z.number(),
|
|
28
|
+
sz_decimals: z.number(),
|
|
29
|
+
entry_px: z.number(),
|
|
30
|
+
max_leverage: z.number(),
|
|
31
|
+
is_long: z.boolean(),
|
|
32
|
+
token_type: z.string(),
|
|
33
|
+
});
|
|
34
|
+
export type PerpPosition = z.infer<typeof PerpPosition>;
|
|
35
|
+
|
|
36
|
+
export const CrossedPosition = z.object({
|
|
37
|
+
positions: z.array(PerpPosition),
|
|
38
|
+
});
|
|
39
|
+
export type CrossedPosition = z.infer<typeof CrossedPosition>;
|
|
40
|
+
|
|
41
|
+
export const LiquidationConfigV1 = z.object({
|
|
42
|
+
__variant__: z.literal("V1"),
|
|
43
|
+
backstop_liquidator: z.string(),
|
|
44
|
+
backstop_margin_maintenance_divisor: z.string(),
|
|
45
|
+
backstop_margin_maintenance_multiplier: z.string(),
|
|
46
|
+
maintenance_margin_leverage_divisor: z.string(),
|
|
47
|
+
maintenance_margin_leverage_multiplier: z.string(),
|
|
48
|
+
});
|
|
49
|
+
export type LiquidationConfigV1 = z.infer<typeof LiquidationConfigV1>;
|
|
50
|
+
|
|
51
|
+
export const CollateralBalanceSheet = z.object({
|
|
52
|
+
asset_type: z.object({
|
|
53
|
+
inner: z.string(),
|
|
54
|
+
}),
|
|
55
|
+
asset_precision: z.object({
|
|
56
|
+
decimals: z.number(),
|
|
57
|
+
multiplier: z.string(),
|
|
58
|
+
}),
|
|
59
|
+
balance_precision: z.object({
|
|
60
|
+
decimals: z.number(),
|
|
61
|
+
multiplier: z.string(),
|
|
62
|
+
}),
|
|
63
|
+
balance_table: z.object({
|
|
64
|
+
handle: z.string(),
|
|
65
|
+
}),
|
|
66
|
+
store: z.object({
|
|
67
|
+
inner: z.string(),
|
|
68
|
+
}),
|
|
69
|
+
store_extend_ref: z.object({
|
|
70
|
+
self: z.string(),
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
export type CollateralBalanceSheet = z.infer<typeof CollateralBalanceSheet>;
|
|
74
|
+
|
|
75
|
+
export const GlobalAccountsStateV1 = z.object({
|
|
76
|
+
__variant__: z.string(),
|
|
77
|
+
collateral: CollateralBalanceSheet,
|
|
78
|
+
liquidation_config: LiquidationConfigV1,
|
|
79
|
+
});
|
|
80
|
+
export type GlobalAccountsStateV1 = z.infer<typeof GlobalAccountsStateV1>;
|
|
81
|
+
|
|
82
|
+
export const GlobalAccountsState = GlobalAccountsStateV1;
|
|
83
|
+
export type GlobalAccountsState = z.infer<typeof GlobalAccountsState>;
|
|
84
|
+
|
|
85
|
+
// Search term
|
|
86
|
+
export interface SearchTermParams {
|
|
87
|
+
searchTerm?: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Sort direction
|
|
91
|
+
export type SortDirection = "ASC" | "DESC" | undefined;
|
|
92
|
+
|
|
93
|
+
// Sort params
|
|
94
|
+
export interface SortParams<T extends string> {
|
|
95
|
+
sortKey?: T;
|
|
96
|
+
sortDir?: SortDirection;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Vaults
|
|
100
|
+
export interface CreateVaultArgs {
|
|
101
|
+
contributionAssetType?: string;
|
|
102
|
+
vaultName: string;
|
|
103
|
+
vaultDescription: string;
|
|
104
|
+
vaultSocialLinks: string[];
|
|
105
|
+
vaultShareSymbol: string;
|
|
106
|
+
vaultShareIconUri?: string;
|
|
107
|
+
vaultShareProjectUri?: string;
|
|
108
|
+
feeBps: number;
|
|
109
|
+
feeIntervalS: number;
|
|
110
|
+
contributionLockupDurationS: number;
|
|
111
|
+
initialFunding: number;
|
|
112
|
+
acceptsContributions: boolean;
|
|
113
|
+
delegateToCreator: boolean;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface ActivateVaultArgs {
|
|
117
|
+
vaultAddress: string;
|
|
118
|
+
additionalFunding?: number;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export interface DepositToVaultArgs {
|
|
122
|
+
vaultAddress: string;
|
|
123
|
+
amount: number;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export interface WithdrawFromVaultArgs {
|
|
127
|
+
vaultAddress: string;
|
|
128
|
+
shares: number;
|
|
129
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseReader } from "../base-reader";
|
|
2
|
+
import {
|
|
3
|
+
UserActiveTwapsRequestArgs,
|
|
4
|
+
UserActiveTwapsSchema,
|
|
5
|
+
UserActiveTwapsWsMessage,
|
|
6
|
+
UserActiveTwapsWsMessageSchema,
|
|
7
|
+
} from "./user-active-twaps.types";
|
|
8
|
+
|
|
9
|
+
export class UserActiveTwapsReader extends BaseReader {
|
|
10
|
+
/**
|
|
11
|
+
* Get the active twaps for a given user
|
|
12
|
+
* @param subAddr The subaccount address of the user to get active twaps for
|
|
13
|
+
* @returns The active twaps for the given user
|
|
14
|
+
*/
|
|
15
|
+
async getByAddr({ subAddr, fetchOptions }: UserActiveTwapsRequestArgs) {
|
|
16
|
+
const response = await this.getRequest({
|
|
17
|
+
schema: UserActiveTwapsSchema,
|
|
18
|
+
url: `${this.deps.config.tradingHttpUrl}/api/v1/active_twaps`,
|
|
19
|
+
queryParams: { user: subAddr },
|
|
20
|
+
options: fetchOptions,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return response.data;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to active twaps updates
|
|
28
|
+
* @param subAddr The subaccount address of the user to subscribe to
|
|
29
|
+
* @param onData Callback function for received active twaps data
|
|
30
|
+
* @returns A function to unsubscribe from the active twaps updates
|
|
31
|
+
*/
|
|
32
|
+
subscribeByAddr(subAddr: string, onData: (data: UserActiveTwapsWsMessage) => void) {
|
|
33
|
+
const topic = `user_active_twaps:${subAddr}`;
|
|
34
|
+
return this.deps.ws.subscribe(topic, UserActiveTwapsWsMessageSchema, onData);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { BaseRequestArgs } from "../base-reader";
|
|
4
|
+
|
|
5
|
+
export interface UserActiveTwapsRequestArgs extends BaseRequestArgs {
|
|
6
|
+
subAddr: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const UserActiveTwapSchema = z.object({
|
|
10
|
+
market: z.string(),
|
|
11
|
+
is_buy: z.boolean(),
|
|
12
|
+
order_id: z.string(),
|
|
13
|
+
client_order_id: z.string().nullable().optional(),
|
|
14
|
+
is_reduce_only: z.boolean(),
|
|
15
|
+
start_unix_ms: z.number(),
|
|
16
|
+
frequency_s: z.number(),
|
|
17
|
+
duration_s: z.number(),
|
|
18
|
+
orig_size: z.number(),
|
|
19
|
+
remaining_size: z.number(),
|
|
20
|
+
status: z.string(),
|
|
21
|
+
transaction_unix_ms: z.number(),
|
|
22
|
+
transaction_version: z.number(),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export const UserActiveTwapsSchema = z.array(UserActiveTwapSchema);
|
|
26
|
+
|
|
27
|
+
export const UserActiveTwapsWsMessageSchema = z.object({
|
|
28
|
+
twaps: z.array(UserActiveTwapSchema),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export type UserActiveTwap = z.infer<typeof UserActiveTwapSchema>;
|
|
32
|
+
export type UserActiveTwaps = z.infer<typeof UserActiveTwapsSchema>;
|
|
33
|
+
export type UserActiveTwapsWsMessage = z.infer<typeof UserActiveTwapsWsMessageSchema>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseReader } from "../base-reader";
|
|
2
|
+
import {
|
|
3
|
+
UserBulkOrdersRequestArgs,
|
|
4
|
+
UserBulkOrdersSchema,
|
|
5
|
+
UserBulkOrdersWsMessage,
|
|
6
|
+
UserBulkOrdersWsMessageSchema,
|
|
7
|
+
} from "./user-bulk-orders.types";
|
|
8
|
+
|
|
9
|
+
export class UserBulkOrdersReader extends BaseReader {
|
|
10
|
+
/**
|
|
11
|
+
* Get the bulk orders for a given user
|
|
12
|
+
* @param subAddr The subaccount address of the user to get bulk orders for
|
|
13
|
+
* @param market Optional market address to filter by specific market
|
|
14
|
+
* @returns The bulk orders for the given user
|
|
15
|
+
*/
|
|
16
|
+
async getByAddr({ subAddr, market, fetchOptions }: UserBulkOrdersRequestArgs) {
|
|
17
|
+
const response = await this.getRequest({
|
|
18
|
+
schema: UserBulkOrdersSchema,
|
|
19
|
+
url: `${this.deps.config.tradingHttpUrl}/api/v1/bulk_orders`,
|
|
20
|
+
queryParams: { user: subAddr, market: market || "all" },
|
|
21
|
+
options: fetchOptions,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return response.data;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Subscribe to user bulk orders updates
|
|
29
|
+
* @param subAddr The subaccount address of the user to subscribe to
|
|
30
|
+
* @param onData Callback function for received user bulk orders data
|
|
31
|
+
* @returns A function to unsubscribe from the user bulk orders updates
|
|
32
|
+
*/
|
|
33
|
+
subscribeByAddr(subAddr: string, onData: (data: UserBulkOrdersWsMessage) => void) {
|
|
34
|
+
const topic = `bulk_orders:${subAddr}`;
|
|
35
|
+
return this.deps.ws.subscribe(topic, UserBulkOrdersWsMessageSchema, onData);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { BaseRequestArgs } from "../base-reader";
|
|
4
|
+
|
|
5
|
+
export interface UserBulkOrdersRequestArgs extends BaseRequestArgs {
|
|
6
|
+
subAddr: string;
|
|
7
|
+
market?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const UserBulkOrderSchema = z.object({
|
|
11
|
+
market: z.string(),
|
|
12
|
+
sequence_number: z.number(),
|
|
13
|
+
previous_seq_num: z.number(),
|
|
14
|
+
bid_prices: z.array(z.number()),
|
|
15
|
+
bid_sizes: z.array(z.number()),
|
|
16
|
+
ask_prices: z.array(z.number()),
|
|
17
|
+
ask_sizes: z.array(z.number()),
|
|
18
|
+
cancelled_bid_prices: z.array(z.number()),
|
|
19
|
+
cancelled_bid_sizes: z.array(z.number()),
|
|
20
|
+
cancelled_ask_prices: z.array(z.number()),
|
|
21
|
+
cancelled_ask_sizes: z.array(z.number()),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const UserBulkOrdersSchema = z.array(UserBulkOrderSchema);
|
|
25
|
+
|
|
26
|
+
export const UserBulkOrdersWsMessageSchema = z.object({
|
|
27
|
+
bulk_orders: z.array(UserBulkOrderSchema),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export type UserBulkOrder = z.infer<typeof UserBulkOrderSchema>;
|
|
31
|
+
export type UserBulkOrders = z.infer<typeof UserBulkOrdersSchema>;
|
|
32
|
+
export type UserBulkOrdersWsMessage = z.infer<typeof UserBulkOrdersWsMessageSchema>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BaseReader } from "../base-reader";
|
|
2
|
+
import {
|
|
3
|
+
UserFundingHistoryRequestArgs,
|
|
4
|
+
UserFundingHistorySchema,
|
|
5
|
+
UserFundingHistoryWsMessage,
|
|
6
|
+
UserFundingHistoryWsMessageSchema,
|
|
7
|
+
} from "./user-funding-history.types";
|
|
8
|
+
|
|
9
|
+
export class UserFundingHistoryReader extends BaseReader {
|
|
10
|
+
/**
|
|
11
|
+
* Get the trade history for a given user
|
|
12
|
+
* @param subAddr The subaccount address of the user to get trade history for
|
|
13
|
+
* @param limit The number of trades to get (default: 10)
|
|
14
|
+
* @returns The trade history for the given user
|
|
15
|
+
*/
|
|
16
|
+
async getByAddr({ subAddr, limit = 10, fetchOptions }: UserFundingHistoryRequestArgs) {
|
|
17
|
+
const response = await this.getRequest({
|
|
18
|
+
schema: UserFundingHistorySchema,
|
|
19
|
+
url: `${this.deps.config.tradingHttpUrl}/api/v1/funding_rate_history`,
|
|
20
|
+
queryParams: { user: subAddr, limit: limit.toString() },
|
|
21
|
+
options: fetchOptions,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return response.data;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Subscribe to trade history updates
|
|
29
|
+
* @param subAddr The subaccount address of the user to subscribe to
|
|
30
|
+
* @param onData Callback function for received trade history data
|
|
31
|
+
* @returns A function to unsubscribe from the trade history updates
|
|
32
|
+
*/
|
|
33
|
+
subscribeByAddr(subAddr: string, onData: (data: UserFundingHistoryWsMessage) => void) {
|
|
34
|
+
const topic = `user_funding_rate_history:${subAddr}`;
|
|
35
|
+
|
|
36
|
+
return this.deps.ws.subscribe(topic, UserFundingHistoryWsMessageSchema, onData);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { BaseRequestArgs } from "../base-reader";
|
|
4
|
+
|
|
5
|
+
export interface UserFundingHistoryRequestArgs extends BaseRequestArgs {
|
|
6
|
+
subAddr: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const UserFundingSchema = z.object({
|
|
11
|
+
market: z.string(),
|
|
12
|
+
action: z.string(),
|
|
13
|
+
size: z.number(),
|
|
14
|
+
is_funding_positive: z.boolean(),
|
|
15
|
+
realized_funding_amount: z.number(),
|
|
16
|
+
is_rebate: z.boolean(),
|
|
17
|
+
fee_amount: z.number(),
|
|
18
|
+
transaction_unix_ms: z.number(),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export const UserFundingHistorySchema = z.array(UserFundingSchema);
|
|
22
|
+
|
|
23
|
+
export const UserFundingHistoryWsMessageSchema = z.object({
|
|
24
|
+
funding_history: UserFundingHistorySchema,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export type UserFunding = z.infer<typeof UserFundingSchema>;
|
|
28
|
+
export type UserFundingHistory = z.infer<typeof UserFundingHistorySchema>;
|
|
29
|
+
export type UserFundingHistoryWsMessage = z.infer<typeof UserFundingHistoryWsMessageSchema>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseReader } from "../base-reader";
|
|
2
|
+
import { UserNotification, UserNotificationSchema } from "./user-notifications.types";
|
|
3
|
+
|
|
4
|
+
export class UserNotificationsReader extends BaseReader {
|
|
5
|
+
/**
|
|
6
|
+
* Subscribe to user positions updates
|
|
7
|
+
* @param subAddr The subaccount address of the user to subscribe to
|
|
8
|
+
* @param apiUrl The WebSocket server URL
|
|
9
|
+
* @param onData Callback function for received user positions data
|
|
10
|
+
* @returns A function to unsubscribe from the user positions updates
|
|
11
|
+
*/
|
|
12
|
+
subscribeByAddr(subAddr: string, onData: (data: UserNotification) => void) {
|
|
13
|
+
const topic = `notifications:${subAddr}`;
|
|
14
|
+
|
|
15
|
+
return this.deps.ws.subscribe(topic, UserNotificationSchema, onData);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import z from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { UserActiveTwapSchema } from "../user-active-twaps/user-active-twaps.types";
|
|
4
|
+
import { UserOrderSchema } from "../user-order-history/user-order-history.types";
|
|
5
|
+
|
|
6
|
+
// from /rust/trading-api-dto/src/notification.rs
|
|
7
|
+
export enum NotificationType {
|
|
8
|
+
MarketOrderPlaced = "MarketOrderPlaced",
|
|
9
|
+
LimitOrderPlaced = "LimitOrderPlaced",
|
|
10
|
+
StopMarketOrderPlaced = "StopMarketOrderPlaced",
|
|
11
|
+
StopMarketOrderTriggered = "StopMarketOrderTriggered",
|
|
12
|
+
StopLimitOrderPlaced = "StopLimitOrderPlaced",
|
|
13
|
+
StopLimitOrderTriggered = "StopLimitOrderTriggered",
|
|
14
|
+
OrderPartiallyFilled = "OrderPartiallyFilled",
|
|
15
|
+
OrderFilled = "OrderFilled",
|
|
16
|
+
OrderSizeReduced = "OrderSizeReduced",
|
|
17
|
+
OrderCancelled = "OrderCancelled",
|
|
18
|
+
OrderRejected = "OrderRejected",
|
|
19
|
+
OrderErrored = "OrderErrored",
|
|
20
|
+
TwapOrderPlaced = "TwapOrderPlaced",
|
|
21
|
+
TwapOrderTriggered = "TwapOrderTriggered",
|
|
22
|
+
TwapOrderCompleted = "TwapOrderCompleted",
|
|
23
|
+
TwapOrderCancelled = "TwapOrderCancelled",
|
|
24
|
+
TwapOrderErrored = "TwapOrderErrored",
|
|
25
|
+
AccountDeposit = "AccountDeposit",
|
|
26
|
+
AccountWithdrawal = "AccountWithdrawal",
|
|
27
|
+
TpSlSet = "TpSlSet",
|
|
28
|
+
TpHit = "TpHit",
|
|
29
|
+
SlHit = "SlHit",
|
|
30
|
+
TpCancelled = "TpCancelled",
|
|
31
|
+
SlCancelled = "SlCancelled",
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export enum ClientNotificationType {
|
|
35
|
+
TwapPlaced = "TwapPlaced",
|
|
36
|
+
OrderCancellationPlaced = "OrderCancellationPlaced",
|
|
37
|
+
PositionCancellationPlaced = "PositionCancellationPlaced",
|
|
38
|
+
TwapCancellationPlaced = "TwapCancellationPlaced",
|
|
39
|
+
OrderCancellationErrored = "OrderCancellationErrored",
|
|
40
|
+
PositionCancellationErrored = "PositionCancellationErrored",
|
|
41
|
+
TwapCancellationErrored = "TwapCancellationErrored",
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const NotificationMetadataSchema = z.object({
|
|
45
|
+
trigger_price: z.number().optional(),
|
|
46
|
+
reason: z.string().optional(),
|
|
47
|
+
amount: z.number().optional(),
|
|
48
|
+
filled_size: z.number().optional(),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export const UserNotificationSchema = z.object({
|
|
52
|
+
notification: z.object({
|
|
53
|
+
account: z.string(),
|
|
54
|
+
notification_metadata: NotificationMetadataSchema.optional(),
|
|
55
|
+
notification_type: z.enum(NotificationType),
|
|
56
|
+
order: UserOrderSchema.optional(),
|
|
57
|
+
twap: UserActiveTwapSchema.optional(),
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export type UserNotification = z.infer<typeof UserNotificationSchema>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseReader } from "../base-reader";
|
|
2
|
+
import {
|
|
3
|
+
UserOpenOrdersRequestArgs,
|
|
4
|
+
UserOpenOrdersSchema,
|
|
5
|
+
UserOpenOrdersWsMessage,
|
|
6
|
+
UserOpenOrdersWsMessageSchema,
|
|
7
|
+
} from "./user-open-orders.types";
|
|
8
|
+
|
|
9
|
+
export class UserOpenOrdersReader extends BaseReader {
|
|
10
|
+
/**
|
|
11
|
+
* Get the open orders for a given user
|
|
12
|
+
* @param subAddr The subaccount address of the user to get open orders for
|
|
13
|
+
* @returns The open orders for the given user
|
|
14
|
+
*/
|
|
15
|
+
async getByAddr({ subAddr, fetchOptions }: UserOpenOrdersRequestArgs) {
|
|
16
|
+
const response = await this.getRequest({
|
|
17
|
+
schema: UserOpenOrdersSchema,
|
|
18
|
+
url: `${this.deps.config.tradingHttpUrl}/api/v1/open_orders`,
|
|
19
|
+
queryParams: { user: subAddr },
|
|
20
|
+
options: fetchOptions,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return response.data;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Subscribe to user orders updates
|
|
28
|
+
* @param subAddr The subaccount address of the user to subscribe to
|
|
29
|
+
* @param onData Callback function for received user orders data
|
|
30
|
+
* @returns A function to unsubscribe from the user orders updates
|
|
31
|
+
*/
|
|
32
|
+
subscribeByAddr(subAddr: string, onData: (data: UserOpenOrdersWsMessage) => void) {
|
|
33
|
+
const topic = `user_open_orders:${subAddr}`;
|
|
34
|
+
return this.deps.ws.subscribe(topic, UserOpenOrdersWsMessageSchema, onData);
|
|
35
|
+
}
|
|
36
|
+
}
|