@rabby-wallet/hyperliquid-sdk 1.0.8-beta1 → 1.0.8-beta3

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.
@@ -21,7 +21,7 @@ export declare class ExchangeClient {
21
21
  updateExchangeAgent(agentPrivateKey: string, agentPublicKey: string, agentName?: string): void;
22
22
  private getAgentPrivateKey;
23
23
  /**
24
- * deprecated 50 = 0.05%
24
+ * @deprecated This method is deprecated. Use the new builder configuration in constructor instead.
25
25
  */
26
26
  updateBuilder(address: string, fee: number): Promise<any>;
27
27
  updateLeverage(params: UpdateLeverageParams): Promise<any>;
@@ -29,7 +29,25 @@ export declare class ExchangeClient {
29
29
  * Place a single order
30
30
  */
31
31
  placeOrder(params: PlaceOrderParams): Promise<OrderResponse>;
32
+ /**
33
+ * Calculate slippage price for market orders following Hyperliquid price rules
34
+ * Based on official Python SDK logic
35
+ *
36
+ * Rules:
37
+ * - Round to 5 significant figures
38
+ * - Round to (6 - szDecimals) decimal places for perps
39
+ *
40
+ * @param midPx - Middle price as string
41
+ * @param slippage - Slippage rate (e.g., 0.08 for 8%)
42
+ * @param isBuy - True for buy orders, false for sell orders
43
+ * @param szDecimals - Size decimals from meta endpoint (default 0)
44
+ * @param isSpot - Whether this is a spot asset (default false for perps)
45
+ */
32
46
  private getSlippagePx;
47
+ /**
48
+ * Round a number to specified decimal places
49
+ */
50
+ private roundToDecimals;
33
51
  /**
34
52
  * Place a market order
35
53
  * default slippage is 0.08
@@ -104,7 +104,7 @@ class ExchangeClient {
104
104
  return this.agentPrivateKey;
105
105
  }
106
106
  /**
107
- * deprecated 50 = 0.05%
107
+ * @deprecated This method is deprecated. Use the new builder configuration in constructor instead.
108
108
  */
109
109
  updateBuilder(address, fee) {
110
110
  return __awaiter(this, void 0, void 0, function* () {
@@ -167,12 +167,40 @@ class ExchangeClient {
167
167
  });
168
168
  });
169
169
  }
170
- getSlippagePx(midPx, slippage, isBuy) {
171
- var _a;
172
- const decimals = ((_a = midPx.toString().split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) || 0;
173
- const prepDecimals = Math.max(0, decimals - 1);
174
- const px = isBuy ? (Number(midPx) * (1 + slippage)).toFixed(prepDecimals) : (Number(midPx) * (1 - slippage)).toFixed(prepDecimals);
175
- return (0, number_1.removeTrailingZeros)(px);
170
+ /**
171
+ * Calculate slippage price for market orders following Hyperliquid price rules
172
+ * Based on official Python SDK logic
173
+ *
174
+ * Rules:
175
+ * - Round to 5 significant figures
176
+ * - Round to (6 - szDecimals) decimal places for perps
177
+ *
178
+ * @param midPx - Middle price as string
179
+ * @param slippage - Slippage rate (e.g., 0.08 for 8%)
180
+ * @param isBuy - True for buy orders, false for sell orders
181
+ * @param szDecimals - Size decimals from meta endpoint (default 0)
182
+ * @param isSpot - Whether this is a spot asset (default false for perps)
183
+ */
184
+ getSlippagePx(midPx, slippage, isBuy, szDecimals = 0) {
185
+ let px = parseFloat(midPx);
186
+ if (isNaN(px) || px <= 0) {
187
+ throw new Error('Invalid midPx: must be a positive number');
188
+ }
189
+ // Calculate slippage price
190
+ px *= isBuy ? (1 + slippage) : (1 - slippage);
191
+ // Round to 5 significant figures
192
+ const sigFigRounded = parseFloat(px.toPrecision(5));
193
+ // Round to (6 - szDecimals) decimals for perps
194
+ const maxDecimals = 6 - szDecimals;
195
+ const decimalRounded = this.roundToDecimals(sigFigRounded, maxDecimals);
196
+ return (0, number_1.removeTrailingZeros)(decimalRounded.toFixed(maxDecimals));
197
+ }
198
+ /**
199
+ * Round a number to specified decimal places
200
+ */
201
+ roundToDecimals(value, decimals) {
202
+ const multiplier = Math.pow(10, decimals);
203
+ return Math.round(value * multiplier) / multiplier;
176
204
  }
177
205
  /**
178
206
  * Place a market order
@@ -2,6 +2,7 @@ import { HttpClientConfig } from "./http-client";
2
2
  import { InfoClient } from "./info-client";
3
3
  export declare class SymbolConversion {
4
4
  private assetToIndexMap;
5
+ private assetSzDecimalsMap;
5
6
  private httpClient;
6
7
  private initialized;
7
8
  private infoClient?;
@@ -10,6 +11,7 @@ export declare class SymbolConversion {
10
11
  private ensureInitialized;
11
12
  private refreshAssetMaps;
12
13
  getAssetIndex(assetSymbol: string): Promise<number>;
14
+ getAssetSzDecimals(assetSymbol: string): Promise<number>;
13
15
  getAllAssets(): Promise<{
14
16
  perp: string[];
15
17
  }>;
@@ -15,6 +15,7 @@ const http_client_1 = require("./http-client");
15
15
  class SymbolConversion {
16
16
  constructor(config, infoClient) {
17
17
  this.assetToIndexMap = new Map();
18
+ this.assetSzDecimalsMap = new Map();
18
19
  this.initialized = false;
19
20
  this.infoClient = infoClient;
20
21
  this.httpClient = new http_client_1.HttpClient({
@@ -64,9 +65,11 @@ class SymbolConversion {
64
65
  throw new Error('Invalid perpetual metadata response');
65
66
  }
66
67
  this.assetToIndexMap.clear();
68
+ this.assetSzDecimalsMap.clear();
67
69
  // Handle perpetual assets
68
70
  perpMeta[0].universe.forEach((asset, index) => {
69
71
  this.assetToIndexMap.set(asset.name, index);
72
+ this.assetSzDecimalsMap.set(asset.name, asset.szDecimals);
70
73
  });
71
74
  }
72
75
  catch (error) {
@@ -84,6 +87,16 @@ class SymbolConversion {
84
87
  return index;
85
88
  });
86
89
  }
90
+ getAssetSzDecimals(assetSymbol) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ yield this.ensureInitialized();
93
+ const szDecimals = this.assetSzDecimalsMap.get(assetSymbol);
94
+ if (szDecimals === undefined) {
95
+ throw new Error(`Unknown asset index: ${assetSymbol}`);
96
+ }
97
+ return szDecimals;
98
+ });
99
+ }
87
100
  getAllAssets() {
88
101
  return __awaiter(this, void 0, void 0, function* () {
89
102
  yield this.ensureInitialized();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rabby-wallet/hyperliquid-sdk",
3
- "version": "1.0.8-beta1",
3
+ "version": "1.0.8-beta3",
4
4
  "description": "Simplified Hyperliquid Perpetuals Trading SDK for Frontend Applications",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",