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,7 +1,7 @@
1
1
  import { h as WalletFullContext } from '../../types-BaTmu0gS.js';
2
2
  import { StoreOptions, StoreResponse } from '../../store/index.js';
3
- import { k as HyperliquidEnvironment, bc as NonceSource, x as HyperliquidOrderIntent, n as HyperliquidGrouping, bd as toApiDecimal, be as createL1ActionHash, bf as splitSignature } from '../../browser-Bieph3Ou.js';
4
- 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, f as HyperliquidApproximateLiquidationParams, g as HyperliquidBar, h as HyperliquidBarResolution, i as HyperliquidBuilderApprovalError, j as HyperliquidBuilderFee, l as HyperliquidExchangeClient, m as HyperliquidExchangeResponse, o as HyperliquidGuardError, p as HyperliquidHip3Dex, q as HyperliquidIndicatorBar, r as HyperliquidInfoClient, s as HyperliquidMarketDescriptor, t as HyperliquidMarketDescriptorInput, u as HyperliquidMarketIdentityInput, v as HyperliquidMarketType, w as HyperliquidOpenOrderLike, y as HyperliquidParsedSymbol, z as HyperliquidParsedSymbolKind, A as HyperliquidPerpMarketInfo, B as HyperliquidPlaceOrderWithTpSlOptions, C as HyperliquidPlacePositionTpSlOptions, E as HyperliquidProfileAsset, F as HyperliquidProfileAssetInput, G as HyperliquidProfileChain, I as HyperliquidResolvedMarketDescriptor, J as HyperliquidSpotMarketInfo, K as HyperliquidTermsError, L as HyperliquidTickSize, M as HyperliquidTimeInForce, N as HyperliquidTpSlExecutionType, O as HyperliquidTpSlLegInput, P as HyperliquidTriggerOptions, Q as HyperliquidTriggerType, R as MarketIdentity, _ as __hyperliquidMarketDataInternals, S as batchModifyHyperliquidOrders, T as buildHyperliquidMarketDescriptor, U as buildHyperliquidMarketIdentity, V as buildHyperliquidProfileAssets, W as buildHyperliquidSpotUsdPriceMap, X as cancelAllHyperliquidOrders, Y as cancelHyperliquidOrders, Z as cancelHyperliquidOrdersByCloid, $ as cancelHyperliquidTwapOrder, a0 as computeHyperliquidMarketIocLimitPrice, a1 as createHyperliquidSubAccount, a2 as createMonotonicNonceFactory, a3 as estimateHyperliquidLiquidationPrice, a4 as extractHyperliquidDex, a5 as extractHyperliquidOrderIds, a6 as fetchHyperliquidActiveAsset, a7 as fetchHyperliquidAllMids, a8 as fetchHyperliquidAssetCtxs, a9 as fetchHyperliquidBars, aa as fetchHyperliquidDexMeta, 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, ak as fetchHyperliquidPerpMarketInfo, al as fetchHyperliquidPreTransferCheck, am as fetchHyperliquidResolvedInfoCoin, an as fetchHyperliquidResolvedMarketDescriptor, ao as fetchHyperliquidSizeDecimals, ap as fetchHyperliquidSpotAccountValue, aq as fetchHyperliquidSpotAssetCtxs, ar as fetchHyperliquidSpotClearinghouseState, as as fetchHyperliquidSpotMarketInfo, at as fetchHyperliquidSpotMeta, au as fetchHyperliquidSpotMetaAndAssetCtxs, av as fetchHyperliquidSpotTickSize, aw as fetchHyperliquidSpotUsdPriceMap, ax as fetchHyperliquidTickSize, ay as fetchHyperliquidUserFills, az as fetchHyperliquidUserFillsByTime, aA as fetchHyperliquidUserRateLimit, aB as formatHyperliquidMarketablePrice, aC as formatHyperliquidOrderSize, aD as formatHyperliquidPrice, aE as formatHyperliquidSize, aF as getKnownHyperliquidDexes, aG as isHyperliquidSpotSymbol, aH as modifyHyperliquidOrder, aI as normalizeHyperliquidBaseSymbol, aJ as normalizeHyperliquidIndicatorBars, aK as normalizeHyperliquidMetaSymbol, aL as normalizeSpotTokenName, aM as parseHyperliquidSymbol, aN as parseSpotPairSymbol, aO as placeHyperliquidOrderWithTpSl, aP as placeHyperliquidPositionTpSl, aQ as placeHyperliquidTwapOrder, aR as reserveHyperliquidRequestWeight, aS as resolveHyperliquidAbstractionFromMode, aT as resolveHyperliquidErrorDetail, aU as resolveHyperliquidLeverageMode, aV as resolveHyperliquidMarketDataCoin, aW as resolveHyperliquidOrderRef, aX as resolveHyperliquidOrderSymbol, aY as resolveHyperliquidPair, aZ as resolveHyperliquidPerpSymbol, a_ as resolveHyperliquidProfileChain, a$ as resolveHyperliquidSpotSymbol, b0 as resolveHyperliquidSymbol, b1 as resolveSpotMidCandidates, b2 as resolveSpotTokenCandidates, b3 as roundHyperliquidPriceToTick, b4 as scheduleHyperliquidCancel, b5 as sendHyperliquidSpot, b6 as setHyperliquidAccountAbstractionMode, b7 as setHyperliquidPortfolioMargin, b8 as supportsHyperliquidBuilderFee, b9 as transferHyperliquidSubAccount, ba as updateHyperliquidIsolatedMargin, bb as updateHyperliquidLeverage } from '../../browser-Bieph3Ou.js';
3
+ import { k as HyperliquidEnvironment, bf as NonceSource, x as HyperliquidOrderIntent, n as HyperliquidGrouping, bg as toApiDecimal, bh as createL1ActionHash, bi as splitSignature } from '../../browser-lhj5OsZa.js';
4
+ 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, f as HyperliquidApproximateLiquidationParams, g as HyperliquidBar, h as HyperliquidBarResolution, i as HyperliquidBuilderApprovalError, j as HyperliquidBuilderFee, l as HyperliquidExchangeClient, m as HyperliquidExchangeResponse, o as HyperliquidGuardError, p as HyperliquidHip3Dex, q as HyperliquidIndicatorBar, r as HyperliquidInfoClient, s as HyperliquidMarketDescriptor, t as HyperliquidMarketDescriptorInput, u as HyperliquidMarketIdentityInput, v as HyperliquidMarketType, w as HyperliquidOpenOrderLike, y as HyperliquidOutcomeSymbol, z as HyperliquidParsedSymbol, A as HyperliquidParsedSymbolKind, B as HyperliquidPerpMarketInfo, C as HyperliquidPlaceOrderWithTpSlOptions, E as HyperliquidPlacePositionTpSlOptions, F as HyperliquidProfileAsset, G as HyperliquidProfileAssetInput, I as HyperliquidProfileChain, J as HyperliquidResolvedMarketDescriptor, K as HyperliquidSpotMarketInfo, L as HyperliquidTermsError, M as HyperliquidTickSize, N as HyperliquidTimeInForce, O as HyperliquidTpSlExecutionType, P as HyperliquidTpSlLegInput, Q as HyperliquidTriggerOptions, R as HyperliquidTriggerType, S as MarketIdentity, _ as __hyperliquidMarketDataInternals, T as batchModifyHyperliquidOrders, U as buildHyperliquidMarketDescriptor, V as buildHyperliquidMarketIdentity, W as buildHyperliquidProfileAssets, X as buildHyperliquidSpotUsdPriceMap, Y as cancelAllHyperliquidOrders, Z as cancelHyperliquidOrders, $ as cancelHyperliquidOrdersByCloid, a0 as cancelHyperliquidTwapOrder, a1 as computeHyperliquidMarketIocLimitPrice, a2 as createHyperliquidSubAccount, a3 as createMonotonicNonceFactory, a4 as estimateHyperliquidLiquidationPrice, a5 as extractHyperliquidDex, a6 as extractHyperliquidOrderIds, a7 as fetchHyperliquidActiveAsset, a8 as fetchHyperliquidAllMids, a9 as fetchHyperliquidAssetCtxs, aa as fetchHyperliquidBars, ab as fetchHyperliquidDexMeta, 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, al as fetchHyperliquidOutcomeMeta, am as fetchHyperliquidPerpMarketInfo, an as fetchHyperliquidPreTransferCheck, ao as fetchHyperliquidResolvedInfoCoin, ap as fetchHyperliquidResolvedMarketDescriptor, aq as fetchHyperliquidSizeDecimals, ar as fetchHyperliquidSpotAccountValue, as as fetchHyperliquidSpotAssetCtxs, at as fetchHyperliquidSpotClearinghouseState, au as fetchHyperliquidSpotMarketInfo, av as fetchHyperliquidSpotMeta, aw as fetchHyperliquidSpotMetaAndAssetCtxs, ax as fetchHyperliquidSpotTickSize, ay as fetchHyperliquidSpotUsdPriceMap, az as fetchHyperliquidTickSize, aA as fetchHyperliquidUserFills, aB as fetchHyperliquidUserFillsByTime, aC as fetchHyperliquidUserRateLimit, aD as formatHyperliquidMarketablePrice, aE as formatHyperliquidOrderSize, aF as formatHyperliquidPrice, aG as formatHyperliquidSize, aH as getKnownHyperliquidDexes, aI as isHyperliquidSpotSymbol, aJ as modifyHyperliquidOrder, aK as normalizeHyperliquidBaseSymbol, aL as normalizeHyperliquidIndicatorBars, aM as normalizeHyperliquidMetaSymbol, aN as normalizeSpotTokenName, aO as parseHyperliquidOutcomeSymbol, aP as parseHyperliquidSymbol, aQ as parseSpotPairSymbol, aR as placeHyperliquidOrderWithTpSl, aS as placeHyperliquidPositionTpSl, aT as placeHyperliquidTwapOrder, aU as reserveHyperliquidRequestWeight, aV as resolveHyperliquidAbstractionFromMode, aW as resolveHyperliquidErrorDetail, aX as resolveHyperliquidLeverageMode, aY as resolveHyperliquidMarketDataCoin, aZ as resolveHyperliquidOrderRef, a_ as resolveHyperliquidOrderSymbol, a$ as resolveHyperliquidPair, b0 as resolveHyperliquidPerpSymbol, b1 as resolveHyperliquidProfileChain, b2 as resolveHyperliquidSpotSymbol, b3 as resolveHyperliquidSymbol, b4 as resolveSpotMidCandidates, b5 as resolveSpotTokenCandidates, b6 as roundHyperliquidPriceToTick, b7 as scheduleHyperliquidCancel, b8 as sendHyperliquidSpot, b9 as setHyperliquidAccountAbstractionMode, ba as setHyperliquidPortfolioMargin, bb as supportsHyperliquidBuilderFee, bc as transferHyperliquidSubAccount, bd as updateHyperliquidIsolatedMargin, be as updateHyperliquidLeverage } from '../../browser-lhj5OsZa.js';
5
5
  import 'viem';
6
6
  import 'viem/accounts';
7
7
 
@@ -205,6 +205,18 @@ var metaCache = /* @__PURE__ */ new Map();
205
205
  var spotMetaCache = /* @__PURE__ */ new Map();
206
206
  var perpDexsCache = /* @__PURE__ */ new Map();
207
207
  var UNKNOWN_SYMBOL = "UNKNOWN";
208
+ var OUTCOME_ORDER_ASSET_OFFSET = 1e8;
209
+ var OUTCOME_MARKET_DATA_PATTERN = /^#([0-9]+)$/;
210
+ var OUTCOME_TOKEN_PATTERN = /^\+([0-9]+)$/;
211
+ function parseHyperliquidOutcomeEncoding(value) {
212
+ const trimmed = value?.trim();
213
+ if (!trimmed) return null;
214
+ const encodedMatch = OUTCOME_MARKET_DATA_PATTERN.exec(trimmed) ?? OUTCOME_TOKEN_PATTERN.exec(trimmed);
215
+ if (!encodedMatch) return null;
216
+ const encoding = Number.parseInt(encodedMatch[1] ?? "", 10);
217
+ const side = encoding % 10;
218
+ return Number.isSafeInteger(encoding) && encoding >= 0 && side <= 1 ? encoding : null;
219
+ }
208
220
  var extractDexPrefix = (value) => {
209
221
  if (!value) return null;
210
222
  const trimmed = value.trim();
@@ -502,6 +514,10 @@ async function resolveHyperliquidAssetIndex(args) {
502
514
  if (!trimmed) {
503
515
  throw new Error("Hyperliquid symbol must be a non-empty string.");
504
516
  }
517
+ const outcomeEncoding = parseHyperliquidOutcomeEncoding(trimmed);
518
+ if (outcomeEncoding != null) {
519
+ return OUTCOME_ORDER_ASSET_OFFSET + outcomeEncoding;
520
+ }
505
521
  if (trimmed.startsWith("@")) {
506
522
  const rawIndex = trimmed.slice(1).trim();
507
523
  const index = Number(rawIndex);
@@ -843,6 +859,9 @@ function assertPositiveNumber(value, label) {
843
859
 
844
860
  // src/adapters/hyperliquid/symbols.ts
845
861
  var UNKNOWN_SYMBOL2 = "UNKNOWN";
862
+ var OUTCOME_ORDER_ASSET_OFFSET2 = 1e8;
863
+ var OUTCOME_MARKET_DATA_PATTERN2 = /^#([0-9]+)$/;
864
+ var OUTCOME_TOKEN_PATTERN2 = /^\+([0-9]+)$/;
846
865
  function extractHyperliquidDex(symbol) {
847
866
  const idx = symbol.indexOf(":");
848
867
  if (idx <= 0) return null;
@@ -853,6 +872,21 @@ function parseHyperliquidSymbol(value) {
853
872
  if (!value) return null;
854
873
  const trimmed = value.trim();
855
874
  if (!trimmed) return null;
875
+ const outcome = parseHyperliquidOutcomeSymbol(trimmed);
876
+ if (outcome) {
877
+ return {
878
+ raw: trimmed,
879
+ kind: "outcome",
880
+ normalized: outcome.marketDataCoin,
881
+ routeTicker: outcome.routeTicker,
882
+ displaySymbol: outcome.displaySymbol,
883
+ base: outcome.sideName,
884
+ quote: "USDH",
885
+ pair: null,
886
+ dex: null,
887
+ leverageMode: "cross"
888
+ };
889
+ }
856
890
  if (trimmed.startsWith("@")) {
857
891
  return {
858
892
  raw: trimmed,
@@ -914,6 +948,32 @@ function parseHyperliquidSymbol(value) {
914
948
  leverageMode: "cross"
915
949
  };
916
950
  }
951
+ function parseHyperliquidOutcomeSymbol(value) {
952
+ const trimmed = value?.trim();
953
+ if (!trimmed) return null;
954
+ const encodedMatch = OUTCOME_MARKET_DATA_PATTERN2.exec(trimmed) ?? OUTCOME_TOKEN_PATTERN2.exec(trimmed);
955
+ if (!encodedMatch) return null;
956
+ const encoding = Number.parseInt(encodedMatch[1] ?? "", 10);
957
+ const outcomeId = Math.floor(encoding / 10);
958
+ const side = encoding % 10;
959
+ if (outcomeId == null || side == null || encoding == null || !Number.isSafeInteger(outcomeId) || !Number.isSafeInteger(side) || !Number.isSafeInteger(encoding) || outcomeId < 0 || side < 0 || side > 1 || encoding < 0) {
960
+ return null;
961
+ }
962
+ const marketDataCoin = `#${encoding}`;
963
+ const sideName = side === 0 ? "YES" : "NO";
964
+ return {
965
+ outcomeId,
966
+ side,
967
+ encoding,
968
+ orderSymbol: marketDataCoin,
969
+ marketDataCoin,
970
+ tokenName: `+${encoding}`,
971
+ sideName,
972
+ displaySymbol: marketDataCoin,
973
+ routeTicker: marketDataCoin,
974
+ assetId: OUTCOME_ORDER_ASSET_OFFSET2 + encoding
975
+ };
976
+ }
917
977
  function normalizeHyperliquidQuoteSymbol(value) {
918
978
  if (typeof value !== "string") return null;
919
979
  const trimmed = value.trim();
@@ -994,6 +1054,29 @@ function buildHyperliquidMarketDescriptor(input) {
994
1054
  if (!parsed) return null;
995
1055
  const explicitPair = resolveHyperliquidPair(input.pair);
996
1056
  const explicitQuote = normalizeHyperliquidQuoteSymbol(input.quote);
1057
+ if (parsed.kind === "outcome") {
1058
+ const outcome = parseHyperliquidOutcomeSymbol(rawSymbol);
1059
+ if (!outcome) return null;
1060
+ const orderSymbol2 = input.orderSymbol?.trim() || outcome.orderSymbol;
1061
+ const marketDataCoin2 = input.marketDataCoin?.trim() || outcome.marketDataCoin;
1062
+ return {
1063
+ rawSymbol,
1064
+ kind: "outcome",
1065
+ routeTicker: outcome.routeTicker,
1066
+ displaySymbol: input.displaySymbol?.trim() || outcome.displaySymbol,
1067
+ normalized: outcome.marketDataCoin,
1068
+ orderSymbol: orderSymbol2,
1069
+ marketDataCoin: marketDataCoin2,
1070
+ base: outcome.sideName,
1071
+ quote: explicitQuote || "USDH",
1072
+ pair: null,
1073
+ canonicalPair: null,
1074
+ dex: null,
1075
+ leverageMode: "cross",
1076
+ spotIndex: null,
1077
+ assetId: input.assetId ?? outcome.assetId
1078
+ };
1079
+ }
997
1080
  if (parsed.kind === "spot" || parsed.kind === "spotIndex") {
998
1081
  const canonicalPair2 = explicitPair ?? parsed.pair;
999
1082
  const pair = canonicalPair2;
@@ -1092,6 +1175,7 @@ function parseSpotPairSymbol(symbol) {
1092
1175
  function isHyperliquidSpotSymbol(symbol) {
1093
1176
  const trimmed = symbol.trim();
1094
1177
  if (!trimmed) return false;
1178
+ if (parseHyperliquidOutcomeSymbol(trimmed)) return false;
1095
1179
  if (trimmed.startsWith("@") || trimmed.includes("/")) return true;
1096
1180
  if (trimmed.includes(":")) return false;
1097
1181
  return resolveHyperliquidPair(trimmed) !== null;
@@ -1100,6 +1184,8 @@ function resolveHyperliquidMarketDataCoin(value) {
1100
1184
  if (!value) return null;
1101
1185
  const trimmed = value.trim();
1102
1186
  if (!trimmed) return null;
1187
+ const outcome = parseHyperliquidOutcomeSymbol(trimmed);
1188
+ if (outcome) return outcome.marketDataCoin;
1103
1189
  if (trimmed.startsWith("@")) return trimmed;
1104
1190
  const pair = resolveHyperliquidPair(trimmed);
1105
1191
  if (pair && !extractHyperliquidDex(trimmed)) {
@@ -1108,6 +1194,9 @@ function resolveHyperliquidMarketDataCoin(value) {
1108
1194
  return trimmed;
1109
1195
  }
1110
1196
  function supportsHyperliquidBuilderFee(params) {
1197
+ if (parseHyperliquidOutcomeSymbol(params.symbol)) {
1198
+ return false;
1199
+ }
1111
1200
  if (!isHyperliquidSpotSymbol(params.symbol)) {
1112
1201
  return true;
1113
1202
  }
@@ -1135,6 +1224,8 @@ function resolveHyperliquidOrderSymbol(value) {
1135
1224
  if (!value) return null;
1136
1225
  const trimmed = value.trim();
1137
1226
  if (!trimmed) return null;
1227
+ const outcome = parseHyperliquidOutcomeSymbol(trimmed);
1228
+ if (outcome) return outcome.orderSymbol;
1138
1229
  if (trimmed.startsWith("@")) return trimmed;
1139
1230
  if (trimmed.includes(":")) {
1140
1231
  const [rawDex, ...restParts] = trimmed.split(":");
@@ -1153,6 +1244,8 @@ function resolveHyperliquidOrderSymbol(value) {
1153
1244
  function resolveHyperliquidSymbol(asset, override) {
1154
1245
  const raw = override && override.trim().length > 0 ? override.trim() : asset.trim();
1155
1246
  if (!raw) return raw;
1247
+ const outcome = parseHyperliquidOutcomeSymbol(raw);
1248
+ if (outcome) return outcome.orderSymbol;
1156
1249
  if (raw.startsWith("@")) return raw;
1157
1250
  if (raw.includes(":")) {
1158
1251
  const [dexRaw, ...restParts] = raw.split(":");
@@ -1274,6 +1367,9 @@ var HyperliquidInfoClient = class {
1274
1367
  spotAssetCtxs() {
1275
1368
  return fetchHyperliquidSpotAssetCtxs(this.environment);
1276
1369
  }
1370
+ outcomeMeta() {
1371
+ return fetchHyperliquidOutcomeMeta(this.environment);
1372
+ }
1277
1373
  openOrders(user) {
1278
1374
  return fetchHyperliquidOpenOrders({ user, environment: this.environment });
1279
1375
  }
@@ -1358,6 +1454,9 @@ async function fetchHyperliquidAssetCtxs(environment = "mainnet") {
1358
1454
  async function fetchHyperliquidSpotAssetCtxs(environment = "mainnet") {
1359
1455
  return postInfo(environment, { type: "spotAssetCtxs" });
1360
1456
  }
1457
+ async function fetchHyperliquidOutcomeMeta(environment = "mainnet") {
1458
+ return postInfo(environment, { type: "outcomeMeta" });
1459
+ }
1361
1460
  async function fetchHyperliquidOpenOrders(params) {
1362
1461
  const env = params.environment ?? "mainnet";
1363
1462
  const orders = await postInfo(env, {
@@ -2422,6 +2521,31 @@ var StringMath = {
2422
2521
  }
2423
2522
  return digits.join("").replace(/^0+(?=\d)/, "") || "0";
2424
2523
  },
2524
+ toPrecisionDirectional(value, precision, mode) {
2525
+ if (!Number.isInteger(precision) || precision < 1) {
2526
+ throw new RangeError("Precision must be a positive integer.");
2527
+ }
2528
+ if (/^-?0+(\.0*)?$/.test(value)) return "0";
2529
+ const negative = value.startsWith("-");
2530
+ const abs = negative ? value.slice(1) : value;
2531
+ const magnitude = StringMath.log10Floor(abs);
2532
+ const shiftAmount = precision - magnitude - 1;
2533
+ const shifted = StringMath.multiplyByPow10(abs, shiftAmount);
2534
+ const rounded = StringMath.roundInteger(shifted, mode);
2535
+ const shiftedBack = StringMath.multiplyByPow10(rounded, -shiftAmount);
2536
+ return normalizeDecimalString(negative ? `-${shiftedBack}` : shiftedBack);
2537
+ },
2538
+ toFixedDirectional(value, decimals, mode) {
2539
+ if (!Number.isInteger(decimals) || decimals < 0) {
2540
+ throw new RangeError("Decimals must be a non-negative integer.");
2541
+ }
2542
+ if (decimals === 0) {
2543
+ return normalizeDecimalString(StringMath.roundInteger(value, mode));
2544
+ }
2545
+ const shifted = StringMath.multiplyByPow10(value, decimals);
2546
+ const rounded = StringMath.roundInteger(shifted, mode);
2547
+ return normalizeDecimalString(StringMath.multiplyByPow10(rounded, -decimals));
2548
+ },
2425
2549
  toPrecisionTruncate(value, precision) {
2426
2550
  if (!Number.isInteger(precision) || precision < 1) {
2427
2551
  throw new RangeError("Precision must be a positive integer.");
@@ -2514,6 +2638,26 @@ function formatHyperliquidOrderSize(value, szDecimals) {
2514
2638
  return "0";
2515
2639
  }
2516
2640
  }
2641
+ function resolveSizeDecimals(value) {
2642
+ if (typeof value !== "number" || !Number.isFinite(value)) return 8;
2643
+ return Math.max(0, Math.min(8, Math.floor(value)));
2644
+ }
2645
+ function formatDirectionalHyperliquidPrice(price, params) {
2646
+ const normalized = price.toString().trim();
2647
+ assertNumberString(normalized);
2648
+ if (/^-?\d+$/.test(normalized)) {
2649
+ return normalizeDecimalString(normalized);
2650
+ }
2651
+ const szDecimals = resolveSizeDecimals(params.szDecimals);
2652
+ const maxDecimals2 = Math.max((params.marketType === "perp" ? 6 : 8) - szDecimals, 0);
2653
+ const decimalsAdjusted = StringMath.toFixedDirectional(normalized, maxDecimals2, params.mode);
2654
+ const sigFigAdjusted = StringMath.toPrecisionDirectional(
2655
+ decimalsAdjusted,
2656
+ 5,
2657
+ params.mode
2658
+ );
2659
+ return sigFigAdjusted === "0" ? null : sigFigAdjusted;
2660
+ }
2517
2661
  function roundHyperliquidPriceToTick(price, tick, side) {
2518
2662
  if (!Number.isFinite(tick.tickDecimals) || tick.tickDecimals < 0) {
2519
2663
  throw new Error("tick.tickDecimals must be a non-negative number.");
@@ -2536,13 +2680,25 @@ function roundHyperliquidPriceToTick(price, tick, side) {
2536
2680
  return formatScaledDecimal(rounded, tick.tickDecimals);
2537
2681
  }
2538
2682
  function formatHyperliquidMarketablePrice(params) {
2539
- const { mid, side, slippageBps, tick } = params;
2683
+ const { mid, side, slippageBps, tick, szDecimals, marketType = "perp" } = params;
2540
2684
  if (!Number.isFinite(mid) || mid <= 0) {
2541
2685
  throw new Error("mid must be a positive number.");
2542
2686
  }
2543
2687
  if (!Number.isFinite(slippageBps) || slippageBps < 0) {
2544
2688
  throw new Error("slippageBps must be a non-negative number.");
2545
2689
  }
2690
+ const adjustedMid = mid * (side === "buy" ? 1 + slippageBps / 1e4 : 1 - slippageBps / 1e4);
2691
+ if (typeof szDecimals === "number" && Number.isFinite(szDecimals)) {
2692
+ const formatted = formatDirectionalHyperliquidPrice(adjustedMid, {
2693
+ szDecimals,
2694
+ marketType,
2695
+ mode: side === "buy" ? "up" : "down"
2696
+ });
2697
+ if (!formatted) {
2698
+ throw new RangeError("Marketable price is too small and was truncated to 0.");
2699
+ }
2700
+ return formatted;
2701
+ }
2546
2702
  const midString = normalizeDecimalString(mid.toString());
2547
2703
  const baseDecimals = countDecimalPlaces(midString);
2548
2704
  const workDecimals = Math.max(baseDecimals + 4, tick?.tickDecimals ?? 0, 8);
@@ -2551,12 +2707,12 @@ function formatHyperliquidMarketablePrice(params) {
2551
2707
  side === "buy" ? 1e4 + slippageBps : 1e4 - slippageBps
2552
2708
  );
2553
2709
  const adjustedScaled = side === "buy" ? ceilDiv(scaledMid * slippageNumerator, 10000n) : scaledMid * slippageNumerator / 10000n;
2554
- const adjusted = formatScaledDecimal(adjustedScaled, workDecimals);
2710
+ const adjustedString = formatScaledDecimal(adjustedScaled, workDecimals);
2555
2711
  if (tick) {
2556
- return roundHyperliquidPriceToTick(adjusted, tick, side);
2712
+ return roundHyperliquidPriceToTick(adjustedString, tick, side);
2557
2713
  }
2558
2714
  const roundedScaled = scaleDecimalToInt(
2559
- adjusted,
2715
+ adjustedString,
2560
2716
  baseDecimals,
2561
2717
  side === "buy" ? "up" : "down"
2562
2718
  );
@@ -3138,6 +3294,15 @@ async function fetchHyperliquidResolvedMarketDescriptor(params) {
3138
3294
  if (!parsed) {
3139
3295
  throw new Error(`Unable to parse Hyperliquid symbol: ${params.symbol}`);
3140
3296
  }
3297
+ if (parsed.kind === "outcome") {
3298
+ const descriptor2 = buildHyperliquidMarketDescriptor({
3299
+ symbol: params.symbol
3300
+ });
3301
+ if (!descriptor2) {
3302
+ throw new Error(`Unable to build Hyperliquid outcome market descriptor: ${params.symbol}`);
3303
+ }
3304
+ return descriptor2;
3305
+ }
3141
3306
  if (parsed.kind === "spot" || parsed.kind === "spotIndex") {
3142
3307
  const spotInfo = parsed.kind === "spotIndex" ? await fetchHyperliquidSpotMarketInfoByIndex({
3143
3308
  environment: params.environment,
@@ -3196,6 +3361,10 @@ async function fetchHyperliquidResolvedInfoCoin(params) {
3196
3361
  }
3197
3362
  async function fetchHyperliquidSizeDecimals(params) {
3198
3363
  const { symbol, environment } = params;
3364
+ const parsed = parseHyperliquidSymbol(symbol);
3365
+ if (parsed?.kind === "outcome") {
3366
+ return 0;
3367
+ }
3199
3368
  if (isHyperliquidSpotSymbol(symbol)) {
3200
3369
  const meta2 = await fetchHyperliquidSpotMeta(environment);
3201
3370
  return resolveSpotSizeDecimals(meta2, symbol);
@@ -3209,7 +3378,6 @@ async function fetchHyperliquidSizeDecimals(params) {
3209
3378
  if (match && typeof match.szDecimals === "number") {
3210
3379
  return match.szDecimals;
3211
3380
  }
3212
- const parsed = parseHyperliquidSymbol(symbol);
3213
3381
  const dex = parsed?.dex ?? null;
3214
3382
  if (!dex) {
3215
3383
  throw new Error(`No size decimals found for ${symbol}.`);
@@ -3551,7 +3719,9 @@ async function buildTpSlChildOrder(params) {
3551
3719
  mid: triggerPxNumeric,
3552
3720
  side: childSide,
3553
3721
  slippageBps: params.triggerMarketSlippageBps,
3554
- tick
3722
+ tick,
3723
+ szDecimals,
3724
+ marketType
3555
3725
  });
3556
3726
  return {
3557
3727
  symbol: params.symbol,
@@ -4206,6 +4376,6 @@ var __hyperliquidInternals = {
4206
4376
  splitSignature
4207
4377
  };
4208
4378
 
4209
- export { DEFAULT_HYPERLIQUID_CADENCE_CRON, DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS, HYPERLIQUID_HIP3_DEXES, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketDescriptor, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, clampHyperliquidAbs, clampHyperliquidFloat, clampHyperliquidInt, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, estimateHyperliquidLiquidationPrice, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidActiveAsset, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidBars, fetchHyperliquidClearinghouseState, fetchHyperliquidDexMeta, fetchHyperliquidDexMetaAndAssetCtxs, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidFrontendOpenOrdersAcrossDexes, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOpenOrdersAcrossDexes, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidResolvedInfoCoin, fetchHyperliquidResolvedMarketDescriptor, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, getKnownHyperliquidDexes, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidDcaEntries, normalizeHyperliquidIndicatorBars, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName2 as normalizeSpotTokenName, parseHyperliquidJson, parseHyperliquidSymbol, parseSpotPairSymbol, placeHyperliquidOrder2 as placeHyperliquidOrder, placeHyperliquidOrderWithTpSl, placeHyperliquidPositionTpSl, placeHyperliquidTwapOrder, planHyperliquidTrade, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidBudgetUsd, resolveHyperliquidCadenceCron, resolveHyperliquidCadenceFromResolution, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidDcaSymbolEntries, resolveHyperliquidErrorDetail, resolveHyperliquidHourlyInterval, resolveHyperliquidIntervalCron, resolveHyperliquidLeverageMode, resolveHyperliquidMarketDataCoin, resolveHyperliquidMaxPerRunUsd, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidPerpSymbol, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidScheduleEvery, resolveHyperliquidScheduleUnit, resolveHyperliquidSpotSymbol, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveHyperliquidTargetSize, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidPortfolioMargin, supportsHyperliquidBuilderFee, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
4379
+ export { DEFAULT_HYPERLIQUID_CADENCE_CRON, DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS, HYPERLIQUID_HIP3_DEXES, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketDescriptor, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, clampHyperliquidAbs, clampHyperliquidFloat, clampHyperliquidInt, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, estimateHyperliquidLiquidationPrice, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidActiveAsset, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidBars, fetchHyperliquidClearinghouseState, fetchHyperliquidDexMeta, fetchHyperliquidDexMetaAndAssetCtxs, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidFrontendOpenOrdersAcrossDexes, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOpenOrdersAcrossDexes, fetchHyperliquidOrderStatus, fetchHyperliquidOutcomeMeta, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidResolvedInfoCoin, fetchHyperliquidResolvedMarketDescriptor, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, getKnownHyperliquidDexes, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidDcaEntries, normalizeHyperliquidIndicatorBars, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName2 as normalizeSpotTokenName, parseHyperliquidJson, parseHyperliquidOutcomeSymbol, parseHyperliquidSymbol, parseSpotPairSymbol, placeHyperliquidOrder2 as placeHyperliquidOrder, placeHyperliquidOrderWithTpSl, placeHyperliquidPositionTpSl, placeHyperliquidTwapOrder, planHyperliquidTrade, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidBudgetUsd, resolveHyperliquidCadenceCron, resolveHyperliquidCadenceFromResolution, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidDcaSymbolEntries, resolveHyperliquidErrorDetail, resolveHyperliquidHourlyInterval, resolveHyperliquidIntervalCron, resolveHyperliquidLeverageMode, resolveHyperliquidMarketDataCoin, resolveHyperliquidMaxPerRunUsd, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidPerpSymbol, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidScheduleEvery, resolveHyperliquidScheduleUnit, resolveHyperliquidSpotSymbol, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveHyperliquidTargetSize, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidPortfolioMargin, supportsHyperliquidBuilderFee, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
4210
4380
  //# sourceMappingURL=index.js.map
4211
4381
  //# sourceMappingURL=index.js.map