lighter-ts-sdk 1.0.0 → 1.0.2

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 (89) hide show
  1. package/README.md +62 -49
  2. package/dist/api/transaction-api.d.ts +5 -1
  3. package/dist/api/transaction-api.d.ts.map +1 -1
  4. package/dist/api/transaction-api.js.map +1 -1
  5. package/dist/api/ws-order-client.d.ts +82 -0
  6. package/dist/api/ws-order-client.d.ts.map +1 -0
  7. package/dist/api/ws-order-client.js +281 -0
  8. package/dist/api/ws-order-client.js.map +1 -0
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/signer/signer-client.d.ts.map +1 -1
  12. package/dist/signer/signer-client.js +5 -3
  13. package/dist/signer/signer-client.js.map +1 -1
  14. package/dist/signer/wasm-signer-client.d.ts +104 -10
  15. package/dist/signer/wasm-signer-client.d.ts.map +1 -1
  16. package/dist/signer/wasm-signer-client.js +643 -356
  17. package/dist/signer/wasm-signer-client.js.map +1 -1
  18. package/dist/utils/advanced-cache.d.ts +66 -0
  19. package/dist/utils/advanced-cache.d.ts.map +1 -0
  20. package/dist/utils/advanced-cache.js +204 -0
  21. package/dist/utils/advanced-cache.js.map +1 -0
  22. package/dist/utils/exceptions.d.ts +24 -0
  23. package/dist/utils/exceptions.d.ts.map +1 -1
  24. package/dist/utils/exceptions.js +48 -1
  25. package/dist/utils/exceptions.js.map +1 -1
  26. package/dist/utils/logger.d.ts +35 -0
  27. package/dist/utils/logger.d.ts.map +1 -0
  28. package/dist/utils/logger.js +96 -0
  29. package/dist/utils/logger.js.map +1 -0
  30. package/dist/utils/memory-pool.d.ts +98 -0
  31. package/dist/utils/memory-pool.d.ts.map +1 -0
  32. package/dist/utils/memory-pool.js +190 -0
  33. package/dist/utils/memory-pool.js.map +1 -0
  34. package/dist/utils/node-wasm-signer.d.ts +8 -0
  35. package/dist/utils/node-wasm-signer.d.ts.map +1 -1
  36. package/dist/utils/node-wasm-signer.js +84 -29
  37. package/dist/utils/node-wasm-signer.js.map +1 -1
  38. package/dist/utils/nonce-cache.d.ts +29 -0
  39. package/dist/utils/nonce-cache.d.ts.map +1 -0
  40. package/dist/utils/nonce-cache.js +111 -0
  41. package/dist/utils/nonce-cache.js.map +1 -0
  42. package/dist/utils/optimized-http-client.d.ts +29 -0
  43. package/dist/utils/optimized-http-client.d.ts.map +1 -0
  44. package/dist/utils/optimized-http-client.js +142 -0
  45. package/dist/utils/optimized-http-client.js.map +1 -0
  46. package/dist/utils/performance-monitor.d.ts +41 -0
  47. package/dist/utils/performance-monitor.d.ts.map +1 -0
  48. package/dist/utils/performance-monitor.js +183 -0
  49. package/dist/utils/performance-monitor.js.map +1 -0
  50. package/dist/utils/request-batcher.d.ts +45 -0
  51. package/dist/utils/request-batcher.d.ts.map +1 -0
  52. package/dist/utils/request-batcher.js +177 -0
  53. package/dist/utils/request-batcher.js.map +1 -0
  54. package/dist/utils/wasm-manager.d.ts +30 -0
  55. package/dist/utils/wasm-manager.d.ts.map +1 -0
  56. package/dist/utils/wasm-manager.js +115 -0
  57. package/dist/utils/wasm-manager.js.map +1 -0
  58. package/docs/AccountApi.md +1 -1
  59. package/docs/GettingStarted.md +8 -8
  60. package/docs/OrderApi.md +1 -1
  61. package/docs/SignerClient.md +1 -1
  62. package/docs/TransactionApi.md +1 -1
  63. package/docs/WsClient.md +1 -1
  64. package/docs/types/Account.md +1 -1
  65. package/docs/types/ApiKeyPair.md +1 -1
  66. package/docs/types/CreateOrderParams.md +1 -1
  67. package/docs/types/MarketOrderParams.md +1 -1
  68. package/docs/types/SignerConfig.md +1 -1
  69. package/docs/types/WasmSignerConfig.md +1 -1
  70. package/examples/README.md +1 -1
  71. package/examples/account_info.ts +5 -2
  72. package/examples/cancel_all_orders.ts +77 -0
  73. package/examples/close_all_positions.ts +69 -0
  74. package/examples/create_cancel_order.ts +48 -8
  75. package/examples/create_market_order.ts +42 -1
  76. package/examples/create_market_order_if_slippage.ts +69 -0
  77. package/examples/create_market_order_max_slippage.ts +43 -43
  78. package/examples/create_sl_tp.ts +114 -29
  79. package/examples/create_with_multiple_keys.ts +77 -58
  80. package/examples/get_info.ts +1 -1
  81. package/examples/market_data_json.ts +80 -0
  82. package/examples/wait_for_transaction.ts +101 -0
  83. package/examples/ws.ts +64 -24
  84. package/examples/ws_async.ts +40 -39
  85. package/package.json +70 -70
  86. package/dist/utils/signer.d.ts +0 -15
  87. package/dist/utils/signer.d.ts.map +0 -1
  88. package/dist/utils/signer.js +0 -68
  89. package/dist/utils/signer.js.map +0 -1
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGeneralBatcher = exports.createHFTBatcher = exports.createOrderBatcher = exports.RequestBatcher = void 0;
4
+ // Request batching system for multiple operations in single API call
5
+ const performance_monitor_1 = require("./performance-monitor");
6
+ class RequestBatcher {
7
+ constructor(batchProcessor, config) {
8
+ this.batchProcessor = batchProcessor;
9
+ this.pendingRequests = new Map();
10
+ this.batchQueue = [];
11
+ this.flushTimer = null;
12
+ this.isProcessing = false;
13
+ this.config = {
14
+ maxBatchSize: 10,
15
+ maxWaitTime: 50, // 50ms max wait time
16
+ flushInterval: 25, // 25ms flush interval
17
+ ...config
18
+ };
19
+ }
20
+ async addRequest(type, params) {
21
+ return new Promise((resolve, reject) => {
22
+ const requestId = `${type.toLowerCase()}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
23
+ const request = {
24
+ id: requestId,
25
+ type,
26
+ params,
27
+ timestamp: Date.now()
28
+ };
29
+ // Store pending request
30
+ this.pendingRequests.set(requestId, {
31
+ resolve,
32
+ reject,
33
+ timestamp: Date.now()
34
+ });
35
+ // Add to batch queue
36
+ this.batchQueue.push(request);
37
+ // Check if we should flush immediately
38
+ if (this.batchQueue.length >= this.config.maxBatchSize) {
39
+ this.flush();
40
+ }
41
+ else {
42
+ // Schedule flush if not already scheduled
43
+ this.scheduleFlush();
44
+ }
45
+ });
46
+ }
47
+ scheduleFlush() {
48
+ if (this.flushTimer) {
49
+ return; // Already scheduled
50
+ }
51
+ this.flushTimer = setTimeout(() => {
52
+ this.flush();
53
+ }, this.config.flushInterval);
54
+ }
55
+ async flush() {
56
+ if (this.isProcessing || this.batchQueue.length === 0) {
57
+ return;
58
+ }
59
+ this.isProcessing = true;
60
+ // Clear flush timer
61
+ if (this.flushTimer) {
62
+ clearTimeout(this.flushTimer);
63
+ this.flushTimer = null;
64
+ }
65
+ // Get current batch
66
+ const currentBatch = [...this.batchQueue];
67
+ this.batchQueue = [];
68
+ if (currentBatch.length === 0) {
69
+ this.isProcessing = false;
70
+ return;
71
+ }
72
+ const endTimer = performance_monitor_1.performanceMonitor.startTimer('batch_process', {
73
+ count: currentBatch.length.toString()
74
+ });
75
+ try {
76
+ if (process.env["NODE_ENV"] === 'development') {
77
+ console.log(`📦 Processing batch of ${currentBatch.length} requests`);
78
+ }
79
+ // Process batch
80
+ const responses = await this.batchProcessor(currentBatch);
81
+ // Handle responses
82
+ for (const response of responses) {
83
+ const pending = this.pendingRequests.get(response.id);
84
+ if (pending) {
85
+ this.pendingRequests.delete(response.id);
86
+ if (response.success) {
87
+ pending.resolve(response.result);
88
+ }
89
+ else {
90
+ pending.reject(new Error(response.error || 'Batch request failed'));
91
+ }
92
+ }
93
+ }
94
+ // Handle any requests that didn't get responses (shouldn't happen)
95
+ for (const request of currentBatch) {
96
+ const pending = this.pendingRequests.get(request.id);
97
+ if (pending) {
98
+ this.pendingRequests.delete(request.id);
99
+ pending.reject(new Error('No response received for batch request'));
100
+ }
101
+ }
102
+ if (process.env["NODE_ENV"] === 'development') {
103
+ console.log(`✅ Batch processed: ${responses.length} responses`);
104
+ }
105
+ }
106
+ catch (error) {
107
+ console.error('❌ Batch processing failed:', error);
108
+ // Reject all pending requests in this batch
109
+ for (const request of currentBatch) {
110
+ const pending = this.pendingRequests.get(request.id);
111
+ if (pending) {
112
+ this.pendingRequests.delete(request.id);
113
+ pending.reject(error instanceof Error ? error : new Error('Batch processing failed'));
114
+ }
115
+ }
116
+ }
117
+ finally {
118
+ this.isProcessing = false;
119
+ endTimer();
120
+ }
121
+ }
122
+ async flushAll() {
123
+ // Clear any pending timer
124
+ if (this.flushTimer) {
125
+ clearTimeout(this.flushTimer);
126
+ this.flushTimer = null;
127
+ }
128
+ // Process any remaining requests
129
+ await this.flush();
130
+ }
131
+ getStats() {
132
+ return {
133
+ pendingRequests: this.pendingRequests.size,
134
+ batchQueue: this.batchQueue.length,
135
+ isProcessing: this.isProcessing
136
+ };
137
+ }
138
+ async destroy() {
139
+ // Clear timer
140
+ if (this.flushTimer) {
141
+ clearTimeout(this.flushTimer);
142
+ this.flushTimer = null;
143
+ }
144
+ // Reject all pending requests
145
+ for (const [, pending] of this.pendingRequests.entries()) {
146
+ pending.reject(new Error('RequestBatcher destroyed'));
147
+ }
148
+ this.pendingRequests.clear();
149
+ // Clear batch queue
150
+ this.batchQueue = [];
151
+ }
152
+ }
153
+ exports.RequestBatcher = RequestBatcher;
154
+ // Factory function for creating batchers with common configurations
155
+ function createOrderBatcher(batchProcessor, options) {
156
+ return new RequestBatcher(batchProcessor, options);
157
+ }
158
+ exports.createOrderBatcher = createOrderBatcher;
159
+ // High-frequency trading optimized batcher
160
+ function createHFTBatcher(batchProcessor) {
161
+ return new RequestBatcher(batchProcessor, {
162
+ maxBatchSize: 5, // Smaller batches for lower latency
163
+ maxWaitTime: 10, // 10ms max wait
164
+ flushInterval: 5 // 5ms flush interval
165
+ });
166
+ }
167
+ exports.createHFTBatcher = createHFTBatcher;
168
+ // General trading optimized batcher
169
+ function createGeneralBatcher(batchProcessor) {
170
+ return new RequestBatcher(batchProcessor, {
171
+ maxBatchSize: 20, // Larger batches for efficiency
172
+ maxWaitTime: 100, // 100ms max wait
173
+ flushInterval: 50 // 50ms flush interval
174
+ });
175
+ }
176
+ exports.createGeneralBatcher = createGeneralBatcher;
177
+ //# sourceMappingURL=request-batcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-batcher.js","sourceRoot":"","sources":["../../src/utils/request-batcher.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,+DAA2D;AAuB3D,MAAa,cAAc;IAWzB,YACU,cAAsE,EAC9E,MAA6B;QADrB,mBAAc,GAAd,cAAc,CAAwD;QAVxE,oBAAe,GAAG,IAAI,GAAG,EAI7B,CAAC;QACG,eAAU,GAAmB,EAAE,CAAC;QAChC,eAAU,GAA0B,IAAI,CAAC;QACzC,iBAAY,GAAG,KAAK,CAAC;QAM3B,IAAI,CAAC,MAAM,GAAG;YACZ,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,EAAE,EAAE,qBAAqB;YACtC,aAAa,EAAE,EAAE,EAAE,sBAAsB;YACzC,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAsD,EAAE,MAAW;QAClF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAEnG,MAAM,OAAO,GAAiB;gBAC5B,EAAE,EAAE,SAAS;gBACb,IAAI;gBACJ,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,wBAAwB;YACxB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE;gBAClC,OAAO;gBACP,MAAM;gBACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;YAEH,qBAAqB;YACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,uCAAuC;YACvC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,0CAA0C;gBAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,oBAAoB;QAC9B,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,oBAAoB;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QAErB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,wCAAkB,CAAC,UAAU,CAAC,eAAe,EAAE;YAC9D,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE;SACtC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,0BAA0B,YAAY,CAAC,MAAM,WAAW,CAAC,CAAC;YACxE,CAAC;YAED,gBAAgB;YAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAE1D,mBAAmB;YACnB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAEzC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACrB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,mEAAmE;YACnE,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACxC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,CAAC,MAAM,YAAY,CAAC,CAAC;YAClE,CAAC;QAEH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YAEnD,4CAA4C;YAC5C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACxC,OAAO,CAAC,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,0BAA0B;QAC1B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,iCAAiC;QACjC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,QAAQ;QAKN,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;YAC1C,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAClC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,cAAc;QACd,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,8BAA8B;QAC9B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE7B,oBAAoB;QACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;CACF;AArLD,wCAqLC;AAED,oEAAoE;AACpE,SAAgB,kBAAkB,CAChC,cAAsE,EACtE,OAIC;IAED,OAAO,IAAI,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AATD,gDASC;AAED,2CAA2C;AAC3C,SAAgB,gBAAgB,CAC9B,cAAsE;IAEtE,OAAO,IAAI,cAAc,CAAC,cAAc,EAAE;QACxC,YAAY,EAAE,CAAC,EAAE,oCAAoC;QACrD,WAAW,EAAE,EAAE,EAAE,gBAAgB;QACjC,aAAa,EAAE,CAAC,CAAE,qBAAqB;KACxC,CAAC,CAAC;AACL,CAAC;AARD,4CAQC;AAED,oCAAoC;AACpC,SAAgB,oBAAoB,CAClC,cAAsE;IAEtE,OAAO,IAAI,cAAc,CAAC,cAAc,EAAE;QACxC,YAAY,EAAE,EAAE,EAAE,gCAAgC;QAClD,WAAW,EAAE,GAAG,EAAE,iBAAiB;QACnC,aAAa,EAAE,EAAE,CAAC,sBAAsB;KACzC,CAAC,CAAC;AACL,CAAC;AARD,oDAQC"}
@@ -0,0 +1,30 @@
1
+ import { NodeWasmSignerClient } from './node-wasm-signer';
2
+ import { WasmSignerClient } from './wasm-signer';
3
+ export interface WasmConfig {
4
+ wasmPath: string;
5
+ wasmExecPath?: string;
6
+ }
7
+ export type WasmClientType = 'browser' | 'node';
8
+ export declare class WasmManager {
9
+ private static instance;
10
+ private wasmClient;
11
+ private isInitialized;
12
+ private initializationPromise;
13
+ private config;
14
+ private constructor();
15
+ static getInstance(): WasmManager;
16
+ initialize(config: WasmConfig, clientType?: WasmClientType): Promise<void>;
17
+ private doInitialize;
18
+ getWasmClient(): WasmSignerClient | NodeWasmSignerClient;
19
+ isReady(): boolean;
20
+ ensureReady(): Promise<void>;
21
+ static preInitialize(config: WasmConfig, clientType?: WasmClientType): Promise<void>;
22
+ getStatus(): {
23
+ isInitialized: boolean;
24
+ hasClient: boolean;
25
+ config: WasmConfig | null;
26
+ };
27
+ destroy(): void;
28
+ static reset(): void;
29
+ }
30
+ //# sourceMappingURL=wasm-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-manager.d.ts","sourceRoot":"","sources":["../../src/utils/wasm-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAA8B,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAA0B,MAAM,eAAe,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,UAAU,CAAwD;IAC1E,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,MAAM,CAA2B;IAEzC,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,WAAW;IAO3B,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,GAAE,cAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkB1E,YAAY;IA+B1B,aAAa,IAAI,gBAAgB,GAAG,oBAAoB;IAOxD,OAAO,IAAI,OAAO;IAIZ,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;WAUrB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,GAAE,cAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlG,SAAS,IAAI;QACX,aAAa,EAAE,OAAO,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;KAC3B;IASD,OAAO,IAAI,IAAI;IAcf,MAAM,CAAC,KAAK,IAAI,IAAI;CAMrB"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WasmManager = void 0;
4
+ // WASM manager for pre-initialization and singleton pattern
5
+ const node_wasm_signer_1 = require("./node-wasm-signer");
6
+ const wasm_signer_1 = require("./wasm-signer");
7
+ class WasmManager {
8
+ constructor() {
9
+ this.wasmClient = null;
10
+ this.isInitialized = false;
11
+ this.initializationPromise = null;
12
+ this.config = null;
13
+ }
14
+ static getInstance() {
15
+ if (!WasmManager.instance) {
16
+ WasmManager.instance = new WasmManager();
17
+ }
18
+ return WasmManager.instance;
19
+ }
20
+ async initialize(config, clientType = 'node') {
21
+ if (this.isInitialized && this.wasmClient) {
22
+ return;
23
+ }
24
+ if (this.initializationPromise) {
25
+ return this.initializationPromise;
26
+ }
27
+ this.initializationPromise = this.doInitialize(config, clientType);
28
+ try {
29
+ await this.initializationPromise;
30
+ }
31
+ finally {
32
+ this.initializationPromise = null;
33
+ }
34
+ }
35
+ async doInitialize(config, clientType) {
36
+ try {
37
+ if (process.env['NODE_ENV'] === 'development') {
38
+ console.log('🚀 Initializing WASM client...');
39
+ }
40
+ const startTime = Date.now();
41
+ this.config = config;
42
+ if (clientType === 'browser' && typeof window !== 'undefined') {
43
+ this.wasmClient = (0, wasm_signer_1.createWasmSignerClient)(config);
44
+ }
45
+ else {
46
+ this.wasmClient = (0, node_wasm_signer_1.createNodeWasmSignerClient)(config);
47
+ }
48
+ // Initialize the WASM client
49
+ await this.wasmClient.initialize();
50
+ const initTime = Date.now() - startTime;
51
+ if (process.env['NODE_ENV'] === 'development') {
52
+ console.log(`✅ WASM client initialized in ${initTime.toFixed(2)}ms`);
53
+ }
54
+ this.isInitialized = true;
55
+ }
56
+ catch (error) {
57
+ // Always log initialization errors for debugging
58
+ console.error('❌ Failed to initialize WASM client:', error instanceof Error ? error.message : String(error));
59
+ throw error;
60
+ }
61
+ }
62
+ getWasmClient() {
63
+ if (!this.isInitialized || !this.wasmClient) {
64
+ throw new Error('WASM client not initialized. Call initialize() first.');
65
+ }
66
+ return this.wasmClient;
67
+ }
68
+ isReady() {
69
+ return this.isInitialized && this.wasmClient !== null;
70
+ }
71
+ async ensureReady() {
72
+ if (!this.isReady()) {
73
+ if (!this.config) {
74
+ throw new Error('WASM manager not configured. Call initialize() first.');
75
+ }
76
+ await this.initialize(this.config);
77
+ }
78
+ }
79
+ // Pre-initialize with default config for faster startup
80
+ static async preInitialize(config, clientType = 'node') {
81
+ const manager = WasmManager.getInstance();
82
+ await manager.initialize(config, clientType);
83
+ }
84
+ // Get initialization status for monitoring
85
+ getStatus() {
86
+ return {
87
+ isInitialized: this.isInitialized,
88
+ hasClient: this.wasmClient !== null,
89
+ config: this.config
90
+ };
91
+ }
92
+ // Cleanup method
93
+ destroy() {
94
+ if (this.wasmClient) {
95
+ // Call cleanup method if available
96
+ if (typeof this.wasmClient.destroy === 'function') {
97
+ this.wasmClient.destroy();
98
+ }
99
+ this.wasmClient = null;
100
+ }
101
+ this.isInitialized = false;
102
+ this.config = null;
103
+ WasmManager.instance = null;
104
+ }
105
+ // Reset instance for testing
106
+ static reset() {
107
+ if (WasmManager.instance) {
108
+ WasmManager.instance.destroy();
109
+ }
110
+ WasmManager.instance = null;
111
+ }
112
+ }
113
+ exports.WasmManager = WasmManager;
114
+ WasmManager.instance = null;
115
+ //# sourceMappingURL=wasm-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-manager.js","sourceRoot":"","sources":["../../src/utils/wasm-manager.ts"],"names":[],"mappings":";;;AAAA,4DAA4D;AAC5D,yDAAsF;AACtF,+CAAyE;AASzE,MAAa,WAAW;IAOtB;QALQ,eAAU,GAAmD,IAAI,CAAC;QAClE,kBAAa,GAAG,KAAK,CAAC;QACtB,0BAAqB,GAAyB,IAAI,CAAC;QACnD,WAAM,GAAsB,IAAI,CAAC;IAElB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAkB,EAAE,aAA6B,MAAM;QACtE,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,qBAAqB,CAAC;QACnC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAkB,EAAE,UAA0B;QACvE,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC9D,IAAI,CAAC,UAAU,GAAG,IAAA,oCAAsB,EAAC,MAAM,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,IAAA,6CAA0B,EAAC,MAAM,CAAC,CAAC;YACvD,CAAC;YAED,6BAA6B;YAC7B,MAAO,IAAI,CAAC,UAAkB,CAAC,UAAU,EAAE,CAAC;YAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iDAAiD;YACjD,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7G,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAkB,EAAE,aAA6B,MAAM;QAChF,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,2CAA2C;IAC3C,SAAS;QAKP,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,CAAC,UAAU,KAAK,IAAI;YACnC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,mCAAmC;YACnC,IAAI,OAAQ,IAAI,CAAC,UAAkB,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC1D,IAAI,CAAC,UAAkB,CAAC,OAAO,EAAE,CAAC;YACrC,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,6BAA6B;IAC7B,MAAM,CAAC,KAAK;QACV,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;QACD,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,CAAC;;AA5HH,kCA6HC;AA5HgB,oBAAQ,GAAuB,IAAI,AAA3B,CAA4B"}
@@ -180,7 +180,7 @@ try {
180
180
  ## Complete Example
181
181
 
182
182
  ```typescript
183
- import { ApiClient, AccountApi } from '@lighter/typescript-sdk';
183
+ import { ApiClient, AccountApi } from 'lighter-ts-sdk';
184
184
 
185
185
  async function main() {
186
186
  const client = new ApiClient({ host: 'https://mainnet.zklighter.elliot.ai' });
@@ -13,13 +13,13 @@ This guide will help you get up and running with the Lighter TypeScript SDK quic
13
13
  ### Using npm
14
14
 
15
15
  ```bash
16
- npm install @lighter/typescript-sdk
16
+ npm install lighter-ts-sdk
17
17
  ```
18
18
 
19
19
  ### Using yarn
20
20
 
21
21
  ```bash
22
- yarn add @lighter/typescript-sdk
22
+ yarn add lighter-ts-sdk
23
23
  ```
24
24
 
25
25
  ## Quick Start
@@ -27,7 +27,7 @@ yarn add @lighter/typescript-sdk
27
27
  ### 1. Basic API Usage
28
28
 
29
29
  ```typescript
30
- import { ApiClient, AccountApi } from '@lighter/typescript-sdk';
30
+ import { ApiClient, AccountApi } from 'lighter-ts-sdk';
31
31
 
32
32
  async function main() {
33
33
  const client = new ApiClient({ host: 'https://mainnet.zklighter.elliot.ai' });
@@ -49,7 +49,7 @@ main().catch(console.error);
49
49
  ### 2. Trading with SignerClient
50
50
 
51
51
  ```typescript
52
- import { SignerClient } from '@lighter/typescript-sdk';
52
+ import { SignerClient } from 'lighter-ts-sdk';
53
53
 
54
54
  async function main() {
55
55
  const client = new SignerClient({
@@ -104,7 +104,7 @@ npx ts-node examples/system_setup.ts
104
104
  This will output something like:
105
105
  ```
106
106
  BASE_URL = 'https://mainnet.zklighter.elliot.ai'
107
- API_KEY_PRIVATE_KEY = 'ea5d2eca5be67eca056752eaf27b173518b8a5550117c09d2b58c7ea7d306cc4426f913ccf27ab19'
107
+ API_KEY_PRIVATE_KEY = '0x...' # Your generated API private key
108
108
  ACCOUNT_INDEX = 595
109
109
  API_KEY_INDEX = 1
110
110
  ```
@@ -115,7 +115,7 @@ Create a `.env` file in your project root:
115
115
 
116
116
  ```env
117
117
  BASE_URL=https://mainnet.zklighter.elliot.ai
118
- PRIVATE_KEY=0xea5d2eca5be67eca056752eaf27b173518b8a5550117c09d2b58c7ea7d306cc4426f913ccf27ab19
118
+ API_PRIVATE_KEY=0x... # Your generated API private key
119
119
  ACCOUNT_INDEX=595
120
120
  API_KEY_INDEX=1
121
121
  ```
@@ -125,7 +125,7 @@ API_KEY_INDEX=1
125
125
  Now you can use the SDK to create orders:
126
126
 
127
127
  ```typescript
128
- import { SignerClient } from '@lighter/typescript-sdk';
128
+ import { SignerClient } from 'lighter-ts-sdk';
129
129
  import * as dotenv from 'dotenv';
130
130
 
131
131
  dotenv.config();
@@ -203,7 +203,7 @@ npx ts-node examples/[example-name].ts
203
203
  For real-time data, use the WebSocket client:
204
204
 
205
205
  ```typescript
206
- import { WsClient } from '@lighter/typescript-sdk';
206
+ import { WsClient } from 'lighter-ts-sdk';
207
207
 
208
208
  const wsClient = new WsClient({
209
209
  url: 'wss://mainnet.zklighter.elliot.ai/ws',
package/docs/OrderApi.md CHANGED
@@ -157,7 +157,7 @@ try {
157
157
  ## Complete Example
158
158
 
159
159
  ```typescript
160
- import { ApiClient, OrderApi } from '@lighter/typescript-sdk';
160
+ import { ApiClient, OrderApi } from 'lighter-ts-sdk';
161
161
 
162
162
  async function main() {
163
163
  const client = new ApiClient({ host: 'https://mainnet.zklighter.elliot.ai' });
@@ -275,7 +275,7 @@ console.log('Order created successfully:', txHash);
275
275
  ## Complete Example
276
276
 
277
277
  ```typescript
278
- import { SignerClient } from '@lighter/typescript-sdk';
278
+ import { SignerClient } from 'lighter-ts-sdk';
279
279
 
280
280
  async function main() {
281
281
  const client = new SignerClient({
@@ -261,7 +261,7 @@ try {
261
261
  ## Complete Example
262
262
 
263
263
  ```typescript
264
- import { ApiClient, TransactionApi, SignerClient } from '@lighter/typescript-sdk';
264
+ import { ApiClient, TransactionApi, SignerClient } from 'lighter-ts-sdk';
265
265
 
266
266
  async function main() {
267
267
  const client = new ApiClient({ host: 'https://mainnet.zklighter.elliot.ai' });
package/docs/WsClient.md CHANGED
@@ -180,7 +180,7 @@ interface PriceLevel {
180
180
  ## Complete Example
181
181
 
182
182
  ```typescript
183
- import { WsClient, SignerClient } from '@lighter/typescript-sdk';
183
+ import { WsClient, SignerClient } from 'lighter-ts-sdk';
184
184
 
185
185
  async function main() {
186
186
  const wsClient = new WsClient({
@@ -16,7 +16,7 @@ Account information returned by the `AccountApi.getAccount()` method.
16
16
  ## Example
17
17
 
18
18
  ```typescript
19
- import { AccountApi } from '@lighter/typescript-sdk';
19
+ import { AccountApi } from 'lighter-ts-sdk';
20
20
 
21
21
  const accountApi = new AccountApi(client);
22
22
  const account = await accountApi.getAccount({ by: 'index', value: '123' });
@@ -12,7 +12,7 @@ Structure representing a generated API key pair.
12
12
  ## Example
13
13
 
14
14
  ```typescript
15
- import { SignerClient } from '@lighter/typescript-sdk';
15
+ import { SignerClient } from 'lighter-ts-sdk';
16
16
 
17
17
  const client = new SignerClient(config);
18
18
  await client.initialize();
@@ -20,7 +20,7 @@ Parameters for creating a limit order using the `SignerClient.createOrder()` met
20
20
  ## Example
21
21
 
22
22
  ```typescript
23
- import { SignerClient } from '@lighter/typescript-sdk';
23
+ import { SignerClient } from 'lighter-ts-sdk';
24
24
 
25
25
  const orderParams: CreateOrderParams = {
26
26
  marketIndex: 0, // ETH/USDC
@@ -15,7 +15,7 @@ Parameters for creating a market order using the `SignerClient.createMarketOrder
15
15
  ## Example
16
16
 
17
17
  ```typescript
18
- import { SignerClient } from '@lighter/typescript-sdk';
18
+ import { SignerClient } from 'lighter-ts-sdk';
19
19
 
20
20
  const marketOrderParams: MarketOrderParams = {
21
21
  marketIndex: 0, // ETH/USDC
@@ -16,7 +16,7 @@ Configuration object for the `SignerClient` class.
16
16
  ## Example
17
17
 
18
18
  ```typescript
19
- import { SignerClient } from '@lighter/typescript-sdk';
19
+ import { SignerClient } from 'lighter-ts-sdk';
20
20
 
21
21
  const config: SignerConfig = {
22
22
  url: 'https://mainnet.zklighter.elliot.ai',
@@ -12,7 +12,7 @@ Configuration object for the WASM signer client.
12
12
  ## Example
13
13
 
14
14
  ```typescript
15
- import { WasmSignerClient } from '@lighter/typescript-sdk';
15
+ import { WasmSignerClient } from 'lighter-ts-sdk';
16
16
 
17
17
  const config: WasmSignerConfig = {
18
18
  wasmPath: 'wasm/lighter-signer.wasm',
@@ -16,7 +16,7 @@ This directory contains comprehensive examples demonstrating how to use the Ligh
16
16
  - The output should look like:
17
17
  ```
18
18
  BASE_URL = 'https://testnet.zklighter.elliot.ai'
19
- API_KEY_PRIVATE_KEY = '0xea5d2eca5be67eca056752eaf27b173518b8a5550117c09d2b58c7ea7d306cc4426f913ccf27ab19'
19
+ API_KEY_PRIVATE_KEY = '0x...' # Your generated API private key
20
20
  ACCOUNT_INDEX = 595
21
21
  API_KEY_INDEX = 1
22
22
  ```
@@ -2,11 +2,14 @@
2
2
 
3
3
  import { Account } from "../src/api/account-api";
4
4
  import { ApiClient } from "../src/api/api-client";
5
+ import dotenv from 'dotenv';
6
+ dotenv.config();
5
7
 
6
8
  async function main(): Promise<void> {
9
+ console.log(process.env['L1_ADDRESS']);
7
10
  const client = new ApiClient();
8
- const reponse = await client.get<Account>('/api/v1/account', { by: 'l1_address', value: process.env.L1_ADDRESS });
9
- console.log(reponse.data);
11
+ const response = await client.get<Account>('/api/v1/account', { by: 'l1_address', value: process.env['L1_ADDRESS'] });
12
+ console.log(response.data);
10
13
  }
11
14
 
12
15
  main();
@@ -0,0 +1,77 @@
1
+ // Cancel all orders for an account
2
+ // This example shows how to cancel all open orders
3
+
4
+ import { SignerClient } from '../src/signer/wasm-signer-client';
5
+ import * as dotenv from 'dotenv';
6
+
7
+ dotenv.config();
8
+
9
+ const BASE_URL = process.env['BASE_URL'] || 'https://mainnet.zklighter.elliot.ai';
10
+ const API_KEY_PRIVATE_KEY = process.env['API_PRIVATE_KEY'];
11
+ const ACCOUNT_INDEX = parseInt(process.env['ACCOUNT_INDEX'] || '0', 10);
12
+ const API_KEY_INDEX = parseInt(process.env['API_KEY_INDEX'] || '0', 10);
13
+
14
+ async function main(): Promise<void> {
15
+ if (!API_KEY_PRIVATE_KEY) {
16
+ console.error('API_KEY_PRIVATE_KEY environment variable is required');
17
+ return;
18
+ }
19
+
20
+ const client = new SignerClient({
21
+ url: BASE_URL,
22
+ privateKey: API_KEY_PRIVATE_KEY,
23
+ accountIndex: ACCOUNT_INDEX,
24
+ apiKeyIndex: API_KEY_INDEX,
25
+ wasmConfig: { wasmPath: 'wasm/lighter-signer.wasm' }
26
+ });
27
+
28
+ await client.initialize();
29
+ await (client as any).ensureWasmClient();
30
+
31
+ const err = client.checkClient();
32
+ if (err) {
33
+ console.error('CheckClient error:', err);
34
+ return;
35
+ }
36
+
37
+ // Cancel all orders
38
+ // timeInForce: 0 = immediate, 1 = scheduled, 2 = abort
39
+ // time: timestamp for scheduled cancellation (0 for immediate)
40
+ const [tx, apiResponse, cancelErr] = await client.cancelAllOrders(
41
+ SignerClient.CANCEL_ALL_TIF_IMMEDIATE, // Immediate cancellation
42
+ 0 // No scheduled time
43
+ );
44
+
45
+ console.log('Cancel All Orders:', { tx, apiResponse, err: cancelErr });
46
+
47
+ if (cancelErr) {
48
+ console.log('❌ Cancel all orders error:', cancelErr);
49
+ } else {
50
+ console.log('✅ All orders cancelled successfully!');
51
+ console.log('📋 Transaction Details:');
52
+ console.log(` Time In Force: ${tx.TimeInForce}`);
53
+ console.log(` Time: ${tx.Time}`);
54
+ console.log(` Nonce: ${tx.Nonce}`);
55
+ console.log(` API Response: ${JSON.stringify(apiResponse)}`);
56
+
57
+ // Wait for cancellation transaction confirmation if we have a hash
58
+ if (apiResponse && apiResponse.hash) {
59
+ console.log('\n⏳ Waiting for cancellation transaction confirmation...');
60
+ try {
61
+ const confirmedTx = await client.waitForTransaction(apiResponse.hash, 30000, 1000);
62
+ console.log('✅ Cancellation transaction confirmed!');
63
+ console.log(` Hash: ${confirmedTx.hash}`);
64
+ console.log(` Status: ${confirmedTx.status}`);
65
+ console.log(` Block Height: ${confirmedTx.block_height}`);
66
+ } catch (waitError) {
67
+ console.log('⚠️ Cancellation transaction confirmation timeout:', waitError instanceof Error ? waitError.message : 'Unknown error');
68
+ }
69
+ }
70
+ }
71
+
72
+ await client.close();
73
+ }
74
+
75
+ if (require.main === module) {
76
+ main().catch(console.error);
77
+ }