@0xmonaco/core 0.5.5 → 0.5.7
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/README.md +13 -23
- package/dist/api/auth/api.js +2 -0
- package/dist/api/auth/api.js.map +1 -1
- package/dist/api/base.js +3 -0
- package/dist/api/base.js.map +1 -1
- package/dist/api/profile/api.d.ts +13 -3
- package/dist/api/profile/api.d.ts.map +1 -1
- package/dist/api/profile/api.js +29 -3
- package/dist/api/profile/api.js.map +1 -1
- package/dist/api/trading/api.d.ts +77 -19
- package/dist/api/trading/api.d.ts.map +1 -1
- package/dist/api/trading/api.js +136 -28
- package/dist/api/trading/api.js.map +1 -1
- package/dist/api/vault/api.d.ts.map +1 -1
- package/dist/api/vault/api.js +10 -1
- package/dist/api/vault/api.js.map +1 -1
- package/dist/api/websocket/types.d.ts +3 -1
- package/dist/api/websocket/types.d.ts.map +1 -1
- package/dist/api/websocket/types.js +0 -1
- package/dist/api/websocket/websocket.d.ts.map +1 -1
- package/dist/api/websocket/websocket.js +36 -0
- package/dist/api/websocket/websocket.js.map +1 -1
- package/dist/errors/errors.d.ts +1 -1
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +24 -9
- package/dist/errors/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/networks/networks.d.ts +8 -1
- package/dist/networks/networks.d.ts.map +1 -1
- package/dist/networks/networks.js +20 -7
- package/dist/networks/networks.js.map +1 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +26 -26
- package/dist/sdk.js.map +1 -1
- package/dist/utils/magnitude.js +1 -1
- package/dist/utils/magnitude.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ npm install viem@^2.31.7
|
|
|
62
62
|
|
|
63
63
|
## Network Support
|
|
64
64
|
|
|
65
|
-
The SDK supports
|
|
65
|
+
The SDK supports the following preset networks. Configure the network by providing the `network` and `seiRpcUrl` parameters:
|
|
66
66
|
|
|
67
67
|
**Preset Networks:**
|
|
68
68
|
- `"development"` - Development environment (https://develop.apimonaco.xyz)
|
|
@@ -70,6 +70,8 @@ The SDK supports multiple preset networks and custom API URLs. Configure the net
|
|
|
70
70
|
- `"mainnet"` - Production environment (https://api.monaco.xyz)
|
|
71
71
|
- `"local"` - Local development (http://localhost:8080)
|
|
72
72
|
|
|
73
|
+
WebSocket URLs are automatically resolved per network.
|
|
74
|
+
|
|
73
75
|
```typescript
|
|
74
76
|
import { MonacoSDK } from "@0xmonaco/core";
|
|
75
77
|
|
|
@@ -77,32 +79,21 @@ import { MonacoSDK } from "@0xmonaco/core";
|
|
|
77
79
|
const devSdk = new MonacoSDK({
|
|
78
80
|
walletClient,
|
|
79
81
|
network: "development",
|
|
80
|
-
seiRpcUrl: "https://evm-rpc-testnet.sei-apis.com",
|
|
81
|
-
wsUrl: "wss://develop.apimonaco.xyz/ws"
|
|
82
|
+
seiRpcUrl: "https://evm-rpc-testnet.sei-apis.com",
|
|
82
83
|
});
|
|
83
84
|
|
|
84
85
|
// Staging configuration
|
|
85
86
|
const stagingSdk = new MonacoSDK({
|
|
86
87
|
walletClient,
|
|
87
88
|
network: "staging",
|
|
88
|
-
seiRpcUrl: "https://evm-rpc-testnet.sei-apis.com",
|
|
89
|
-
wsUrl: "wss://staging.apimonaco.xyz/ws"
|
|
89
|
+
seiRpcUrl: "https://evm-rpc-testnet.sei-apis.com",
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
// Mainnet configuration
|
|
93
93
|
const mainnetSdk = new MonacoSDK({
|
|
94
94
|
walletClient,
|
|
95
95
|
network: "mainnet",
|
|
96
|
-
seiRpcUrl: "https://evm-rpc.sei-apis.com",
|
|
97
|
-
wsUrl: "wss://api.monaco.xyz/ws"
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// Custom API URL
|
|
101
|
-
const customSdk = new MonacoSDK({
|
|
102
|
-
walletClient,
|
|
103
|
-
network: "https://my-custom-api.com",
|
|
104
|
-
seiRpcUrl: "https://evm-rpc-testnet.sei-apis.com",
|
|
105
|
-
wsUrl: "wss://my-custom-api.com/ws"
|
|
96
|
+
seiRpcUrl: "https://evm-rpc.sei-apis.com",
|
|
106
97
|
});
|
|
107
98
|
```
|
|
108
99
|
|
|
@@ -123,9 +114,8 @@ const walletClient = createWalletClient({
|
|
|
123
114
|
|
|
124
115
|
const monaco = new MonacoSDK({
|
|
125
116
|
walletClient,
|
|
126
|
-
network: "development", // or "staging", "mainnet"
|
|
117
|
+
network: "development", // or "staging", "mainnet", "local"
|
|
127
118
|
seiRpcUrl: "https://evm-rpc-testnet.sei-apis.com", // or https://evm-rpc.sei-apis.com for mainnet
|
|
128
|
-
wsUrl: "wss://develop.apimonaco.xyz/ws" // or wss://staging.apimonaco.xyz/ws, wss://api.monaco.xyz/ws
|
|
129
119
|
});
|
|
130
120
|
|
|
131
121
|
// Authentication
|
|
@@ -264,14 +254,14 @@ The main SDK class that provides access to all protocol features.
|
|
|
264
254
|
|
|
265
255
|
```typescript
|
|
266
256
|
interface SDKConfig {
|
|
267
|
-
/** Wallet client for signing operations */
|
|
268
|
-
walletClient
|
|
257
|
+
/** Wallet client for signing operations (optional - can be set later via setWalletClient) */
|
|
258
|
+
walletClient?: WalletClient;
|
|
269
259
|
|
|
270
|
-
/**
|
|
271
|
-
network
|
|
260
|
+
/** Network preset: "local", "development", "staging", or "mainnet" */
|
|
261
|
+
network: Network;
|
|
272
262
|
|
|
273
|
-
/**
|
|
274
|
-
|
|
263
|
+
/** RPC URL for Sei blockchain interactions */
|
|
264
|
+
seiRpcUrl: string;
|
|
275
265
|
}
|
|
276
266
|
```
|
|
277
267
|
|
package/dist/api/auth/api.js
CHANGED
package/dist/api/auth/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/api/auth/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,OAAO,WAAY,SAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/api/auth/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api/base.js
CHANGED
package/dist/api/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/api/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAOrC,MAAM,OAAgB,OAAO;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/api/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,21 +50,31 @@ export declare class ProfileAPIImpl extends BaseAPI implements ProfileAPI {
|
|
|
50
50
|
* Fetches the user's transaction history from the /api/v1/accounts/movements endpoint.
|
|
51
51
|
* Requires a valid access token to be set.
|
|
52
52
|
*
|
|
53
|
-
* @param params - Optional query parameters for pagination
|
|
53
|
+
* @param params - Optional query parameters for pagination and filtering
|
|
54
54
|
* @param params.page - Page number (starts from 1, default: 1)
|
|
55
55
|
* @param params.limit - Number of items per page (default: 20, max: 100)
|
|
56
|
+
* @param params.entry_type - Filter by entry type (CREDIT, DEBIT, LOCK, UNLOCK, FEE)
|
|
57
|
+
* @param params.transaction_type - Filter by transaction type (DEPOSIT, WITHDRAWAL, TRADE, FEE, FUNDING, LIQUIDATION, INTEREST, REWARD)
|
|
58
|
+
* @param params.asset_id - Filter by asset ID (UUID)
|
|
59
|
+
* @param params.source - Data source: "hot_storage", "cold_storage", or "both" (default: "hot_storage")
|
|
56
60
|
* @returns Promise resolving to paginated movements response
|
|
57
61
|
* @throws {APIError} When the request fails or user is not authenticated
|
|
58
62
|
*
|
|
59
63
|
* @example
|
|
60
64
|
* ```typescript
|
|
61
65
|
* // Get first page with default limit (20)
|
|
62
|
-
* const movements = await profileAPI.
|
|
66
|
+
* const movements = await profileAPI.getPaginatedUserMovements();
|
|
63
67
|
* console.log(`Total movements: ${movements.total_count}`);
|
|
64
68
|
*
|
|
65
69
|
* // Get second page with custom limit
|
|
66
|
-
* const page2 = await profileAPI.
|
|
70
|
+
* const page2 = await profileAPI.getPaginatedUserMovements({ page: 2, limit: 50 });
|
|
67
71
|
* console.log(`Page ${page2.page} of ${page2.total_pages}`);
|
|
72
|
+
*
|
|
73
|
+
* // Filter by entry type and transaction type
|
|
74
|
+
* const deposits = await profileAPI.getPaginatedUserMovements({ entry_type: "CREDIT", transaction_type: "DEPOSIT" });
|
|
75
|
+
*
|
|
76
|
+
* // Filter by asset
|
|
77
|
+
* const usdcMovements = await profileAPI.getPaginatedUserMovements({ asset_id: "550e8400-e29b-41d4-a716-446655440000" });
|
|
68
78
|
* ```
|
|
69
79
|
*/
|
|
70
80
|
getPaginatedUserMovements(params?: GetUserMovementsParams): Promise<GetPaginatedUserMovementsResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api/profile/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACV,WAAW,EACZ,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api/profile/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACV,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,qBAAa,cAAe,SAAQ,OAAQ,YAAW,UAAU;IAC/D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,yBAAyB,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,iCAAiC,CAAC;IAgC5G;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAgBvF;;;;;;;;;;;;;;;;;;OAkBG;IACG,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CASxE"}
|
package/dist/api/profile/api.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* console.log(`User: ${profile.username} (${profile.address})`);
|
|
18
18
|
* ```
|
|
19
19
|
*/
|
|
20
|
+
import { GetUserMovementsSchema, validate } from "@0xmonaco/types";
|
|
20
21
|
import { APIError } from "../../errors";
|
|
21
22
|
import { BaseAPI } from "../base";
|
|
22
23
|
export class ProfileAPIImpl extends BaseAPI {
|
|
@@ -63,24 +64,37 @@ export class ProfileAPIImpl extends BaseAPI {
|
|
|
63
64
|
* Fetches the user's transaction history from the /api/v1/accounts/movements endpoint.
|
|
64
65
|
* Requires a valid access token to be set.
|
|
65
66
|
*
|
|
66
|
-
* @param params - Optional query parameters for pagination
|
|
67
|
+
* @param params - Optional query parameters for pagination and filtering
|
|
67
68
|
* @param params.page - Page number (starts from 1, default: 1)
|
|
68
69
|
* @param params.limit - Number of items per page (default: 20, max: 100)
|
|
70
|
+
* @param params.entry_type - Filter by entry type (CREDIT, DEBIT, LOCK, UNLOCK, FEE)
|
|
71
|
+
* @param params.transaction_type - Filter by transaction type (DEPOSIT, WITHDRAWAL, TRADE, FEE, FUNDING, LIQUIDATION, INTEREST, REWARD)
|
|
72
|
+
* @param params.asset_id - Filter by asset ID (UUID)
|
|
73
|
+
* @param params.source - Data source: "hot_storage", "cold_storage", or "both" (default: "hot_storage")
|
|
69
74
|
* @returns Promise resolving to paginated movements response
|
|
70
75
|
* @throws {APIError} When the request fails or user is not authenticated
|
|
71
76
|
*
|
|
72
77
|
* @example
|
|
73
78
|
* ```typescript
|
|
74
79
|
* // Get first page with default limit (20)
|
|
75
|
-
* const movements = await profileAPI.
|
|
80
|
+
* const movements = await profileAPI.getPaginatedUserMovements();
|
|
76
81
|
* console.log(`Total movements: ${movements.total_count}`);
|
|
77
82
|
*
|
|
78
83
|
* // Get second page with custom limit
|
|
79
|
-
* const page2 = await profileAPI.
|
|
84
|
+
* const page2 = await profileAPI.getPaginatedUserMovements({ page: 2, limit: 50 });
|
|
80
85
|
* console.log(`Page ${page2.page} of ${page2.total_pages}`);
|
|
86
|
+
*
|
|
87
|
+
* // Filter by entry type and transaction type
|
|
88
|
+
* const deposits = await profileAPI.getPaginatedUserMovements({ entry_type: "CREDIT", transaction_type: "DEPOSIT" });
|
|
89
|
+
*
|
|
90
|
+
* // Filter by asset
|
|
91
|
+
* const usdcMovements = await profileAPI.getPaginatedUserMovements({ asset_id: "550e8400-e29b-41d4-a716-446655440000" });
|
|
81
92
|
* ```
|
|
82
93
|
*/
|
|
83
94
|
async getPaginatedUserMovements(params) {
|
|
95
|
+
if (params) {
|
|
96
|
+
validate(GetUserMovementsSchema, params);
|
|
97
|
+
}
|
|
84
98
|
const searchParams = new URLSearchParams();
|
|
85
99
|
if (params?.page !== undefined) {
|
|
86
100
|
searchParams.append("page", params.page.toString());
|
|
@@ -88,6 +102,18 @@ export class ProfileAPIImpl extends BaseAPI {
|
|
|
88
102
|
if (params?.limit !== undefined) {
|
|
89
103
|
searchParams.append("limit", params.limit.toString());
|
|
90
104
|
}
|
|
105
|
+
if (params?.entry_type !== undefined) {
|
|
106
|
+
searchParams.append("entry_type", params.entry_type);
|
|
107
|
+
}
|
|
108
|
+
if (params?.transaction_type !== undefined) {
|
|
109
|
+
searchParams.append("transaction_type", params.transaction_type);
|
|
110
|
+
}
|
|
111
|
+
if (params?.asset_id !== undefined) {
|
|
112
|
+
searchParams.append("asset_id", params.asset_id);
|
|
113
|
+
}
|
|
114
|
+
if (params?.source !== undefined) {
|
|
115
|
+
searchParams.append("source", params.source);
|
|
116
|
+
}
|
|
91
117
|
const queryString = searchParams.toString();
|
|
92
118
|
const url = queryString ? `/api/v1/accounts/movements?${queryString}` : "/api/v1/accounts/movements";
|
|
93
119
|
return await this.makeAuthenticatedRequest(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/api/profile/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,OAAO,cAAe,SAAQ,OAAO;IACzC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAc,qBAAqB,CAAC,CAAC;QAErF,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;YAC7C,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SACxC,CAAC;IACJ,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/api/profile/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* const openOrders = await tradingAPI.getOpenOrders({ market: "ETH-USD" });
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
import type { BatchCancelOrdersResponse, CancelOrderResponse, CreateOrderResponse, GetOrderResponse, GetPaginatedOrdersParams, GetPaginatedOrdersResponse, OrderSide, ReplaceOrderResponse, TimeInForce, TradingAPI, TradingMode } from "@0xmonaco/types";
|
|
27
|
+
import type { BatchCancelOrdersResponse, BatchCreateOrderParams, BatchCreateOrdersResponse, BatchReplaceOrderParams, BatchReplaceOrdersResponse, CancelOrderResponse, CreateOrderResponse, GetOrderResponse, GetPaginatedOrdersParams, GetPaginatedOrdersResponse, OrderSide, ReplaceOrderResponse, TimeInForce, TradingAPI, TradingMode } from "@0xmonaco/types";
|
|
28
28
|
import { BaseAPI } from "../base";
|
|
29
29
|
export declare class TradingAPIImpl extends BaseAPI implements TradingAPI {
|
|
30
30
|
/**
|
|
@@ -156,39 +156,97 @@ export declare class TradingAPIImpl extends BaseAPI implements TradingAPI {
|
|
|
156
156
|
*/
|
|
157
157
|
cancelOrder(orderId: string): Promise<CancelOrderResponse>;
|
|
158
158
|
/**
|
|
159
|
-
* Batch cancels
|
|
159
|
+
* Batch cancels specific orders by their IDs.
|
|
160
160
|
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
161
|
+
* @param orderIds - Array of order IDs to cancel
|
|
162
|
+
* @returns Promise resolving to BatchCancelOrdersResponse with cancellation details
|
|
163
|
+
* @throws {APIError} When API communication fails
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* const result = await tradingAPI.batchCancel(["order_123", "order_456"]);
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
batchCancel(orderIds: string[]): Promise<BatchCancelOrdersResponse>;
|
|
171
|
+
/**
|
|
172
|
+
* Cancels all active orders, optionally filtered by trading pair.
|
|
163
173
|
*
|
|
164
|
-
* @param
|
|
165
|
-
* @param options.orderIds - Array of order IDs to cancel (ignored if cancelAll is true)
|
|
166
|
-
* @param options.cancelAll - If true, cancel all active orders for the user
|
|
174
|
+
* @param tradingPairId - Optional trading pair ID to filter cancellation
|
|
167
175
|
* @returns Promise resolving to BatchCancelOrdersResponse with cancellation details
|
|
168
176
|
* @throws {APIError} When API communication fails
|
|
169
177
|
*
|
|
170
178
|
* @example
|
|
171
179
|
* ```typescript
|
|
172
|
-
* // Cancel
|
|
173
|
-
*
|
|
174
|
-
* orderIds: ["order_123", "order_456", "order_789"]
|
|
175
|
-
* });
|
|
176
|
-
* console.log(`Canceled ${result.total_canceled} of ${result.total_requested} orders`);
|
|
180
|
+
* // Cancel all active orders globally
|
|
181
|
+
* await tradingAPI.batchCancelAll();
|
|
177
182
|
*
|
|
178
|
-
* // Cancel all
|
|
179
|
-
*
|
|
180
|
-
* console.log(`Canceled all ${allCanceled.total_canceled} active orders`);
|
|
183
|
+
* // Cancel all orders for a specific trading pair
|
|
184
|
+
* await tradingAPI.batchCancelAll("123e4567-e89b-12d3-a456-426614174000");
|
|
181
185
|
* ```
|
|
182
186
|
*/
|
|
183
|
-
|
|
184
|
-
orderIds?: string[];
|
|
185
|
-
cancelAll?: boolean;
|
|
186
|
-
}): Promise<BatchCancelOrdersResponse>;
|
|
187
|
+
batchCancelAll(tradingPairId?: string): Promise<BatchCancelOrdersResponse>;
|
|
187
188
|
replaceOrder(orderId: string, newOrder: {
|
|
188
189
|
price?: string;
|
|
189
190
|
quantity?: string;
|
|
190
191
|
useMasterBalance?: boolean;
|
|
191
192
|
}): Promise<ReplaceOrderResponse>;
|
|
193
|
+
/**
|
|
194
|
+
* Batch creates multiple orders in a single request.
|
|
195
|
+
*
|
|
196
|
+
* Each order is validated and processed through the matching engine.
|
|
197
|
+
* Failed orders do not prevent other orders from being created.
|
|
198
|
+
*
|
|
199
|
+
* @param orders - Array of order parameters to create
|
|
200
|
+
* @returns Promise resolving to BatchCreateOrdersResponse with individual results
|
|
201
|
+
* @throws {APIError} When API communication fails
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* const result = await tradingAPI.batchCreate([
|
|
206
|
+
* {
|
|
207
|
+
* tradingPairId: "123e4567-e89b-12d3-a456-426614174000",
|
|
208
|
+
* orderType: "LIMIT",
|
|
209
|
+
* side: "BUY",
|
|
210
|
+
* price: "35000.00",
|
|
211
|
+
* quantity: "0.5",
|
|
212
|
+
* },
|
|
213
|
+
* {
|
|
214
|
+
* tradingPairId: "123e4567-e89b-12d3-a456-426614174000",
|
|
215
|
+
* orderType: "LIMIT",
|
|
216
|
+
* side: "SELL",
|
|
217
|
+
* price: "36000.00",
|
|
218
|
+
* quantity: "0.3",
|
|
219
|
+
* },
|
|
220
|
+
* ]);
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
batchCreate(orders: BatchCreateOrderParams[]): Promise<BatchCreateOrdersResponse>;
|
|
224
|
+
/**
|
|
225
|
+
* Batch replaces multiple orders in a single request.
|
|
226
|
+
*
|
|
227
|
+
* Each order is canceled and re-created with new parameters.
|
|
228
|
+
* Failed replacements do not prevent other orders from being replaced.
|
|
229
|
+
*
|
|
230
|
+
* @param orders - Array of order replacement parameters
|
|
231
|
+
* @returns Promise resolving to BatchReplaceOrdersResponse with individual results
|
|
232
|
+
* @throws {APIError} When API communication fails
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```typescript
|
|
236
|
+
* const result = await tradingAPI.batchReplace([
|
|
237
|
+
* {
|
|
238
|
+
* orderId: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
|
|
239
|
+
* price: "35500.00",
|
|
240
|
+
* quantity: "0.7",
|
|
241
|
+
* },
|
|
242
|
+
* {
|
|
243
|
+
* orderId: "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
244
|
+
* price: "36500.00",
|
|
245
|
+
* },
|
|
246
|
+
* ]);
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
batchReplace(orders: BatchReplaceOrderParams[]): Promise<BatchReplaceOrdersResponse>;
|
|
192
250
|
/**
|
|
193
251
|
* Gets paginated orders based on query parameters with automatic pagination.
|
|
194
252
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api/trading/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EAET,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/api/trading/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EAET,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAWzB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,qBAAa,cAAe,SAAQ,OAAQ,YAAW,UAAU;IAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,GACA,OAAO,CAAC,mBAAmB,CAAC;IA4B/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiDG;IACG,gBAAgB,CACpB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,GACA,OAAO,CAAC,mBAAmB,CAAC;IA0B/B;;;;;;;;;;;;;;;OAeG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAchE;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAWzE;;;;;;;;;;;;;;;OAeG;IACG,cAAc,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAQ1E,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GACA,OAAO,CAAC,oBAAoB,CAAC;IA0BhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,WAAW,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAwBvF;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,YAAY,CAAC,MAAM,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAkB1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,kBAAkB,CAAC,MAAM,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAgChG;;;;;;;;;;;;;;;;;OAiBG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAK3D"}
|
package/dist/api/trading/api.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* const openOrders = await tradingAPI.getOpenOrders({ market: "ETH-USD" });
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
import { PlaceLimitOrderSchema, validate } from "@0xmonaco/types";
|
|
27
|
+
import { BatchCreateOrdersSchema, BatchReplaceOrdersSchema, CancelOrderSchema, GetPaginatedOrdersSchema, PlaceLimitOrderSchema, PlaceMarketOrderSchema, ReplaceOrderSchema, validate, } from "@0xmonaco/types";
|
|
28
28
|
import { BaseAPI } from "../base";
|
|
29
29
|
export class TradingAPIImpl extends BaseAPI {
|
|
30
30
|
/**
|
|
@@ -153,6 +153,13 @@ export class TradingAPIImpl extends BaseAPI {
|
|
|
153
153
|
* ```
|
|
154
154
|
*/
|
|
155
155
|
async placeMarketOrder(tradingPairId, side, quantity, options) {
|
|
156
|
+
// Validate inputs before making API call
|
|
157
|
+
validate(PlaceMarketOrderSchema, {
|
|
158
|
+
tradingPairId,
|
|
159
|
+
side,
|
|
160
|
+
quantity,
|
|
161
|
+
options,
|
|
162
|
+
});
|
|
156
163
|
const requestBody = {
|
|
157
164
|
trading_pair_id: tradingPairId,
|
|
158
165
|
order_type: "MARKET",
|
|
@@ -185,6 +192,8 @@ export class TradingAPIImpl extends BaseAPI {
|
|
|
185
192
|
* ```
|
|
186
193
|
*/
|
|
187
194
|
async cancelOrder(orderId) {
|
|
195
|
+
// Validate inputs before making API call
|
|
196
|
+
validate(CancelOrderSchema, { orderId });
|
|
188
197
|
const requestBody = {
|
|
189
198
|
order_id: orderId,
|
|
190
199
|
};
|
|
@@ -194,47 +203,51 @@ export class TradingAPIImpl extends BaseAPI {
|
|
|
194
203
|
});
|
|
195
204
|
}
|
|
196
205
|
/**
|
|
197
|
-
* Batch cancels
|
|
206
|
+
* Batch cancels specific orders by their IDs.
|
|
207
|
+
*
|
|
208
|
+
* @param orderIds - Array of order IDs to cancel
|
|
209
|
+
* @returns Promise resolving to BatchCancelOrdersResponse with cancellation details
|
|
210
|
+
* @throws {APIError} When API communication fails
|
|
198
211
|
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
212
|
+
* @example
|
|
213
|
+
* ```typescript
|
|
214
|
+
* const result = await tradingAPI.batchCancel(["order_123", "order_456"]);
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
async batchCancel(orderIds) {
|
|
218
|
+
if (!orderIds || orderIds.length === 0) {
|
|
219
|
+
throw new Error("orderIds is required and must not be empty");
|
|
220
|
+
}
|
|
221
|
+
return this.makeAuthenticatedRequest("/api/v1/orders/batch-cancel", {
|
|
222
|
+
method: "POST",
|
|
223
|
+
body: JSON.stringify({ order_ids: orderIds }),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Cancels all active orders, optionally filtered by trading pair.
|
|
201
228
|
*
|
|
202
|
-
* @param
|
|
203
|
-
* @param options.orderIds - Array of order IDs to cancel (ignored if cancelAll is true)
|
|
204
|
-
* @param options.cancelAll - If true, cancel all active orders for the user
|
|
229
|
+
* @param tradingPairId - Optional trading pair ID to filter cancellation
|
|
205
230
|
* @returns Promise resolving to BatchCancelOrdersResponse with cancellation details
|
|
206
231
|
* @throws {APIError} When API communication fails
|
|
207
232
|
*
|
|
208
233
|
* @example
|
|
209
234
|
* ```typescript
|
|
210
|
-
* // Cancel
|
|
211
|
-
*
|
|
212
|
-
* orderIds: ["order_123", "order_456", "order_789"]
|
|
213
|
-
* });
|
|
214
|
-
* console.log(`Canceled ${result.total_canceled} of ${result.total_requested} orders`);
|
|
235
|
+
* // Cancel all active orders globally
|
|
236
|
+
* await tradingAPI.batchCancelAll();
|
|
215
237
|
*
|
|
216
|
-
* // Cancel all
|
|
217
|
-
*
|
|
218
|
-
* console.log(`Canceled all ${allCanceled.total_canceled} active orders`);
|
|
238
|
+
* // Cancel all orders for a specific trading pair
|
|
239
|
+
* await tradingAPI.batchCancelAll("123e4567-e89b-12d3-a456-426614174000");
|
|
219
240
|
* ```
|
|
220
241
|
*/
|
|
221
|
-
async
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
if (cancelAll) {
|
|
225
|
-
searchParams.append("cancel_all", "true");
|
|
226
|
-
}
|
|
227
|
-
const queryString = searchParams.toString();
|
|
228
|
-
const endpoint = `/api/v1/orders/batch-cancel${queryString ? `?${queryString}` : ""}`;
|
|
229
|
-
const requestBody = {
|
|
230
|
-
order_ids: orderIds,
|
|
231
|
-
};
|
|
232
|
-
return await this.makeAuthenticatedRequest(endpoint, {
|
|
242
|
+
async batchCancelAll(tradingPairId) {
|
|
243
|
+
const endpoint = tradingPairId ? `/api/v1/orders/batch-cancel-all/${tradingPairId}` : "/api/v1/orders/batch-cancel-all";
|
|
244
|
+
return this.makeAuthenticatedRequest(endpoint, {
|
|
233
245
|
method: "POST",
|
|
234
|
-
body: JSON.stringify(requestBody),
|
|
235
246
|
});
|
|
236
247
|
}
|
|
237
248
|
async replaceOrder(orderId, newOrder) {
|
|
249
|
+
// Validate inputs before making API call
|
|
250
|
+
validate(ReplaceOrderSchema, { orderId, newOrder });
|
|
238
251
|
const requestBody = {
|
|
239
252
|
use_master_balance: newOrder.useMasterBalance ?? false,
|
|
240
253
|
};
|
|
@@ -249,6 +262,97 @@ export class TradingAPIImpl extends BaseAPI {
|
|
|
249
262
|
body: JSON.stringify(requestBody),
|
|
250
263
|
});
|
|
251
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Batch creates multiple orders in a single request.
|
|
267
|
+
*
|
|
268
|
+
* Each order is validated and processed through the matching engine.
|
|
269
|
+
* Failed orders do not prevent other orders from being created.
|
|
270
|
+
*
|
|
271
|
+
* @param orders - Array of order parameters to create
|
|
272
|
+
* @returns Promise resolving to BatchCreateOrdersResponse with individual results
|
|
273
|
+
* @throws {APIError} When API communication fails
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```typescript
|
|
277
|
+
* const result = await tradingAPI.batchCreate([
|
|
278
|
+
* {
|
|
279
|
+
* tradingPairId: "123e4567-e89b-12d3-a456-426614174000",
|
|
280
|
+
* orderType: "LIMIT",
|
|
281
|
+
* side: "BUY",
|
|
282
|
+
* price: "35000.00",
|
|
283
|
+
* quantity: "0.5",
|
|
284
|
+
* },
|
|
285
|
+
* {
|
|
286
|
+
* tradingPairId: "123e4567-e89b-12d3-a456-426614174000",
|
|
287
|
+
* orderType: "LIMIT",
|
|
288
|
+
* side: "SELL",
|
|
289
|
+
* price: "36000.00",
|
|
290
|
+
* quantity: "0.3",
|
|
291
|
+
* },
|
|
292
|
+
* ]);
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
async batchCreate(orders) {
|
|
296
|
+
validate(BatchCreateOrdersSchema, { orders });
|
|
297
|
+
const requestBody = {
|
|
298
|
+
orders: orders.map((order) => ({
|
|
299
|
+
trading_pair_id: order.tradingPairId,
|
|
300
|
+
order_type: order.orderType,
|
|
301
|
+
side: order.side,
|
|
302
|
+
price: order.price,
|
|
303
|
+
quantity: order.quantity,
|
|
304
|
+
trading_mode: order.tradingMode || "SPOT",
|
|
305
|
+
slippage_tolerance_bps: order.slippageTolerance !== undefined ? Math.round(order.slippageTolerance * 10000) : undefined,
|
|
306
|
+
use_master_balance: order.useMasterBalance,
|
|
307
|
+
expiration_date: order.expirationDate,
|
|
308
|
+
time_in_force: order.timeInForce,
|
|
309
|
+
})),
|
|
310
|
+
};
|
|
311
|
+
return this.makeAuthenticatedRequest("/api/v1/orders/batch-create", {
|
|
312
|
+
method: "POST",
|
|
313
|
+
body: JSON.stringify(requestBody),
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Batch replaces multiple orders in a single request.
|
|
318
|
+
*
|
|
319
|
+
* Each order is canceled and re-created with new parameters.
|
|
320
|
+
* Failed replacements do not prevent other orders from being replaced.
|
|
321
|
+
*
|
|
322
|
+
* @param orders - Array of order replacement parameters
|
|
323
|
+
* @returns Promise resolving to BatchReplaceOrdersResponse with individual results
|
|
324
|
+
* @throws {APIError} When API communication fails
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* ```typescript
|
|
328
|
+
* const result = await tradingAPI.batchReplace([
|
|
329
|
+
* {
|
|
330
|
+
* orderId: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
|
|
331
|
+
* price: "35500.00",
|
|
332
|
+
* quantity: "0.7",
|
|
333
|
+
* },
|
|
334
|
+
* {
|
|
335
|
+
* orderId: "7c9e6679-7425-40de-944b-e07fc1f90ae7",
|
|
336
|
+
* price: "36500.00",
|
|
337
|
+
* },
|
|
338
|
+
* ]);
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
async batchReplace(orders) {
|
|
342
|
+
validate(BatchReplaceOrdersSchema, { orders });
|
|
343
|
+
const requestBody = {
|
|
344
|
+
orders: orders.map((order) => ({
|
|
345
|
+
order_id: order.orderId,
|
|
346
|
+
price: order.price,
|
|
347
|
+
quantity: order.quantity,
|
|
348
|
+
use_master_balance: order.useMasterBalance,
|
|
349
|
+
})),
|
|
350
|
+
};
|
|
351
|
+
return this.makeAuthenticatedRequest("/api/v1/orders/batch-replace", {
|
|
352
|
+
method: "POST",
|
|
353
|
+
body: JSON.stringify(requestBody),
|
|
354
|
+
});
|
|
355
|
+
}
|
|
252
356
|
/**
|
|
253
357
|
* Gets paginated orders based on query parameters with automatic pagination.
|
|
254
358
|
*
|
|
@@ -279,6 +383,10 @@ export class TradingAPIImpl extends BaseAPI {
|
|
|
279
383
|
* ```
|
|
280
384
|
*/
|
|
281
385
|
async getPaginatedOrders(params) {
|
|
386
|
+
// Validate inputs before making API call
|
|
387
|
+
if (params) {
|
|
388
|
+
validate(GetPaginatedOrdersSchema, params);
|
|
389
|
+
}
|
|
282
390
|
// Set pagination defaults with destructuring and validation
|
|
283
391
|
const { page = 1, page_size = 10, status, trading_pair } = params || {};
|
|
284
392
|
const validPage = page > 0 ? page : 1;
|