lighter-ts-sdk 1.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +440 -0
  3. package/dist/api/account-api.d.ts +89 -0
  4. package/dist/api/account-api.d.ts.map +1 -0
  5. package/dist/api/account-api.js +61 -0
  6. package/dist/api/account-api.js.map +1 -0
  7. package/dist/api/api-client.d.ts +23 -0
  8. package/dist/api/api-client.d.ts.map +1 -0
  9. package/dist/api/api-client.js +129 -0
  10. package/dist/api/api-client.js.map +1 -0
  11. package/dist/api/block-api.d.ts +24 -0
  12. package/dist/api/block-api.d.ts.map +1 -0
  13. package/dist/api/block-api.js +22 -0
  14. package/dist/api/block-api.js.map +1 -0
  15. package/dist/api/candlestick-api.d.ts +27 -0
  16. package/dist/api/candlestick-api.d.ts.map +1 -0
  17. package/dist/api/candlestick-api.js +18 -0
  18. package/dist/api/candlestick-api.js.map +1 -0
  19. package/dist/api/order-api.d.ts +76 -0
  20. package/dist/api/order-api.d.ts.map +1 -0
  21. package/dist/api/order-api.js +102 -0
  22. package/dist/api/order-api.js.map +1 -0
  23. package/dist/api/root-api.d.ts +8 -0
  24. package/dist/api/root-api.d.ts.map +1 -0
  25. package/dist/api/root-api.js +14 -0
  26. package/dist/api/root-api.js.map +1 -0
  27. package/dist/api/transaction-api.d.ts +58 -0
  28. package/dist/api/transaction-api.d.ts.map +1 -0
  29. package/dist/api/transaction-api.js +141 -0
  30. package/dist/api/transaction-api.js.map +1 -0
  31. package/dist/api/ws-client.d.ts +21 -0
  32. package/dist/api/ws-client.d.ts.map +1 -0
  33. package/dist/api/ws-client.js +139 -0
  34. package/dist/api/ws-client.js.map +1 -0
  35. package/dist/index.d.ts +62 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +99 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/signer/signer-client.d.ts +79 -0
  40. package/dist/signer/signer-client.d.ts.map +1 -0
  41. package/dist/signer/signer-client.js +213 -0
  42. package/dist/signer/signer-client.js.map +1 -0
  43. package/dist/signer/wasm-signer-client.d.ts +129 -0
  44. package/dist/signer/wasm-signer-client.d.ts.map +1 -0
  45. package/dist/signer/wasm-signer-client.js +607 -0
  46. package/dist/signer/wasm-signer-client.js.map +1 -0
  47. package/dist/types/index.d.ts +130 -0
  48. package/dist/types/index.d.ts.map +1 -0
  49. package/dist/types/index.js +3 -0
  50. package/dist/types/index.js.map +1 -0
  51. package/dist/utils/api-key-utils.d.ts +7 -0
  52. package/dist/utils/api-key-utils.d.ts.map +1 -0
  53. package/dist/utils/api-key-utils.js +31 -0
  54. package/dist/utils/api-key-utils.js.map +1 -0
  55. package/dist/utils/configuration.d.ts +19 -0
  56. package/dist/utils/configuration.d.ts.map +1 -0
  57. package/dist/utils/configuration.js +55 -0
  58. package/dist/utils/configuration.js.map +1 -0
  59. package/dist/utils/exceptions.d.ts +33 -0
  60. package/dist/utils/exceptions.d.ts.map +1 -0
  61. package/dist/utils/exceptions.js +76 -0
  62. package/dist/utils/exceptions.js.map +1 -0
  63. package/dist/utils/node-wasm-signer.d.ts +126 -0
  64. package/dist/utils/node-wasm-signer.d.ts.map +1 -0
  65. package/dist/utils/node-wasm-signer.js +286 -0
  66. package/dist/utils/node-wasm-signer.js.map +1 -0
  67. package/dist/utils/signer-server.d.ts +18 -0
  68. package/dist/utils/signer-server.d.ts.map +1 -0
  69. package/dist/utils/signer-server.js +79 -0
  70. package/dist/utils/signer-server.js.map +1 -0
  71. package/dist/utils/signer.d.ts +15 -0
  72. package/dist/utils/signer.d.ts.map +1 -0
  73. package/dist/utils/signer.js +68 -0
  74. package/dist/utils/signer.js.map +1 -0
  75. package/dist/utils/wasm-signer.d.ts +130 -0
  76. package/dist/utils/wasm-signer.d.ts.map +1 -0
  77. package/dist/utils/wasm-signer.js +178 -0
  78. package/dist/utils/wasm-signer.js.map +1 -0
  79. package/docs/API.md +195 -0
  80. package/docs/AccountApi.md +220 -0
  81. package/docs/GettingStarted.md +261 -0
  82. package/docs/OrderApi.md +199 -0
  83. package/docs/SignerClient.md +326 -0
  84. package/docs/TransactionApi.md +312 -0
  85. package/docs/WsClient.md +275 -0
  86. package/docs/types/Account.md +67 -0
  87. package/docs/types/ApiKeyPair.md +33 -0
  88. package/docs/types/CreateOrderParams.md +47 -0
  89. package/docs/types/MarketOrderParams.md +36 -0
  90. package/docs/types/SignerConfig.md +40 -0
  91. package/docs/types/WasmSignerConfig.md +30 -0
  92. package/examples/README.md +171 -0
  93. package/examples/account_info.ts +12 -0
  94. package/examples/create_cancel_order.ts +74 -0
  95. package/examples/create_market_order.ts +42 -0
  96. package/examples/create_market_order_max_slippage.ts +43 -0
  97. package/examples/create_sl_tp.ts +61 -0
  98. package/examples/create_with_multiple_keys.ts +58 -0
  99. package/examples/get_info.ts +58 -0
  100. package/examples/send_tx_batch.ts +87 -0
  101. package/examples/system_setup.ts +96 -0
  102. package/examples/transfer_update_leverage.ts +53 -0
  103. package/examples/ws.ts +24 -0
  104. package/examples/ws_async.ts +39 -0
  105. package/examples/ws_send_batch_tx.ts +113 -0
  106. package/examples/ws_send_tx.ts +94 -0
  107. package/package.json +71 -0
  108. package/wasm/lighter-signer.wasm +0 -0
  109. package/wasm/wasm_exec.js +402 -0
  110. package/wasm/wasm_exec_nodejs.js +402 -0
@@ -0,0 +1,607 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignerClient = void 0;
4
+ const api_client_1 = require("../api/api-client");
5
+ const transaction_api_1 = require("../api/transaction-api");
6
+ const signer_server_1 = require("../utils/signer-server");
7
+ const wasm_signer_1 = require("../utils/wasm-signer");
8
+ const node_wasm_signer_1 = require("../utils/node-wasm-signer");
9
+ const root_api_1 = require("../api/root-api");
10
+ class SignerClient {
11
+ constructor(config) {
12
+ this.clientCreated = false;
13
+ this.config = config;
14
+ this.apiClient = new api_client_1.ApiClient({ host: config.url });
15
+ this.transactionApi = new transaction_api_1.TransactionApi(this.apiClient);
16
+ // Determine signer type and initialize accordingly
17
+ if (config.signerServerUrl) {
18
+ this.wallet = (0, signer_server_1.createSignerServerClient)({ url: config.signerServerUrl });
19
+ this.signerType = 'server';
20
+ }
21
+ else if (config.wasmConfig) {
22
+ // Check if we're in a browser or Node.js environment
23
+ if (typeof window !== 'undefined') {
24
+ this.wallet = (0, wasm_signer_1.createWasmSignerClient)(config.wasmConfig);
25
+ this.signerType = 'wasm';
26
+ }
27
+ else {
28
+ this.wallet = (0, node_wasm_signer_1.createNodeWasmSignerClient)(config.wasmConfig);
29
+ this.signerType = 'node-wasm';
30
+ }
31
+ }
32
+ else {
33
+ throw new Error('Either signerServerUrl or wasmConfig must be provided.');
34
+ }
35
+ }
36
+ /**
37
+ * Initialize the signer (required for WASM signers)
38
+ */
39
+ async initialize() {
40
+ if (this.signerType === 'wasm' || this.signerType === 'node-wasm') {
41
+ await this.wallet.initialize();
42
+ // Leave client creation to ensureWasmClient or server path
43
+ }
44
+ }
45
+ async ensureWasmClient() {
46
+ if (this.signerType !== 'wasm' && this.signerType !== 'node-wasm')
47
+ return;
48
+ if (this.clientCreated)
49
+ return;
50
+ // Initialize WASM client
51
+ // Determine chainId from API, try layer2BasicInfo first, then /info, fallback to 1
52
+ const root = new root_api_1.RootApi(this.apiClient);
53
+ let chainIdNum = 304;
54
+ try {
55
+ // Try modern endpoint
56
+ try {
57
+ const basic = await this.apiClient.get('/api/v1/layer2BasicInfo');
58
+ const data = basic?.data ?? basic; // ApiClient.get wraps in {data}
59
+ const cid = (data && (data.chain_id ?? data.chainId ?? data.chainID)) ?? undefined;
60
+ if (cid !== undefined) {
61
+ if (typeof cid === 'number') {
62
+ chainIdNum = cid;
63
+ }
64
+ else {
65
+ const s = String(cid).toLowerCase();
66
+ if (/^\d+$/.test(s))
67
+ chainIdNum = parseInt(s, 10);
68
+ else if (s.includes('mainnet'))
69
+ chainIdNum = 304;
70
+ else if (s.includes('testnet'))
71
+ chainIdNum = 2;
72
+ }
73
+ }
74
+ }
75
+ catch { }
76
+ if (!Number.isFinite(chainIdNum) || chainIdNum <= 0) {
77
+ const info = await root.getInfo();
78
+ const cid = (info && (info.chain_id ?? info.chainId ?? info.chainID)) ?? 304;
79
+ if (typeof cid === 'number')
80
+ chainIdNum = cid;
81
+ else {
82
+ const s = String(cid).toLowerCase();
83
+ if (/^\d+$/.test(s))
84
+ chainIdNum = parseInt(s, 10);
85
+ else if (s.includes('mainnet'))
86
+ chainIdNum = 304;
87
+ else if (s.includes('testnet'))
88
+ chainIdNum = 2;
89
+ else
90
+ chainIdNum = 304;
91
+ }
92
+ }
93
+ if (!Number.isFinite(chainIdNum) || chainIdNum <= 0)
94
+ chainIdNum = 304;
95
+ }
96
+ catch {
97
+ chainIdNum = 304;
98
+ }
99
+ await this.wallet.createClient({
100
+ url: this.config.url,
101
+ privateKey: this.config.privateKey?.startsWith('0x') ? this.config.privateKey : `0x${this.config.privateKey}`,
102
+ chainId: chainIdNum,
103
+ apiKeyIndex: this.config.apiKeyIndex,
104
+ accountIndex: this.config.accountIndex,
105
+ });
106
+ this.clientCreated = true;
107
+ }
108
+ checkClient() {
109
+ // Basic validation
110
+ if (!this.config.privateKey) {
111
+ return 'Private key is required';
112
+ }
113
+ if (this.config.accountIndex < 0) {
114
+ return 'Account index must be non-negative';
115
+ }
116
+ if (this.config.apiKeyIndex < 0) {
117
+ return 'API key index must be non-negative';
118
+ }
119
+ return null;
120
+ }
121
+ async createOrder(params) {
122
+ try {
123
+ // Get next nonce
124
+ const nextNonce = await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex);
125
+ // Handle order expiry - use real timestamp for GTT orders (milliseconds)
126
+ const orderExpiry = params.orderExpiry ?? SignerClient.DEFAULT_28_DAY_ORDER_EXPIRY;
127
+ if (this.signerType === 'server') {
128
+ // Use server signer
129
+ const orderTx = {
130
+ AccountIndex: this.config.accountIndex,
131
+ ApiKeyIndex: this.config.apiKeyIndex,
132
+ MarketIndex: params.marketIndex,
133
+ ClientOrderIndex: params.clientOrderIndex,
134
+ BaseAmount: params.baseAmount,
135
+ Price: params.price,
136
+ IsAsk: params.isAsk ? 1 : 0,
137
+ Type: params.orderType,
138
+ TimeInForce: params.timeInForce,
139
+ ReduceOnly: params.reduceOnly ? 1 : 0,
140
+ TriggerPrice: params.triggerPrice,
141
+ Nonce: nextNonce.nonce
142
+ };
143
+ if (orderExpiry !== SignerClient.DEFAULT_28_DAY_ORDER_EXPIRY) {
144
+ orderTx.OrderExpiry = orderExpiry;
145
+ orderTx.ExpiredAt = orderExpiry;
146
+ }
147
+ const signature = await this.wallet.signTransaction(this.config.privateKey, orderTx);
148
+ const txInfo = { ...orderTx, Sig: signature };
149
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CREATE_ORDER, JSON.stringify(txInfo));
150
+ return [orderTx, txHash.hash, null];
151
+ }
152
+ else {
153
+ // Use WASM signer
154
+ // For IOC orders, use NilOrderExpiry (0)
155
+ const wasmOrderExpiry = params.timeInForce === SignerClient.ORDER_TIME_IN_FORCE_IMMEDIATE_OR_CANCEL ?
156
+ 0 : orderExpiry;
157
+ const wasmParams = {
158
+ marketIndex: params.marketIndex,
159
+ clientOrderIndex: params.clientOrderIndex,
160
+ baseAmount: params.baseAmount,
161
+ price: params.price,
162
+ isAsk: params.isAsk ? 1 : 0,
163
+ orderType: params.orderType,
164
+ timeInForce: params.timeInForce,
165
+ reduceOnly: params.reduceOnly ? 1 : 0,
166
+ triggerPrice: params.triggerPrice,
167
+ orderExpiry: wasmOrderExpiry,
168
+ nonce: nextNonce.nonce
169
+ };
170
+ const txInfoStr = await this.wallet.signCreateOrder(wasmParams);
171
+ // Send exactly what WASM produced, using urlencoded form like Python/Go
172
+ console.log('WASM signCreateOrder result:', txInfoStr);
173
+ const txHash = await this.transactionApi.sendTxWithIndices(SignerClient.TX_TYPE_CREATE_ORDER, txInfoStr, this.config.accountIndex, this.config.apiKeyIndex);
174
+ return [JSON.parse(txInfoStr), txHash.hash, null];
175
+ }
176
+ }
177
+ catch (error) {
178
+ console.error('Error creating order:', error);
179
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
180
+ }
181
+ }
182
+ async createMarketOrder(params) {
183
+ try {
184
+ // Get next nonce
185
+ const nextNonce = await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex);
186
+ if (this.signerType === 'server') {
187
+ // Use server signer
188
+ const orderTx = {
189
+ AccountIndex: this.config.accountIndex,
190
+ ApiKeyIndex: this.config.apiKeyIndex,
191
+ MarketIndex: params.marketIndex,
192
+ ClientOrderIndex: params.clientOrderIndex,
193
+ BaseAmount: params.baseAmount,
194
+ Price: params.avgExecutionPrice,
195
+ IsAsk: params.isAsk ? 1 : 0,
196
+ Type: SignerClient.ORDER_TYPE_MARKET,
197
+ TimeInForce: SignerClient.ORDER_TIME_IN_FORCE_IMMEDIATE_OR_CANCEL,
198
+ ReduceOnly: 0,
199
+ TriggerPrice: SignerClient.NIL_TRIGGER_PRICE,
200
+ Nonce: nextNonce.nonce
201
+ };
202
+ const signature = await this.wallet.signTransaction(this.config.privateKey, orderTx);
203
+ const txInfo = { ...orderTx, Sig: signature };
204
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CREATE_ORDER, JSON.stringify(txInfo));
205
+ return [orderTx, txHash.hash, null];
206
+ }
207
+ else {
208
+ // Use WASM signer
209
+ const wasmParams = {
210
+ marketIndex: params.marketIndex,
211
+ clientOrderIndex: params.clientOrderIndex,
212
+ baseAmount: params.baseAmount,
213
+ price: params.avgExecutionPrice,
214
+ isAsk: params.isAsk ? 1 : 0,
215
+ orderType: SignerClient.ORDER_TYPE_MARKET,
216
+ timeInForce: SignerClient.ORDER_TIME_IN_FORCE_IMMEDIATE_OR_CANCEL,
217
+ reduceOnly: 0,
218
+ triggerPrice: SignerClient.NIL_TRIGGER_PRICE,
219
+ orderExpiry: 0, // NilOrderExpiry for market orders
220
+ nonce: nextNonce.nonce
221
+ };
222
+ const txInfoStr = await this.wallet.signCreateOrder(wasmParams);
223
+ // Debug: Log the transaction info string to see what WASM is producing
224
+ console.log('WASM signCreateOrder result:', txInfoStr);
225
+ const txHash = await this.transactionApi.sendTxWithIndices(SignerClient.TX_TYPE_CREATE_ORDER, txInfoStr, this.config.accountIndex, this.config.apiKeyIndex);
226
+ return [JSON.parse(txInfoStr), txHash.hash, null];
227
+ }
228
+ }
229
+ catch (error) {
230
+ console.error('Error creating market order:', error);
231
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
232
+ }
233
+ }
234
+ async cancelOrder(params) {
235
+ try {
236
+ // Get next nonce
237
+ const nextNonce = await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex);
238
+ if (this.signerType === 'server') {
239
+ // Use server signer
240
+ const cancelTx = {
241
+ AccountIndex: this.config.accountIndex,
242
+ ApiKeyIndex: this.config.apiKeyIndex,
243
+ MarketIndex: params.marketIndex,
244
+ Index: params.orderIndex,
245
+ Nonce: nextNonce.nonce
246
+ };
247
+ const signature = await this.wallet.signTransaction(this.config.privateKey, cancelTx);
248
+ const txInfo = { ...cancelTx, Sig: signature };
249
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CANCEL_ORDER, JSON.stringify(txInfo));
250
+ return [cancelTx, txHash.hash, null];
251
+ }
252
+ else {
253
+ // Use WASM signer
254
+ const wasmParams = {
255
+ marketIndex: params.marketIndex,
256
+ orderIndex: params.orderIndex,
257
+ nonce: nextNonce.nonce
258
+ };
259
+ const txInfoStr = await this.wallet.signCancelOrder(wasmParams);
260
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CANCEL_ORDER, txInfoStr);
261
+ return [JSON.parse(txInfoStr), txHash.hash, null];
262
+ }
263
+ }
264
+ catch (error) {
265
+ console.error('Error canceling order:', error);
266
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
267
+ }
268
+ }
269
+ async changeApiKey(params) {
270
+ try {
271
+ // Get next nonce
272
+ const nextNonce = await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex);
273
+ if (this.signerType === 'server') {
274
+ // Use server signer
275
+ const changeTx = {
276
+ AccountIndex: this.config.accountIndex,
277
+ ApiKeyIndex: this.config.apiKeyIndex,
278
+ PubKey: params.newPubkey,
279
+ Nonce: nextNonce.nonce
280
+ };
281
+ const signature = await this.wallet.signTransaction(this.config.privateKey, changeTx);
282
+ const txInfo = { ...changeTx, Sig: signature };
283
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CHANGE_PUB_KEY, JSON.stringify(txInfo));
284
+ return [changeTx, txHash.hash, null];
285
+ }
286
+ else {
287
+ // WASM signer doesn't support changeApiKey yet
288
+ throw new Error('changeApiKey not supported with WASM signer. Use signer server instead.');
289
+ }
290
+ }
291
+ catch (error) {
292
+ console.error('Error changing API key:', error);
293
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
294
+ }
295
+ }
296
+ async createAuthTokenWithExpiry(expirySeconds = SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY) {
297
+ try {
298
+ if (this.signerType === 'server') {
299
+ // Server signer doesn't have this method, return empty string
300
+ return '';
301
+ }
302
+ else {
303
+ // Use WASM signer
304
+ const deadline = expirySeconds === SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY ?
305
+ undefined : Math.floor(Date.now() / 1000) + expirySeconds;
306
+ return await this.wallet.createAuthToken(deadline);
307
+ }
308
+ }
309
+ catch (error) {
310
+ console.error('Error creating auth token:', error);
311
+ throw error;
312
+ }
313
+ }
314
+ /**
315
+ * Generate a new API key pair using WASM signer
316
+ */
317
+ async generateAPIKey(seed) {
318
+ try {
319
+ if (this.signerType === 'server') {
320
+ throw new Error('generateAPIKey not supported with server signer. Use WASM signer instead.');
321
+ }
322
+ else {
323
+ return await this.wallet.generateAPIKey(seed);
324
+ }
325
+ }
326
+ catch (error) {
327
+ console.error('Error generating API key:', error);
328
+ return null;
329
+ }
330
+ }
331
+ /**
332
+ * Withdraw USDC from account
333
+ */
334
+ async withdraw(usdcAmount, nonce = -1) {
335
+ try {
336
+ // Get next nonce if not provided
337
+ const nextNonce = nonce === -1 ?
338
+ await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex) :
339
+ { nonce };
340
+ const scaledAmount = Math.floor(usdcAmount * SignerClient.USDC_TICKER_SCALE);
341
+ if (this.signerType === 'server') {
342
+ // Use server signer
343
+ const withdrawTx = {
344
+ AccountIndex: this.config.accountIndex,
345
+ ApiKeyIndex: this.config.apiKeyIndex,
346
+ Amount: scaledAmount,
347
+ Nonce: nextNonce.nonce
348
+ };
349
+ const signature = await this.wallet.signTransaction(this.config.privateKey, withdrawTx);
350
+ const txInfo = { ...withdrawTx, Sig: signature };
351
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_WITHDRAW, JSON.stringify(txInfo));
352
+ return [withdrawTx, txHash.hash, null];
353
+ }
354
+ else {
355
+ // WASM signer doesn't support withdraw yet
356
+ throw new Error('withdraw not supported with WASM signer. Use signer server instead.');
357
+ }
358
+ }
359
+ catch (error) {
360
+ console.error('Error withdrawing:', error);
361
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
362
+ }
363
+ }
364
+ /**
365
+ * Create a sub account
366
+ */
367
+ async createSubAccount(nonce = -1) {
368
+ try {
369
+ // Get next nonce if not provided
370
+ const nextNonce = nonce === -1 ?
371
+ await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex) :
372
+ { nonce };
373
+ if (this.signerType === 'server') {
374
+ // Use server signer
375
+ const createSubAccountTx = {
376
+ AccountIndex: this.config.accountIndex,
377
+ ApiKeyIndex: this.config.apiKeyIndex,
378
+ Nonce: nextNonce.nonce
379
+ };
380
+ const signature = await this.wallet.signTransaction(this.config.privateKey, createSubAccountTx);
381
+ const txInfo = { ...createSubAccountTx, Sig: signature };
382
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CREATE_SUB_ACCOUNT, JSON.stringify(txInfo));
383
+ return [txHash.hash, null];
384
+ }
385
+ else {
386
+ // WASM signer doesn't support createSubAccount yet
387
+ throw new Error('createSubAccount not supported with WASM signer. Use signer server instead.');
388
+ }
389
+ }
390
+ catch (error) {
391
+ console.error('Error creating sub account:', error);
392
+ return [null, error instanceof Error ? error.message : 'Unknown error'];
393
+ }
394
+ }
395
+ /**
396
+ * Cancel all orders
397
+ */
398
+ async cancelAllOrders(timeInForce, time, nonce = -1) {
399
+ try {
400
+ // Get next nonce if not provided
401
+ const nextNonce = nonce === -1 ?
402
+ await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex) :
403
+ { nonce };
404
+ if (this.signerType === 'server') {
405
+ // Use server signer
406
+ const cancelAllTx = {
407
+ AccountIndex: this.config.accountIndex,
408
+ ApiKeyIndex: this.config.apiKeyIndex,
409
+ TimeInForce: timeInForce,
410
+ Time: time,
411
+ Nonce: nextNonce.nonce
412
+ };
413
+ const signature = await this.wallet.signTransaction(this.config.privateKey, cancelAllTx);
414
+ const txInfo = { ...cancelAllTx, Sig: signature };
415
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_CANCEL_ALL_ORDERS, JSON.stringify(txInfo));
416
+ return [txHash.hash, null];
417
+ }
418
+ else {
419
+ // Use WASM signer
420
+ const txInfo = await this.wallet.signCancelAllOrders({
421
+ timeInForce,
422
+ time,
423
+ nonce: nextNonce.nonce
424
+ });
425
+ if (txInfo.error) {
426
+ return [null, txInfo.error];
427
+ }
428
+ const txHash = await this.transactionApi.sendTxWithIndices(SignerClient.TX_TYPE_CANCEL_ALL_ORDERS, txInfo.txInfo, this.config.accountIndex, this.config.apiKeyIndex);
429
+ return [txHash.hash, null];
430
+ }
431
+ }
432
+ catch (error) {
433
+ console.error('Error canceling all orders:', error);
434
+ return [null, error instanceof Error ? error.message : 'Unknown error'];
435
+ }
436
+ }
437
+ /**
438
+ * Modify an existing order
439
+ */
440
+ async modifyOrder(marketIndex, orderIndex, baseAmount, price, triggerPrice, nonce = -1) {
441
+ try {
442
+ // Get next nonce if not provided
443
+ const nextNonce = nonce === -1 ?
444
+ await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex) :
445
+ { nonce };
446
+ if (this.signerType === 'server') {
447
+ // Use server signer
448
+ const modifyTx = {
449
+ AccountIndex: this.config.accountIndex,
450
+ ApiKeyIndex: this.config.apiKeyIndex,
451
+ MarketIndex: marketIndex,
452
+ OrderIndex: orderIndex,
453
+ BaseAmount: baseAmount,
454
+ Price: price,
455
+ TriggerPrice: triggerPrice,
456
+ Nonce: nextNonce.nonce
457
+ };
458
+ const signature = await this.wallet.signTransaction(this.config.privateKey, modifyTx);
459
+ const txInfo = { ...modifyTx, Sig: signature };
460
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_MODIFY_ORDER, JSON.stringify(txInfo));
461
+ return [modifyTx, txHash.hash, null];
462
+ }
463
+ else {
464
+ // WASM signer doesn't support modifyOrder yet
465
+ throw new Error('modifyOrder not supported with WASM signer. Use signer server instead.');
466
+ }
467
+ }
468
+ catch (error) {
469
+ console.error('Error modifying order:', error);
470
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
471
+ }
472
+ }
473
+ /**
474
+ * Transfer USDC to another account
475
+ */
476
+ async transfer(toAccountIndex, usdcAmount, nonce = -1) {
477
+ try {
478
+ // Get next nonce if not provided
479
+ const nextNonce = nonce === -1 ?
480
+ await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex) :
481
+ { nonce };
482
+ const scaledAmount = Math.floor(usdcAmount * SignerClient.USDC_TICKER_SCALE);
483
+ if (this.signerType === 'server') {
484
+ // Use server signer
485
+ const transferTx = {
486
+ AccountIndex: this.config.accountIndex,
487
+ ApiKeyIndex: this.config.apiKeyIndex,
488
+ ToAccountIndex: toAccountIndex,
489
+ Amount: scaledAmount,
490
+ Nonce: nextNonce.nonce
491
+ };
492
+ const signature = await this.wallet.signTransaction(this.config.privateKey, transferTx);
493
+ const txInfo = { ...transferTx, Sig: signature };
494
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_TRANSFER, JSON.stringify(txInfo));
495
+ return [transferTx, txHash.hash, null];
496
+ }
497
+ else {
498
+ // Use WASM signer
499
+ const txInfo = await this.wallet.signTransfer({
500
+ toAccountIndex,
501
+ usdcAmount: scaledAmount,
502
+ fee: 0, // fee - should be calculated separately
503
+ memo: 'a'.repeat(32), // memo - 32 bytes required
504
+ nonce: nextNonce.nonce
505
+ });
506
+ if (txInfo.error) {
507
+ return [null, '', txInfo.error];
508
+ }
509
+ const txHash = await this.transactionApi.sendTxWithIndices(SignerClient.TX_TYPE_TRANSFER, txInfo.txInfo, this.config.accountIndex, this.config.apiKeyIndex);
510
+ return [JSON.parse(txInfo.txInfo), txHash.hash, null];
511
+ }
512
+ }
513
+ catch (error) {
514
+ console.error('Error transferring:', error);
515
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
516
+ }
517
+ }
518
+ /**
519
+ * Update leverage for a market
520
+ */
521
+ async updateLeverage(marketIndex, marginMode, initialMarginFraction, nonce = -1) {
522
+ try {
523
+ // Get next nonce if not provided
524
+ const nextNonce = nonce === -1 ?
525
+ await this.transactionApi.getNextNonce(this.config.accountIndex, this.config.apiKeyIndex) :
526
+ { nonce };
527
+ if (this.signerType === 'server') {
528
+ // Use server signer
529
+ const leverageTx = {
530
+ AccountIndex: this.config.accountIndex,
531
+ ApiKeyIndex: this.config.apiKeyIndex,
532
+ MarketIndex: marketIndex,
533
+ MarginMode: marginMode,
534
+ InitialMarginFraction: initialMarginFraction,
535
+ Nonce: nextNonce.nonce
536
+ };
537
+ const signature = await this.wallet.signTransaction(this.config.privateKey, leverageTx);
538
+ const txInfo = { ...leverageTx, Sig: signature };
539
+ const txHash = await this.transactionApi.sendTx(SignerClient.TX_TYPE_UPDATE_LEVERAGE, JSON.stringify(txInfo));
540
+ return [leverageTx, txHash.hash, null];
541
+ }
542
+ else {
543
+ // Use WASM signer
544
+ const txInfo = await this.wallet.signUpdateLeverage({
545
+ marketIndex,
546
+ fraction: initialMarginFraction,
547
+ marginMode,
548
+ nonce: nextNonce.nonce
549
+ });
550
+ if (txInfo.error) {
551
+ return [null, '', txInfo.error];
552
+ }
553
+ const txHash = await this.transactionApi.sendTxWithIndices(SignerClient.TX_TYPE_UPDATE_LEVERAGE, txInfo.txInfo, this.config.accountIndex, this.config.apiKeyIndex);
554
+ return [JSON.parse(txInfo.txInfo), txHash.hash, null];
555
+ }
556
+ }
557
+ catch (error) {
558
+ console.error('Error updating leverage:', error);
559
+ return [null, '', error instanceof Error ? error.message : 'Unknown error'];
560
+ }
561
+ }
562
+ /**
563
+ * Close the API client connection
564
+ */
565
+ async close() {
566
+ await this.apiClient.close();
567
+ }
568
+ }
569
+ exports.SignerClient = SignerClient;
570
+ // Constants from Python SDK
571
+ SignerClient.ORDER_TYPE_LIMIT = 0;
572
+ SignerClient.ORDER_TYPE_MARKET = 1;
573
+ SignerClient.ORDER_TIME_IN_FORCE_GOOD_TILL_TIME = 1;
574
+ SignerClient.ORDER_TIME_IN_FORCE_IMMEDIATE_OR_CANCEL = 0;
575
+ SignerClient.ORDER_TIME_IN_FORCE_FILL_OR_KILL = 2;
576
+ SignerClient.USDC_TICKER_SCALE = 1e6;
577
+ //tx type constants
578
+ SignerClient.TX_TYPE_CHANGE_PUB_KEY = 8;
579
+ SignerClient.TX_TYPE_CREATE_SUB_ACCOUNT = 9;
580
+ SignerClient.TX_TYPE_CREATE_PUBLIC_POOL = 10;
581
+ SignerClient.TX_TYPE_UPDATE_PUBLIC_POOL = 11;
582
+ SignerClient.TX_TYPE_TRANSFER = 12;
583
+ SignerClient.TX_TYPE_WITHDRAW = 13;
584
+ SignerClient.TX_TYPE_CREATE_ORDER = 14;
585
+ SignerClient.TX_TYPE_CANCEL_ORDER = 15;
586
+ SignerClient.TX_TYPE_CANCEL_ALL_ORDERS = 16;
587
+ SignerClient.TX_TYPE_MODIFY_ORDER = 17;
588
+ SignerClient.TX_TYPE_MINT_SHARES = 18;
589
+ SignerClient.TX_TYPE_BURN_SHARES = 19;
590
+ SignerClient.TX_TYPE_UPDATE_LEVERAGE = 20;
591
+ SignerClient.ORDER_TYPE_STOP_LOSS = 2;
592
+ SignerClient.ORDER_TYPE_STOP_LOSS_LIMIT = 3;
593
+ SignerClient.ORDER_TYPE_TAKE_PROFIT = 4;
594
+ SignerClient.ORDER_TYPE_TAKE_PROFIT_LIMIT = 5;
595
+ SignerClient.ORDER_TYPE_TWAP = 6;
596
+ SignerClient.ORDER_TIME_IN_FORCE_POST_ONLY = 2;
597
+ SignerClient.CANCEL_ALL_TIF_IMMEDIATE = 0;
598
+ SignerClient.CANCEL_ALL_TIF_SCHEDULED = 1;
599
+ SignerClient.CANCEL_ALL_TIF_ABORT = 2;
600
+ SignerClient.NIL_TRIGGER_PRICE = 0;
601
+ SignerClient.DEFAULT_28_DAY_ORDER_EXPIRY = -1;
602
+ SignerClient.DEFAULT_IOC_EXPIRY = 0;
603
+ SignerClient.DEFAULT_10_MIN_AUTH_EXPIRY = -1;
604
+ SignerClient.MINUTE = 60;
605
+ SignerClient.CROSS_MARGIN_MODE = 0;
606
+ SignerClient.ISOLATED_MARGIN_MODE = 1;
607
+ //# sourceMappingURL=wasm-signer-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-signer-client.js","sourceRoot":"","sources":["../../src/signer/wasm-signer-client.ts"],"names":[],"mappings":"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"}