opentool 0.19.6 → 0.20.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.
@@ -1,4 +1,4 @@
1
- export { D as DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, a as DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS, H as HYPERLIQUID_HIP3_DEXES, b as HyperliquidAbstraction, c as HyperliquidAccountMode, d as HyperliquidActiveAsset, e as HyperliquidApiError, bg as HyperliquidApproveBuilderFeeOptions, bh as HyperliquidApproveBuilderFeeResponse, f as HyperliquidApproximateLiquidationParams, i as HyperliquidBuilderApprovalError, j as HyperliquidBuilderFee, bi as HyperliquidClearinghouseState, bj as HyperliquidDepositResult, k as HyperliquidEnvironment, l as HyperliquidExchangeClient, m as HyperliquidExchangeResponse, n as HyperliquidGrouping, o as HyperliquidGuardError, p as HyperliquidHip3Dex, r as HyperliquidInfoClient, s as HyperliquidMarketDescriptor, t as HyperliquidMarketDescriptorInput, u as HyperliquidMarketIdentityInput, x as HyperliquidOrderIntent, bk as HyperliquidOrderOptions, bl as HyperliquidOrderResponse, bm as HyperliquidOrderStatus, y as HyperliquidParsedSymbol, z as HyperliquidParsedSymbolKind, B as HyperliquidPlaceOrderWithTpSlOptions, C as HyperliquidPlacePositionTpSlOptions, I as HyperliquidResolvedMarketDescriptor, K as HyperliquidTermsError, M as HyperliquidTimeInForce, N as HyperliquidTpSlExecutionType, O as HyperliquidTpSlLegInput, P as HyperliquidTriggerOptions, Q as HyperliquidTriggerType, bn as HyperliquidWithdrawResult, R as MarketIdentity, bo as approveHyperliquidBuilderFee, S as batchModifyHyperliquidOrders, T as buildHyperliquidMarketDescriptor, U as buildHyperliquidMarketIdentity, V as buildHyperliquidProfileAssets, X as cancelAllHyperliquidOrders, Y as cancelHyperliquidOrders, Z as cancelHyperliquidOrdersByCloid, $ as cancelHyperliquidTwapOrder, a0 as computeHyperliquidMarketIocLimitPrice, bp as createHyperliquidActionHash, a1 as createHyperliquidSubAccount, a2 as createMonotonicNonceFactory, bq as depositToHyperliquidBridge, a3 as estimateHyperliquidLiquidationPrice, a4 as extractHyperliquidDex, a6 as fetchHyperliquidActiveAsset, a8 as fetchHyperliquidAssetCtxs, br as fetchHyperliquidClearinghouseState, ab as fetchHyperliquidDexMetaAndAssetCtxs, ac as fetchHyperliquidFrontendOpenOrders, ad as fetchHyperliquidFrontendOpenOrdersAcrossDexes, ae as fetchHyperliquidHistoricalOrders, af as fetchHyperliquidMeta, ag as fetchHyperliquidMetaAndAssetCtxs, ah as fetchHyperliquidOpenOrders, ai as fetchHyperliquidOpenOrdersAcrossDexes, aj as fetchHyperliquidOrderStatus, al as fetchHyperliquidPreTransferCheck, am as fetchHyperliquidResolvedInfoCoin, an as fetchHyperliquidResolvedMarketDescriptor, ao as fetchHyperliquidSizeDecimals, aq as fetchHyperliquidSpotAssetCtxs, ar as fetchHyperliquidSpotClearinghouseState, at as fetchHyperliquidSpotMeta, au as fetchHyperliquidSpotMetaAndAssetCtxs, ax as fetchHyperliquidTickSize, ay as fetchHyperliquidUserFills, az as fetchHyperliquidUserFillsByTime, aA as fetchHyperliquidUserRateLimit, aB as formatHyperliquidMarketablePrice, aD as formatHyperliquidPrice, aE as formatHyperliquidSize, bs as getHyperliquidMaxBuilderFee, aF as getKnownHyperliquidDexes, aG as isHyperliquidSpotSymbol, aH as modifyHyperliquidOrder, aI as normalizeHyperliquidBaseSymbol, aK as normalizeHyperliquidMetaSymbol, aL as normalizeSpotTokenName, aM as parseHyperliquidSymbol, aN as parseSpotPairSymbol, bt as placeHyperliquidOrder, aO as placeHyperliquidOrderWithTpSl, aP as placeHyperliquidPositionTpSl, aQ as placeHyperliquidTwapOrder, aR as reserveHyperliquidRequestWeight, aS as resolveHyperliquidAbstractionFromMode, aU as resolveHyperliquidLeverageMode, aV as resolveHyperliquidMarketDataCoin, aX as resolveHyperliquidOrderSymbol, aY as resolveHyperliquidPair, aZ as resolveHyperliquidPerpSymbol, a_ as resolveHyperliquidProfileChain, a$ as resolveHyperliquidSpotSymbol, b0 as resolveHyperliquidSymbol, b1 as resolveSpotMidCandidates, b2 as resolveSpotTokenCandidates, b4 as scheduleHyperliquidCancel, b5 as sendHyperliquidSpot, b6 as setHyperliquidAccountAbstractionMode, b7 as setHyperliquidPortfolioMargin, b8 as supportsHyperliquidBuilderFee, b9 as transferHyperliquidSubAccount, ba as updateHyperliquidIsolatedMargin, bb as updateHyperliquidLeverage, bu as withdrawFromHyperliquid } from '../../browser-Bieph3Ou.js';
1
+ export { D as DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, a as DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS, H as HYPERLIQUID_HIP3_DEXES, b as HyperliquidAbstraction, c as HyperliquidAccountMode, d as HyperliquidActiveAsset, e as HyperliquidApiError, bj as HyperliquidApproveBuilderFeeOptions, bk as HyperliquidApproveBuilderFeeResponse, f as HyperliquidApproximateLiquidationParams, i as HyperliquidBuilderApprovalError, j as HyperliquidBuilderFee, bl as HyperliquidClearinghouseState, bm as HyperliquidDepositResult, k as HyperliquidEnvironment, l as HyperliquidExchangeClient, m as HyperliquidExchangeResponse, n as HyperliquidGrouping, o as HyperliquidGuardError, p as HyperliquidHip3Dex, r as HyperliquidInfoClient, s as HyperliquidMarketDescriptor, t as HyperliquidMarketDescriptorInput, u as HyperliquidMarketIdentityInput, x as HyperliquidOrderIntent, bn as HyperliquidOrderOptions, bo as HyperliquidOrderResponse, bp as HyperliquidOrderStatus, y as HyperliquidOutcomeSymbol, z as HyperliquidParsedSymbol, A as HyperliquidParsedSymbolKind, C as HyperliquidPlaceOrderWithTpSlOptions, E as HyperliquidPlacePositionTpSlOptions, J as HyperliquidResolvedMarketDescriptor, L as HyperliquidTermsError, N as HyperliquidTimeInForce, O as HyperliquidTpSlExecutionType, P as HyperliquidTpSlLegInput, Q as HyperliquidTriggerOptions, R as HyperliquidTriggerType, bq as HyperliquidWithdrawResult, S as MarketIdentity, br as approveHyperliquidBuilderFee, T as batchModifyHyperliquidOrders, U as buildHyperliquidMarketDescriptor, V as buildHyperliquidMarketIdentity, W as buildHyperliquidProfileAssets, Y as cancelAllHyperliquidOrders, Z as cancelHyperliquidOrders, $ as cancelHyperliquidOrdersByCloid, a0 as cancelHyperliquidTwapOrder, a1 as computeHyperliquidMarketIocLimitPrice, bs as createHyperliquidActionHash, a2 as createHyperliquidSubAccount, a3 as createMonotonicNonceFactory, bt as depositToHyperliquidBridge, a4 as estimateHyperliquidLiquidationPrice, a5 as extractHyperliquidDex, a7 as fetchHyperliquidActiveAsset, a9 as fetchHyperliquidAssetCtxs, bu as fetchHyperliquidClearinghouseState, ac as fetchHyperliquidDexMetaAndAssetCtxs, ad as fetchHyperliquidFrontendOpenOrders, ae as fetchHyperliquidFrontendOpenOrdersAcrossDexes, af as fetchHyperliquidHistoricalOrders, ag as fetchHyperliquidMeta, ah as fetchHyperliquidMetaAndAssetCtxs, ai as fetchHyperliquidOpenOrders, aj as fetchHyperliquidOpenOrdersAcrossDexes, ak as fetchHyperliquidOrderStatus, an as fetchHyperliquidPreTransferCheck, ao as fetchHyperliquidResolvedInfoCoin, ap as fetchHyperliquidResolvedMarketDescriptor, aq as fetchHyperliquidSizeDecimals, as as fetchHyperliquidSpotAssetCtxs, at as fetchHyperliquidSpotClearinghouseState, av as fetchHyperliquidSpotMeta, aw as fetchHyperliquidSpotMetaAndAssetCtxs, az as fetchHyperliquidTickSize, aA as fetchHyperliquidUserFills, aB as fetchHyperliquidUserFillsByTime, aC as fetchHyperliquidUserRateLimit, aD as formatHyperliquidMarketablePrice, aF as formatHyperliquidPrice, aG as formatHyperliquidSize, bv as getHyperliquidMaxBuilderFee, aH as getKnownHyperliquidDexes, aI as isHyperliquidSpotSymbol, aJ as modifyHyperliquidOrder, aK as normalizeHyperliquidBaseSymbol, aM as normalizeHyperliquidMetaSymbol, aN as normalizeSpotTokenName, aO as parseHyperliquidOutcomeSymbol, aP as parseHyperliquidSymbol, aQ as parseSpotPairSymbol, bw as placeHyperliquidOrder, aR as placeHyperliquidOrderWithTpSl, aS as placeHyperliquidPositionTpSl, aT as placeHyperliquidTwapOrder, aU as reserveHyperliquidRequestWeight, aV as resolveHyperliquidAbstractionFromMode, aX as resolveHyperliquidLeverageMode, aY as resolveHyperliquidMarketDataCoin, a_ as resolveHyperliquidOrderSymbol, a$ as resolveHyperliquidPair, b0 as resolveHyperliquidPerpSymbol, b1 as resolveHyperliquidProfileChain, b2 as resolveHyperliquidSpotSymbol, b3 as resolveHyperliquidSymbol, b4 as resolveSpotMidCandidates, b5 as resolveSpotTokenCandidates, b7 as scheduleHyperliquidCancel, b8 as sendHyperliquidSpot, b9 as setHyperliquidAccountAbstractionMode, ba as setHyperliquidPortfolioMargin, bb as supportsHyperliquidBuilderFee, bc as transferHyperliquidSubAccount, bd as updateHyperliquidIsolatedMargin, be as updateHyperliquidLeverage, bx as withdrawFromHyperliquid } from '../../browser-lhj5OsZa.js';
2
2
  import '../../types-BaTmu0gS.js';
3
3
  import 'viem';
4
4
  import 'viem/accounts';
@@ -45,6 +45,18 @@ var metaCache = /* @__PURE__ */ new Map();
45
45
  var spotMetaCache = /* @__PURE__ */ new Map();
46
46
  var perpDexsCache = /* @__PURE__ */ new Map();
47
47
  var UNKNOWN_SYMBOL = "UNKNOWN";
48
+ var OUTCOME_ORDER_ASSET_OFFSET = 1e8;
49
+ var OUTCOME_MARKET_DATA_PATTERN = /^#([0-9]+)$/;
50
+ var OUTCOME_TOKEN_PATTERN = /^\+([0-9]+)$/;
51
+ function parseHyperliquidOutcomeEncoding(value) {
52
+ const trimmed = value?.trim();
53
+ if (!trimmed) return null;
54
+ const encodedMatch = OUTCOME_MARKET_DATA_PATTERN.exec(trimmed) ?? OUTCOME_TOKEN_PATTERN.exec(trimmed);
55
+ if (!encodedMatch) return null;
56
+ const encoding = Number.parseInt(encodedMatch[1] ?? "", 10);
57
+ const side = encoding % 10;
58
+ return Number.isSafeInteger(encoding) && encoding >= 0 && side <= 1 ? encoding : null;
59
+ }
48
60
  var extractDexPrefix = (value) => {
49
61
  if (!value) return null;
50
62
  const trimmed = value.trim();
@@ -342,6 +354,10 @@ async function resolveHyperliquidAssetIndex(args) {
342
354
  if (!trimmed) {
343
355
  throw new Error("Hyperliquid symbol must be a non-empty string.");
344
356
  }
357
+ const outcomeEncoding = parseHyperliquidOutcomeEncoding(trimmed);
358
+ if (outcomeEncoding != null) {
359
+ return OUTCOME_ORDER_ASSET_OFFSET + outcomeEncoding;
360
+ }
345
361
  if (trimmed.startsWith("@")) {
346
362
  const rawIndex = trimmed.slice(1).trim();
347
363
  const index = Number(rawIndex);
@@ -683,6 +699,9 @@ function assertPositiveNumber(value, label) {
683
699
 
684
700
  // src/adapters/hyperliquid/symbols.ts
685
701
  var UNKNOWN_SYMBOL2 = "UNKNOWN";
702
+ var OUTCOME_ORDER_ASSET_OFFSET2 = 1e8;
703
+ var OUTCOME_MARKET_DATA_PATTERN2 = /^#([0-9]+)$/;
704
+ var OUTCOME_TOKEN_PATTERN2 = /^\+([0-9]+)$/;
686
705
  function extractHyperliquidDex(symbol) {
687
706
  const idx = symbol.indexOf(":");
688
707
  if (idx <= 0) return null;
@@ -693,6 +712,21 @@ function parseHyperliquidSymbol(value) {
693
712
  if (!value) return null;
694
713
  const trimmed = value.trim();
695
714
  if (!trimmed) return null;
715
+ const outcome = parseHyperliquidOutcomeSymbol(trimmed);
716
+ if (outcome) {
717
+ return {
718
+ raw: trimmed,
719
+ kind: "outcome",
720
+ normalized: outcome.marketDataCoin,
721
+ routeTicker: outcome.routeTicker,
722
+ displaySymbol: outcome.displaySymbol,
723
+ base: outcome.sideName,
724
+ quote: "USDH",
725
+ pair: null,
726
+ dex: null,
727
+ leverageMode: "cross"
728
+ };
729
+ }
696
730
  if (trimmed.startsWith("@")) {
697
731
  return {
698
732
  raw: trimmed,
@@ -754,6 +788,32 @@ function parseHyperliquidSymbol(value) {
754
788
  leverageMode: "cross"
755
789
  };
756
790
  }
791
+ function parseHyperliquidOutcomeSymbol(value) {
792
+ const trimmed = value?.trim();
793
+ if (!trimmed) return null;
794
+ const encodedMatch = OUTCOME_MARKET_DATA_PATTERN2.exec(trimmed) ?? OUTCOME_TOKEN_PATTERN2.exec(trimmed);
795
+ if (!encodedMatch) return null;
796
+ const encoding = Number.parseInt(encodedMatch[1] ?? "", 10);
797
+ const outcomeId = Math.floor(encoding / 10);
798
+ const side = encoding % 10;
799
+ if (outcomeId == null || side == null || encoding == null || !Number.isSafeInteger(outcomeId) || !Number.isSafeInteger(side) || !Number.isSafeInteger(encoding) || outcomeId < 0 || side < 0 || side > 1 || encoding < 0) {
800
+ return null;
801
+ }
802
+ const marketDataCoin = `#${encoding}`;
803
+ const sideName = side === 0 ? "YES" : "NO";
804
+ return {
805
+ outcomeId,
806
+ side,
807
+ encoding,
808
+ orderSymbol: marketDataCoin,
809
+ marketDataCoin,
810
+ tokenName: `+${encoding}`,
811
+ sideName,
812
+ displaySymbol: marketDataCoin,
813
+ routeTicker: marketDataCoin,
814
+ assetId: OUTCOME_ORDER_ASSET_OFFSET2 + encoding
815
+ };
816
+ }
757
817
  function normalizeHyperliquidQuoteSymbol(value) {
758
818
  if (typeof value !== "string") return null;
759
819
  const trimmed = value.trim();
@@ -834,6 +894,29 @@ function buildHyperliquidMarketDescriptor(input) {
834
894
  if (!parsed) return null;
835
895
  const explicitPair = resolveHyperliquidPair(input.pair);
836
896
  const explicitQuote = normalizeHyperliquidQuoteSymbol(input.quote);
897
+ if (parsed.kind === "outcome") {
898
+ const outcome = parseHyperliquidOutcomeSymbol(rawSymbol);
899
+ if (!outcome) return null;
900
+ const orderSymbol2 = input.orderSymbol?.trim() || outcome.orderSymbol;
901
+ const marketDataCoin2 = input.marketDataCoin?.trim() || outcome.marketDataCoin;
902
+ return {
903
+ rawSymbol,
904
+ kind: "outcome",
905
+ routeTicker: outcome.routeTicker,
906
+ displaySymbol: input.displaySymbol?.trim() || outcome.displaySymbol,
907
+ normalized: outcome.marketDataCoin,
908
+ orderSymbol: orderSymbol2,
909
+ marketDataCoin: marketDataCoin2,
910
+ base: outcome.sideName,
911
+ quote: explicitQuote || "USDH",
912
+ pair: null,
913
+ canonicalPair: null,
914
+ dex: null,
915
+ leverageMode: "cross",
916
+ spotIndex: null,
917
+ assetId: input.assetId ?? outcome.assetId
918
+ };
919
+ }
837
920
  if (parsed.kind === "spot" || parsed.kind === "spotIndex") {
838
921
  const canonicalPair2 = explicitPair ?? parsed.pair;
839
922
  const pair = canonicalPair2;
@@ -932,6 +1015,7 @@ function parseSpotPairSymbol(symbol) {
932
1015
  function isHyperliquidSpotSymbol(symbol) {
933
1016
  const trimmed = symbol.trim();
934
1017
  if (!trimmed) return false;
1018
+ if (parseHyperliquidOutcomeSymbol(trimmed)) return false;
935
1019
  if (trimmed.startsWith("@") || trimmed.includes("/")) return true;
936
1020
  if (trimmed.includes(":")) return false;
937
1021
  return resolveHyperliquidPair(trimmed) !== null;
@@ -940,6 +1024,8 @@ function resolveHyperliquidMarketDataCoin(value) {
940
1024
  if (!value) return null;
941
1025
  const trimmed = value.trim();
942
1026
  if (!trimmed) return null;
1027
+ const outcome = parseHyperliquidOutcomeSymbol(trimmed);
1028
+ if (outcome) return outcome.marketDataCoin;
943
1029
  if (trimmed.startsWith("@")) return trimmed;
944
1030
  const pair = resolveHyperliquidPair(trimmed);
945
1031
  if (pair && !extractHyperliquidDex(trimmed)) {
@@ -948,6 +1034,9 @@ function resolveHyperliquidMarketDataCoin(value) {
948
1034
  return trimmed;
949
1035
  }
950
1036
  function supportsHyperliquidBuilderFee(params) {
1037
+ if (parseHyperliquidOutcomeSymbol(params.symbol)) {
1038
+ return false;
1039
+ }
951
1040
  if (!isHyperliquidSpotSymbol(params.symbol)) {
952
1041
  return true;
953
1042
  }
@@ -975,6 +1064,8 @@ function resolveHyperliquidOrderSymbol(value) {
975
1064
  if (!value) return null;
976
1065
  const trimmed = value.trim();
977
1066
  if (!trimmed) return null;
1067
+ const outcome = parseHyperliquidOutcomeSymbol(trimmed);
1068
+ if (outcome) return outcome.orderSymbol;
978
1069
  if (trimmed.startsWith("@")) return trimmed;
979
1070
  if (trimmed.includes(":")) {
980
1071
  const [rawDex, ...restParts] = trimmed.split(":");
@@ -993,6 +1084,8 @@ function resolveHyperliquidOrderSymbol(value) {
993
1084
  function resolveHyperliquidSymbol(asset, override) {
994
1085
  const raw = override && override.trim().length > 0 ? override.trim() : asset.trim();
995
1086
  if (!raw) return raw;
1087
+ const outcome = parseHyperliquidOutcomeSymbol(raw);
1088
+ if (outcome) return outcome.orderSymbol;
996
1089
  if (raw.startsWith("@")) return raw;
997
1090
  if (raw.includes(":")) {
998
1091
  const [dexRaw, ...restParts] = raw.split(":");
@@ -1114,6 +1207,9 @@ var HyperliquidInfoClient = class {
1114
1207
  spotAssetCtxs() {
1115
1208
  return fetchHyperliquidSpotAssetCtxs(this.environment);
1116
1209
  }
1210
+ outcomeMeta() {
1211
+ return fetchHyperliquidOutcomeMeta(this.environment);
1212
+ }
1117
1213
  openOrders(user) {
1118
1214
  return fetchHyperliquidOpenOrders({ user, environment: this.environment });
1119
1215
  }
@@ -1195,6 +1291,9 @@ async function fetchHyperliquidAssetCtxs(environment = "mainnet") {
1195
1291
  async function fetchHyperliquidSpotAssetCtxs(environment = "mainnet") {
1196
1292
  return postInfo(environment, { type: "spotAssetCtxs" });
1197
1293
  }
1294
+ async function fetchHyperliquidOutcomeMeta(environment = "mainnet") {
1295
+ return postInfo(environment, { type: "outcomeMeta" });
1296
+ }
1198
1297
  async function fetchHyperliquidOpenOrders(params) {
1199
1298
  const env = params.environment ?? "mainnet";
1200
1299
  const orders = await postInfo(env, {
@@ -2666,6 +2765,15 @@ async function fetchHyperliquidResolvedMarketDescriptor(params) {
2666
2765
  if (!parsed) {
2667
2766
  throw new Error(`Unable to parse Hyperliquid symbol: ${params.symbol}`);
2668
2767
  }
2768
+ if (parsed.kind === "outcome") {
2769
+ const descriptor2 = buildHyperliquidMarketDescriptor({
2770
+ symbol: params.symbol
2771
+ });
2772
+ if (!descriptor2) {
2773
+ throw new Error(`Unable to build Hyperliquid outcome market descriptor: ${params.symbol}`);
2774
+ }
2775
+ return descriptor2;
2776
+ }
2669
2777
  if (parsed.kind === "spot" || parsed.kind === "spotIndex") {
2670
2778
  const spotInfo = parsed.kind === "spotIndex" ? await fetchHyperliquidSpotMarketInfoByIndex({
2671
2779
  environment: params.environment,
@@ -2724,6 +2832,10 @@ async function fetchHyperliquidResolvedInfoCoin(params) {
2724
2832
  }
2725
2833
  async function fetchHyperliquidSizeDecimals(params) {
2726
2834
  const { symbol, environment } = params;
2835
+ const parsed = parseHyperliquidSymbol(symbol);
2836
+ if (parsed?.kind === "outcome") {
2837
+ return 0;
2838
+ }
2727
2839
  if (isHyperliquidSpotSymbol(symbol)) {
2728
2840
  const meta2 = await fetchHyperliquidSpotMeta(environment);
2729
2841
  return resolveSpotSizeDecimals(meta2, symbol);
@@ -2737,7 +2849,6 @@ async function fetchHyperliquidSizeDecimals(params) {
2737
2849
  if (match && typeof match.szDecimals === "number") {
2738
2850
  return match.szDecimals;
2739
2851
  }
2740
- const parsed = parseHyperliquidSymbol(symbol);
2741
2852
  const dex = parsed?.dex ?? null;
2742
2853
  if (!dex) {
2743
2854
  throw new Error(`No size decimals found for ${symbol}.`);
@@ -2832,6 +2943,31 @@ var StringMath = {
2832
2943
  }
2833
2944
  return digits.join("").replace(/^0+(?=\d)/, "") || "0";
2834
2945
  },
2946
+ toPrecisionDirectional(value, precision, mode) {
2947
+ if (!Number.isInteger(precision) || precision < 1) {
2948
+ throw new RangeError("Precision must be a positive integer.");
2949
+ }
2950
+ if (/^-?0+(\.0*)?$/.test(value)) return "0";
2951
+ const negative = value.startsWith("-");
2952
+ const abs = negative ? value.slice(1) : value;
2953
+ const magnitude = StringMath.log10Floor(abs);
2954
+ const shiftAmount = precision - magnitude - 1;
2955
+ const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
2956
+ const rounded = StringMath.roundInteger(shifted, mode);
2957
+ const shiftedBack = StringMath.multiplyByPow10(rounded, -shiftAmount);
2958
+ return normalizeDecimalString(negative ? `-${shiftedBack}` : shiftedBack);
2959
+ },
2960
+ toFixedDirectional(value, decimals, mode) {
2961
+ if (!Number.isInteger(decimals) || decimals < 0) {
2962
+ throw new RangeError("Decimals must be a non-negative integer.");
2963
+ }
2964
+ if (decimals === 0) {
2965
+ return normalizeDecimalString(StringMath.roundInteger(value, mode));
2966
+ }
2967
+ const shifted = StringMath.multiplyByPow10(value, decimals);
2968
+ const rounded = StringMath.roundInteger(shifted, mode);
2969
+ return normalizeDecimalString(StringMath.multiplyByPow10(rounded, -decimals));
2970
+ },
2835
2971
  toPrecisionTruncate(value, precision) {
2836
2972
  if (!Number.isInteger(precision) || precision < 1) {
2837
2973
  throw new RangeError("Precision must be a positive integer.");
@@ -2916,6 +3052,26 @@ function formatHyperliquidSize(size, szDecimals) {
2916
3052
  }
2917
3053
  return truncated;
2918
3054
  }
3055
+ function resolveSizeDecimals(value) {
3056
+ if (typeof value !== "number" || !Number.isFinite(value)) return 8;
3057
+ return Math.max(0, Math.min(8, Math.floor(value)));
3058
+ }
3059
+ function formatDirectionalHyperliquidPrice(price, params) {
3060
+ const normalized = price.toString().trim();
3061
+ assertNumberString(normalized);
3062
+ if (/^-?\d+$/.test(normalized)) {
3063
+ return normalizeDecimalString(normalized);
3064
+ }
3065
+ const szDecimals = resolveSizeDecimals(params.szDecimals);
3066
+ const maxDecimals2 = Math.max((params.marketType === "perp" ? 6 : 8) - szDecimals, 0);
3067
+ const decimalsAdjusted = StringMath.toFixedDirectional(normalized, maxDecimals2, params.mode);
3068
+ const sigFigAdjusted = StringMath.toPrecisionDirectional(
3069
+ decimalsAdjusted,
3070
+ 5,
3071
+ params.mode
3072
+ );
3073
+ return sigFigAdjusted === "0" ? null : sigFigAdjusted;
3074
+ }
2919
3075
  function roundHyperliquidPriceToTick(price, tick, side) {
2920
3076
  if (!Number.isFinite(tick.tickDecimals) || tick.tickDecimals < 0) {
2921
3077
  throw new Error("tick.tickDecimals must be a non-negative number.");
@@ -2938,13 +3094,25 @@ function roundHyperliquidPriceToTick(price, tick, side) {
2938
3094
  return formatScaledDecimal(rounded, tick.tickDecimals);
2939
3095
  }
2940
3096
  function formatHyperliquidMarketablePrice(params) {
2941
- const { mid, side, slippageBps, tick } = params;
3097
+ const { mid, side, slippageBps, tick, szDecimals, marketType = "perp" } = params;
2942
3098
  if (!Number.isFinite(mid) || mid <= 0) {
2943
3099
  throw new Error("mid must be a positive number.");
2944
3100
  }
2945
3101
  if (!Number.isFinite(slippageBps) || slippageBps < 0) {
2946
3102
  throw new Error("slippageBps must be a non-negative number.");
2947
3103
  }
3104
+ const adjustedMid = mid * (side === "buy" ? 1 + slippageBps / 1e4 : 1 - slippageBps / 1e4);
3105
+ if (typeof szDecimals === "number" && Number.isFinite(szDecimals)) {
3106
+ const formatted = formatDirectionalHyperliquidPrice(adjustedMid, {
3107
+ szDecimals,
3108
+ marketType,
3109
+ mode: side === "buy" ? "up" : "down"
3110
+ });
3111
+ if (!formatted) {
3112
+ throw new RangeError("Marketable price is too small and was truncated to 0.");
3113
+ }
3114
+ return formatted;
3115
+ }
2948
3116
  const midString = normalizeDecimalString(mid.toString());
2949
3117
  const baseDecimals = countDecimalPlaces(midString);
2950
3118
  const workDecimals = Math.max(baseDecimals + 4, tick?.tickDecimals ?? 0, 8);
@@ -2953,12 +3121,12 @@ function formatHyperliquidMarketablePrice(params) {
2953
3121
  side === "buy" ? 1e4 + slippageBps : 1e4 - slippageBps
2954
3122
  );
2955
3123
  const adjustedScaled = side === "buy" ? ceilDiv(scaledMid * slippageNumerator, 10000n) : scaledMid * slippageNumerator / 10000n;
2956
- const adjusted = formatScaledDecimal(adjustedScaled, workDecimals);
3124
+ const adjustedString = formatScaledDecimal(adjustedScaled, workDecimals);
2957
3125
  if (tick) {
2958
- return roundHyperliquidPriceToTick(adjusted, tick, side);
3126
+ return roundHyperliquidPriceToTick(adjustedString, tick, side);
2959
3127
  }
2960
3128
  const roundedScaled = scaleDecimalToInt(
2961
- adjusted,
3129
+ adjustedString,
2962
3130
  baseDecimals,
2963
3131
  side === "buy" ? "up" : "down"
2964
3132
  );
@@ -3061,7 +3229,9 @@ async function buildTpSlChildOrder(params) {
3061
3229
  mid: triggerPxNumeric,
3062
3230
  side: childSide,
3063
3231
  slippageBps: params.triggerMarketSlippageBps,
3064
- tick
3232
+ tick,
3233
+ szDecimals,
3234
+ marketType
3065
3235
  });
3066
3236
  return {
3067
3237
  symbol: params.symbol,
@@ -3196,6 +3366,6 @@ function estimateHyperliquidLiquidationPrice(params) {
3196
3366
  return liquidationPrice;
3197
3367
  }
3198
3368
 
3199
- export { DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS, HYPERLIQUID_HIP3_DEXES, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketDescriptor, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, computeHyperliquidMarketIocLimitPrice, createHyperliquidActionHash, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, estimateHyperliquidLiquidationPrice, extractHyperliquidDex, fetchHyperliquidActiveAsset, fetchHyperliquidAssetCtxs, fetchHyperliquidClearinghouseState, fetchHyperliquidDexMetaAndAssetCtxs, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidFrontendOpenOrdersAcrossDexes, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOpenOrdersAcrossDexes, fetchHyperliquidOrderStatus, fetchHyperliquidPreTransferCheck, fetchHyperliquidResolvedInfoCoin, fetchHyperliquidResolvedMarketDescriptor, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, getKnownHyperliquidDexes, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName2 as normalizeSpotTokenName, parseHyperliquidSymbol, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidOrderWithTpSl, placeHyperliquidPositionTpSl, placeHyperliquidTwapOrder, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidLeverageMode, resolveHyperliquidMarketDataCoin, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidPerpSymbol, resolveHyperliquidProfileChain, resolveHyperliquidSpotSymbol, resolveHyperliquidSymbol, resolveSpotMidCandidates, resolveSpotTokenCandidates, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidPortfolioMargin, supportsHyperliquidBuilderFee, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
3369
+ export { DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS, HYPERLIQUID_HIP3_DEXES, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketDescriptor, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, computeHyperliquidMarketIocLimitPrice, createHyperliquidActionHash, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, estimateHyperliquidLiquidationPrice, extractHyperliquidDex, fetchHyperliquidActiveAsset, fetchHyperliquidAssetCtxs, fetchHyperliquidClearinghouseState, fetchHyperliquidDexMetaAndAssetCtxs, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidFrontendOpenOrdersAcrossDexes, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOpenOrdersAcrossDexes, fetchHyperliquidOrderStatus, fetchHyperliquidPreTransferCheck, fetchHyperliquidResolvedInfoCoin, fetchHyperliquidResolvedMarketDescriptor, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, getKnownHyperliquidDexes, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName2 as normalizeSpotTokenName, parseHyperliquidOutcomeSymbol, parseHyperliquidSymbol, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidOrderWithTpSl, placeHyperliquidPositionTpSl, placeHyperliquidTwapOrder, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidLeverageMode, resolveHyperliquidMarketDataCoin, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidPerpSymbol, resolveHyperliquidProfileChain, resolveHyperliquidSpotSymbol, resolveHyperliquidSymbol, resolveSpotMidCandidates, resolveSpotTokenCandidates, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidPortfolioMargin, supportsHyperliquidBuilderFee, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
3200
3370
  //# sourceMappingURL=browser.js.map
3201
3371
  //# sourceMappingURL=browser.js.map