@0xmonaco/core 0.8.8 → 0.8.10

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 (43) hide show
  1. package/dist/api/applications/api.d.ts +61 -8
  2. package/dist/api/applications/api.js +71 -7
  3. package/dist/api/auth/api.d.ts +7 -26
  4. package/dist/api/auth/api.js +6 -42
  5. package/dist/api/base.d.ts +35 -0
  6. package/dist/api/base.js +60 -0
  7. package/dist/api/delegated-agents/api.d.ts +2 -1
  8. package/dist/api/delegated-agents/api.js +4 -0
  9. package/dist/api/faucet/api.d.ts +25 -0
  10. package/dist/api/faucet/api.js +29 -0
  11. package/dist/api/faucet/index.d.ts +1 -0
  12. package/dist/api/faucet/index.js +1 -0
  13. package/dist/api/index.d.ts +4 -0
  14. package/dist/api/index.js +4 -0
  15. package/dist/api/margin-accounts/api.d.ts +3 -4
  16. package/dist/api/margin-accounts/api.js +8 -15
  17. package/dist/api/market/api.d.ts +3 -1
  18. package/dist/api/market/api.js +8 -0
  19. package/dist/api/perp/routes.d.ts +62 -4
  20. package/dist/api/perp/routes.js +27 -4
  21. package/dist/api/profile/api.d.ts +18 -1
  22. package/dist/api/profile/api.js +41 -1
  23. package/dist/api/sub-accounts/api.d.ts +62 -0
  24. package/dist/api/sub-accounts/api.js +80 -0
  25. package/dist/api/sub-accounts/index.d.ts +1 -0
  26. package/dist/api/sub-accounts/index.js +1 -0
  27. package/dist/api/trades/api.d.ts +12 -1
  28. package/dist/api/trades/api.js +13 -1
  29. package/dist/api/trading/api.d.ts +5 -2
  30. package/dist/api/trading/api.js +7 -24
  31. package/dist/api/whitelist/api.d.ts +27 -0
  32. package/dist/api/whitelist/api.js +32 -0
  33. package/dist/api/whitelist/index.d.ts +1 -0
  34. package/dist/api/whitelist/index.js +1 -0
  35. package/dist/api/withdrawals/api.d.ts +15 -0
  36. package/dist/api/withdrawals/api.js +27 -0
  37. package/dist/api/withdrawals/index.d.ts +1 -0
  38. package/dist/api/withdrawals/index.js +1 -0
  39. package/dist/coverage.d.ts +85 -0
  40. package/dist/coverage.js +85 -0
  41. package/dist/sdk.d.ts +32 -1
  42. package/dist/sdk.js +88 -0
  43. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import type { Candlestick, FundingState, GetCandlesticksParams, GetTradingPairsParams, GetTradingPairsResponse, IndexPrice, Interval, ListFundingHistoryParams, ListFundingHistoryResponse, MarketAPI, MarketMetadata, MarkPrice, OpenInterest, PerpMarketConfig, PerpMarketSummary, TradingPair } from "@0xmonaco/types";
1
+ import type { Candlestick, FundingState, GetCandlesticksParams, GetScreenerParams, GetScreenerResponse, GetTradingPairsParams, GetTradingPairsResponse, IndexPrice, Interval, ListFundingHistoryParams, ListFundingHistoryResponse, MarketAPI, MarketMetadata, MarkPrice, OpenInterest, PerpMarketConfig, PerpMarketSummary, TradingPair } from "@0xmonaco/types";
2
2
  import { BaseAPI } from "../base";
3
3
  /**
4
4
  * Market API Implementation
@@ -7,6 +7,7 @@ import { BaseAPI } from "../base";
7
7
  */
8
8
  export declare class MarketAPIImpl extends BaseAPI implements MarketAPI {
9
9
  getPaginatedTradingPairs(params?: GetTradingPairsParams): Promise<GetTradingPairsResponse>;
10
+ getTradingPair(tradingPairId: string): Promise<TradingPair>;
10
11
  getTradingPairBySymbol(symbol: string): Promise<TradingPair | undefined>;
11
12
  getCandlesticks(tradingPairId: string, interval: Interval, params?: GetCandlesticksParams): Promise<Candlestick[]>;
12
13
  getMarketMetadata(tradingPairId: string): Promise<MarketMetadata>;
@@ -17,4 +18,5 @@ export declare class MarketAPIImpl extends BaseAPI implements MarketAPI {
17
18
  getFundingState(tradingPairId: string): Promise<FundingState>;
18
19
  listFundingHistory(tradingPairId: string, params?: ListFundingHistoryParams): Promise<ListFundingHistoryResponse>;
19
20
  getOpenInterest(tradingPairId: string): Promise<OpenInterest>;
21
+ getScreener(params?: GetScreenerParams): Promise<GetScreenerResponse>;
20
22
  }
@@ -31,6 +31,11 @@ export class MarketAPIImpl extends BaseAPI {
31
31
  const url = queryString ? `/api/v1/market/pairs?${queryString}` : "/api/v1/market/pairs";
32
32
  return await this.makePublicRequest(url);
33
33
  }
34
+ async getTradingPair(tradingPairId) {
35
+ validate(GetMarketMetadataSchema, { tradingPairId });
36
+ const response = await this.makePublicRequest(perpRoutes.market.getTradingPair(tradingPairId));
37
+ return response.trading_pair;
38
+ }
34
39
  async getTradingPairBySymbol(symbol) {
35
40
  // Backend endpoint expects UUID, not symbol, so we fetch all pairs and filter
36
41
  const response = await this.getPaginatedTradingPairs({ page_size: 100 });
@@ -94,4 +99,7 @@ export class MarketAPIImpl extends BaseAPI {
94
99
  validate(GetMarketMetadataSchema, { tradingPairId });
95
100
  return await this.makePublicRequest(perpRoutes.market.getOpenInterest(tradingPairId));
96
101
  }
102
+ async getScreener(params) {
103
+ return await this.makePublicRequest(perpRoutes.market.getScreener(params));
104
+ }
97
105
  }
@@ -17,7 +17,6 @@ export declare const perpRoutes: {
17
17
  readonly batchCancelAllByPair: (tradingPairId: string) => string;
18
18
  readonly batchCreate: () => string;
19
19
  readonly batchReplace: () => string;
20
- readonly createConditional: () => string;
21
20
  readonly listConditional: (params?: {
22
21
  margin_account_id?: string;
23
22
  trading_pair_id?: string;
@@ -29,9 +28,14 @@ export declare const perpRoutes: {
29
28
  };
30
29
  readonly delegatedAgents: {
31
30
  readonly list: () => string;
31
+ readonly owners: () => string;
32
32
  readonly byId: (delegatedAgentId: string) => string;
33
33
  readonly sessions: () => string;
34
34
  };
35
+ readonly withdrawals: {
36
+ readonly initiate: () => string;
37
+ readonly byIndex: (withdrawalIndex: number) => string;
38
+ };
35
39
  readonly market: {
36
40
  readonly listTradingPairs: (params?: {
37
41
  page?: number;
@@ -60,6 +64,12 @@ export declare const perpRoutes: {
60
64
  page_size?: number;
61
65
  }) => string;
62
66
  readonly getOpenInterest: (tradingPairId: string) => string;
67
+ readonly getScreener: (params?: {
68
+ page?: number;
69
+ page_size?: number;
70
+ market_type?: string;
71
+ is_active?: boolean;
72
+ }) => string;
63
73
  };
64
74
  readonly orderbook: {
65
75
  readonly get: (tradingPairId: string, params?: {
@@ -74,6 +84,7 @@ export declare const perpRoutes: {
74
84
  skip?: number;
75
85
  limit?: number;
76
86
  }) => string;
87
+ readonly byId: (tradeId: string) => string;
77
88
  readonly user: (params?: {
78
89
  margin_account_id?: string;
79
90
  trading_pair_id?: string;
@@ -81,6 +92,53 @@ export declare const perpRoutes: {
81
92
  page_size?: number;
82
93
  }) => string;
83
94
  };
95
+ readonly applications: {
96
+ readonly orders: (params?: {
97
+ page?: number;
98
+ page_size?: number;
99
+ status?: string;
100
+ user_id?: string;
101
+ trading_pair_id?: string;
102
+ side?: string;
103
+ order_type?: string;
104
+ }) => string;
105
+ readonly users: (params?: {
106
+ page?: number;
107
+ page_size?: number;
108
+ is_active?: boolean;
109
+ account_type?: string;
110
+ address?: string;
111
+ }) => string;
112
+ readonly movements: (params?: {
113
+ page?: number;
114
+ page_size?: number;
115
+ user_id?: string;
116
+ transaction_type?: string;
117
+ entry_type?: string;
118
+ asset_id?: string;
119
+ }) => string;
120
+ readonly balances: (params?: {
121
+ page?: number;
122
+ page_size?: number;
123
+ user_id?: string;
124
+ asset_id?: string;
125
+ }) => string;
126
+ readonly stats: (params?: {
127
+ since?: string;
128
+ }) => string;
129
+ };
130
+ readonly subAccounts: {
131
+ readonly list: () => string;
132
+ readonly createLimit: () => string;
133
+ readonly getLimits: (subAccountId: string) => string;
134
+ readonly limit: (subAccountId: string, assetId: string) => string;
135
+ };
136
+ readonly faucet: {
137
+ readonly mint: () => string;
138
+ };
139
+ readonly whitelist: {
140
+ readonly submit: () => string;
141
+ };
84
142
  readonly positions: {
85
143
  readonly list: (params?: {
86
144
  margin_account_id?: string;
@@ -110,8 +168,9 @@ export declare const perpRoutes: {
110
168
  state?: string;
111
169
  trading_pair_id?: string;
112
170
  }) => string;
113
- readonly create: () => string;
114
- readonly summary: (marginAccountId: string) => string;
171
+ readonly summary: (marginAccountId: string, params?: {
172
+ trading_pair_id?: string;
173
+ }) => string;
115
174
  readonly availableCollateral: (params?: {
116
175
  asset?: string;
117
176
  }) => string;
@@ -134,7 +193,6 @@ export declare const perpRoutes: {
134
193
  readonly privateTrades: () => string;
135
194
  readonly orders: () => string;
136
195
  readonly positions: () => string;
137
- readonly marginAccount: () => string;
138
196
  readonly funding: () => string;
139
197
  readonly liquidationAlerts: () => string;
140
198
  };
@@ -26,15 +26,19 @@ export const perpRoutes = {
26
26
  batchCancelAllByPair: (tradingPairId) => `${API_V1}/orders/batch-cancel-all/${encodeSegment(tradingPairId)}`,
27
27
  batchCreate: () => `${API_V1}/orders/batch-create`,
28
28
  batchReplace: () => `${API_V1}/orders/batch-replace`,
29
- createConditional: () => `${API_V1}/orders/conditional`,
30
29
  listConditional: (params) => withQuery(`${API_V1}/orders/conditional`, params),
31
30
  cancelConditional: (conditionalOrderId) => `${API_V1}/orders/conditional/${encodeSegment(conditionalOrderId)}`,
32
31
  },
33
32
  delegatedAgents: {
34
33
  list: () => `${API_V1}/delegated-agents`,
34
+ owners: () => `${API_V1}/delegated-agents/owners`,
35
35
  byId: (delegatedAgentId) => `${API_V1}/delegated-agents/${encodeSegment(delegatedAgentId)}`,
36
36
  sessions: () => `${API_V1}/delegated-agents/sessions`,
37
37
  },
38
+ withdrawals: {
39
+ initiate: () => `${API_V1}/withdrawals`,
40
+ byIndex: (withdrawalIndex) => `${API_V1}/withdrawals/${encodeSegment(String(withdrawalIndex))}`,
41
+ },
38
42
  market: {
39
43
  listTradingPairs: (params) => withQuery(`${API_V1}/market/pairs`, params),
40
44
  getTradingPair: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}`,
@@ -47,14 +51,35 @@ export const perpRoutes = {
47
51
  getFundingState: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/funding`,
48
52
  listFundingHistory: (tradingPairId, params) => withQuery(`${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/funding/history`, params),
49
53
  getOpenInterest: (tradingPairId) => `${API_V1}/market/pairs/${encodeSegment(tradingPairId)}/open-interest`,
54
+ getScreener: (params) => withQuery(`${API_V1}/market/screener`, params),
50
55
  },
51
56
  orderbook: {
52
57
  get: (tradingPairId, params) => withQuery(`${API_V1}/orderbook/${encodeSegment(tradingPairId)}`, params),
53
58
  },
54
59
  trades: {
55
60
  publicByPair: (tradingPairId, params) => withQuery(`${API_V1}/trades/${encodeSegment(tradingPairId)}`, params),
61
+ byId: (tradeId) => `${API_V1}/trades/by-id/${encodeSegment(tradeId)}`,
56
62
  user: (params) => withQuery(`${API_V1}/accounts/trades`, params),
57
63
  },
64
+ applications: {
65
+ orders: (params) => withQuery(`${API_V1}/applications/orders`, params),
66
+ users: (params) => withQuery(`${API_V1}/applications/users`, params),
67
+ movements: (params) => withQuery(`${API_V1}/applications/movements`, params),
68
+ balances: (params) => withQuery(`${API_V1}/applications/balances`, params),
69
+ stats: (params) => withQuery(`${API_V1}/applications/stats`, params),
70
+ },
71
+ subAccounts: {
72
+ list: () => `${API_V1}/accounts/sub-accounts`,
73
+ createLimit: () => `${API_V1}/accounts/sub-accounts/limits`,
74
+ getLimits: (subAccountId) => `${API_V1}/accounts/sub-accounts/${encodeSegment(subAccountId)}/limits`,
75
+ limit: (subAccountId, assetId) => `${API_V1}/accounts/sub-accounts/${encodeSegment(subAccountId)}/limits/${encodeSegment(assetId)}`,
76
+ },
77
+ faucet: {
78
+ mint: () => `${API_V1}/faucet/mint`,
79
+ },
80
+ whitelist: {
81
+ submit: () => `${API_V1}/whitelist`,
82
+ },
58
83
  positions: {
59
84
  list: (params) => withQuery(`${API_V1}/positions`, params),
60
85
  get: (positionId) => `${API_V1}/positions/${encodeSegment(positionId)}`,
@@ -67,8 +92,7 @@ export const perpRoutes = {
67
92
  },
68
93
  marginAccounts: {
69
94
  list: (params) => withQuery(`${API_V1}/margin/accounts`, params),
70
- create: () => `${API_V1}/margin/accounts`,
71
- summary: (marginAccountId) => `${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}`,
95
+ summary: (marginAccountId, params) => withQuery(`${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}`, params),
72
96
  availableCollateral: (params) => withQuery(`${API_V1}/margin/collateral/available`, params),
73
97
  transferIn: (marginAccountId) => `${API_V1}/margin/accounts/${encodeSegment(marginAccountId)}/collateral/transfer-in`,
74
98
  transferInAuto: () => `${API_V1}/margin/collateral/transfer-in`,
@@ -85,7 +109,6 @@ export const perpRoutes = {
85
109
  privateTrades: () => `${API_V1}/streaming/private-trades`,
86
110
  orders: () => `${API_V1}/streaming/orders`,
87
111
  positions: () => `${API_V1}/streaming/positions`,
88
- marginAccount: () => `${API_V1}/streaming/margin-account`,
89
112
  funding: () => `${API_V1}/streaming/funding`,
90
113
  liquidationAlerts: () => `${API_V1}/streaming/liquidation-alerts`,
91
114
  },
@@ -17,7 +17,7 @@
17
17
  * console.log(`User: ${profile.username} (${profile.address})`);
18
18
  * ```
19
19
  */
20
- import type { AccountBalance, GetPaginatedUserMovementsResponse, GetUserBalancesParams, GetUserBalancesResponse, GetUserMovementsParams, GetUserTradesParams, GetUserTradesResponse, PortfolioChartResponse, PortfolioMetric, PortfolioPeriod, PortfolioStats, ProfileAPI, UserProfile } from "@0xmonaco/types";
20
+ import type { AccountBalance, GetPaginatedUserMovementsResponse, GetUserBalancesParams, GetUserBalancesResponse, GetUserMovementsParams, GetUserTradesParams, GetUserTradesResponse, ListFundingPaymentsParams, ListFundingPaymentsResponse, PortfolioChartResponse, PortfolioMetric, PortfolioPeriod, PortfolioStats, ProfileAPI, UserProfile } from "@0xmonaco/types";
21
21
  import { BaseAPI } from "../base";
22
22
  export declare class ProfileAPIImpl extends BaseAPI implements ProfileAPI {
23
23
  /**
@@ -188,4 +188,21 @@ export declare class ProfileAPIImpl extends BaseAPI implements ProfileAPI {
188
188
  * ```
189
189
  */
190
190
  getUserTrades(params?: GetUserTradesParams): Promise<GetUserTradesResponse>;
191
+ /**
192
+ * List the current user's funding payment history with pagination and filters.
193
+ *
194
+ * Fetches funding payments from the /api/v1/accounts/funding-payments endpoint.
195
+ * Requires a valid access token to be set.
196
+ *
197
+ * @param params - Optional query parameters for pagination and filtering
198
+ * @returns Promise resolving to paginated funding payments response
199
+ * @throws {APIError} When the request fails or user is not authenticated
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const funding = await profileAPI.listFundingPayments({ trading_pair_id: "550e8400-e29b-41d4-a716-446655440000" });
204
+ * console.log(`Total funding payments: ${funding.total}`);
205
+ * ```
206
+ */
207
+ listFundingPayments(params?: ListFundingPaymentsParams): Promise<ListFundingPaymentsResponse>;
191
208
  }
@@ -17,7 +17,7 @@
17
17
  * console.log(`User: ${profile.username} (${profile.address})`);
18
18
  * ```
19
19
  */
20
- import { GetUserMovementsSchema, GetUserTradesSchema, validate } from "@0xmonaco/types";
20
+ import { GetUserMovementsSchema, GetUserTradesSchema, ListFundingPaymentsSchema, validate } from "@0xmonaco/types";
21
21
  import { APIError } from "../../errors";
22
22
  import { BaseAPI } from "../base";
23
23
  export class ProfileAPIImpl extends BaseAPI {
@@ -256,4 +256,44 @@ export class ProfileAPIImpl extends BaseAPI {
256
256
  const url = queryString ? `/api/v1/accounts/trades?${queryString}` : "/api/v1/accounts/trades";
257
257
  return await this.makeAuthenticatedRequest(url);
258
258
  }
259
+ /**
260
+ * List the current user's funding payment history with pagination and filters.
261
+ *
262
+ * Fetches funding payments from the /api/v1/accounts/funding-payments endpoint.
263
+ * Requires a valid access token to be set.
264
+ *
265
+ * @param params - Optional query parameters for pagination and filtering
266
+ * @returns Promise resolving to paginated funding payments response
267
+ * @throws {APIError} When the request fails or user is not authenticated
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * const funding = await profileAPI.listFundingPayments({ trading_pair_id: "550e8400-e29b-41d4-a716-446655440000" });
272
+ * console.log(`Total funding payments: ${funding.total}`);
273
+ * ```
274
+ */
275
+ async listFundingPayments(params) {
276
+ if (params) {
277
+ validate(ListFundingPaymentsSchema, params);
278
+ }
279
+ const searchParams = new URLSearchParams();
280
+ if (params?.page !== undefined) {
281
+ searchParams.append("page", params.page.toString());
282
+ }
283
+ if (params?.page_size !== undefined) {
284
+ searchParams.append("page_size", params.page_size.toString());
285
+ }
286
+ if (params?.trading_pair_id !== undefined) {
287
+ searchParams.append("trading_pair_id", params.trading_pair_id);
288
+ }
289
+ if (params?.position_id !== undefined) {
290
+ searchParams.append("position_id", params.position_id);
291
+ }
292
+ if (params?.margin_account_id !== undefined) {
293
+ searchParams.append("margin_account_id", params.margin_account_id);
294
+ }
295
+ const queryString = searchParams.toString();
296
+ const url = queryString ? `/api/v1/accounts/funding-payments?${queryString}` : "/api/v1/accounts/funding-payments";
297
+ return await this.makeAuthenticatedRequest(url);
298
+ }
259
299
  }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Sub-Accounts API Implementation
3
+ *
4
+ * Manage a master account's sub-accounts and their per-asset spending limits.
5
+ * All methods are session-authenticated. The limit mutations (`createLimit`,
6
+ * `updateLimit`, `deleteLimit`) additionally require the master account to hold
7
+ * the `ManageSubAccounts` permission — enforced server-side, so a non-master or
8
+ * unpermissioned caller receives a 403.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const { sub_accounts } = await sdk.subAccounts.list();
13
+ * await sdk.subAccounts.createLimit({ sub_account_id, asset_id, max_amount: "1000.00" });
14
+ * ```
15
+ */
16
+ import type { CreateSubAccountLimitRequest, CreateSubAccountLimitResponse, GetSubAccountLimitsResponse, ListSubAccountsResponse, SubAccountsAPI, UpdateSubAccountLimitBody, UpdateSubAccountLimitResponse } from "@0xmonaco/types";
17
+ import { BaseAPI } from "../base";
18
+ export declare class SubAccountsAPIImpl extends BaseAPI implements SubAccountsAPI {
19
+ /**
20
+ * Lists the authenticated master account's sub-accounts with balances.
21
+ *
22
+ * @returns Promise resolving to the sub-accounts and total count
23
+ */
24
+ list(): Promise<ListSubAccountsResponse>;
25
+ /**
26
+ * Creates a per-asset spending limit on a sub-account.
27
+ *
28
+ * Requires the `ManageSubAccounts` permission (enforced server-side).
29
+ *
30
+ * @param body - Sub-account, asset, max amount, and optional daily limit
31
+ * @returns Promise resolving to the created limit
32
+ */
33
+ createLimit(body: CreateSubAccountLimitRequest): Promise<CreateSubAccountLimitResponse>;
34
+ /**
35
+ * Gets the limits configured for a sub-account.
36
+ *
37
+ * @param subAccountId - Sub-account UUID
38
+ * @returns Promise resolving to the sub-account's limits
39
+ */
40
+ getLimits(subAccountId: string): Promise<GetSubAccountLimitsResponse>;
41
+ /**
42
+ * Updates a sub-account's per-asset limit (partial update).
43
+ *
44
+ * Requires the `ManageSubAccounts` permission (enforced server-side).
45
+ *
46
+ * @param subAccountId - Sub-account UUID
47
+ * @param assetId - Asset UUID
48
+ * @param body - Fields to update
49
+ * @returns Promise resolving to the updated limit
50
+ */
51
+ updateLimit(subAccountId: string, assetId: string, body: UpdateSubAccountLimitBody): Promise<UpdateSubAccountLimitResponse>;
52
+ /**
53
+ * Deletes a sub-account's per-asset limit.
54
+ *
55
+ * Requires the `ManageSubAccounts` permission (enforced server-side).
56
+ *
57
+ * @param subAccountId - Sub-account UUID
58
+ * @param assetId - Asset UUID
59
+ * @returns Promise resolving when the limit is deleted
60
+ */
61
+ deleteLimit(subAccountId: string, assetId: string): Promise<void>;
62
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Sub-Accounts API Implementation
3
+ *
4
+ * Manage a master account's sub-accounts and their per-asset spending limits.
5
+ * All methods are session-authenticated. The limit mutations (`createLimit`,
6
+ * `updateLimit`, `deleteLimit`) additionally require the master account to hold
7
+ * the `ManageSubAccounts` permission — enforced server-side, so a non-master or
8
+ * unpermissioned caller receives a 403.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const { sub_accounts } = await sdk.subAccounts.list();
13
+ * await sdk.subAccounts.createLimit({ sub_account_id, asset_id, max_amount: "1000.00" });
14
+ * ```
15
+ */
16
+ import { BaseAPI } from "../base";
17
+ import { perpRoutes } from "../perp/routes";
18
+ export class SubAccountsAPIImpl extends BaseAPI {
19
+ /**
20
+ * Lists the authenticated master account's sub-accounts with balances.
21
+ *
22
+ * @returns Promise resolving to the sub-accounts and total count
23
+ */
24
+ async list() {
25
+ return await this.makeAuthenticatedRequest(perpRoutes.subAccounts.list());
26
+ }
27
+ /**
28
+ * Creates a per-asset spending limit on a sub-account.
29
+ *
30
+ * Requires the `ManageSubAccounts` permission (enforced server-side).
31
+ *
32
+ * @param body - Sub-account, asset, max amount, and optional daily limit
33
+ * @returns Promise resolving to the created limit
34
+ */
35
+ async createLimit(body) {
36
+ return await this.makeAuthenticatedRequest(perpRoutes.subAccounts.createLimit(), {
37
+ method: "POST",
38
+ body: JSON.stringify(body),
39
+ });
40
+ }
41
+ /**
42
+ * Gets the limits configured for a sub-account.
43
+ *
44
+ * @param subAccountId - Sub-account UUID
45
+ * @returns Promise resolving to the sub-account's limits
46
+ */
47
+ async getLimits(subAccountId) {
48
+ return await this.makeAuthenticatedRequest(perpRoutes.subAccounts.getLimits(subAccountId));
49
+ }
50
+ /**
51
+ * Updates a sub-account's per-asset limit (partial update).
52
+ *
53
+ * Requires the `ManageSubAccounts` permission (enforced server-side).
54
+ *
55
+ * @param subAccountId - Sub-account UUID
56
+ * @param assetId - Asset UUID
57
+ * @param body - Fields to update
58
+ * @returns Promise resolving to the updated limit
59
+ */
60
+ async updateLimit(subAccountId, assetId, body) {
61
+ return await this.makeAuthenticatedRequest(perpRoutes.subAccounts.limit(subAccountId, assetId), {
62
+ method: "PUT",
63
+ body: JSON.stringify(body),
64
+ });
65
+ }
66
+ /**
67
+ * Deletes a sub-account's per-asset limit.
68
+ *
69
+ * Requires the `ManageSubAccounts` permission (enforced server-side).
70
+ *
71
+ * @param subAccountId - Sub-account UUID
72
+ * @param assetId - Asset UUID
73
+ * @returns Promise resolving when the limit is deleted
74
+ */
75
+ async deleteLimit(subAccountId, assetId) {
76
+ await this.makeAuthenticatedRequest(perpRoutes.subAccounts.limit(subAccountId, assetId), {
77
+ method: "DELETE",
78
+ });
79
+ }
80
+ }
@@ -0,0 +1 @@
1
+ export { SubAccountsAPIImpl } from "./api";
@@ -0,0 +1 @@
1
+ export { SubAccountsAPIImpl } from "./api";
@@ -11,8 +11,11 @@ interface RawTradeEvent {
11
11
  trade_id: string;
12
12
  price: string;
13
13
  quantity: string;
14
+ /** Raw (integer) quantity; present on single-trade lookups, ignored when mapping */
15
+ quantity_raw?: string;
14
16
  maker_side: string;
15
- executed_at: string;
17
+ /** Absent when the trade has no recorded execution time */
18
+ executed_at?: string;
16
19
  };
17
20
  }
18
21
  /**
@@ -40,5 +43,13 @@ export declare class TradesAPIImpl extends BaseAPI {
40
43
  * @returns Array of TradeEvent records sorted by executed_at descending (newest first)
41
44
  */
42
45
  getTrades(tradingPairId: string, options?: GetTradesOptions): Promise<TradeEvent[]>;
46
+ /**
47
+ * Get a single trade by its UUID.
48
+ *
49
+ * @param tradeId - The trade UUID
50
+ * @returns The matching TradeEvent
51
+ * @throws {APIError} If the trade is not found
52
+ */
53
+ getTradeById(tradeId: string): Promise<TradeEvent>;
43
54
  }
44
55
  export {};
@@ -1,4 +1,5 @@
1
1
  import { BaseAPI } from "../base";
2
+ import { perpRoutes } from "../perp";
2
3
  /**
3
4
  * Convert a raw trade event (snake_case) to a TradeEvent (camelCase)
4
5
  */
@@ -12,7 +13,7 @@ export function parseRawTradeEvent(raw) {
12
13
  price: raw.data.price,
13
14
  quantity: raw.data.quantity,
14
15
  makerSide: raw.data.maker_side.toUpperCase(),
15
- executedAt: raw.data.executed_at,
16
+ executedAt: raw.data.executed_at ?? "",
16
17
  },
17
18
  };
18
19
  }
@@ -39,4 +40,15 @@ export class TradesAPIImpl extends BaseAPI {
39
40
  const response = await this.makePublicRequest(`/api/v1/trades/${encodeURIComponent(tradingPairId)}?${params.toString()}`);
40
41
  return response.trades.map(parseRawTradeEvent);
41
42
  }
43
+ /**
44
+ * Get a single trade by its UUID.
45
+ *
46
+ * @param tradeId - The trade UUID
47
+ * @returns The matching TradeEvent
48
+ * @throws {APIError} If the trade is not found
49
+ */
50
+ async getTradeById(tradeId) {
51
+ const response = await this.makePublicRequest(perpRoutes.trades.byId(tradeId));
52
+ return parseRawTradeEvent(response);
53
+ }
42
54
  }
@@ -21,7 +21,7 @@
21
21
  * );
22
22
  * ```
23
23
  */
24
- import type { BatchCancelOrdersResponse, BatchCreateOrderParams, BatchCreateOrdersResponse, BatchReplaceOrderParams, BatchReplaceOrdersResponse, CancelConditionalOrderResponse, CancelOrderResponse, CreateConditionalOrderParams, CreateConditionalOrderResponse, CreateOrderResponse, GetOrderResponse, GetPaginatedOrdersParams, GetPaginatedOrdersResponse, ListConditionalOrdersParams, ListConditionalOrdersResponse, OrderSide, ParentTpSlLegParams, PositionSide, ReplaceOrderResponse, TimeInForce, TradingAPI, TradingMode } from "@0xmonaco/types";
24
+ import type { BatchCancelOrdersResponse, BatchCreateOrderParams, BatchCreateOrdersResponse, BatchReplaceOrderParams, BatchReplaceOrdersResponse, CancelConditionalOrderResponse, CancelOrderResponse, CreateOrderResponse, GetOrderResponse, GetPaginatedOrdersParams, GetPaginatedOrdersResponse, ListConditionalOrdersParams, ListConditionalOrdersResponse, OrderSide, ParentTpSlLegParams, PositionSide, ReplaceOrderResponse, TimeInForce, TradingAPI, TradingMode } from "@0xmonaco/types";
25
25
  import { BaseAPI } from "../base";
26
26
  export declare class TradingAPIImpl extends BaseAPI implements TradingAPI {
27
27
  /**
@@ -80,6 +80,8 @@ export declare class TradingAPIImpl extends BaseAPI implements TradingAPI {
80
80
  expirationDate?: string;
81
81
  timeInForce?: TimeInForce;
82
82
  marginAccountId?: string;
83
+ marginBucketId?: string;
84
+ marginBucketCollateral?: string;
83
85
  strategyKey?: string;
84
86
  positionSide?: PositionSide;
85
87
  leverage?: string;
@@ -132,6 +134,8 @@ export declare class TradingAPIImpl extends BaseAPI implements TradingAPI {
132
134
  tradingMode?: TradingMode;
133
135
  slippageTolerance?: number;
134
136
  marginAccountId?: string;
137
+ marginBucketId?: string;
138
+ marginBucketCollateral?: string;
135
139
  strategyKey?: string;
136
140
  positionSide?: PositionSide;
137
141
  leverage?: string;
@@ -156,7 +160,6 @@ export declare class TradingAPIImpl extends BaseAPI implements TradingAPI {
156
160
  * ```
157
161
  */
158
162
  cancelOrder(orderId: string): Promise<CancelOrderResponse>;
159
- createConditionalOrder(params: CreateConditionalOrderParams): Promise<CreateConditionalOrderResponse>;
160
163
  cancelConditionalOrder(conditionalOrderId: string): Promise<CancelConditionalOrderResponse>;
161
164
  listConditionalOrders(params?: ListConditionalOrdersParams): Promise<ListConditionalOrdersResponse>;
162
165
  /**
@@ -21,7 +21,7 @@
21
21
  * );
22
22
  * ```
23
23
  */
24
- import { BatchCreateOrdersSchema, BatchReplaceOrdersSchema, CancelConditionalOrderSchema, CancelOrderSchema, CreateConditionalOrderSchema, GetPaginatedOrdersSchema, ListConditionalOrdersSchema, PlaceLimitOrderSchema, PlaceMarketOrderSchema, ReplaceOrderSchema, validate, } from "@0xmonaco/types";
24
+ import { BatchCreateOrdersSchema, BatchReplaceOrdersSchema, CancelConditionalOrderSchema, CancelOrderSchema, GetPaginatedOrdersSchema, ListConditionalOrdersSchema, PlaceLimitOrderSchema, PlaceMarketOrderSchema, ReplaceOrderSchema, validate, } from "@0xmonaco/types";
25
25
  import { BaseAPI } from "../base";
26
26
  import { perpRoutes } from "../perp";
27
27
  function parentTpSlLegToRequest(leg) {
@@ -107,6 +107,8 @@ export class TradingAPIImpl extends BaseAPI {
107
107
  expiration_date: options?.expirationDate,
108
108
  time_in_force: options?.timeInForce,
109
109
  margin_account_id: options?.marginAccountId,
110
+ margin_bucket_id: options?.marginBucketId,
111
+ margin_bucket_collateral: options?.marginBucketCollateral,
110
112
  strategy_key: options?.strategyKey,
111
113
  position_side: options?.positionSide,
112
114
  leverage: options?.leverage,
@@ -177,6 +179,8 @@ export class TradingAPIImpl extends BaseAPI {
177
179
  quantity,
178
180
  trading_mode: options?.tradingMode || "SPOT",
179
181
  margin_account_id: options?.marginAccountId,
182
+ margin_bucket_id: options?.marginBucketId,
183
+ margin_bucket_collateral: options?.marginBucketCollateral,
180
184
  strategy_key: options?.strategyKey,
181
185
  position_side: options?.positionSide,
182
186
  leverage: options?.leverage,
@@ -216,29 +220,6 @@ export class TradingAPIImpl extends BaseAPI {
216
220
  body: JSON.stringify(requestBody),
217
221
  });
218
222
  }
219
- async createConditionalOrder(params) {
220
- validate(CreateConditionalOrderSchema, params);
221
- const requestBody = {
222
- trading_pair_id: params.tradingPairId,
223
- margin_account_id: params.marginAccountId,
224
- condition_type: params.conditionType,
225
- trigger_price: params.triggerPrice,
226
- trigger_source: params.triggerSource ?? "MARK_PRICE",
227
- side: params.side,
228
- position_side: params.positionSide,
229
- order_type: params.orderType,
230
- limit_price: params.limitPrice,
231
- quantity: params.quantity,
232
- reduce_only: params.reduceOnly ?? true,
233
- time_in_force: params.timeInForce,
234
- slippage_tolerance_bps: params.slippageToleranceBps,
235
- expires_at: params.expiresAt,
236
- };
237
- return await this.makeAuthenticatedRequest(perpRoutes.orders.createConditional(), {
238
- method: "POST",
239
- body: JSON.stringify(requestBody),
240
- });
241
- }
242
223
  async cancelConditionalOrder(conditionalOrderId) {
243
224
  validate(CancelConditionalOrderSchema, { conditionalOrderId });
244
225
  return await this.makeAuthenticatedRequest(perpRoutes.orders.cancelConditional(conditionalOrderId), {
@@ -363,6 +344,8 @@ export class TradingAPIImpl extends BaseAPI {
363
344
  expiration_date: order.expirationDate,
364
345
  time_in_force: order.timeInForce,
365
346
  margin_account_id: order.marginAccountId,
347
+ margin_bucket_id: order.marginBucketId,
348
+ margin_bucket_collateral: order.marginBucketCollateral,
366
349
  strategy_key: order.strategyKey,
367
350
  position_side: order.positionSide,
368
351
  leverage: order.leverage,
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Whitelist API Implementation
3
+ *
4
+ * Public (unauthenticated) whitelist/waitlist application submission. The
5
+ * server validates and de-duplicates by wallet address and email, creating an
6
+ * inactive user pending manual approval. This is an onboarding endpoint, not a
7
+ * trading operation.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const { message, user_id } = await sdk.whitelist.submit({
12
+ * wallet_address: "0x...",
13
+ * email: "user@example.com",
14
+ * });
15
+ * ```
16
+ */
17
+ import type { SubmitWhitelistRequest, SubmitWhitelistResponse, WhitelistAPI } from "@0xmonaco/types";
18
+ import { BaseAPI } from "../base";
19
+ export declare class WhitelistAPIImpl extends BaseAPI implements WhitelistAPI {
20
+ /**
21
+ * Submits a whitelist (waitlist) application. Public — no auth required.
22
+ *
23
+ * @param body - Applicant details
24
+ * @returns Promise resolving to the status message and created user id
25
+ */
26
+ submit(body: SubmitWhitelistRequest): Promise<SubmitWhitelistResponse>;
27
+ }