extended-typescript-sdk 0.0.1

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 (173) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +445 -0
  3. package/dist/config.d.ts +11 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +15 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/errors.d.ts +25 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +45 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +39 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +142 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/perpetual/accounts.d.ts +88 -0
  16. package/dist/perpetual/accounts.d.ts.map +1 -0
  17. package/dist/perpetual/accounts.js +152 -0
  18. package/dist/perpetual/accounts.js.map +1 -0
  19. package/dist/perpetual/amounts.d.ts +41 -0
  20. package/dist/perpetual/amounts.d.ts.map +1 -0
  21. package/dist/perpetual/amounts.js +79 -0
  22. package/dist/perpetual/amounts.js.map +1 -0
  23. package/dist/perpetual/assets.d.ts +74 -0
  24. package/dist/perpetual/assets.d.ts.map +1 -0
  25. package/dist/perpetual/assets.js +119 -0
  26. package/dist/perpetual/assets.js.map +1 -0
  27. package/dist/perpetual/bridges.d.ts +29 -0
  28. package/dist/perpetual/bridges.d.ts.map +1 -0
  29. package/dist/perpetual/bridges.js +45 -0
  30. package/dist/perpetual/bridges.js.map +1 -0
  31. package/dist/perpetual/candles.d.ts +26 -0
  32. package/dist/perpetual/candles.d.ts.map +1 -0
  33. package/dist/perpetual/candles.js +29 -0
  34. package/dist/perpetual/candles.js.map +1 -0
  35. package/dist/perpetual/clients.d.ts +15 -0
  36. package/dist/perpetual/clients.d.ts.map +1 -0
  37. package/dist/perpetual/clients.js +25 -0
  38. package/dist/perpetual/clients.js.map +1 -0
  39. package/dist/perpetual/configuration.d.ts +39 -0
  40. package/dist/perpetual/configuration.d.ts.map +1 -0
  41. package/dist/perpetual/configuration.js +61 -0
  42. package/dist/perpetual/configuration.js.map +1 -0
  43. package/dist/perpetual/crypto/signer.d.ts +164 -0
  44. package/dist/perpetual/crypto/signer.d.ts.map +1 -0
  45. package/dist/perpetual/crypto/signer.js +318 -0
  46. package/dist/perpetual/crypto/signer.js.map +1 -0
  47. package/dist/perpetual/fees.d.ts +20 -0
  48. package/dist/perpetual/fees.d.ts.map +1 -0
  49. package/dist/perpetual/fees.js +35 -0
  50. package/dist/perpetual/fees.js.map +1 -0
  51. package/dist/perpetual/funding-rates.d.ts +15 -0
  52. package/dist/perpetual/funding-rates.d.ts.map +1 -0
  53. package/dist/perpetual/funding-rates.js +23 -0
  54. package/dist/perpetual/funding-rates.js.map +1 -0
  55. package/dist/perpetual/markets.d.ts +83 -0
  56. package/dist/perpetual/markets.d.ts.map +1 -0
  57. package/dist/perpetual/markets.js +124 -0
  58. package/dist/perpetual/markets.js.map +1 -0
  59. package/dist/perpetual/order-object-settlement.d.ts +43 -0
  60. package/dist/perpetual/order-object-settlement.d.ts.map +1 -0
  61. package/dist/perpetual/order-object-settlement.js +121 -0
  62. package/dist/perpetual/order-object-settlement.js.map +1 -0
  63. package/dist/perpetual/order-object.d.ts +38 -0
  64. package/dist/perpetual/order-object.d.ts.map +1 -0
  65. package/dist/perpetual/order-object.js +90 -0
  66. package/dist/perpetual/order-object.js.map +1 -0
  67. package/dist/perpetual/orderbooks.d.ts +23 -0
  68. package/dist/perpetual/orderbooks.d.ts.map +1 -0
  69. package/dist/perpetual/orderbooks.js +36 -0
  70. package/dist/perpetual/orderbooks.js.map +1 -0
  71. package/dist/perpetual/orders.d.ts +207 -0
  72. package/dist/perpetual/orders.d.ts.map +1 -0
  73. package/dist/perpetual/orders.js +266 -0
  74. package/dist/perpetual/orders.js.map +1 -0
  75. package/dist/perpetual/positions.d.ts +80 -0
  76. package/dist/perpetual/positions.d.ts.map +1 -0
  77. package/dist/perpetual/positions.js +94 -0
  78. package/dist/perpetual/positions.js.map +1 -0
  79. package/dist/perpetual/stream-client/perpetual-stream-connection.d.ts +47 -0
  80. package/dist/perpetual/stream-client/perpetual-stream-connection.d.ts.map +1 -0
  81. package/dist/perpetual/stream-client/perpetual-stream-connection.js +125 -0
  82. package/dist/perpetual/stream-client/perpetual-stream-connection.js.map +1 -0
  83. package/dist/perpetual/stream-client/stream-client.d.ts +46 -0
  84. package/dist/perpetual/stream-client/stream-client.d.ts.map +1 -0
  85. package/dist/perpetual/stream-client/stream-client.js +79 -0
  86. package/dist/perpetual/stream-client/stream-client.js.map +1 -0
  87. package/dist/perpetual/trades.d.ts +44 -0
  88. package/dist/perpetual/trades.d.ts.map +1 -0
  89. package/dist/perpetual/trades.js +48 -0
  90. package/dist/perpetual/trades.js.map +1 -0
  91. package/dist/perpetual/trading-client/account-module.d.ts +192 -0
  92. package/dist/perpetual/trading-client/account-module.d.ts.map +1 -0
  93. package/dist/perpetual/trading-client/account-module.js +357 -0
  94. package/dist/perpetual/trading-client/account-module.js.map +1 -0
  95. package/dist/perpetual/trading-client/base-module.d.ts +27 -0
  96. package/dist/perpetual/trading-client/base-module.d.ts.map +1 -0
  97. package/dist/perpetual/trading-client/base-module.js +49 -0
  98. package/dist/perpetual/trading-client/base-module.js.map +1 -0
  99. package/dist/perpetual/trading-client/info-module.d.ts +24 -0
  100. package/dist/perpetual/trading-client/info-module.d.ts.map +1 -0
  101. package/dist/perpetual/trading-client/info-module.js +33 -0
  102. package/dist/perpetual/trading-client/info-module.js.map +1 -0
  103. package/dist/perpetual/trading-client/markets-information-module.d.ts +53 -0
  104. package/dist/perpetual/trading-client/markets-information-module.d.ts.map +1 -0
  105. package/dist/perpetual/trading-client/markets-information-module.js +106 -0
  106. package/dist/perpetual/trading-client/markets-information-module.js.map +1 -0
  107. package/dist/perpetual/trading-client/order-management-module.d.ts +40 -0
  108. package/dist/perpetual/trading-client/order-management-module.d.ts.map +1 -0
  109. package/dist/perpetual/trading-client/order-management-module.js +71 -0
  110. package/dist/perpetual/trading-client/order-management-module.js.map +1 -0
  111. package/dist/perpetual/trading-client/testnet-module.d.ts +27 -0
  112. package/dist/perpetual/trading-client/testnet-module.d.ts.map +1 -0
  113. package/dist/perpetual/trading-client/testnet-module.js +45 -0
  114. package/dist/perpetual/trading-client/testnet-module.js.map +1 -0
  115. package/dist/perpetual/trading-client/trading-client.d.ts +75 -0
  116. package/dist/perpetual/trading-client/trading-client.d.ts.map +1 -0
  117. package/dist/perpetual/trading-client/trading-client.js +115 -0
  118. package/dist/perpetual/trading-client/trading-client.js.map +1 -0
  119. package/dist/perpetual/transfer-object.d.ts +12 -0
  120. package/dist/perpetual/transfer-object.d.ts.map +1 -0
  121. package/dist/perpetual/transfer-object.js +57 -0
  122. package/dist/perpetual/transfer-object.js.map +1 -0
  123. package/dist/perpetual/transfers.d.ts +54 -0
  124. package/dist/perpetual/transfers.d.ts.map +1 -0
  125. package/dist/perpetual/transfers.js +90 -0
  126. package/dist/perpetual/transfers.js.map +1 -0
  127. package/dist/perpetual/user-client/onboarding.d.ts +101 -0
  128. package/dist/perpetual/user-client/onboarding.d.ts.map +1 -0
  129. package/dist/perpetual/user-client/onboarding.js +247 -0
  130. package/dist/perpetual/user-client/onboarding.js.map +1 -0
  131. package/dist/perpetual/user-client/user-client.d.ts +45 -0
  132. package/dist/perpetual/user-client/user-client.d.ts.map +1 -0
  133. package/dist/perpetual/user-client/user-client.js +185 -0
  134. package/dist/perpetual/user-client/user-client.js.map +1 -0
  135. package/dist/perpetual/withdrawal-object.d.ts +12 -0
  136. package/dist/perpetual/withdrawal-object.d.ts.map +1 -0
  137. package/dist/perpetual/withdrawal-object.js +51 -0
  138. package/dist/perpetual/withdrawal-object.js.map +1 -0
  139. package/dist/perpetual/withdrawals.d.ts +40 -0
  140. package/dist/perpetual/withdrawals.d.ts.map +1 -0
  141. package/dist/perpetual/withdrawals.js +65 -0
  142. package/dist/perpetual/withdrawals.js.map +1 -0
  143. package/dist/utils/date.d.ts +13 -0
  144. package/dist/utils/date.d.ts.map +1 -0
  145. package/dist/utils/date.js +21 -0
  146. package/dist/utils/date.js.map +1 -0
  147. package/dist/utils/env.d.ts +50 -0
  148. package/dist/utils/env.d.ts.map +1 -0
  149. package/dist/utils/env.js +157 -0
  150. package/dist/utils/env.js.map +1 -0
  151. package/dist/utils/http.d.ts +98 -0
  152. package/dist/utils/http.d.ts.map +1 -0
  153. package/dist/utils/http.js +290 -0
  154. package/dist/utils/http.js.map +1 -0
  155. package/dist/utils/model.d.ts +35 -0
  156. package/dist/utils/model.d.ts.map +1 -0
  157. package/dist/utils/model.js +86 -0
  158. package/dist/utils/model.js.map +1 -0
  159. package/dist/utils/nonce.d.ts +9 -0
  160. package/dist/utils/nonce.d.ts.map +1 -0
  161. package/dist/utils/nonce.js +14 -0
  162. package/dist/utils/nonce.js.map +1 -0
  163. package/dist/utils/string.d.ts +10 -0
  164. package/dist/utils/string.d.ts.map +1 -0
  165. package/dist/utils/string.js +20 -0
  166. package/dist/utils/string.js.map +1 -0
  167. package/package.json +56 -0
  168. package/wasm/stark_crypto_wasm-web.js +5 -0
  169. package/wasm/stark_crypto_wasm.d-web.ts +63 -0
  170. package/wasm/stark_crypto_wasm.d.ts +63 -0
  171. package/wasm/stark_crypto_wasm.js +362 -0
  172. package/wasm/stark_crypto_wasm_bg-web.wasm +0 -0
  173. package/wasm/stark_crypto_wasm_bg.wasm +0 -0
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ /**
3
+ * WASM-based Stark crypto signer
4
+ *
5
+ * This module provides fast cryptographic operations using WebAssembly
6
+ * compiled from Rust. The WASM signer is shipped with the SDK and works
7
+ * in both Node.js and browser environments.
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.initWasm = initWasm;
44
+ exports.sign = sign;
45
+ exports.pedersenHash = pedersenHash;
46
+ exports.generateKeypairFromEthSignature = generateKeypairFromEthSignature;
47
+ exports.getOrderMsgHash = getOrderMsgHash;
48
+ exports.getTransferMsgHash = getTransferMsgHash;
49
+ exports.getWithdrawalMsgHash = getWithdrawalMsgHash;
50
+ let wasmModule = null;
51
+ let isInitialized = false;
52
+ /**
53
+ * Initialize the WASM cryptographic module
54
+ *
55
+ * **MUST be called before using any signing or hashing functions.**
56
+ * This function loads the WebAssembly module that provides fast cryptographic operations.
57
+ *
58
+ * @throws Error if WASM module cannot be loaded
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * import { initWasm, sign } from 'extended-typescript-sdk';
63
+ *
64
+ * async function main() {
65
+ * await initWasm(); // Initialize first!
66
+ * const [r, s] = sign(privateKey, msgHash);
67
+ * }
68
+ * ```
69
+ */
70
+ async function initWasm() {
71
+ if (isInitialized) {
72
+ return;
73
+ }
74
+ try {
75
+ // Load local WASM build from shipped wasm/ folder
76
+ // Supports both Node.js and browser environments
77
+ // Detect Node.js: check for process.versions.node (not just process, as bundlers may polyfill it)
78
+ const isNode = typeof process !== 'undefined' &&
79
+ process.versions &&
80
+ typeof process.versions.node === 'string' &&
81
+ typeof require !== 'undefined';
82
+ if (isNode) {
83
+ // Node.js environment - use require/fs
84
+ const path = require('path');
85
+ const fs = require('fs');
86
+ let wasmPath;
87
+ // Try shipped wasm/ folder first (included in npm package)
88
+ const possiblePaths = [
89
+ path.join(__dirname, '../../wasm/stark_crypto_wasm'),
90
+ path.join(process.cwd(), 'wasm/stark_crypto_wasm'),
91
+ path.join(process.cwd(), 'node_modules/extended-typescript-sdk/wasm/stark_crypto_wasm'),
92
+ // Fallback to build directory (for development)
93
+ path.join(__dirname, '../../wasm-signer/pkg/stark_crypto_wasm'),
94
+ path.join(process.cwd(), 'wasm-signer/pkg/stark_crypto_wasm'),
95
+ ];
96
+ for (const testPath of possiblePaths) {
97
+ if (fs.existsSync(testPath + '.js') || fs.existsSync(testPath + '.d.ts')) {
98
+ wasmPath = testPath;
99
+ break;
100
+ }
101
+ }
102
+ if (!wasmPath) {
103
+ throw new Error(`WASM module not found. Tried: ${possiblePaths.join(', ')}\n` +
104
+ `Please run: npm run build:signer\n` +
105
+ `Or if you want to build your own: npm run build:signer:custom`);
106
+ }
107
+ wasmModule = await Promise.resolve(`${wasmPath}`).then(s => __importStar(require(s)));
108
+ // Initialize the WASM module
109
+ if (wasmModule.init) {
110
+ wasmModule.init();
111
+ }
112
+ }
113
+ else {
114
+ // Browser environment - use dynamic import
115
+ // Try to load from wasm/ folder (bundler will handle this)
116
+ try {
117
+ // For browser, we expect the bundler to handle WASM imports
118
+ // The bundler should resolve wasm/stark_crypto_wasm-web.js
119
+ // @ts-expect-error - Dynamic import resolved at runtime by bundler
120
+ wasmModule = await Promise.resolve().then(() => __importStar(require('../../wasm/stark_crypto_wasm-web')));
121
+ if (wasmModule.init) {
122
+ await wasmModule.init();
123
+ }
124
+ }
125
+ catch (browserError) {
126
+ // Fallback: try without -web suffix (for custom builds)
127
+ try {
128
+ // @ts-expect-error - Dynamic import resolved at runtime by bundler
129
+ wasmModule = await Promise.resolve().then(() => __importStar(require('../../wasm/stark_crypto_wasm')));
130
+ if (wasmModule.init) {
131
+ await wasmModule.init();
132
+ }
133
+ }
134
+ catch (fallbackError) {
135
+ throw new Error(`Failed to load WASM module in browser environment.\n` +
136
+ `Make sure to build with browser target: npm run build:signer\n` +
137
+ `Error: ${browserError.message || browserError}`);
138
+ }
139
+ }
140
+ }
141
+ isInitialized = true;
142
+ }
143
+ catch (error) {
144
+ throw new Error(`Failed to initialize WASM module.\n` +
145
+ `The SDK should ship with pre-built WASM files. If you're developing, run: npm run build:signer\n` +
146
+ `Error: ${error?.message || error}`);
147
+ }
148
+ }
149
+ /**
150
+ * Check if WASM module is initialized
151
+ */
152
+ function ensureInitialized() {
153
+ if (!isInitialized || !wasmModule) {
154
+ throw new Error('WASM module not initialized. Call initWasm() first.');
155
+ }
156
+ }
157
+ /**
158
+ * Sign a message hash using ECDSA
159
+ *
160
+ * This function signs a message hash using the StarkNet private key.
161
+ * Returns the signature as a tuple [r, s] where both are BigInt values.
162
+ * Compatible with Extended Exchange API.
163
+ *
164
+ * @param privateKey - StarkNet private key as BigInt
165
+ * @param msgHash - Message hash to sign as BigInt
166
+ * @returns Tuple [r, s] representing the ECDSA signature
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * await initWasm();
171
+ * const privateKey = BigInt('0x...');
172
+ * const msgHash = BigInt('0x...');
173
+ * const [r, s] = sign(privateKey, msgHash);
174
+ * ```
175
+ */
176
+ function sign(privateKey, msgHash) {
177
+ ensureInitialized();
178
+ const privHex = '0x' + privateKey.toString(16);
179
+ const hashHex = '0x' + msgHash.toString(16);
180
+ // Use local WASM for signing
181
+ if (!wasmModule.sign) {
182
+ throw new Error('WASM sign function not available. Make sure the WASM module is properly built.');
183
+ }
184
+ const result = wasmModule.sign(privHex, hashHex);
185
+ // Convert string results to bigint
186
+ const r = BigInt(result[0]);
187
+ const s = BigInt(result[1]);
188
+ return [r, s];
189
+ }
190
+ /**
191
+ * Compute Pedersen hash of two field elements
192
+ *
193
+ * Pedersen hash is used extensively in StarkNet for hashing operations.
194
+ * Compatible with Extended Exchange API.
195
+ *
196
+ * @param a - First field element as BigInt
197
+ * @param b - Second field element as BigInt
198
+ * @returns Pedersen hash as BigInt
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * await initWasm();
203
+ * const hash = pedersenHash(BigInt('0x123'), BigInt('0x456'));
204
+ * ```
205
+ */
206
+ function pedersenHash(a, b) {
207
+ ensureInitialized();
208
+ if (!wasmModule.pedersen_hash) {
209
+ throw new Error('WASM pedersen_hash function not available.');
210
+ }
211
+ // Convert bigint to hex string (with 0x prefix)
212
+ // Field elements are 251 bits, so we use the natural hex representation
213
+ const aHex = '0x' + a.toString(16);
214
+ const bHex = '0x' + b.toString(16);
215
+ const result = wasmModule.pedersen_hash(aHex, bHex);
216
+ // Remove '0x' prefix if present
217
+ const cleanResult = result.startsWith('0x') ? result.slice(2) : result;
218
+ return BigInt('0x' + cleanResult);
219
+ }
220
+ /**
221
+ * Generate StarkNet keypair from Ethereum signature
222
+ *
223
+ * Derives a StarkNet keypair from an Ethereum signature using key grinding.
224
+ * Used during account onboarding to create L2 keys from L1 Ethereum account.
225
+ * Compatible with Extended Exchange API.
226
+ *
227
+ * @param ethSignature - Ethereum signature as hex string (65 bytes: r(32) + s(32) + v(1))
228
+ * @returns Tuple [privateKey, publicKey] as BigInt values
229
+ *
230
+ * @example
231
+ * ```typescript
232
+ * await initWasm();
233
+ * const ethSig = '0x...'; // 65-byte hex string
234
+ * const [privateKey, publicKey] = generateKeypairFromEthSignature(ethSig);
235
+ * ```
236
+ */
237
+ function generateKeypairFromEthSignature(ethSignature) {
238
+ ensureInitialized();
239
+ if (!wasmModule.generate_keypair_from_eth_signature) {
240
+ throw new Error('WASM generate_keypair_from_eth_signature function not available.');
241
+ }
242
+ const result = wasmModule.generate_keypair_from_eth_signature(ethSignature);
243
+ // Convert string results to bigint
244
+ const privateKey = BigInt(result[0]);
245
+ const publicKey = BigInt(result[1]);
246
+ return [privateKey, publicKey];
247
+ }
248
+ /**
249
+ * Generate message hash for an order
250
+ *
251
+ * Creates a structured hash for order signing compatible with Extended Exchange API.
252
+ * This hash is used to sign orders before submitting them to the exchange.
253
+ *
254
+ * @param params - Order parameters including position, assets, amounts, expiration, etc.
255
+ * @returns Message hash as BigInt that can be signed with sign()
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * await initWasm();
260
+ * const orderHash = getOrderMsgHash({
261
+ * positionId: 12345,
262
+ * baseAssetId: '0x...',
263
+ * baseAmount: '1000000',
264
+ * // ... other parameters
265
+ * });
266
+ * const [r, s] = sign(privateKey, orderHash);
267
+ * ```
268
+ */
269
+ function getOrderMsgHash(params) {
270
+ ensureInitialized();
271
+ if (!wasmModule.get_order_msg_hash) {
272
+ throw new Error('WASM get_order_msg_hash function not available.');
273
+ }
274
+ const result = wasmModule.get_order_msg_hash(BigInt(params.positionId), params.baseAssetId, params.baseAmount, params.quoteAssetId, params.quoteAmount, params.feeAmount, params.feeAssetId, BigInt(params.expiration), BigInt(params.salt), params.userPublicKey, params.domainName, params.domainVersion, params.domainChainId, params.domainRevision);
275
+ // Remove '0x' prefix if present
276
+ const cleanResult = result.startsWith('0x') ? result.slice(2) : result;
277
+ return BigInt('0x' + cleanResult);
278
+ }
279
+ /**
280
+ * Generate message hash for a transfer
281
+ *
282
+ * Creates a structured hash for transfer signing compatible with Extended Exchange API.
283
+ *
284
+ * @param params - Transfer parameters including sender/recipient positions, amount, etc.
285
+ * @returns Message hash as BigInt that can be signed with sign()
286
+ */
287
+ function getTransferMsgHash(params) {
288
+ ensureInitialized();
289
+ if (!wasmModule.get_transfer_msg_hash) {
290
+ throw new Error('WASM get_transfer_msg_hash function not available.');
291
+ }
292
+ const result = wasmModule.get_transfer_msg_hash(BigInt(params.recipientPositionId), BigInt(params.senderPositionId), params.amount, BigInt(params.expiration), params.salt, params.userPublicKey, params.domainName, params.domainVersion, params.domainChainId, params.domainRevision, params.collateralId);
293
+ // Remove '0x' prefix if present
294
+ const cleanResult = result.startsWith('0x') ? result.slice(2) : result;
295
+ return BigInt('0x' + cleanResult);
296
+ }
297
+ /**
298
+ * Get withdrawal message hash
299
+ */
300
+ /**
301
+ * Generate message hash for a withdrawal
302
+ *
303
+ * Creates a structured hash for withdrawal signing compatible with Extended Exchange API.
304
+ *
305
+ * @param params - Withdrawal parameters including recipient, position, amount, etc.
306
+ * @returns Message hash as BigInt that can be signed with sign()
307
+ */
308
+ function getWithdrawalMsgHash(params) {
309
+ ensureInitialized();
310
+ if (!wasmModule.get_withdrawal_msg_hash) {
311
+ throw new Error('WASM get_withdrawal_msg_hash function not available.');
312
+ }
313
+ const result = wasmModule.get_withdrawal_msg_hash(params.recipientHex, BigInt(params.positionId), params.amount, BigInt(params.expiration), params.salt, params.userPublicKey, params.domainName, params.domainVersion, params.domainChainId, params.domainRevision, params.collateralId);
314
+ // Remove '0x' prefix if present
315
+ const cleanResult = result.startsWith('0x') ? result.slice(2) : result;
316
+ return BigInt('0x' + cleanResult);
317
+ }
318
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/perpetual/crypto/signer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Trading fee models
3
+ */
4
+ import Decimal from 'decimal.js';
5
+ import { X10BaseModel } from '../utils/model';
6
+ /**
7
+ * Trading fee model
8
+ */
9
+ export declare class TradingFeeModel extends X10BaseModel {
10
+ market: string;
11
+ makerFeeRate: Decimal;
12
+ takerFeeRate: Decimal;
13
+ builderFeeRate: Decimal;
14
+ constructor(market: string, makerFeeRate: Decimal, takerFeeRate: Decimal, builderFeeRate: Decimal);
15
+ }
16
+ /**
17
+ * Default fees (0.02% maker, 0.05% taker)
18
+ */
19
+ export declare const DEFAULT_FEES: TradingFeeModel;
20
+ //# sourceMappingURL=fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../../src/perpetual/fees.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO;CAOlG;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,iBAKxB,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Trading fee models
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DEFAULT_FEES = exports.TradingFeeModel = void 0;
10
+ const decimal_js_1 = __importDefault(require("decimal.js"));
11
+ const model_1 = require("../utils/model");
12
+ /**
13
+ * Trading fee model
14
+ */
15
+ class TradingFeeModel extends model_1.X10BaseModel {
16
+ market;
17
+ makerFeeRate;
18
+ takerFeeRate;
19
+ builderFeeRate;
20
+ constructor(market, makerFeeRate, takerFeeRate, builderFeeRate) {
21
+ super();
22
+ this.market = market;
23
+ this.makerFeeRate = makerFeeRate;
24
+ this.takerFeeRate = takerFeeRate;
25
+ this.builderFeeRate = builderFeeRate;
26
+ }
27
+ }
28
+ exports.TradingFeeModel = TradingFeeModel;
29
+ /**
30
+ * Default fees (0.02% maker, 0.05% taker)
31
+ */
32
+ exports.DEFAULT_FEES = new TradingFeeModel('BTC-USD', new decimal_js_1.default(2).div(10000), // 0.02%
33
+ new decimal_js_1.default(5).div(10000), // 0.05%
34
+ new decimal_js_1.default(0));
35
+ //# sourceMappingURL=fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.js","sourceRoot":"","sources":["../../src/perpetual/fees.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,4DAAiC;AACjC,0CAA8C;AAE9C;;GAEG;AACH,MAAa,eAAgB,SAAQ,oBAAY;IAC/C,MAAM,CAAS;IACf,YAAY,CAAU;IACtB,YAAY,CAAU;IACtB,cAAc,CAAU;IAExB,YAAY,MAAc,EAAE,YAAqB,EAAE,YAAqB,EAAE,cAAuB;QAC/F,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAbD,0CAaC;AAED;;GAEG;AACU,QAAA,YAAY,GAAG,IAAI,eAAe,CAC7C,SAAS,EACT,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ;AACnC,IAAI,oBAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ;AACnC,IAAI,oBAAO,CAAC,CAAC,CAAC,CACf,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Funding rate models
3
+ */
4
+ import Decimal from 'decimal.js';
5
+ import { X10BaseModel } from '../utils/model';
6
+ /**
7
+ * Funding rate model
8
+ */
9
+ export declare class FundingRateModel extends X10BaseModel {
10
+ market: string;
11
+ fundingRate: Decimal;
12
+ timestamp: number;
13
+ constructor(market: string, fundingRate: Decimal, timestamp: number);
14
+ }
15
+ //# sourceMappingURL=funding-rates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funding-rates.d.ts","sourceRoot":"","sources":["../../src/perpetual/funding-rates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;gBAEN,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM;CAMpE"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Funding rate models
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FundingRateModel = void 0;
7
+ const model_1 = require("../utils/model");
8
+ /**
9
+ * Funding rate model
10
+ */
11
+ class FundingRateModel extends model_1.X10BaseModel {
12
+ market;
13
+ fundingRate;
14
+ timestamp;
15
+ constructor(market, fundingRate, timestamp) {
16
+ super();
17
+ this.market = market;
18
+ this.fundingRate = fundingRate;
19
+ this.timestamp = timestamp;
20
+ }
21
+ }
22
+ exports.FundingRateModel = FundingRateModel;
23
+ //# sourceMappingURL=funding-rates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funding-rates.js","sourceRoot":"","sources":["../../src/perpetual/funding-rates.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,0CAA8C;AAE9C;;GAEG;AACH,MAAa,gBAAiB,SAAQ,oBAAY;IAChD,MAAM,CAAS;IACf,WAAW,CAAU;IACrB,SAAS,CAAS;IAElB,YAAY,MAAc,EAAE,WAAoB,EAAE,SAAiB;QACjE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAXD,4CAWC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Market models
3
+ */
4
+ import Decimal from 'decimal.js';
5
+ import { X10BaseModel } from '../utils/model';
6
+ import { Asset } from './assets';
7
+ /**
8
+ * Risk factor config
9
+ */
10
+ export declare class RiskFactorConfig extends X10BaseModel {
11
+ upperBound: Decimal;
12
+ riskFactor: Decimal;
13
+ get maxLeverage(): Decimal;
14
+ }
15
+ /**
16
+ * Market stats model
17
+ */
18
+ export declare class MarketStatsModel extends X10BaseModel {
19
+ dailyVolume: Decimal;
20
+ dailyVolumeBase: Decimal;
21
+ dailyPriceChange: Decimal;
22
+ dailyLow: Decimal;
23
+ dailyHigh: Decimal;
24
+ lastPrice: Decimal;
25
+ askPrice: Decimal;
26
+ bidPrice: Decimal;
27
+ markPrice: Decimal;
28
+ indexPrice: Decimal;
29
+ fundingRate: Decimal;
30
+ nextFundingRate: number;
31
+ openInterest: Decimal;
32
+ openInterestBase: Decimal;
33
+ }
34
+ /**
35
+ * Trading config model
36
+ */
37
+ export declare class TradingConfigModel extends X10BaseModel {
38
+ minOrderSize: Decimal;
39
+ minOrderSizeChange: Decimal;
40
+ minPriceChange: Decimal;
41
+ maxMarketOrderValue: Decimal;
42
+ maxLimitOrderValue: Decimal;
43
+ maxPositionValue: Decimal;
44
+ maxLeverage: Decimal;
45
+ maxNumOrders: number;
46
+ limitPriceCap: Decimal;
47
+ limitPriceFloor: Decimal;
48
+ riskFactorConfig: RiskFactorConfig[];
49
+ get pricePrecision(): number;
50
+ get quantityPrecision(): number;
51
+ maxLeverageForPositionValue(positionValue: Decimal): Decimal;
52
+ maxPositionValueForLeverage(leverage: Decimal): Decimal;
53
+ roundOrderSize(orderSize: Decimal, roundingMode?: Decimal.Rounding): Decimal;
54
+ calculateOrderSizeFromValue(orderValue: Decimal, orderPrice: Decimal, roundingMode?: Decimal.Rounding): Decimal;
55
+ roundPrice(price: Decimal, roundingMode?: Decimal.Rounding): Decimal;
56
+ }
57
+ /**
58
+ * L2 config model
59
+ */
60
+ export declare class L2ConfigModel extends X10BaseModel {
61
+ type: string;
62
+ collateralId: string;
63
+ collateralResolution: number;
64
+ syntheticId: string;
65
+ syntheticResolution: number;
66
+ }
67
+ /**
68
+ * Market model
69
+ */
70
+ export declare class MarketModel extends X10BaseModel {
71
+ name: string;
72
+ assetName: string;
73
+ assetPrecision: number;
74
+ collateralAssetName: string;
75
+ collateralAssetPrecision: number;
76
+ active: boolean;
77
+ marketStats: MarketStatsModel;
78
+ tradingConfig: TradingConfigModel;
79
+ l2Config: L2ConfigModel;
80
+ get syntheticAsset(): Asset;
81
+ get collateralAsset(): Asset;
82
+ }
83
+ //# sourceMappingURL=markets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../src/perpetual/markets.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IAEpB,IAAI,WAAW,IAAI,OAAO,CAEzB;CACF;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IAErC,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,2BAA2B,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO;IAO5D,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IAOvD,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,GAAE,OAAO,CAAC,QAA2B,GAAG,OAAO;IAQ9F,2BAA2B,CACzB,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,EACnB,YAAY,GAAE,OAAO,CAAC,QAA2B,GAChD,OAAO;IAQV,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,GAAE,OAAO,CAAC,QAA2B,GAAG,OAAO;CAGvF;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,aAAa,EAAE,kBAAkB,CAAC;IAClC,QAAQ,EAAE,aAAa,CAAC;IAExB,IAAI,cAAc,IAAI,KAAK,CAY1B;IAED,IAAI,eAAe,IAAI,KAAK,CAY3B;CACF"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ /**
3
+ * Market models
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MarketModel = exports.L2ConfigModel = exports.TradingConfigModel = exports.MarketStatsModel = exports.RiskFactorConfig = void 0;
10
+ const decimal_js_1 = __importDefault(require("decimal.js"));
11
+ const model_1 = require("../utils/model");
12
+ const assets_1 = require("./assets");
13
+ /**
14
+ * Risk factor config
15
+ */
16
+ class RiskFactorConfig extends model_1.X10BaseModel {
17
+ upperBound;
18
+ riskFactor;
19
+ get maxLeverage() {
20
+ return new decimal_js_1.default(1).div(this.riskFactor).toDecimalPlaces(2);
21
+ }
22
+ }
23
+ exports.RiskFactorConfig = RiskFactorConfig;
24
+ /**
25
+ * Market stats model
26
+ */
27
+ class MarketStatsModel extends model_1.X10BaseModel {
28
+ dailyVolume;
29
+ dailyVolumeBase;
30
+ dailyPriceChange;
31
+ dailyLow;
32
+ dailyHigh;
33
+ lastPrice;
34
+ askPrice;
35
+ bidPrice;
36
+ markPrice;
37
+ indexPrice;
38
+ fundingRate;
39
+ nextFundingRate;
40
+ openInterest;
41
+ openInterestBase;
42
+ }
43
+ exports.MarketStatsModel = MarketStatsModel;
44
+ /**
45
+ * Trading config model
46
+ */
47
+ class TradingConfigModel extends model_1.X10BaseModel {
48
+ minOrderSize;
49
+ minOrderSizeChange;
50
+ minPriceChange;
51
+ maxMarketOrderValue;
52
+ maxLimitOrderValue;
53
+ maxPositionValue;
54
+ maxLeverage;
55
+ maxNumOrders;
56
+ limitPriceCap;
57
+ limitPriceFloor;
58
+ riskFactorConfig;
59
+ get pricePrecision() {
60
+ return Math.abs(Math.ceil(Math.log10(this.minPriceChange.toNumber())));
61
+ }
62
+ get quantityPrecision() {
63
+ return Math.abs(Math.ceil(Math.log10(this.minOrderSizeChange.toNumber())));
64
+ }
65
+ maxLeverageForPositionValue(positionValue) {
66
+ const filtered = this.riskFactorConfig.filter((x) => x.upperBound.gte(positionValue));
67
+ return filtered.length > 0 ? filtered[0].maxLeverage : new decimal_js_1.default(0);
68
+ }
69
+ maxPositionValueForLeverage(leverage) {
70
+ const filtered = this.riskFactorConfig.filter((x) => x.maxLeverage.gte(leverage));
71
+ return filtered.length > 0 ? filtered[filtered.length - 1].upperBound : new decimal_js_1.default(0);
72
+ }
73
+ roundOrderSize(orderSize, roundingMode = decimal_js_1.default.ROUND_UP) {
74
+ const rounded = orderSize
75
+ .div(this.minOrderSizeChange)
76
+ .toDecimalPlaces(0, roundingMode)
77
+ .mul(this.minOrderSizeChange);
78
+ return rounded;
79
+ }
80
+ calculateOrderSizeFromValue(orderValue, orderPrice, roundingMode = decimal_js_1.default.ROUND_UP) {
81
+ const orderSize = orderValue.div(orderPrice);
82
+ if (orderSize.gt(0)) {
83
+ return this.roundOrderSize(orderSize, roundingMode);
84
+ }
85
+ return new decimal_js_1.default(0);
86
+ }
87
+ roundPrice(price, roundingMode = decimal_js_1.default.ROUND_UP) {
88
+ return price.toDecimalPlaces(this.pricePrecision, roundingMode);
89
+ }
90
+ }
91
+ exports.TradingConfigModel = TradingConfigModel;
92
+ /**
93
+ * L2 config model
94
+ */
95
+ class L2ConfigModel extends model_1.X10BaseModel {
96
+ type;
97
+ collateralId;
98
+ collateralResolution;
99
+ syntheticId;
100
+ syntheticResolution;
101
+ }
102
+ exports.L2ConfigModel = L2ConfigModel;
103
+ /**
104
+ * Market model
105
+ */
106
+ class MarketModel extends model_1.X10BaseModel {
107
+ name;
108
+ assetName;
109
+ assetPrecision;
110
+ collateralAssetName;
111
+ collateralAssetPrecision;
112
+ active;
113
+ marketStats;
114
+ tradingConfig;
115
+ l2Config;
116
+ get syntheticAsset() {
117
+ return new assets_1.Asset(1, this.assetName, this.assetPrecision, this.active, false, this.l2Config.syntheticId, this.l2Config.syntheticResolution, '', 0);
118
+ }
119
+ get collateralAsset() {
120
+ return new assets_1.Asset(2, this.collateralAssetName, this.collateralAssetPrecision, this.active, true, this.l2Config.collateralId, this.l2Config.collateralResolution, '', 0);
121
+ }
122
+ }
123
+ exports.MarketModel = MarketModel;
124
+ //# sourceMappingURL=markets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets.js","sourceRoot":"","sources":["../../src/perpetual/markets.ts"],"names":[],"mappings":"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"}