@luxfi/dex 1.2.1 → 2.0.0

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 (74) hide show
  1. package/dist/client/clob.d.ts +52 -0
  2. package/dist/client/clob.d.ts.map +1 -0
  3. package/dist/client/clob.js +196 -0
  4. package/dist/client/index.d.ts +7 -0
  5. package/dist/client/index.d.ts.map +1 -0
  6. package/dist/client/index.js +6 -0
  7. package/dist/client/types.d.ts +126 -0
  8. package/dist/client/types.d.ts.map +1 -0
  9. package/dist/client/types.js +5 -0
  10. package/dist/hooks/index.d.ts +22 -0
  11. package/dist/hooks/index.d.ts.map +1 -0
  12. package/dist/hooks/index.js +25 -0
  13. package/dist/hooks/use-lxbook.d.ts +95 -0
  14. package/dist/hooks/use-lxbook.d.ts.map +1 -0
  15. package/dist/hooks/use-lxbook.js +213 -0
  16. package/dist/hooks/use-lxfeed.d.ts +111 -0
  17. package/dist/hooks/use-lxfeed.d.ts.map +1 -0
  18. package/dist/hooks/use-lxfeed.js +152 -0
  19. package/dist/hooks/use-lxvault.d.ts +137 -0
  20. package/dist/hooks/use-lxvault.d.ts.map +1 -0
  21. package/dist/hooks/use-lxvault.js +227 -0
  22. package/dist/hooks/use-quote.d.ts +18 -0
  23. package/dist/hooks/use-quote.d.ts.map +1 -0
  24. package/dist/hooks/use-quote.js +65 -0
  25. package/dist/hooks/use-swap.d.ts +17 -0
  26. package/dist/hooks/use-swap.d.ts.map +1 -0
  27. package/dist/hooks/use-swap.js +75 -0
  28. package/dist/index.d.ts +50 -115
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +72 -225
  31. package/dist/precompile/abis.d.ts +991 -0
  32. package/dist/precompile/abis.d.ts.map +1 -0
  33. package/dist/precompile/abis.js +743 -0
  34. package/dist/precompile/addresses.d.ts +129 -0
  35. package/dist/precompile/addresses.d.ts.map +1 -0
  36. package/dist/precompile/addresses.js +117 -0
  37. package/dist/precompile/index.d.ts +19 -0
  38. package/dist/precompile/index.d.ts.map +1 -0
  39. package/dist/precompile/index.js +18 -0
  40. package/dist/precompile/types.d.ts +246 -0
  41. package/dist/precompile/types.d.ts.map +1 -0
  42. package/dist/precompile/types.js +84 -0
  43. package/dist/router/index.d.ts +7 -0
  44. package/dist/router/index.d.ts.map +1 -0
  45. package/dist/router/index.js +6 -0
  46. package/dist/router/router.d.ts +58 -0
  47. package/dist/router/router.d.ts.map +1 -0
  48. package/dist/router/router.js +272 -0
  49. package/dist/router/types.d.ts +76 -0
  50. package/dist/router/types.d.ts.map +1 -0
  51. package/dist/router/types.js +1 -0
  52. package/package.json +55 -29
  53. package/src/client/clob.ts +256 -0
  54. package/src/client/index.ts +6 -0
  55. package/src/client/types.ts +148 -0
  56. package/src/hooks/index.ts +29 -0
  57. package/src/hooks/use-lxbook.ts +343 -0
  58. package/src/hooks/use-lxfeed.ts +179 -0
  59. package/src/hooks/use-lxvault.ts +318 -0
  60. package/src/hooks/use-quote.ts +92 -0
  61. package/src/hooks/use-swap.ts +103 -0
  62. package/src/index.ts +142 -309
  63. package/src/precompile/abis.ts +755 -0
  64. package/src/precompile/addresses.ts +153 -0
  65. package/src/precompile/index.ts +18 -0
  66. package/src/precompile/types.ts +295 -0
  67. package/src/router/index.ts +6 -0
  68. package/src/router/router.ts +338 -0
  69. package/src/router/types.ts +87 -0
  70. package/dist/marketData.d.ts +0 -152
  71. package/dist/marketData.d.ts.map +0 -1
  72. package/dist/marketData.js +0 -253
  73. package/src/marketData.ts +0 -351
  74. package/tsconfig.json +0 -19
package/dist/index.js CHANGED
@@ -1,225 +1,72 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.LXDexClient = exports.TimeInForce = exports.OrderStatus = exports.OrderSide = exports.OrderType = void 0;
21
- const axios_1 = __importDefault(require("axios"));
22
- const ws_1 = __importDefault(require("ws"));
23
- const marketData_1 = require("./marketData");
24
- // Types
25
- var OrderType;
26
- (function (OrderType) {
27
- OrderType[OrderType["LIMIT"] = 0] = "LIMIT";
28
- OrderType[OrderType["MARKET"] = 1] = "MARKET";
29
- OrderType[OrderType["STOP"] = 2] = "STOP";
30
- OrderType[OrderType["STOP_LIMIT"] = 3] = "STOP_LIMIT";
31
- OrderType[OrderType["ICEBERG"] = 4] = "ICEBERG";
32
- OrderType[OrderType["PEG"] = 5] = "PEG";
33
- })(OrderType || (exports.OrderType = OrderType = {}));
34
- var OrderSide;
35
- (function (OrderSide) {
36
- OrderSide[OrderSide["BUY"] = 0] = "BUY";
37
- OrderSide[OrderSide["SELL"] = 1] = "SELL";
38
- })(OrderSide || (exports.OrderSide = OrderSide = {}));
39
- var OrderStatus;
40
- (function (OrderStatus) {
41
- OrderStatus["OPEN"] = "open";
42
- OrderStatus["PARTIAL"] = "partial";
43
- OrderStatus["FILLED"] = "filled";
44
- OrderStatus["CANCELLED"] = "cancelled";
45
- OrderStatus["REJECTED"] = "rejected";
46
- })(OrderStatus || (exports.OrderStatus = OrderStatus = {}));
47
- var TimeInForce;
48
- (function (TimeInForce) {
49
- TimeInForce["GTC"] = "GTC";
50
- TimeInForce["IOC"] = "IOC";
51
- TimeInForce["FOK"] = "FOK";
52
- TimeInForce["DAY"] = "DAY";
53
- })(TimeInForce || (exports.TimeInForce = TimeInForce = {}));
54
- // JSON-RPC Client
55
- class JSONRPCClient {
56
- constructor(baseURL) {
57
- this.idCounter = 1;
58
- this.axios = axios_1.default.create({
59
- baseURL,
60
- headers: {
61
- 'Content-Type': 'application/json'
62
- }
63
- });
64
- }
65
- async call(method, params = {}) {
66
- const response = await this.axios.post('/rpc', {
67
- jsonrpc: '2.0',
68
- method,
69
- params,
70
- id: this.idCounter++
71
- });
72
- if (response.data.error) {
73
- throw new Error(response.data.error.message);
74
- }
75
- return response.data.result;
76
- }
77
- }
78
- // Main SDK Client
79
- class LXDexClient {
80
- constructor(config = {}) {
81
- this.ws = null;
82
- this.wsCallbacks = new Map();
83
- this.config = {
84
- jsonRpcUrl: config.jsonRpcUrl || 'http://localhost:8080',
85
- wsUrl: config.wsUrl || 'ws://localhost:8081',
86
- ...config
87
- };
88
- this.jsonRpc = new JSONRPCClient(this.config.jsonRpcUrl);
89
- // Initialize sub-clients
90
- this.marketData = new marketData_1.MarketDataClient(this.jsonRpc);
91
- this.liquidationMonitor = new marketData_1.LiquidationMonitor(null);
92
- }
93
- // Connection Management
94
- async connect() {
95
- if (this.ws)
96
- return;
97
- return new Promise((resolve, reject) => {
98
- this.ws = new ws_1.default(this.config.wsUrl);
99
- this.ws.on('open', () => {
100
- console.log('WebSocket connected');
101
- // Set WebSocket for liquidation monitor
102
- this.liquidationMonitor.setWebSocket(this.ws);
103
- resolve();
104
- });
105
- this.ws.on('message', (data) => {
106
- try {
107
- const msg = JSON.parse(data);
108
- this.handleWebSocketMessage(msg);
109
- }
110
- catch (err) {
111
- console.error('Failed to parse WebSocket message:', err);
112
- }
113
- });
114
- this.ws.on('error', (err) => {
115
- console.error('WebSocket error:', err);
116
- reject(err);
117
- });
118
- this.ws.on('close', () => {
119
- console.log('WebSocket disconnected');
120
- this.ws = null;
121
- });
122
- });
123
- }
124
- disconnect() {
125
- if (this.ws) {
126
- this.ws.close();
127
- this.ws = null;
128
- }
129
- }
130
- // Order Management
131
- async placeOrder(order) {
132
- return this.jsonRpc.call('lx_placeOrder', order);
133
- }
134
- async cancelOrder(orderId) {
135
- return this.jsonRpc.call('lx_cancelOrder', { orderId });
136
- }
137
- async getOrder(orderId) {
138
- return this.jsonRpc.call('lx_getOrder', { orderId });
139
- }
140
- // Market Data
141
- async getOrderBook(symbol = 'BTC-USD', depth = 10) {
142
- return this.jsonRpc.call('lx_getOrderBook', { symbol, depth });
143
- }
144
- async getBestBid(symbol = 'BTC-USD') {
145
- const result = await this.jsonRpc.call('lx_getBestBid', { symbol });
146
- return result.price;
147
- }
148
- async getBestAsk(symbol = 'BTC-USD') {
149
- const result = await this.jsonRpc.call('lx_getBestAsk', { symbol });
150
- return result.price;
151
- }
152
- async getTrades(symbol = 'BTC-USD', limit = 100) {
153
- return this.jsonRpc.call('lx_getTrades', { symbol, limit });
154
- }
155
- // Node Information
156
- async getInfo() {
157
- return this.jsonRpc.call('lx_getInfo');
158
- }
159
- async ping() {
160
- return this.jsonRpc.call('lx_ping');
161
- }
162
- // WebSocket Subscriptions
163
- subscribe(channel, callback) {
164
- if (!this.wsCallbacks.has(channel)) {
165
- this.wsCallbacks.set(channel, []);
166
- }
167
- this.wsCallbacks.get(channel).push(callback);
168
- // Send subscription message
169
- if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
170
- this.ws.send(JSON.stringify({
171
- type: 'subscribe',
172
- channel
173
- }));
174
- }
175
- }
176
- unsubscribe(channel, callback) {
177
- if (callback) {
178
- const callbacks = this.wsCallbacks.get(channel);
179
- if (callbacks) {
180
- const index = callbacks.indexOf(callback);
181
- if (index > -1) {
182
- callbacks.splice(index, 1);
183
- }
184
- }
185
- }
186
- else {
187
- this.wsCallbacks.delete(channel);
188
- }
189
- // Send unsubscribe message
190
- if (this.ws && this.ws.readyState === ws_1.default.OPEN) {
191
- this.ws.send(JSON.stringify({
192
- type: 'unsubscribe',
193
- channel
194
- }));
195
- }
196
- }
197
- subscribeOrderBook(symbol, callback) {
198
- this.subscribe(`orderbook:${symbol}`, callback);
199
- }
200
- subscribeTrades(symbol, callback) {
201
- this.subscribe(`trades:${symbol}`, callback);
202
- }
203
- // Private methods
204
- handleWebSocketMessage(msg) {
205
- const { channel, data } = msg;
206
- const callbacks = this.wsCallbacks.get(channel);
207
- if (callbacks) {
208
- callbacks.forEach(cb => cb(data));
209
- }
210
- }
211
- // Utility methods
212
- static formatPrice(price, decimals = 2) {
213
- return price.toFixed(decimals);
214
- }
215
- static formatSize(size, decimals = 8) {
216
- return size.toFixed(decimals);
217
- }
218
- static calculateTotal(price, size) {
219
- return price * size;
220
- }
221
- }
222
- exports.LXDexClient = LXDexClient;
223
- // Export everything
224
- exports.default = LXDexClient;
225
- __exportStar(require("./marketData"), exports);
1
+ /**
2
+ * @luxfi/dex
3
+ *
4
+ * LX Integration Package
5
+ *
6
+ * Native precompile integration for Lux DEX stack:
7
+ * - LXPool (LP-9010): v4-style AMM PoolManager
8
+ * - LXOracle (LP-9011): Multi-source price aggregation
9
+ * - LXRouter (LP-9012): Optimized swap routing
10
+ * - LXHooks (LP-9013): Hook contract registry
11
+ * - LXFlash (LP-9014): Flash loan facility
12
+ * - LXBook (LP-9020): CLOB matching engine
13
+ * - LXVault (LP-9030): Custody and margin engine
14
+ * - LXFeed (LP-9040): Mark price and funding feeds
15
+ *
16
+ * Architecture:
17
+ * ```
18
+ * ┌─────────────────────────────────────────────────────────────┐
19
+ * │ Omnichain Router │
20
+ * │ Best execution between CLOB & AMM │
21
+ * └─────────────────────────┬───────────────────────────────────┘
22
+ * │
23
+ * ┌───────────────────┼───────────────────┐
24
+ * │ │ │
25
+ * ▼ ▼ ▼
26
+ * ┌───────────┐ ┌───────────┐ ┌───────────┐
27
+ * │ LXBook │ │ LXPool │ │ LXVault │
28
+ * (LP-9020) │ │ (LP-9010) │ │ (LP-9030) │
29
+ * │ │ │ │ │ │
30
+ * Orders │ │ • Swaps │ │ • Custody │
31
+ * │ • CLOB │ │ AMM │ │ Margin │
32
+ * Perps │ │ • Flash │ │ • Liq. │
33
+ * └───────────┘ └───────────┘ └───────────┘
34
+ * │ │ │
35
+ * └───────────────────┴───────────────────┘
36
+ * │
37
+ * ┌──────┴──────┐
38
+ * │ LXFeed │
39
+ * │ (LP-9040) │
40
+ * │ │
41
+ * │ • Mark Px │
42
+ * │ • Index Px │
43
+ * │ • Funding │
44
+ * └─────────────┘
45
+ * ```
46
+ */
47
+ // =============================================================================
48
+ // Precompile Types, ABIs, and Addresses
49
+ // =============================================================================
50
+ export { NATIVE_LUX, sortCurrencies, createPoolKey,
51
+ // LXBook Types (LP-9020)
52
+ TIF, OrderKind, GroupType, ActionType,
53
+ // LXVault Types (LP-9030)
54
+ MarginMode, PositionSide,
55
+ // AMM ABIs
56
+ POOL_MANAGER_ABI, SWAP_ROUTER_ABI, HOOKS_REGISTRY_ABI, FLASH_LOAN_ABI,
57
+ // LX* ABIs
58
+ LX_BOOK_ABI, LX_VAULT_ABI, LX_FEED_ABI, LX_ORACLE_ABI,
59
+ // Addresses
60
+ LX, DEX_PRECOMPILES, fromLP, toLP, isDEXPrecompile, isBridgePrecompile, } from './precompile';
61
+ // =============================================================================
62
+ // CLOB Client (External ~/work/lux/dex integration)
63
+ // =============================================================================
64
+ export { CLOBClient, createCLOBClient, } from './client';
65
+ // =============================================================================
66
+ // Omnichain Router
67
+ // =============================================================================
68
+ export * from './router';
69
+ // =============================================================================
70
+ // React Hooks
71
+ // =============================================================================
72
+ export * from './hooks';