opentool 0.19.3 → 0.19.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.
@@ -129,6 +129,7 @@ type HyperliquidHip3Dex = (typeof HYPERLIQUID_HIP3_DEXES)[number];
129
129
  type HyperliquidOpenOrderLike = {
130
130
  oid?: number;
131
131
  cloid?: string | null;
132
+ dex?: string | null;
132
133
  [key: string]: unknown;
133
134
  };
134
135
  type HyperliquidActiveAsset = {
@@ -146,8 +147,8 @@ declare class HyperliquidInfoClient {
146
147
  spotMetaAndAssetCtxs(): Promise<any>;
147
148
  assetCtxs(): Promise<any>;
148
149
  spotAssetCtxs(): Promise<any>;
149
- openOrders(user: `0x${string}`): Promise<any>;
150
- frontendOpenOrders(user: `0x${string}`): Promise<any>;
150
+ openOrders(user: `0x${string}`): Promise<HyperliquidOpenOrderLike[]>;
151
+ frontendOpenOrders(user: `0x${string}`): Promise<HyperliquidOpenOrderLike[]>;
151
152
  orderStatus(user: `0x${string}`, oid: number | string): Promise<any>;
152
153
  historicalOrders(user: `0x${string}`): Promise<any>;
153
154
  userFills(user: `0x${string}`): Promise<any>;
@@ -165,16 +166,16 @@ declare function fetchHyperliquidSpotMeta(environment?: HyperliquidEnvironment):
165
166
  declare function fetchHyperliquidSpotMetaAndAssetCtxs(environment?: HyperliquidEnvironment): Promise<any>;
166
167
  declare function fetchHyperliquidAssetCtxs(environment?: HyperliquidEnvironment): Promise<any>;
167
168
  declare function fetchHyperliquidSpotAssetCtxs(environment?: HyperliquidEnvironment): Promise<any>;
168
- declare function fetchHyperliquidOpenOrders(params: {
169
+ declare function fetchHyperliquidOpenOrders<T extends HyperliquidOpenOrderLike = HyperliquidOpenOrderLike>(params: {
169
170
  environment?: HyperliquidEnvironment;
170
171
  user: `0x${string}`;
171
172
  dex?: string | null;
172
- }): Promise<any>;
173
- declare function fetchHyperliquidFrontendOpenOrders(params: {
173
+ }): Promise<T[]>;
174
+ declare function fetchHyperliquidFrontendOpenOrders<T extends HyperliquidOpenOrderLike = HyperliquidOpenOrderLike>(params: {
174
175
  environment?: HyperliquidEnvironment;
175
176
  user: `0x${string}`;
176
177
  dex?: string | null;
177
- }): Promise<any>;
178
+ }): Promise<T[]>;
178
179
  declare function fetchHyperliquidOrderStatus(params: {
179
180
  environment?: HyperliquidEnvironment;
180
181
  user: `0x${string}`;
@@ -266,6 +267,10 @@ type UpdateLeverageInput = {
266
267
  symbol: string;
267
268
  leverageMode: "cross" | "isolated";
268
269
  leverage: number;
270
+ verifyApplied?: boolean;
271
+ verifyAttempts?: number;
272
+ verifyDelayMs?: number;
273
+ verifyUser?: `0x${string}`;
269
274
  };
270
275
  type UpdateIsolatedMarginInput = {
271
276
  symbol: string;
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export { AgentDigestRequest, MyToolsResponse, StoreAction, StoreError, StoreEven
11
11
  export { BACKTEST_DECISION_MODE, BacktestDecisionRequest, BacktestDecisionSeriesInput, BacktestMode, BacktestResolution, ResolvedBacktestWindow, backtestDecisionRequestSchema, buildBacktestDecisionSeriesInput, estimateCountBack, parseTimeToSeconds, resolutionToSeconds, resolveBacktestAccountValueUsd, resolveBacktestMode, resolveBacktestWindow } from './backtest/index.js';
12
12
  import { ZodSchema } from 'zod';
13
13
  export { C as ChainMetadata, a as ChainReference, b as ChainTokenMap, H as Hex, c as HexAddress, N as NonceSource, R as RpcProviderOptions, d as RpcUrlResolver, T as TokenMetadata, e as TurnkeyOptions, f as TurnkeySignWith, W as WalletBaseContext, g as WalletContext, h as WalletFullContext, i as WalletOptions, j as WalletOptionsBase, k as WalletPrivateKeyOptions, l as WalletProviderType, m as WalletReadonlyContext, n as WalletReadonlyOptions, o as WalletRegistry, p as WalletSendTransactionParams, q as WalletSignerContext, r as WalletTransferParams, s as WalletTurnkeyOptions } from './types-BaTmu0gS.js';
14
- 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, k as HyperliquidEnvironment, l as HyperliquidExchangeClient, m as HyperliquidExchangeResponse, n as HyperliquidGrouping, 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, x as HyperliquidOrderIntent, 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 fetchHyperliquidResolvedMarketDescriptor, an as fetchHyperliquidSizeDecimals, ao as fetchHyperliquidSpotAccountValue, ap as fetchHyperliquidSpotAssetCtxs, aq as fetchHyperliquidSpotClearinghouseState, ar as fetchHyperliquidSpotMarketInfo, as as fetchHyperliquidSpotMeta, at as fetchHyperliquidSpotMetaAndAssetCtxs, au as fetchHyperliquidSpotTickSize, av as fetchHyperliquidSpotUsdPriceMap, aw as fetchHyperliquidTickSize, ax as fetchHyperliquidUserFills, ay as fetchHyperliquidUserFillsByTime, az as fetchHyperliquidUserRateLimit, aA as formatHyperliquidMarketablePrice, aB as formatHyperliquidOrderSize, aC as formatHyperliquidPrice, aD as formatHyperliquidSize, aE as getKnownHyperliquidDexes, aF as isHyperliquidSpotSymbol, aG as modifyHyperliquidOrder, aH as normalizeHyperliquidBaseSymbol, aI as normalizeHyperliquidIndicatorBars, aJ as normalizeHyperliquidMetaSymbol, aK as normalizeSpotTokenName, aL as parseHyperliquidSymbol, aM as parseSpotPairSymbol, aN as placeHyperliquidOrderWithTpSl, aO as placeHyperliquidPositionTpSl, aP as placeHyperliquidTwapOrder, aQ as reserveHyperliquidRequestWeight, aR as resolveHyperliquidAbstractionFromMode, aS as resolveHyperliquidErrorDetail, aT as resolveHyperliquidLeverageMode, aU as resolveHyperliquidMarketDataCoin, aV as resolveHyperliquidOrderRef, aW as resolveHyperliquidOrderSymbol, aX as resolveHyperliquidPair, aY as resolveHyperliquidPerpSymbol, aZ as resolveHyperliquidProfileChain, a_ as resolveHyperliquidSpotSymbol, a$ as resolveHyperliquidSymbol, b0 as resolveSpotMidCandidates, b1 as resolveSpotTokenCandidates, b2 as roundHyperliquidPriceToTick, b3 as scheduleHyperliquidCancel, b4 as sendHyperliquidSpot, b5 as setHyperliquidAccountAbstractionMode, b6 as setHyperliquidPortfolioMargin, b7 as supportsHyperliquidBuilderFee, b8 as transferHyperliquidSubAccount, b9 as updateHyperliquidIsolatedMargin, ba as updateHyperliquidLeverage } from './browser-CnpOj35m.js';
14
+ 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, k as HyperliquidEnvironment, l as HyperliquidExchangeClient, m as HyperliquidExchangeResponse, n as HyperliquidGrouping, 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, x as HyperliquidOrderIntent, 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 fetchHyperliquidResolvedMarketDescriptor, an as fetchHyperliquidSizeDecimals, ao as fetchHyperliquidSpotAccountValue, ap as fetchHyperliquidSpotAssetCtxs, aq as fetchHyperliquidSpotClearinghouseState, ar as fetchHyperliquidSpotMarketInfo, as as fetchHyperliquidSpotMeta, at as fetchHyperliquidSpotMetaAndAssetCtxs, au as fetchHyperliquidSpotTickSize, av as fetchHyperliquidSpotUsdPriceMap, aw as fetchHyperliquidTickSize, ax as fetchHyperliquidUserFills, ay as fetchHyperliquidUserFillsByTime, az as fetchHyperliquidUserRateLimit, aA as formatHyperliquidMarketablePrice, aB as formatHyperliquidOrderSize, aC as formatHyperliquidPrice, aD as formatHyperliquidSize, aE as getKnownHyperliquidDexes, aF as isHyperliquidSpotSymbol, aG as modifyHyperliquidOrder, aH as normalizeHyperliquidBaseSymbol, aI as normalizeHyperliquidIndicatorBars, aJ as normalizeHyperliquidMetaSymbol, aK as normalizeSpotTokenName, aL as parseHyperliquidSymbol, aM as parseSpotPairSymbol, aN as placeHyperliquidOrderWithTpSl, aO as placeHyperliquidPositionTpSl, aP as placeHyperliquidTwapOrder, aQ as reserveHyperliquidRequestWeight, aR as resolveHyperliquidAbstractionFromMode, aS as resolveHyperliquidErrorDetail, aT as resolveHyperliquidLeverageMode, aU as resolveHyperliquidMarketDataCoin, aV as resolveHyperliquidOrderRef, aW as resolveHyperliquidOrderSymbol, aX as resolveHyperliquidPair, aY as resolveHyperliquidPerpSymbol, aZ as resolveHyperliquidProfileChain, a_ as resolveHyperliquidSpotSymbol, a$ as resolveHyperliquidSymbol, b0 as resolveSpotMidCandidates, b1 as resolveSpotTokenCandidates, b2 as roundHyperliquidPriceToTick, b3 as scheduleHyperliquidCancel, b4 as sendHyperliquidSpot, b5 as setHyperliquidAccountAbstractionMode, b6 as setHyperliquidPortfolioMargin, b7 as supportsHyperliquidBuilderFee, b8 as transferHyperliquidSubAccount, b9 as updateHyperliquidIsolatedMargin, ba as updateHyperliquidLeverage } from './browser-DxqvU3eA.js';
15
15
  import 'viem';
16
16
  import 'viem/accounts';
17
17
 
package/dist/index.js CHANGED
@@ -2457,6 +2457,16 @@ function mergeHyperliquidOpenOrders(batches) {
2457
2457
  }
2458
2458
  return [...merged.values()];
2459
2459
  }
2460
+ function applyHyperliquidOpenOrderDexContext(orders, dex) {
2461
+ const resolvedDex = typeof dex === "string" && dex.trim().length > 0 ? dex.trim().toLowerCase() : null;
2462
+ return orders.map((order) => {
2463
+ const existingDex = typeof order.dex === "string" && order.dex.trim().length > 0 ? order.dex.trim().toLowerCase() : null;
2464
+ return {
2465
+ ...order,
2466
+ dex: existingDex ?? resolvedDex
2467
+ };
2468
+ });
2469
+ }
2460
2470
  function readNumber(value) {
2461
2471
  if (typeof value === "number") {
2462
2472
  return Number.isFinite(value) ? value : null;
@@ -2575,19 +2585,21 @@ async function fetchHyperliquidSpotAssetCtxs(environment = "mainnet") {
2575
2585
  }
2576
2586
  async function fetchHyperliquidOpenOrders(params) {
2577
2587
  const env = params.environment ?? "mainnet";
2578
- return postInfo(env, {
2588
+ const orders = await postInfo(env, {
2579
2589
  type: "openOrders",
2580
2590
  user: normalizeAddress(params.user),
2581
2591
  ...params.dex ? { dex: params.dex.trim().toLowerCase() } : {}
2582
2592
  });
2593
+ return applyHyperliquidOpenOrderDexContext(orders, params.dex);
2583
2594
  }
2584
2595
  async function fetchHyperliquidFrontendOpenOrders(params) {
2585
2596
  const env = params.environment ?? "mainnet";
2586
- return postInfo(env, {
2597
+ const orders = await postInfo(env, {
2587
2598
  type: "frontendOpenOrders",
2588
2599
  user: normalizeAddress(params.user),
2589
2600
  ...params.dex ? { dex: params.dex.trim().toLowerCase() } : {}
2590
2601
  });
2602
+ return applyHyperliquidOpenOrderDexContext(orders, params.dex);
2591
2603
  }
2592
2604
  async function fetchHyperliquidOrderStatus(params) {
2593
2605
  const env = params.environment ?? "mainnet";
@@ -2698,6 +2710,8 @@ async function fetchHyperliquidActiveAsset(params) {
2698
2710
  }
2699
2711
 
2700
2712
  // src/adapters/hyperliquid/exchange.ts
2713
+ var DEFAULT_HYPERLIQUID_LEVERAGE_VERIFY_ATTEMPTS = 4;
2714
+ var DEFAULT_HYPERLIQUID_LEVERAGE_VERIFY_DELAY_MS = 250;
2701
2715
  function resolveRequiredExchangeNonce(options) {
2702
2716
  if (typeof options.nonce === "number") {
2703
2717
  return options.nonce;
@@ -2708,6 +2722,51 @@ function resolveRequiredExchangeNonce(options) {
2708
2722
  }
2709
2723
  return resolved;
2710
2724
  }
2725
+ function sleep(ms) {
2726
+ return new Promise((resolve) => {
2727
+ setTimeout(resolve, ms);
2728
+ });
2729
+ }
2730
+ function normalizeReportedLeverageMode(value) {
2731
+ if (!value) return null;
2732
+ const normalized = value.trim().toLowerCase();
2733
+ if (normalized === "cross" || normalized === "isolated") {
2734
+ return normalized;
2735
+ }
2736
+ return null;
2737
+ }
2738
+ function resolveLeverageVerificationUser(options) {
2739
+ return normalizeAddress(
2740
+ options.input.verifyUser ?? options.vaultAddress ?? options.wallet.address
2741
+ );
2742
+ }
2743
+ async function verifyAppliedHyperliquidLeverage(params) {
2744
+ const attempts = typeof params.attempts === "number" && Number.isFinite(params.attempts) && params.attempts > 0 ? Math.max(1, Math.floor(params.attempts)) : DEFAULT_HYPERLIQUID_LEVERAGE_VERIFY_ATTEMPTS;
2745
+ const delayMs = typeof params.delayMs === "number" && Number.isFinite(params.delayMs) && params.delayMs >= 0 ? Math.max(0, Math.floor(params.delayMs)) : DEFAULT_HYPERLIQUID_LEVERAGE_VERIFY_DELAY_MS;
2746
+ let lastReportedLeverage = null;
2747
+ let lastReportedMode = null;
2748
+ for (let index = 0; index < attempts; index += 1) {
2749
+ const asset = await fetchHyperliquidActiveAsset({
2750
+ environment: params.environment,
2751
+ user: params.user,
2752
+ symbol: params.symbol
2753
+ });
2754
+ lastReportedLeverage = asset.leverage;
2755
+ lastReportedMode = normalizeReportedLeverageMode(asset.leverageType);
2756
+ const leverageMatches = asset.leverage === params.leverage;
2757
+ const modeMatches = lastReportedMode == null || lastReportedMode === params.leverageMode;
2758
+ if (leverageMatches && modeMatches) {
2759
+ return asset;
2760
+ }
2761
+ if (index < attempts - 1 && delayMs > 0) {
2762
+ await sleep(delayMs);
2763
+ }
2764
+ }
2765
+ const reportedLabel = lastReportedLeverage != null ? `${lastReportedLeverage}x${lastReportedMode ? ` ${lastReportedMode}` : ""}` : "unknown leverage";
2766
+ throw new Error(
2767
+ `Hyperliquid still reports ${reportedLabel} for ${params.symbol} after requesting ${params.leverage}x ${params.leverageMode}.`
2768
+ );
2769
+ }
2711
2770
  var HyperliquidExchangeClient = class {
2712
2771
  constructor(args) {
2713
2772
  this.wallet = args.wallet;
@@ -3057,7 +3116,20 @@ async function updateHyperliquidLeverage(options) {
3057
3116
  isCross: options.input.leverageMode === "cross",
3058
3117
  leverage: options.input.leverage
3059
3118
  };
3060
- return submitExchangeAction(options, action);
3119
+ const response = await submitExchangeAction(options, action);
3120
+ if (options.input.verifyApplied === false) {
3121
+ return response;
3122
+ }
3123
+ await verifyAppliedHyperliquidLeverage({
3124
+ environment: env,
3125
+ user: resolveLeverageVerificationUser(options),
3126
+ symbol: options.input.symbol,
3127
+ leverage: options.input.leverage,
3128
+ leverageMode: options.input.leverageMode,
3129
+ ...typeof options.input.verifyAttempts === "number" ? { attempts: options.input.verifyAttempts } : {},
3130
+ ...typeof options.input.verifyDelayMs === "number" ? { delayMs: options.input.verifyDelayMs } : {}
3131
+ });
3132
+ return response;
3061
3133
  }
3062
3134
  async function updateHyperliquidIsolatedMargin(options) {
3063
3135
  assertSymbol(options.input.symbol);
@@ -4614,6 +4686,13 @@ function toPositiveNumber(value, label) {
4614
4686
  function normalizeExecutionType(value) {
4615
4687
  return value ?? "market";
4616
4688
  }
4689
+ function assertSupportedParentOrder(parent) {
4690
+ if (parent.reduceOnly) {
4691
+ throw new Error(
4692
+ "Reduce-only parent orders are not supported with attached TP/SL. Use placeHyperliquidPositionTpSl for existing positions."
4693
+ );
4694
+ }
4695
+ }
4617
4696
  function resolveTriggerDirection(params) {
4618
4697
  const isLong = params.parentSide === "buy";
4619
4698
  if (params.leg === "tp") {
@@ -4721,6 +4800,7 @@ async function buildAttachedTpSlOrders(params) {
4721
4800
  return legs.filter((entry) => Boolean(entry));
4722
4801
  }
4723
4802
  async function placeHyperliquidOrderWithTpSl(options) {
4803
+ assertSupportedParentOrder(options.parent);
4724
4804
  const env = options.environment ?? "mainnet";
4725
4805
  const childOrders = await buildAttachedTpSlOrders({
4726
4806
  symbol: options.parent.symbol,