opentool 0.10.3 → 0.10.4

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.
@@ -375,6 +375,7 @@ declare function normalizeSpotTokenName(value?: string | null): string;
375
375
  declare function normalizeHyperliquidBaseSymbol(value?: string | null): string | null;
376
376
  declare function normalizeHyperliquidMetaSymbol(symbol: string): string;
377
377
  declare function resolveHyperliquidPair(value?: string | null): string | null;
378
+ declare function resolveHyperliquidLeverageMode(symbol: string): "cross" | "isolated";
378
379
  type HyperliquidProfileChain = "hyperliquid" | "hyperliquid-testnet";
379
380
  type HyperliquidProfileAssetInput = {
380
381
  assetSymbols: string[];
@@ -404,6 +405,72 @@ declare function resolveSpotMidCandidates(baseSymbol: string): string[];
404
405
  declare function resolveSpotTokenCandidates(value: string): string[];
405
406
  declare function resolveHyperliquidOrderSymbol(value?: string | null): string | null;
406
407
  declare function resolveHyperliquidSymbol(asset: string, override?: string): string;
408
+ declare function resolveHyperliquidPerpSymbol(asset: string): string;
409
+ declare function resolveHyperliquidSpotSymbol(asset: string, defaultQuote?: string): {
410
+ symbol: string;
411
+ base: string;
412
+ quote: string;
413
+ };
414
+
415
+ type HyperliquidExecutionMode = "long-only" | "long-short";
416
+ type HyperliquidTradeSignal = "buy" | "sell" | "hold" | "unknown";
417
+ type HyperliquidTradePlan = {
418
+ side: "buy" | "sell";
419
+ size: number;
420
+ reduceOnly: boolean;
421
+ targetSize: number;
422
+ };
423
+ interface HyperliquidTargetSizeConfig {
424
+ allocationMode: "percent_equity" | "fixed";
425
+ percentOfEquity: number;
426
+ maxPercentOfEquity: number;
427
+ amountUsd?: number;
428
+ }
429
+ interface HyperliquidTargetSizeExecution {
430
+ size?: number;
431
+ }
432
+ type HyperliquidDcaSymbolInput = {
433
+ symbol: string;
434
+ weight?: number;
435
+ } | string;
436
+ type HyperliquidDcaSymbolEntry = {
437
+ symbol: string;
438
+ weight: number;
439
+ };
440
+ type HyperliquidDcaNormalizedEntry = {
441
+ symbol: string;
442
+ weight: number;
443
+ normalizedWeight: number;
444
+ };
445
+ declare function resolveHyperliquidBudgetUsd(params: {
446
+ config: HyperliquidTargetSizeConfig;
447
+ accountValue: number | null;
448
+ }): number;
449
+ declare function resolveHyperliquidDcaSymbolEntries(inputs: HyperliquidDcaSymbolInput[] | undefined, fallbackSymbol: string): HyperliquidDcaSymbolEntry[];
450
+ declare function normalizeHyperliquidDcaEntries(params: {
451
+ entries: Array<{
452
+ symbol: string;
453
+ weight?: number;
454
+ }> | undefined;
455
+ fallbackSymbol: string;
456
+ }): HyperliquidDcaNormalizedEntry[];
457
+ declare function resolveHyperliquidMaxPerRunUsd(targetNotionalUsd: number, hedgeRatio: number): number;
458
+ declare function clampHyperliquidAbs(value: number, limit: number): number;
459
+ declare function resolveHyperliquidTargetSize(params: {
460
+ config: HyperliquidTargetSizeConfig;
461
+ execution: HyperliquidTargetSizeExecution;
462
+ accountValue: number | null;
463
+ currentPrice: number;
464
+ }): {
465
+ targetSize: number;
466
+ budgetUsd: number;
467
+ };
468
+ declare function planHyperliquidTrade(params: {
469
+ signal: HyperliquidTradeSignal;
470
+ mode: HyperliquidExecutionMode;
471
+ currentSize: number;
472
+ targetSize: number;
473
+ }): HyperliquidTradePlan | null;
407
474
 
408
475
  type HyperliquidTickSize = {
409
476
  tickSizeInt: bigint;
@@ -491,6 +558,14 @@ type HyperliquidBar = {
491
558
  volume?: number;
492
559
  [key: string]: unknown;
493
560
  };
561
+ type HyperliquidIndicatorBar = {
562
+ time: number;
563
+ open: number;
564
+ high: number;
565
+ low: number;
566
+ close: number;
567
+ volume: number;
568
+ };
494
569
  type HyperliquidPerpMarketInfo = {
495
570
  symbol: string;
496
571
  price: number;
@@ -518,6 +593,7 @@ declare function fetchHyperliquidBars(params: {
518
593
  toSeconds?: number;
519
594
  gatewayBase?: string | null;
520
595
  }): Promise<HyperliquidBar[]>;
596
+ declare function normalizeHyperliquidIndicatorBars(bars: HyperliquidBar[]): HyperliquidIndicatorBar[];
521
597
  declare function fetchHyperliquidTickSize(params: {
522
598
  environment: HyperliquidEnvironment;
523
599
  symbol: string;
@@ -556,6 +632,27 @@ declare const __hyperliquidMarketDataInternals: {
556
632
  formatScaledInt: typeof formatScaledInt;
557
633
  };
558
634
 
635
+ type HyperliquidScheduleUnit = "minutes" | "hours";
636
+ type HyperliquidCadence = "daily" | "hourly" | "weekly" | "twice-weekly" | "monthly";
637
+ type HyperliquidResolution = "1" | "5" | "15" | "30" | "60" | "240" | "1D" | "1W";
638
+ declare const DEFAULT_HYPERLIQUID_CADENCE_CRON: Record<HyperliquidCadence, string>;
639
+ declare function parseHyperliquidJson(raw: string | null): unknown | null;
640
+ declare function clampHyperliquidInt(value: unknown, min: number, max: number, fallback: number): number;
641
+ declare function clampHyperliquidFloat(value: unknown, min: number, max: number, fallback: number): number;
642
+ declare function resolveHyperliquidScheduleEvery(input: unknown, options?: {
643
+ min?: number;
644
+ max?: number;
645
+ fallback?: number;
646
+ }): number;
647
+ declare function resolveHyperliquidScheduleUnit(input: unknown, fallback?: HyperliquidScheduleUnit): HyperliquidScheduleUnit;
648
+ declare function resolveHyperliquidIntervalCron(every: number, unit: HyperliquidScheduleUnit): string;
649
+ declare function resolveHyperliquidHourlyInterval(input: unknown, fallback?: number): number;
650
+ declare function resolveHyperliquidCadenceCron(cadence: HyperliquidCadence, hourlyInterval: unknown, cadenceToCron?: Record<HyperliquidCadence, string>): string;
651
+ declare function resolveHyperliquidCadenceFromResolution(resolution: HyperliquidResolution): {
652
+ cadence: HyperliquidCadence;
653
+ hourlyInterval?: number;
654
+ };
655
+
559
656
  interface HyperliquidOrderOptions {
560
657
  wallet: WalletFullContext;
561
658
  orders: HyperliquidOrderIntent[];
@@ -668,4 +765,4 @@ declare const __hyperliquidInternals: {
668
765
  splitSignature: typeof splitSignature;
669
766
  };
670
767
 
671
- export { DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, type HyperliquidAbstraction, type HyperliquidAccountMode, HyperliquidApiError, type HyperliquidApproveBuilderFeeOptions, type HyperliquidApproveBuilderFeeResponse, type HyperliquidBar, type HyperliquidBarResolution, HyperliquidBuilderApprovalError, type HyperliquidBuilderApprovalRecordInput, type HyperliquidBuilderFee, type HyperliquidChain, type HyperliquidClearinghouseState, type HyperliquidDepositResult, type HyperliquidEnvironment, HyperliquidExchangeClient, type HyperliquidExchangeResponse, type HyperliquidGrouping, HyperliquidGuardError, HyperliquidInfoClient, type HyperliquidMarketIdentityInput, type HyperliquidMarketType, type HyperliquidOrderIntent, type HyperliquidOrderOptions, type HyperliquidOrderResponse, type HyperliquidOrderStatus, type HyperliquidPerpMarketInfo, type HyperliquidProfileAsset, type HyperliquidProfileAssetInput, type HyperliquidProfileChain, type HyperliquidSpotMarketInfo, type HyperliquidStoreNetwork, HyperliquidTermsError, type HyperliquidTermsRecordInput, type HyperliquidTickSize, type HyperliquidTimeInForce, type HyperliquidTriggerOptions, type HyperliquidTriggerType, type HyperliquidWithdrawResult, type MarketIdentity, type NonceSource, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidBars, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidTwapOrder, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidErrorDetail, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
768
+ export { DEFAULT_HYPERLIQUID_CADENCE_CRON, DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, type HyperliquidAbstraction, type HyperliquidAccountMode, HyperliquidApiError, type HyperliquidApproveBuilderFeeOptions, type HyperliquidApproveBuilderFeeResponse, type HyperliquidBar, type HyperliquidBarResolution, HyperliquidBuilderApprovalError, type HyperliquidBuilderApprovalRecordInput, type HyperliquidBuilderFee, type HyperliquidCadence, type HyperliquidChain, type HyperliquidClearinghouseState, type HyperliquidDcaNormalizedEntry, type HyperliquidDcaSymbolEntry, type HyperliquidDcaSymbolInput, type HyperliquidDepositResult, type HyperliquidEnvironment, HyperliquidExchangeClient, type HyperliquidExchangeResponse, type HyperliquidExecutionMode, type HyperliquidGrouping, HyperliquidGuardError, type HyperliquidIndicatorBar, HyperliquidInfoClient, type HyperliquidMarketIdentityInput, type HyperliquidMarketType, type HyperliquidOrderIntent, type HyperliquidOrderOptions, type HyperliquidOrderResponse, type HyperliquidOrderStatus, type HyperliquidPerpMarketInfo, type HyperliquidProfileAsset, type HyperliquidProfileAssetInput, type HyperliquidProfileChain, type HyperliquidResolution, type HyperliquidScheduleUnit, type HyperliquidSpotMarketInfo, type HyperliquidStoreNetwork, type HyperliquidTargetSizeConfig, type HyperliquidTargetSizeExecution, HyperliquidTermsError, type HyperliquidTermsRecordInput, type HyperliquidTickSize, type HyperliquidTimeInForce, type HyperliquidTradePlan, type HyperliquidTradeSignal, type HyperliquidTriggerOptions, type HyperliquidTriggerType, type HyperliquidWithdrawResult, type MarketIdentity, type NonceSource, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, clampHyperliquidAbs, clampHyperliquidFloat, clampHyperliquidInt, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidBars, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidDcaEntries, normalizeHyperliquidIndicatorBars, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName, parseHyperliquidJson, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidTwapOrder, planHyperliquidTrade, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidBudgetUsd, resolveHyperliquidCadenceCron, resolveHyperliquidCadenceFromResolution, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidDcaSymbolEntries, resolveHyperliquidErrorDetail, resolveHyperliquidHourlyInterval, resolveHyperliquidIntervalCron, resolveHyperliquidLeverageMode, resolveHyperliquidMaxPerRunUsd, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidPerpSymbol, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidScheduleEvery, resolveHyperliquidScheduleUnit, resolveHyperliquidSpotSymbol, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveHyperliquidTargetSize, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
@@ -1743,6 +1743,9 @@ function resolveHyperliquidPair(value) {
1743
1743
  }
1744
1744
  return null;
1745
1745
  }
1746
+ function resolveHyperliquidLeverageMode(symbol) {
1747
+ return symbol.includes(":") ? "isolated" : "cross";
1748
+ }
1746
1749
  function resolveHyperliquidProfileChain(environment) {
1747
1750
  return environment === "testnet" ? "hyperliquid-testnet" : "hyperliquid";
1748
1751
  }
@@ -1843,6 +1846,175 @@ function resolveHyperliquidSymbol(asset, override) {
1843
1846
  const baseNoPair = base.split("/")[0] ?? base;
1844
1847
  return baseNoPair.trim().toUpperCase();
1845
1848
  }
1849
+ function resolveHyperliquidPerpSymbol(asset) {
1850
+ const raw = asset.trim();
1851
+ if (!raw) return raw;
1852
+ const dex = extractHyperliquidDex(raw);
1853
+ const base = normalizeHyperliquidBaseSymbol(raw) ?? raw.toUpperCase();
1854
+ return dex ? `${dex}:${base}` : base;
1855
+ }
1856
+ function resolveHyperliquidSpotSymbol(asset, defaultQuote = "USDC") {
1857
+ const quote = defaultQuote.trim().toUpperCase() || "USDC";
1858
+ const raw = asset.trim().toUpperCase();
1859
+ if (!raw) {
1860
+ return { symbol: raw, base: raw, quote };
1861
+ }
1862
+ const pair = resolveHyperliquidPair(raw);
1863
+ if (pair) {
1864
+ const [base2, pairQuote] = pair.split("/");
1865
+ return {
1866
+ symbol: pair,
1867
+ base: base2?.trim() ?? raw,
1868
+ quote: pairQuote?.trim() ?? quote
1869
+ };
1870
+ }
1871
+ const base = normalizeHyperliquidBaseSymbol(raw) ?? raw;
1872
+ return { symbol: `${base}/${quote}`, base, quote };
1873
+ }
1874
+
1875
+ // src/adapters/hyperliquid/strategy.ts
1876
+ function clampDcaWeight(value) {
1877
+ if (typeof value !== "number" || !Number.isFinite(value)) return 0;
1878
+ return Math.min(1e6, Math.max(0, value));
1879
+ }
1880
+ function resolveHyperliquidBudgetUsd(params) {
1881
+ const { config, accountValue } = params;
1882
+ if (config.allocationMode === "fixed") {
1883
+ const desiredUsd = config.amountUsd ?? 0;
1884
+ if (!Number.isFinite(desiredUsd) || desiredUsd <= 0) {
1885
+ throw new Error("fixed allocation requires amountUsd");
1886
+ }
1887
+ return desiredUsd;
1888
+ }
1889
+ if (!Number.isFinite(accountValue ?? Number.NaN)) {
1890
+ throw new Error("percent allocation requires accountValue");
1891
+ }
1892
+ const rawUsd = accountValue * (config.percentOfEquity / 100);
1893
+ const maxPercentUsd = accountValue * (config.maxPercentOfEquity / 100);
1894
+ return Math.min(rawUsd, maxPercentUsd);
1895
+ }
1896
+ function resolveHyperliquidDcaSymbolEntries(inputs, fallbackSymbol) {
1897
+ const entries = [];
1898
+ const values = Array.isArray(inputs) ? inputs : [];
1899
+ for (const input of values) {
1900
+ if (typeof input === "string") {
1901
+ const trimmed = input.trim();
1902
+ if (!trimmed) continue;
1903
+ const [rawSymbol, rawWeight] = trimmed.split(":");
1904
+ const symbol2 = rawSymbol?.trim();
1905
+ if (!symbol2) continue;
1906
+ const parsedWeight2 = typeof rawWeight === "string" && rawWeight.trim().length > 0 ? Number.parseFloat(rawWeight.trim()) : 1;
1907
+ const weight2 = Number.isFinite(parsedWeight2) && parsedWeight2 > 0 ? parsedWeight2 : 1;
1908
+ entries.push({ symbol: symbol2, weight: weight2 });
1909
+ continue;
1910
+ }
1911
+ if (!input || typeof input !== "object") continue;
1912
+ const symbol = input.symbol?.trim();
1913
+ if (!symbol) continue;
1914
+ const parsedWeight = typeof input.weight === "number" && Number.isFinite(input.weight) ? input.weight : 1;
1915
+ const weight = parsedWeight > 0 ? parsedWeight : 1;
1916
+ entries.push({ symbol, weight });
1917
+ }
1918
+ if (entries.length > 0) {
1919
+ return entries;
1920
+ }
1921
+ return [{ symbol: fallbackSymbol, weight: 1 }];
1922
+ }
1923
+ function normalizeHyperliquidDcaEntries(params) {
1924
+ const map = /* @__PURE__ */ new Map();
1925
+ const entries = Array.isArray(params.entries) ? params.entries : [];
1926
+ for (const entry of entries) {
1927
+ if (!entry || typeof entry !== "object") continue;
1928
+ const symbol = typeof entry.symbol === "string" ? entry.symbol.trim() : "";
1929
+ if (!symbol) continue;
1930
+ const key = symbol.toUpperCase();
1931
+ const weight = clampDcaWeight(entry.weight);
1932
+ if (weight <= 0) continue;
1933
+ const existing = map.get(key);
1934
+ if (existing) {
1935
+ existing.weight += weight;
1936
+ } else {
1937
+ map.set(key, { symbol, weight });
1938
+ }
1939
+ }
1940
+ if (map.size === 0) {
1941
+ map.set(params.fallbackSymbol.toUpperCase(), {
1942
+ symbol: params.fallbackSymbol,
1943
+ weight: 1
1944
+ });
1945
+ }
1946
+ const entriesList = Array.from(map.values());
1947
+ const totalWeight = entriesList.reduce((sum, entry) => sum + entry.weight, 0);
1948
+ if (!Number.isFinite(totalWeight) || totalWeight <= 0) {
1949
+ return [];
1950
+ }
1951
+ return entriesList.map((entry) => ({
1952
+ symbol: entry.symbol,
1953
+ weight: entry.weight,
1954
+ normalizedWeight: entry.weight / totalWeight
1955
+ }));
1956
+ }
1957
+ function resolveHyperliquidMaxPerRunUsd(targetNotionalUsd, hedgeRatio) {
1958
+ if (!Number.isFinite(targetNotionalUsd) || targetNotionalUsd <= 0) return 0;
1959
+ const ratio = Number.isFinite(hedgeRatio) && hedgeRatio > 0 ? hedgeRatio : 1;
1960
+ return Math.max(targetNotionalUsd, targetNotionalUsd * ratio);
1961
+ }
1962
+ function clampHyperliquidAbs(value, limit) {
1963
+ if (!Number.isFinite(value) || !Number.isFinite(limit) || limit <= 0) return 0;
1964
+ const capped = Math.min(Math.abs(value), limit);
1965
+ return Math.sign(value) * capped;
1966
+ }
1967
+ function resolveHyperliquidTargetSize(params) {
1968
+ const { config, execution, accountValue, currentPrice } = params;
1969
+ if (execution.size && Number.isFinite(execution.size)) {
1970
+ return { targetSize: execution.size, budgetUsd: execution.size * currentPrice };
1971
+ }
1972
+ if (config.allocationMode === "fixed") {
1973
+ const budgetUsd2 = resolveHyperliquidBudgetUsd({
1974
+ config,
1975
+ accountValue
1976
+ });
1977
+ return { targetSize: budgetUsd2 / currentPrice, budgetUsd: budgetUsd2 };
1978
+ }
1979
+ const budgetUsd = resolveHyperliquidBudgetUsd({
1980
+ config,
1981
+ accountValue
1982
+ });
1983
+ return { targetSize: budgetUsd / currentPrice, budgetUsd };
1984
+ }
1985
+ function planHyperliquidTrade(params) {
1986
+ const { signal, mode, currentSize, targetSize } = params;
1987
+ if (signal === "hold" || signal === "unknown") return null;
1988
+ if (signal === "buy") {
1989
+ const desired2 = mode === "long-short" ? targetSize : Math.max(targetSize, 0);
1990
+ const delta2 = desired2 - currentSize;
1991
+ if (delta2 <= 0) return null;
1992
+ return {
1993
+ side: "buy",
1994
+ size: delta2,
1995
+ reduceOnly: false,
1996
+ targetSize: desired2
1997
+ };
1998
+ }
1999
+ if (mode === "long-only") {
2000
+ if (currentSize <= 0) return null;
2001
+ return {
2002
+ side: "sell",
2003
+ size: currentSize,
2004
+ reduceOnly: true,
2005
+ targetSize: 0
2006
+ };
2007
+ }
2008
+ const desired = -Math.abs(targetSize);
2009
+ const delta = currentSize - desired;
2010
+ if (delta <= 0) return null;
2011
+ return {
2012
+ side: "sell",
2013
+ size: delta,
2014
+ reduceOnly: false,
2015
+ targetSize: desired
2016
+ };
2017
+ }
1846
2018
 
1847
2019
  // src/adapters/hyperliquid/order-utils.ts
1848
2020
  var MAX_HYPERLIQUID_PRICE_DECIMALS = 8;
@@ -2188,9 +2360,10 @@ function readHyperliquidSpotAccountValue(params) {
2188
2360
 
2189
2361
  // src/adapters/hyperliquid/market-data.ts
2190
2362
  var META_CACHE_TTL_MS = 5 * 60 * 1e3;
2363
+ var DEFAULT_OPENPOND_GATEWAY_URL = "https://gateway.openpond.dev";
2191
2364
  var allMidsCache = /* @__PURE__ */ new Map();
2192
2365
  function resolveGatewayBase(override) {
2193
- const value = override ?? process.env.OPENPOND_GATEWAY_URL ?? null;
2366
+ const value = override ?? process.env.OPENPOND_GATEWAY_URL ?? DEFAULT_OPENPOND_GATEWAY_URL;
2194
2367
  if (typeof value !== "string") {
2195
2368
  return null;
2196
2369
  }
@@ -2359,6 +2532,25 @@ async function fetchHyperliquidBars(params) {
2359
2532
  return typeof record.close === "number" && Number.isFinite(record.close) && typeof record.time === "number" && Number.isFinite(record.time);
2360
2533
  });
2361
2534
  }
2535
+ function normalizeHyperliquidIndicatorBars(bars) {
2536
+ return bars.filter(
2537
+ (bar) => bar && typeof bar === "object" && typeof bar.time === "number" && Number.isFinite(bar.time) && typeof bar.close === "number" && Number.isFinite(bar.close)
2538
+ ).map((bar) => {
2539
+ const close = bar.close;
2540
+ const open = typeof bar.open === "number" && Number.isFinite(bar.open) ? bar.open : close;
2541
+ const high = typeof bar.high === "number" && Number.isFinite(bar.high) ? bar.high : close;
2542
+ const low = typeof bar.low === "number" && Number.isFinite(bar.low) ? bar.low : close;
2543
+ const volume = typeof bar.volume === "number" && Number.isFinite(bar.volume) ? bar.volume : 0;
2544
+ return {
2545
+ time: bar.time,
2546
+ open,
2547
+ high,
2548
+ low,
2549
+ close,
2550
+ volume
2551
+ };
2552
+ });
2553
+ }
2362
2554
  async function fetchHyperliquidTickSize(params) {
2363
2555
  return fetchHyperliquidTickSizeForCoin(params.environment, params.symbol);
2364
2556
  }
@@ -2568,6 +2760,78 @@ var __hyperliquidMarketDataInternals = {
2568
2760
  formatScaledInt
2569
2761
  };
2570
2762
 
2763
+ // src/adapters/hyperliquid/utils.ts
2764
+ var DEFAULT_HYPERLIQUID_CADENCE_CRON = {
2765
+ daily: "0 8 * * *",
2766
+ hourly: "0 * * * *",
2767
+ weekly: "0 8 * * 1",
2768
+ "twice-weekly": "0 8 * * 1,4",
2769
+ monthly: "0 8 1 * *"
2770
+ };
2771
+ function parseHyperliquidJson(raw) {
2772
+ if (!raw) return null;
2773
+ try {
2774
+ return JSON.parse(raw);
2775
+ } catch {
2776
+ return null;
2777
+ }
2778
+ }
2779
+ function clampHyperliquidInt(value, min, max, fallback) {
2780
+ if (value == null) return fallback;
2781
+ if (typeof value === "string" && value.trim().length === 0) return fallback;
2782
+ const parsed = Number(value);
2783
+ if (!Number.isFinite(parsed)) return fallback;
2784
+ const numeric = Math.trunc(parsed);
2785
+ if (!Number.isFinite(numeric)) return fallback;
2786
+ return Math.min(max, Math.max(min, numeric));
2787
+ }
2788
+ function clampHyperliquidFloat(value, min, max, fallback) {
2789
+ if (value == null) return fallback;
2790
+ if (typeof value === "string" && value.trim().length === 0) return fallback;
2791
+ const numeric = Number(value);
2792
+ if (!Number.isFinite(numeric)) return fallback;
2793
+ return Math.min(max, Math.max(min, numeric));
2794
+ }
2795
+ function resolveHyperliquidScheduleEvery(input, options) {
2796
+ const min = options?.min ?? 1;
2797
+ const max = options?.max ?? 59;
2798
+ const fallback = options?.fallback ?? 1;
2799
+ return clampHyperliquidInt(input, min, max, fallback);
2800
+ }
2801
+ function resolveHyperliquidScheduleUnit(input, fallback = "hours") {
2802
+ if (input === "minutes") return "minutes";
2803
+ if (input === "hours") return "hours";
2804
+ return fallback;
2805
+ }
2806
+ function resolveHyperliquidIntervalCron(every, unit) {
2807
+ if (unit === "minutes") {
2808
+ return every === 1 ? "* * * * *" : `*/${every} * * * *`;
2809
+ }
2810
+ return every === 1 ? "0 * * * *" : `0 */${every} * * *`;
2811
+ }
2812
+ function resolveHyperliquidHourlyInterval(input, fallback = 1) {
2813
+ return clampHyperliquidInt(input, 1, 24, fallback);
2814
+ }
2815
+ function resolveHyperliquidCadenceCron(cadence, hourlyInterval, cadenceToCron = DEFAULT_HYPERLIQUID_CADENCE_CRON) {
2816
+ if (cadence !== "hourly") {
2817
+ return cadenceToCron[cadence];
2818
+ }
2819
+ const interval = resolveHyperliquidHourlyInterval(hourlyInterval, 1);
2820
+ return interval === 1 ? cadenceToCron.hourly : `0 */${interval} * * *`;
2821
+ }
2822
+ function resolveHyperliquidCadenceFromResolution(resolution) {
2823
+ if (resolution === "60") {
2824
+ return { cadence: "hourly", hourlyInterval: 1 };
2825
+ }
2826
+ if (resolution === "240") {
2827
+ return { cadence: "hourly", hourlyInterval: 4 };
2828
+ }
2829
+ if (resolution === "1W") {
2830
+ return { cadence: "weekly" };
2831
+ }
2832
+ return { cadence: "daily" };
2833
+ }
2834
+
2571
2835
  // src/adapters/hyperliquid/index.ts
2572
2836
  function assertPositiveDecimalInput(value, label) {
2573
2837
  if (typeof value === "number") {
@@ -2992,6 +3256,6 @@ var __hyperliquidInternals = {
2992
3256
  splitSignature
2993
3257
  };
2994
3258
 
2995
- export { DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidBars, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName2 as normalizeSpotTokenName, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidTwapOrder, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidErrorDetail, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
3259
+ export { DEFAULT_HYPERLIQUID_CADENCE_CRON, DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, clampHyperliquidAbs, clampHyperliquidFloat, clampHyperliquidInt, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidBars, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidDcaEntries, normalizeHyperliquidIndicatorBars, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName2 as normalizeSpotTokenName, parseHyperliquidJson, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidTwapOrder, planHyperliquidTrade, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidBudgetUsd, resolveHyperliquidCadenceCron, resolveHyperliquidCadenceFromResolution, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidDcaSymbolEntries, resolveHyperliquidErrorDetail, resolveHyperliquidHourlyInterval, resolveHyperliquidIntervalCron, resolveHyperliquidLeverageMode, resolveHyperliquidMaxPerRunUsd, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidPerpSymbol, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidScheduleEvery, resolveHyperliquidScheduleUnit, resolveHyperliquidSpotSymbol, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveHyperliquidTargetSize, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid };
2996
3260
  //# sourceMappingURL=index.js.map
2997
3261
  //# sourceMappingURL=index.js.map