@0xmonaco/core 0.7.7 → 0.7.9

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 (77) hide show
  1. package/dist/api/applications/api.d.ts +43 -0
  2. package/dist/api/applications/api.js +54 -0
  3. package/dist/api/applications/index.d.ts +4 -0
  4. package/dist/api/applications/index.js +4 -0
  5. package/dist/api/auth/api.d.ts +206 -0
  6. package/dist/api/auth/api.js +305 -0
  7. package/dist/api/auth/index.d.ts +4 -0
  8. package/dist/api/auth/index.js +4 -0
  9. package/dist/api/base.d.ts +123 -0
  10. package/dist/api/base.js +286 -0
  11. package/dist/api/fees/api.d.ts +72 -0
  12. package/dist/api/fees/api.js +90 -0
  13. package/dist/api/fees/index.d.ts +6 -0
  14. package/dist/api/fees/index.js +6 -0
  15. package/dist/api/index.d.ts +18 -0
  16. package/dist/api/index.js +18 -0
  17. package/dist/api/margin-accounts/api.d.ts +12 -0
  18. package/dist/api/margin-accounts/api.js +69 -0
  19. package/dist/api/margin-accounts/index.d.ts +1 -0
  20. package/dist/api/margin-accounts/index.js +1 -0
  21. package/dist/api/market/api.d.ts +20 -0
  22. package/dist/api/market/api.js +97 -0
  23. package/dist/api/market/index.d.ts +1 -0
  24. package/dist/api/market/index.js +1 -0
  25. package/dist/api/orderbook/api.d.ts +15 -0
  26. package/dist/api/orderbook/api.js +37 -0
  27. package/dist/api/orderbook/index.d.ts +1 -0
  28. package/dist/api/orderbook/index.js +1 -0
  29. package/dist/api/perp/index.d.ts +1 -0
  30. package/dist/api/perp/index.js +1 -0
  31. package/dist/api/perp/routes.d.ts +133 -0
  32. package/dist/api/perp/routes.js +85 -0
  33. package/dist/api/positions/api.d.ts +12 -0
  34. package/dist/api/positions/api.js +86 -0
  35. package/dist/api/positions/index.d.ts +1 -0
  36. package/dist/api/positions/index.js +1 -0
  37. package/dist/api/profile/api.d.ts +191 -0
  38. package/dist/api/profile/api.js +259 -0
  39. package/dist/api/profile/index.d.ts +6 -0
  40. package/dist/api/profile/index.js +6 -0
  41. package/dist/api/trades/api.d.ts +44 -0
  42. package/dist/api/trades/api.js +42 -0
  43. package/dist/api/trades/index.d.ts +1 -0
  44. package/dist/api/trades/index.js +1 -0
  45. package/dist/api/trading/api.d.ts +301 -0
  46. package/dist/api/trading/api.js +497 -0
  47. package/dist/api/trading/index.d.ts +4 -0
  48. package/dist/api/trading/index.js +4 -0
  49. package/dist/api/vault/api.d.ts +261 -0
  50. package/dist/api/vault/api.js +506 -0
  51. package/dist/api/vault/index.d.ts +4 -0
  52. package/dist/api/vault/index.js +4 -0
  53. package/dist/api/websocket/index.d.ts +3 -0
  54. package/dist/api/websocket/index.js +3 -0
  55. package/dist/api/websocket/types.d.ts +41 -0
  56. package/dist/api/websocket/types.js +0 -0
  57. package/dist/api/websocket/utils.d.ts +8 -0
  58. package/dist/api/websocket/utils.js +22 -0
  59. package/dist/api/websocket/websocket.d.ts +5 -0
  60. package/dist/api/websocket/websocket.js +560 -0
  61. package/dist/errors/errors.d.ts +381 -0
  62. package/dist/errors/errors.js +815 -0
  63. package/dist/errors/index.d.ts +1 -0
  64. package/dist/errors/index.js +1 -0
  65. package/dist/index.d.ts +5 -0
  66. package/dist/index.js +5 -0
  67. package/dist/networks/index.d.ts +1 -0
  68. package/dist/networks/index.js +1 -0
  69. package/dist/networks/networks.d.ts +21 -0
  70. package/dist/networks/networks.js +46 -0
  71. package/dist/sdk.d.ts +134 -0
  72. package/dist/sdk.js +294 -0
  73. package/dist/utils/index.d.ts +1 -0
  74. package/dist/utils/index.js +1 -0
  75. package/dist/utils/magnitude.d.ts +26 -0
  76. package/dist/utils/magnitude.js +31 -0
  77. package/package.json +3 -3
@@ -0,0 +1,69 @@
1
+ import { CreateMarginAccountSchema, GetAvailableCollateralSchema, GetMarginAccountMovementsSchema, GetMarginAccountSummarySchema, ListMarginAccountsSchema, SimulateOrderRiskSchema, TransferCollateralSchema, validate, } from "@0xmonaco/types";
2
+ import { BaseAPI } from "../base";
3
+ import { perpRoutes } from "../perp";
4
+ export class MarginAccountsAPIImpl extends BaseAPI {
5
+ async listMarginAccounts(params) {
6
+ if (params) {
7
+ validate(ListMarginAccountsSchema, params);
8
+ }
9
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.list(params));
10
+ }
11
+ async createMarginAccount(request) {
12
+ validate(CreateMarginAccountSchema, request);
13
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.create(), {
14
+ method: "POST",
15
+ body: JSON.stringify({
16
+ label: request?.label,
17
+ collateral_asset: request?.collateralAsset,
18
+ }),
19
+ });
20
+ }
21
+ async getMarginAccountSummary(marginAccountId) {
22
+ validate(GetMarginAccountSummarySchema, { marginAccountId });
23
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.summary(marginAccountId));
24
+ }
25
+ async getAvailableCollateral(params) {
26
+ validate(GetAvailableCollateralSchema, params);
27
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.availableCollateral(params));
28
+ }
29
+ async transferCollateralToMarginAccount(marginAccountId, request) {
30
+ validate(TransferCollateralSchema, { marginAccountId, request });
31
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.transferIn(marginAccountId), {
32
+ method: "POST",
33
+ body: JSON.stringify({
34
+ asset: request.asset,
35
+ amount: request.amount,
36
+ }),
37
+ });
38
+ }
39
+ async transferCollateralFromMarginAccount(marginAccountId, request) {
40
+ validate(TransferCollateralSchema, { marginAccountId, request });
41
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.transferOut(marginAccountId), {
42
+ method: "POST",
43
+ body: JSON.stringify({
44
+ asset: request.asset,
45
+ amount: request.amount,
46
+ }),
47
+ });
48
+ }
49
+ async getMarginAccountMovements(marginAccountId, params) {
50
+ validate(GetMarginAccountMovementsSchema, { marginAccountId, ...params });
51
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.movements(marginAccountId, params));
52
+ }
53
+ async simulateOrderRisk(marginAccountId, request) {
54
+ validate(SimulateOrderRiskSchema, { marginAccountId, request });
55
+ return await this.makeAuthenticatedRequest(perpRoutes.marginAccounts.simulateOrderRisk(marginAccountId), {
56
+ method: "POST",
57
+ body: JSON.stringify({
58
+ trading_pair_id: request.tradingPairId,
59
+ side: request.side,
60
+ position_side: request.positionSide,
61
+ order_type: request.orderType,
62
+ price: request.price,
63
+ quantity: request.quantity,
64
+ leverage: request.leverage,
65
+ reduce_only: request.reduceOnly,
66
+ }),
67
+ });
68
+ }
69
+ }
@@ -0,0 +1 @@
1
+ export { MarginAccountsAPIImpl } from "./api";
@@ -0,0 +1 @@
1
+ export { MarginAccountsAPIImpl } from "./api";
@@ -0,0 +1,20 @@
1
+ import type { Candlestick, FundingState, GetCandlesticksParams, GetTradingPairsParams, GetTradingPairsResponse, IndexPrice, Interval, ListFundingHistoryParams, ListFundingHistoryResponse, MarketAPI, MarketMetadata, MarkPrice, OpenInterest, PerpMarketConfig, PerpMarketSummary, TradingPair } from "@0xmonaco/types";
2
+ import { BaseAPI } from "../base";
3
+ /**
4
+ * Market API Implementation
5
+ *
6
+ * Provides read-only market metadata endpoints such as trading pair listings.
7
+ */
8
+ export declare class MarketAPIImpl extends BaseAPI implements MarketAPI {
9
+ getPaginatedTradingPairs(params?: GetTradingPairsParams): Promise<GetTradingPairsResponse>;
10
+ getTradingPairBySymbol(symbol: string): Promise<TradingPair | undefined>;
11
+ getCandlesticks(tradingPairId: string, interval: Interval, params?: GetCandlesticksParams): Promise<Candlestick[]>;
12
+ getMarketMetadata(tradingPairId: string): Promise<MarketMetadata>;
13
+ getPerpMarketConfig(tradingPairId: string): Promise<PerpMarketConfig>;
14
+ getPerpMarketSummary(tradingPairId: string): Promise<PerpMarketSummary>;
15
+ getMarkPrice(tradingPairId: string): Promise<MarkPrice>;
16
+ getIndexPrice(tradingPairId: string): Promise<IndexPrice>;
17
+ getFundingState(tradingPairId: string): Promise<FundingState>;
18
+ listFundingHistory(tradingPairId: string, params?: ListFundingHistoryParams): Promise<ListFundingHistoryResponse>;
19
+ getOpenInterest(tradingPairId: string): Promise<OpenInterest>;
20
+ }
@@ -0,0 +1,97 @@
1
+ import { GetCandlesticksByPairIdSchema, GetMarketMetadataSchema, validate } from "@0xmonaco/types";
2
+ import { BaseAPI } from "../base";
3
+ import { perpRoutes } from "../perp";
4
+ /**
5
+ * Market API Implementation
6
+ *
7
+ * Provides read-only market metadata endpoints such as trading pair listings.
8
+ */
9
+ export class MarketAPIImpl extends BaseAPI {
10
+ async getPaginatedTradingPairs(params) {
11
+ const searchParams = new URLSearchParams();
12
+ if (params?.page !== undefined) {
13
+ searchParams.append("page", params.page.toString());
14
+ }
15
+ if (params?.page_size !== undefined) {
16
+ searchParams.append("page_size", params.page_size.toString());
17
+ }
18
+ if (params?.market_type) {
19
+ searchParams.append("market_type", params.market_type);
20
+ }
21
+ if (params?.base_token) {
22
+ searchParams.append("base_token", params.base_token);
23
+ }
24
+ if (params?.quote_token) {
25
+ searchParams.append("quote_token", params.quote_token);
26
+ }
27
+ if (params?.is_active !== undefined) {
28
+ searchParams.append("is_active", params.is_active.toString());
29
+ }
30
+ const queryString = searchParams.toString();
31
+ const url = queryString ? `/api/v1/market/pairs?${queryString}` : "/api/v1/market/pairs";
32
+ return await this.makePublicRequest(url);
33
+ }
34
+ async getTradingPairBySymbol(symbol) {
35
+ // Backend endpoint expects UUID, not symbol, so we fetch all pairs and filter
36
+ const response = await this.getPaginatedTradingPairs({ page_size: 100 });
37
+ return response.trading_pairs.find((pair) => pair.symbol === symbol);
38
+ }
39
+ async getCandlesticks(tradingPairId, interval, params) {
40
+ // Validate inputs using the trading pair ID schema
41
+ validate(GetCandlesticksByPairIdSchema, {
42
+ tradingPairId,
43
+ interval,
44
+ startTime: params?.startTime,
45
+ endTime: params?.endTime,
46
+ limit: params?.limit,
47
+ });
48
+ const searchParams = new URLSearchParams();
49
+ if (params?.startTime !== undefined) {
50
+ searchParams.append("start_time", params.startTime.toString());
51
+ }
52
+ if (params?.endTime !== undefined) {
53
+ searchParams.append("end_time", params.endTime.toString());
54
+ }
55
+ if (params?.limit !== undefined) {
56
+ searchParams.append("limit", params.limit.toString());
57
+ }
58
+ const queryString = searchParams.toString();
59
+ const url = queryString
60
+ ? `/api/v1/market/pairs/charts/candlestick/${encodeURIComponent(tradingPairId)}/${interval}?${queryString}`
61
+ : `/api/v1/market/pairs/charts/candlestick/${encodeURIComponent(tradingPairId)}/${interval}`;
62
+ const response = await this.makePublicRequest(url);
63
+ return response.data || [];
64
+ }
65
+ async getMarketMetadata(tradingPairId) {
66
+ validate(GetMarketMetadataSchema, { tradingPairId });
67
+ return await this.makePublicRequest(perpRoutes.market.getMarketMetadata(tradingPairId));
68
+ }
69
+ async getPerpMarketConfig(tradingPairId) {
70
+ validate(GetMarketMetadataSchema, { tradingPairId });
71
+ return await this.makePublicRequest(perpRoutes.market.getPerpMarketConfig(tradingPairId));
72
+ }
73
+ async getPerpMarketSummary(tradingPairId) {
74
+ validate(GetMarketMetadataSchema, { tradingPairId });
75
+ return await this.makePublicRequest(perpRoutes.market.getPerpMarketSummary(tradingPairId));
76
+ }
77
+ async getMarkPrice(tradingPairId) {
78
+ validate(GetMarketMetadataSchema, { tradingPairId });
79
+ return await this.makePublicRequest(perpRoutes.market.getMarkPrice(tradingPairId));
80
+ }
81
+ async getIndexPrice(tradingPairId) {
82
+ validate(GetMarketMetadataSchema, { tradingPairId });
83
+ return await this.makePublicRequest(perpRoutes.market.getIndexPrice(tradingPairId));
84
+ }
85
+ async getFundingState(tradingPairId) {
86
+ validate(GetMarketMetadataSchema, { tradingPairId });
87
+ return await this.makePublicRequest(perpRoutes.market.getFundingState(tradingPairId));
88
+ }
89
+ async listFundingHistory(tradingPairId, params) {
90
+ validate(GetMarketMetadataSchema, { tradingPairId });
91
+ return await this.makePublicRequest(perpRoutes.market.listFundingHistory(tradingPairId, params));
92
+ }
93
+ async getOpenInterest(tradingPairId) {
94
+ validate(GetMarketMetadataSchema, { tradingPairId });
95
+ return await this.makePublicRequest(perpRoutes.market.getOpenInterest(tradingPairId));
96
+ }
97
+ }
@@ -0,0 +1 @@
1
+ export { MarketAPIImpl } from "./api";
@@ -0,0 +1 @@
1
+ export { MarketAPIImpl } from "./api";
@@ -0,0 +1,15 @@
1
+ import type { OrderbookEvent, OrderbookQuotationMode, TradingMode } from "@0xmonaco/types";
2
+ import { BaseAPI } from "../base";
3
+ export interface GetOrderbookOptions {
4
+ /** Number of price levels to return (max 100). Defaults to 10. */
5
+ depth?: number;
6
+ /** Trading mode: 'Spot' or 'Margin'. Defaults to 'Spot'. */
7
+ tradingMode?: TradingMode;
8
+ /** Price grouping magnitude. Valid values: 0.0001, 0.001, 0.01, 0.1, 1, 10, 100, 1000, 10000. */
9
+ magnitude?: number;
10
+ /** Quantity denomination: 'BASE' or 'QUOTE'. When 'QUOTE', quantities are multiplied by price. */
11
+ denomination?: OrderbookQuotationMode;
12
+ }
13
+ export declare class OrderbookAPIImpl extends BaseAPI {
14
+ getOrderbook(tradingPairId: string, options?: GetOrderbookOptions): Promise<OrderbookEvent>;
15
+ }
@@ -0,0 +1,37 @@
1
+ import { BaseAPI } from "../base";
2
+ export class OrderbookAPIImpl extends BaseAPI {
3
+ async getOrderbook(tradingPairId, options = {}) {
4
+ const { depth = 10, tradingMode, magnitude, denomination } = options;
5
+ const params = new URLSearchParams();
6
+ params.set("levels", String(depth));
7
+ if (tradingMode)
8
+ params.set("trading_mode", tradingMode);
9
+ if (magnitude !== undefined)
10
+ params.set("magnitude", String(magnitude));
11
+ if (denomination)
12
+ params.set("denomination", denomination.toLowerCase());
13
+ const response = await this.makePublicRequest(`/api/v1/orderbook/${encodeURIComponent(tradingPairId)}?${params.toString()}`);
14
+ return {
15
+ tradingPairId: response.symbol,
16
+ tradingMode: response.trading_mode,
17
+ bids: response.data.bids.map((level) => ({
18
+ price: level.price,
19
+ quantity: level.quantity,
20
+ orderCount: level.order_count,
21
+ })),
22
+ asks: response.data.asks.map((level) => ({
23
+ price: level.price,
24
+ quantity: level.quantity,
25
+ orderCount: level.order_count,
26
+ })),
27
+ bestBid: response.data.best_bid,
28
+ bestAsk: response.data.best_ask,
29
+ bidVolume: response.data.bid_volume,
30
+ askVolume: response.data.ask_volume,
31
+ baseDecimals: response.base_decimals,
32
+ quoteDecimals: response.quote_decimals,
33
+ timestamp: response.timestamp,
34
+ sequence: response.sequence_number,
35
+ };
36
+ }
37
+ }
@@ -0,0 +1 @@
1
+ export { type GetOrderbookOptions, OrderbookAPIImpl } from "./api";
@@ -0,0 +1 @@
1
+ export { OrderbookAPIImpl } from "./api";
@@ -0,0 +1 @@
1
+ export { perpRoutes } from "./routes";
@@ -0,0 +1 @@
1
+ export { perpRoutes } from "./routes";
@@ -0,0 +1,133 @@
1
+ export declare const perpRoutes: {
2
+ readonly orders: {
3
+ readonly create: () => string;
4
+ readonly list: (params?: {
5
+ page?: number;
6
+ page_size?: number;
7
+ status?: string;
8
+ trading_pair?: string;
9
+ trading_mode?: string;
10
+ margin_account_id?: string;
11
+ }) => string;
12
+ readonly get: (orderId: string) => string;
13
+ readonly replace: (orderId: string) => string;
14
+ readonly cancel: () => string;
15
+ readonly batchCancel: () => string;
16
+ readonly batchCancelAll: () => string;
17
+ readonly batchCancelAllByPair: (tradingPairId: string) => string;
18
+ readonly batchCreate: () => string;
19
+ readonly batchReplace: () => string;
20
+ readonly createConditional: () => string;
21
+ readonly listConditional: (params?: {
22
+ margin_account_id?: string;
23
+ trading_pair_id?: string;
24
+ state?: string;
25
+ page?: number;
26
+ page_size?: number;
27
+ }) => string;
28
+ readonly cancelConditional: (conditionalOrderId: string) => string;
29
+ };
30
+ readonly market: {
31
+ readonly listTradingPairs: (params?: {
32
+ page?: number;
33
+ limit?: number;
34
+ market_type?: string;
35
+ base_token?: string;
36
+ quote_token?: string;
37
+ is_active?: boolean;
38
+ }) => string;
39
+ readonly getTradingPair: (tradingPairId: string) => string;
40
+ readonly getCandles: (tradingPairId: string, interval: string, params?: {
41
+ start_time?: number;
42
+ end_time?: number;
43
+ limit?: number;
44
+ }) => string;
45
+ readonly getMarketMetadata: (tradingPairId: string) => string;
46
+ readonly getPerpMarketConfig: (tradingPairId: string) => string;
47
+ readonly getPerpMarketSummary: (tradingPairId: string) => string;
48
+ readonly getMarkPrice: (tradingPairId: string) => string;
49
+ readonly getIndexPrice: (tradingPairId: string) => string;
50
+ readonly getFundingState: (tradingPairId: string) => string;
51
+ readonly listFundingHistory: (tradingPairId: string, params?: {
52
+ start_time?: string;
53
+ end_time?: string;
54
+ page?: number;
55
+ page_size?: number;
56
+ }) => string;
57
+ readonly getOpenInterest: (tradingPairId: string) => string;
58
+ };
59
+ readonly orderbook: {
60
+ readonly get: (tradingPairId: string, params?: {
61
+ levels?: number;
62
+ trading_mode?: string;
63
+ magnitude?: string | number;
64
+ denomination?: string;
65
+ }) => string;
66
+ };
67
+ readonly trades: {
68
+ readonly publicByPair: (tradingPairId: string, params?: {
69
+ skip?: number;
70
+ limit?: number;
71
+ }) => string;
72
+ readonly user: (params?: {
73
+ margin_account_id?: string;
74
+ trading_pair_id?: string;
75
+ page?: number;
76
+ page_size?: number;
77
+ }) => string;
78
+ };
79
+ readonly positions: {
80
+ readonly list: (params?: {
81
+ margin_account_id?: string;
82
+ trading_pair_id?: string;
83
+ status?: string;
84
+ page?: number;
85
+ page_size?: number;
86
+ }) => string;
87
+ readonly get: (positionId: string) => string;
88
+ readonly close: (positionId: string) => string;
89
+ readonly risk: (positionId: string) => string;
90
+ readonly addMargin: (positionId: string) => string;
91
+ readonly reduceMargin: (positionId: string) => string;
92
+ readonly attachTpSl: (positionId: string) => string;
93
+ readonly history: (params?: {
94
+ position_id?: string;
95
+ margin_account_id?: string;
96
+ trading_pair_id?: string;
97
+ page?: number;
98
+ page_size?: number;
99
+ }) => string;
100
+ };
101
+ readonly marginAccounts: {
102
+ readonly list: (params?: {
103
+ page?: number;
104
+ page_size?: number;
105
+ state?: string;
106
+ }) => string;
107
+ readonly create: () => string;
108
+ readonly summary: (marginAccountId: string) => string;
109
+ readonly availableCollateral: (params?: {
110
+ asset?: string;
111
+ }) => string;
112
+ readonly transferIn: (marginAccountId: string) => string;
113
+ readonly transferOut: (marginAccountId: string) => string;
114
+ readonly movements: (marginAccountId: string, params?: {
115
+ movement_type?: string;
116
+ page?: number;
117
+ page_size?: number;
118
+ }) => string;
119
+ readonly simulateOrderRisk: (marginAccountId: string) => string;
120
+ };
121
+ readonly streams: {
122
+ readonly orderbook: () => string;
123
+ readonly trades: () => string;
124
+ readonly perpMarketSummaries: () => string;
125
+ readonly markPrices: () => string;
126
+ readonly privateTrades: () => string;
127
+ readonly orders: () => string;
128
+ readonly positions: () => string;
129
+ readonly marginAccount: () => string;
130
+ readonly funding: () => string;
131
+ readonly liquidationAlerts: () => string;
132
+ };
133
+ };
@@ -0,0 +1,85 @@
1
+ const API_V1 = "/api/v1";
2
+ function encodeSegment(value) {
3
+ return encodeURIComponent(value);
4
+ }
5
+ function withQuery(path, params) {
6
+ if (!params)
7
+ return path;
8
+ const searchParams = new URLSearchParams();
9
+ for (const [key, value] of Object.entries(params)) {
10
+ if (value !== undefined) {
11
+ searchParams.set(key, String(value));
12
+ }
13
+ }
14
+ const query = searchParams.toString();
15
+ return query ? `${path}?${query}` : path;
16
+ }
17
+ export const perpRoutes = {
18
+ orders: {
19
+ create: () => `${API_V1}/orders`,
20
+ list: (params) => withQuery(`${API_V1}/orders`, params),
21
+ get: (orderId) => `${API_V1}/orders/${encodeSegment(orderId)}`,
22
+ replace: (orderId) => `${API_V1}/orders/${encodeSegment(orderId)}`,
23
+ cancel: () => `${API_V1}/orders/cancel`,
24
+ batchCancel: () => `${API_V1}/orders/batch-cancel`,
25
+ batchCancelAll: () => `${API_V1}/orders/batch-cancel-all`,
26
+ batchCancelAllByPair: (tradingPairId) => `${API_V1}/orders/batch-cancel-all/${encodeSegment(tradingPairId)}`,
27
+ batchCreate: () => `${API_V1}/orders/batch-create`,
28
+ batchReplace: () => `${API_V1}/orders/batch-replace`,
29
+ createConditional: () => `${API_V1}/orders/conditional`,
30
+ listConditional: (params) => withQuery(`${API_V1}/orders/conditional`, params),
31
+ cancelConditional: (conditionalOrderId) => `${API_V1}/orders/conditional/${encodeSegment(conditionalOrderId)}`,
32
+ },
33
+ market: {
34
+ listTradingPairs: (params) => withQuery(`${API_V1}/market/pairs`, params),
35
+ getTradingPair: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}`,
36
+ getCandles: (tradingPairId, interval, params) => withQuery(`${API_V1}/market/pairs/charts/candlestick/${encodeSegment(tradingPairId)}/${encodeSegment(interval)}`, params),
37
+ getMarketMetadata: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/metadata`,
38
+ getPerpMarketConfig: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/perp/config`,
39
+ getPerpMarketSummary: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/perp/summary`,
40
+ getMarkPrice: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/mark-price`,
41
+ getIndexPrice: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/index-price`,
42
+ getFundingState: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/funding`,
43
+ listFundingHistory: (tradingPairId, params) => withQuery(`${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/funding/history`, params),
44
+ getOpenInterest: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/open-interest`,
45
+ },
46
+ orderbook: {
47
+ get: (tradingPairId, params) => withQuery(`${API_V1}/orderbook/${encodeSegment(tradingPairId)}`, params),
48
+ },
49
+ trades: {
50
+ publicByPair: (tradingPairId, params) => withQuery(`${API_V1}/trades/${encodeSegment(tradingPairId)}`, params),
51
+ user: (params) => withQuery(`${API_V1}/accounts/trades`, params),
52
+ },
53
+ positions: {
54
+ list: (params) => withQuery(`${API_V1}/positions`, params),
55
+ get: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}`,
56
+ close: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}/close`,
57
+ risk: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}/risk`,
58
+ addMargin: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}/margin/add`,
59
+ reduceMargin: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}/margin/reduce`,
60
+ attachTpSl: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}/tp-sl`,
61
+ history: (params) => withQuery(`${API_V1}/positions/history`, params),
62
+ },
63
+ marginAccounts: {
64
+ list: (params) => withQuery(`${API_V1}/margin/accounts`, params),
65
+ create: () => `${API_V1}/margin/accounts`,
66
+ summary: (marginAccountId) => `${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}`,
67
+ availableCollateral: (params) => withQuery(`${API_V1}/margin/collateral/available`, params),
68
+ transferIn: (marginAccountId) => `${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}/collateral/transfer-in`,
69
+ transferOut: (marginAccountId) => `${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}/collateral/transfer-out`,
70
+ movements: (marginAccountId, params) => withQuery(`${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}/movements`, params),
71
+ simulateOrderRisk: (marginAccountId) => `${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}/simulate-order-risk`,
72
+ },
73
+ streams: {
74
+ orderbook: () => `${API_V1}/streaming/orderbook`,
75
+ trades: () => `${API_V1}/streaming/trades`,
76
+ perpMarketSummaries: () => `${API_V1}/streaming/perp-market-summaries`,
77
+ markPrices: () => `${API_V1}/streaming/mark-prices`,
78
+ privateTrades: () => `${API_V1}/streaming/private-trades`,
79
+ orders: () => `${API_V1}/streaming/orders`,
80
+ positions: () => `${API_V1}/streaming/positions`,
81
+ marginAccount: () => `${API_V1}/streaming/margin-account`,
82
+ funding: () => `${API_V1}/streaming/funding`,
83
+ liquidationAlerts: () => `${API_V1}/streaming/liquidation-alerts`,
84
+ },
85
+ };
@@ -0,0 +1,12 @@
1
+ import type { AddPositionMarginRequest, AttachPositionTpSlRequest, AttachPositionTpSlResponse, ClosePositionRequest, ClosePositionResponse, GetPositionResponse, ListPositionHistoryParams, ListPositionHistoryResponse, ListPositionsParams, ListPositionsResponse, PositionMarginResponse, PositionRisk, PositionsAPI, ReducePositionMarginRequest } from "@0xmonaco/types";
2
+ import { BaseAPI } from "../base";
3
+ export declare class PositionsAPIImpl extends BaseAPI implements PositionsAPI {
4
+ listPositions(params?: ListPositionsParams): Promise<ListPositionsResponse>;
5
+ getPosition(positionId: string): Promise<GetPositionResponse>;
6
+ closePosition(positionId: string, request: ClosePositionRequest): Promise<ClosePositionResponse>;
7
+ getPositionRisk(positionId: string): Promise<PositionRisk>;
8
+ addPositionMargin(positionId: string, request: AddPositionMarginRequest): Promise<PositionMarginResponse>;
9
+ reducePositionMargin(positionId: string, request: ReducePositionMarginRequest): Promise<PositionMarginResponse>;
10
+ attachPositionTpSl(positionId: string, request: AttachPositionTpSlRequest): Promise<AttachPositionTpSlResponse>;
11
+ listPositionHistory(params?: ListPositionHistoryParams): Promise<ListPositionHistoryResponse>;
12
+ }
@@ -0,0 +1,86 @@
1
+ import { AddPositionMarginSchema, AttachPositionTpSlSchema, ClosePositionSchema, GetPositionRiskSchema, GetPositionSchema, ListPositionHistorySchema, ListPositionsSchema, ReducePositionMarginSchema, validate, } from "@0xmonaco/types";
2
+ import { BaseAPI } from "../base";
3
+ import { perpRoutes } from "../perp";
4
+ export class PositionsAPIImpl extends BaseAPI {
5
+ async listPositions(params) {
6
+ if (params) {
7
+ validate(ListPositionsSchema, params);
8
+ }
9
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.list(params));
10
+ }
11
+ async getPosition(positionId) {
12
+ validate(GetPositionSchema, { positionId });
13
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.get(positionId));
14
+ }
15
+ async closePosition(positionId, request) {
16
+ validate(ClosePositionSchema, { positionId, request });
17
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.close(positionId), {
18
+ method: "POST",
19
+ body: JSON.stringify({
20
+ close_type: request.closeType,
21
+ limit_price: request.limitPrice,
22
+ slippage_tolerance_bps: request.slippageToleranceBps,
23
+ quantity: request.quantity,
24
+ }),
25
+ });
26
+ }
27
+ async getPositionRisk(positionId) {
28
+ validate(GetPositionRiskSchema, { positionId });
29
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.risk(positionId));
30
+ }
31
+ async addPositionMargin(positionId, request) {
32
+ validate(AddPositionMarginSchema, { positionId, request });
33
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.addMargin(positionId), {
34
+ method: "POST",
35
+ body: JSON.stringify({
36
+ amount: request.amount,
37
+ asset: request.asset,
38
+ }),
39
+ });
40
+ }
41
+ async reducePositionMargin(positionId, request) {
42
+ validate(ReducePositionMarginSchema, { positionId, request });
43
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.reduceMargin(positionId), {
44
+ method: "POST",
45
+ body: JSON.stringify({
46
+ amount: request.amount,
47
+ }),
48
+ });
49
+ }
50
+ async attachPositionTpSl(positionId, request) {
51
+ validate(AttachPositionTpSlSchema, { positionId, request });
52
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.attachTpSl(positionId), {
53
+ method: "POST",
54
+ body: JSON.stringify({
55
+ take_profit: request.takeProfit
56
+ ? {
57
+ trigger_price: request.takeProfit.triggerPrice,
58
+ order_type: request.takeProfit.orderType,
59
+ limit_price: request.takeProfit.limitPrice,
60
+ quantity: request.takeProfit.quantity,
61
+ time_in_force: request.takeProfit.timeInForce,
62
+ slippage_tolerance_bps: request.takeProfit.slippageToleranceBps,
63
+ expires_at: request.takeProfit.expiresAt,
64
+ }
65
+ : undefined,
66
+ stop_loss: request.stopLoss
67
+ ? {
68
+ trigger_price: request.stopLoss.triggerPrice,
69
+ order_type: request.stopLoss.orderType,
70
+ limit_price: request.stopLoss.limitPrice,
71
+ quantity: request.stopLoss.quantity,
72
+ time_in_force: request.stopLoss.timeInForce,
73
+ slippage_tolerance_bps: request.stopLoss.slippageToleranceBps,
74
+ expires_at: request.stopLoss.expiresAt,
75
+ }
76
+ : undefined,
77
+ }),
78
+ });
79
+ }
80
+ async listPositionHistory(params) {
81
+ if (params) {
82
+ validate(ListPositionHistorySchema, params);
83
+ }
84
+ return await this.makeAuthenticatedRequest(perpRoutes.positions.history(params));
85
+ }
86
+ }
@@ -0,0 +1 @@
1
+ export { PositionsAPIImpl } from "./api";
@@ -0,0 +1 @@
1
+ export { PositionsAPIImpl } from "./api";