@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.
- package/dist/cjs/utils/hyperliquid/orderFormatting.d.ts +2 -2
- package/dist/cjs/utils/hyperliquid/orderFormatting.d.ts.map +1 -1
- package/dist/cjs/utils/hyperliquid/orderFormatting.js +8 -4
- package/dist/cjs/utils/hyperliquid/orderFormatting.js.map +1 -1
- package/dist/cjs/utils/validation.d.ts.map +1 -1
- package/dist/cjs/utils/validation.js +1 -3
- package/dist/cjs/utils/validation.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/utils/hyperliquid/orderFormatting.d.ts +5 -3
- package/dist/esm/utils/hyperliquid/orderFormatting.d.ts.map +1 -1
- package/dist/esm/utils/hyperliquid/orderFormatting.js +12 -5
- package/dist/esm/utils/hyperliquid/orderFormatting.js.map +1 -1
- package/dist/esm/utils/validation.d.ts.map +1 -1
- package/dist/esm/utils/validation.js +1 -3
- package/dist/esm/utils/validation.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/utils/hyperliquid/orderFormatting.d.ts +5 -3
- package/dist/types/utils/hyperliquid/orderFormatting.d.ts.map +1 -1
- package/dist/types/utils/validation.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/utils/hyperliquid/orderFormatting.ts +20 -5
- package/src/utils/validation.ts +1 -4
- package/src/version.ts +1 -1
|
@@ -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":"
|
|
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
|
-
|
|
9
|
-
|
|
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":";;
|
|
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":"
|
|
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
|
-
|
|
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":";;
|
|
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"}
|
package/dist/cjs/version.d.ts
CHANGED
package/dist/cjs/version.js
CHANGED
|
@@ -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 (
|
|
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;
|
|
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,
|
|
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 (
|
|
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
|
|
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;
|
|
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
|
-
|
|
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
|
|
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"}
|
package/dist/esm/version.d.ts
CHANGED
package/dist/esm/version.js
CHANGED
|
@@ -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 (
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/types/version.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -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(
|
|
24
|
-
|
|
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 (
|
|
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(
|
|
60
|
-
|
|
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))
|
package/src/utils/validation.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
2
|
+
export const version = '0.1.1-alpha.39'
|