@luxfi/dex 1.2.1 → 1.3.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 (62) 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 +7 -0
  11. package/dist/hooks/index.d.ts.map +1 -0
  12. package/dist/hooks/index.js +6 -0
  13. package/dist/hooks/use-quote.d.ts +18 -0
  14. package/dist/hooks/use-quote.d.ts.map +1 -0
  15. package/dist/hooks/use-quote.js +65 -0
  16. package/dist/hooks/use-swap.d.ts +17 -0
  17. package/dist/hooks/use-swap.d.ts.map +1 -0
  18. package/dist/hooks/use-swap.js +75 -0
  19. package/dist/index.d.ts +33 -115
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +41 -225
  22. package/dist/precompile/abis.d.ts +400 -0
  23. package/dist/precompile/abis.d.ts.map +1 -0
  24. package/dist/precompile/abis.js +287 -0
  25. package/dist/precompile/addresses.d.ts +65 -0
  26. package/dist/precompile/addresses.d.ts.map +1 -0
  27. package/dist/precompile/addresses.js +52 -0
  28. package/dist/precompile/index.d.ts +8 -0
  29. package/dist/precompile/index.d.ts.map +1 -0
  30. package/dist/precompile/index.js +7 -0
  31. package/dist/precompile/types.d.ts +76 -0
  32. package/dist/precompile/types.d.ts.map +1 -0
  33. package/dist/precompile/types.js +17 -0
  34. package/dist/router/index.d.ts +7 -0
  35. package/dist/router/index.d.ts.map +1 -0
  36. package/dist/router/index.js +6 -0
  37. package/dist/router/router.d.ts +58 -0
  38. package/dist/router/router.d.ts.map +1 -0
  39. package/dist/router/router.js +272 -0
  40. package/dist/router/types.d.ts +76 -0
  41. package/dist/router/types.d.ts.map +1 -0
  42. package/dist/router/types.js +1 -0
  43. package/package.json +55 -29
  44. package/src/client/clob.ts +256 -0
  45. package/src/client/index.ts +6 -0
  46. package/src/client/types.ts +148 -0
  47. package/src/hooks/index.ts +6 -0
  48. package/src/hooks/use-quote.ts +92 -0
  49. package/src/hooks/use-swap.ts +103 -0
  50. package/src/index.ts +76 -309
  51. package/src/precompile/abis.ts +291 -0
  52. package/src/precompile/addresses.ts +72 -0
  53. package/src/precompile/index.ts +7 -0
  54. package/src/precompile/types.ts +96 -0
  55. package/src/router/index.ts +6 -0
  56. package/src/router/router.ts +338 -0
  57. package/src/router/types.ts +87 -0
  58. package/dist/marketData.d.ts +0 -152
  59. package/dist/marketData.d.ts.map +0 -1
  60. package/dist/marketData.js +0 -253
  61. package/src/marketData.ts +0 -351
  62. package/tsconfig.json +0 -19
package/dist/index.d.ts CHANGED
@@ -1,116 +1,34 @@
1
- import { MarketDataClient, LiquidationMonitor } from './marketData';
2
- export declare enum OrderType {
3
- LIMIT = 0,
4
- MARKET = 1,
5
- STOP = 2,
6
- STOP_LIMIT = 3,
7
- ICEBERG = 4,
8
- PEG = 5
9
- }
10
- export declare enum OrderSide {
11
- BUY = 0,
12
- SELL = 1
13
- }
14
- export declare enum OrderStatus {
15
- OPEN = "open",
16
- PARTIAL = "partial",
17
- FILLED = "filled",
18
- CANCELLED = "cancelled",
19
- REJECTED = "rejected"
20
- }
21
- export declare enum TimeInForce {
22
- GTC = "GTC",
23
- IOC = "IOC",
24
- FOK = "FOK",
25
- DAY = "DAY"
26
- }
27
- export interface Order {
28
- orderId?: number;
29
- symbol: string;
30
- type: OrderType;
31
- side: OrderSide;
32
- price: number;
33
- size: number;
34
- userID?: string;
35
- clientID?: string;
36
- timeInForce?: TimeInForce;
37
- postOnly?: boolean;
38
- reduceOnly?: boolean;
39
- status?: OrderStatus;
40
- filled?: number;
41
- remaining?: number;
42
- timestamp?: number;
43
- }
44
- export interface Trade {
45
- tradeId: number;
46
- symbol: string;
47
- price: number;
48
- size: number;
49
- side: OrderSide;
50
- buyOrderId: number;
51
- sellOrderId: number;
52
- buyerId: string;
53
- sellerId: string;
54
- timestamp: number;
55
- }
56
- export interface OrderBookLevel {
57
- price: number;
58
- size: number;
59
- count?: number;
60
- }
61
- export interface OrderBook {
62
- symbol: string;
63
- bids: OrderBookLevel[];
64
- asks: OrderBookLevel[];
65
- timestamp: number;
66
- }
67
- export interface NodeInfo {
68
- version: string;
69
- network: string;
70
- orderCount: number;
71
- tradeCount: number;
72
- timestamp: number;
73
- }
74
- export interface LXDexConfig {
75
- jsonRpcUrl?: string;
76
- wsUrl?: string;
77
- grpcUrl?: string;
78
- apiKey?: string;
79
- }
80
- export declare class LXDexClient {
81
- private jsonRpc;
82
- private ws;
83
- private wsCallbacks;
84
- private config;
85
- marketData: MarketDataClient;
86
- liquidationMonitor: LiquidationMonitor;
87
- constructor(config?: LXDexConfig);
88
- connect(): Promise<void>;
89
- disconnect(): void;
90
- placeOrder(order: Partial<Order>): Promise<{
91
- orderId: number;
92
- status: string;
93
- }>;
94
- cancelOrder(orderId: number): Promise<{
95
- success: boolean;
96
- message: string;
97
- }>;
98
- getOrder(orderId: number): Promise<Order>;
99
- getOrderBook(symbol?: string, depth?: number): Promise<OrderBook>;
100
- getBestBid(symbol?: string): Promise<number>;
101
- getBestAsk(symbol?: string): Promise<number>;
102
- getTrades(symbol?: string, limit?: number): Promise<Trade[]>;
103
- getInfo(): Promise<NodeInfo>;
104
- ping(): Promise<string>;
105
- subscribe(channel: string, callback: Function): void;
106
- unsubscribe(channel: string, callback?: Function): void;
107
- subscribeOrderBook(symbol: string, callback: (book: OrderBook) => void): void;
108
- subscribeTrades(symbol: string, callback: (trade: Trade) => void): void;
109
- private handleWebSocketMessage;
110
- static formatPrice(price: number, decimals?: number): string;
111
- static formatSize(size: number, decimals?: number): string;
112
- static calculateTotal(price: number, size: number): number;
113
- }
114
- export default LXDexClient;
115
- export * from './marketData';
1
+ /**
2
+ * @luxfi/dex
3
+ *
4
+ * DEX Integration Package
5
+ *
6
+ * Provides routing between:
7
+ * - CLOB (Central Limit Order Book) via ~/work/lux/dex
8
+ * - AMM Precompiles (0x0400-0x0403) for native swaps
9
+ *
10
+ * Architecture:
11
+ * ```
12
+ * ┌────────────────────────────────────────┐
13
+ * │ Omnichain Router │
14
+ * │ Best execution between CLOB & AMM │
15
+ * └─────────────────┬──────────────────────┘
16
+ * │
17
+ * ┌─────────────┴─────────────┐
18
+ * │ │
19
+ * ▼ ▼
20
+ * ┌─────────┐ ┌───────────────┐
21
+ * │ CLOB │ │ AMM Precompile│
22
+ * │ Client │ │ (0x0400) │
23
+ * │ │ │ │
24
+ * │ • Limit │ │ • Swap │
25
+ * │ • HFT │ │ • Liquidity │
26
+ * │ • Perps │ │ • Flash │
27
+ * └─────────┘ └───────────────┘
28
+ * ```
29
+ */
30
+ export { type Currency, type PoolKey, type BalanceDelta, type SwapParams, type ModifyLiquidityParams, type PoolState, type Position as AMMPosition, NATIVE_LUX, sortCurrencies, createPoolKey, POOL_MANAGER_ABI, SWAP_ROUTER_ABI, HOOKS_REGISTRY_ABI, FLASH_LOAN_ABI, DEX_PRECOMPILES, type DexPrecompile, } from './precompile';
31
+ export { type OrderSide, type OrderType, type OrderStatus, type TimeInForce, type OrderRequest, type Order, type OrderBookEntry, type OrderBook, type Trade, type Position as CLOBPosition, type Balance, type ICLOBClient, CLOBClient, createCLOBClient, } from './client';
32
+ export * from './router';
33
+ export * from './hooks';
116
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,QAAQ,IAAI,WAAW,EAC5B,UAAU,EACV,cAAc,EACd,aAAa,EAEb,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,cAAc,EAEd,eAAe,EACf,KAAK,aAAa,GACnB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,QAAQ,IAAI,YAAY,EAC7B,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,UAAU,EACV,gBAAgB,GACjB,MAAM,UAAU,CAAA;AAGjB,cAAc,UAAU,CAAA;AAGxB,cAAc,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -1,225 +1,41 @@
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
+ * DEX Integration Package
5
+ *
6
+ * Provides routing between:
7
+ * - CLOB (Central Limit Order Book) via ~/work/lux/dex
8
+ * - AMM Precompiles (0x0400-0x0403) for native swaps
9
+ *
10
+ * Architecture:
11
+ * ```
12
+ * ┌────────────────────────────────────────┐
13
+ * │ Omnichain Router │
14
+ * │ Best execution between CLOB & AMM │
15
+ * └─────────────────┬──────────────────────┘
16
+ * │
17
+ * ┌─────────────┴─────────────┐
18
+ * │ │
19
+ * ▼ ▼
20
+ * ┌─────────┐ ┌───────────────┐
21
+ * │ CLOB │ │ AMM Precompile│
22
+ * Client │ │ (0x0400)
23
+ * │ │ │ │
24
+ * │ • Limit │ │ • Swap │
25
+ * │ • HFT │ │ • Liquidity │
26
+ * │ • Perps │ │ • Flash │
27
+ * └─────────┘ └───────────────┘
28
+ * ```
29
+ */
30
+ // Precompile types and ABIs (AMM)
31
+ export { NATIVE_LUX, sortCurrencies, createPoolKey,
32
+ // ABIs
33
+ POOL_MANAGER_ABI, SWAP_ROUTER_ABI, HOOKS_REGISTRY_ABI, FLASH_LOAN_ABI,
34
+ // Addresses
35
+ DEX_PRECOMPILES, } from './precompile';
36
+ // CLOB client (exports Position as CLOBPosition to avoid conflict)
37
+ export { CLOBClient, createCLOBClient, } from './client';
38
+ // Omnichain router
39
+ export * from './router';
40
+ // React hooks
41
+ export * from './hooks';