@0xmonaco/core 0.2.1 → 0.2.3
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/market/api.d.ts +2 -2
- package/dist/api/market/api.d.ts.map +1 -1
- package/dist/api/market/api.js.map +1 -1
- package/dist/api/trading/api.d.ts +19 -2
- package/dist/api/trading/api.d.ts.map +1 -1
- package/dist/api/trading/api.js +20 -3
- package/dist/api/trading/api.js.map +1 -1
- package/dist/api/vault/api.d.ts +25 -42
- package/dist/api/vault/api.d.ts.map +1 -1
- package/dist/api/vault/api.js +65 -211
- package/dist/api/vault/api.js.map +1 -1
- package/dist/api/websocket/base-ws-client.d.ts +8 -0
- package/dist/api/websocket/base-ws-client.d.ts.map +1 -1
- package/dist/api/websocket/base-ws-client.js +25 -6
- package/dist/api/websocket/base-ws-client.js.map +1 -1
- package/dist/api/websocket/{ohlcv-ws-client.d.ts → clients/ohlcv-ws-client.d.ts} +18 -13
- package/dist/api/websocket/clients/ohlcv-ws-client.d.ts.map +1 -0
- package/dist/api/websocket/clients/ohlcv-ws-client.js +126 -0
- package/dist/api/websocket/clients/ohlcv-ws-client.js.map +1 -0
- package/dist/api/websocket/clients/orderbook-ws-client.d.ts +46 -0
- package/dist/api/websocket/clients/orderbook-ws-client.d.ts.map +1 -0
- package/dist/api/websocket/clients/orderbook-ws-client.js +131 -0
- package/dist/api/websocket/clients/orderbook-ws-client.js.map +1 -0
- package/dist/api/websocket/{orders-ws-client.d.ts → clients/orders-ws-client.d.ts} +17 -13
- package/dist/api/websocket/clients/orders-ws-client.d.ts.map +1 -0
- package/dist/api/websocket/clients/orders-ws-client.js +124 -0
- package/dist/api/websocket/clients/orders-ws-client.js.map +1 -0
- package/dist/api/websocket/index.d.ts +4 -3
- package/dist/api/websocket/index.d.ts.map +1 -1
- package/dist/api/websocket/index.js +4 -3
- package/dist/api/websocket/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/sdk.d.ts +2 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +6 -1
- package/dist/sdk.js.map +1 -1
- package/package.json +5 -5
- package/dist/api/websocket/ohlcv-ws-client.d.ts.map +0 -1
- package/dist/api/websocket/ohlcv-ws-client.js +0 -123
- package/dist/api/websocket/ohlcv-ws-client.js.map +0 -1
- package/dist/api/websocket/orders-ws-client.d.ts.map +0 -1
- package/dist/api/websocket/orders-ws-client.js +0 -131
- package/dist/api/websocket/orders-ws-client.js.map +0 -1
|
@@ -27,10 +27,11 @@ export class BaseWebSocketClientImpl {
|
|
|
27
27
|
async connect() {
|
|
28
28
|
try {
|
|
29
29
|
if (this.ws) {
|
|
30
|
-
this.ws.close(1000,
|
|
30
|
+
this.ws.close(1000, "Reconnecting");
|
|
31
31
|
this.ws = null;
|
|
32
32
|
}
|
|
33
|
-
if (this.connectionStatus === "connecting" ||
|
|
33
|
+
if (this.connectionStatus === "connecting" ||
|
|
34
|
+
this.connectionStatus === "connected") {
|
|
34
35
|
return;
|
|
35
36
|
}
|
|
36
37
|
if (!this.config.accessToken?.trim()) {
|
|
@@ -86,11 +87,12 @@ export class BaseWebSocketClientImpl {
|
|
|
86
87
|
/** Start heartbeat ping/pong */
|
|
87
88
|
startHeartbeat() {
|
|
88
89
|
this.heartbeatInterval = setInterval(() => {
|
|
89
|
-
if (Date.now() - this.lastPong >
|
|
90
|
+
if (Date.now() - this.lastPong >
|
|
91
|
+
BaseWebSocketClientImpl.HEARTBEAT_TIMEOUT) {
|
|
90
92
|
this.ws?.close();
|
|
91
93
|
return;
|
|
92
94
|
}
|
|
93
|
-
this.ws?.send(JSON.stringify({ type:
|
|
95
|
+
this.ws?.send(JSON.stringify({ type: "Ping" }));
|
|
94
96
|
}, BaseWebSocketClientImpl.HEARTBEAT_INTERVAL);
|
|
95
97
|
}
|
|
96
98
|
/** Stop heartbeat interval */
|
|
@@ -109,20 +111,37 @@ export class BaseWebSocketClientImpl {
|
|
|
109
111
|
}
|
|
110
112
|
/** Handle incoming WebSocket messages - can be overridden by subclasses */
|
|
111
113
|
handleMessage(message) {
|
|
112
|
-
if (message.type ===
|
|
114
|
+
if (message.type === "Pong") {
|
|
113
115
|
this.lastPong = Date.now();
|
|
114
116
|
return;
|
|
115
117
|
}
|
|
116
118
|
// Basic message handling - extend in subclasses
|
|
117
119
|
console.log("WebSocket message received:", message);
|
|
118
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Helper method to validate WebSocket event messages using WebSocketChannel enum
|
|
123
|
+
* @param message - The message to validate
|
|
124
|
+
* @param channelType - The expected channel type (WebSocketChannel.Orders, WebSocketChannel.Orderbook, etc.)
|
|
125
|
+
* @returns True if the message is a valid event with the specified channel type
|
|
126
|
+
*/
|
|
127
|
+
isEventMessage(message, channelType) {
|
|
128
|
+
if (!message || typeof message !== "object") {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
return (message.type === "Event" &&
|
|
132
|
+
message.channel &&
|
|
133
|
+
typeof message.channel === "string" &&
|
|
134
|
+
message.channel.startsWith(`${channelType}:`) &&
|
|
135
|
+
message.data &&
|
|
136
|
+
typeof message.data === "object");
|
|
137
|
+
}
|
|
119
138
|
/** Create WebSocket connection with event handlers */
|
|
120
139
|
async createConnection() {
|
|
121
140
|
return new Promise((resolve, reject) => {
|
|
122
141
|
try {
|
|
123
142
|
const url = new URL(this.config.wsUrl);
|
|
124
143
|
if (this.config.accessToken) {
|
|
125
|
-
url.searchParams.set(
|
|
144
|
+
url.searchParams.set("token", this.config.accessToken);
|
|
126
145
|
}
|
|
127
146
|
this.ws = new WebSocket(url.toString());
|
|
128
147
|
const connectionTimeout = setTimeout(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-ws-client.js","sourceRoot":"","sources":["../../../src/api/websocket/base-ws-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-ws-client.js","sourceRoot":"","sources":["../../../src/api/websocket/base-ws-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Specialized WebSocket client for OHLCV (Open, High, Low, Close, Volume) candlestick data events.
|
|
5
5
|
* Extends the base WebSocket client with OHLCV-specific functionality.
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
8
|
-
import { BaseWebSocketClientImpl } from "
|
|
7
|
+
import { OHLCVWebSocketClient, WebSocketConfig, TradingMode, OHLCVEvent, Interval } from "@0xmonaco/types";
|
|
8
|
+
import { BaseWebSocketClientImpl } from "../base-ws-client";
|
|
9
9
|
/**
|
|
10
10
|
* OHLCV-specific WebSocket client implementation
|
|
11
11
|
*/
|
|
@@ -15,34 +15,39 @@ export declare class OHLCVWebSocketClientImpl extends BaseWebSocketClientImpl im
|
|
|
15
15
|
/**
|
|
16
16
|
* Subscribe to OHLCV (candlestick) updates for a specific trading pair, mode, and interval.
|
|
17
17
|
*
|
|
18
|
-
* @param symbol - Trading pair symbol (e.g., "BTC
|
|
19
|
-
* @param tradingMode - Trading mode (
|
|
18
|
+
* @param symbol - Trading pair symbol (e.g., "BTC/USDC")
|
|
19
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
20
20
|
* @param interval - Candlestick interval (e.g., "1m", "5m", "1h", "1d")
|
|
21
21
|
* @param callback - Function to handle incoming OHLCV events
|
|
22
22
|
*
|
|
23
23
|
* @example
|
|
24
24
|
* ```typescript
|
|
25
|
-
* ohlcvWS.subscribeToOHLCV("BTC
|
|
26
|
-
* console.log("New OHLCV data:", event.candlestick);
|
|
25
|
+
* ohlcvWS.subscribeToOHLCV("BTC/USDC", TradingMode.SPOT, "1m", (event) => {
|
|
26
|
+
* console.log("New OHLCV data:", event.candlestick.o, event.candlestick.c);
|
|
27
27
|
* });
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
|
-
subscribeToOHLCV(symbol: string, tradingMode:
|
|
30
|
+
subscribeToOHLCV(symbol: string, tradingMode: TradingMode, interval: Interval, callback: (event: OHLCVEvent) => void): void;
|
|
31
31
|
/**
|
|
32
32
|
* Unsubscribe from OHLCV (candlestick) updates.
|
|
33
33
|
*
|
|
34
|
-
* @param symbol - Trading pair symbol (e.g., "BTC
|
|
35
|
-
* @param tradingMode - Trading mode (
|
|
34
|
+
* @param symbol - Trading pair symbol (e.g., "BTC/USDC")
|
|
35
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
36
36
|
* @param interval - Candlestick interval (e.g., "1m", "5m", "1h", "1d")
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* ohlcvWS.unsubscribeFromOHLCV("BTC/USDC", TradingMode.SPOT, "1m");
|
|
41
|
+
* ```
|
|
37
42
|
*/
|
|
38
|
-
unsubscribeFromOHLCV(symbol: string, tradingMode:
|
|
39
|
-
/**
|
|
43
|
+
unsubscribeFromOHLCV(symbol: string, tradingMode: TradingMode, interval: Interval): void;
|
|
44
|
+
/** Override message handling to process OHLCV-specific events */
|
|
40
45
|
protected handleMessage(message: any): void;
|
|
41
46
|
/** Check if message is an OHLCV event from the backend */
|
|
42
47
|
private isOHLCVEvent;
|
|
43
48
|
/** Handle OHLCV-specific events from the backend */
|
|
44
49
|
private handleOHLCVEvent;
|
|
45
|
-
/** Clean up
|
|
46
|
-
|
|
50
|
+
/** Clean up resources when disconnecting */
|
|
51
|
+
protected cleanup(): void;
|
|
47
52
|
}
|
|
48
53
|
//# sourceMappingURL=ohlcv-ws-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlcv-ws-client.d.ts","sourceRoot":"","sources":["../../../../src/api/websocket/clients/ohlcv-ws-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,EACpB,eAAe,EAEf,WAAW,EACX,UAAU,EACV,QAAQ,EACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,qBAAa,wBACX,SAAQ,uBACR,YAAW,oBAAoB;IAG/B,OAAO,CAAC,aAAa,CAAkD;gBAE3D,MAAM,EAAE,eAAe;IAInC;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GACpC,IAAI;IAaP;;;;;;;;;;;OAWG;IACH,oBAAoB,CAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,GACjB,IAAI;IAaP,iEAAiE;IACjE,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAS3C,0DAA0D;IAC1D,OAAO,CAAC,YAAY;IAIpB,oDAAoD;IACpD,OAAO,CAAC,gBAAgB;IAkDxB,4CAA4C;IAC5C,SAAS,CAAC,OAAO,IAAI,IAAI;CAG1B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OHLCV WebSocket Client Implementation
|
|
3
|
+
*
|
|
4
|
+
* Specialized WebSocket client for OHLCV (Open, High, Low, Close, Volume) candlestick data events.
|
|
5
|
+
* Extends the base WebSocket client with OHLCV-specific functionality.
|
|
6
|
+
*/
|
|
7
|
+
import { WebSocketChannel, } from "@0xmonaco/types";
|
|
8
|
+
import { BaseWebSocketClientImpl } from "../base-ws-client";
|
|
9
|
+
/**
|
|
10
|
+
* OHLCV-specific WebSocket client implementation
|
|
11
|
+
*/
|
|
12
|
+
export class OHLCVWebSocketClientImpl extends BaseWebSocketClientImpl {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
super(config);
|
|
15
|
+
// Map to store OHLCV event handlers by subscription key
|
|
16
|
+
this.ohlcvHandlers = new Map();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Subscribe to OHLCV (candlestick) updates for a specific trading pair, mode, and interval.
|
|
20
|
+
*
|
|
21
|
+
* @param symbol - Trading pair symbol (e.g., "BTC/USDC")
|
|
22
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
23
|
+
* @param interval - Candlestick interval (e.g., "1m", "5m", "1h", "1d")
|
|
24
|
+
* @param callback - Function to handle incoming OHLCV events
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* ohlcvWS.subscribeToOHLCV("BTC/USDC", TradingMode.SPOT, "1m", (event) => {
|
|
29
|
+
* console.log("New OHLCV data:", event.candlestick.o, event.candlestick.c);
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
subscribeToOHLCV(symbol, tradingMode, interval, callback) {
|
|
34
|
+
const channel = `ohlcv:${symbol}:${tradingMode}:${interval}`;
|
|
35
|
+
const subscriptionKey = `${symbol.toUpperCase()}-${tradingMode.toUpperCase()}-${interval.toLowerCase()}`;
|
|
36
|
+
this.ohlcvHandlers.set(subscriptionKey, callback);
|
|
37
|
+
// Send subscription message using the backend's channel format
|
|
38
|
+
this.send({
|
|
39
|
+
type: "Subscribe",
|
|
40
|
+
channels: [channel],
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Unsubscribe from OHLCV (candlestick) updates.
|
|
45
|
+
*
|
|
46
|
+
* @param symbol - Trading pair symbol (e.g., "BTC/USDC")
|
|
47
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
48
|
+
* @param interval - Candlestick interval (e.g., "1m", "5m", "1h", "1d")
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* ohlcvWS.unsubscribeFromOHLCV("BTC/USDC", TradingMode.SPOT, "1m");
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
unsubscribeFromOHLCV(symbol, tradingMode, interval) {
|
|
56
|
+
const channel = `ohlcv:${symbol}:${tradingMode}:${interval}`;
|
|
57
|
+
const subscriptionKey = `${symbol.toUpperCase()}-${tradingMode.toUpperCase()}-${interval.toLowerCase()}`;
|
|
58
|
+
this.ohlcvHandlers.delete(subscriptionKey);
|
|
59
|
+
// Send unsubscription message
|
|
60
|
+
this.send({
|
|
61
|
+
type: "Unsubscribe",
|
|
62
|
+
channels: [channel],
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/** Override message handling to process OHLCV-specific events */
|
|
66
|
+
handleMessage(message) {
|
|
67
|
+
super.handleMessage(message);
|
|
68
|
+
// Handle OHLCV-specific Event messages
|
|
69
|
+
if (this.isOHLCVEvent(message)) {
|
|
70
|
+
this.handleOHLCVEvent(message);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Check if message is an OHLCV event from the backend */
|
|
74
|
+
isOHLCVEvent(message) {
|
|
75
|
+
return this.isEventMessage(message, WebSocketChannel.OHLCV);
|
|
76
|
+
}
|
|
77
|
+
/** Handle OHLCV-specific events from the backend */
|
|
78
|
+
handleOHLCVEvent(event) {
|
|
79
|
+
try {
|
|
80
|
+
const backendEvent = event.data; // Parent (has pair, interval, trading_mode)
|
|
81
|
+
const ohlcvData = backendEvent.data; // Nested (has open, high, low, close)
|
|
82
|
+
const symbol = backendEvent.pair;
|
|
83
|
+
const tradingMode = backendEvent.trading_mode;
|
|
84
|
+
const interval = backendEvent.interval;
|
|
85
|
+
if (!symbol || !tradingMode || !interval) {
|
|
86
|
+
console.warn("Missing required OHLCV event data:", backendEvent);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const subscriptionKey = `${symbol.toUpperCase()}-${tradingMode.toUpperCase()}-${interval.toLowerCase()}`;
|
|
90
|
+
// Find the appropriate handler
|
|
91
|
+
const handler = this.ohlcvHandlers.get(subscriptionKey);
|
|
92
|
+
if (handler) {
|
|
93
|
+
// WebSocket events should match the same structure as REST API responses
|
|
94
|
+
const ohlcvEvent = {
|
|
95
|
+
symbol: symbol,
|
|
96
|
+
tradingMode: tradingMode,
|
|
97
|
+
interval: interval,
|
|
98
|
+
candlestick: {
|
|
99
|
+
T: ohlcvData.T || 0, // Candle start time (ms)
|
|
100
|
+
t: ohlcvData.t || 0, // Last trade time (ms)
|
|
101
|
+
o: ohlcvData.o || "0", // Open price
|
|
102
|
+
h: ohlcvData.h || "0", // High price
|
|
103
|
+
l: ohlcvData.l || "0", // Low price
|
|
104
|
+
c: ohlcvData.c || "0", // Close price
|
|
105
|
+
v: ohlcvData.v || "0", // Volume (base token)
|
|
106
|
+
s: symbol, // Symbol from backend data
|
|
107
|
+
i: interval, // Interval from backend data
|
|
108
|
+
n: ohlcvData.n || 0, // Number of trades
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
handler(ohlcvEvent);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.warn(`No handler found for OHLCV event: ${subscriptionKey}`, event);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error("Error handling OHLCV event:", error, event);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Clean up resources when disconnecting */
|
|
122
|
+
cleanup() {
|
|
123
|
+
this.ohlcvHandlers.clear();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=ohlcv-ws-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlcv-ws-client.js","sourceRoot":"","sources":["../../../../src/api/websocket/clients/ohlcv-ws-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAGL,gBAAgB,GAIjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,wBACX,SAAQ,uBAAuB;IAM/B,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QAJhB,wDAAwD;QAChD,kBAAa,GAAG,IAAI,GAAG,EAAuC,CAAC;IAIvE,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CACd,MAAc,EACd,WAAwB,EACxB,QAAkB,EAClB,QAAqC;QAErC,MAAM,OAAO,GAAG,SAAS,MAAM,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAEzG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAElD,+DAA+D;QAC/D,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,oBAAoB,CAClB,MAAc,EACd,WAAwB,EACxB,QAAkB;QAElB,MAAM,OAAO,GAAG,SAAS,MAAM,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC7D,MAAM,eAAe,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAEzG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAE3C,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACvD,aAAa,CAAC,OAAY;QAClC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7B,uCAAuC;QACvC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,0DAA0D;IAClD,YAAY,CAAC,OAAY;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,oDAAoD;IAC5C,gBAAgB,CAAC,KAAU;QACjC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAM,4CAA4C;YAClF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAE,sCAAsC;YAE5E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;YACjC,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC;YAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;YAEvC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,YAAY,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,MAAM,eAAe,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAEzG,+BAA+B;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,yEAAyE;gBACzE,MAAM,UAAU,GAAe;oBAC7B,MAAM,EAAE,MAAM;oBACd,WAAW,EAAE,WAA0B;oBACvC,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE;wBACX,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,yBAAyB;wBAC9C,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,uBAAuB;wBAC5C,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE,aAAa;wBACpC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE,aAAa;wBACpC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE,YAAY;wBACnC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE,cAAc;wBACrC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE,sBAAsB;wBAC7C,CAAC,EAAE,MAAM,EAAE,2BAA2B;wBACtC,CAAC,EAAE,QAAQ,EAAE,6BAA6B;wBAC1C,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,mBAAmB;qBACzC;iBACF,CAAC;gBAEF,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,qCAAqC,eAAe,EAAE,EACtD,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,4CAA4C;IAClC,OAAO;QACf,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orderbook WebSocket Client Implementation
|
|
3
|
+
*
|
|
4
|
+
* Specialized WebSocket client for orderbook-related events and operations.
|
|
5
|
+
* Extends the base WebSocket client with orderbook-specific functionality.
|
|
6
|
+
*/
|
|
7
|
+
import { OrderbookWebSocketClient, WebSocketConfig, TradingMode, OrderbookEvent } from "@0xmonaco/types";
|
|
8
|
+
import { BaseWebSocketClientImpl } from "../base-ws-client";
|
|
9
|
+
/**
|
|
10
|
+
* Orderbook-specific WebSocket client implementation
|
|
11
|
+
*/
|
|
12
|
+
export declare class OrderbookWebSocketClientImpl extends BaseWebSocketClientImpl implements OrderbookWebSocketClient {
|
|
13
|
+
private orderbookHandlers;
|
|
14
|
+
constructor(config: WebSocketConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Subscribe to orderbook events for a specific market and trading mode.
|
|
17
|
+
*
|
|
18
|
+
* @param market - Trading pair symbol (e.g., "BTC/USDC")
|
|
19
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
20
|
+
* @param callback - Function to handle incoming orderbook events
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* orderbookWS.subscribeToOrderbookEvents("BTC/USDC", TradingMode.SPOT, (event) => {
|
|
25
|
+
* console.log("Orderbook update:", event.bids.length, "bids", event.asks.length, "asks");
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
subscribeToOrderbookEvents(market: string, tradingMode: TradingMode, callback: (event: OrderbookEvent) => void): void;
|
|
30
|
+
/**
|
|
31
|
+
* Unsubscribe from orderbook events for a specific market and trading mode.
|
|
32
|
+
*
|
|
33
|
+
* @param market - Trading pair symbol (e.g., "BTC/USDC")
|
|
34
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
35
|
+
*/
|
|
36
|
+
unsubscribeFromOrderbookEvents(market: string, tradingMode: TradingMode): void;
|
|
37
|
+
/** Handle incoming WebSocket messages with orderbook-specific logic */
|
|
38
|
+
protected handleMessage(message: any): void;
|
|
39
|
+
/** Check if message is an orderbook event from the backend */
|
|
40
|
+
private isOrderbookEvent;
|
|
41
|
+
/** Handle orderbook-specific events from the backend */
|
|
42
|
+
private handleOrderbookEvent;
|
|
43
|
+
/** Clean up resources when disconnecting */
|
|
44
|
+
protected cleanup(): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=orderbook-ws-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderbook-ws-client.d.ts","sourceRoot":"","sources":["../../../../src/api/websocket/clients/orderbook-ws-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,wBAAwB,EACxB,eAAe,EAEf,WAAW,EACX,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,qBAAa,4BACX,SAAQ,uBACR,YAAW,wBAAwB;IAEnC,OAAO,CAAC,iBAAiB,CACb;gBAEA,MAAM,EAAE,eAAe;IAInC;;;;;;;;;;;;;OAaG;IACH,0BAA0B,CACxB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GACxC,IAAI;IAaP;;;;;OAKG;IACH,8BAA8B,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACvB,IAAI;IAaP,uEAAuE;IACvE,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAU3C,8DAA8D;IAC9D,OAAO,CAAC,gBAAgB;IAIxB,wDAAwD;IACxD,OAAO,CAAC,oBAAoB;IAgE5B,4CAA4C;IAC5C,SAAS,CAAC,OAAO,IAAI,IAAI;CAG1B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orderbook WebSocket Client Implementation
|
|
3
|
+
*
|
|
4
|
+
* Specialized WebSocket client for orderbook-related events and operations.
|
|
5
|
+
* Extends the base WebSocket client with orderbook-specific functionality.
|
|
6
|
+
*/
|
|
7
|
+
import { WebSocketChannel, } from "@0xmonaco/types";
|
|
8
|
+
import { BaseWebSocketClientImpl } from "../base-ws-client";
|
|
9
|
+
/**
|
|
10
|
+
* Orderbook-specific WebSocket client implementation
|
|
11
|
+
*/
|
|
12
|
+
export class OrderbookWebSocketClientImpl extends BaseWebSocketClientImpl {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
super(config);
|
|
15
|
+
this.orderbookHandlers = new Map();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to orderbook events for a specific market and trading mode.
|
|
19
|
+
*
|
|
20
|
+
* @param market - Trading pair symbol (e.g., "BTC/USDC")
|
|
21
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
22
|
+
* @param callback - Function to handle incoming orderbook events
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* orderbookWS.subscribeToOrderbookEvents("BTC/USDC", TradingMode.SPOT, (event) => {
|
|
27
|
+
* console.log("Orderbook update:", event.bids.length, "bids", event.asks.length, "asks");
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
subscribeToOrderbookEvents(market, tradingMode, callback) {
|
|
32
|
+
const channel = `orderbook:${market}:${tradingMode}`;
|
|
33
|
+
const subscriptionKey = `${market.toUpperCase()}-${tradingMode.toUpperCase()}`;
|
|
34
|
+
this.orderbookHandlers.set(subscriptionKey, callback);
|
|
35
|
+
// Send subscription message using backend's channel format
|
|
36
|
+
this.send({
|
|
37
|
+
type: "Subscribe",
|
|
38
|
+
channels: [channel],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Unsubscribe from orderbook events for a specific market and trading mode.
|
|
43
|
+
*
|
|
44
|
+
* @param market - Trading pair symbol (e.g., "BTC/USDC")
|
|
45
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
46
|
+
*/
|
|
47
|
+
unsubscribeFromOrderbookEvents(market, tradingMode) {
|
|
48
|
+
const channel = `orderbook:${market}:${tradingMode}`;
|
|
49
|
+
const subscriptionKey = `${market.toUpperCase()}-${tradingMode.toUpperCase()}`;
|
|
50
|
+
this.orderbookHandlers.delete(subscriptionKey);
|
|
51
|
+
// Send unsubscription message
|
|
52
|
+
this.send({
|
|
53
|
+
type: "Unsubscribe",
|
|
54
|
+
channels: [channel],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** Handle incoming WebSocket messages with orderbook-specific logic */
|
|
58
|
+
handleMessage(message) {
|
|
59
|
+
// Handle base messages first (PONG, etc.)
|
|
60
|
+
super.handleMessage(message);
|
|
61
|
+
// Handle orderbook-specific Event messages
|
|
62
|
+
if (this.isOrderbookEvent(message)) {
|
|
63
|
+
this.handleOrderbookEvent(message);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Check if message is an orderbook event from the backend */
|
|
67
|
+
isOrderbookEvent(message) {
|
|
68
|
+
return this.isEventMessage(message, WebSocketChannel.Orderbook);
|
|
69
|
+
}
|
|
70
|
+
/** Handle orderbook-specific events from the backend */
|
|
71
|
+
handleOrderbookEvent(event) {
|
|
72
|
+
try {
|
|
73
|
+
const backendEvent = event.data; // Parent (has pair, trading_mode)
|
|
74
|
+
const orderbookData = backendEvent.data; // Nested (has bids, asks, etc.)
|
|
75
|
+
const symbol = backendEvent.pair;
|
|
76
|
+
const tradingMode = backendEvent.trading_mode;
|
|
77
|
+
if (!symbol || !tradingMode) {
|
|
78
|
+
console.warn("Missing required orderbook event data:", backendEvent);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const subscriptionKey = `${symbol.toUpperCase()}-${tradingMode.toUpperCase()}`;
|
|
82
|
+
const handler = this.orderbookHandlers.get(subscriptionKey);
|
|
83
|
+
if (handler) {
|
|
84
|
+
// Backend orderbook event structure (matching matching_engine::types::OrderbookUpdateEvent)
|
|
85
|
+
const transformedEvent = {
|
|
86
|
+
symbol: symbol,
|
|
87
|
+
tradingMode: tradingMode,
|
|
88
|
+
bids: (orderbookData?.bids || []).map((level) => ({
|
|
89
|
+
price: level.price,
|
|
90
|
+
quantity: level.quantity,
|
|
91
|
+
orderCount: level.order_count || 0,
|
|
92
|
+
})),
|
|
93
|
+
asks: (orderbookData?.asks || []).map((level) => ({
|
|
94
|
+
price: level.price,
|
|
95
|
+
quantity: level.quantity,
|
|
96
|
+
orderCount: level.order_count || 0,
|
|
97
|
+
})),
|
|
98
|
+
bestBid: orderbookData?.best_bid,
|
|
99
|
+
bestAsk: orderbookData?.best_ask,
|
|
100
|
+
bidVolume: orderbookData?.bid_volume || "0",
|
|
101
|
+
askVolume: orderbookData?.ask_volume || "0",
|
|
102
|
+
priceChange: orderbookData?.price_change
|
|
103
|
+
? {
|
|
104
|
+
side: orderbookData.data.price_change.side,
|
|
105
|
+
oldPrice: orderbookData.data.price_change.old_price,
|
|
106
|
+
newPrice: orderbookData.data.price_change.new_price,
|
|
107
|
+
levelRemoved: orderbookData.data.price_change.level_removed || false,
|
|
108
|
+
levelAdded: orderbookData.data.price_change.level_added || false,
|
|
109
|
+
}
|
|
110
|
+
: undefined,
|
|
111
|
+
baseDecimals: backendEvent.base_decimals || 0,
|
|
112
|
+
quoteDecimals: backendEvent.quote_decimals || 0,
|
|
113
|
+
timestamp: backendEvent.timestamp || new Date().toISOString(),
|
|
114
|
+
sequence: backendEvent.sequence_number || 0,
|
|
115
|
+
};
|
|
116
|
+
handler(transformedEvent);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.debug(`No handler registered for orderbook subscription: ${subscriptionKey}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error("Error handling orderbook event:", error, event);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Clean up resources when disconnecting */
|
|
127
|
+
cleanup() {
|
|
128
|
+
this.orderbookHandlers.clear();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=orderbook-ws-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderbook-ws-client.js","sourceRoot":"","sources":["../../../../src/api/websocket/clients/orderbook-ws-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
* Specialized WebSocket client for order-related events and operations.
|
|
5
5
|
* Extends the base WebSocket client with order-specific functionality.
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
8
|
-
import { BaseWebSocketClientImpl } from "
|
|
9
|
-
import type { OrderEvent } from "@0xmonaco/types";
|
|
7
|
+
import { OrdersWebSocketClient, WebSocketConfig, TradingMode, OrderEvent } from "@0xmonaco/types";
|
|
8
|
+
import { BaseWebSocketClientImpl } from "../base-ws-client";
|
|
10
9
|
/**
|
|
11
10
|
* Orders-specific WebSocket client implementation
|
|
12
11
|
*/
|
|
@@ -16,32 +15,37 @@ export declare class OrdersWebSocketClientImpl extends BaseWebSocketClientImpl i
|
|
|
16
15
|
/**
|
|
17
16
|
* Subscribe to order events for a specific market and trading mode.
|
|
18
17
|
*
|
|
19
|
-
* @param market - Trading pair symbol (e.g., "BTC
|
|
20
|
-
* @param tradingMode - Trading mode (
|
|
18
|
+
* @param market - Trading pair symbol (e.g., "BTC/USDC")
|
|
19
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
21
20
|
* @param callback - Function to handle incoming order events
|
|
22
21
|
*
|
|
23
22
|
* @example
|
|
24
23
|
* ```typescript
|
|
25
|
-
* ordersWS.subscribeToOrderEvents("BTC
|
|
24
|
+
* ordersWS.subscribeToOrderEvents("BTC/USDC", TradingMode.SPOT, (event) => {
|
|
26
25
|
* console.log("Order event:", event.eventType);
|
|
27
26
|
* });
|
|
28
27
|
* ```
|
|
29
28
|
*/
|
|
30
|
-
subscribeToOrderEvents(market: string, tradingMode:
|
|
29
|
+
subscribeToOrderEvents(market: string, tradingMode: TradingMode, callback: (event: OrderEvent) => void): void;
|
|
31
30
|
/**
|
|
32
31
|
* Unsubscribe from order events for a specific market and trading mode.
|
|
33
32
|
*
|
|
34
|
-
* @param market - Trading pair symbol (e.g., "BTC
|
|
35
|
-
* @param tradingMode - Trading mode (
|
|
33
|
+
* @param market - Trading pair symbol (e.g., "BTC/USDC")
|
|
34
|
+
* @param tradingMode - Trading mode (TradingMode.SPOT or TradingMode.MARGIN)
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* ordersWS.unsubscribeFromOrderEvents("BTC/USDC", TradingMode.SPOT);
|
|
39
|
+
* ```
|
|
36
40
|
*/
|
|
37
|
-
unsubscribeFromOrderEvents(market: string, tradingMode:
|
|
38
|
-
/**
|
|
41
|
+
unsubscribeFromOrderEvents(market: string, tradingMode: TradingMode): void;
|
|
42
|
+
/** Override message handling to process order-specific events */
|
|
39
43
|
protected handleMessage(message: any): void;
|
|
40
44
|
/** Check if message is an order event from the backend */
|
|
41
45
|
private isOrderEvent;
|
|
42
46
|
/** Handle order-specific events from the backend */
|
|
43
47
|
private handleOrderEvent;
|
|
44
|
-
/** Clean up
|
|
45
|
-
|
|
48
|
+
/** Clean up resources when disconnecting */
|
|
49
|
+
protected cleanup(): void;
|
|
46
50
|
}
|
|
47
51
|
//# sourceMappingURL=orders-ws-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orders-ws-client.d.ts","sourceRoot":"","sources":["../../../../src/api/websocket/clients/orders-ws-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,qBAAqB,EACrB,eAAe,EAEf,WAAW,EACX,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,qBAAa,yBACX,SAAQ,uBACR,YAAW,qBAAqB;IAGhC,OAAO,CAAC,aAAa,CAAkD;gBAE3D,MAAM,EAAE,eAAe;IAInC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GACpC,IAAI;IAaP;;;;;;;;;;OAUG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAa1E,iEAAiE;IACjE,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAS3C,0DAA0D;IAC1D,OAAO,CAAC,YAAY;IAIpB,oDAAoD;IACpD,OAAO,CAAC,gBAAgB;IAkDxB,4CAA4C;IAC5C,SAAS,CAAC,OAAO,IAAI,IAAI;CAG1B"}
|