@lifi/perps-sdk-provider-hyperliquid 10.1.4 → 11.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.
@@ -6,6 +6,10 @@ export type HlUniverseItem = {
6
6
  marginMode?: 'strictIsolated' | 'noCross';
7
7
  isDelisted?: boolean;
8
8
  };
9
+ export type HlMaxMarketOrderNtls = Array<[
10
+ minMaxLeverage: number,
11
+ maxMarketOrderUsd: string
12
+ ]>;
9
13
  export type HlMeta = {
10
14
  universe: HlUniverseItem[];
11
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/asset.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACzC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAMD,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B,CAAA;AAQD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAOD,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;AAGvD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAO3C,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAGD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,EAAE,CAAA;AAQzC,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAOD,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAA;AAOpD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAOD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAOD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/asset.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACzC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAOD,MAAM,MAAM,oBAAoB,GAAG,KAAK,CACtC;IAAC,cAAc,EAAE,MAAM;IAAE,iBAAiB,EAAE,MAAM;CAAC,CACpD,CAAA;AAMD,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B,CAAA;AAQD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAOD,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;AAGvD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAO3C,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAGD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,EAAE,CAAA;AAQzC,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAOD,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAA;AAOpD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAOD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAOD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAGD,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import type { PerpsMarket } from '@lifi/perps-types';
2
- import type { HlUniverseItem } from '../types/index.js';
3
- export declare const mapMarket: (universe: HlUniverseItem, categoryId: string) => PerpsMarket;
2
+ import type { HlMaxMarketOrderNtls, HlUniverseItem } from '../types/index.js';
3
+ export declare const mapMarket: (universe: HlUniverseItem, categoryId: string, maxMarketOrderNtls?: HlMaxMarketOrderNtls) => PerpsMarket;
4
4
  //# sourceMappingURL=mapMarket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAgBvD,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,KACjB,WAsBD,CAAA"}
1
+ {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AA0C7E,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,EAClB,qBAAqB,oBAAoB,KACxC,WAuBD,CAAA"}
@@ -1,13 +1,34 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.mapMarket = void 0;
4
7
  const perps_types_1 = require("@lifi/perps-types");
8
+ const big_js_1 = __importDefault(require("big.js"));
5
9
  const constants_js_1 = require("../constants.js");
6
10
  const liquidation_js_1 = require("./liquidation.js");
7
11
  const marketDisplay_js_1 = require("./marketDisplay.js");
8
12
  const orderFormatting_js_1 = require("./orderFormatting.js");
9
13
  const QUOTE_SYMBOL = 'USDC';
10
- const mapMarket = (universe, categoryId) => ({
14
+ const LIMIT_ORDER_VALUE_MULTIPLIER = 10;
15
+ const mapMarketOrderLimits = (maxLeverage, tiers) => {
16
+ const selected = tiers
17
+ ?.slice()
18
+ .sort(([a], [b]) => b - a)
19
+ .find(([minMaxLeverage]) => minMaxLeverage <= maxLeverage);
20
+ if (selected === undefined) {
21
+ return {};
22
+ }
23
+ const maxMarketOrderUsd = new big_js_1.default(selected[1]);
24
+ return {
25
+ maxMarketOrderUsd: maxMarketOrderUsd.toFixed(),
26
+ maxLimitOrderUsd: maxMarketOrderUsd
27
+ .times(LIMIT_ORDER_VALUE_MULTIPLIER)
28
+ .toFixed(),
29
+ };
30
+ };
31
+ const mapMarket = (universe, categoryId, maxMarketOrderNtls) => ({
11
32
  providerId: constants_js_1.PROVIDER_KEY,
12
33
  id: universe.name,
13
34
  ...(universe.isDelisted === undefined
@@ -19,6 +40,7 @@ const mapMarket = (universe, categoryId) => ({
19
40
  szDecimals: universe.szDecimals,
20
41
  priceDecimals: (0, orderFormatting_js_1.getMaxPriceDecimals)(universe.szDecimals),
21
42
  maxLeverage: universe.maxLeverage,
43
+ ...mapMarketOrderLimits(universe.maxLeverage, maxMarketOrderNtls),
22
44
  onlyIsolated: universe.marginMode !== undefined || universe.onlyIsolated === true,
23
45
  positionMarginAdjustment: universe.marginMode === 'noCross' ||
24
46
  (universe.marginMode === undefined && universe.onlyIsolated !== true)
@@ -1 +1 @@
1
- {"version":3,"file":"mapMarket.js","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":";;;AACA,mDAA4D;AAC5D,kDAA8C;AAE9C,qDAAiE;AACjE,yDAA8C;AAC9C,6DAA0D;AAG1D,MAAM,YAAY,GAAG,MAAM,CAAA;AAUpB,MAAM,SAAS,GAAG,CACvB,QAAwB,EACxB,UAAkB,EACL,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,2BAAY;IACxB,EAAE,EAAE,QAAQ,CAAC,IAAI;IACjB,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;IACxC,UAAU;IACV,SAAS,EAAE,IAAA,4BAAS,EAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,IAAA,4BAAS,EAAC,YAAY,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;IAC/B,aAAa,EAAE,IAAA,wCAAmB,EAAC,QAAQ,CAAC,UAAU,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,YAAY,EACV,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI;IAGrE,wBAAwB,EACtB,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;QACnE,CAAC,CAAC,sCAAwB,CAAC,cAAc;QACzC,CAAC,CAAC,sCAAwB,CAAC,QAAQ;IACvC,qBAAqB,EAAE,IAAA,+CAA8B,EAAC,QAAQ,CAAC,WAAW,CAAC;CAC5E,CAAC,CAAA;AAzBW,QAAA,SAAS,aAyBpB"}
1
+ {"version":3,"file":"mapMarket.js","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":";;;;;;AACA,mDAA4D;AAC5D,oDAAwB;AACxB,kDAA8C;AAE9C,qDAAiE;AACjE,yDAA8C;AAC9C,6DAA0D;AAG1D,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B,MAAM,4BAA4B,GAAG,EAAE,CAAA;AAOvC,MAAM,oBAAoB,GAAG,CAC3B,WAAmB,EACnB,KAA4B,EACT,EAAE;IACrB,MAAM,QAAQ,GAAG,KAAK;QACpB,EAAE,KAAK,EAAE;SACR,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,cAAc,IAAI,WAAW,CAAC,CAAA;IAC5D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,gBAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,OAAO;QACL,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,EAAE;QAC9C,gBAAgB,EAAE,iBAAiB;aAChC,KAAK,CAAC,4BAA4B,CAAC;aACnC,OAAO,EAAE;KACb,CAAA;AACH,CAAC,CAAA;AASM,MAAM,SAAS,GAAG,CACvB,QAAwB,EACxB,UAAkB,EAClB,kBAAyC,EAC5B,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,2BAAY;IACxB,EAAE,EAAE,QAAQ,CAAC,IAAI;IACjB,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;IACxC,UAAU;IACV,SAAS,EAAE,IAAA,4BAAS,EAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,IAAA,4BAAS,EAAC,YAAY,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;IAC/B,aAAa,EAAE,IAAA,wCAAmB,EAAC,QAAQ,CAAC,UAAU,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjE,YAAY,EACV,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI;IAGrE,wBAAwB,EACtB,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;QACnE,CAAC,CAAC,sCAAwB,CAAC,cAAc;QACzC,CAAC,CAAC,sCAAwB,CAAC,QAAQ;IACvC,qBAAqB,EAAE,IAAA,+CAA8B,EAAC,QAAQ,CAAC,WAAW,CAAC;CAC5E,CAAC,CAAA;AA3BW,QAAA,SAAS,aA2BpB"}
@@ -12,6 +12,15 @@ export type HlUniverseItem = {
12
12
  marginMode?: 'strictIsolated' | 'noCross';
13
13
  isDelisted?: boolean;
14
14
  };
15
+ /**
16
+ * Descending leverage thresholds and USD market-order caps from the
17
+ * `maxMarketOrderNtls` info query.
18
+ * @public
19
+ */
20
+ export type HlMaxMarketOrderNtls = Array<[
21
+ minMaxLeverage: number,
22
+ maxMarketOrderUsd: string
23
+ ]>;
15
24
  /**
16
25
  * Perpetual metadata envelope returned by the Hyperliquid `meta` info query.
17
26
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/asset.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACzC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;AAEvD,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAE3C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,EAAE,CAAA;AAEzC;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAA;AAEpD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/asset.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  import type { PerpsMarket } from '@lifi/perps-types';
2
- import type { HlUniverseItem } from '../types/index.js';
2
+ import type { HlMaxMarketOrderNtls, HlUniverseItem } from '../types/index.js';
3
3
  /**
4
- * Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
5
- * metadata. Live mark/stats fields live on the {@link MarketContext} — see
6
- * {@link mapMarketContext}. `categoryId` is the `Provider.categories[].id` of the
7
- * dex the entry was fetched from known to the caller at fetch time, never
8
- * re-derived from the coin string.
4
+ * Map Hyperliquid universe metadata and optional `maxMarketOrderNtls` tiers to
5
+ * a {@link PerpsMarket}. Missing tiers leave both order caps unset. Live stats
6
+ * stay on {@link MarketContext}; callers supply the provider category id
7
+ * because the coin string does not contain it.
9
8
  * @public
10
9
  */
11
- export declare const mapMarket: (universe: HlUniverseItem, categoryId: string) => PerpsMarket;
10
+ export declare const mapMarket: (universe: HlUniverseItem, categoryId: string, maxMarketOrderNtls?: HlMaxMarketOrderNtls) => PerpsMarket;
12
11
  //# sourceMappingURL=mapMarket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQvD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,KACjB,WAsBD,CAAA"}
1
+ {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAmC7E;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,EAClB,qBAAqB,oBAAoB,KACxC,WAuBD,CAAA"}
@@ -1,19 +1,37 @@
1
1
  import { PositionMarginAdjustment } from '@lifi/perps-types';
2
+ import Big from 'big.js';
2
3
  import { PROVIDER_KEY } from '../constants.js';
3
4
  import { calculateMaintenanceMarginRate } from './liquidation.js';
4
5
  import { coinAsset } from './marketDisplay.js';
5
6
  import { getMaxPriceDecimals } from './orderFormatting.js';
6
7
  /** Hyperliquid quotes every perp market in USDC. */
7
8
  const QUOTE_SYMBOL = 'USDC';
9
+ /** Hyperliquid documents the limit-order notional cap as 10x the market-order cap. */
10
+ const LIMIT_ORDER_VALUE_MULTIPLIER = 10;
11
+ const mapMarketOrderLimits = (maxLeverage, tiers) => {
12
+ const selected = tiers
13
+ ?.slice()
14
+ .sort(([a], [b]) => b - a)
15
+ .find(([minMaxLeverage]) => minMaxLeverage <= maxLeverage);
16
+ if (selected === undefined) {
17
+ return {};
18
+ }
19
+ const maxMarketOrderUsd = new Big(selected[1]);
20
+ return {
21
+ maxMarketOrderUsd: maxMarketOrderUsd.toFixed(),
22
+ maxLimitOrderUsd: maxMarketOrderUsd
23
+ .times(LIMIT_ORDER_VALUE_MULTIPLIER)
24
+ .toFixed(),
25
+ };
26
+ };
8
27
  /**
9
- * Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
10
- * metadata. Live mark/stats fields live on the {@link MarketContext} — see
11
- * {@link mapMarketContext}. `categoryId` is the `Provider.categories[].id` of the
12
- * dex the entry was fetched from known to the caller at fetch time, never
13
- * re-derived from the coin string.
28
+ * Map Hyperliquid universe metadata and optional `maxMarketOrderNtls` tiers to
29
+ * a {@link PerpsMarket}. Missing tiers leave both order caps unset. Live stats
30
+ * stay on {@link MarketContext}; callers supply the provider category id
31
+ * because the coin string does not contain it.
14
32
  * @public
15
33
  */
16
- export const mapMarket = (universe, categoryId) => ({
34
+ export const mapMarket = (universe, categoryId, maxMarketOrderNtls) => ({
17
35
  providerId: PROVIDER_KEY,
18
36
  id: universe.name,
19
37
  ...(universe.isDelisted === undefined
@@ -25,6 +43,7 @@ export const mapMarket = (universe, categoryId) => ({
25
43
  szDecimals: universe.szDecimals,
26
44
  priceDecimals: getMaxPriceDecimals(universe.szDecimals),
27
45
  maxLeverage: universe.maxLeverage,
46
+ ...mapMarketOrderLimits(universe.maxLeverage, maxMarketOrderNtls),
28
47
  onlyIsolated: universe.marginMode !== undefined || universe.onlyIsolated === true,
29
48
  // Deprecated `onlyIsolated` cannot distinguish strict-isolated from
30
49
  // no-cross, so the ambiguous legacy shape fails closed as add-only.
@@ -1 +1 @@
1
- {"version":3,"file":"mapMarket.js","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,oDAAoD;AACpD,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAwB,EACxB,UAAkB,EACL,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,QAAQ,CAAC,IAAI;IACjB,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;IACxC,UAAU;IACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;IAC/B,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,YAAY,EACV,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI;IACrE,oEAAoE;IACpE,oEAAoE;IACpE,wBAAwB,EACtB,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;QACnE,CAAC,CAAC,wBAAwB,CAAC,cAAc;QACzC,CAAC,CAAC,wBAAwB,CAAC,QAAQ;IACvC,qBAAqB,EAAE,8BAA8B,CAAC,QAAQ,CAAC,WAAW,CAAC;CAC5E,CAAC,CAAA"}
1
+ {"version":3,"file":"mapMarket.js","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,oDAAoD;AACpD,MAAM,YAAY,GAAG,MAAM,CAAA;AAC3B,sFAAsF;AACtF,MAAM,4BAA4B,GAAG,EAAE,CAAA;AAOvC,MAAM,oBAAoB,GAAG,CAC3B,WAAmB,EACnB,KAA4B,EACT,EAAE;IACrB,MAAM,QAAQ,GAAG,KAAK;QACpB,EAAE,KAAK,EAAE;SACR,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,cAAc,IAAI,WAAW,CAAC,CAAA;IAC5D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,OAAO;QACL,iBAAiB,EAAE,iBAAiB,CAAC,OAAO,EAAE;QAC9C,gBAAgB,EAAE,iBAAiB;aAChC,KAAK,CAAC,4BAA4B,CAAC;aACnC,OAAO,EAAE;KACb,CAAA;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAAwB,EACxB,UAAkB,EAClB,kBAAyC,EAC5B,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,QAAQ,CAAC,IAAI;IACjB,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS;QACnC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;IACxC,UAAU;IACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC;IACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;IAC/B,aAAa,EAAE,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC;IACvD,WAAW,EAAE,QAAQ,CAAC,WAAW;IACjC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjE,YAAY,EACV,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI;IACrE,oEAAoE;IACpE,oEAAoE;IACpE,wBAAwB,EACtB,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;QACnE,CAAC,CAAC,wBAAwB,CAAC,cAAc;QACzC,CAAC,CAAC,wBAAwB,CAAC,QAAQ;IACvC,qBAAqB,EAAE,8BAA8B,CAAC,QAAQ,CAAC,WAAW,CAAC;CAC5E,CAAC,CAAA"}
@@ -12,6 +12,15 @@ export type HlUniverseItem = {
12
12
  marginMode?: 'strictIsolated' | 'noCross';
13
13
  isDelisted?: boolean;
14
14
  };
15
+ /**
16
+ * Descending leverage thresholds and USD market-order caps from the
17
+ * `maxMarketOrderNtls` info query.
18
+ * @public
19
+ */
20
+ export type HlMaxMarketOrderNtls = Array<[
21
+ minMaxLeverage: number,
22
+ maxMarketOrderUsd: string
23
+ ]>;
15
24
  /**
16
25
  * Perpetual metadata envelope returned by the Hyperliquid `meta` info query.
17
26
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/asset.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACzC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;AAEvD,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAE3C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,EAAE,CAAA;AAEzC;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAA;AAEpD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/types/asset.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,yDAAyD;IACzD,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACzC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,CACtC;IAAC,cAAc,EAAE,MAAM;IAAE,iBAAiB,EAAE,MAAM;CAAC,CACpD,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,cAAc,EAAE,CAAA;CAC3B,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;AAEvD,wEAAwE;AACxE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAE3C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,EAAE,CAAA;AAEzC;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAA;AAEpD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,qFAAqF;AACrF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,CAAA;AAED,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAA"}
@@ -1,12 +1,11 @@
1
1
  import type { PerpsMarket } from '@lifi/perps-types';
2
- import type { HlUniverseItem } from '../types/index.js';
2
+ import type { HlMaxMarketOrderNtls, HlUniverseItem } from '../types/index.js';
3
3
  /**
4
- * Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
5
- * metadata. Live mark/stats fields live on the {@link MarketContext} — see
6
- * {@link mapMarketContext}. `categoryId` is the `Provider.categories[].id` of the
7
- * dex the entry was fetched from known to the caller at fetch time, never
8
- * re-derived from the coin string.
4
+ * Map Hyperliquid universe metadata and optional `maxMarketOrderNtls` tiers to
5
+ * a {@link PerpsMarket}. Missing tiers leave both order caps unset. Live stats
6
+ * stay on {@link MarketContext}; callers supply the provider category id
7
+ * because the coin string does not contain it.
9
8
  * @public
10
9
  */
11
- export declare const mapMarket: (universe: HlUniverseItem, categoryId: string) => PerpsMarket;
10
+ export declare const mapMarket: (universe: HlUniverseItem, categoryId: string, maxMarketOrderNtls?: HlMaxMarketOrderNtls) => PerpsMarket;
12
11
  //# sourceMappingURL=mapMarket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQvD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,KACjB,WAsBD,CAAA"}
1
+ {"version":3,"file":"mapMarket.d.ts","sourceRoot":"","sources":["../../../src/utils/mapMarket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAmC7E;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU,cAAc,EACxB,YAAY,MAAM,EAClB,qBAAqB,oBAAoB,KACxC,WAuBD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-hyperliquid",
3
- "version": "10.1.4",
3
+ "version": "11.0.0",
4
4
  "description": "Hyperliquid provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -49,10 +49,10 @@
49
49
  "dependencies": {
50
50
  "big.js": "^7.0.1",
51
51
  "viem": "^2.55.18",
52
- "@lifi/perps-types": "^11.4.0"
52
+ "@lifi/perps-types": "^12.0.0"
53
53
  },
54
54
  "peerDependencies": {
55
- "@lifi/perps-sdk": "^10.2.0"
55
+ "@lifi/perps-sdk": "^11.0.0"
56
56
  },
57
57
  "publishConfig": {
58
58
  "access": "public"
@@ -15,6 +15,15 @@ export type HlUniverseItem = {
15
15
  isDelisted?: boolean
16
16
  }
17
17
 
18
+ /**
19
+ * Descending leverage thresholds and USD market-order caps from the
20
+ * `maxMarketOrderNtls` info query.
21
+ * @public
22
+ */
23
+ export type HlMaxMarketOrderNtls = Array<
24
+ [minMaxLeverage: number, maxMarketOrderUsd: string]
25
+ >
26
+
18
27
  /**
19
28
  * Perpetual metadata envelope returned by the Hyperliquid `meta` info query.
20
29
  * @public
@@ -1,25 +1,53 @@
1
1
  import type { PerpsMarket } from '@lifi/perps-types'
2
2
  import { PositionMarginAdjustment } from '@lifi/perps-types'
3
+ import Big from 'big.js'
3
4
  import { PROVIDER_KEY } from '../constants.js'
4
- import type { HlUniverseItem } from '../types/index.js'
5
+ import type { HlMaxMarketOrderNtls, HlUniverseItem } from '../types/index.js'
5
6
  import { calculateMaintenanceMarginRate } from './liquidation.js'
6
7
  import { coinAsset } from './marketDisplay.js'
7
8
  import { getMaxPriceDecimals } from './orderFormatting.js'
8
9
 
9
10
  /** Hyperliquid quotes every perp market in USDC. */
10
11
  const QUOTE_SYMBOL = 'USDC'
12
+ /** Hyperliquid documents the limit-order notional cap as 10x the market-order cap. */
13
+ const LIMIT_ORDER_VALUE_MULTIPLIER = 10
14
+
15
+ type MarketOrderLimits = Pick<
16
+ PerpsMarket,
17
+ 'maxMarketOrderUsd' | 'maxLimitOrderUsd'
18
+ >
19
+
20
+ const mapMarketOrderLimits = (
21
+ maxLeverage: number,
22
+ tiers?: HlMaxMarketOrderNtls
23
+ ): MarketOrderLimits => {
24
+ const selected = tiers
25
+ ?.slice()
26
+ .sort(([a], [b]) => b - a)
27
+ .find(([minMaxLeverage]) => minMaxLeverage <= maxLeverage)
28
+ if (selected === undefined) {
29
+ return {}
30
+ }
31
+ const maxMarketOrderUsd = new Big(selected[1])
32
+ return {
33
+ maxMarketOrderUsd: maxMarketOrderUsd.toFixed(),
34
+ maxLimitOrderUsd: maxMarketOrderUsd
35
+ .times(LIMIT_ORDER_VALUE_MULTIPLIER)
36
+ .toFixed(),
37
+ }
38
+ }
11
39
 
12
40
  /**
13
- * Map a Hyperliquid universe entry to a {@link PerpsMarket}'s static instrument
14
- * metadata. Live mark/stats fields live on the {@link MarketContext} — see
15
- * {@link mapMarketContext}. `categoryId` is the `Provider.categories[].id` of the
16
- * dex the entry was fetched from known to the caller at fetch time, never
17
- * re-derived from the coin string.
41
+ * Map Hyperliquid universe metadata and optional `maxMarketOrderNtls` tiers to
42
+ * a {@link PerpsMarket}. Missing tiers leave both order caps unset. Live stats
43
+ * stay on {@link MarketContext}; callers supply the provider category id
44
+ * because the coin string does not contain it.
18
45
  * @public
19
46
  */
20
47
  export const mapMarket = (
21
48
  universe: HlUniverseItem,
22
- categoryId: string
49
+ categoryId: string,
50
+ maxMarketOrderNtls?: HlMaxMarketOrderNtls
23
51
  ): PerpsMarket => ({
24
52
  providerId: PROVIDER_KEY,
25
53
  id: universe.name,
@@ -32,6 +60,7 @@ export const mapMarket = (
32
60
  szDecimals: universe.szDecimals,
33
61
  priceDecimals: getMaxPriceDecimals(universe.szDecimals),
34
62
  maxLeverage: universe.maxLeverage,
63
+ ...mapMarketOrderLimits(universe.maxLeverage, maxMarketOrderNtls),
35
64
  onlyIsolated:
36
65
  universe.marginMode !== undefined || universe.onlyIsolated === true,
37
66
  // Deprecated `onlyIsolated` cannot distinguish strict-isolated from