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.
- package/LICENSE +21 -0
- package/README.md +440 -0
- package/dist/api/account-api.d.ts +89 -0
- package/dist/api/account-api.d.ts.map +1 -0
- package/dist/api/account-api.js +61 -0
- package/dist/api/account-api.js.map +1 -0
- package/dist/api/api-client.d.ts +23 -0
- package/dist/api/api-client.d.ts.map +1 -0
- package/dist/api/api-client.js +129 -0
- package/dist/api/api-client.js.map +1 -0
- package/dist/api/block-api.d.ts +24 -0
- package/dist/api/block-api.d.ts.map +1 -0
- package/dist/api/block-api.js +22 -0
- package/dist/api/block-api.js.map +1 -0
- package/dist/api/candlestick-api.d.ts +27 -0
- package/dist/api/candlestick-api.d.ts.map +1 -0
- package/dist/api/candlestick-api.js +18 -0
- package/dist/api/candlestick-api.js.map +1 -0
- package/dist/api/order-api.d.ts +76 -0
- package/dist/api/order-api.d.ts.map +1 -0
- package/dist/api/order-api.js +102 -0
- package/dist/api/order-api.js.map +1 -0
- package/dist/api/root-api.d.ts +8 -0
- package/dist/api/root-api.d.ts.map +1 -0
- package/dist/api/root-api.js +14 -0
- package/dist/api/root-api.js.map +1 -0
- package/dist/api/transaction-api.d.ts +58 -0
- package/dist/api/transaction-api.d.ts.map +1 -0
- package/dist/api/transaction-api.js +141 -0
- package/dist/api/transaction-api.js.map +1 -0
- package/dist/api/ws-client.d.ts +21 -0
- package/dist/api/ws-client.d.ts.map +1 -0
- package/dist/api/ws-client.js +139 -0
- package/dist/api/ws-client.js.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +99 -0
- package/dist/index.js.map +1 -0
- package/dist/signer/signer-client.d.ts +79 -0
- package/dist/signer/signer-client.d.ts.map +1 -0
- package/dist/signer/signer-client.js +213 -0
- package/dist/signer/signer-client.js.map +1 -0
- package/dist/signer/wasm-signer-client.d.ts +129 -0
- package/dist/signer/wasm-signer-client.d.ts.map +1 -0
- package/dist/signer/wasm-signer-client.js +607 -0
- package/dist/signer/wasm-signer-client.js.map +1 -0
- package/dist/types/index.d.ts +130 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/api-key-utils.d.ts +7 -0
- package/dist/utils/api-key-utils.d.ts.map +1 -0
- package/dist/utils/api-key-utils.js +31 -0
- package/dist/utils/api-key-utils.js.map +1 -0
- package/dist/utils/configuration.d.ts +19 -0
- package/dist/utils/configuration.d.ts.map +1 -0
- package/dist/utils/configuration.js +55 -0
- package/dist/utils/configuration.js.map +1 -0
- package/dist/utils/exceptions.d.ts +33 -0
- package/dist/utils/exceptions.d.ts.map +1 -0
- package/dist/utils/exceptions.js +76 -0
- package/dist/utils/exceptions.js.map +1 -0
- package/dist/utils/node-wasm-signer.d.ts +126 -0
- package/dist/utils/node-wasm-signer.d.ts.map +1 -0
- package/dist/utils/node-wasm-signer.js +286 -0
- package/dist/utils/node-wasm-signer.js.map +1 -0
- package/dist/utils/signer-server.d.ts +18 -0
- package/dist/utils/signer-server.d.ts.map +1 -0
- package/dist/utils/signer-server.js +79 -0
- package/dist/utils/signer-server.js.map +1 -0
- package/dist/utils/signer.d.ts +15 -0
- package/dist/utils/signer.d.ts.map +1 -0
- package/dist/utils/signer.js +68 -0
- package/dist/utils/signer.js.map +1 -0
- package/dist/utils/wasm-signer.d.ts +130 -0
- package/dist/utils/wasm-signer.d.ts.map +1 -0
- package/dist/utils/wasm-signer.js +178 -0
- package/dist/utils/wasm-signer.js.map +1 -0
- package/docs/API.md +195 -0
- package/docs/AccountApi.md +220 -0
- package/docs/GettingStarted.md +261 -0
- package/docs/OrderApi.md +199 -0
- package/docs/SignerClient.md +326 -0
- package/docs/TransactionApi.md +312 -0
- package/docs/WsClient.md +275 -0
- package/docs/types/Account.md +67 -0
- package/docs/types/ApiKeyPair.md +33 -0
- package/docs/types/CreateOrderParams.md +47 -0
- package/docs/types/MarketOrderParams.md +36 -0
- package/docs/types/SignerConfig.md +40 -0
- package/docs/types/WasmSignerConfig.md +30 -0
- package/examples/README.md +171 -0
- package/examples/account_info.ts +12 -0
- package/examples/create_cancel_order.ts +74 -0
- package/examples/create_market_order.ts +42 -0
- package/examples/create_market_order_max_slippage.ts +43 -0
- package/examples/create_sl_tp.ts +61 -0
- package/examples/create_with_multiple_keys.ts +58 -0
- package/examples/get_info.ts +58 -0
- package/examples/send_tx_batch.ts +87 -0
- package/examples/system_setup.ts +96 -0
- package/examples/transfer_update_leverage.ts +53 -0
- package/examples/ws.ts +24 -0
- package/examples/ws_async.ts +39 -0
- package/examples/ws_send_batch_tx.ts +113 -0
- package/examples/ws_send_tx.ts +94 -0
- package/package.json +71 -0
- package/wasm/lighter-signer.wasm +0 -0
- package/wasm/wasm_exec.js +402 -0
- 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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"}
|