@lifi/perps-sdk 0.1.1-alpha.37 → 0.1.1-alpha.39

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.
@@ -1,4 +1,4 @@
1
- export declare function getMaxPriceDecimals(szDecimals: number): number;
1
+ export declare function getMaxPriceDecimals(szDecimals: number, market?: string): number;
2
2
  export declare function formatOrderSize(size: number, szDecimals: number): string;
3
- export declare function formatOrderPrice(price: number, szDecimals: number): string;
3
+ export declare function formatOrderPrice(price: number, szDecimals: number, market?: string): string;
4
4
  //# sourceMappingURL=orderFormatting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAsBA,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAaD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMxE;AAeD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAsB1E"}
1
+ {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AA6BA,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAaD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMxE;AAgBD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAsBR"}
@@ -5,16 +5,20 @@ exports.formatOrderSize = formatOrderSize;
5
5
  exports.formatOrderPrice = formatOrderPrice;
6
6
  const parse_js_1 = require("../parse.js");
7
7
  const MAX_DECIMALS_PERPS = 6;
8
- function getMaxPriceDecimals(szDecimals) {
9
- return Math.max(0, MAX_DECIMALS_PERPS - szDecimals);
8
+ const MAX_DECIMALS_SPOT = 8;
9
+ function getMaxDecimals(market) {
10
+ return market === 'spot' ? MAX_DECIMALS_SPOT : MAX_DECIMALS_PERPS;
11
+ }
12
+ function getMaxPriceDecimals(szDecimals, market) {
13
+ return Math.max(0, getMaxDecimals(market) - szDecimals);
10
14
  }
11
15
  function formatOrderSize(size, szDecimals) {
12
16
  const multiplier = 10 ** szDecimals;
13
17
  const truncated = Math.floor(size * multiplier) / multiplier;
14
18
  return (0, parse_js_1.stringToFloat)(truncated.toFixed(szDecimals)).toString();
15
19
  }
16
- function formatOrderPrice(price, szDecimals) {
17
- const maxPriceDecimals = getMaxPriceDecimals(szDecimals);
20
+ function formatOrderPrice(price, szDecimals, market) {
21
+ const maxPriceDecimals = getMaxPriceDecimals(szDecimals, market);
18
22
  let rounded = (0, parse_js_1.stringToFloat)(price.toFixed(maxPriceDecimals));
19
23
  if (Number.isInteger(rounded)) {
20
24
  return rounded.toString();
@@ -1 +1 @@
1
- {"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":";;AAsBA,kDAEC;AAaD,0CAMC;AAeD,4CAsBC;AAvED,0CAA2C;AAK3C,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAQ5B,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC,CAAA;AACrD,CAAC;AAaD,SAAgB,eAAe,CAAC,IAAY,EAAE,UAAkB;IAE9D,MAAM,UAAU,GAAG,EAAE,IAAI,UAAU,CAAA;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;IAE5D,OAAO,IAAA,wBAAa,EAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC;AAeD,SAAgB,gBAAgB,CAAC,KAAa,EAAE,UAAkB;IAChE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAGxD,IAAI,OAAO,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAG5D,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAGD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IAGhD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,IAAA,wBAAa,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IAGD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":";;AA6BA,kDAKC;AAaD,0CAMC;AAgBD,4CA0BC;AAtFD,0CAA2C;AAM3C,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AASD,SAAgB,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAaD,SAAgB,eAAe,CAAC,IAAY,EAAE,UAAkB;IAE9D,MAAM,UAAU,GAAG,EAAE,IAAI,UAAU,CAAA;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;IAE5D,OAAO,IAAA,wBAAa,EAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC;AAgBD,SAAgB,gBAAgB,CAC9B,KAAa,EACb,UAAkB,EAClB,MAAe;IAEf,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAGhE,IAAI,OAAO,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAG5D,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAGD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IAGhD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,IAAA,wBAAa,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IAGD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;AAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAgBA,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAeR"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAcA,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAcR"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateMargin = validateMargin;
4
- const calculations_js_1 = require("./calculations.js");
5
4
  function validateMargin(margin, leverage, availableBalance, feeRate, minMarginUsd) {
6
5
  if (margin <= 0) {
7
6
  return '';
@@ -9,8 +8,7 @@ function validateMargin(margin, leverage, availableBalance, feeRate, minMarginUs
9
8
  if (availableBalance !== null && margin > availableBalance) {
10
9
  return 'insufficient';
11
10
  }
12
- const fee = feeRate !== null ? (0, calculations_js_1.estimateFees)(margin * leverage, feeRate) : 0;
13
- if (margin - fee < minMarginUsd) {
11
+ if (margin < minMarginUsd) {
14
12
  return 'below-minimum';
15
13
  }
16
14
  return '';
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":";;AAgBA,wCAqBC;AAjCD,uDAAgD;AAYhD,SAAgB,cAAc,CAC5B,MAAc,EACd,QAAgB,EAChB,gBAA+B,EAC/B,OAAsB,EACtB,YAAoB;IAEpB,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,gBAAgB,KAAK,IAAI,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC3D,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,8BAAY,EAAC,MAAM,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3E,IAAI,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":";;AAcA,wCAoBC;AApBD,SAAgB,cAAc,CAC5B,MAAc,EACd,QAAgB,EAChB,gBAA+B,EAC/B,OAAsB,EACtB,YAAoB;IAEpB,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,gBAAgB,KAAK,IAAI,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC3D,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;QAC1B,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/perps-sdk";
2
- export declare const version = "0.1.1-alpha.37";
2
+ export declare const version = "0.1.1-alpha.39";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = exports.name = void 0;
4
4
  exports.name = '@lifi/perps-sdk';
5
- exports.version = '0.1.1-alpha.37';
5
+ exports.version = '0.1.1-alpha.39';
6
6
  //# sourceMappingURL=version.js.map
@@ -10,9 +10,10 @@
10
10
  * Derive the maximum number of price decimal places for a given asset.
11
11
  *
12
12
  * @param szDecimals - The asset's szDecimals (from market meta)
13
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
13
14
  * @returns Maximum allowed price decimals
14
15
  */
15
- export declare function getMaxPriceDecimals(szDecimals: number): number;
16
+ export declare function getMaxPriceDecimals(szDecimals: number, market?: string): number;
16
17
  /**
17
18
  * Format a size value for order submission.
18
19
  *
@@ -30,13 +31,14 @@ export declare function formatOrderSize(size: number, szDecimals: number): strin
30
31
  *
31
32
  * Per Hyperliquid docs (tick-and-lot-size):
32
33
  * - Maximum 5 significant figures
33
- * - Max decimals = MAX_DECIMALS - szDecimals (MAX_DECIMALS = 6 for perps)
34
+ * - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
34
35
  * - Integer prices always allowed regardless of significant figures
35
36
  * - Trailing zeroes must be removed for signing
36
37
  *
37
38
  * @param price - The price value to format
38
39
  * @param szDecimals - The asset's szDecimals (affects max price decimals)
40
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
39
41
  * @returns Price as a string with correct precision, no trailing zeros
40
42
  */
41
- export declare function formatOrderPrice(price: number, szDecimals: number): string;
43
+ export declare function formatOrderPrice(price: number, szDecimals: number, market?: string): string;
42
44
  //# sourceMappingURL=orderFormatting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAsB1E"}
1
+ {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAsBR"}
@@ -9,16 +9,22 @@
9
9
  import { stringToFloat } from '../parse.js';
10
10
  /**
11
11
  * Max combined decimals (size + price) enforced by Hyperliquid.
12
+ * Perps: 6, Spot: 8
12
13
  */
13
14
  const MAX_DECIMALS_PERPS = 6;
15
+ const MAX_DECIMALS_SPOT = 8;
16
+ function getMaxDecimals(market) {
17
+ return market === 'spot' ? MAX_DECIMALS_SPOT : MAX_DECIMALS_PERPS;
18
+ }
14
19
  /**
15
20
  * Derive the maximum number of price decimal places for a given asset.
16
21
  *
17
22
  * @param szDecimals - The asset's szDecimals (from market meta)
23
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
18
24
  * @returns Maximum allowed price decimals
19
25
  */
20
- export function getMaxPriceDecimals(szDecimals) {
21
- return Math.max(0, MAX_DECIMALS_PERPS - szDecimals);
26
+ export function getMaxPriceDecimals(szDecimals, market) {
27
+ return Math.max(0, getMaxDecimals(market) - szDecimals);
22
28
  }
23
29
  /**
24
30
  * Format a size value for order submission.
@@ -43,16 +49,17 @@ export function formatOrderSize(size, szDecimals) {
43
49
  *
44
50
  * Per Hyperliquid docs (tick-and-lot-size):
45
51
  * - Maximum 5 significant figures
46
- * - Max decimals = MAX_DECIMALS - szDecimals (MAX_DECIMALS = 6 for perps)
52
+ * - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
47
53
  * - Integer prices always allowed regardless of significant figures
48
54
  * - Trailing zeroes must be removed for signing
49
55
  *
50
56
  * @param price - The price value to format
51
57
  * @param szDecimals - The asset's szDecimals (affects max price decimals)
58
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
52
59
  * @returns Price as a string with correct precision, no trailing zeros
53
60
  */
54
- export function formatOrderPrice(price, szDecimals) {
55
- const maxPriceDecimals = getMaxPriceDecimals(szDecimals);
61
+ export function formatOrderPrice(price, szDecimals, market) {
62
+ const maxPriceDecimals = getMaxPriceDecimals(szDecimals, market);
56
63
  // Round to max allowed decimals
57
64
  let rounded = stringToFloat(price.toFixed(maxPriceDecimals));
58
65
  // Integer prices are always allowed regardless of significant figures
@@ -1 +1 @@
1
- {"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C;;GAEG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC,CAAA;AACrD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB;IAC9D,iEAAiE;IACjE,MAAM,UAAU,GAAG,EAAE,IAAI,UAAU,CAAA;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;IAC5D,gEAAgE;IAChE,OAAO,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAAkB;IAChE,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAExD,gCAAgC;IAChC,IAAI,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAE5D,sEAAsE;IACtE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAED,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IAEhD,iDAAiD;IACjD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,gCAAgC;IAChC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"orderFormatting.js","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C;;;GAGG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAC5B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B,SAAS,cAAc,CAAC,MAAe;IACrC,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAA;AACnE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,MAAe;IAEf,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,UAAkB;IAC9D,iEAAiE;IACjE,MAAM,UAAU,GAAG,EAAE,IAAI,UAAU,CAAA;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;IAC5D,gEAAgE;IAChE,OAAO,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;AAChE,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,UAAkB,EAClB,MAAe;IAEf,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAEhE,gCAAgC;IAChC,IAAI,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAE5D,sEAAsE;IACtE,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAED,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IAEhD,iDAAiD;IACjD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,gCAAgC;IAChC,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAA;AAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAeR"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAcR"}
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Order validation utilities.
3
3
  */
4
- import { estimateFees } from './calculations.js';
5
4
  /**
6
5
  * Validate margin input against available balance and exchange minimums.
7
6
  *
@@ -19,8 +18,7 @@ export function validateMargin(margin, leverage, availableBalance, feeRate, minM
19
18
  if (availableBalance !== null && margin > availableBalance) {
20
19
  return 'insufficient';
21
20
  }
22
- const fee = feeRate !== null ? estimateFees(margin * leverage, feeRate) : 0;
23
- if (margin - fee < minMarginUsd) {
21
+ if (margin < minMarginUsd) {
24
22
  return 'below-minimum';
25
23
  }
26
24
  return '';
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,QAAgB,EAChB,gBAA+B,EAC/B,OAAsB,EACtB,YAAoB;IAEpB,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,gBAAgB,KAAK,IAAI,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC3D,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3E,IAAI,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,QAAgB,EAChB,gBAA+B,EAC/B,OAAsB,EACtB,YAAoB;IAEpB,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,gBAAgB,KAAK,IAAI,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC3D,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;QAC1B,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/perps-sdk";
2
- export declare const version = "0.1.1-alpha.37";
2
+ export declare const version = "0.1.1-alpha.39";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  export const name = '@lifi/perps-sdk';
2
- export const version = '0.1.1-alpha.37';
2
+ export const version = '0.1.1-alpha.39';
3
3
  //# sourceMappingURL=version.js.map
@@ -10,9 +10,10 @@
10
10
  * Derive the maximum number of price decimal places for a given asset.
11
11
  *
12
12
  * @param szDecimals - The asset's szDecimals (from market meta)
13
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
13
14
  * @returns Maximum allowed price decimals
14
15
  */
15
- export declare function getMaxPriceDecimals(szDecimals: number): number;
16
+ export declare function getMaxPriceDecimals(szDecimals: number, market?: string): number;
16
17
  /**
17
18
  * Format a size value for order submission.
18
19
  *
@@ -30,13 +31,14 @@ export declare function formatOrderSize(size: number, szDecimals: number): strin
30
31
  *
31
32
  * Per Hyperliquid docs (tick-and-lot-size):
32
33
  * - Maximum 5 significant figures
33
- * - Max decimals = MAX_DECIMALS - szDecimals (MAX_DECIMALS = 6 for perps)
34
+ * - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
34
35
  * - Integer prices always allowed regardless of significant figures
35
36
  * - Trailing zeroes must be removed for signing
36
37
  *
37
38
  * @param price - The price value to format
38
39
  * @param szDecimals - The asset's szDecimals (affects max price decimals)
40
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
39
41
  * @returns Price as a string with correct precision, no trailing zeros
40
42
  */
41
- export declare function formatOrderPrice(price: number, szDecimals: number): string;
43
+ export declare function formatOrderPrice(price: number, szDecimals: number, market?: string): string;
42
44
  //# sourceMappingURL=orderFormatting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAsB1E"}
1
+ {"version":3,"file":"orderFormatting.d.ts","sourceRoot":"","sources":["../../../../src/utils/hyperliquid/orderFormatting.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAsBR"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAeR"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,YAAY,EAAE,MAAM,GACnB,MAAM,CAcR"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/perps-sdk";
2
- export declare const version = "0.1.1-alpha.37";
2
+ export declare const version = "0.1.1-alpha.39";
3
3
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk",
3
- "version": "0.1.1-alpha.37",
3
+ "version": "0.1.1-alpha.39",
4
4
  "description": "LI.FI Perps SDK for perpetuals trading",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -11,17 +11,27 @@ import { stringToFloat } from '../parse.js'
11
11
 
12
12
  /**
13
13
  * Max combined decimals (size + price) enforced by Hyperliquid.
14
+ * Perps: 6, Spot: 8
14
15
  */
15
16
  const MAX_DECIMALS_PERPS = 6
17
+ const MAX_DECIMALS_SPOT = 8
18
+
19
+ function getMaxDecimals(market?: string): number {
20
+ return market === 'spot' ? MAX_DECIMALS_SPOT : MAX_DECIMALS_PERPS
21
+ }
16
22
 
17
23
  /**
18
24
  * Derive the maximum number of price decimal places for a given asset.
19
25
  *
20
26
  * @param szDecimals - The asset's szDecimals (from market meta)
27
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
21
28
  * @returns Maximum allowed price decimals
22
29
  */
23
- export function getMaxPriceDecimals(szDecimals: number): number {
24
- return Math.max(0, MAX_DECIMALS_PERPS - szDecimals)
30
+ export function getMaxPriceDecimals(
31
+ szDecimals: number,
32
+ market?: string
33
+ ): number {
34
+ return Math.max(0, getMaxDecimals(market) - szDecimals)
25
35
  }
26
36
 
27
37
  /**
@@ -48,16 +58,21 @@ export function formatOrderSize(size: number, szDecimals: number): string {
48
58
  *
49
59
  * Per Hyperliquid docs (tick-and-lot-size):
50
60
  * - Maximum 5 significant figures
51
- * - Max decimals = MAX_DECIMALS - szDecimals (MAX_DECIMALS = 6 for perps)
61
+ * - Max decimals = MAX_DECIMALS - szDecimals (6 for perps, 8 for spot)
52
62
  * - Integer prices always allowed regardless of significant figures
53
63
  * - Trailing zeroes must be removed for signing
54
64
  *
55
65
  * @param price - The price value to format
56
66
  * @param szDecimals - The asset's szDecimals (affects max price decimals)
67
+ * @param market - Optional market type (e.g. 'spot'). Defaults to perps rules.
57
68
  * @returns Price as a string with correct precision, no trailing zeros
58
69
  */
59
- export function formatOrderPrice(price: number, szDecimals: number): string {
60
- const maxPriceDecimals = getMaxPriceDecimals(szDecimals)
70
+ export function formatOrderPrice(
71
+ price: number,
72
+ szDecimals: number,
73
+ market?: string
74
+ ): string {
75
+ const maxPriceDecimals = getMaxPriceDecimals(szDecimals, market)
61
76
 
62
77
  // Round to max allowed decimals
63
78
  let rounded = stringToFloat(price.toFixed(maxPriceDecimals))
@@ -2,8 +2,6 @@
2
2
  * Order validation utilities.
3
3
  */
4
4
 
5
- import { estimateFees } from './calculations.js'
6
-
7
5
  /**
8
6
  * Validate margin input against available balance and exchange minimums.
9
7
  *
@@ -29,8 +27,7 @@ export function validateMargin(
29
27
  return 'insufficient'
30
28
  }
31
29
 
32
- const fee = feeRate !== null ? estimateFees(margin * leverage, feeRate) : 0
33
- if (margin - fee < minMarginUsd) {
30
+ if (margin < minMarginUsd) {
34
31
  return 'below-minimum'
35
32
  }
36
33
 
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/perps-sdk'
2
- export const version = '0.1.1-alpha.37'
2
+ export const version = '0.1.1-alpha.39'