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,402 @@
1
+ // Go WASM runtime for Node.js
2
+ // This is a Node.js-compatible version of wasm_exec.js
3
+
4
+ const fs = require('fs');
5
+ const crypto = require('crypto');
6
+
7
+ if (typeof global !== 'undefined') {
8
+ global.require = require;
9
+ global.fs = fs;
10
+ global.crypto = crypto;
11
+ }
12
+
13
+ const encoder = new TextEncoder('utf-8');
14
+ const decoder = new TextDecoder('utf-8');
15
+
16
+ let mem;
17
+ let offset = 1024;
18
+ let heap;
19
+ let heapNext;
20
+
21
+ const ID = function() { return id++; };
22
+ let id = 1;
23
+
24
+ const int32 = new Int32Array(2);
25
+ const float64 = new Float64Array(int32.buffer);
26
+
27
+ const setInt64 = (addr, v) => {
28
+ int32[0] = v;
29
+ int32[1] = v / 4294967296;
30
+ mem.set(int32, addr);
31
+ };
32
+
33
+ const getInt64 = (addr) => {
34
+ mem.copy(int32, 0, addr, addr + 8);
35
+ return int32[0] + int32[1] * 4294967296;
36
+ };
37
+
38
+ const setInt32 = (addr, v) => {
39
+ mem.setInt32(addr, v, true);
40
+ };
41
+
42
+ const getInt32 = (addr) => {
43
+ return mem.getInt32(addr, true);
44
+ };
45
+
46
+ const setUint32 = (addr, v) => {
47
+ mem.setUint32(addr, v, true);
48
+ };
49
+
50
+ const getUint32 = (addr) => {
51
+ return mem.getUint32(addr, true);
52
+ };
53
+
54
+ const setFloat64 = (addr, v) => {
55
+ float64[0] = v;
56
+ mem.set(float64, addr);
57
+ };
58
+
59
+ const getFloat64 = (addr) => {
60
+ mem.copy(float64, 0, addr, addr + 8);
61
+ return float64[0];
62
+ };
63
+
64
+ const loadValue = (addr) => {
65
+ const f = getFloat64(addr);
66
+ if (f === 0) {
67
+ return undefined;
68
+ }
69
+ if (!isNaN(f)) {
70
+ return f;
71
+ }
72
+
73
+ const id = getUint32(addr);
74
+ return this._values[id];
75
+ };
76
+
77
+ const storeValue = (addr, v) => {
78
+ const nanHead = 0x7FF80000;
79
+
80
+ if (typeof v === 'number') {
81
+ if (isNaN(v)) {
82
+ setInt32(addr + 4, nanHead);
83
+ setInt32(addr, 0);
84
+ return;
85
+ }
86
+ if (v === 0) {
87
+ setInt32(addr + 4, nanHead);
88
+ setInt32(addr, 1);
89
+ return;
90
+ }
91
+ setFloat64(addr, v);
92
+ return;
93
+ }
94
+
95
+ switch (v) {
96
+ case undefined:
97
+ setFloat64(addr, 0);
98
+ return;
99
+ case null:
100
+ setInt32(addr + 4, nanHead);
101
+ setInt32(addr, 2);
102
+ return;
103
+ case true:
104
+ setInt32(addr + 4, nanHead);
105
+ setInt32(addr, 3);
106
+ return;
107
+ case false:
108
+ setInt32(addr + 4, nanHead);
109
+ setInt32(addr, 4);
110
+ return;
111
+ }
112
+
113
+ let ref = this._refs.get(v);
114
+ if (ref === undefined) {
115
+ ref = this._values.length;
116
+ this._values.push(v);
117
+ this._refs.set(v, ref);
118
+ }
119
+ let typeFlag = 0;
120
+ switch (typeof v) {
121
+ case 'string':
122
+ typeFlag = 1;
123
+ break;
124
+ case 'symbol':
125
+ typeFlag = 2;
126
+ break;
127
+ case 'function':
128
+ typeFlag = 3;
129
+ break;
130
+ }
131
+ setInt32(addr + 4, nanHead | typeFlag);
132
+ setInt32(addr, ref);
133
+ };
134
+
135
+ const loadSlice = (addr) => {
136
+ const array = getInt64(addr + 0);
137
+ const len = getInt64(addr + 8);
138
+ return new Uint8Array(this._inst.exports.mem.buffer, array, len);
139
+ };
140
+
141
+ const loadSliceOfValues = (addr) => {
142
+ const array = getInt64(addr + 0);
143
+ const len = getInt64(addr + 8);
144
+ const a = new Array(len);
145
+ for (let i = 0; i < len; i++) {
146
+ a[i] = loadValue(array + i * 8);
147
+ }
148
+ return a;
149
+ };
150
+
151
+ const loadString = (addr) => {
152
+ const saddr = getInt64(addr + 0);
153
+ const len = getInt64(addr + 8);
154
+ return decoder.decode(new Uint8Array(this._inst.exports.mem.buffer, saddr, len));
155
+ };
156
+
157
+ const timeOrigin = Date.now() - performance.now();
158
+
159
+ const imports = {
160
+ go: {
161
+ // Go's runtime functions
162
+ 'runtime.wasmExit': (sp) => {
163
+ const code = mem.getInt32(sp + 8, true);
164
+ this.exited = true;
165
+ delete this._inst;
166
+ delete this._values;
167
+ delete this._refs;
168
+ delete this._goRefCounts;
169
+ delete this._ids;
170
+ delete this._idPool;
171
+ this.exit(code);
172
+ },
173
+
174
+ 'runtime.wasmWrite': (sp) => {
175
+ const fd = getInt32(sp + 8);
176
+ const p = getInt64(sp + 16);
177
+ const n = mem.getInt32(sp + 24, true);
178
+ fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
179
+ },
180
+
181
+ 'runtime.resetMemoryDataView': (sp) => {
182
+ mem = new DataView(this._inst.exports.mem.buffer);
183
+ },
184
+
185
+ 'runtime.nanotime1': (sp) => {
186
+ setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
187
+ },
188
+
189
+ 'runtime.walltime': (sp) => {
190
+ const msec = (new Date).getTime();
191
+ setInt64(sp + 8, msec / 1000);
192
+ mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
193
+ },
194
+
195
+ 'runtime.scheduleTimeoutEvent': (sp) => {
196
+ const id = this._nextCallbackTimeoutID;
197
+ this._nextCallbackTimeoutID++;
198
+ const delay = getInt64(sp + 8);
199
+ setTimeout(() => {
200
+ this._resume();
201
+ while (this._scheduledTimeouts.has(id)) {
202
+ this._scheduledTimeouts.delete(id);
203
+ const toCall = this._scheduledTimeouts.get(id);
204
+ toCall();
205
+ }
206
+ }, delay);
207
+ this._scheduledTimeouts.set(id, null);
208
+ setInt64(sp + 16, id);
209
+ },
210
+
211
+ 'runtime.clearTimeoutEvent': (sp) => {
212
+ const id = getInt64(sp + 8);
213
+ this._scheduledTimeouts.delete(id);
214
+ },
215
+
216
+ 'runtime.getRandomData': (sp) => {
217
+ const r = new Uint8Array(16);
218
+ crypto.randomFillSync(r);
219
+ const ptr = getInt64(sp + 8);
220
+ mem.set(r, ptr);
221
+ },
222
+
223
+ // syscall/js functions
224
+ 'syscall/js.finalizeRef': (sp) => {
225
+ const id = getInt64(sp + 8);
226
+ this._goRefCounts[id]--;
227
+ if (this._goRefCounts[id] === 0) {
228
+ const v = this._values[id];
229
+ this._values[id] = null;
230
+ this._refs.delete(v);
231
+ }
232
+ },
233
+
234
+ 'syscall/js.stringVal': (sp) => {
235
+ this.storeValue(sp + 24, loadString(sp + 8));
236
+ },
237
+
238
+ 'syscall/js.valueGet': (sp) => {
239
+ const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
240
+ this.storeValue(sp + 32, result);
241
+ },
242
+
243
+ 'syscall/js.valueSet': (sp) => {
244
+ Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 24));
245
+ },
246
+
247
+ 'syscall/js.valueCall': (sp) => {
248
+ const v = loadValue(sp + 8);
249
+ const m = loadValue(sp + 16);
250
+ const args = loadSliceOfValues(sp + 32);
251
+ const result = Reflect.apply(m, v, args);
252
+ this.storeValue(sp + 40, result);
253
+ },
254
+
255
+ 'syscall/js.valueInvoke': (sp) => {
256
+ const v = loadValue(sp + 8);
257
+ const args = loadSliceOfValues(sp + 16);
258
+ const result = Reflect.apply(v, undefined, args);
259
+ this.storeValue(sp + 24, result);
260
+ },
261
+
262
+ 'syscall/js.valueNew': (sp) => {
263
+ const v = loadValue(sp + 8);
264
+ const args = loadSliceOfValues(sp + 16);
265
+ const result = Reflect.construct(v, args);
266
+ this.storeValue(sp + 24, result);
267
+ },
268
+
269
+ 'syscall/js.valueIndex': (sp) => {
270
+ const v = loadValue(sp + 8);
271
+ const i = getInt64(sp + 16);
272
+ this.storeValue(sp + 24, Reflect.get(v, i));
273
+ },
274
+
275
+ 'syscall/js.valueSetIndex': (sp) => {
276
+ const v = loadValue(sp + 8);
277
+ const i = getInt64(sp + 16);
278
+ const x = loadValue(sp + 24);
279
+ Reflect.set(v, i, x);
280
+ },
281
+
282
+ 'syscall/js.valueLength': (sp) => {
283
+ setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
284
+ },
285
+
286
+ 'syscall/js.valuePrepareString': (sp) => {
287
+ const str = encoder.encode(loadString(sp + 8));
288
+ const ptr = this._malloc(str.length + 1);
289
+ mem.set(str, ptr);
290
+ mem.setUint8(ptr + str.length, 0);
291
+ setInt64(sp + 16, ptr);
292
+ },
293
+
294
+ 'syscall/js.valueLoadString': (sp) => {
295
+ const ptr = getInt64(sp + 8);
296
+ const len = getInt64(sp + 16);
297
+ this.storeValue(sp + 24, decoder.decode(new Uint8Array(this._inst.exports.mem.buffer, ptr, len)));
298
+ },
299
+
300
+ 'syscall/js.valueInstanceOf': (sp) => {
301
+ const v = loadValue(sp + 8);
302
+ const t = loadValue(sp + 16);
303
+ this.storeValue(sp + 24, v instanceof t);
304
+ },
305
+
306
+ 'syscall/js.valueCopyBytesToGo': (sp) => {
307
+ const dst = new Uint8Array(this._inst.exports.mem.buffer, getInt64(sp + 8), getInt64(sp + 16));
308
+ const src = loadSlice(sp + 24);
309
+ dst.set(src);
310
+ },
311
+
312
+ 'syscall/js.valueCopyBytesToJS': (sp) => {
313
+ const dst = loadSlice(sp + 8);
314
+ const src = new Uint8Array(this._inst.exports.mem.buffer, getInt64(sp + 16), getInt64(sp + 24));
315
+ dst.set(src);
316
+ },
317
+
318
+ 'debug': (value) => {
319
+ console.log(value);
320
+ },
321
+ },
322
+ };
323
+
324
+ class Go {
325
+ constructor() {
326
+ this.argv = ['js'];
327
+ this.env = {};
328
+ this.exit = process.exit;
329
+ this._callbackTimeouts = new Map();
330
+ this._nextCallbackTimeoutID = 1;
331
+
332
+ this._inst = null;
333
+ this._values = [];
334
+ this._refs = new Map();
335
+ this._goRefCounts = new Map();
336
+ this._ids = new Map();
337
+ this._idPool = [];
338
+ this._scheduledTimeouts = new Map();
339
+ this._exited = false;
340
+
341
+ this._resume = () => {
342
+ if (this.exited) {
343
+ throw new Error('bad callback: Go program has already exited');
344
+ }
345
+ this._inst.exports.resume();
346
+ };
347
+
348
+ this._makeFuncWrapper = (id) => {
349
+ const go = this;
350
+ return function() {
351
+ const event = { id: id, this: this, args: arguments };
352
+ go._resume();
353
+ return event.result;
354
+ };
355
+ };
356
+ }
357
+
358
+ run(instance) {
359
+ this._inst = instance;
360
+ this._values = [];
361
+ this._refs = new Map();
362
+ this._goRefCounts = new Map();
363
+ this._ids = new Map();
364
+ this._idPool = [];
365
+ this._scheduledTimeouts = new Map();
366
+
367
+ const mem = new DataView(instance.exports.mem.buffer);
368
+ offset = 4096;
369
+
370
+ this._inst.exports.run();
371
+ this._resume();
372
+ }
373
+
374
+ _malloc(size) {
375
+ if (this._idPool.length > 0) {
376
+ const id = this._idPool.pop();
377
+ this._ids.set(id, size);
378
+ return id;
379
+ }
380
+ const id = this._nextCallbackTimeoutID++;
381
+ this._ids.set(id, size);
382
+ return id;
383
+ }
384
+
385
+ _free(ptr) {
386
+ const size = this._ids.get(ptr);
387
+ this._ids.delete(ptr);
388
+ this._idPool.push(ptr);
389
+ return size;
390
+ }
391
+
392
+ get importObject() {
393
+ return imports;
394
+ }
395
+ }
396
+
397
+ if (typeof module !== 'undefined' && module.exports) {
398
+ module.exports = { Go };
399
+ } else if (typeof global !== 'undefined') {
400
+ global.Go = Go;
401
+ }
402
+