@0xmonaco/core 1.0.46 → 1.0.47
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/dist/api/trading/api.js
CHANGED
|
@@ -668,6 +668,10 @@ export class TradingAPIImpl extends BaseAPI {
|
|
|
668
668
|
strategyKey: options.strategyKey,
|
|
669
669
|
useMasterBalance: options.useMasterBalance,
|
|
670
670
|
clientTwapId: options.clientTwapId,
|
|
671
|
+
executionStyle: options.executionStyle,
|
|
672
|
+
triggerPrice: options.triggerPrice,
|
|
673
|
+
triggerDirection: options.triggerDirection,
|
|
674
|
+
conditionalExpiry: options.conditionalExpiry,
|
|
671
675
|
};
|
|
672
676
|
return await this.makeAuthenticatedRequest(perpRoutes.orders.createTwap(), {
|
|
673
677
|
method: "POST",
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type { ResyncHandler, StatusHandler, WebSocketResyncInfo } from "@0xmonaco/types";
|
|
3
|
-
export type MessageHandler<T> = (data: T) => void;
|
|
1
|
+
import type { MonacoWebSocketConfig, SessionCredentials } from "@0xmonaco/types";
|
|
2
|
+
export type { MessageHandler, MonacoWebSocket, ResyncHandler, StatusHandler, WebSocketResyncInfo } from "@0xmonaco/types";
|
|
4
3
|
/**
|
|
5
4
|
* Options for {@link createMonacoWebSocket}. The reconnect/resync knobs and
|
|
6
5
|
* callbacks are shared with the main SDK config via {@link MonacoWebSocketConfig}
|
|
@@ -11,45 +10,3 @@ export interface MonacoWebSocketOptions extends MonacoWebSocketConfig {
|
|
|
11
10
|
/** Session keypair for authenticated channels (orders, balances, etc.) */
|
|
12
11
|
session?: SessionCredentials;
|
|
13
12
|
}
|
|
14
|
-
export interface MonacoWebSocket {
|
|
15
|
-
/** Connect to the WebSocket server */
|
|
16
|
-
connect: () => Promise<void>;
|
|
17
|
-
/** Disconnect from the WebSocket server */
|
|
18
|
-
disconnect: () => void;
|
|
19
|
-
/** Check if currently connected */
|
|
20
|
-
isConnected: () => boolean;
|
|
21
|
-
/** Get current websocket connection status */
|
|
22
|
-
getStatus: () => WebSocketStatus;
|
|
23
|
-
/** Set (or clear) the session keypair used to authenticate the connection */
|
|
24
|
-
setSessionKeypair: (credentials: SessionCredentials | undefined) => void;
|
|
25
|
-
/** Subscribe to order events (requires authentication) */
|
|
26
|
-
orders: (tradingPairId: string, tradingMode: TradingMode, handler: MessageHandler<OrderEvent>) => () => void;
|
|
27
|
-
/** Subscribe to orderbook events (public) */
|
|
28
|
-
orderbook: (tradingPairId: string, tradingMode: TradingMode, magnitude: number, quotationMode: OrderbookQuotationMode, handler: MessageHandler<OrderbookEvent>) => () => void;
|
|
29
|
-
/** Subscribe to OHLCV candlestick events (public) */
|
|
30
|
-
ohlcv: (tradingPairId: string, tradingMode: TradingMode, interval: Interval, handler: MessageHandler<OHLCVEvent>, priceType?: OHLCVPriceType) => () => void;
|
|
31
|
-
/** Subscribe to trade events (public) */
|
|
32
|
-
trades: (tradingPairId: string, handler: MessageHandler<TradeEvent>) => () => void;
|
|
33
|
-
/** Subscribe to user movement events (requires authentication) */
|
|
34
|
-
movements: (handler: MessageHandler<UserMovementEvent>) => () => void;
|
|
35
|
-
/** Subscribe to user order events for all trading pairs (requires authentication) */
|
|
36
|
-
userOrders: (handler: MessageHandler<OrderEvent>) => () => void;
|
|
37
|
-
/** Subscribe to user balance events (requires authentication) */
|
|
38
|
-
balances: (handler: MessageHandler<UserBalanceEvent>) => () => void;
|
|
39
|
-
/** Subscribe to conditional TP/SL lifecycle events (requires authentication) */
|
|
40
|
-
conditionalOrders: (handler: MessageHandler<ConditionalOrderEvent>, tradingPairId?: string) => () => void;
|
|
41
|
-
/** Subscribe to TWAP parent-order lifecycle events (requires authentication) */
|
|
42
|
-
twapOrders: (handler: MessageHandler<TwapOrderEvent>, tradingPairId?: string) => () => void;
|
|
43
|
-
/** Subscribe to position state updates (requires authentication); omit `tradingPairId` for all pairs */
|
|
44
|
-
positions: (handler: MessageHandler<PositionEvent>, tradingPairId?: string) => () => void;
|
|
45
|
-
/** Subscribe to liquidation alerts (requires authentication); omit `tradingPairId` for all pairs */
|
|
46
|
-
liquidations: (handler: MessageHandler<LiquidationEvent>, tradingPairId?: string) => () => void;
|
|
47
|
-
/** Subscribe to account-level margin health updates for the authenticated user (requires authentication) */
|
|
48
|
-
account: (handler: MessageHandler<AccountEvent>) => () => void;
|
|
49
|
-
/** Subscribe to market lifecycle + config changes (public); omit `tradingPairId` for all markets */
|
|
50
|
-
instruments: (handler: MessageHandler<InstrumentEvent>, tradingPairId?: string) => () => void;
|
|
51
|
-
/** Subscribe to per-market statistics for one trading pair (public) */
|
|
52
|
-
marketStats: (tradingPairId: string, handler: MessageHandler<MarketStatsEvent>) => () => void;
|
|
53
|
-
/** Subscribe to the all-markets statistics summary (public) */
|
|
54
|
-
marketStatsAll: (handler: MessageHandler<MarketStatsAllEvent>) => () => void;
|
|
55
|
-
}
|
|
@@ -40,6 +40,19 @@ function readBoolean(source, field) {
|
|
|
40
40
|
}
|
|
41
41
|
return value;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Read a wire sequence counter: a non-negative safe integer. The server
|
|
45
|
+
* serializes Rust `u64` sequence fields as plain JSON numbers, so a negative,
|
|
46
|
+
* fractional, or unsafe (> 2^53 - 1) value is a malformed frame that would
|
|
47
|
+
* corrupt ordering/dedup logic — reject it rather than pass it through.
|
|
48
|
+
*/
|
|
49
|
+
function readSequence(source, field) {
|
|
50
|
+
const value = source[field];
|
|
51
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) {
|
|
52
|
+
throw new Error(`Invalid WebSocket event: ${field} must be a non-negative safe integer`);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
43
56
|
function readOptionalNumber(source, field) {
|
|
44
57
|
const value = source[field];
|
|
45
58
|
if (value === undefined || value === null)
|
|
@@ -194,6 +207,10 @@ function parseAccountEvent(rawData) {
|
|
|
194
207
|
userId: readString(rawData, "user_id"),
|
|
195
208
|
data: {
|
|
196
209
|
marginAccountId: readString(data, "marginAccountId"),
|
|
210
|
+
// Monotonic per-account publish counter (0XM-2498): a plain JSON number on
|
|
211
|
+
// the wire, used to order/dedupe frames across reconnect races. Must be a
|
|
212
|
+
// non-negative safe integer — anything else is a malformed frame.
|
|
213
|
+
sequence: readSequence(data, "sequence"),
|
|
197
214
|
equity: readString(data, "equity"),
|
|
198
215
|
collateral: readString(data, "collateral"),
|
|
199
216
|
freeCollateral: readString(data, "freeCollateral"),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xmonaco/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.47",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"homepage": "https://docs.0xmonaco.com/sdk/typescript",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"viem": "^2.45.2"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@0xmonaco/contracts": "1.0.
|
|
23
|
-
"@0xmonaco/types": "1.0.
|
|
22
|
+
"@0xmonaco/contracts": "1.0.47",
|
|
23
|
+
"@0xmonaco/types": "1.0.47",
|
|
24
24
|
"@noble/curves": "^1.9.1",
|
|
25
25
|
"@noble/hashes": "^1.8.0",
|
|
26
26
|
"http-status-codes": "^2.3.0"
|