@0xmonaco/core 0.0.0-develop-20260120180031

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 (130) hide show
  1. package/README.md +693 -0
  2. package/dist/api/applications/api.d.ts +44 -0
  3. package/dist/api/applications/api.d.ts.map +1 -0
  4. package/dist/api/applications/api.js +54 -0
  5. package/dist/api/applications/api.js.map +1 -0
  6. package/dist/api/applications/index.d.ts +5 -0
  7. package/dist/api/applications/index.d.ts.map +1 -0
  8. package/dist/api/applications/index.js +5 -0
  9. package/dist/api/applications/index.js.map +1 -0
  10. package/dist/api/auth/api.d.ts +201 -0
  11. package/dist/api/auth/api.d.ts.map +1 -0
  12. package/dist/api/auth/api.js +293 -0
  13. package/dist/api/auth/api.js.map +1 -0
  14. package/dist/api/auth/index.d.ts +5 -0
  15. package/dist/api/auth/index.d.ts.map +1 -0
  16. package/dist/api/auth/index.js +5 -0
  17. package/dist/api/auth/index.js.map +1 -0
  18. package/dist/api/base.d.ts +124 -0
  19. package/dist/api/base.d.ts.map +1 -0
  20. package/dist/api/base.js +284 -0
  21. package/dist/api/base.js.map +1 -0
  22. package/dist/api/fees/api.d.ts +71 -0
  23. package/dist/api/fees/api.d.ts.map +1 -0
  24. package/dist/api/fees/api.js +83 -0
  25. package/dist/api/fees/api.js.map +1 -0
  26. package/dist/api/fees/index.d.ts +7 -0
  27. package/dist/api/fees/index.d.ts.map +1 -0
  28. package/dist/api/fees/index.js +7 -0
  29. package/dist/api/fees/index.js.map +1 -0
  30. package/dist/api/index.d.ts +16 -0
  31. package/dist/api/index.d.ts.map +1 -0
  32. package/dist/api/index.js +16 -0
  33. package/dist/api/index.js.map +1 -0
  34. package/dist/api/market/api.d.ts +14 -0
  35. package/dist/api/market/api.d.ts.map +1 -0
  36. package/dist/api/market/api.js +70 -0
  37. package/dist/api/market/api.js.map +1 -0
  38. package/dist/api/market/index.d.ts +2 -0
  39. package/dist/api/market/index.d.ts.map +1 -0
  40. package/dist/api/market/index.js +2 -0
  41. package/dist/api/market/index.js.map +1 -0
  42. package/dist/api/orderbook/api.d.ts +16 -0
  43. package/dist/api/orderbook/api.d.ts.map +1 -0
  44. package/dist/api/orderbook/api.js +38 -0
  45. package/dist/api/orderbook/api.js.map +1 -0
  46. package/dist/api/orderbook/index.d.ts +2 -0
  47. package/dist/api/orderbook/index.d.ts.map +1 -0
  48. package/dist/api/orderbook/index.js +2 -0
  49. package/dist/api/orderbook/index.js.map +1 -0
  50. package/dist/api/profile/api.d.ts +119 -0
  51. package/dist/api/profile/api.d.ts.map +1 -0
  52. package/dist/api/profile/api.js +162 -0
  53. package/dist/api/profile/api.js.map +1 -0
  54. package/dist/api/profile/index.d.ts +7 -0
  55. package/dist/api/profile/index.d.ts.map +1 -0
  56. package/dist/api/profile/index.js +7 -0
  57. package/dist/api/profile/index.js.map +1 -0
  58. package/dist/api/trades/api.d.ts +45 -0
  59. package/dist/api/trades/api.d.ts.map +1 -0
  60. package/dist/api/trades/api.js +43 -0
  61. package/dist/api/trades/api.js.map +1 -0
  62. package/dist/api/trades/index.d.ts +2 -0
  63. package/dist/api/trades/index.d.ts.map +1 -0
  64. package/dist/api/trades/index.js +2 -0
  65. package/dist/api/trades/index.js.map +1 -0
  66. package/dist/api/trading/api.d.ts +213 -0
  67. package/dist/api/trading/api.d.ts.map +1 -0
  68. package/dist/api/trading/api.js +285 -0
  69. package/dist/api/trading/api.js.map +1 -0
  70. package/dist/api/trading/index.d.ts +5 -0
  71. package/dist/api/trading/index.d.ts.map +1 -0
  72. package/dist/api/trading/index.js +5 -0
  73. package/dist/api/trading/index.js.map +1 -0
  74. package/dist/api/vault/api.d.ts +257 -0
  75. package/dist/api/vault/api.d.ts.map +1 -0
  76. package/dist/api/vault/api.js +526 -0
  77. package/dist/api/vault/api.js.map +1 -0
  78. package/dist/api/vault/index.d.ts +5 -0
  79. package/dist/api/vault/index.d.ts.map +1 -0
  80. package/dist/api/vault/index.js +5 -0
  81. package/dist/api/vault/index.js.map +1 -0
  82. package/dist/api/websocket/index.d.ts +4 -0
  83. package/dist/api/websocket/index.d.ts.map +1 -0
  84. package/dist/api/websocket/index.js +4 -0
  85. package/dist/api/websocket/index.js.map +1 -0
  86. package/dist/api/websocket/types.d.ts +36 -0
  87. package/dist/api/websocket/types.d.ts.map +1 -0
  88. package/dist/api/websocket/types.js +2 -0
  89. package/dist/api/websocket/types.js.map +1 -0
  90. package/dist/api/websocket/utils.d.ts +9 -0
  91. package/dist/api/websocket/utils.d.ts.map +1 -0
  92. package/dist/api/websocket/utils.js +23 -0
  93. package/dist/api/websocket/utils.js.map +1 -0
  94. package/dist/api/websocket/websocket.d.ts +6 -0
  95. package/dist/api/websocket/websocket.d.ts.map +1 -0
  96. package/dist/api/websocket/websocket.js +345 -0
  97. package/dist/api/websocket/websocket.js.map +1 -0
  98. package/dist/errors/errors.d.ts +382 -0
  99. package/dist/errors/errors.d.ts.map +1 -0
  100. package/dist/errors/errors.js +801 -0
  101. package/dist/errors/errors.js.map +1 -0
  102. package/dist/errors/index.d.ts +2 -0
  103. package/dist/errors/index.d.ts.map +1 -0
  104. package/dist/errors/index.js +2 -0
  105. package/dist/errors/index.js.map +1 -0
  106. package/dist/index.d.ts +6 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +6 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/networks/index.d.ts +2 -0
  111. package/dist/networks/index.d.ts.map +1 -0
  112. package/dist/networks/index.js +2 -0
  113. package/dist/networks/index.js.map +1 -0
  114. package/dist/networks/networks.d.ts +15 -0
  115. package/dist/networks/networks.d.ts.map +1 -0
  116. package/dist/networks/networks.js +34 -0
  117. package/dist/networks/networks.js.map +1 -0
  118. package/dist/sdk.d.ts +128 -0
  119. package/dist/sdk.d.ts.map +1 -0
  120. package/dist/sdk.js +272 -0
  121. package/dist/sdk.js.map +1 -0
  122. package/dist/utils/index.d.ts +2 -0
  123. package/dist/utils/index.d.ts.map +1 -0
  124. package/dist/utils/index.js +2 -0
  125. package/dist/utils/index.js.map +1 -0
  126. package/dist/utils/magnitude.d.ts +27 -0
  127. package/dist/utils/magnitude.d.ts.map +1 -0
  128. package/dist/utils/magnitude.js +32 -0
  129. package/dist/utils/magnitude.js.map +1 -0
  130. package/package.json +49 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Convert snake_case to camelCase
3
+ */
4
+ export function toCamelCase(str) {
5
+ return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
6
+ }
7
+ /**
8
+ * Recursively convert object keys from snake_case to camelCase
9
+ */
10
+ export function keysToCamelCase(obj) {
11
+ if (obj === null || obj === undefined)
12
+ return obj;
13
+ if (typeof obj !== "object")
14
+ return obj;
15
+ if (Array.isArray(obj))
16
+ return obj.map((item) => keysToCamelCase(item));
17
+ const result = {};
18
+ for (const [key, value] of Object.entries(obj)) {
19
+ result[toCamelCase(key)] = typeof value === "object" && value !== null ? keysToCamelCase(value) : value;
20
+ }
21
+ return result;
22
+ }
23
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/api/websocket/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAI,GAAY;IAC7C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAQ,CAAC;IACvD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAQ,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAM,CAAC;IAE7E,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1G,CAAC;IACD,OAAO,MAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { MonacoWebSocket, MonacoWebSocketOptions } from "./types";
2
+ /**
3
+ * Create a Monaco WebSocket client
4
+ */
5
+ export declare function createMonacoWebSocket(baseUrl: string, options?: MonacoWebSocketOptions): MonacoWebSocket;
6
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/api/websocket/websocket.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAkB,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAQvF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAuX5G"}
@@ -0,0 +1,345 @@
1
+ import { ALL_MAGNITUDES } from "../../utils";
2
+ import { keysToCamelCase } from "./utils";
3
+ // Connection constants
4
+ const CONNECTION_TIMEOUT = 10000;
5
+ const HEARTBEAT_INTERVAL = 15000;
6
+ const MAX_RECONNECT_DELAY = 30000;
7
+ /**
8
+ * Create a Monaco WebSocket client
9
+ */
10
+ export function createMonacoWebSocket(baseUrl, options = {}) {
11
+ let ws = null;
12
+ let token = options.token;
13
+ let reconnectAttempts = 0;
14
+ let reconnectTimer = null;
15
+ let heartbeatTimer = null;
16
+ let autoReconnect = options.autoReconnect ?? true;
17
+ const maxReconnectAttempts = options.maxReconnectAttempts ?? 5;
18
+ // Handler storage: channel -> handler
19
+ const handlers = new Map();
20
+ const getStatus = () => {
21
+ if (!ws)
22
+ return "disconnected";
23
+ switch (ws.readyState) {
24
+ case WebSocket.CONNECTING:
25
+ return "connecting";
26
+ case WebSocket.OPEN:
27
+ return "connected";
28
+ default:
29
+ return "disconnected";
30
+ }
31
+ };
32
+ const getUrl = () => {
33
+ const url = new URL(baseUrl);
34
+ if (token)
35
+ url.searchParams.set("token", token);
36
+ return url.toString();
37
+ };
38
+ const stopHeartbeat = () => {
39
+ if (heartbeatTimer) {
40
+ clearInterval(heartbeatTimer);
41
+ heartbeatTimer = null;
42
+ }
43
+ };
44
+ const startHeartbeat = () => {
45
+ stopHeartbeat();
46
+ heartbeatTimer = setInterval(() => {
47
+ if (ws?.readyState === WebSocket.OPEN) {
48
+ ws.send(JSON.stringify({ type: "Ping" }));
49
+ }
50
+ }, HEARTBEAT_INTERVAL);
51
+ };
52
+ const stopReconnect = () => {
53
+ if (reconnectTimer) {
54
+ clearTimeout(reconnectTimer);
55
+ reconnectTimer = null;
56
+ }
57
+ };
58
+ const scheduleReconnect = () => {
59
+ if (!autoReconnect || reconnectAttempts >= maxReconnectAttempts) {
60
+ console.error("WebSocket: Max reconnect attempts reached");
61
+ return;
62
+ }
63
+ reconnectAttempts++;
64
+ const delay = Math.min(1000 * 2 ** reconnectAttempts, MAX_RECONNECT_DELAY);
65
+ reconnectTimer = setTimeout(() => connect(), delay);
66
+ };
67
+ const send = (data) => {
68
+ if (ws?.readyState === WebSocket.OPEN) {
69
+ ws.send(JSON.stringify(data));
70
+ }
71
+ };
72
+ const resubscribeAll = () => {
73
+ const channels = Array.from(handlers.keys());
74
+ if (channels.length > 0) {
75
+ send({ type: "Subscribe", channels });
76
+ }
77
+ };
78
+ const routeMessage = (msg) => {
79
+ if (msg.type !== "Event" || !msg.channel)
80
+ return;
81
+ // Find matching handler
82
+ for (const [subscriptionChannel, handler] of handlers) {
83
+ if (msg.channel === subscriptionChannel || msg.channel.startsWith(`${subscriptionChannel}:`)) {
84
+ handler(msg.data);
85
+ return;
86
+ }
87
+ }
88
+ };
89
+ const connect = () => {
90
+ return new Promise((resolve, reject) => {
91
+ // Use WebSocket's built-in readyState instead of manual tracking
92
+ if (ws?.readyState === WebSocket.CONNECTING || ws?.readyState === WebSocket.OPEN) {
93
+ resolve();
94
+ return;
95
+ }
96
+ try {
97
+ ws = new WebSocket(getUrl());
98
+ const timeout = setTimeout(() => {
99
+ if (ws?.readyState === WebSocket.CONNECTING) {
100
+ ws.close();
101
+ reject(new Error("WebSocket connection timeout"));
102
+ }
103
+ }, CONNECTION_TIMEOUT);
104
+ ws.onopen = () => {
105
+ clearTimeout(timeout);
106
+ reconnectAttempts = 0;
107
+ startHeartbeat();
108
+ resubscribeAll();
109
+ options.onStatusChange?.("connected");
110
+ resolve();
111
+ };
112
+ ws.onmessage = (event) => {
113
+ try {
114
+ const msg = JSON.parse(event.data);
115
+ // Handle pong silently
116
+ if (msg.type === "Pong")
117
+ return;
118
+ routeMessage(msg);
119
+ }
120
+ catch (err) {
121
+ console.warn("WebSocket: Failed to parse message", err);
122
+ }
123
+ };
124
+ ws.onclose = (event) => {
125
+ clearTimeout(timeout);
126
+ stopHeartbeat();
127
+ options.onStatusChange?.("disconnected");
128
+ // Reconnect on abnormal close
129
+ if (autoReconnect && event.code !== 1000) {
130
+ scheduleReconnect();
131
+ }
132
+ };
133
+ ws.onerror = () => clearTimeout(timeout);
134
+ }
135
+ catch (err) {
136
+ options.onStatusChange?.("disconnected");
137
+ reject(err);
138
+ }
139
+ });
140
+ };
141
+ const disconnect = () => {
142
+ autoReconnect = false;
143
+ stopReconnect();
144
+ stopHeartbeat();
145
+ handlers.clear();
146
+ ws?.close(1000, "Client disconnect");
147
+ ws = null;
148
+ options.onStatusChange?.("disconnected");
149
+ };
150
+ const subscribe = (channel, handler) => {
151
+ handlers.set(channel, handler);
152
+ if (ws?.readyState === WebSocket.OPEN) {
153
+ send({ type: "Subscribe", channels: [channel] });
154
+ }
155
+ // Return unsubscribe function
156
+ return () => {
157
+ handlers.delete(channel);
158
+ if (ws?.readyState === WebSocket.OPEN) {
159
+ send({ type: "Unsubscribe", channels: [channel] });
160
+ }
161
+ };
162
+ };
163
+ // --- Channel-specific subscription methods ---
164
+ const subscribeOrders = (tradingPairId, tradingMode, handler) => {
165
+ const channel = `orders:${tradingPairId}:${tradingMode}`;
166
+ return subscribe(channel, (rawData) => {
167
+ try {
168
+ const data = rawData;
169
+ const event = {
170
+ orderId: data.order_id,
171
+ eventType: data.event_type,
172
+ timestamp: data.timestamp,
173
+ data: keysToCamelCase(data.data),
174
+ };
175
+ handler(event);
176
+ }
177
+ catch (err) {
178
+ console.error("WebSocket: Error processing order event", err);
179
+ }
180
+ });
181
+ };
182
+ const subscribeOrderbook = (tradingPairId, tradingMode, magnitude, quotationMode, handler) => {
183
+ if (!tradingPairId || !tradingMode || magnitude === undefined || !quotationMode) {
184
+ throw new Error(`orderbook subscription requires all params: tradingPairId="${tradingPairId}", tradingMode="${tradingMode}", magnitude=${magnitude} (valid: ${ALL_MAGNITUDES.join(", ")}), quotationMode="${quotationMode}" (valid: "BASE", "QUOTE")`);
185
+ }
186
+ if (!ALL_MAGNITUDES.includes(magnitude)) {
187
+ throw new Error(`Invalid magnitude: ${magnitude}. Must be one of: ${ALL_MAGNITUDES.join(", ")}`);
188
+ }
189
+ const channel = `orderbook:${tradingPairId}:${tradingMode}:${magnitude}:${quotationMode.toLowerCase()}`;
190
+ return subscribe(channel, (rawData) => {
191
+ try {
192
+ const data = rawData;
193
+ const orderbookData = data.data;
194
+ const event = {
195
+ tradingPairId: data.pair,
196
+ tradingMode: data.trading_mode,
197
+ bids: (orderbookData?.bids || []).map((level) => ({
198
+ price: level.price,
199
+ quantity: level.quantity,
200
+ orderCount: level.order_count || 0,
201
+ })),
202
+ asks: (orderbookData?.asks || []).map((level) => ({
203
+ price: level.price,
204
+ quantity: level.quantity,
205
+ orderCount: level.order_count || 0,
206
+ })),
207
+ bestBid: orderbookData?.best_bid,
208
+ bestAsk: orderbookData?.best_ask,
209
+ bidVolume: orderbookData?.bid_volume || undefined,
210
+ askVolume: orderbookData?.ask_volume || undefined,
211
+ priceChange: orderbookData?.price_change
212
+ ? {
213
+ side: orderbookData.price_change.side,
214
+ oldPrice: orderbookData.price_change.old_price,
215
+ newPrice: orderbookData.price_change.new_price,
216
+ levelRemoved: orderbookData.price_change.level_removed || false,
217
+ levelAdded: orderbookData.price_change.level_added || false,
218
+ }
219
+ : undefined,
220
+ baseDecimals: data.base_decimals || 0,
221
+ quoteDecimals: data.quote_decimals || 0,
222
+ timestamp: data.timestamp || new Date().toISOString(),
223
+ sequence: data.sequence_number || 0,
224
+ };
225
+ handler(event);
226
+ }
227
+ catch (err) {
228
+ console.error("WebSocket: Error processing orderbook event", err);
229
+ }
230
+ });
231
+ };
232
+ const subscribeOHLCV = (tradingPairId, tradingMode, interval, handler) => {
233
+ const channel = `ohlcv:${tradingPairId}:${tradingMode}:${interval}`;
234
+ return subscribe(channel, (rawData) => {
235
+ try {
236
+ const data = rawData;
237
+ const ohlcvData = data.data;
238
+ const event = {
239
+ tradingPairId: data.pair,
240
+ tradingMode: data.trading_mode,
241
+ interval: data.interval,
242
+ candlestick: {
243
+ T: ohlcvData.period_start || 0,
244
+ t: ohlcvData.period_end || 0,
245
+ o: ohlcvData.open || "0",
246
+ h: ohlcvData.high || "0",
247
+ l: ohlcvData.low || "0",
248
+ c: ohlcvData.close || "0",
249
+ v: ohlcvData.volume || "0",
250
+ s: data.pair,
251
+ i: data.interval,
252
+ n: ohlcvData.trades_count || 0,
253
+ },
254
+ };
255
+ handler(event);
256
+ }
257
+ catch (err) {
258
+ console.error("WebSocket: Error processing OHLCV event", err);
259
+ }
260
+ });
261
+ };
262
+ const subscribeTrades = (tradingPairId, handler) => {
263
+ const channel = `trades:${tradingPairId}`;
264
+ return subscribe(channel, (rawData) => {
265
+ try {
266
+ const data = rawData;
267
+ const tradeData = data.data;
268
+ const event = {
269
+ eventType: "trade",
270
+ tradingPairId: data.pair_id,
271
+ tradingMode: data.trading_mode.toUpperCase(),
272
+ data: {
273
+ tradeId: tradeData.trade_id,
274
+ price: tradeData.price,
275
+ quantity: tradeData.quantity,
276
+ makerSide: tradeData.maker_side.toUpperCase(),
277
+ executedAt: tradeData.executed_at,
278
+ },
279
+ };
280
+ handler(event);
281
+ }
282
+ catch (err) {
283
+ console.error("WebSocket: Error processing trade event", err);
284
+ }
285
+ });
286
+ };
287
+ const subscribeMovements = (handler) => {
288
+ // User is identified from the JWT token, so channel is just "movements"
289
+ const channel = "movements";
290
+ return subscribe(channel, (rawData) => {
291
+ try {
292
+ const data = rawData;
293
+ const movementData = data.data;
294
+ const event = {
295
+ eventType: "movement",
296
+ userId: data.user_id,
297
+ data: {
298
+ id: movementData.id,
299
+ entryType: movementData.entry_type,
300
+ transactionType: movementData.transaction_type,
301
+ tokenAddress: movementData.token_address,
302
+ amount: String(movementData.amount),
303
+ amountRaw: movementData.amount_raw,
304
+ balanceBefore: movementData.balance_before != null ? String(movementData.balance_before) : undefined,
305
+ balanceAfter: movementData.balance_after != null ? String(movementData.balance_after) : undefined,
306
+ lockedBefore: movementData.locked_before != null ? String(movementData.locked_before) : undefined,
307
+ lockedAfter: movementData.locked_after != null ? String(movementData.locked_after) : undefined,
308
+ referenceId: movementData.reference_id,
309
+ referenceType: movementData.reference_type,
310
+ description: movementData.description,
311
+ txHash: movementData.tx_hash,
312
+ createdAt: movementData.created_at,
313
+ },
314
+ };
315
+ handler(event);
316
+ }
317
+ catch (err) {
318
+ console.error("WebSocket: Error processing movement event", err);
319
+ }
320
+ });
321
+ };
322
+ return {
323
+ connect,
324
+ disconnect,
325
+ isConnected: () => ws?.readyState === WebSocket.OPEN,
326
+ getStatus,
327
+ setToken: (newToken) => {
328
+ token = newToken;
329
+ // Reconnect to include token in ws URL
330
+ if (ws?.readyState === WebSocket.OPEN || ws?.readyState === WebSocket.CONNECTING) {
331
+ ws.close(1000, "Token updated, reconnecting.");
332
+ ws = null;
333
+ }
334
+ connect().catch((err) => {
335
+ console.warn("WebSocket: Failed to reconnect after token update:", err);
336
+ });
337
+ },
338
+ orders: subscribeOrders,
339
+ orderbook: subscribeOrderbook,
340
+ ohlcv: subscribeOHLCV,
341
+ trades: subscribeTrades,
342
+ movements: subscribeMovements,
343
+ };
344
+ }
345
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/api/websocket/websocket.ts"],"names":[],"mappings":"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"}