@continuumdao/ctm-mpc-defi 0.2.44 → 0.2.45

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 +1 @@
1
- {"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/hyperliquid/support.ts","../../../../src/protocols/evm/hyperliquid/constants.ts","../../../../src/protocols/evm/hyperliquid/api.ts","../../../../src/protocols/evm/hyperliquid/marketSearch.ts","../../../../src/protocols/evm/hyperliquid/assets.ts","../../../../src/protocols/evm/hyperliquid/reads.ts","../../../../src/protocols/evm/hyperliquid/coreWriter.ts","../../../../src/core/defiEvmClient.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/hyperliquid/l1Signing.ts","../../../../src/protocols/evm/hyperliquid/exchangeMultisign.ts","../../../../src/protocols/evm/hyperliquid/multisign.ts","../../../../src/protocols/evm/hyperliquid/vaultMultisign.ts","../../../../src/protocols/evm/hyperliquid/stakingMultisign.ts","../../../../src/protocols/evm/hyperliquid/bridgeConstants.ts","../../../../src/protocols/evm/hyperliquid/userSignedSigning.ts","../../../../src/protocols/evm/hyperliquid/bridgeMultisign.ts","../../../../src/protocols/evm/hyperliquid/pendingClose.ts","../../../../src/protocols/evm/hyperliquid/index.ts"],"names":["name","markets","dexes","parseAbi","encodeFunctionData","encodeAbiParameters","http","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","createPublicClient","fetchChainFeeParams","getAddress","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","stringToHex","hashTypedData","encodeMsgpack","ZERO_ADDRESS","parseUnits"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","/** HyperEVM chains for Hyperliquid CoreWriter integration. */\nexport const HYPERLIQUID_SUPPORTED_CHAIN_IDS = [999, 998] as const\n\nexport type HyperliquidSupportedChainId = (typeof HYPERLIQUID_SUPPORTED_CHAIN_IDS)[number]\n\nexport function isHyperliquidChainSupported(chainId: number): chainId is HyperliquidSupportedChainId {\n return (HYPERLIQUID_SUPPORTED_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function hyperliquidApiBaseUrl(chainId: number): string {\n return chainId === 998 ? 'https://api.hyperliquid-testnet.xyz' : 'https://api.hyperliquid.xyz'\n}\n\n/** Stats feed used by app.hyperliquid.xyz/vaults (official vaultSummaries returns []). */\nexport function hyperliquidVaultStatsUrl(chainId: number): string | null {\n return chainId === 998 ? null : 'https://stats-data.hyperliquid.xyz/Mainnet/vaults'\n}\n\nexport const HYPERLIQUID_HLP_VAULT_ADDRESS = '0xdfc24b077bc1425ad1dea75bcb6f8158e10df303'\n\n/** HIP-3 coins use `{dex}:{symbol}` (e.g. `xyz:AAPL`). Returns dex segment when present. */\nexport function hyperliquidInferDexFromCoin(coin: string): string | undefined {\n const trimmed = coin.trim()\n const sep = trimmed.indexOf(':')\n if (sep <= 0) return undefined\n return trimmed.slice(0, sep)\n}\n","/** CoreWriter system contract on HyperEVM — sends actions to HyperCore. */\nexport const HYPERLIQUID_CORE_WRITER_ADDRESS = '0x3333333333333333333333333333333333333333' as const\n\n/** Spot asset IDs are offset from perp indices. */\nexport const HYPERLIQUID_SPOT_ASSET_OFFSET = 10_000\n\nexport const HYPERLIQUID_CORE_WRITER_GAS_FALLBACK = 120_000n\n\n/** Time-in-force encodings for CoreWriter limit orders. */\nexport const HYPERLIQUID_TIF = {\n alo: 1,\n gtc: 2,\n ioc: 3,\n} as const\n\nexport type HyperliquidTifKey = keyof typeof HYPERLIQUID_TIF\n\n/** Approximate bar duration in ms for candle window sizing. */\nexport const HYPERLIQUID_INTERVAL_MS: Record<string, number> = {\n '1m': 60_000,\n '3m': 180_000,\n '5m': 300_000,\n '15m': 900_000,\n '30m': 1_800_000,\n '1h': 3_600_000,\n '2h': 7_200_000,\n '4h': 14_400_000,\n '8h': 28_800_000,\n '12h': 43_200_000,\n '1d': 86_400_000,\n '3d': 259_200_000,\n '1w': 604_800_000,\n '1M': 2_592_000_000,\n}\n\nexport const HYPERLIQUID_DEFAULT_OHLCV_INTERVAL = '15m' as const\nexport const HYPERLIQUID_DEFAULT_CANDLE_LIMIT = 48\nexport const HYPERLIQUID_MAX_CANDLE_LIMIT = 200\n/** Max bars for dedicated OHLCV range requests (e.g. 7d @ 15m ≈ 672). */\nexport const HYPERLIQUID_MAX_OHLCV_BARS = 2000\n/** Enough bars for default EMA(50) on 4h (~6 bars/day) and chart-periods 1h/15m windows. */\nexport const HYPERLIQUID_DEFAULT_LOOKBACK_DAYS = 14\nexport const HYPERLIQUID_MAX_LOOKBACK_DAYS = 90\n","import { hyperliquidApiBaseUrl, hyperliquidInferDexFromCoin, hyperliquidVaultStatsUrl, HYPERLIQUID_HLP_VAULT_ADDRESS } from './support.js'\nimport {\n HYPERLIQUID_DEFAULT_CANDLE_LIMIT,\n HYPERLIQUID_DEFAULT_LOOKBACK_DAYS,\n HYPERLIQUID_DEFAULT_OHLCV_INTERVAL,\n HYPERLIQUID_INTERVAL_MS,\n HYPERLIQUID_MAX_CANDLE_LIMIT,\n HYPERLIQUID_MAX_LOOKBACK_DAYS,\n HYPERLIQUID_MAX_OHLCV_BARS,\n} from './constants.js'\n\nexport type HyperliquidPerpMarket = {\n name: string\n asset: number\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n /** HIP-3 builder dex; omitted for native Hyperliquid perps. */\n dex?: string\n}\n\nexport type HyperliquidPerpDex = {\n name: string\n fullName: string\n}\n\nexport type HyperliquidSpotMarket = {\n name: string\n asset: number\n tokenIndex: number\n szDecimals: number\n}\n\nexport type HyperliquidOhlcvInterval = '1m' | '3m' | '5m' | '15m' | '30m' | '1h' | '2h' | '4h' | '8h' | '12h' | '1d' | '3d' | '1w' | '1M'\n\nexport type HyperliquidOhlcvCandle = {\n timestampMs: number\n open: string\n high: string\n low: string\n close: string\n volume: string\n}\n\nexport type HyperliquidLivePrice = {\n markPx: string | null\n midPx: string | null\n oraclePx: string | null\n prevDayPx: string | null\n /** Best available live tradable price (midPx, else markPx, else allMids). */\n midUsd: string\n source: 'midPx' | 'markPx' | 'allMids'\n}\n\nexport type HyperliquidMarketSnapshot = {\n coin: string\n dex: string | null\n livePrice: HyperliquidLivePrice\n /** @deprecated Prefer livePrice.midUsd */\n midUsd: string\n /** Official HyperCore hourly funding from metaAndAssetCtxs. */\n funding: string | null\n fetchedAtMs: number\n interval: HyperliquidOhlcvInterval\n latestCandle: HyperliquidOhlcvCandle | null\n candles: HyperliquidOhlcvCandle[]\n candleCount: number\n}\n\nexport type HyperliquidOhlcvRange = {\n coin: string\n dex: string | null\n interval: HyperliquidOhlcvInterval\n startTimeMs: number\n endTimeMs: number\n expectedBars: number\n candleCount: number\n /** Echo of fetch args — used by chart window validation. */\n lookbackDays?: number\n lookbackHours?: number\n latestCandle: HyperliquidOhlcvCandle | null\n candles: HyperliquidOhlcvCandle[]\n fetchedAtMs: number\n}\n\nasync function hyperliquidInfoPost<T>(chainId: number, body: Record<string, unknown>): Promise<T> {\n const base = hyperliquidApiBaseUrl(chainId)\n const res = await fetch(`${base}/info`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n cache: 'no-store',\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Hyperliquid info API failed (${res.status}): ${text.slice(0, 200)}`)\n }\n return (await res.json()) as T\n}\n\ntype MetaResponse = {\n universe: Array<{\n name: string\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n }>\n}\n\ntype SpotMetaResponse = {\n universe: Array<{ name: string; tokens: number[]; index: number }>\n tokens: Array<{ name: string; szDecimals: number; index: number }>\n}\n\nexport async function hyperliquidFetchPerpMeta(args: {\n chainId: number\n dex?: string\n}): Promise<{ markets: HyperliquidPerpMarket[] }> {\n const req: Record<string, unknown> = { type: 'meta' }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const meta = await hyperliquidInfoPost<MetaResponse>(args.chainId, req)\n const markets: HyperliquidPerpMarket[] = (meta.universe ?? []).map((u, i) => ({\n name: u.name,\n asset: i,\n szDecimals: u.szDecimals,\n maxLeverage: u.maxLeverage,\n onlyIsolated: u.onlyIsolated,\n }))\n return { markets }\n}\n\nexport async function hyperliquidFetchSpotMeta(args: {\n chainId: number\n}): Promise<{ markets: HyperliquidSpotMarket[] }> {\n const meta = await hyperliquidInfoPost<SpotMetaResponse>(args.chainId, { type: 'spotMeta' })\n const tokenByIndex = new Map((meta.tokens ?? []).map((t) => [t.index, t]))\n const markets: HyperliquidSpotMarket[] = (meta.universe ?? []).map((u, i) => {\n const baseTokenIdx = u.tokens[0]\n const token = baseTokenIdx != null ? tokenByIndex.get(baseTokenIdx) : undefined\n return {\n name: u.name,\n asset: 10_000 + i,\n tokenIndex: i,\n szDecimals: token?.szDecimals ?? 8,\n }\n })\n return { markets }\n}\n\nexport async function hyperliquidFetchAllMids(args: {\n chainId: number\n dex?: string\n}): Promise<{ mids: Record<string, string> }> {\n const req: Record<string, unknown> = { type: 'allMids' }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const mids = await hyperliquidInfoPost<Record<string, string>>(args.chainId, req)\n return { mids }\n}\n\nfunction hyperliquidMapCandles(\n raw: Array<{ t: number; o: string; h: string; l: string; c: string; v: string }> | null | undefined,\n): HyperliquidOhlcvCandle[] {\n return (raw ?? []).map((c) => ({\n timestampMs: c.t,\n open: c.o,\n high: c.h,\n low: c.l,\n close: c.c,\n volume: c.v,\n }))\n}\n\nasync function hyperliquidFetchCandlesRaw(args: {\n chainId: number\n coin: string\n interval: HyperliquidOhlcvInterval\n startTimeMs: number\n endTimeMs: number\n}): Promise<HyperliquidOhlcvCandle[]> {\n const raw = await hyperliquidInfoPost<\n Array<{ t: number; o: string; h: string; l: string; c: string; v: string }>\n >(args.chainId, {\n type: 'candleSnapshot',\n req: {\n coin: args.coin,\n interval: args.interval,\n startTime: args.startTimeMs,\n endTime: args.endTimeMs,\n },\n })\n return hyperliquidMapCandles(raw)\n}\n\n/** Resolve OHLCV window from lookback or explicit timestamps. */\nexport function hyperliquidResolveOhlcvWindow(args: {\n interval: HyperliquidOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}): { startTimeMs: number; endTimeMs: number; expectedBars: number } {\n const endTimeMs = args.endTimeMs ?? Date.now()\n const intervalMs = HYPERLIQUID_INTERVAL_MS[args.interval] ?? HYPERLIQUID_INTERVAL_MS['15m']!\n\n let startTimeMs: number\n if (args.startTimeMs != null) {\n startTimeMs = args.startTimeMs\n } else if (args.lookbackDays != null) {\n if (args.lookbackDays <= 0 || args.lookbackDays > HYPERLIQUID_MAX_LOOKBACK_DAYS) {\n throw new Error(`lookbackDays must be between 1 and ${HYPERLIQUID_MAX_LOOKBACK_DAYS}`)\n }\n startTimeMs = endTimeMs - args.lookbackDays * 86_400_000\n } else if (args.lookbackHours != null) {\n if (args.lookbackHours <= 0 || args.lookbackHours > HYPERLIQUID_MAX_LOOKBACK_DAYS * 24) {\n throw new Error(`lookbackHours must be between 1 and ${HYPERLIQUID_MAX_LOOKBACK_DAYS * 24}`)\n }\n startTimeMs = endTimeMs - args.lookbackHours * 3_600_000\n } else {\n startTimeMs = endTimeMs - HYPERLIQUID_DEFAULT_LOOKBACK_DAYS * 86_400_000\n }\n\n if (!Number.isFinite(startTimeMs) || !Number.isFinite(endTimeMs) || startTimeMs >= endTimeMs) {\n throw new Error('Invalid OHLCV time range: startTimeMs must be before endTimeMs')\n }\n\n const expectedBars = Math.ceil((endTimeMs - startTimeMs) / intervalMs)\n if (expectedBars > HYPERLIQUID_MAX_OHLCV_BARS) {\n throw new Error(\n `OHLCV range needs ~${expectedBars} bars at ${args.interval} (max ${HYPERLIQUID_MAX_OHLCV_BARS}). Use a coarser interval or shorter lookback.`,\n )\n }\n\n return { startTimeMs, endTimeMs, expectedBars }\n}\n\n/** Short recent window for market snapshot (default 48 bars). */\nexport async function hyperliquidFetchCandles(args: {\n chainId: number\n coin: string\n interval: HyperliquidOhlcvInterval\n startTimeMs?: number\n endTimeMs?: number\n limit?: number\n}): Promise<{ candles: HyperliquidOhlcvCandle[] }> {\n const endTime = args.endTimeMs ?? Date.now()\n const intervalMs = HYPERLIQUID_INTERVAL_MS[args.interval] ?? HYPERLIQUID_INTERVAL_MS['15m']!\n const limit = Math.min(Math.max(args.limit ?? HYPERLIQUID_DEFAULT_CANDLE_LIMIT, 1), HYPERLIQUID_MAX_CANDLE_LIMIT)\n const startTime = args.startTimeMs ?? endTime - intervalMs * (limit + 4)\n const candles = await hyperliquidFetchCandlesRaw({\n chainId: args.chainId,\n coin: args.coin,\n interval: args.interval,\n startTimeMs: startTime,\n endTimeMs: endTime,\n })\n return { candles: candles.slice(-limit) }\n}\n\n/** OHLCV for an explicit time range — requests only that window from Hyperliquid (no over-fetch + filter). */\nexport async function hyperliquidFetchOhlcvRange(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}): Promise<HyperliquidOhlcvRange> {\n const coin = args.coin.trim()\n const interval = args.interval ?? HYPERLIQUID_DEFAULT_OHLCV_INTERVAL\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || null\n const { startTimeMs, endTimeMs, expectedBars } = hyperliquidResolveOhlcvWindow({\n interval,\n lookbackDays: args.lookbackDays,\n lookbackHours: args.lookbackHours,\n startTimeMs: args.startTimeMs,\n endTimeMs: args.endTimeMs,\n })\n\n const candles = await hyperliquidFetchCandlesRaw({\n chainId: args.chainId,\n coin,\n interval,\n startTimeMs,\n endTimeMs,\n })\n\n if (candles.length === 0) {\n throw new Error(\n `No OHLCV data for ${coin} between ${startTimeMs} and ${endTimeMs} at ${interval}. Check coin/dex.`,\n )\n }\n\n const latestCandle = candles.length > 0 ? candles[candles.length - 1]! : null\n\n const effectiveLookbackDays =\n args.lookbackDays ??\n (args.lookbackHours == null && args.startTimeMs == null ? HYPERLIQUID_DEFAULT_LOOKBACK_DAYS : undefined)\n\n return {\n coin,\n dex,\n interval,\n startTimeMs,\n endTimeMs,\n expectedBars,\n candleCount: candles.length,\n ...(effectiveLookbackDays != null ? { lookbackDays: effectiveLookbackDays } : {}),\n ...(args.lookbackHours != null ? { lookbackHours: args.lookbackHours } : {}),\n latestCandle,\n candles,\n fetchedAtMs: Date.now(),\n }\n}\n\ntype PerpAssetContextRow = {\n markPx?: string\n midPx?: string | null\n oraclePx?: string\n funding?: string\n openInterest?: string\n prevDayPx?: string\n}\n\n/** Live mark/mid/oracle from metaAndAssetCtxs — authoritative for HIP-3 and native perps. */\nexport async function hyperliquidFetchPerpAssetContext(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<{\n markPx: string | null\n midPx: string | null\n oraclePx: string | null\n prevDayPx: string | null\n funding: string | null\n openInterest: string | null\n}> {\n const coin = args.coin.trim()\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || ''\n const req: Record<string, unknown> = { type: 'metaAndAssetCtxs' }\n if (dex) req.dex = dex\n\n const raw = await hyperliquidInfoPost<\n [{ universe: Array<{ name: string }> }, PerpAssetContextRow[]]\n >(args.chainId, req)\n\n const universe = raw?.[0]?.universe ?? []\n const contexts = raw?.[1] ?? []\n const idx = universe.findIndex((u) => u.name === coin)\n if (idx < 0) {\n throw new Error(`Hyperliquid asset context not found for ${coin}${dex ? ` on dex ${dex}` : ''}`)\n }\n\n const ctx = contexts[idx] ?? {}\n const str = (v: string | null | undefined) => {\n const s = String(v ?? '').trim()\n return s || null\n }\n\n return {\n markPx: str(ctx.markPx),\n midPx: str(ctx.midPx),\n oraclePx: str(ctx.oraclePx),\n prevDayPx: str(ctx.prevDayPx),\n funding: str(ctx.funding),\n openInterest: str(ctx.openInterest),\n }\n}\n\nfunction hyperliquidPickLivePrice(args: {\n markPx: string | null\n midPx: string | null\n midFromAllMids: string | null\n}): HyperliquidLivePrice {\n const midUsd = args.midPx ?? args.markPx ?? args.midFromAllMids\n if (!midUsd) {\n throw new Error('Could not fetch live Hyperliquid price (mark, mid, and allMids all empty)')\n }\n const source: HyperliquidLivePrice['source'] = args.midPx\n ? 'midPx'\n : args.markPx\n ? 'markPx'\n : 'allMids'\n return {\n markPx: args.markPx,\n midPx: args.midPx,\n oraclePx: null,\n prevDayPx: null,\n midUsd,\n source,\n }\n}\n\nexport async function hyperliquidFetchMarketSnapshot(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n candleLimit?: number\n}): Promise<HyperliquidMarketSnapshot> {\n const coin = args.coin.trim()\n const interval = args.interval ?? HYPERLIQUID_DEFAULT_OHLCV_INTERVAL\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || null\n const candleLimit = Math.min(\n Math.max(args.candleLimit ?? HYPERLIQUID_DEFAULT_CANDLE_LIMIT, 1),\n HYPERLIQUID_MAX_CANDLE_LIMIT,\n )\n\n const [{ mids }, assetCtx, { candles }] = await Promise.all([\n hyperliquidFetchAllMids({ chainId: args.chainId, dex: dex ?? undefined }),\n hyperliquidFetchPerpAssetContext({ chainId: args.chainId, coin, dex: dex ?? undefined }),\n hyperliquidFetchCandles({\n chainId: args.chainId,\n coin,\n interval,\n limit: candleLimit,\n }),\n ])\n\n const midFromAllMids = mids[coin] ?? null\n const livePrice: HyperliquidLivePrice = {\n ...hyperliquidPickLivePrice({\n markPx: assetCtx.markPx,\n midPx: assetCtx.midPx,\n midFromAllMids,\n }),\n oraclePx: assetCtx.oraclePx,\n prevDayPx: assetCtx.prevDayPx,\n }\n\n const latestCandle = candles.length > 0 ? candles[candles.length - 1]! : null\n\n return {\n coin,\n dex,\n livePrice,\n midUsd: livePrice.midUsd,\n funding: assetCtx.funding,\n fetchedAtMs: Date.now(),\n interval,\n latestCandle,\n candles,\n candleCount: candles.length,\n }\n}\n\ntype ClearinghouseState = {\n assetPositions?: Array<{\n position?: {\n coin?: string\n szi?: string\n entryPx?: string\n positionValue?: string\n unrealizedPnl?: string\n liquidationPx?: string | null\n leverage?: { type?: string; value?: number }\n maxLeverage?: number\n marginUsed?: string\n returnOnEquity?: string\n }\n }>\n marginSummary?: { accountValue?: string; totalMarginUsed?: string }\n /** USD that can leave perp margin (e.g. transfer to spot). */\n withdrawable?: string\n}\n\ntype SpotClearinghouseState = {\n balances?: Array<{\n coin?: string\n token?: number\n total?: string\n hold?: string\n entryNtl?: string\n }>\n}\n\nexport async function hyperliquidFetchClearinghouseState(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ state: ClearinghouseState }> {\n const req: Record<string, unknown> = { type: 'clearinghouseState', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const state = await hyperliquidInfoPost<ClearinghouseState>(args.chainId, req)\n return { state }\n}\n\nexport async function hyperliquidFetchSpotClearinghouseState(args: {\n chainId: number\n user: string\n}): Promise<{ state: SpotClearinghouseState }> {\n const state = await hyperliquidInfoPost<SpotClearinghouseState>(args.chainId, {\n type: 'spotClearinghouseState',\n user: args.user,\n })\n return { state }\n}\n\ntype ActiveAssetDataResponse = {\n coin?: string\n markPx?: string\n leverage?: { type?: string; value?: number; rawUsd?: string }\n /** [buy, sell] max size in coin units at current leverage/margin. */\n availableToTrade?: [string, string]\n}\n\nexport type HyperliquidActiveAssetContext = {\n markPx: string | null\n leverageLabel: string | null\n availableToBuy: string | null\n availableToSell: string | null\n}\n\nfunction hyperliquidFmtLeverage(leverage?: { type?: string; value?: number }): string | null {\n if (leverage?.value == null) return null\n const t = leverage.type === 'isolated' ? 'iso' : 'cross'\n return `${leverage.value}x ${t}`\n}\n\nfunction hyperliquidPositiveSizeString(value: string | undefined): string | null {\n const n = Number.parseFloat(String(value ?? '0'))\n if (!Number.isFinite(n) || n <= 0) return null\n return String(n)\n}\n\nexport async function hyperliquidFetchActiveAssetData(args: {\n chainId: number\n user: string\n coin: string\n}): Promise<{ activeAsset: HyperliquidActiveAssetContext }> {\n const raw = await hyperliquidInfoPost<ActiveAssetDataResponse>(args.chainId, {\n type: 'activeAssetData',\n user: args.user,\n coin: args.coin.trim(),\n })\n const avail = raw.availableToTrade\n return {\n activeAsset: {\n markPx: raw.markPx?.trim() || null,\n leverageLabel: hyperliquidFmtLeverage(raw.leverage),\n availableToBuy: avail?.[0] != null ? hyperliquidPositiveSizeString(avail[0]) : null,\n availableToSell: avail?.[1] != null ? hyperliquidPositiveSizeString(avail[1]) : null,\n },\n }\n}\n\nexport type HyperliquidOpenOrder = {\n coin: string\n side: string\n limitPx: string\n sz: string\n oid: number\n timestamp: number\n reduceOnly?: boolean\n}\n\nexport type HyperliquidFrontendOpenOrder = HyperliquidOpenOrder & {\n origSz?: string\n triggerCondition?: string\n isTrigger?: boolean\n triggerPx?: string\n isPositionTpsl?: boolean\n}\n\nexport async function hyperliquidFetchOpenOrders(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ orders: HyperliquidOpenOrder[] }> {\n const req: Record<string, unknown> = { type: 'openOrders', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const orders = await hyperliquidInfoPost<HyperliquidOpenOrder[]>(args.chainId, req)\n return { orders: orders ?? [] }\n}\n\nexport async function hyperliquidFetchFrontendOpenOrders(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ orders: HyperliquidFrontendOpenOrder[] }> {\n const req: Record<string, unknown> = { type: 'frontendOpenOrders', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const orders = await hyperliquidInfoPost<HyperliquidFrontendOpenOrder[]>(args.chainId, req)\n return { orders: orders ?? [] }\n}\n\nexport type HyperliquidVaultEquity = {\n vaultAddress: string\n equity: string\n}\n\nexport async function hyperliquidFetchUserVaultEquities(args: {\n chainId: number\n user: string\n}): Promise<{ rows: HyperliquidVaultEquity[] }> {\n const rows = await hyperliquidInfoPost<HyperliquidVaultEquity[]>(args.chainId, {\n type: 'userVaultEquities',\n user: args.user,\n })\n return { rows: rows ?? [] }\n}\n\nexport type HyperliquidVaultSummary = {\n vaultAddress: string\n name: string\n /** Annualized return as decimal (0.12 = 12%). */\n apr: number | null\n tvlUsd: string | null\n}\n\ntype VaultStatsRow = {\n apr?: number\n summary?: {\n name?: string\n vaultAddress?: string\n tvl?: string\n isClosed?: boolean\n }\n}\n\ntype VaultDetailsResponse = {\n name?: string\n vaultAddress?: string\n apr?: number\n isClosed?: boolean\n}\n\nconst VAULT_CATALOG_MAX = 40\nconst VAULT_MIN_TVL_USD = 1_000\n\nfunction vaultSummaryFromStatsRow(row: VaultStatsRow): HyperliquidVaultSummary | null {\n const summary = row.summary\n if (!summary?.vaultAddress?.trim() || !summary.name?.trim() || summary.isClosed) return null\n const tvl = Number.parseFloat(summary.tvl ?? '')\n if (!Number.isFinite(tvl) || tvl < VAULT_MIN_TVL_USD) return null\n return {\n vaultAddress: summary.vaultAddress,\n name: summary.name.trim(),\n apr: typeof row.apr === 'number' && Number.isFinite(row.apr) ? row.apr : null,\n tvlUsd: summary.tvl ?? null,\n }\n}\n\nfunction sortVaultCatalog(vaults: HyperliquidVaultSummary[]): HyperliquidVaultSummary[] {\n const hlp = HYPERLIQUID_HLP_VAULT_ADDRESS.toLowerCase()\n return [...vaults].sort((a, b) => {\n const aHlp = a.vaultAddress.toLowerCase() === hlp\n const bHlp = b.vaultAddress.toLowerCase() === hlp\n if (aHlp && !bHlp) return -1\n if (bHlp && !aHlp) return 1\n return Number.parseFloat(b.tvlUsd ?? '0') - Number.parseFloat(a.tvlUsd ?? '0')\n })\n}\n\nasync function hyperliquidFetchVaultCatalogFromStats(chainId: number): Promise<HyperliquidVaultSummary[]> {\n const statsUrl = hyperliquidVaultStatsUrl(chainId)\n if (!statsUrl) return []\n\n const res = await fetch(statsUrl, { cache: 'no-store' })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Hyperliquid vault stats failed (${res.status}): ${text.slice(0, 200)}`)\n }\n const raw = (await res.json()) as VaultStatsRow[]\n const byAddr = new Map<string, HyperliquidVaultSummary>()\n for (const row of raw ?? []) {\n const vault = vaultSummaryFromStatsRow(row)\n if (!vault) continue\n byAddr.set(vault.vaultAddress.toLowerCase(), vault)\n }\n return sortVaultCatalog([...byAddr.values()]).slice(0, VAULT_CATALOG_MAX)\n}\n\nasync function hyperliquidFetchVaultDetails(args: {\n chainId: number\n vaultAddress: string\n}): Promise<HyperliquidVaultSummary | null> {\n const raw = await hyperliquidInfoPost<VaultDetailsResponse>(args.chainId, {\n type: 'vaultDetails',\n vaultAddress: args.vaultAddress,\n })\n if (!raw?.vaultAddress?.trim() || !raw.name?.trim() || raw.isClosed) return null\n return {\n vaultAddress: raw.vaultAddress,\n name: raw.name.trim(),\n apr: typeof raw.apr === 'number' && Number.isFinite(raw.apr) ? raw.apr : null,\n tvlUsd: null,\n }\n}\n\nexport async function hyperliquidFetchVaultSummaries(args: {\n chainId: number\n executorAddress?: string\n}): Promise<{ vaults: HyperliquidVaultSummary[] }> {\n const catalog = await hyperliquidFetchVaultCatalogFromStats(args.chainId)\n const byAddr = new Map(catalog.map((v) => [v.vaultAddress.toLowerCase(), v]))\n\n const executor = args.executorAddress?.trim().toLowerCase()\n if (executor) {\n const { rows } = await hyperliquidFetchUserVaultEquities({ chainId: args.chainId, user: executor })\n const missing = rows.filter((r) => r.vaultAddress && !byAddr.has(r.vaultAddress.toLowerCase()))\n const extras = await Promise.all(\n missing.map(async (r) => hyperliquidFetchVaultDetails({ chainId: args.chainId, vaultAddress: r.vaultAddress })),\n )\n for (const vault of extras) {\n if (vault) byAddr.set(vault.vaultAddress.toLowerCase(), vault)\n }\n }\n\n return { vaults: sortVaultCatalog([...byAddr.values()]) }\n}\n\nexport async function hyperliquidFetchDexList(args: {\n chainId: number\n}): Promise<{ dexes: HyperliquidPerpDex[] }> {\n const raw = await hyperliquidInfoPost<\n Array<{ name: string; fullName?: string } | string | null>\n >(args.chainId, {\n type: 'perpDexs',\n })\n if (!Array.isArray(raw)) return { dexes: [] }\n const dexes: HyperliquidPerpDex[] = []\n for (const entry of raw) {\n if (entry == null) continue\n if (typeof entry === 'string') {\n const name = entry.trim()\n if (name) dexes.push({ name, fullName: name })\n continue\n }\n const name = entry.name?.trim()\n if (!name) continue\n const fullName = entry.fullName?.trim() || name\n dexes.push({ name, fullName })\n }\n return { dexes }\n}\n\nexport type HyperliquidPerpConciseAnnotation = {\n category?: string\n displayName?: string\n keywords?: string[]\n}\n\n/** Bulk metadata for HIP-3 / annotated perps (display names, keywords like \"apple\" for AAPL). */\nexport async function hyperliquidFetchPerpConciseAnnotations(args: {\n chainId: number\n}): Promise<Map<string, HyperliquidPerpConciseAnnotation>> {\n const raw = await hyperliquidInfoPost<Array<[string, HyperliquidPerpConciseAnnotation]>>(args.chainId, {\n type: 'perpConciseAnnotations',\n })\n const map = new Map<string, HyperliquidPerpConciseAnnotation>()\n if (!Array.isArray(raw)) return map\n for (const entry of raw) {\n if (!Array.isArray(entry) || entry.length < 2) continue\n const coin = String(entry[0] ?? '').trim()\n const meta = entry[1]\n if (!coin || !meta || typeof meta !== 'object') continue\n map.set(coin, meta)\n }\n return map\n}\n\nexport async function hyperliquidFetchDelegations(args: {\n chainId: number\n user: string\n}): Promise<{ delegations: Array<{ validator: string; amount: string }> }> {\n const raw = await hyperliquidInfoPost<Array<{ validator: string; amount: string }>>(args.chainId, {\n type: 'delegations',\n user: args.user,\n })\n return { delegations: raw ?? [] }\n}\n\nexport async function hyperliquidFetchStakingSummary(args: {\n chainId: number\n user: string\n}): Promise<{ delegated: string; undelegated: string }> {\n const raw = await hyperliquidInfoPost<{ delegated: string; undelegated: string }>(args.chainId, {\n type: 'delegatorSummary',\n user: args.user,\n })\n return { delegated: raw?.delegated ?? '0', undelegated: raw?.undelegated ?? '0' }\n}\n","import {\n hyperliquidFetchDexList,\n hyperliquidFetchPerpConciseAnnotations,\n hyperliquidFetchPerpMeta,\n type HyperliquidPerpMarket,\n} from './api.js'\nimport { hyperliquidInferDexFromCoin } from './support.js'\n\nexport type HyperliquidPerpAnnotation = {\n category?: string\n displayName?: string\n keywords?: string[]\n}\n\nexport type HyperliquidMarketSearchHit = {\n coin: string\n symbol: string\n dex?: string\n asset: number\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n displayName?: string\n category?: string\n keywords?: string[]\n matchScore: number\n matchReason: string\n}\n\nfunction normalizeQuery(value: string): string {\n return value.trim().toLowerCase()\n}\n\nfunction compactCoin(value: string): string {\n return normalizeQuery(value).replace(/[^a-z0-9]/g, '')\n}\n\nexport function hyperliquidMarketSymbol(coin: string): string {\n const sep = coin.indexOf(':')\n return sep >= 0 ? coin.slice(sep + 1) : coin\n}\n\nfunction scoreMarketMatch(\n query: string,\n market: HyperliquidPerpMarket,\n annotation?: HyperliquidPerpAnnotation,\n): { score: number; reason: string } | null {\n const q = normalizeQuery(query)\n if (!q) return null\n\n const coin = market.name\n const symbol = hyperliquidMarketSymbol(coin)\n const coinLower = normalizeQuery(coin)\n const symbolLower = normalizeQuery(symbol)\n\n if (coinLower === q) return { score: 100, reason: 'exact coin name' }\n if (symbolLower === q) return { score: 95, reason: 'exact ticker symbol' }\n if (compactCoin(coin) === compactCoin(q)) return { score: 92, reason: 'coin name without separators' }\n\n if (annotation?.displayName) {\n const display = normalizeQuery(annotation.displayName)\n if (display === q) return { score: 94, reason: 'exact display name' }\n if (display.includes(q) || q.includes(display)) return { score: 72, reason: 'display name partial match' }\n }\n\n for (const keyword of annotation?.keywords ?? []) {\n const kw = normalizeQuery(keyword)\n if (!kw) continue\n if (kw === q) return { score: 88, reason: `keyword \"${keyword}\"` }\n if (kw.includes(q) || q.includes(kw)) return { score: 68, reason: `keyword partial \"${keyword}\"` }\n }\n\n if (symbolLower.includes(q) || q.includes(symbolLower)) {\n return { score: 78, reason: 'ticker partial match' }\n }\n\n if (!coin.includes(':') && coinLower.includes(q)) {\n return { score: 65, reason: 'native coin partial match' }\n }\n\n if (market.dex && normalizeQuery(market.dex) === q) {\n return { score: 40, reason: 'dex name match' }\n }\n\n return null\n}\n\nexport async function hyperliquidCollectNativePerpMarkets(args: {\n chainId: number\n}): Promise<{ markets: HyperliquidPerpMarket[]; dexes: Awaited<ReturnType<typeof hyperliquidFetchDexList>>['dexes'] }> {\n const [{ markets }, { dexes }] = await Promise.all([\n hyperliquidFetchPerpMeta({ chainId: args.chainId }),\n hyperliquidFetchDexList({ chainId: args.chainId }),\n ])\n return { markets, dexes }\n}\n\nexport async function hyperliquidCollectHip3StockMarkets(args: {\n chainId: number\n}): Promise<{\n markets: Array<HyperliquidPerpMarket & { displayName?: string; category?: string; keywords?: string[] }>\n dexes: Awaited<ReturnType<typeof hyperliquidFetchDexList>>['dexes']\n}> {\n const [{ dexes }, annotationMap] = await Promise.all([\n hyperliquidFetchDexList({ chainId: args.chainId }),\n hyperliquidFetchPerpConciseAnnotations({ chainId: args.chainId }),\n ])\n const hip3Batches = await Promise.all(\n dexes.map(async (d) => {\n const { markets: dexMarkets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: d.name })\n return dexMarkets.map((m) => {\n const annotation = annotationMap.get(m.name)\n return {\n ...m,\n dex: d.name,\n displayName: annotation?.displayName,\n category: annotation?.category,\n keywords: annotation?.keywords,\n }\n })\n }),\n )\n const markets = hip3Batches.flat()\n return { markets, dexes }\n}\n\nexport async function hyperliquidCollectAllPerpMarkets(args: {\n chainId: number\n dex?: string\n}): Promise<{ markets: HyperliquidPerpMarket[]; dexes: Awaited<ReturnType<typeof hyperliquidFetchDexList>>['dexes'] }> {\n const dexFilter = args.dex?.trim()\n const { dexes } = await hyperliquidFetchDexList({ chainId: args.chainId })\n\n if (dexFilter) {\n const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: dexFilter })\n return { markets: markets.map((m) => ({ ...m, dex: dexFilter })), dexes }\n }\n\n const { markets: nativeMarkets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId })\n const markets = [...nativeMarkets]\n const { markets: hip3 } = await hyperliquidCollectHip3StockMarkets({ chainId: args.chainId })\n markets.push(...hip3)\n return { markets, dexes }\n}\n\nexport async function hyperliquidSearchMarkets(args: {\n chainId: number\n query: string\n dex?: string\n limit?: number\n}): Promise<{ matches: HyperliquidMarketSearchHit[] }> {\n const query = args.query.trim()\n if (!query) return { matches: [] }\n\n const limit = Math.max(1, Math.min(args.limit ?? 20, 50))\n const [{ markets }, annotationMap] = await Promise.all([\n hyperliquidCollectAllPerpMarkets({ chainId: args.chainId, dex: args.dex?.trim() }),\n hyperliquidFetchPerpConciseAnnotations({ chainId: args.chainId }),\n ])\n\n const hits: HyperliquidMarketSearchHit[] = []\n for (const market of markets) {\n const annotation = annotationMap.get(market.name)\n const scored = scoreMarketMatch(query, market, annotation)\n if (!scored || scored.score < 40) continue\n hits.push({\n coin: market.name,\n symbol: hyperliquidMarketSymbol(market.name),\n dex: market.dex,\n asset: market.asset,\n szDecimals: market.szDecimals,\n maxLeverage: market.maxLeverage,\n onlyIsolated: market.onlyIsolated,\n displayName: annotation?.displayName,\n category: annotation?.category,\n keywords: annotation?.keywords,\n matchScore: scored.score,\n matchReason: scored.reason,\n })\n }\n\n hits.sort((a, b) => b.matchScore - a.matchScore || a.coin.localeCompare(b.coin))\n return { matches: hits.slice(0, limit) }\n}\n\n/** Resolve a user ticker/name to a single canonical Hyperliquid coin across all dexes. */\nexport async function hyperliquidResolvePerpMarket(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<HyperliquidPerpMarket & { symbol: string }> {\n const coin = args.coin.trim()\n if (!coin) throw new Error('coin is required')\n\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin)\n\n if (dex || !coin.includes(':')) {\n const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex })\n const direct = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase())\n if (direct) {\n return {\n ...direct,\n dex: dex || direct.dex,\n symbol: hyperliquidMarketSymbol(direct.name),\n }\n }\n }\n\n const { matches } = await hyperliquidSearchMarkets({ chainId: args.chainId, query: coin, dex: args.dex, limit: 10 })\n const bestScore = matches[0]?.matchScore ?? 0\n if (bestScore < 60) throw new Error(`Unknown Hyperliquid perp market: ${coin}`)\n\n const top = matches.filter((m) => m.matchScore === bestScore)\n if (top.length === 1) {\n const m = top[0]!\n return {\n name: m.coin,\n asset: m.asset,\n szDecimals: m.szDecimals,\n maxLeverage: m.maxLeverage,\n onlyIsolated: m.onlyIsolated,\n dex: m.dex,\n symbol: m.symbol,\n }\n }\n\n throw new Error(\n `Ambiguous Hyperliquid market for \"${coin}\": ${top.map((m) => m.coin).join(', ')}. Pass dex or full coin name (e.g. xyz:AAPL).`,\n )\n}\n","import { hyperliquidFetchSpotMeta } from './api.js'\nimport { hyperliquidResolvePerpMarket } from './marketSearch.js'\nimport { HYPERLIQUID_SPOT_ASSET_OFFSET } from './constants.js'\n\nexport async function hyperliquidResolvePerpAsset(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<{ asset: number; szDecimals: number; maxLeverage: number }> {\n const resolved = await hyperliquidResolvePerpMarket(args)\n return { asset: resolved.asset, szDecimals: resolved.szDecimals, maxLeverage: resolved.maxLeverage }\n}\n\nexport async function hyperliquidResolveSpotAsset(args: {\n chainId: number\n coin: string\n}): Promise<{ asset: number; szDecimals: number }> {\n const coin = args.coin.trim()\n const { markets } = await hyperliquidFetchSpotMeta({ chainId: args.chainId })\n const hit = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase())\n if (!hit) throw new Error(`Unknown Hyperliquid spot market: ${coin}`)\n return { asset: hit.asset, szDecimals: hit.szDecimals }\n}\n\nexport async function hyperliquidResolveAsset(args: {\n chainId: number\n coin: string\n marketKind: 'perp' | 'spot'\n dex?: string\n}): Promise<{ asset: number; szDecimals: number; maxLeverage?: number }> {\n if (args.marketKind === 'spot') {\n const r = await hyperliquidResolveSpotAsset({ chainId: args.chainId, coin: args.coin })\n return r\n }\n return hyperliquidResolvePerpAsset({ chainId: args.chainId, coin: args.coin, dex: args.dex })\n}\n\nexport function hyperliquidIsSpotAssetId(asset: number): boolean {\n return asset >= HYPERLIQUID_SPOT_ASSET_OFFSET\n}\n","import {\n hyperliquidFetchActiveAssetData,\n hyperliquidFetchClearinghouseState,\n hyperliquidFetchDelegations,\n hyperliquidFetchMarketSnapshot,\n hyperliquidFetchOhlcvRange,\n hyperliquidFetchOpenOrders,\n hyperliquidFetchSpotClearinghouseState,\n hyperliquidFetchStakingSummary,\n hyperliquidFetchUserVaultEquities,\n hyperliquidFetchVaultSummaries,\n type HyperliquidActiveAssetContext,\n type HyperliquidOhlcvInterval,\n} from './api.js'\nimport { HYPERLIQUID_HLP_VAULT_ADDRESS } from './support.js'\nimport {\n hyperliquidCollectAllPerpMarkets,\n hyperliquidCollectHip3StockMarkets,\n hyperliquidCollectNativePerpMarkets,\n hyperliquidResolvePerpMarket,\n hyperliquidSearchMarkets,\n} from './marketSearch.js'\n\nexport type HyperliquidUsdClassBalances = {\n spotUsdcAvailable: string\n perpWithdrawable: string\n}\n\nfunction hyperliquidUsdAmountString(value: string | undefined): string {\n const n = Number.parseFloat(String(value ?? '0'))\n if (!Number.isFinite(n) || n <= 0) return '0'\n return n.toFixed(6).replace(/\\.?0+$/, '') || '0'\n}\n\nfunction hyperliquidSpotUsdcAvailable(balances: Array<{ coin?: string; total?: string; hold?: string }>): string {\n const usdc = balances.find((b) => b.coin === 'USDC')\n if (!usdc) return '0'\n const total = Number.parseFloat(String(usdc.total ?? '0'))\n const hold = Number.parseFloat(String(usdc.hold ?? '0'))\n if (!Number.isFinite(total)) return '0'\n const avail = Math.max(0, total - (Number.isFinite(hold) ? hold : 0))\n return hyperliquidUsdAmountString(String(avail))\n}\n\nexport async function hyperliquidFetchUsdClassBalances(args: {\n chainId: number\n executorAddress: string\n}): Promise<{ balances: HyperliquidUsdClassBalances }> {\n const user = args.executorAddress.trim().toLowerCase()\n const [{ state: spotState }, { state: perpState }] = await Promise.all([\n hyperliquidFetchSpotClearinghouseState({ chainId: args.chainId, user }),\n hyperliquidFetchClearinghouseState({ chainId: args.chainId, user }),\n ])\n return {\n balances: {\n spotUsdcAvailable: hyperliquidSpotUsdcAvailable(spotState.balances ?? []),\n perpWithdrawable: hyperliquidUsdAmountString(perpState.withdrawable),\n },\n }\n}\n\nexport type HyperliquidPerpAccountSummary = {\n accountValueUsd: string | null\n totalMarginUsedUsd: string | null\n withdrawableUsd: string | null\n}\n\nexport type HyperliquidOpenMarketContext = {\n account: HyperliquidPerpAccountSummary\n activeAsset: HyperliquidActiveAssetContext\n}\n\nexport type HyperliquidPositionDisplayRow = {\n key: string\n coin: string\n isLong: boolean\n size: string | null\n entryPx: string | null\n positionValueUsd: string | null\n unrealizedPnlUsd: string | null\n liquidationPx: string | null\n leverageLabel: string | null\n maxLeverage: number | null\n marginUsedUsd: string | null\n returnOnEquity: string | null\n}\n\nfunction fmtLeverage(leverage?: { type?: string; value?: number }): string | null {\n if (leverage?.value == null) return null\n const t = leverage.type === 'isolated' ? 'iso' : 'cross'\n return `${leverage.value}x ${t}`\n}\n\nfunction mapPositionRow(p: {\n coin?: string\n szi?: string\n entryPx?: string\n positionValue?: string\n unrealizedPnl?: string\n liquidationPx?: string | null\n leverage?: { type?: string; value?: number }\n maxLeverage?: number\n marginUsed?: string\n returnOnEquity?: string\n}): HyperliquidPositionDisplayRow | null {\n if (!p.coin) return null\n const szi = Number.parseFloat(String(p.szi ?? '0'))\n if (!Number.isFinite(szi) || szi === 0) return null\n return {\n key: `${p.coin}:${szi > 0 ? 'long' : 'short'}`,\n coin: p.coin,\n isLong: szi > 0,\n size: String(Math.abs(szi)),\n entryPx: p.entryPx ?? null,\n positionValueUsd: p.positionValue ?? null,\n unrealizedPnlUsd: p.unrealizedPnl ?? null,\n liquidationPx: p.liquidationPx ?? null,\n leverageLabel: fmtLeverage(p.leverage),\n maxLeverage: typeof p.maxLeverage === 'number' && Number.isFinite(p.maxLeverage) ? p.maxLeverage : null,\n marginUsedUsd: p.marginUsed ?? null,\n returnOnEquity: p.returnOnEquity ?? null,\n }\n}\n\nexport async function hyperliquidFetchOpenMarketContext(args: {\n chainId: number\n executorAddress: string\n coin: string\n dex?: string\n}): Promise<{ context: HyperliquidOpenMarketContext }> {\n const user = args.executorAddress.trim().toLowerCase()\n const resolved = await hyperliquidResolvePerpMarket({\n chainId: args.chainId,\n coin: args.coin,\n dex: args.dex,\n })\n const coin = resolved.name\n const dex = args.dex?.trim() || resolved.dex\n const [{ activeAsset }, { state }] = await Promise.all([\n hyperliquidFetchActiveAssetData({ chainId: args.chainId, user, coin }),\n hyperliquidFetchClearinghouseState({ chainId: args.chainId, user, dex }),\n ])\n return {\n context: {\n activeAsset,\n account: {\n accountValueUsd: state.marginSummary?.accountValue ?? null,\n totalMarginUsedUsd: state.marginSummary?.totalMarginUsed ?? null,\n withdrawableUsd: state.withdrawable ?? null,\n },\n },\n }\n}\n\nexport async function hyperliquidFetchPositionDisplayRows(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}): Promise<{ rows: HyperliquidPositionDisplayRow[] }> {\n const user = args.executorAddress.trim().toLowerCase()\n const { state } = await hyperliquidFetchClearinghouseState({\n chainId: args.chainId,\n user,\n dex: args.dex,\n })\n const rows: HyperliquidPositionDisplayRow[] = []\n for (const ap of state.assetPositions ?? []) {\n const row = mapPositionRow(ap.position ?? {})\n if (row) rows.push(row)\n }\n return { rows }\n}\n\nexport async function hyperliquidFetchOrdersForExecutor(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n return hyperliquidFetchOpenOrders({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n dex: args.dex,\n })\n}\n\n/** MCP: native crypto perp markets only. Pass `dex` to list one HIP-3 builder. Stocks: `ctm_hyperliquid_fetch_stock_markets`. */\nexport async function hyperliquidFetchMarketsSummary(args: { chainId: number; dex?: string }) {\n const dex = args.dex?.trim()\n if (dex) {\n const { markets, dexes } = await hyperliquidCollectAllPerpMarkets({\n chainId: args.chainId,\n dex,\n })\n return { markets, dexes }\n }\n const { markets, dexes } = await hyperliquidCollectNativePerpMarkets({ chainId: args.chainId })\n return { markets, dexes }\n}\n\n/** MCP: HIP-3 / equity stock perps (xyz:AAPL, …). Native crypto is `ctm_hyperliquid_fetch_markets`. */\nexport async function hyperliquidFetchStockMarketsSummary(args: { chainId: number }) {\n return hyperliquidCollectHip3StockMarkets({ chainId: args.chainId })\n}\n\n/** MCP: search markets across all dexes by ticker or name (case-insensitive). */\nexport async function hyperliquidSearchMarketsSummary(args: {\n chainId: number\n query: string\n dex?: string\n limit?: number\n}) {\n return hyperliquidSearchMarkets(args)\n}\n\n/** MCP: open positions for executor. */\nexport async function hyperliquidFetchPositionsForExecutor(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n const { rows } = await hyperliquidFetchPositionDisplayRows(args)\n return { positions: rows }\n}\n\n/** MCP: open orders for executor. */\nexport async function hyperliquidFetchOpenOrdersSummary(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n const { orders } = await hyperliquidFetchOrdersForExecutor(args)\n return { orders }\n}\n\n/** MCP: trading context for a market (account + activeAssetData). */\nexport async function hyperliquidFetchOpenContextSummary(args: {\n chainId: number\n executorAddress: string\n coin: string\n dex?: string\n}) {\n const { context } = await hyperliquidFetchOpenMarketContext(args)\n return { context }\n}\n\n/** MCP: spot vs perp USD balances. */\nexport async function hyperliquidFetchUsdClassBalancesSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const { balances } = await hyperliquidFetchUsdClassBalances(args)\n return { balances }\n}\n\n/** MCP: vault catalog (may be slow on mainnet — large stats payload). */\nexport async function hyperliquidFetchVaultCatalogSummary(args: {\n chainId: number\n executorAddress?: string\n}) {\n const { vaults } = await hyperliquidFetchVaultSummaries({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n })\n return { vaults }\n}\n\n/** MCP: same vault catalog sorted APR descending (HLP first). Use for idle-USDC yield compare. */\nexport async function hyperliquidFetchVaultApysSummary(args: {\n chainId: number\n executorAddress?: string\n}) {\n const { vaults } = await hyperliquidFetchVaultSummaries({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n })\n const hlp = HYPERLIQUID_HLP_VAULT_ADDRESS.toLowerCase()\n const sorted = [...vaults].sort((a, b) => {\n const aHlp = a.vaultAddress.toLowerCase() === hlp\n const bHlp = b.vaultAddress.toLowerCase() === hlp\n if (aHlp && !bHlp) return -1\n if (bHlp && !aHlp) return 1\n return (b.apr ?? -1) - (a.apr ?? -1)\n })\n return {\n vaults: sorted,\n notes:\n 'Hyperliquid vault APR from official stats, sorted APR descending (HLP first). This is a vault return, not HIP-3 stock trading. Do not web-search vault APRs.',\n }\n}\n\n/** MCP: user vault equity rows. */\nexport async function hyperliquidFetchUserVaultEquitiesSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const { rows } = await hyperliquidFetchUserVaultEquities({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { rows }\n}\n\n/** MCP: HYPE staking summary. */\nexport async function hyperliquidFetchStakingSummaryForExecutor(args: {\n chainId: number\n executorAddress: string\n}) {\n const summary = await hyperliquidFetchStakingSummary({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { summary }\n}\n\n/** MCP: HYPE delegations. */\nexport async function hyperliquidFetchDelegationsForExecutor(args: {\n chainId: number\n executorAddress: string\n}) {\n const { delegations } = await hyperliquidFetchDelegations({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { delegations }\n}\n\n/** MCP: mid price + OHLCV candles. */\nexport async function hyperliquidFetchMarketSnapshotSummary(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n candleLimit?: number\n}) {\n const resolved = await hyperliquidResolvePerpMarket({\n chainId: args.chainId,\n coin: args.coin,\n dex: args.dex,\n })\n const snapshot = await hyperliquidFetchMarketSnapshot({\n chainId: args.chainId,\n coin: resolved.name,\n interval: args.interval,\n dex: args.dex?.trim() || resolved.dex,\n candleLimit: args.candleLimit,\n })\n return { snapshot, resolvedCoin: resolved.name, dex: resolved.dex ?? null }\n}\n\n/** MCP: OHLCV history for an explicit lookback or time range. */\nexport async function hyperliquidFetchOhlcvSummary(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}) {\n const resolved = await hyperliquidResolvePerpMarket({\n chainId: args.chainId,\n coin: args.coin,\n dex: args.dex,\n })\n const ohlcv = await hyperliquidFetchOhlcvRange({\n chainId: args.chainId,\n coin: resolved.name,\n interval: args.interval,\n dex: args.dex?.trim() || resolved.dex,\n lookbackDays: args.lookbackDays,\n lookbackHours: args.lookbackHours,\n startTimeMs: args.startTimeMs,\n endTimeMs: args.endTimeMs,\n })\n return { ohlcv, resolvedCoin: resolved.name, dex: resolved.dex ?? null }\n}\n","import { encodeAbiParameters, encodeFunctionData, parseAbi, type Hex } from 'viem'\nimport {\n HYPERLIQUID_CORE_WRITER_ADDRESS,\n HYPERLIQUID_TIF,\n type HyperliquidTifKey,\n} from './constants.js'\n\nconst coreWriterAbi = parseAbi(['function sendRawAction(bytes data) external'])\n\nconst ACTION_LIMIT_ORDER = 1\nconst ACTION_VAULT_TRANSFER = 2\nconst ACTION_TOKEN_DELEGATE = 3\nconst ACTION_STAKING_DEPOSIT = 4\nconst ACTION_STAKING_WITHDRAW = 5\nconst ACTION_USD_CLASS_TRANSFER = 7\nconst ACTION_CANCEL_BY_OID = 10\nconst ACTION_CANCEL_BY_CLOID = 11\n\nfunction encodeActionHeader(actionId: number): Hex {\n const idHex = actionId.toString(16).padStart(6, '0')\n return `0x01${idHex}` as Hex\n}\n\nfunction encodeCoreWriterCalldata(actionId: number, paramsEncoded: Hex): Hex {\n const header = encodeActionHeader(actionId).slice(2)\n const params = paramsEncoded.startsWith('0x') ? paramsEncoded.slice(2) : paramsEncoded\n const actionBytes = `0x${header}${params}` as Hex\n return encodeFunctionData({\n abi: coreWriterAbi,\n functionName: 'sendRawAction',\n args: [actionBytes],\n })\n}\n\n/** Hyperliquid CoreWriter uses 1e8 fixed-point for prices and sizes. */\nexport function hyperliquidEncodePx8(human: string | number): bigint {\n const n = typeof human === 'number' ? human : Number.parseFloat(String(human).trim())\n if (!Number.isFinite(n) || n < 0) throw new Error('Invalid price or size for Hyperliquid encoding.')\n return BigInt(Math.round(n * 1e8))\n}\n\n/** USD notional amounts on HyperCore typically use 6 decimals. */\nexport function hyperliquidEncodeUsd6(human: string | number): bigint {\n const n = typeof human === 'number' ? human : Number.parseFloat(String(human).trim())\n if (!Number.isFinite(n) || n < 0) throw new Error('Invalid USD amount for Hyperliquid encoding.')\n return BigInt(Math.round(n * 1e6))\n}\n\n/** HYPE / token wei on L1 actions (uint64). */\nexport function hyperliquidEncodeWei8(human: string | number): bigint {\n return hyperliquidEncodePx8(human)\n}\n\nexport function hyperliquidResolveTif(tif: HyperliquidTifKey | string): number {\n const key = String(tif).trim().toLowerCase() as HyperliquidTifKey\n const v = HYPERLIQUID_TIF[key]\n if (v == null) throw new Error(`Unknown time-in-force: ${tif}. Use alo, gtc, or ioc.`)\n return v\n}\n\nexport function buildCoreWriterLimitOrderCalldata(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: HyperliquidTifKey\n cloid?: bigint\n}): Hex {\n const params = encodeAbiParameters(\n [\n { type: 'uint32' },\n { type: 'bool' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'bool' },\n { type: 'uint8' },\n { type: 'uint128' },\n ],\n [\n args.asset,\n args.isBuy,\n hyperliquidEncodePx8(args.limitPxHuman),\n hyperliquidEncodePx8(args.szHuman),\n Boolean(args.reduceOnly),\n hyperliquidResolveTif(args.tif ?? 'gtc'),\n args.cloid ?? 0n,\n ],\n )\n return encodeCoreWriterCalldata(ACTION_LIMIT_ORDER, params)\n}\n\nexport function buildCoreWriterCancelByOidCalldata(args: { asset: number; oid: bigint | number }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint32' }, { type: 'uint64' }],\n [args.asset, BigInt(args.oid)],\n )\n return encodeCoreWriterCalldata(ACTION_CANCEL_BY_OID, params)\n}\n\nexport function buildCoreWriterCancelByCloidCalldata(args: { asset: number; cloid: bigint }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint32' }, { type: 'uint128' }],\n [args.asset, args.cloid],\n )\n return encodeCoreWriterCalldata(ACTION_CANCEL_BY_CLOID, params)\n}\n\nexport function buildCoreWriterUsdClassTransferCalldata(args: { usdHuman: string; toPerp: boolean }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint64' }, { type: 'bool' }],\n [hyperliquidEncodeUsd6(args.usdHuman), args.toPerp],\n )\n return encodeCoreWriterCalldata(ACTION_USD_CLASS_TRANSFER, params)\n}\n\nexport function buildCoreWriterVaultTransferCalldata(args: {\n vault: `0x${string}`\n isDeposit: boolean\n usdHuman: string\n}): Hex {\n const params = encodeAbiParameters(\n [{ type: 'address' }, { type: 'bool' }, { type: 'uint64' }],\n [args.vault, args.isDeposit, hyperliquidEncodeUsd6(args.usdHuman)],\n )\n return encodeCoreWriterCalldata(ACTION_VAULT_TRANSFER, params)\n}\n\nexport function buildCoreWriterStakingDepositCalldata(args: { hypeHuman: string }): Hex {\n const params = encodeAbiParameters([{ type: 'uint64' }], [hyperliquidEncodeWei8(args.hypeHuman)])\n return encodeCoreWriterCalldata(ACTION_STAKING_DEPOSIT, params)\n}\n\nexport function buildCoreWriterStakingWithdrawCalldata(args: { hypeHuman: string }): Hex {\n const params = encodeAbiParameters([{ type: 'uint64' }], [hyperliquidEncodeWei8(args.hypeHuman)])\n return encodeCoreWriterCalldata(ACTION_STAKING_WITHDRAW, params)\n}\n\nexport function buildCoreWriterTokenDelegateCalldata(args: {\n validator: `0x${string}`\n hypeHuman: string\n isUndelegate: boolean\n}): Hex {\n const params = encodeAbiParameters(\n [{ type: 'address' }, { type: 'uint64' }, { type: 'bool' }],\n [args.validator, hyperliquidEncodeWei8(args.hypeHuman), args.isUndelegate],\n )\n return encodeCoreWriterCalldata(ACTION_TOKEN_DELEGATE, params)\n}\n\nexport function coreWriterStep(data: Hex) {\n return {\n to: HYPERLIQUID_CORE_WRITER_ADDRESS as `0x${string}`,\n data,\n value: 0n,\n }\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { encode as encodeMsgpack } from '@msgpack/msgpack'\nimport { keccak256, type Hex } from 'viem'\n\nexport type HyperliquidL1Action = Record<string, unknown>\n\nconst EXCHANGE_DOMAIN = {\n name: 'Exchange',\n version: '1',\n chainId: 1337,\n verifyingContract: '0x0000000000000000000000000000000000000000',\n} as const\n\nconst AGENT_TYPES = {\n Agent: [\n { name: 'source', type: 'string' },\n { name: 'connectionId', type: 'bytes32' },\n ],\n} as const\n\n/**\n * Normalize values for Hyperliquid wire msgpack (matches @nktkas/hyperliquid signing).\n */\nfunction adjustMsgpackValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(adjustMsgpackValue)\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(value)) {\n const entry = (value as Record<string, unknown>)[key]\n if (entry !== undefined) result[key] = adjustMsgpackValue(entry)\n }\n return result\n }\n if (typeof value === 'number' && Number.isInteger(value) && (value >= 0x100000000 || value < -0x80000000)) {\n return BigInt(value)\n }\n return value\n}\n\nfunction toUint64Bytes(n: number): Uint8Array {\n const bytes = new Uint8Array(8)\n new DataView(bytes.buffer).setBigUint64(0, BigInt(n))\n return bytes\n}\n\nfunction concatBytes(...parts: Uint8Array[]): Uint8Array {\n const total = parts.reduce((sum, p) => sum + p.length, 0)\n const out = new Uint8Array(total)\n let offset = 0\n for (const p of parts) {\n out.set(p, offset)\n offset += p.length\n }\n return out\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const h = hex.startsWith('0x') ? hex.slice(2) : hex\n const bytes = new Uint8Array(h.length / 2)\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16)\n }\n return bytes\n}\n\nexport function createHyperliquidL1ActionHash(args: {\n action: HyperliquidL1Action\n nonce: number\n vaultAddress?: Hex\n expiresAfter?: number\n}): Hex {\n const { action, nonce, vaultAddress, expiresAfter } = args\n const actionBytes = encodeMsgpack(adjustMsgpackValue(action))\n const nonceBytes = toUint64Bytes(nonce)\n const vaultMarker = vaultAddress ? new Uint8Array([1]) : new Uint8Array([0])\n const vaultBytes = vaultAddress ? hexToBytes(vaultAddress) : new Uint8Array()\n const expiresMarker = expiresAfter !== undefined ? new Uint8Array([0]) : new Uint8Array()\n const expiresBytes = expiresAfter !== undefined ? toUint64Bytes(expiresAfter) : new Uint8Array()\n const bytes = concatBytes(actionBytes, nonceBytes, vaultMarker, vaultBytes, expiresMarker, expiresBytes)\n return keccak256(bytes)\n}\n\nexport function buildHyperliquidAgentTypedData(args: {\n action: HyperliquidL1Action\n nonce: number\n isTestnet?: boolean\n vaultAddress?: Hex\n expiresAfter?: number\n}) {\n const connectionId = createHyperliquidL1ActionHash(args)\n const source = args.isTestnet ? 'b' : 'a'\n return {\n domain: EXCHANGE_DOMAIN,\n types: AGENT_TYPES,\n primaryType: 'Agent' as const,\n message: {\n source,\n connectionId,\n },\n connectionId,\n nonce: args.nonce,\n action: args.action,\n }\n}\n\nexport type HyperliquidUpdateLeverageAction = {\n type: 'updateLeverage'\n asset: number\n isCross: boolean\n leverage: number\n}\n\nexport function buildHyperliquidUpdateLeverageAction(args: {\n asset: number\n leverage: number\n isCross?: boolean\n}): HyperliquidUpdateLeverageAction {\n const leverage = Math.trunc(args.leverage)\n if (!Number.isFinite(leverage) || leverage < 1) {\n throw new Error('leverage must be a positive integer')\n }\n return {\n type: 'updateLeverage',\n asset: args.asset,\n isCross: args.isCross !== false,\n leverage,\n }\n}\n\nexport type HyperliquidL1Tif = 'Alo' | 'Gtc' | 'Ioc'\nexport type HyperliquidTpslExecMode = 'limit_at_trigger' | 'market'\nexport type HyperliquidOrderGrouping = 'na' | 'normalTpsl' | 'positionTpsl'\n\nexport type HyperliquidOrderWire = {\n a: number\n b: boolean\n p: string\n s: string\n r: boolean\n t: { limit: { tif: HyperliquidL1Tif } } | { trigger: { isMarket: boolean; triggerPx: string; tpsl: 'tp' | 'sl' } }\n c?: string\n}\n\nexport type HyperliquidOrderAction = {\n type: 'order'\n orders: HyperliquidOrderWire[]\n grouping: HyperliquidOrderGrouping\n}\n\n/** Wire-format decimal string for L1 order prices/sizes (matches Python float_to_wire). */\nexport function hyperliquidFloatToWire(value: string | number): string {\n const n = typeof value === 'number' ? value : Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n)) throw new Error('Invalid Hyperliquid wire number.')\n const rounded = n.toFixed(8)\n if (Math.abs(Number.parseFloat(rounded) - n) >= 1e-12) {\n throw new Error(`Hyperliquid wire value ${value} has too many decimal places.`)\n }\n const normalized = Number(rounded === '-0' ? '0' : rounded)\n return String(normalized)\n}\n\nexport function hyperliquidL1TifFromKey(tif: string | undefined): HyperliquidL1Tif {\n const key = String(tif ?? 'gtc').trim().toLowerCase()\n if (key === 'alo') return 'Alo'\n if (key === 'ioc') return 'Ioc'\n if (key === 'gtc') return 'Gtc'\n throw new Error(`Unknown time-in-force: ${tif}. Use alo, gtc, or ioc.`)\n}\n\nexport function buildHyperliquidLimitOrderWire(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: string\n}): HyperliquidOrderWire {\n return {\n a: args.asset,\n b: args.isBuy,\n p: hyperliquidFloatToWire(args.limitPxHuman),\n s: hyperliquidFloatToWire(args.szHuman),\n r: Boolean(args.reduceOnly),\n t: { limit: { tif: hyperliquidL1TifFromKey(args.tif) } },\n }\n}\n\nexport function buildHyperliquidTriggerOrderWire(args: {\n asset: number\n isBuy: boolean\n szHuman: string\n triggerPxHuman: string\n tpsl: 'tp' | 'sl'\n tpslExecMode?: HyperliquidTpslExecMode\n /** Limit px after trigger; defaults to trigger px for limit_at_trigger. */\n limitPxHuman?: string\n}): HyperliquidOrderWire {\n const mode = args.tpslExecMode ?? 'limit_at_trigger'\n const triggerPx = hyperliquidFloatToWire(args.triggerPxHuman)\n const limitPx =\n mode === 'market'\n ? triggerPx\n : hyperliquidFloatToWire(args.limitPxHuman ?? args.triggerPxHuman)\n return {\n a: args.asset,\n b: args.isBuy,\n p: limitPx,\n s: hyperliquidFloatToWire(args.szHuman),\n r: true,\n t: {\n trigger: {\n isMarket: mode === 'market',\n triggerPx,\n tpsl: args.tpsl,\n },\n },\n }\n}\n\nexport function validateHyperliquidTpslGeometry(args: {\n isBuy: boolean\n entryPxHuman: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n}): void {\n const entry = Number.parseFloat(String(args.entryPxHuman).trim())\n const tp =\n args.takeProfitTriggerPxHuman?.trim() != null && args.takeProfitTriggerPxHuman.trim() !== ''\n ? Number.parseFloat(args.takeProfitTriggerPxHuman.trim())\n : null\n const sl =\n args.stopLossTriggerPxHuman?.trim() != null && args.stopLossTriggerPxHuman.trim() !== ''\n ? Number.parseFloat(args.stopLossTriggerPxHuman.trim())\n : null\n if (!Number.isFinite(entry)) throw new Error('Invalid entry limit price for TP/SL validation.')\n if (tp != null && !Number.isFinite(tp)) throw new Error('Invalid take-profit trigger price.')\n if (sl != null && !Number.isFinite(sl)) throw new Error('Invalid stop-loss trigger price.')\n if (args.isBuy) {\n if (sl != null && sl >= entry) {\n throw new Error('Long stop-loss must be below entry price.')\n }\n if (tp != null && tp <= entry) {\n throw new Error('Long take-profit must be above entry price.')\n }\n } else {\n if (sl != null && sl <= entry) {\n throw new Error('Short stop-loss must be above entry price.')\n }\n if (tp != null && tp >= entry) {\n throw new Error('Short take-profit must be below entry price.')\n }\n }\n}\n\nexport function buildHyperliquidNormalTpslOrderWires(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}): HyperliquidOrderWire[] {\n validateHyperliquidTpslGeometry({\n isBuy: args.isBuy,\n entryPxHuman: args.limitPxHuman,\n takeProfitTriggerPxHuman: args.takeProfitTriggerPxHuman,\n stopLossTriggerPxHuman: args.stopLossTriggerPxHuman,\n })\n const orders: HyperliquidOrderWire[] = [\n buildHyperliquidLimitOrderWire({\n asset: args.asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n }),\n ]\n const closeIsBuy = !args.isBuy\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (tp) {\n orders.push(\n buildHyperliquidTriggerOrderWire({\n asset: args.asset,\n isBuy: closeIsBuy,\n szHuman: args.szHuman,\n triggerPxHuman: tp,\n tpsl: 'tp',\n tpslExecMode: args.tpslExecMode,\n }),\n )\n }\n if (sl) {\n orders.push(\n buildHyperliquidTriggerOrderWire({\n asset: args.asset,\n isBuy: closeIsBuy,\n szHuman: args.szHuman,\n triggerPxHuman: sl,\n tpsl: 'sl',\n tpslExecMode: args.tpslExecMode,\n }),\n )\n }\n return orders\n}\n\nexport function buildHyperliquidOrderAction(args: {\n orders: HyperliquidOrderWire[]\n grouping?: HyperliquidOrderGrouping\n}): HyperliquidOrderAction {\n return {\n type: 'order',\n orders: args.orders,\n grouping: args.grouping ?? 'na',\n }\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport { hyperliquidResolveAsset } from './assets.js'\nimport {\n buildHyperliquidAgentTypedData,\n buildHyperliquidNormalTpslOrderWires,\n buildHyperliquidOrderAction,\n buildHyperliquidUpdateLeverageAction,\n type HyperliquidTpslExecMode,\n} from './l1Signing.js'\nimport type { HyperliquidTifKey } from './constants.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\ntype HyperliquidExchangeMultisignCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n /** Defaults to Date.now() at build time. */\n nonce?: number\n}\n\nexport type HyperliquidUpdateLeverageMultisignArgs = HyperliquidExchangeMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n dex?: string\n leverage: number\n isCross?: boolean\n}\n\nexport type HyperliquidLimitOrderWithTpslMultisignArgs = HyperliquidExchangeMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n dex?: string\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: HyperliquidTifKey\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}\n\nexport async function buildHyperliquidLimitOrderWithTpslMultisign(\n args: HyperliquidLimitOrderWithTpslMultisignArgs,\n) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (!tp && !sl) {\n throw new Error('At least one of takeProfitTriggerPxHuman or stopLossTriggerPxHuman is required for bracket orders.')\n }\n const orderWires = buildHyperliquidNormalTpslOrderWires({\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n takeProfitTriggerPxHuman: tp || undefined,\n stopLossTriggerPxHuman: sl || undefined,\n tpslExecMode: args.tpslExecMode,\n })\n const action = buildHyperliquidOrderAction({\n orders: orderWires,\n grouping: 'normalTpsl',\n })\n const nonce = args.nonce ?? Date.now()\n const isTestnet = args.chainId === 998\n const typed = buildHyperliquidAgentTypedData({ action, nonce, isTestnet })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types: typed.types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'limitOrderWithTpsl',\n coin: args.coin,\n marketKind,\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n takeProfitTriggerPxHuman: tp ?? null,\n stopLossTriggerPxHuman: sl ?? null,\n tpslExecMode: args.tpslExecMode ?? 'limit_at_trigger',\n grouping: 'normalTpsl',\n nonce,\n connectionId: typed.connectionId,\n },\n },\n ],\n })\n}\n\nexport async function buildHyperliquidUpdateLeverageMultisign(args: HyperliquidUpdateLeverageMultisignArgs) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const action = buildHyperliquidUpdateLeverageAction({\n asset,\n leverage: args.leverage,\n isCross: args.isCross,\n })\n const nonce = args.nonce ?? Date.now()\n const isTestnet = args.chainId === 998\n const typed = buildHyperliquidAgentTypedData({ action, nonce, isTestnet })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types: typed.types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'updateLeverage',\n coin: args.coin,\n marketKind,\n asset,\n leverage: action.leverage,\n isCross: action.isCross,\n nonce,\n connectionId: typed.connectionId,\n },\n },\n ],\n })\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { hyperliquidResolveAsset } from './assets.js'\nimport {\n buildCoreWriterCancelByOidCalldata,\n buildCoreWriterLimitOrderCalldata,\n buildCoreWriterUsdClassTransferCalldata,\n coreWriterStep,\n} from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\nimport type { HyperliquidTifKey } from './constants.js'\nimport { buildHyperliquidLimitOrderWithTpslMultisign } from './exchangeMultisign.js'\nimport type { HyperliquidTpslExecMode } from './l1Signing.js'\n\ntype HyperliquidMultisignCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}\n\nexport type HyperliquidLimitOrderArgs = HyperliquidMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: HyperliquidTifKey\n dex?: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}\n\nfunction hasHyperliquidBracketTpsl(args: Pick<\n HyperliquidLimitOrderArgs,\n 'takeProfitTriggerPxHuman' | 'stopLossTriggerPxHuman'\n>): boolean {\n return Boolean(args.takeProfitTriggerPxHuman?.trim() || args.stopLossTriggerPxHuman?.trim())\n}\n\nexport type HyperliquidCancelOrderArgs = HyperliquidMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n oid: number\n dex?: string\n}\n\nexport type HyperliquidUsdClassTransferArgs = HyperliquidMultisignCommon & {\n usdHuman: string\n toPerp: boolean\n}\n\nasync function buildCoreWriterMultisign(\n common: HyperliquidMultisignCommon,\n data: `0x${string}`,\n signatureMeta: Record<string, unknown>,\n) {\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n ...signatureMeta,\n evm: { type: 'hyperliquid_core_writer', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidLimitOrderBatch(args: HyperliquidLimitOrderArgs) {\n if (hasHyperliquidBracketTpsl(args)) {\n if (args.reduceOnly) {\n throw new Error('reduceOnly cannot be combined with takeProfitTriggerPxHuman or stopLossTriggerPxHuman.')\n }\n return buildHyperliquidLimitOrderWithTpslMultisign({\n keyGen: args.keyGen,\n chainId: args.chainId,\n purposeText: args.purposeText,\n coin: args.coin,\n marketKind: args.marketKind,\n dex: args.dex,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n takeProfitTriggerPxHuman: args.takeProfitTriggerPxHuman,\n stopLossTriggerPxHuman: args.stopLossTriggerPxHuman,\n tpslExecMode: args.tpslExecMode,\n })\n }\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const data = buildCoreWriterLimitOrderCalldata({\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n reduceOnly: args.reduceOnly,\n tif: args.tif,\n })\n return buildCoreWriterMultisign(args, data, {\n action: 'limitOrder',\n coin: args.coin,\n marketKind,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n reduceOnly: Boolean(args.reduceOnly),\n tif: args.tif ?? 'gtc',\n asset,\n })\n}\n\nexport type HyperliquidCloseOrderArgs = Omit<HyperliquidLimitOrderArgs, 'isBuy' | 'reduceOnly' | 'marketKind'> & {\n isLong: boolean\n}\n\n/** IoC reduce-only close — inverts side from position direction. */\nexport async function buildEvmMultisignBodyHyperliquidCloseBatch(args: HyperliquidCloseOrderArgs) {\n return buildEvmMultisignBodyHyperliquidLimitOrderBatch({\n ...args,\n marketKind: 'perp',\n isBuy: !args.isLong,\n reduceOnly: true,\n tif: args.tif ?? 'ioc',\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidCancelBatch(args: HyperliquidCancelOrderArgs) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const data = buildCoreWriterCancelByOidCalldata({ asset, oid: args.oid })\n return buildCoreWriterMultisign(args, data, {\n action: 'cancelOrder',\n coin: args.coin,\n marketKind,\n oid: args.oid,\n asset,\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidUsdClassTransferBatch(\n args: HyperliquidUsdClassTransferArgs,\n) {\n const data = buildCoreWriterUsdClassTransferCalldata({\n usdHuman: args.usdHuman,\n toPerp: args.toPerp,\n })\n return buildCoreWriterMultisign(args, data, {\n action: 'usdClassTransfer',\n usdHuman: args.usdHuman,\n toPerp: args.toPerp,\n })\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildCoreWriterVaultTransferCalldata, coreWriterStep } from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\n\ntype HyperliquidVaultCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n vaultAddress: `0x${string}`\n usdHuman: string\n}\n\nexport type HyperliquidVaultDepositArgs = HyperliquidVaultCommon\nexport type HyperliquidVaultWithdrawArgs = HyperliquidVaultCommon\n\nasync function buildVaultMultisign(\n common: HyperliquidVaultCommon,\n isDeposit: boolean,\n) {\n const vault = getAddress(common.vaultAddress)\n const data = buildCoreWriterVaultTransferCalldata({\n vault,\n isDeposit,\n usdHuman: common.usdHuman,\n })\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action: isDeposit ? 'vaultDeposit' : 'vaultWithdraw',\n vault,\n usdHuman: common.usdHuman,\n evm: { type: 'hyperliquid_vault', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidVaultDepositBatch(args: HyperliquidVaultDepositArgs) {\n return buildVaultMultisign(args, true)\n}\n\nexport async function buildEvmMultisignBodyHyperliquidVaultWithdrawBatch(args: HyperliquidVaultWithdrawArgs) {\n return buildVaultMultisign(args, false)\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport {\n buildCoreWriterStakingDepositCalldata,\n buildCoreWriterStakingWithdrawCalldata,\n buildCoreWriterTokenDelegateCalldata,\n coreWriterStep,\n} from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\n\ntype HyperliquidStakingCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n hypeHuman: string\n}\n\nasync function buildStakingMultisign(\n common: HyperliquidStakingCommon,\n data: `0x${string}`,\n action: string,\n extra: Record<string, unknown> = {},\n) {\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action,\n hypeHuman: common.hypeHuman,\n ...extra,\n evm: { type: 'hyperliquid_staking', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidStakeDepositBatch(args: HyperliquidStakingCommon) {\n const data = buildCoreWriterStakingDepositCalldata({ hypeHuman: args.hypeHuman })\n return buildStakingMultisign(args, data, 'stakingDeposit')\n}\n\nexport async function buildEvmMultisignBodyHyperliquidStakeWithdrawBatch(args: HyperliquidStakingCommon) {\n const data = buildCoreWriterStakingWithdrawCalldata({ hypeHuman: args.hypeHuman })\n return buildStakingMultisign(args, data, 'stakingWithdraw')\n}\n\nexport type HyperliquidDelegateArgs = HyperliquidStakingCommon & {\n validator: `0x${string}`\n isUndelegate: boolean\n}\n\nexport async function buildEvmMultisignBodyHyperliquidDelegateBatch(args: HyperliquidDelegateArgs) {\n const validator = getAddress(args.validator)\n const data = buildCoreWriterTokenDelegateCalldata({\n validator,\n hypeHuman: args.hypeHuman,\n isUndelegate: args.isUndelegate,\n })\n return buildStakingMultisign(args, data, args.isUndelegate ? 'undelegate' : 'delegate', { validator })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidDelegateOnlyBatch(\n args: Omit<HyperliquidDelegateArgs, 'isUndelegate'>,\n) {\n return buildEvmMultisignBodyHyperliquidDelegateBatch({ ...args, isUndelegate: false })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidUndelegateBatch(\n args: Omit<HyperliquidDelegateArgs, 'isUndelegate'>,\n) {\n return buildEvmMultisignBodyHyperliquidDelegateBatch({ ...args, isUndelegate: true })\n}\n","import { getAddress, type Address } from 'viem'\n\n/** Minimum Bridge2 deposit; smaller amounts are not credited. */\nexport const HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC = 5\n\n/** Arbitrum One — canonical inbound rail for Hyperliquid mainnet. */\nexport const HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID = 42161 as const\n/** Arbitrum Sepolia — pairs with Hyperliquid testnet (998). */\nexport const HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID = 421614 as const\n\nexport type HyperliquidBridgeArbitrumChainId =\n | typeof HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID\n | typeof HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID\n\nconst BRIDGE_MAINNET = {\n bridge2: '0x2df1c51e09aecf9cacb7bc98cb1742757f163df7',\n usdc: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n label: 'Arbitrum One',\n} as const\n\nconst BRIDGE_TESTNET = {\n bridge2: '0x08cfc1B6b2dCF36A1480b99353A354AA8AC56f89',\n usdc: '0x1baAbB04529D43a73232B713C0FE471f7c7334d5',\n label: 'Arbitrum Sepolia',\n} as const\n\n/** Circle native USDC on HyperEVM (ERC-20), for Assets row gating. */\nexport const HYPERLIQUID_HYPEREVM_USDC_MAINNET = '0xb88339cb7199b77e23db6e890353e22632ba630f' as const\nexport const HYPERLIQUID_HYPEREVM_USDC_TESTNET = '0x2B3370eE501B4a559b57D449569354196457D8Ab' as const\n\n/** EIP-712 domain chainId for user-signed Hyperliquid actions (Python SDK default). */\nexport const HYPERLIQUID_USER_SIGNED_SIGNATURE_CHAIN_ID = '0x66eee' as const\n\nexport const HYPERLIQUID_BRIDGE_ERC20_TRANSFER_FALLBACK_GAS = 80_000n\n\nexport function hyperliquidBridgeArbitrumChainId(hyperEvmChainId: number): HyperliquidBridgeArbitrumChainId | null {\n if (hyperEvmChainId === 999) return HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID\n if (hyperEvmChainId === 998) return HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID\n return null\n}\n\nexport function hyperliquidBridgeConfig(arbitrumChainId: number): {\n bridge2: Address\n usdc: Address\n label: string\n} | null {\n if (arbitrumChainId === HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID) {\n return {\n bridge2: getAddress(BRIDGE_MAINNET.bridge2),\n usdc: getAddress(BRIDGE_MAINNET.usdc),\n label: BRIDGE_MAINNET.label,\n }\n }\n if (arbitrumChainId === HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID) {\n return {\n bridge2: getAddress(BRIDGE_TESTNET.bridge2),\n usdc: getAddress(BRIDGE_TESTNET.usdc),\n label: BRIDGE_TESTNET.label,\n }\n }\n return null\n}\n\nexport function isHyperliquidBridgeArbitrumChainSupported(chainId: number): boolean {\n return hyperliquidBridgeConfig(chainId) != null\n}\n\nexport function isHyperliquidBridgeArbitrumUsdcRow(chainId: number, contractAddress: string): boolean {\n const cfg = hyperliquidBridgeConfig(chainId)\n if (!cfg) return false\n try {\n return getAddress(contractAddress as Address).toLowerCase() === cfg.usdc.toLowerCase()\n } catch {\n return false\n }\n}\n\nexport function isHyperliquidHyperEvmUsdcRow(hyperEvmChainId: number, contractAddress: string): boolean {\n const expected =\n hyperEvmChainId === 999\n ? HYPERLIQUID_HYPEREVM_USDC_MAINNET\n : hyperEvmChainId === 998\n ? HYPERLIQUID_HYPEREVM_USDC_TESTNET\n : null\n if (!expected) return false\n try {\n return getAddress(contractAddress as Address).toLowerCase() === getAddress(expected).toLowerCase()\n } catch {\n return false\n }\n}\n","import { getAddress, type Address } from 'viem'\n\nexport const HYPERLIQUID_USER_SIGNED_DOMAIN = {\n name: 'HyperliquidSignTransaction',\n version: '1',\n verifyingContract: '0x0000000000000000000000000000000000000000',\n} as const\n\nexport const HYPERLIQUID_WITHDRAW_SIGN_TYPES = {\n 'HyperliquidTransaction:Withdraw': [\n { name: 'hyperliquidChain', type: 'string' },\n { name: 'destination', type: 'string' },\n { name: 'amount', type: 'string' },\n { name: 'time', type: 'uint64' },\n ],\n} as const\n\nexport type HyperliquidWithdraw3Action = {\n type: 'withdraw3'\n signatureChainId: `0x${string}`\n hyperliquidChain: 'Mainnet' | 'Testnet'\n destination: string\n amount: string\n time: number\n}\n\nexport function buildHyperliquidWithdraw3Action(args: {\n destination: Address\n amountHuman: string\n isTestnet: boolean\n timeMs?: number\n}): { action: HyperliquidWithdraw3Action; nonce: number } {\n const amount = args.amountHuman.trim()\n if (!amount || !/^\\d+(\\.\\d+)?$/.test(amount.replace(/,/g, ''))) {\n throw new Error('amountHuman must be a positive decimal string')\n }\n if (Number(amount.replace(/,/g, '')) <= 0) {\n throw new Error('amountHuman must be greater than zero')\n }\n const destination = getAddress(args.destination)\n const time = args.timeMs ?? Date.now()\n const hyperliquidChain = args.isTestnet ? 'Testnet' : 'Mainnet'\n const signatureChainId = '0x66eee' as const\n const action: HyperliquidWithdraw3Action = {\n type: 'withdraw3',\n signatureChainId,\n hyperliquidChain,\n destination: destination.toLowerCase(),\n amount,\n time,\n }\n return { action, nonce: time }\n}\n\nexport function buildHyperliquidWithdraw3TypedData(args: {\n action: HyperliquidWithdraw3Action\n}) {\n const chainId = Number.parseInt(args.action.signatureChainId, 16)\n return {\n domain: {\n ...HYPERLIQUID_USER_SIGNED_DOMAIN,\n chainId,\n },\n types: HYPERLIQUID_WITHDRAW_SIGN_TYPES,\n primaryType: 'HyperliquidTransaction:Withdraw' as const,\n message: {\n hyperliquidChain: args.action.hyperliquidChain,\n destination: args.action.destination,\n amount: args.action.amount,\n time: args.action.time,\n },\n }\n}\n","import { encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport {\n HYPERLIQUID_BRIDGE_ERC20_TRANSFER_FALLBACK_GAS,\n HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC,\n hyperliquidBridgeConfig,\n} from './bridgeConstants.js'\nimport { isHyperliquidChainSupported } from './support.js'\nimport {\n buildHyperliquidWithdraw3Action,\n buildHyperliquidWithdraw3TypedData,\n} from './userSignedSigning.js'\n\nconst erc20TransferAbi = parseAbi(['function transfer(address to, uint256 amount) returns (bool)'])\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\ntype HyperliquidBridgeDepositArgs = {\n keyGen: KeyGenSubsetForPermit\n /** Arbitrum chain id (42161 mainnet, 421614 testnet). */\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n usdHuman: string\n}\n\ntype HyperliquidBridgeWithdrawArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n usdHuman: string\n /** Arbitrum address receiving USDC (defaults to executor). */\n destination?: Address\n executorAddress: Address\n}\n\nfunction parseUsdHumanTo6(usdHuman: string): bigint {\n const trimmed = usdHuman.trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error('usdHuman must be a positive decimal string')\n }\n return parseUnits(trimmed, 6)\n}\n\nexport async function buildEvmMultisignBodyHyperliquidBridgeDepositBatch(args: HyperliquidBridgeDepositArgs) {\n const cfg = hyperliquidBridgeConfig(args.chainId)\n if (!cfg) throw new Error('chainId must be Arbitrum One (42161) or Arbitrum Sepolia (421614)')\n\n const amountWei = parseUsdHumanTo6(args.usdHuman)\n const minWei = parseUnits(String(HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC), 6)\n if (amountWei < minWei) {\n throw new Error(`Bridge deposit must be at least ${HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC} USDC`)\n }\n\n const executor = getAddress(args.executorAddress)\n const data = encodeFunctionData({\n abi: erc20TransferAbi,\n functionName: 'transfer',\n args: [cfg.bridge2, amountWei],\n })\n\n return buildEvmMultisignBatch({\n context: {\n keyGen: args.keyGen,\n chainCategory: 'evm',\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails ?? null,\n executorAddress: executor,\n purposeText: args.purposeText,\n },\n steps: [{ to: cfg.usdc, data, value: 0n, fallbackGas: HYPERLIQUID_BRIDGE_ERC20_TRANSFER_FALLBACK_GAS }],\n destinationAddress: cfg.usdc,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action: 'bridgeDeposit',\n arbitrumChainId: args.chainId,\n usdc: cfg.usdc,\n bridge2: cfg.bridge2,\n usdHuman: args.usdHuman,\n evm: { type: 'hyperliquid_bridge_deposit', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildHyperliquidBridgeWithdrawMultisign(args: HyperliquidBridgeWithdrawArgs) {\n if (!isHyperliquidChainSupported(args.chainId)) {\n throw new Error('chainId must be 999 or 998')\n }\n const isTestnet = args.chainId === 998\n const destination = getAddress(args.destination ?? args.executorAddress)\n const { action, nonce } = buildHyperliquidWithdraw3Action({\n destination,\n amountHuman: args.usdHuman,\n isTestnet,\n })\n const typed = buildHyperliquidWithdraw3TypedData({ action })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: typed,\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'bridgeWithdraw',\n usdHuman: args.usdHuman,\n destination,\n nonce,\n hyperliquidChain: action.hyperliquidChain,\n },\n },\n ],\n })\n}\n","import type { HyperliquidFrontendOpenOrder } from './api.js'\nimport type { HyperliquidPositionDisplayRow } from './reads.js'\n\nexport type HyperliquidPendingCloseSummary = {\n pendingCloseSz: number\n pendingClosePct: number\n}\n\nfunction parsePositiveSize(value: string | null | undefined): number | null {\n if (value == null || !String(value).trim()) return null\n const n = Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n) || n <= 0) return null\n return n\n}\n\n/** True when order side closes the given position (long → sell/A, short → buy/B). */\nexport function hyperliquidOrderClosesPosition(\n position: Pick<HyperliquidPositionDisplayRow, 'isLong'>,\n orderSide: string,\n): boolean {\n const side = String(orderSide).trim().toUpperCase()\n return position.isLong ? side === 'A' : side === 'B'\n}\n\n/** Count resting reduce-only or TP/SL trigger orders that would close the position. */\nexport function hyperliquidOrderCountsAsPendingClose(\n order: Pick<HyperliquidFrontendOpenOrder, 'reduceOnly' | 'isTrigger'>,\n): boolean {\n return Boolean(order.reduceOnly) || Boolean(order.isTrigger)\n}\n\nexport function hyperliquidPendingCloseForPosition(args: {\n position: Pick<HyperliquidPositionDisplayRow, 'coin' | 'isLong' | 'size'>\n orders: HyperliquidFrontendOpenOrder[]\n}): HyperliquidPendingCloseSummary {\n const positionSize = parsePositiveSize(args.position.size)\n if (positionSize == null) {\n return { pendingCloseSz: 0, pendingClosePct: 0 }\n }\n let pendingCloseSz = 0\n for (const order of args.orders) {\n if (order.coin !== args.position.coin) continue\n if (!hyperliquidOrderClosesPosition(args.position, order.side)) continue\n if (!hyperliquidOrderCountsAsPendingClose(order)) continue\n const sz = parsePositiveSize(order.sz)\n if (sz != null) pendingCloseSz += sz\n }\n const pendingClosePct = Math.min(100, (pendingCloseSz / positionSize) * 100)\n return { pendingCloseSz, pendingClosePct }\n}\n\nexport function hyperliquidPendingCloseByCoin(args: {\n positions: HyperliquidPositionDisplayRow[]\n orders: HyperliquidFrontendOpenOrder[]\n}): Map<string, HyperliquidPendingCloseSummary> {\n const out = new Map<string, HyperliquidPendingCloseSummary>()\n for (const position of args.positions) {\n out.set(position.key, hyperliquidPendingCloseForPosition({ position, orders: args.orders }))\n }\n return out\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { isHyperliquidChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './constants.js'\nexport * from './api.js'\nexport * from './assets.js'\nexport * from './marketSearch.js'\nexport * from './reads.js'\nexport * from './coreWriter.js'\nexport * from './multisign.js'\nexport * from './vaultMultisign.js'\nexport * from './stakingMultisign.js'\nexport * from './l1Signing.js'\nexport * from './exchangeMultisign.js'\nexport * from './bridgeConstants.js'\nexport * from './userSignedSigning.js'\nexport * from './bridgeMultisign.js'\nexport * from './pendingClose.js'\n\nexport const HYPERLIQUID_PROTOCOL_ID = 'hyperliquid'\n\nexport const hyperliquidProtocolModule: ProtocolModule = {\n id: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const chainId = typeof ctx.chainId === 'number' ? ctx.chainId : Number(ctx.chainId)\n return Number.isFinite(chainId) && isHyperliquidChainSupported(chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'erc20' || token.kind === 'native'\n },\n actions: [\n {\n id: 'hyperliquid.limitOrder',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Place a Hyperliquid limit/IoC order via CoreWriter, or L1 normalTpsl bracket when TP/SL triggers are set',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin e.g. BTC' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy/long, false for sell/short' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price' },\n szHuman: { type: 'string', required: true, description: 'Order size in coin units' },\n marketKind: { type: 'string', required: false, description: 'perp (default) or spot' },\n tif: { type: 'string', required: false, description: 'gtc, ioc, or alo' },\n dex: { type: 'string', required: false, description: 'HIP-3 dex name when applicable' },\n takeProfitTriggerPxHuman: { type: 'string', required: false, description: 'TP trigger — enables L1 bracket with SL' },\n stopLossTriggerPxHuman: { type: 'string', required: false, description: 'SL trigger — enables L1 bracket with TP' },\n tpslExecMode: { type: 'string', required: false, description: 'limit_at_trigger (default) or market' },\n },\n },\n {\n id: 'hyperliquid.close',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Close or reduce a perp via IoC reduce-only limit order (CoreWriter)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin' },\n isLong: { type: 'boolean', required: true, description: 'true if closing a long position' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price' },\n szHuman: { type: 'string', required: true, description: 'Size to close in coin units' },\n },\n },\n {\n id: 'hyperliquid.cancel',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel a Hyperliquid open order via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin' },\n oid: { type: 'number', required: true, description: 'Order id from openOrders' },\n },\n },\n {\n id: 'hyperliquid.usdTransfer',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Move USDC between Hyperliquid spot and perp margin accounts',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n toPerp: { type: 'boolean', required: true, description: 'true spot→perp, false perp→spot' },\n },\n },\n {\n id: 'hyperliquid.vaultDeposit',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USD into a Hyperliquid vault',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n vaultAddress: { type: 'string', required: true, description: 'Vault address' },\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n },\n },\n {\n id: 'hyperliquid.vaultWithdraw',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USD from a Hyperliquid vault (includes accrued PnL)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n vaultAddress: { type: 'string', required: true, description: 'Vault address' },\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n },\n },\n {\n id: 'hyperliquid.stake',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake HYPE via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n },\n },\n {\n id: 'hyperliquid.unstake',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Unstake HYPE via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n },\n },\n {\n id: 'hyperliquid.delegate',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Delegate staked HYPE to a validator',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n validator: { type: 'string', required: true, description: 'Validator address' },\n },\n },\n {\n id: 'hyperliquid.bridgeDeposit',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USDC from Arbitrum to Hyperliquid via Bridge2 (ERC20 transfer)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USDC amount (min 5)' },\n },\n },\n {\n id: 'hyperliquid.bridgeWithdraw',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USDC from Hyperliquid to Arbitrum via withdraw3 (EIP-712 /exchange)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USDC amount' },\n destination: { type: 'string', required: false, description: 'Arbitrum recipient (defaults to executor)' },\n },\n },\n {\n id: 'hyperliquid.updateLeverage',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Update per-market cross/isolated leverage via Hyperliquid L1 /exchange (EIP-712)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin e.g. BTC' },\n leverage: { type: 'number', required: true, description: 'New leverage (1..market max)' },\n isCross: { type: 'boolean', required: false, description: 'true for cross (default), false for isolated' },\n marketKind: { type: 'string', required: false, description: 'perp (default) or spot' },\n },\n },\n {\n id: 'hyperliquid.undelegate',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Undelegate HYPE from a validator',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n validator: { type: 'string', required: true, description: 'Validator address' },\n },\n },\n ],\n}\n\nregisterProtocolModule(hyperliquidProtocolModule)\n"]}
1
+ {"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/hyperliquid/support.ts","../../../../src/protocols/evm/hyperliquid/constants.ts","../../../../src/protocols/evm/hyperliquid/api.ts","../../../../src/protocols/evm/hyperliquid/marketSearch.ts","../../../../src/protocols/evm/hyperliquid/assets.ts","../../../../src/protocols/evm/hyperliquid/reads.ts","../../../../src/protocols/evm/hyperliquid/lendReads.ts","../../../../src/protocols/evm/hyperliquid/coreWriter.ts","../../../../src/core/defiEvmClient.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/hyperliquid/l1Signing.ts","../../../../src/protocols/evm/hyperliquid/exchangeMultisign.ts","../../../../src/protocols/evm/hyperliquid/multisign.ts","../../../../src/protocols/evm/hyperliquid/vaultMultisign.ts","../../../../src/protocols/evm/hyperliquid/stakingMultisign.ts","../../../../src/protocols/evm/hyperliquid/bridgeConstants.ts","../../../../src/protocols/evm/hyperliquid/userSignedSigning.ts","../../../../src/protocols/evm/hyperliquid/bridgeMultisign.ts","../../../../src/protocols/evm/hyperliquid/pendingClose.ts","../../../../src/protocols/evm/hyperliquid/index.ts"],"names":["name","markets","hit","dexes","parseAbi","encodeFunctionData","encodeAbiParameters","http","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","createPublicClient","fetchChainFeeParams","getAddress","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","stringToHex","hashTypedData","encodeMsgpack","ZERO_ADDRESS","parseUnits"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","/** HyperEVM chains for Hyperliquid CoreWriter integration. */\nexport const HYPERLIQUID_SUPPORTED_CHAIN_IDS = [999, 998] as const\n\nexport type HyperliquidSupportedChainId = (typeof HYPERLIQUID_SUPPORTED_CHAIN_IDS)[number]\n\nexport function isHyperliquidChainSupported(chainId: number): chainId is HyperliquidSupportedChainId {\n return (HYPERLIQUID_SUPPORTED_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function hyperliquidApiBaseUrl(chainId: number): string {\n return chainId === 998 ? 'https://api.hyperliquid-testnet.xyz' : 'https://api.hyperliquid.xyz'\n}\n\n/** Stats feed used by app.hyperliquid.xyz/vaults (official vaultSummaries returns []). */\nexport function hyperliquidVaultStatsUrl(chainId: number): string | null {\n return chainId === 998 ? null : 'https://stats-data.hyperliquid.xyz/Mainnet/vaults'\n}\n\nexport const HYPERLIQUID_HLP_VAULT_ADDRESS = '0xdfc24b077bc1425ad1dea75bcb6f8158e10df303'\n\n/** HIP-3 coins use `{dex}:{symbol}` (e.g. `xyz:AAPL`). Returns dex segment when present. */\nexport function hyperliquidInferDexFromCoin(coin: string): string | undefined {\n const trimmed = coin.trim()\n const sep = trimmed.indexOf(':')\n if (sep <= 0) return undefined\n return trimmed.slice(0, sep)\n}\n","/** CoreWriter system contract on HyperEVM — sends actions to HyperCore. */\nexport const HYPERLIQUID_CORE_WRITER_ADDRESS = '0x3333333333333333333333333333333333333333' as const\n\n/** Spot asset IDs are offset from perp indices. */\nexport const HYPERLIQUID_SPOT_ASSET_OFFSET = 10_000\n\nexport const HYPERLIQUID_CORE_WRITER_GAS_FALLBACK = 120_000n\n\n/** Time-in-force encodings for CoreWriter limit orders. */\nexport const HYPERLIQUID_TIF = {\n alo: 1,\n gtc: 2,\n ioc: 3,\n} as const\n\nexport type HyperliquidTifKey = keyof typeof HYPERLIQUID_TIF\n\n/** Approximate bar duration in ms for candle window sizing. */\nexport const HYPERLIQUID_INTERVAL_MS: Record<string, number> = {\n '1m': 60_000,\n '3m': 180_000,\n '5m': 300_000,\n '15m': 900_000,\n '30m': 1_800_000,\n '1h': 3_600_000,\n '2h': 7_200_000,\n '4h': 14_400_000,\n '8h': 28_800_000,\n '12h': 43_200_000,\n '1d': 86_400_000,\n '3d': 259_200_000,\n '1w': 604_800_000,\n '1M': 2_592_000_000,\n}\n\nexport const HYPERLIQUID_DEFAULT_OHLCV_INTERVAL = '15m' as const\nexport const HYPERLIQUID_DEFAULT_CANDLE_LIMIT = 48\nexport const HYPERLIQUID_MAX_CANDLE_LIMIT = 200\n/** Max bars for dedicated OHLCV range requests (e.g. 7d @ 15m ≈ 672). */\nexport const HYPERLIQUID_MAX_OHLCV_BARS = 2000\n/** Enough bars for default EMA(50) on 4h (~6 bars/day) and chart-periods 1h/15m windows. */\nexport const HYPERLIQUID_DEFAULT_LOOKBACK_DAYS = 14\nexport const HYPERLIQUID_MAX_LOOKBACK_DAYS = 90\n","import { hyperliquidApiBaseUrl, hyperliquidInferDexFromCoin, hyperliquidVaultStatsUrl, HYPERLIQUID_HLP_VAULT_ADDRESS } from './support.js'\nimport {\n HYPERLIQUID_DEFAULT_CANDLE_LIMIT,\n HYPERLIQUID_DEFAULT_LOOKBACK_DAYS,\n HYPERLIQUID_DEFAULT_OHLCV_INTERVAL,\n HYPERLIQUID_INTERVAL_MS,\n HYPERLIQUID_MAX_CANDLE_LIMIT,\n HYPERLIQUID_MAX_LOOKBACK_DAYS,\n HYPERLIQUID_MAX_OHLCV_BARS,\n} from './constants.js'\n\nexport type HyperliquidPerpMarket = {\n name: string\n asset: number\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n /** HIP-3 builder dex; omitted for native Hyperliquid perps. */\n dex?: string\n}\n\nexport type HyperliquidPerpDex = {\n name: string\n fullName: string\n}\n\nexport type HyperliquidSpotMarket = {\n name: string\n asset: number\n tokenIndex: number\n szDecimals: number\n}\n\nexport type HyperliquidOhlcvInterval = '1m' | '3m' | '5m' | '15m' | '30m' | '1h' | '2h' | '4h' | '8h' | '12h' | '1d' | '3d' | '1w' | '1M'\n\nexport type HyperliquidOhlcvCandle = {\n timestampMs: number\n open: string\n high: string\n low: string\n close: string\n volume: string\n}\n\nexport type HyperliquidLivePrice = {\n markPx: string | null\n midPx: string | null\n oraclePx: string | null\n prevDayPx: string | null\n /** Best available live tradable price (midPx, else markPx, else allMids). */\n midUsd: string\n source: 'midPx' | 'markPx' | 'allMids'\n}\n\nexport type HyperliquidMarketSnapshot = {\n coin: string\n dex: string | null\n livePrice: HyperliquidLivePrice\n /** @deprecated Prefer livePrice.midUsd */\n midUsd: string\n /** Official HyperCore hourly funding from metaAndAssetCtxs. */\n funding: string | null\n fetchedAtMs: number\n interval: HyperliquidOhlcvInterval\n latestCandle: HyperliquidOhlcvCandle | null\n candles: HyperliquidOhlcvCandle[]\n candleCount: number\n}\n\nexport type HyperliquidOhlcvRange = {\n coin: string\n dex: string | null\n interval: HyperliquidOhlcvInterval\n startTimeMs: number\n endTimeMs: number\n expectedBars: number\n candleCount: number\n /** Echo of fetch args — used by chart window validation. */\n lookbackDays?: number\n lookbackHours?: number\n latestCandle: HyperliquidOhlcvCandle | null\n candles: HyperliquidOhlcvCandle[]\n fetchedAtMs: number\n}\n\nasync function hyperliquidInfoPost<T>(chainId: number, body: Record<string, unknown>): Promise<T> {\n const base = hyperliquidApiBaseUrl(chainId)\n const res = await fetch(`${base}/info`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n cache: 'no-store',\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Hyperliquid info API failed (${res.status}): ${text.slice(0, 200)}`)\n }\n return (await res.json()) as T\n}\n\ntype MetaResponse = {\n universe: Array<{\n name: string\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n }>\n}\n\ntype SpotMetaResponse = {\n universe: Array<{ name: string; tokens: number[]; index: number }>\n tokens: Array<{ name: string; szDecimals: number; index: number }>\n}\n\nexport async function hyperliquidFetchPerpMeta(args: {\n chainId: number\n dex?: string\n}): Promise<{ markets: HyperliquidPerpMarket[] }> {\n const req: Record<string, unknown> = { type: 'meta' }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const meta = await hyperliquidInfoPost<MetaResponse>(args.chainId, req)\n const markets: HyperliquidPerpMarket[] = (meta.universe ?? []).map((u, i) => ({\n name: u.name,\n asset: i,\n szDecimals: u.szDecimals,\n maxLeverage: u.maxLeverage,\n onlyIsolated: u.onlyIsolated,\n }))\n return { markets }\n}\n\nexport async function hyperliquidFetchSpotMeta(args: {\n chainId: number\n}): Promise<{ markets: HyperliquidSpotMarket[] }> {\n const meta = await hyperliquidInfoPost<SpotMetaResponse>(args.chainId, { type: 'spotMeta' })\n const tokenByIndex = new Map((meta.tokens ?? []).map((t) => [t.index, t]))\n const markets: HyperliquidSpotMarket[] = (meta.universe ?? []).map((u, i) => {\n const baseTokenIdx = u.tokens[0]\n const token = baseTokenIdx != null ? tokenByIndex.get(baseTokenIdx) : undefined\n return {\n name: u.name,\n asset: 10_000 + i,\n tokenIndex: i,\n szDecimals: token?.szDecimals ?? 8,\n }\n })\n return { markets }\n}\n\nexport async function hyperliquidFetchAllMids(args: {\n chainId: number\n dex?: string\n}): Promise<{ mids: Record<string, string> }> {\n const req: Record<string, unknown> = { type: 'allMids' }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const mids = await hyperliquidInfoPost<Record<string, string>>(args.chainId, req)\n return { mids }\n}\n\nfunction hyperliquidMapCandles(\n raw: Array<{ t: number; o: string; h: string; l: string; c: string; v: string }> | null | undefined,\n): HyperliquidOhlcvCandle[] {\n return (raw ?? []).map((c) => ({\n timestampMs: c.t,\n open: c.o,\n high: c.h,\n low: c.l,\n close: c.c,\n volume: c.v,\n }))\n}\n\nasync function hyperliquidFetchCandlesRaw(args: {\n chainId: number\n coin: string\n interval: HyperliquidOhlcvInterval\n startTimeMs: number\n endTimeMs: number\n}): Promise<HyperliquidOhlcvCandle[]> {\n const raw = await hyperliquidInfoPost<\n Array<{ t: number; o: string; h: string; l: string; c: string; v: string }>\n >(args.chainId, {\n type: 'candleSnapshot',\n req: {\n coin: args.coin,\n interval: args.interval,\n startTime: args.startTimeMs,\n endTime: args.endTimeMs,\n },\n })\n return hyperliquidMapCandles(raw)\n}\n\n/** Resolve OHLCV window from lookback or explicit timestamps. */\nexport function hyperliquidResolveOhlcvWindow(args: {\n interval: HyperliquidOhlcvInterval\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}): { startTimeMs: number; endTimeMs: number; expectedBars: number } {\n const endTimeMs = args.endTimeMs ?? Date.now()\n const intervalMs = HYPERLIQUID_INTERVAL_MS[args.interval] ?? HYPERLIQUID_INTERVAL_MS['15m']!\n\n let startTimeMs: number\n if (args.startTimeMs != null) {\n startTimeMs = args.startTimeMs\n } else if (args.lookbackDays != null) {\n if (args.lookbackDays <= 0 || args.lookbackDays > HYPERLIQUID_MAX_LOOKBACK_DAYS) {\n throw new Error(`lookbackDays must be between 1 and ${HYPERLIQUID_MAX_LOOKBACK_DAYS}`)\n }\n startTimeMs = endTimeMs - args.lookbackDays * 86_400_000\n } else if (args.lookbackHours != null) {\n if (args.lookbackHours <= 0 || args.lookbackHours > HYPERLIQUID_MAX_LOOKBACK_DAYS * 24) {\n throw new Error(`lookbackHours must be between 1 and ${HYPERLIQUID_MAX_LOOKBACK_DAYS * 24}`)\n }\n startTimeMs = endTimeMs - args.lookbackHours * 3_600_000\n } else {\n startTimeMs = endTimeMs - HYPERLIQUID_DEFAULT_LOOKBACK_DAYS * 86_400_000\n }\n\n if (!Number.isFinite(startTimeMs) || !Number.isFinite(endTimeMs) || startTimeMs >= endTimeMs) {\n throw new Error('Invalid OHLCV time range: startTimeMs must be before endTimeMs')\n }\n\n const expectedBars = Math.ceil((endTimeMs - startTimeMs) / intervalMs)\n if (expectedBars > HYPERLIQUID_MAX_OHLCV_BARS) {\n throw new Error(\n `OHLCV range needs ~${expectedBars} bars at ${args.interval} (max ${HYPERLIQUID_MAX_OHLCV_BARS}). Use a coarser interval or shorter lookback.`,\n )\n }\n\n return { startTimeMs, endTimeMs, expectedBars }\n}\n\n/** Short recent window for market snapshot (default 48 bars). */\nexport async function hyperliquidFetchCandles(args: {\n chainId: number\n coin: string\n interval: HyperliquidOhlcvInterval\n startTimeMs?: number\n endTimeMs?: number\n limit?: number\n}): Promise<{ candles: HyperliquidOhlcvCandle[] }> {\n const endTime = args.endTimeMs ?? Date.now()\n const intervalMs = HYPERLIQUID_INTERVAL_MS[args.interval] ?? HYPERLIQUID_INTERVAL_MS['15m']!\n const limit = Math.min(Math.max(args.limit ?? HYPERLIQUID_DEFAULT_CANDLE_LIMIT, 1), HYPERLIQUID_MAX_CANDLE_LIMIT)\n const startTime = args.startTimeMs ?? endTime - intervalMs * (limit + 4)\n const candles = await hyperliquidFetchCandlesRaw({\n chainId: args.chainId,\n coin: args.coin,\n interval: args.interval,\n startTimeMs: startTime,\n endTimeMs: endTime,\n })\n return { candles: candles.slice(-limit) }\n}\n\n/** OHLCV for an explicit time range — requests only that window from Hyperliquid (no over-fetch + filter). */\nexport async function hyperliquidFetchOhlcvRange(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}): Promise<HyperliquidOhlcvRange> {\n const coin = args.coin.trim()\n const interval = args.interval ?? HYPERLIQUID_DEFAULT_OHLCV_INTERVAL\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || null\n const { startTimeMs, endTimeMs, expectedBars } = hyperliquidResolveOhlcvWindow({\n interval,\n lookbackDays: args.lookbackDays,\n lookbackHours: args.lookbackHours,\n startTimeMs: args.startTimeMs,\n endTimeMs: args.endTimeMs,\n })\n\n const candles = await hyperliquidFetchCandlesRaw({\n chainId: args.chainId,\n coin,\n interval,\n startTimeMs,\n endTimeMs,\n })\n\n if (candles.length === 0) {\n throw new Error(\n `No OHLCV data for ${coin} between ${startTimeMs} and ${endTimeMs} at ${interval}. Check coin/dex.`,\n )\n }\n\n const latestCandle = candles.length > 0 ? candles[candles.length - 1]! : null\n\n const effectiveLookbackDays =\n args.lookbackDays ??\n (args.lookbackHours == null && args.startTimeMs == null ? HYPERLIQUID_DEFAULT_LOOKBACK_DAYS : undefined)\n\n return {\n coin,\n dex,\n interval,\n startTimeMs,\n endTimeMs,\n expectedBars,\n candleCount: candles.length,\n ...(effectiveLookbackDays != null ? { lookbackDays: effectiveLookbackDays } : {}),\n ...(args.lookbackHours != null ? { lookbackHours: args.lookbackHours } : {}),\n latestCandle,\n candles,\n fetchedAtMs: Date.now(),\n }\n}\n\ntype PerpAssetContextRow = {\n markPx?: string\n midPx?: string | null\n oraclePx?: string\n funding?: string\n openInterest?: string\n prevDayPx?: string\n}\n\n/** Live mark/mid/oracle from metaAndAssetCtxs — authoritative for HIP-3 and native perps. */\nexport async function hyperliquidFetchPerpAssetContext(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<{\n markPx: string | null\n midPx: string | null\n oraclePx: string | null\n prevDayPx: string | null\n funding: string | null\n openInterest: string | null\n}> {\n const coin = args.coin.trim()\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || ''\n const req: Record<string, unknown> = { type: 'metaAndAssetCtxs' }\n if (dex) req.dex = dex\n\n const raw = await hyperliquidInfoPost<\n [{ universe: Array<{ name: string }> }, PerpAssetContextRow[]]\n >(args.chainId, req)\n\n const universe = raw?.[0]?.universe ?? []\n const contexts = raw?.[1] ?? []\n const idx = universe.findIndex((u) => u.name === coin)\n if (idx < 0) {\n throw new Error(`Hyperliquid asset context not found for ${coin}${dex ? ` on dex ${dex}` : ''}`)\n }\n\n const ctx = contexts[idx] ?? {}\n const str = (v: string | null | undefined) => {\n const s = String(v ?? '').trim()\n return s || null\n }\n\n return {\n markPx: str(ctx.markPx),\n midPx: str(ctx.midPx),\n oraclePx: str(ctx.oraclePx),\n prevDayPx: str(ctx.prevDayPx),\n funding: str(ctx.funding),\n openInterest: str(ctx.openInterest),\n }\n}\n\nfunction hyperliquidPickLivePrice(args: {\n markPx: string | null\n midPx: string | null\n midFromAllMids: string | null\n}): HyperliquidLivePrice {\n const midUsd = args.midPx ?? args.markPx ?? args.midFromAllMids\n if (!midUsd) {\n throw new Error('Could not fetch live Hyperliquid price (mark, mid, and allMids all empty)')\n }\n const source: HyperliquidLivePrice['source'] = args.midPx\n ? 'midPx'\n : args.markPx\n ? 'markPx'\n : 'allMids'\n return {\n markPx: args.markPx,\n midPx: args.midPx,\n oraclePx: null,\n prevDayPx: null,\n midUsd,\n source,\n }\n}\n\nexport async function hyperliquidFetchMarketSnapshot(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n candleLimit?: number\n}): Promise<HyperliquidMarketSnapshot> {\n const coin = args.coin.trim()\n const interval = args.interval ?? HYPERLIQUID_DEFAULT_OHLCV_INTERVAL\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || null\n const candleLimit = Math.min(\n Math.max(args.candleLimit ?? HYPERLIQUID_DEFAULT_CANDLE_LIMIT, 1),\n HYPERLIQUID_MAX_CANDLE_LIMIT,\n )\n\n const [{ mids }, assetCtx, { candles }] = await Promise.all([\n hyperliquidFetchAllMids({ chainId: args.chainId, dex: dex ?? undefined }),\n hyperliquidFetchPerpAssetContext({ chainId: args.chainId, coin, dex: dex ?? undefined }),\n hyperliquidFetchCandles({\n chainId: args.chainId,\n coin,\n interval,\n limit: candleLimit,\n }),\n ])\n\n const midFromAllMids = mids[coin] ?? null\n const livePrice: HyperliquidLivePrice = {\n ...hyperliquidPickLivePrice({\n markPx: assetCtx.markPx,\n midPx: assetCtx.midPx,\n midFromAllMids,\n }),\n oraclePx: assetCtx.oraclePx,\n prevDayPx: assetCtx.prevDayPx,\n }\n\n const latestCandle = candles.length > 0 ? candles[candles.length - 1]! : null\n\n return {\n coin,\n dex,\n livePrice,\n midUsd: livePrice.midUsd,\n funding: assetCtx.funding,\n fetchedAtMs: Date.now(),\n interval,\n latestCandle,\n candles,\n candleCount: candles.length,\n }\n}\n\ntype ClearinghouseState = {\n assetPositions?: Array<{\n position?: {\n coin?: string\n szi?: string\n entryPx?: string\n positionValue?: string\n unrealizedPnl?: string\n liquidationPx?: string | null\n leverage?: { type?: string; value?: number }\n maxLeverage?: number\n marginUsed?: string\n returnOnEquity?: string\n }\n }>\n marginSummary?: { accountValue?: string; totalMarginUsed?: string }\n /** USD that can leave perp margin (e.g. transfer to spot). */\n withdrawable?: string\n}\n\ntype SpotClearinghouseState = {\n balances?: Array<{\n coin?: string\n token?: number\n total?: string\n hold?: string\n entryNtl?: string\n }>\n}\n\nexport async function hyperliquidFetchClearinghouseState(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ state: ClearinghouseState }> {\n const req: Record<string, unknown> = { type: 'clearinghouseState', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const state = await hyperliquidInfoPost<ClearinghouseState>(args.chainId, req)\n return { state }\n}\n\nexport async function hyperliquidFetchSpotClearinghouseState(args: {\n chainId: number\n user: string\n}): Promise<{ state: SpotClearinghouseState }> {\n const state = await hyperliquidInfoPost<SpotClearinghouseState>(args.chainId, {\n type: 'spotClearinghouseState',\n user: args.user,\n })\n return { state }\n}\n\ntype ActiveAssetDataResponse = {\n coin?: string\n markPx?: string\n leverage?: { type?: string; value?: number; rawUsd?: string }\n /** [buy, sell] max size in coin units at current leverage/margin. */\n availableToTrade?: [string, string]\n}\n\nexport type HyperliquidActiveAssetContext = {\n markPx: string | null\n leverageLabel: string | null\n availableToBuy: string | null\n availableToSell: string | null\n}\n\nfunction hyperliquidFmtLeverage(leverage?: { type?: string; value?: number }): string | null {\n if (leverage?.value == null) return null\n const t = leverage.type === 'isolated' ? 'iso' : 'cross'\n return `${leverage.value}x ${t}`\n}\n\nfunction hyperliquidPositiveSizeString(value: string | undefined): string | null {\n const n = Number.parseFloat(String(value ?? '0'))\n if (!Number.isFinite(n) || n <= 0) return null\n return String(n)\n}\n\nexport async function hyperliquidFetchActiveAssetData(args: {\n chainId: number\n user: string\n coin: string\n}): Promise<{ activeAsset: HyperliquidActiveAssetContext }> {\n const raw = await hyperliquidInfoPost<ActiveAssetDataResponse>(args.chainId, {\n type: 'activeAssetData',\n user: args.user,\n coin: args.coin.trim(),\n })\n const avail = raw.availableToTrade\n return {\n activeAsset: {\n markPx: raw.markPx?.trim() || null,\n leverageLabel: hyperliquidFmtLeverage(raw.leverage),\n availableToBuy: avail?.[0] != null ? hyperliquidPositiveSizeString(avail[0]) : null,\n availableToSell: avail?.[1] != null ? hyperliquidPositiveSizeString(avail[1]) : null,\n },\n }\n}\n\nexport type HyperliquidOpenOrder = {\n coin: string\n side: string\n limitPx: string\n sz: string\n oid: number\n timestamp: number\n reduceOnly?: boolean\n}\n\nexport type HyperliquidFrontendOpenOrder = HyperliquidOpenOrder & {\n origSz?: string\n triggerCondition?: string\n isTrigger?: boolean\n triggerPx?: string\n isPositionTpsl?: boolean\n}\n\nexport async function hyperliquidFetchOpenOrders(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ orders: HyperliquidOpenOrder[] }> {\n const req: Record<string, unknown> = { type: 'openOrders', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const orders = await hyperliquidInfoPost<HyperliquidOpenOrder[]>(args.chainId, req)\n return { orders: orders ?? [] }\n}\n\nexport async function hyperliquidFetchFrontendOpenOrders(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ orders: HyperliquidFrontendOpenOrder[] }> {\n const req: Record<string, unknown> = { type: 'frontendOpenOrders', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const orders = await hyperliquidInfoPost<HyperliquidFrontendOpenOrder[]>(args.chainId, req)\n return { orders: orders ?? [] }\n}\n\nexport type HyperliquidVaultEquity = {\n vaultAddress: string\n equity: string\n}\n\nexport async function hyperliquidFetchUserVaultEquities(args: {\n chainId: number\n user: string\n}): Promise<{ rows: HyperliquidVaultEquity[] }> {\n const rows = await hyperliquidInfoPost<HyperliquidVaultEquity[]>(args.chainId, {\n type: 'userVaultEquities',\n user: args.user,\n })\n return { rows: rows ?? [] }\n}\n\nexport type HyperliquidVaultSummary = {\n vaultAddress: string\n name: string\n /** Annualized return as decimal (0.12 = 12%). */\n apr: number | null\n tvlUsd: string | null\n}\n\ntype VaultStatsRow = {\n apr?: number\n summary?: {\n name?: string\n vaultAddress?: string\n tvl?: string\n isClosed?: boolean\n }\n}\n\ntype VaultDetailsResponse = {\n name?: string\n vaultAddress?: string\n apr?: number\n isClosed?: boolean\n}\n\nconst VAULT_CATALOG_MAX = 40\nconst VAULT_MIN_TVL_USD = 1_000\n\nfunction vaultSummaryFromStatsRow(row: VaultStatsRow): HyperliquidVaultSummary | null {\n const summary = row.summary\n if (!summary?.vaultAddress?.trim() || !summary.name?.trim() || summary.isClosed) return null\n const tvl = Number.parseFloat(summary.tvl ?? '')\n if (!Number.isFinite(tvl) || tvl < VAULT_MIN_TVL_USD) return null\n return {\n vaultAddress: summary.vaultAddress,\n name: summary.name.trim(),\n apr: typeof row.apr === 'number' && Number.isFinite(row.apr) ? row.apr : null,\n tvlUsd: summary.tvl ?? null,\n }\n}\n\nfunction sortVaultCatalog(vaults: HyperliquidVaultSummary[]): HyperliquidVaultSummary[] {\n const hlp = HYPERLIQUID_HLP_VAULT_ADDRESS.toLowerCase()\n return [...vaults].sort((a, b) => {\n const aHlp = a.vaultAddress.toLowerCase() === hlp\n const bHlp = b.vaultAddress.toLowerCase() === hlp\n if (aHlp && !bHlp) return -1\n if (bHlp && !aHlp) return 1\n return Number.parseFloat(b.tvlUsd ?? '0') - Number.parseFloat(a.tvlUsd ?? '0')\n })\n}\n\nasync function hyperliquidFetchVaultCatalogFromStats(chainId: number): Promise<HyperliquidVaultSummary[]> {\n const statsUrl = hyperliquidVaultStatsUrl(chainId)\n if (!statsUrl) return []\n\n const res = await fetch(statsUrl, { cache: 'no-store' })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Hyperliquid vault stats failed (${res.status}): ${text.slice(0, 200)}`)\n }\n const raw = (await res.json()) as VaultStatsRow[]\n const byAddr = new Map<string, HyperliquidVaultSummary>()\n for (const row of raw ?? []) {\n const vault = vaultSummaryFromStatsRow(row)\n if (!vault) continue\n byAddr.set(vault.vaultAddress.toLowerCase(), vault)\n }\n return sortVaultCatalog([...byAddr.values()]).slice(0, VAULT_CATALOG_MAX)\n}\n\nasync function hyperliquidFetchVaultDetails(args: {\n chainId: number\n vaultAddress: string\n}): Promise<HyperliquidVaultSummary | null> {\n const raw = await hyperliquidInfoPost<VaultDetailsResponse>(args.chainId, {\n type: 'vaultDetails',\n vaultAddress: args.vaultAddress,\n })\n if (!raw?.vaultAddress?.trim() || !raw.name?.trim() || raw.isClosed) return null\n return {\n vaultAddress: raw.vaultAddress,\n name: raw.name.trim(),\n apr: typeof raw.apr === 'number' && Number.isFinite(raw.apr) ? raw.apr : null,\n tvlUsd: null,\n }\n}\n\nexport async function hyperliquidFetchVaultSummaries(args: {\n chainId: number\n executorAddress?: string\n}): Promise<{ vaults: HyperliquidVaultSummary[] }> {\n const catalog = await hyperliquidFetchVaultCatalogFromStats(args.chainId)\n const byAddr = new Map(catalog.map((v) => [v.vaultAddress.toLowerCase(), v]))\n\n const executor = args.executorAddress?.trim().toLowerCase()\n if (executor) {\n const { rows } = await hyperliquidFetchUserVaultEquities({ chainId: args.chainId, user: executor })\n const missing = rows.filter((r) => r.vaultAddress && !byAddr.has(r.vaultAddress.toLowerCase()))\n const extras = await Promise.all(\n missing.map(async (r) => hyperliquidFetchVaultDetails({ chainId: args.chainId, vaultAddress: r.vaultAddress })),\n )\n for (const vault of extras) {\n if (vault) byAddr.set(vault.vaultAddress.toLowerCase(), vault)\n }\n }\n\n return { vaults: sortVaultCatalog([...byAddr.values()]) }\n}\n\nexport async function hyperliquidFetchDexList(args: {\n chainId: number\n}): Promise<{ dexes: HyperliquidPerpDex[] }> {\n const raw = await hyperliquidInfoPost<\n Array<{ name: string; fullName?: string } | string | null>\n >(args.chainId, {\n type: 'perpDexs',\n })\n if (!Array.isArray(raw)) return { dexes: [] }\n const dexes: HyperliquidPerpDex[] = []\n for (const entry of raw) {\n if (entry == null) continue\n if (typeof entry === 'string') {\n const name = entry.trim()\n if (name) dexes.push({ name, fullName: name })\n continue\n }\n const name = entry.name?.trim()\n if (!name) continue\n const fullName = entry.fullName?.trim() || name\n dexes.push({ name, fullName })\n }\n return { dexes }\n}\n\nexport type HyperliquidPerpConciseAnnotation = {\n category?: string\n displayName?: string\n keywords?: string[]\n}\n\n/** Bulk metadata for HIP-3 / annotated perps (display names, keywords like \"apple\" for AAPL). */\nexport async function hyperliquidFetchPerpConciseAnnotations(args: {\n chainId: number\n}): Promise<Map<string, HyperliquidPerpConciseAnnotation>> {\n const raw = await hyperliquidInfoPost<Array<[string, HyperliquidPerpConciseAnnotation]>>(args.chainId, {\n type: 'perpConciseAnnotations',\n })\n const map = new Map<string, HyperliquidPerpConciseAnnotation>()\n if (!Array.isArray(raw)) return map\n for (const entry of raw) {\n if (!Array.isArray(entry) || entry.length < 2) continue\n const coin = String(entry[0] ?? '').trim()\n const meta = entry[1]\n if (!coin || !meta || typeof meta !== 'object') continue\n map.set(coin, meta)\n }\n return map\n}\n\nexport async function hyperliquidFetchDelegations(args: {\n chainId: number\n user: string\n}): Promise<{ delegations: Array<{ validator: string; amount: string }> }> {\n const raw = await hyperliquidInfoPost<Array<{ validator: string; amount: string }>>(args.chainId, {\n type: 'delegations',\n user: args.user,\n })\n return { delegations: raw ?? [] }\n}\n\nexport async function hyperliquidFetchStakingSummary(args: {\n chainId: number\n user: string\n}): Promise<{ delegated: string; undelegated: string }> {\n const raw = await hyperliquidInfoPost<{ delegated: string; undelegated: string }>(args.chainId, {\n type: 'delegatorSummary',\n user: args.user,\n })\n return { delegated: raw?.delegated ?? '0', undelegated: raw?.undelegated ?? '0' }\n}\n\nexport type HyperliquidSpotToken = {\n name: string\n tokenIndex: number\n szDecimals: number\n}\n\nexport async function hyperliquidFetchSpotTokens(args: {\n chainId: number\n}): Promise<{ tokens: HyperliquidSpotToken[] }> {\n const meta = await hyperliquidInfoPost<SpotMetaResponse>(args.chainId, { type: 'spotMeta' })\n const tokens: HyperliquidSpotToken[] = (meta.tokens ?? []).map((t) => ({\n name: t.name,\n tokenIndex: t.index,\n szDecimals: t.szDecimals,\n }))\n return { tokens }\n}\n\nexport type HyperliquidBorrowLendReserveState = {\n borrowYearlyRate: string\n supplyYearlyRate: string\n balance: string\n utilization: string\n oraclePx: string\n ltv: string\n totalSupplied: string\n totalBorrowed: string\n}\n\nexport type HyperliquidBorrowLendReserveTuple = [number, HyperliquidBorrowLendReserveState]\n\nexport type HyperliquidBorrowLendTokenBalance = {\n basis: string\n value: string\n}\n\nexport type HyperliquidBorrowLendUserTokenState = {\n borrow: HyperliquidBorrowLendTokenBalance\n supply: HyperliquidBorrowLendTokenBalance\n}\n\nexport type HyperliquidBorrowLendUserState = {\n tokenToState: Array<[number, HyperliquidBorrowLendUserTokenState]>\n health: string\n healthFactor: string | null\n}\n\nexport type HyperliquidUserAbstraction =\n | 'unifiedAccount'\n | 'portfolioMargin'\n | 'disabled'\n | 'default'\n | 'dexAbstraction'\n\nexport async function hyperliquidFetchAllBorrowLendReserveStates(args: {\n chainId: number\n}): Promise<{ reserves: HyperliquidBorrowLendReserveTuple[] }> {\n const raw = await hyperliquidInfoPost<HyperliquidBorrowLendReserveTuple[]>(args.chainId, {\n type: 'allBorrowLendReserveStates',\n })\n return { reserves: Array.isArray(raw) ? raw : [] }\n}\n\nexport async function hyperliquidFetchBorrowLendReserveState(args: {\n chainId: number\n token: number\n}): Promise<{ reserve: HyperliquidBorrowLendReserveState }> {\n const reserve = await hyperliquidInfoPost<HyperliquidBorrowLendReserveState>(args.chainId, {\n type: 'borrowLendReserveState',\n token: args.token,\n })\n return { reserve }\n}\n\nexport async function hyperliquidFetchBorrowLendUserState(args: {\n chainId: number\n user: string\n}): Promise<{ state: HyperliquidBorrowLendUserState }> {\n const state = await hyperliquidInfoPost<HyperliquidBorrowLendUserState>(args.chainId, {\n type: 'borrowLendUserState',\n user: args.user,\n })\n return {\n state: {\n tokenToState: Array.isArray(state?.tokenToState) ? state.tokenToState : [],\n health: String(state?.health ?? 'healthy'),\n healthFactor: state?.healthFactor ?? null,\n },\n }\n}\n\nexport async function hyperliquidFetchUserAbstraction(args: {\n chainId: number\n user: string\n}): Promise<{ abstraction: HyperliquidUserAbstraction | string }> {\n const raw = await hyperliquidInfoPost<HyperliquidUserAbstraction | string>(args.chainId, {\n type: 'userAbstraction',\n user: args.user,\n })\n if (typeof raw === 'string' && raw.trim()) return { abstraction: raw.trim() }\n return { abstraction: 'default' }\n}\n","import {\n hyperliquidFetchDexList,\n hyperliquidFetchPerpConciseAnnotations,\n hyperliquidFetchPerpMeta,\n type HyperliquidPerpMarket,\n} from './api.js'\nimport { hyperliquidInferDexFromCoin } from './support.js'\n\nexport type HyperliquidPerpAnnotation = {\n category?: string\n displayName?: string\n keywords?: string[]\n}\n\nexport type HyperliquidMarketSearchHit = {\n coin: string\n symbol: string\n dex?: string\n asset: number\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n displayName?: string\n category?: string\n keywords?: string[]\n matchScore: number\n matchReason: string\n}\n\nfunction normalizeQuery(value: string): string {\n return value.trim().toLowerCase()\n}\n\nfunction compactCoin(value: string): string {\n return normalizeQuery(value).replace(/[^a-z0-9]/g, '')\n}\n\nexport function hyperliquidMarketSymbol(coin: string): string {\n const sep = coin.indexOf(':')\n return sep >= 0 ? coin.slice(sep + 1) : coin\n}\n\nfunction scoreMarketMatch(\n query: string,\n market: HyperliquidPerpMarket,\n annotation?: HyperliquidPerpAnnotation,\n): { score: number; reason: string } | null {\n const q = normalizeQuery(query)\n if (!q) return null\n\n const coin = market.name\n const symbol = hyperliquidMarketSymbol(coin)\n const coinLower = normalizeQuery(coin)\n const symbolLower = normalizeQuery(symbol)\n\n if (coinLower === q) return { score: 100, reason: 'exact coin name' }\n if (symbolLower === q) return { score: 95, reason: 'exact ticker symbol' }\n if (compactCoin(coin) === compactCoin(q)) return { score: 92, reason: 'coin name without separators' }\n\n if (annotation?.displayName) {\n const display = normalizeQuery(annotation.displayName)\n if (display === q) return { score: 94, reason: 'exact display name' }\n if (display.includes(q) || q.includes(display)) return { score: 72, reason: 'display name partial match' }\n }\n\n for (const keyword of annotation?.keywords ?? []) {\n const kw = normalizeQuery(keyword)\n if (!kw) continue\n if (kw === q) return { score: 88, reason: `keyword \"${keyword}\"` }\n if (kw.includes(q) || q.includes(kw)) return { score: 68, reason: `keyword partial \"${keyword}\"` }\n }\n\n if (symbolLower.includes(q) || q.includes(symbolLower)) {\n return { score: 78, reason: 'ticker partial match' }\n }\n\n if (!coin.includes(':') && coinLower.includes(q)) {\n return { score: 65, reason: 'native coin partial match' }\n }\n\n if (market.dex && normalizeQuery(market.dex) === q) {\n return { score: 40, reason: 'dex name match' }\n }\n\n return null\n}\n\nexport async function hyperliquidCollectNativePerpMarkets(args: {\n chainId: number\n}): Promise<{ markets: HyperliquidPerpMarket[]; dexes: Awaited<ReturnType<typeof hyperliquidFetchDexList>>['dexes'] }> {\n const [{ markets }, { dexes }] = await Promise.all([\n hyperliquidFetchPerpMeta({ chainId: args.chainId }),\n hyperliquidFetchDexList({ chainId: args.chainId }),\n ])\n return { markets, dexes }\n}\n\nexport async function hyperliquidCollectHip3StockMarkets(args: {\n chainId: number\n}): Promise<{\n markets: Array<HyperliquidPerpMarket & { displayName?: string; category?: string; keywords?: string[] }>\n dexes: Awaited<ReturnType<typeof hyperliquidFetchDexList>>['dexes']\n}> {\n const [{ dexes }, annotationMap] = await Promise.all([\n hyperliquidFetchDexList({ chainId: args.chainId }),\n hyperliquidFetchPerpConciseAnnotations({ chainId: args.chainId }),\n ])\n const hip3Batches = await Promise.all(\n dexes.map(async (d) => {\n const { markets: dexMarkets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: d.name })\n return dexMarkets.map((m) => {\n const annotation = annotationMap.get(m.name)\n return {\n ...m,\n dex: d.name,\n displayName: annotation?.displayName,\n category: annotation?.category,\n keywords: annotation?.keywords,\n }\n })\n }),\n )\n const markets = hip3Batches.flat()\n return { markets, dexes }\n}\n\nexport async function hyperliquidCollectAllPerpMarkets(args: {\n chainId: number\n dex?: string\n}): Promise<{ markets: HyperliquidPerpMarket[]; dexes: Awaited<ReturnType<typeof hyperliquidFetchDexList>>['dexes'] }> {\n const dexFilter = args.dex?.trim()\n const { dexes } = await hyperliquidFetchDexList({ chainId: args.chainId })\n\n if (dexFilter) {\n const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: dexFilter })\n return { markets: markets.map((m) => ({ ...m, dex: dexFilter })), dexes }\n }\n\n const { markets: nativeMarkets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId })\n const markets = [...nativeMarkets]\n const { markets: hip3 } = await hyperliquidCollectHip3StockMarkets({ chainId: args.chainId })\n markets.push(...hip3)\n return { markets, dexes }\n}\n\nexport async function hyperliquidSearchMarkets(args: {\n chainId: number\n query: string\n dex?: string\n limit?: number\n}): Promise<{ matches: HyperliquidMarketSearchHit[] }> {\n const query = args.query.trim()\n if (!query) return { matches: [] }\n\n const limit = Math.max(1, Math.min(args.limit ?? 20, 50))\n const [{ markets }, annotationMap] = await Promise.all([\n hyperliquidCollectAllPerpMarkets({ chainId: args.chainId, dex: args.dex?.trim() }),\n hyperliquidFetchPerpConciseAnnotations({ chainId: args.chainId }),\n ])\n\n const hits: HyperliquidMarketSearchHit[] = []\n for (const market of markets) {\n const annotation = annotationMap.get(market.name)\n const scored = scoreMarketMatch(query, market, annotation)\n if (!scored || scored.score < 40) continue\n hits.push({\n coin: market.name,\n symbol: hyperliquidMarketSymbol(market.name),\n dex: market.dex,\n asset: market.asset,\n szDecimals: market.szDecimals,\n maxLeverage: market.maxLeverage,\n onlyIsolated: market.onlyIsolated,\n displayName: annotation?.displayName,\n category: annotation?.category,\n keywords: annotation?.keywords,\n matchScore: scored.score,\n matchReason: scored.reason,\n })\n }\n\n hits.sort((a, b) => b.matchScore - a.matchScore || a.coin.localeCompare(b.coin))\n return { matches: hits.slice(0, limit) }\n}\n\n/** Resolve a user ticker/name to a single canonical Hyperliquid coin across all dexes. */\nexport async function hyperliquidResolvePerpMarket(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<HyperliquidPerpMarket & { symbol: string }> {\n const coin = args.coin.trim()\n if (!coin) throw new Error('coin is required')\n\n const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin)\n\n if (dex || !coin.includes(':')) {\n const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex })\n const direct = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase())\n if (direct) {\n return {\n ...direct,\n dex: dex || direct.dex,\n symbol: hyperliquidMarketSymbol(direct.name),\n }\n }\n }\n\n const { matches } = await hyperliquidSearchMarkets({ chainId: args.chainId, query: coin, dex: args.dex, limit: 10 })\n const bestScore = matches[0]?.matchScore ?? 0\n if (bestScore < 60) throw new Error(`Unknown Hyperliquid perp market: ${coin}`)\n\n const top = matches.filter((m) => m.matchScore === bestScore)\n if (top.length === 1) {\n const m = top[0]!\n return {\n name: m.coin,\n asset: m.asset,\n szDecimals: m.szDecimals,\n maxLeverage: m.maxLeverage,\n onlyIsolated: m.onlyIsolated,\n dex: m.dex,\n symbol: m.symbol,\n }\n }\n\n throw new Error(\n `Ambiguous Hyperliquid market for \"${coin}\": ${top.map((m) => m.coin).join(', ')}. Pass dex or full coin name (e.g. xyz:AAPL).`,\n )\n}\n","import { hyperliquidFetchSpotMeta, hyperliquidFetchSpotTokens } from './api.js'\nimport { hyperliquidResolvePerpMarket } from './marketSearch.js'\nimport { HYPERLIQUID_SPOT_ASSET_OFFSET } from './constants.js'\n\n/** Human aliases → HyperCore spot token names used by borrow/lend. */\nconst HYPERLIQUID_LEND_TOKEN_ALIASES: Record<string, string> = {\n btc: 'UBTC',\n ubtc: 'UBTC',\n usdt: 'USDT0',\n usdt0: 'USDT0',\n usdc: 'USDC',\n hype: 'HYPE',\n usdh: 'USDH',\n}\n\nexport function hyperliquidCanonicalLendCoin(coin: string): string {\n const trimmed = coin.trim()\n if (!trimmed) return trimmed\n const aliased = HYPERLIQUID_LEND_TOKEN_ALIASES[trimmed.toLowerCase()]\n return aliased ?? trimmed\n}\n\nexport async function hyperliquidResolvePerpAsset(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<{ asset: number; szDecimals: number; maxLeverage: number }> {\n const resolved = await hyperliquidResolvePerpMarket(args)\n return { asset: resolved.asset, szDecimals: resolved.szDecimals, maxLeverage: resolved.maxLeverage }\n}\n\nexport async function hyperliquidResolveSpotAsset(args: {\n chainId: number\n coin: string\n}): Promise<{ asset: number; szDecimals: number }> {\n const coin = args.coin.trim()\n const { markets } = await hyperliquidFetchSpotMeta({ chainId: args.chainId })\n const hit = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase())\n if (!hit) throw new Error(`Unknown Hyperliquid spot market: ${coin}`)\n return { asset: hit.asset, szDecimals: hit.szDecimals }\n}\n\nexport async function hyperliquidResolveAsset(args: {\n chainId: number\n coin: string\n marketKind: 'perp' | 'spot'\n dex?: string\n}): Promise<{ asset: number; szDecimals: number; maxLeverage?: number }> {\n if (args.marketKind === 'spot') {\n const r = await hyperliquidResolveSpotAsset({ chainId: args.chainId, coin: args.coin })\n return r\n }\n return hyperliquidResolvePerpAsset({ chainId: args.chainId, coin: args.coin, dex: args.dex })\n}\n\nexport function hyperliquidIsSpotAssetId(asset: number): boolean {\n return asset >= HYPERLIQUID_SPOT_ASSET_OFFSET\n}\n\n/** Resolve a Core lend/spot token id (not perp/spot asset id). Accepts USDC, USDT, BTC, UBTC, or a token index. */\nexport async function hyperliquidResolveSpotToken(args: {\n chainId: number\n coin: string\n}): Promise<{ tokenIndex: number; coin: string; szDecimals: number }> {\n const raw = args.coin.trim()\n if (!raw) throw new Error('Hyperliquid lend token is required.')\n const asIndex = Number.parseInt(raw, 10)\n const { tokens } = await hyperliquidFetchSpotTokens({ chainId: args.chainId })\n if (/^\\d+$/.test(raw) && Number.isFinite(asIndex)) {\n const hit = tokens.find((t) => t.tokenIndex === asIndex)\n if (!hit) throw new Error(`Unknown Hyperliquid spot token index: ${raw}`)\n return { tokenIndex: hit.tokenIndex, coin: hit.name, szDecimals: hit.szDecimals }\n }\n const canonical = hyperliquidCanonicalLendCoin(raw)\n const hit = tokens.find((t) => t.name.toLowerCase() === canonical.toLowerCase())\n if (!hit) throw new Error(`Unknown Hyperliquid spot token: ${raw}`)\n return { tokenIndex: hit.tokenIndex, coin: hit.name, szDecimals: hit.szDecimals }\n}\n","import {\n hyperliquidFetchActiveAssetData,\n hyperliquidFetchClearinghouseState,\n hyperliquidFetchDelegations,\n hyperliquidFetchMarketSnapshot,\n hyperliquidFetchOhlcvRange,\n hyperliquidFetchOpenOrders,\n hyperliquidFetchSpotClearinghouseState,\n hyperliquidFetchStakingSummary,\n hyperliquidFetchUserVaultEquities,\n hyperliquidFetchVaultSummaries,\n type HyperliquidActiveAssetContext,\n type HyperliquidOhlcvInterval,\n} from './api.js'\nimport { HYPERLIQUID_HLP_VAULT_ADDRESS } from './support.js'\nimport {\n hyperliquidCollectAllPerpMarkets,\n hyperliquidCollectHip3StockMarkets,\n hyperliquidCollectNativePerpMarkets,\n hyperliquidResolvePerpMarket,\n hyperliquidSearchMarkets,\n} from './marketSearch.js'\n\nexport type HyperliquidUsdClassBalances = {\n spotUsdcAvailable: string\n perpWithdrawable: string\n}\n\nfunction hyperliquidUsdAmountString(value: string | undefined): string {\n const n = Number.parseFloat(String(value ?? '0'))\n if (!Number.isFinite(n) || n <= 0) return '0'\n return n.toFixed(6).replace(/\\.?0+$/, '') || '0'\n}\n\nfunction hyperliquidSpotUsdcAvailable(balances: Array<{ coin?: string; total?: string; hold?: string }>): string {\n const usdc = balances.find((b) => b.coin === 'USDC')\n if (!usdc) return '0'\n const total = Number.parseFloat(String(usdc.total ?? '0'))\n const hold = Number.parseFloat(String(usdc.hold ?? '0'))\n if (!Number.isFinite(total)) return '0'\n const avail = Math.max(0, total - (Number.isFinite(hold) ? hold : 0))\n return hyperliquidUsdAmountString(String(avail))\n}\n\nexport async function hyperliquidFetchUsdClassBalances(args: {\n chainId: number\n executorAddress: string\n}): Promise<{ balances: HyperliquidUsdClassBalances }> {\n const user = args.executorAddress.trim().toLowerCase()\n const [{ state: spotState }, { state: perpState }] = await Promise.all([\n hyperliquidFetchSpotClearinghouseState({ chainId: args.chainId, user }),\n hyperliquidFetchClearinghouseState({ chainId: args.chainId, user }),\n ])\n return {\n balances: {\n spotUsdcAvailable: hyperliquidSpotUsdcAvailable(spotState.balances ?? []),\n perpWithdrawable: hyperliquidUsdAmountString(perpState.withdrawable),\n },\n }\n}\n\nexport type HyperliquidPerpAccountSummary = {\n accountValueUsd: string | null\n totalMarginUsedUsd: string | null\n withdrawableUsd: string | null\n}\n\nexport type HyperliquidOpenMarketContext = {\n account: HyperliquidPerpAccountSummary\n activeAsset: HyperliquidActiveAssetContext\n}\n\nexport type HyperliquidPositionDisplayRow = {\n key: string\n coin: string\n isLong: boolean\n size: string | null\n entryPx: string | null\n positionValueUsd: string | null\n unrealizedPnlUsd: string | null\n liquidationPx: string | null\n leverageLabel: string | null\n maxLeverage: number | null\n marginUsedUsd: string | null\n returnOnEquity: string | null\n}\n\nfunction fmtLeverage(leverage?: { type?: string; value?: number }): string | null {\n if (leverage?.value == null) return null\n const t = leverage.type === 'isolated' ? 'iso' : 'cross'\n return `${leverage.value}x ${t}`\n}\n\nfunction mapPositionRow(p: {\n coin?: string\n szi?: string\n entryPx?: string\n positionValue?: string\n unrealizedPnl?: string\n liquidationPx?: string | null\n leverage?: { type?: string; value?: number }\n maxLeverage?: number\n marginUsed?: string\n returnOnEquity?: string\n}): HyperliquidPositionDisplayRow | null {\n if (!p.coin) return null\n const szi = Number.parseFloat(String(p.szi ?? '0'))\n if (!Number.isFinite(szi) || szi === 0) return null\n return {\n key: `${p.coin}:${szi > 0 ? 'long' : 'short'}`,\n coin: p.coin,\n isLong: szi > 0,\n size: String(Math.abs(szi)),\n entryPx: p.entryPx ?? null,\n positionValueUsd: p.positionValue ?? null,\n unrealizedPnlUsd: p.unrealizedPnl ?? null,\n liquidationPx: p.liquidationPx ?? null,\n leverageLabel: fmtLeverage(p.leverage),\n maxLeverage: typeof p.maxLeverage === 'number' && Number.isFinite(p.maxLeverage) ? p.maxLeverage : null,\n marginUsedUsd: p.marginUsed ?? null,\n returnOnEquity: p.returnOnEquity ?? null,\n }\n}\n\nexport async function hyperliquidFetchOpenMarketContext(args: {\n chainId: number\n executorAddress: string\n coin: string\n dex?: string\n}): Promise<{ context: HyperliquidOpenMarketContext }> {\n const user = args.executorAddress.trim().toLowerCase()\n const resolved = await hyperliquidResolvePerpMarket({\n chainId: args.chainId,\n coin: args.coin,\n dex: args.dex,\n })\n const coin = resolved.name\n const dex = args.dex?.trim() || resolved.dex\n const [{ activeAsset }, { state }] = await Promise.all([\n hyperliquidFetchActiveAssetData({ chainId: args.chainId, user, coin }),\n hyperliquidFetchClearinghouseState({ chainId: args.chainId, user, dex }),\n ])\n return {\n context: {\n activeAsset,\n account: {\n accountValueUsd: state.marginSummary?.accountValue ?? null,\n totalMarginUsedUsd: state.marginSummary?.totalMarginUsed ?? null,\n withdrawableUsd: state.withdrawable ?? null,\n },\n },\n }\n}\n\nexport async function hyperliquidFetchPositionDisplayRows(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}): Promise<{ rows: HyperliquidPositionDisplayRow[] }> {\n const user = args.executorAddress.trim().toLowerCase()\n const { state } = await hyperliquidFetchClearinghouseState({\n chainId: args.chainId,\n user,\n dex: args.dex,\n })\n const rows: HyperliquidPositionDisplayRow[] = []\n for (const ap of state.assetPositions ?? []) {\n const row = mapPositionRow(ap.position ?? {})\n if (row) rows.push(row)\n }\n return { rows }\n}\n\nexport async function hyperliquidFetchOrdersForExecutor(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n return hyperliquidFetchOpenOrders({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n dex: args.dex,\n })\n}\n\n/** MCP: native crypto perp markets only. Pass `dex` to list one HIP-3 builder. Stocks: `ctm_hyperliquid_fetch_stock_markets`. */\nexport async function hyperliquidFetchMarketsSummary(args: { chainId: number; dex?: string }) {\n const dex = args.dex?.trim()\n if (dex) {\n const { markets, dexes } = await hyperliquidCollectAllPerpMarkets({\n chainId: args.chainId,\n dex,\n })\n return { markets, dexes }\n }\n const { markets, dexes } = await hyperliquidCollectNativePerpMarkets({ chainId: args.chainId })\n return { markets, dexes }\n}\n\n/** MCP: HIP-3 / equity stock perps (xyz:AAPL, …). Native crypto is `ctm_hyperliquid_fetch_markets`. */\nexport async function hyperliquidFetchStockMarketsSummary(args: { chainId: number }) {\n return hyperliquidCollectHip3StockMarkets({ chainId: args.chainId })\n}\n\n/** MCP: search markets across all dexes by ticker or name (case-insensitive). */\nexport async function hyperliquidSearchMarketsSummary(args: {\n chainId: number\n query: string\n dex?: string\n limit?: number\n}) {\n return hyperliquidSearchMarkets(args)\n}\n\n/** MCP: open positions for executor. */\nexport async function hyperliquidFetchPositionsForExecutor(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n const { rows } = await hyperliquidFetchPositionDisplayRows(args)\n return { positions: rows }\n}\n\n/** MCP: open orders for executor. */\nexport async function hyperliquidFetchOpenOrdersSummary(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n const { orders } = await hyperliquidFetchOrdersForExecutor(args)\n return { orders }\n}\n\n/** MCP: trading context for a market (account + activeAssetData). */\nexport async function hyperliquidFetchOpenContextSummary(args: {\n chainId: number\n executorAddress: string\n coin: string\n dex?: string\n}) {\n const { context } = await hyperliquidFetchOpenMarketContext(args)\n return { context }\n}\n\n/** MCP: spot vs perp USD balances. */\nexport async function hyperliquidFetchUsdClassBalancesSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const { balances } = await hyperliquidFetchUsdClassBalances(args)\n return { balances }\n}\n\n/** MCP: vault catalog (may be slow on mainnet — large stats payload). */\nexport async function hyperliquidFetchVaultCatalogSummary(args: {\n chainId: number\n executorAddress?: string\n}) {\n const { vaults } = await hyperliquidFetchVaultSummaries({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n })\n return { vaults }\n}\n\n/** MCP: same vault catalog sorted APR descending (HLP first). Use for idle-USDC yield compare. */\nexport async function hyperliquidFetchVaultApysSummary(args: {\n chainId: number\n executorAddress?: string\n}) {\n const { vaults } = await hyperliquidFetchVaultSummaries({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n })\n const hlp = HYPERLIQUID_HLP_VAULT_ADDRESS.toLowerCase()\n const sorted = [...vaults].sort((a, b) => {\n const aHlp = a.vaultAddress.toLowerCase() === hlp\n const bHlp = b.vaultAddress.toLowerCase() === hlp\n if (aHlp && !bHlp) return -1\n if (bHlp && !aHlp) return 1\n return (b.apr ?? -1) - (a.apr ?? -1)\n })\n return {\n vaults: sorted,\n notes:\n 'Hyperliquid vault APR from official stats, sorted APR descending (HLP first). This is a vault return, not HIP-3 stock trading. Do not web-search vault APRs.',\n }\n}\n\n/** MCP: user vault equity rows. */\nexport async function hyperliquidFetchUserVaultEquitiesSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const { rows } = await hyperliquidFetchUserVaultEquities({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { rows }\n}\n\n/** MCP: HYPE staking summary. */\nexport async function hyperliquidFetchStakingSummaryForExecutor(args: {\n chainId: number\n executorAddress: string\n}) {\n const summary = await hyperliquidFetchStakingSummary({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { summary }\n}\n\n/** MCP: HYPE delegations. */\nexport async function hyperliquidFetchDelegationsForExecutor(args: {\n chainId: number\n executorAddress: string\n}) {\n const { delegations } = await hyperliquidFetchDelegations({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { delegations }\n}\n\n/** MCP: mid price + OHLCV candles. */\nexport async function hyperliquidFetchMarketSnapshotSummary(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n candleLimit?: number\n}) {\n const resolved = await hyperliquidResolvePerpMarket({\n chainId: args.chainId,\n coin: args.coin,\n dex: args.dex,\n })\n const snapshot = await hyperliquidFetchMarketSnapshot({\n chainId: args.chainId,\n coin: resolved.name,\n interval: args.interval,\n dex: args.dex?.trim() || resolved.dex,\n candleLimit: args.candleLimit,\n })\n return { snapshot, resolvedCoin: resolved.name, dex: resolved.dex ?? null }\n}\n\n/** MCP: OHLCV history for an explicit lookback or time range. */\nexport async function hyperliquidFetchOhlcvSummary(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n lookbackDays?: number\n lookbackHours?: number\n startTimeMs?: number\n endTimeMs?: number\n}) {\n const resolved = await hyperliquidResolvePerpMarket({\n chainId: args.chainId,\n coin: args.coin,\n dex: args.dex,\n })\n const ohlcv = await hyperliquidFetchOhlcvRange({\n chainId: args.chainId,\n coin: resolved.name,\n interval: args.interval,\n dex: args.dex?.trim() || resolved.dex,\n lookbackDays: args.lookbackDays,\n lookbackHours: args.lookbackHours,\n startTimeMs: args.startTimeMs,\n endTimeMs: args.endTimeMs,\n })\n return { ohlcv, resolvedCoin: resolved.name, dex: resolved.dex ?? null }\n}\n","import {\n hyperliquidFetchAllBorrowLendReserveStates,\n hyperliquidFetchBorrowLendUserState,\n hyperliquidFetchSpotTokens,\n hyperliquidFetchUserAbstraction,\n type HyperliquidBorrowLendReserveState,\n type HyperliquidBorrowLendReserveTuple,\n type HyperliquidBorrowLendUserState,\n type HyperliquidSpotToken,\n} from './api.js'\nimport { hyperliquidResolveSpotToken } from './assets.js'\n\nexport type HyperliquidLendMarketRole = 'collateral' | 'quote'\n\nexport type HyperliquidLendMarketRow = {\n tokenIndex: number\n coin: string\n role: HyperliquidLendMarketRole\n szDecimals: number | null\n supplyYearlyRate: string\n borrowYearlyRate: string\n supplyAprPercent: number | null\n borrowAprPercent: number | null\n utilization: string\n oraclePx: string\n ltv: string\n totalSupplied: string\n totalBorrowed: string\n balance: string\n}\n\nexport type HyperliquidLendPositionRow = {\n tokenIndex: number\n coin: string\n role: HyperliquidLendMarketRole | null\n suppliedBasis: string\n suppliedValue: string\n borrowedBasis: string\n borrowedValue: string\n}\n\nexport type HyperliquidLendPositionsSummary = {\n positions: HyperliquidLendPositionRow[]\n health: string\n healthFactor: string | null\n userAbstraction: string\n manualBorrowEnabled: boolean\n notes: string\n}\n\nfunction yearlyRateToAprPercent(raw: string | undefined): number | null {\n const n = Number.parseFloat(String(raw ?? '').trim())\n if (!Number.isFinite(n)) return null\n return n * 100\n}\n\nfunction decimalGtZero(raw: string | undefined): boolean {\n const n = Number.parseFloat(String(raw ?? '').trim())\n return Number.isFinite(n) && n > 0\n}\n\nexport function hyperliquidLendRoleFromLtv(ltv: string | undefined): HyperliquidLendMarketRole {\n return decimalGtZero(ltv) ? 'collateral' : 'quote'\n}\n\nexport function parseHyperliquidBorrowLendReserveTuples(\n raw: unknown,\n): HyperliquidBorrowLendReserveTuple[] {\n if (!Array.isArray(raw)) return []\n const out: HyperliquidBorrowLendReserveTuple[] = []\n for (const entry of raw) {\n if (!Array.isArray(entry) || entry.length < 2) continue\n const tokenIndex = Number(entry[0])\n const state = entry[1] as HyperliquidBorrowLendReserveState | undefined\n if (!Number.isFinite(tokenIndex) || !state || typeof state !== 'object') continue\n out.push([\n tokenIndex,\n {\n borrowYearlyRate: String(state.borrowYearlyRate ?? '0'),\n supplyYearlyRate: String(state.supplyYearlyRate ?? '0'),\n balance: String(state.balance ?? '0'),\n utilization: String(state.utilization ?? '0'),\n oraclePx: String(state.oraclePx ?? '0'),\n ltv: String(state.ltv ?? '0'),\n totalSupplied: String(state.totalSupplied ?? '0'),\n totalBorrowed: String(state.totalBorrowed ?? '0'),\n },\n ])\n }\n return out\n}\n\nexport function parseHyperliquidBorrowLendUserState(raw: unknown): HyperliquidBorrowLendUserState {\n const o = raw && typeof raw === 'object' ? (raw as Record<string, unknown>) : {}\n const tokenToState: HyperliquidBorrowLendUserState['tokenToState'] = []\n const rows = Array.isArray(o.tokenToState) ? o.tokenToState : []\n for (const entry of rows) {\n if (!Array.isArray(entry) || entry.length < 2) continue\n const tokenIndex = Number(entry[0])\n const state = entry[1] as {\n borrow?: { basis?: string; value?: string }\n supply?: { basis?: string; value?: string }\n }\n if (!Number.isFinite(tokenIndex) || !state || typeof state !== 'object') continue\n tokenToState.push([\n tokenIndex,\n {\n borrow: {\n basis: String(state.borrow?.basis ?? '0.0'),\n value: String(state.borrow?.value ?? '0.0'),\n },\n supply: {\n basis: String(state.supply?.basis ?? '0.0'),\n value: String(state.supply?.value ?? '0.0'),\n },\n },\n ])\n }\n return {\n tokenToState,\n health: String(o.health ?? 'healthy'),\n healthFactor: o.healthFactor == null ? null : String(o.healthFactor),\n }\n}\n\nexport function mapHyperliquidLendMarketRows(args: {\n reserves: HyperliquidBorrowLendReserveTuple[]\n tokens: HyperliquidSpotToken[]\n}): HyperliquidLendMarketRow[] {\n const tokenByIndex = new Map(args.tokens.map((t) => [t.tokenIndex, t]))\n return args.reserves.map(([tokenIndex, state]) => {\n const token = tokenByIndex.get(tokenIndex)\n const role = hyperliquidLendRoleFromLtv(state.ltv)\n return {\n tokenIndex,\n coin: token?.name ?? `token:${tokenIndex}`,\n role,\n szDecimals: token?.szDecimals ?? null,\n supplyYearlyRate: state.supplyYearlyRate,\n borrowYearlyRate: state.borrowYearlyRate,\n supplyAprPercent: yearlyRateToAprPercent(state.supplyYearlyRate),\n borrowAprPercent: yearlyRateToAprPercent(state.borrowYearlyRate),\n utilization: state.utilization,\n oraclePx: state.oraclePx,\n ltv: state.ltv,\n totalSupplied: state.totalSupplied,\n totalBorrowed: state.totalBorrowed,\n balance: state.balance,\n }\n })\n}\n\nexport function hyperliquidManualBorrowEnabled(abstraction: string): boolean {\n return abstraction.trim() !== 'portfolioMargin'\n}\n\n/** MCP: all Core lend reserves with current supply/borrow APR. */\nexport async function hyperliquidFetchLendMarketsSummary(args: { chainId: number }) {\n const [{ reserves }, { tokens }] = await Promise.all([\n hyperliquidFetchAllBorrowLendReserveStates({ chainId: args.chainId }),\n hyperliquidFetchSpotTokens({ chainId: args.chainId }),\n ])\n const markets = mapHyperliquidLendMarketRows({\n reserves: parseHyperliquidBorrowLendReserveTuples(reserves),\n tokens,\n })\n return {\n markets,\n notes:\n 'Hyperliquid Core lend yearly rates are APR (supplyYearlyRate / borrowYearlyRate), not APY. Collateral (HYPE, UBTC) does not earn supply interest. Quote supply (USDC, USDT0, USDH) earns utilization APR but does not increase borrow capacity. Rates update hourly.',\n }\n}\n\n/** MCP: user Core lend positions, health, and whether manual borrow is enabled. */\nexport async function hyperliquidFetchLendPositionsSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const user = args.executorAddress.trim().toLowerCase()\n const [{ state }, { abstraction }, { tokens }, { reserves }] = await Promise.all([\n hyperliquidFetchBorrowLendUserState({ chainId: args.chainId, user }),\n hyperliquidFetchUserAbstraction({ chainId: args.chainId, user }),\n hyperliquidFetchSpotTokens({ chainId: args.chainId }),\n hyperliquidFetchAllBorrowLendReserveStates({ chainId: args.chainId }),\n ])\n const parsed = parseHyperliquidBorrowLendUserState(state)\n const tokenByIndex = new Map(tokens.map((t) => [t.tokenIndex, t]))\n const roleByIndex = new Map(\n parseHyperliquidBorrowLendReserveTuples(reserves).map(([idx, s]) => [idx, hyperliquidLendRoleFromLtv(s.ltv)]),\n )\n const positions: HyperliquidLendPositionRow[] = parsed.tokenToState\n .filter(([, s]) => decimalGtZero(s.supply.value) || decimalGtZero(s.borrow.value))\n .map(([tokenIndex, s]) => ({\n tokenIndex,\n coin: tokenByIndex.get(tokenIndex)?.name ?? `token:${tokenIndex}`,\n role: roleByIndex.get(tokenIndex) ?? null,\n suppliedBasis: s.supply.basis,\n suppliedValue: s.supply.value,\n borrowedBasis: s.borrow.basis,\n borrowedValue: s.borrow.value,\n }))\n const manualBorrowEnabled = hyperliquidManualBorrowEnabled(abstraction)\n const summary: HyperliquidLendPositionsSummary = {\n positions,\n health: parsed.health,\n healthFactor: parsed.healthFactor,\n userAbstraction: abstraction,\n manualBorrowEnabled,\n notes: manualBorrowEnabled\n ? 'Manual borrow is available on this account. Portfolio-margin accounts use automated borrow instead.'\n : 'Portfolio-margin account: borrowing is automated and the manual borrow action is disabled. Supply/withdraw/repay may still apply.',\n }\n return summary\n}\n\nexport async function hyperliquidResolveLendTokenForChain(args: {\n chainId: number\n coin: string\n}): Promise<{ tokenIndex: number; coin: string; szDecimals: number }> {\n return hyperliquidResolveSpotToken({ chainId: args.chainId, coin: args.coin })\n}\n","import { encodeAbiParameters, encodeFunctionData, parseAbi, type Hex } from 'viem'\nimport {\n HYPERLIQUID_CORE_WRITER_ADDRESS,\n HYPERLIQUID_TIF,\n type HyperliquidTifKey,\n} from './constants.js'\n\nconst coreWriterAbi = parseAbi(['function sendRawAction(bytes data) external'])\n\nconst ACTION_LIMIT_ORDER = 1\nconst ACTION_VAULT_TRANSFER = 2\nconst ACTION_TOKEN_DELEGATE = 3\nconst ACTION_STAKING_DEPOSIT = 4\nconst ACTION_STAKING_WITHDRAW = 5\nconst ACTION_USD_CLASS_TRANSFER = 7\nconst ACTION_CANCEL_BY_OID = 10\nconst ACTION_CANCEL_BY_CLOID = 11\n\nfunction encodeActionHeader(actionId: number): Hex {\n const idHex = actionId.toString(16).padStart(6, '0')\n return `0x01${idHex}` as Hex\n}\n\nfunction encodeCoreWriterCalldata(actionId: number, paramsEncoded: Hex): Hex {\n const header = encodeActionHeader(actionId).slice(2)\n const params = paramsEncoded.startsWith('0x') ? paramsEncoded.slice(2) : paramsEncoded\n const actionBytes = `0x${header}${params}` as Hex\n return encodeFunctionData({\n abi: coreWriterAbi,\n functionName: 'sendRawAction',\n args: [actionBytes],\n })\n}\n\n/** Hyperliquid CoreWriter uses 1e8 fixed-point for prices and sizes. */\nexport function hyperliquidEncodePx8(human: string | number): bigint {\n const n = typeof human === 'number' ? human : Number.parseFloat(String(human).trim())\n if (!Number.isFinite(n) || n < 0) throw new Error('Invalid price or size for Hyperliquid encoding.')\n return BigInt(Math.round(n * 1e8))\n}\n\n/** USD notional amounts on HyperCore typically use 6 decimals. */\nexport function hyperliquidEncodeUsd6(human: string | number): bigint {\n const n = typeof human === 'number' ? human : Number.parseFloat(String(human).trim())\n if (!Number.isFinite(n) || n < 0) throw new Error('Invalid USD amount for Hyperliquid encoding.')\n return BigInt(Math.round(n * 1e6))\n}\n\n/** HYPE / token wei on L1 actions (uint64). */\nexport function hyperliquidEncodeWei8(human: string | number): bigint {\n return hyperliquidEncodePx8(human)\n}\n\nexport function hyperliquidResolveTif(tif: HyperliquidTifKey | string): number {\n const key = String(tif).trim().toLowerCase() as HyperliquidTifKey\n const v = HYPERLIQUID_TIF[key]\n if (v == null) throw new Error(`Unknown time-in-force: ${tif}. Use alo, gtc, or ioc.`)\n return v\n}\n\nexport function buildCoreWriterLimitOrderCalldata(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: HyperliquidTifKey\n cloid?: bigint\n}): Hex {\n const params = encodeAbiParameters(\n [\n { type: 'uint32' },\n { type: 'bool' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'bool' },\n { type: 'uint8' },\n { type: 'uint128' },\n ],\n [\n args.asset,\n args.isBuy,\n hyperliquidEncodePx8(args.limitPxHuman),\n hyperliquidEncodePx8(args.szHuman),\n Boolean(args.reduceOnly),\n hyperliquidResolveTif(args.tif ?? 'gtc'),\n args.cloid ?? 0n,\n ],\n )\n return encodeCoreWriterCalldata(ACTION_LIMIT_ORDER, params)\n}\n\nexport function buildCoreWriterCancelByOidCalldata(args: { asset: number; oid: bigint | number }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint32' }, { type: 'uint64' }],\n [args.asset, BigInt(args.oid)],\n )\n return encodeCoreWriterCalldata(ACTION_CANCEL_BY_OID, params)\n}\n\nexport function buildCoreWriterCancelByCloidCalldata(args: { asset: number; cloid: bigint }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint32' }, { type: 'uint128' }],\n [args.asset, args.cloid],\n )\n return encodeCoreWriterCalldata(ACTION_CANCEL_BY_CLOID, params)\n}\n\nexport function buildCoreWriterUsdClassTransferCalldata(args: { usdHuman: string; toPerp: boolean }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint64' }, { type: 'bool' }],\n [hyperliquidEncodeUsd6(args.usdHuman), args.toPerp],\n )\n return encodeCoreWriterCalldata(ACTION_USD_CLASS_TRANSFER, params)\n}\n\nexport function buildCoreWriterVaultTransferCalldata(args: {\n vault: `0x${string}`\n isDeposit: boolean\n usdHuman: string\n}): Hex {\n const params = encodeAbiParameters(\n [{ type: 'address' }, { type: 'bool' }, { type: 'uint64' }],\n [args.vault, args.isDeposit, hyperliquidEncodeUsd6(args.usdHuman)],\n )\n return encodeCoreWriterCalldata(ACTION_VAULT_TRANSFER, params)\n}\n\nexport function buildCoreWriterStakingDepositCalldata(args: { hypeHuman: string }): Hex {\n const params = encodeAbiParameters([{ type: 'uint64' }], [hyperliquidEncodeWei8(args.hypeHuman)])\n return encodeCoreWriterCalldata(ACTION_STAKING_DEPOSIT, params)\n}\n\nexport function buildCoreWriterStakingWithdrawCalldata(args: { hypeHuman: string }): Hex {\n const params = encodeAbiParameters([{ type: 'uint64' }], [hyperliquidEncodeWei8(args.hypeHuman)])\n return encodeCoreWriterCalldata(ACTION_STAKING_WITHDRAW, params)\n}\n\nexport function buildCoreWriterTokenDelegateCalldata(args: {\n validator: `0x${string}`\n hypeHuman: string\n isUndelegate: boolean\n}): Hex {\n const params = encodeAbiParameters(\n [{ type: 'address' }, { type: 'uint64' }, { type: 'bool' }],\n [args.validator, hyperliquidEncodeWei8(args.hypeHuman), args.isUndelegate],\n )\n return encodeCoreWriterCalldata(ACTION_TOKEN_DELEGATE, params)\n}\n\nexport function coreWriterStep(data: Hex) {\n return {\n to: HYPERLIQUID_CORE_WRITER_ADDRESS as `0x${string}`,\n data,\n value: 0n,\n }\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { encode as encodeMsgpack } from '@msgpack/msgpack'\nimport { keccak256, type Hex } from 'viem'\n\nexport type HyperliquidL1Action = Record<string, unknown>\n\nconst EXCHANGE_DOMAIN = {\n name: 'Exchange',\n version: '1',\n chainId: 1337,\n verifyingContract: '0x0000000000000000000000000000000000000000',\n} as const\n\nconst AGENT_TYPES = {\n Agent: [\n { name: 'source', type: 'string' },\n { name: 'connectionId', type: 'bytes32' },\n ],\n} as const\n\n/**\n * Normalize values for Hyperliquid wire msgpack (matches @nktkas/hyperliquid signing).\n */\nfunction adjustMsgpackValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(adjustMsgpackValue)\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(value)) {\n const entry = (value as Record<string, unknown>)[key]\n if (entry !== undefined) result[key] = adjustMsgpackValue(entry)\n }\n return result\n }\n if (typeof value === 'number' && Number.isInteger(value) && (value >= 0x100000000 || value < -0x80000000)) {\n return BigInt(value)\n }\n return value\n}\n\nfunction toUint64Bytes(n: number): Uint8Array {\n const bytes = new Uint8Array(8)\n new DataView(bytes.buffer).setBigUint64(0, BigInt(n))\n return bytes\n}\n\nfunction concatBytes(...parts: Uint8Array[]): Uint8Array {\n const total = parts.reduce((sum, p) => sum + p.length, 0)\n const out = new Uint8Array(total)\n let offset = 0\n for (const p of parts) {\n out.set(p, offset)\n offset += p.length\n }\n return out\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const h = hex.startsWith('0x') ? hex.slice(2) : hex\n const bytes = new Uint8Array(h.length / 2)\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16)\n }\n return bytes\n}\n\nexport function createHyperliquidL1ActionHash(args: {\n action: HyperliquidL1Action\n nonce: number\n vaultAddress?: Hex\n expiresAfter?: number\n}): Hex {\n const { action, nonce, vaultAddress, expiresAfter } = args\n const actionBytes = encodeMsgpack(adjustMsgpackValue(action))\n const nonceBytes = toUint64Bytes(nonce)\n const vaultMarker = vaultAddress ? new Uint8Array([1]) : new Uint8Array([0])\n const vaultBytes = vaultAddress ? hexToBytes(vaultAddress) : new Uint8Array()\n const expiresMarker = expiresAfter !== undefined ? new Uint8Array([0]) : new Uint8Array()\n const expiresBytes = expiresAfter !== undefined ? toUint64Bytes(expiresAfter) : new Uint8Array()\n const bytes = concatBytes(actionBytes, nonceBytes, vaultMarker, vaultBytes, expiresMarker, expiresBytes)\n return keccak256(bytes)\n}\n\nexport function buildHyperliquidAgentTypedData(args: {\n action: HyperliquidL1Action\n nonce: number\n isTestnet?: boolean\n vaultAddress?: Hex\n expiresAfter?: number\n}) {\n const connectionId = createHyperliquidL1ActionHash(args)\n const source = args.isTestnet ? 'b' : 'a'\n return {\n domain: EXCHANGE_DOMAIN,\n types: AGENT_TYPES,\n primaryType: 'Agent' as const,\n message: {\n source,\n connectionId,\n },\n connectionId,\n nonce: args.nonce,\n action: args.action,\n }\n}\n\nexport type HyperliquidUpdateLeverageAction = {\n type: 'updateLeverage'\n asset: number\n isCross: boolean\n leverage: number\n}\n\nexport function buildHyperliquidUpdateLeverageAction(args: {\n asset: number\n leverage: number\n isCross?: boolean\n}): HyperliquidUpdateLeverageAction {\n const leverage = Math.trunc(args.leverage)\n if (!Number.isFinite(leverage) || leverage < 1) {\n throw new Error('leverage must be a positive integer')\n }\n return {\n type: 'updateLeverage',\n asset: args.asset,\n isCross: args.isCross !== false,\n leverage,\n }\n}\n\nexport type HyperliquidBorrowLendOperation = 'supply' | 'withdraw' | 'repay' | 'borrow'\n\nexport type HyperliquidBorrowLendAction = {\n type: 'borrowLend'\n operation: HyperliquidBorrowLendOperation\n token: number\n amount: string | null\n}\n\nexport function parseHyperliquidBorrowLendAmount(amountHuman: string | null | undefined): string | null {\n if (amountHuman == null) return null\n const trimmed = String(amountHuman).trim()\n if (!trimmed || trimmed.toLowerCase() === 'max') return null\n return hyperliquidFloatToWire(trimmed)\n}\n\nexport function buildHyperliquidBorrowLendAction(args: {\n operation: HyperliquidBorrowLendOperation\n token: number\n amount: string | null\n}): HyperliquidBorrowLendAction {\n const operation = args.operation\n if (operation !== 'supply' && operation !== 'withdraw' && operation !== 'repay' && operation !== 'borrow') {\n throw new Error('operation must be supply, withdraw, repay, or borrow')\n }\n const token = Math.trunc(args.token)\n if (!Number.isFinite(token) || token < 0) {\n throw new Error('token must be a non-negative integer token index')\n }\n return {\n type: 'borrowLend',\n operation,\n token,\n amount: args.amount,\n }\n}\n\nexport type HyperliquidL1Tif = 'Alo' | 'Gtc' | 'Ioc'\nexport type HyperliquidTpslExecMode = 'limit_at_trigger' | 'market'\nexport type HyperliquidOrderGrouping = 'na' | 'normalTpsl' | 'positionTpsl'\n\nexport type HyperliquidOrderWire = {\n a: number\n b: boolean\n p: string\n s: string\n r: boolean\n t: { limit: { tif: HyperliquidL1Tif } } | { trigger: { isMarket: boolean; triggerPx: string; tpsl: 'tp' | 'sl' } }\n c?: string\n}\n\nexport type HyperliquidOrderAction = {\n type: 'order'\n orders: HyperliquidOrderWire[]\n grouping: HyperliquidOrderGrouping\n}\n\n/** Wire-format decimal string for L1 order prices/sizes (matches Python float_to_wire). */\nexport function hyperliquidFloatToWire(value: string | number): string {\n const n = typeof value === 'number' ? value : Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n)) throw new Error('Invalid Hyperliquid wire number.')\n const rounded = n.toFixed(8)\n if (Math.abs(Number.parseFloat(rounded) - n) >= 1e-12) {\n throw new Error(`Hyperliquid wire value ${value} has too many decimal places.`)\n }\n const normalized = Number(rounded === '-0' ? '0' : rounded)\n return String(normalized)\n}\n\nexport function hyperliquidL1TifFromKey(tif: string | undefined): HyperliquidL1Tif {\n const key = String(tif ?? 'gtc').trim().toLowerCase()\n if (key === 'alo') return 'Alo'\n if (key === 'ioc') return 'Ioc'\n if (key === 'gtc') return 'Gtc'\n throw new Error(`Unknown time-in-force: ${tif}. Use alo, gtc, or ioc.`)\n}\n\nexport function buildHyperliquidLimitOrderWire(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: string\n}): HyperliquidOrderWire {\n return {\n a: args.asset,\n b: args.isBuy,\n p: hyperliquidFloatToWire(args.limitPxHuman),\n s: hyperliquidFloatToWire(args.szHuman),\n r: Boolean(args.reduceOnly),\n t: { limit: { tif: hyperliquidL1TifFromKey(args.tif) } },\n }\n}\n\nexport function buildHyperliquidTriggerOrderWire(args: {\n asset: number\n isBuy: boolean\n szHuman: string\n triggerPxHuman: string\n tpsl: 'tp' | 'sl'\n tpslExecMode?: HyperliquidTpslExecMode\n /** Limit px after trigger; defaults to trigger px for limit_at_trigger. */\n limitPxHuman?: string\n}): HyperliquidOrderWire {\n const mode = args.tpslExecMode ?? 'limit_at_trigger'\n const triggerPx = hyperliquidFloatToWire(args.triggerPxHuman)\n const limitPx =\n mode === 'market'\n ? triggerPx\n : hyperliquidFloatToWire(args.limitPxHuman ?? args.triggerPxHuman)\n return {\n a: args.asset,\n b: args.isBuy,\n p: limitPx,\n s: hyperliquidFloatToWire(args.szHuman),\n r: true,\n t: {\n trigger: {\n isMarket: mode === 'market',\n triggerPx,\n tpsl: args.tpsl,\n },\n },\n }\n}\n\nexport function validateHyperliquidTpslGeometry(args: {\n isBuy: boolean\n entryPxHuman: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n}): void {\n const entry = Number.parseFloat(String(args.entryPxHuman).trim())\n const tp =\n args.takeProfitTriggerPxHuman?.trim() != null && args.takeProfitTriggerPxHuman.trim() !== ''\n ? Number.parseFloat(args.takeProfitTriggerPxHuman.trim())\n : null\n const sl =\n args.stopLossTriggerPxHuman?.trim() != null && args.stopLossTriggerPxHuman.trim() !== ''\n ? Number.parseFloat(args.stopLossTriggerPxHuman.trim())\n : null\n if (!Number.isFinite(entry)) throw new Error('Invalid entry limit price for TP/SL validation.')\n if (tp != null && !Number.isFinite(tp)) throw new Error('Invalid take-profit trigger price.')\n if (sl != null && !Number.isFinite(sl)) throw new Error('Invalid stop-loss trigger price.')\n if (args.isBuy) {\n if (sl != null && sl >= entry) {\n throw new Error('Long stop-loss must be below entry price.')\n }\n if (tp != null && tp <= entry) {\n throw new Error('Long take-profit must be above entry price.')\n }\n } else {\n if (sl != null && sl <= entry) {\n throw new Error('Short stop-loss must be above entry price.')\n }\n if (tp != null && tp >= entry) {\n throw new Error('Short take-profit must be below entry price.')\n }\n }\n}\n\nexport function buildHyperliquidNormalTpslOrderWires(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}): HyperliquidOrderWire[] {\n validateHyperliquidTpslGeometry({\n isBuy: args.isBuy,\n entryPxHuman: args.limitPxHuman,\n takeProfitTriggerPxHuman: args.takeProfitTriggerPxHuman,\n stopLossTriggerPxHuman: args.stopLossTriggerPxHuman,\n })\n const orders: HyperliquidOrderWire[] = [\n buildHyperliquidLimitOrderWire({\n asset: args.asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n }),\n ]\n const closeIsBuy = !args.isBuy\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (tp) {\n orders.push(\n buildHyperliquidTriggerOrderWire({\n asset: args.asset,\n isBuy: closeIsBuy,\n szHuman: args.szHuman,\n triggerPxHuman: tp,\n tpsl: 'tp',\n tpslExecMode: args.tpslExecMode,\n }),\n )\n }\n if (sl) {\n orders.push(\n buildHyperliquidTriggerOrderWire({\n asset: args.asset,\n isBuy: closeIsBuy,\n szHuman: args.szHuman,\n triggerPxHuman: sl,\n tpsl: 'sl',\n tpslExecMode: args.tpslExecMode,\n }),\n )\n }\n return orders\n}\n\nexport function buildHyperliquidOrderAction(args: {\n orders: HyperliquidOrderWire[]\n grouping?: HyperliquidOrderGrouping\n}): HyperliquidOrderAction {\n return {\n type: 'order',\n orders: args.orders,\n grouping: args.grouping ?? 'na',\n }\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport { hyperliquidResolveAsset, hyperliquidResolveSpotToken } from './assets.js'\nimport {\n buildHyperliquidAgentTypedData,\n buildHyperliquidBorrowLendAction,\n buildHyperliquidNormalTpslOrderWires,\n buildHyperliquidOrderAction,\n buildHyperliquidUpdateLeverageAction,\n parseHyperliquidBorrowLendAmount,\n type HyperliquidBorrowLendOperation,\n type HyperliquidTpslExecMode,\n} from './l1Signing.js'\nimport type { HyperliquidTifKey } from './constants.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\ntype HyperliquidExchangeMultisignCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n /** Defaults to Date.now() at build time. */\n nonce?: number\n}\n\nexport type HyperliquidUpdateLeverageMultisignArgs = HyperliquidExchangeMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n dex?: string\n leverage: number\n isCross?: boolean\n}\n\nexport type HyperliquidLimitOrderWithTpslMultisignArgs = HyperliquidExchangeMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n dex?: string\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: HyperliquidTifKey\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}\n\nexport async function buildHyperliquidLimitOrderWithTpslMultisign(\n args: HyperliquidLimitOrderWithTpslMultisignArgs,\n) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (!tp && !sl) {\n throw new Error('At least one of takeProfitTriggerPxHuman or stopLossTriggerPxHuman is required for bracket orders.')\n }\n const orderWires = buildHyperliquidNormalTpslOrderWires({\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n takeProfitTriggerPxHuman: tp || undefined,\n stopLossTriggerPxHuman: sl || undefined,\n tpslExecMode: args.tpslExecMode,\n })\n const action = buildHyperliquidOrderAction({\n orders: orderWires,\n grouping: 'normalTpsl',\n })\n const nonce = args.nonce ?? Date.now()\n const isTestnet = args.chainId === 998\n const typed = buildHyperliquidAgentTypedData({ action, nonce, isTestnet })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types: typed.types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'limitOrderWithTpsl',\n coin: args.coin,\n marketKind,\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n takeProfitTriggerPxHuman: tp ?? null,\n stopLossTriggerPxHuman: sl ?? null,\n tpslExecMode: args.tpslExecMode ?? 'limit_at_trigger',\n grouping: 'normalTpsl',\n nonce,\n connectionId: typed.connectionId,\n },\n },\n ],\n })\n}\n\nexport async function buildHyperliquidUpdateLeverageMultisign(args: HyperliquidUpdateLeverageMultisignArgs) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const action = buildHyperliquidUpdateLeverageAction({\n asset,\n leverage: args.leverage,\n isCross: args.isCross,\n })\n const nonce = args.nonce ?? Date.now()\n const isTestnet = args.chainId === 998\n const typed = buildHyperliquidAgentTypedData({ action, nonce, isTestnet })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types: typed.types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'updateLeverage',\n coin: args.coin,\n marketKind,\n asset,\n leverage: action.leverage,\n isCross: action.isCross,\n nonce,\n connectionId: typed.connectionId,\n },\n },\n ],\n })\n}\n\nexport type HyperliquidBorrowLendMultisignArgs = HyperliquidExchangeMultisignCommon & {\n coin: string\n operation: HyperliquidBorrowLendOperation\n /** Human amount; omit / empty / \"max\" for full withdraw or repay. */\n amountHuman?: string | null\n amountMax?: boolean\n}\n\nexport async function buildHyperliquidBorrowLendMultisign(args: HyperliquidBorrowLendMultisignArgs) {\n const { tokenIndex, coin } = await hyperliquidResolveSpotToken({\n chainId: args.chainId,\n coin: args.coin,\n })\n const amount =\n args.amountMax === true ? null : parseHyperliquidBorrowLendAmount(args.amountHuman)\n if (amount == null && args.operation !== 'withdraw' && args.operation !== 'repay' && args.amountMax !== true) {\n throw new Error('amountHuman is required unless amountMax is true (full withdraw/repay).')\n }\n const action = buildHyperliquidBorrowLendAction({\n operation: args.operation,\n token: tokenIndex,\n amount,\n })\n const nonce = args.nonce ?? Date.now()\n const isTestnet = args.chainId === 998\n const typed = buildHyperliquidAgentTypedData({ action, nonce, isTestnet })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types: typed.types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'borrowLend',\n operation: args.operation,\n coin,\n token: tokenIndex,\n amount,\n nonce,\n connectionId: typed.connectionId,\n },\n },\n ],\n })\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { hyperliquidResolveAsset } from './assets.js'\nimport {\n buildCoreWriterCancelByOidCalldata,\n buildCoreWriterLimitOrderCalldata,\n buildCoreWriterUsdClassTransferCalldata,\n coreWriterStep,\n} from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\nimport type { HyperliquidTifKey } from './constants.js'\nimport { buildHyperliquidLimitOrderWithTpslMultisign } from './exchangeMultisign.js'\nimport type { HyperliquidTpslExecMode } from './l1Signing.js'\n\ntype HyperliquidMultisignCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}\n\nexport type HyperliquidLimitOrderArgs = HyperliquidMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: HyperliquidTifKey\n dex?: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}\n\nfunction hasHyperliquidBracketTpsl(args: Pick<\n HyperliquidLimitOrderArgs,\n 'takeProfitTriggerPxHuman' | 'stopLossTriggerPxHuman'\n>): boolean {\n return Boolean(args.takeProfitTriggerPxHuman?.trim() || args.stopLossTriggerPxHuman?.trim())\n}\n\nexport type HyperliquidCancelOrderArgs = HyperliquidMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n oid: number\n dex?: string\n}\n\nexport type HyperliquidUsdClassTransferArgs = HyperliquidMultisignCommon & {\n usdHuman: string\n toPerp: boolean\n}\n\nasync function buildCoreWriterMultisign(\n common: HyperliquidMultisignCommon,\n data: `0x${string}`,\n signatureMeta: Record<string, unknown>,\n) {\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n ...signatureMeta,\n evm: { type: 'hyperliquid_core_writer', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidLimitOrderBatch(args: HyperliquidLimitOrderArgs) {\n if (hasHyperliquidBracketTpsl(args)) {\n if (args.reduceOnly) {\n throw new Error('reduceOnly cannot be combined with takeProfitTriggerPxHuman or stopLossTriggerPxHuman.')\n }\n return buildHyperliquidLimitOrderWithTpslMultisign({\n keyGen: args.keyGen,\n chainId: args.chainId,\n purposeText: args.purposeText,\n coin: args.coin,\n marketKind: args.marketKind,\n dex: args.dex,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n takeProfitTriggerPxHuman: args.takeProfitTriggerPxHuman,\n stopLossTriggerPxHuman: args.stopLossTriggerPxHuman,\n tpslExecMode: args.tpslExecMode,\n })\n }\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const data = buildCoreWriterLimitOrderCalldata({\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n reduceOnly: args.reduceOnly,\n tif: args.tif,\n })\n return buildCoreWriterMultisign(args, data, {\n action: 'limitOrder',\n coin: args.coin,\n marketKind,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n reduceOnly: Boolean(args.reduceOnly),\n tif: args.tif ?? 'gtc',\n asset,\n })\n}\n\nexport type HyperliquidCloseOrderArgs = Omit<HyperliquidLimitOrderArgs, 'isBuy' | 'reduceOnly' | 'marketKind'> & {\n isLong: boolean\n}\n\n/** IoC reduce-only close — inverts side from position direction. */\nexport async function buildEvmMultisignBodyHyperliquidCloseBatch(args: HyperliquidCloseOrderArgs) {\n return buildEvmMultisignBodyHyperliquidLimitOrderBatch({\n ...args,\n marketKind: 'perp',\n isBuy: !args.isLong,\n reduceOnly: true,\n tif: args.tif ?? 'ioc',\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidCancelBatch(args: HyperliquidCancelOrderArgs) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const data = buildCoreWriterCancelByOidCalldata({ asset, oid: args.oid })\n return buildCoreWriterMultisign(args, data, {\n action: 'cancelOrder',\n coin: args.coin,\n marketKind,\n oid: args.oid,\n asset,\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidUsdClassTransferBatch(\n args: HyperliquidUsdClassTransferArgs,\n) {\n const data = buildCoreWriterUsdClassTransferCalldata({\n usdHuman: args.usdHuman,\n toPerp: args.toPerp,\n })\n return buildCoreWriterMultisign(args, data, {\n action: 'usdClassTransfer',\n usdHuman: args.usdHuman,\n toPerp: args.toPerp,\n })\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildCoreWriterVaultTransferCalldata, coreWriterStep } from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\n\ntype HyperliquidVaultCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n vaultAddress: `0x${string}`\n usdHuman: string\n}\n\nexport type HyperliquidVaultDepositArgs = HyperliquidVaultCommon\nexport type HyperliquidVaultWithdrawArgs = HyperliquidVaultCommon\n\nasync function buildVaultMultisign(\n common: HyperliquidVaultCommon,\n isDeposit: boolean,\n) {\n const vault = getAddress(common.vaultAddress)\n const data = buildCoreWriterVaultTransferCalldata({\n vault,\n isDeposit,\n usdHuman: common.usdHuman,\n })\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action: isDeposit ? 'vaultDeposit' : 'vaultWithdraw',\n vault,\n usdHuman: common.usdHuman,\n evm: { type: 'hyperliquid_vault', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidVaultDepositBatch(args: HyperliquidVaultDepositArgs) {\n return buildVaultMultisign(args, true)\n}\n\nexport async function buildEvmMultisignBodyHyperliquidVaultWithdrawBatch(args: HyperliquidVaultWithdrawArgs) {\n return buildVaultMultisign(args, false)\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport {\n buildCoreWriterStakingDepositCalldata,\n buildCoreWriterStakingWithdrawCalldata,\n buildCoreWriterTokenDelegateCalldata,\n coreWriterStep,\n} from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\n\ntype HyperliquidStakingCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n hypeHuman: string\n}\n\nasync function buildStakingMultisign(\n common: HyperliquidStakingCommon,\n data: `0x${string}`,\n action: string,\n extra: Record<string, unknown> = {},\n) {\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action,\n hypeHuman: common.hypeHuman,\n ...extra,\n evm: { type: 'hyperliquid_staking', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidStakeDepositBatch(args: HyperliquidStakingCommon) {\n const data = buildCoreWriterStakingDepositCalldata({ hypeHuman: args.hypeHuman })\n return buildStakingMultisign(args, data, 'stakingDeposit')\n}\n\nexport async function buildEvmMultisignBodyHyperliquidStakeWithdrawBatch(args: HyperliquidStakingCommon) {\n const data = buildCoreWriterStakingWithdrawCalldata({ hypeHuman: args.hypeHuman })\n return buildStakingMultisign(args, data, 'stakingWithdraw')\n}\n\nexport type HyperliquidDelegateArgs = HyperliquidStakingCommon & {\n validator: `0x${string}`\n isUndelegate: boolean\n}\n\nexport async function buildEvmMultisignBodyHyperliquidDelegateBatch(args: HyperliquidDelegateArgs) {\n const validator = getAddress(args.validator)\n const data = buildCoreWriterTokenDelegateCalldata({\n validator,\n hypeHuman: args.hypeHuman,\n isUndelegate: args.isUndelegate,\n })\n return buildStakingMultisign(args, data, args.isUndelegate ? 'undelegate' : 'delegate', { validator })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidDelegateOnlyBatch(\n args: Omit<HyperliquidDelegateArgs, 'isUndelegate'>,\n) {\n return buildEvmMultisignBodyHyperliquidDelegateBatch({ ...args, isUndelegate: false })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidUndelegateBatch(\n args: Omit<HyperliquidDelegateArgs, 'isUndelegate'>,\n) {\n return buildEvmMultisignBodyHyperliquidDelegateBatch({ ...args, isUndelegate: true })\n}\n","import { getAddress, type Address } from 'viem'\n\n/** Minimum Bridge2 deposit; smaller amounts are not credited. */\nexport const HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC = 5\n\n/** Arbitrum One — canonical inbound rail for Hyperliquid mainnet. */\nexport const HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID = 42161 as const\n/** Arbitrum Sepolia — pairs with Hyperliquid testnet (998). */\nexport const HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID = 421614 as const\n\nexport type HyperliquidBridgeArbitrumChainId =\n | typeof HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID\n | typeof HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID\n\nconst BRIDGE_MAINNET = {\n bridge2: '0x2df1c51e09aecf9cacb7bc98cb1742757f163df7',\n usdc: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n label: 'Arbitrum One',\n} as const\n\nconst BRIDGE_TESTNET = {\n bridge2: '0x08cfc1B6b2dCF36A1480b99353A354AA8AC56f89',\n usdc: '0x1baAbB04529D43a73232B713C0FE471f7c7334d5',\n label: 'Arbitrum Sepolia',\n} as const\n\n/** Circle native USDC on HyperEVM (ERC-20), for Assets row gating. */\nexport const HYPERLIQUID_HYPEREVM_USDC_MAINNET = '0xb88339cb7199b77e23db6e890353e22632ba630f' as const\nexport const HYPERLIQUID_HYPEREVM_USDC_TESTNET = '0x2B3370eE501B4a559b57D449569354196457D8Ab' as const\n\n/** EIP-712 domain chainId for user-signed Hyperliquid actions (Python SDK default). */\nexport const HYPERLIQUID_USER_SIGNED_SIGNATURE_CHAIN_ID = '0x66eee' as const\n\nexport const HYPERLIQUID_BRIDGE_ERC20_TRANSFER_FALLBACK_GAS = 80_000n\n\nexport function hyperliquidBridgeArbitrumChainId(hyperEvmChainId: number): HyperliquidBridgeArbitrumChainId | null {\n if (hyperEvmChainId === 999) return HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID\n if (hyperEvmChainId === 998) return HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID\n return null\n}\n\nexport function hyperliquidBridgeConfig(arbitrumChainId: number): {\n bridge2: Address\n usdc: Address\n label: string\n} | null {\n if (arbitrumChainId === HYPERLIQUID_BRIDGE_ARBITRUM_MAINNET_CHAIN_ID) {\n return {\n bridge2: getAddress(BRIDGE_MAINNET.bridge2),\n usdc: getAddress(BRIDGE_MAINNET.usdc),\n label: BRIDGE_MAINNET.label,\n }\n }\n if (arbitrumChainId === HYPERLIQUID_BRIDGE_ARBITRUM_TESTNET_CHAIN_ID) {\n return {\n bridge2: getAddress(BRIDGE_TESTNET.bridge2),\n usdc: getAddress(BRIDGE_TESTNET.usdc),\n label: BRIDGE_TESTNET.label,\n }\n }\n return null\n}\n\nexport function isHyperliquidBridgeArbitrumChainSupported(chainId: number): boolean {\n return hyperliquidBridgeConfig(chainId) != null\n}\n\nexport function isHyperliquidBridgeArbitrumUsdcRow(chainId: number, contractAddress: string): boolean {\n const cfg = hyperliquidBridgeConfig(chainId)\n if (!cfg) return false\n try {\n return getAddress(contractAddress as Address).toLowerCase() === cfg.usdc.toLowerCase()\n } catch {\n return false\n }\n}\n\nexport function isHyperliquidHyperEvmUsdcRow(hyperEvmChainId: number, contractAddress: string): boolean {\n const expected =\n hyperEvmChainId === 999\n ? HYPERLIQUID_HYPEREVM_USDC_MAINNET\n : hyperEvmChainId === 998\n ? HYPERLIQUID_HYPEREVM_USDC_TESTNET\n : null\n if (!expected) return false\n try {\n return getAddress(contractAddress as Address).toLowerCase() === getAddress(expected).toLowerCase()\n } catch {\n return false\n }\n}\n","import { getAddress, type Address } from 'viem'\n\nexport const HYPERLIQUID_USER_SIGNED_DOMAIN = {\n name: 'HyperliquidSignTransaction',\n version: '1',\n verifyingContract: '0x0000000000000000000000000000000000000000',\n} as const\n\nexport const HYPERLIQUID_WITHDRAW_SIGN_TYPES = {\n 'HyperliquidTransaction:Withdraw': [\n { name: 'hyperliquidChain', type: 'string' },\n { name: 'destination', type: 'string' },\n { name: 'amount', type: 'string' },\n { name: 'time', type: 'uint64' },\n ],\n} as const\n\nexport type HyperliquidWithdraw3Action = {\n type: 'withdraw3'\n signatureChainId: `0x${string}`\n hyperliquidChain: 'Mainnet' | 'Testnet'\n destination: string\n amount: string\n time: number\n}\n\nexport function buildHyperliquidWithdraw3Action(args: {\n destination: Address\n amountHuman: string\n isTestnet: boolean\n timeMs?: number\n}): { action: HyperliquidWithdraw3Action; nonce: number } {\n const amount = args.amountHuman.trim()\n if (!amount || !/^\\d+(\\.\\d+)?$/.test(amount.replace(/,/g, ''))) {\n throw new Error('amountHuman must be a positive decimal string')\n }\n if (Number(amount.replace(/,/g, '')) <= 0) {\n throw new Error('amountHuman must be greater than zero')\n }\n const destination = getAddress(args.destination)\n const time = args.timeMs ?? Date.now()\n const hyperliquidChain = args.isTestnet ? 'Testnet' : 'Mainnet'\n const signatureChainId = '0x66eee' as const\n const action: HyperliquidWithdraw3Action = {\n type: 'withdraw3',\n signatureChainId,\n hyperliquidChain,\n destination: destination.toLowerCase(),\n amount,\n time,\n }\n return { action, nonce: time }\n}\n\nexport function buildHyperliquidWithdraw3TypedData(args: {\n action: HyperliquidWithdraw3Action\n}) {\n const chainId = Number.parseInt(args.action.signatureChainId, 16)\n return {\n domain: {\n ...HYPERLIQUID_USER_SIGNED_DOMAIN,\n chainId,\n },\n types: HYPERLIQUID_WITHDRAW_SIGN_TYPES,\n primaryType: 'HyperliquidTransaction:Withdraw' as const,\n message: {\n hyperliquidChain: args.action.hyperliquidChain,\n destination: args.action.destination,\n amount: args.action.amount,\n time: args.action.time,\n },\n }\n}\n","import { encodeFunctionData, getAddress, parseAbi, parseUnits, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport {\n HYPERLIQUID_BRIDGE_ERC20_TRANSFER_FALLBACK_GAS,\n HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC,\n hyperliquidBridgeConfig,\n} from './bridgeConstants.js'\nimport { isHyperliquidChainSupported } from './support.js'\nimport {\n buildHyperliquidWithdraw3Action,\n buildHyperliquidWithdraw3TypedData,\n} from './userSignedSigning.js'\n\nconst erc20TransferAbi = parseAbi(['function transfer(address to, uint256 amount) returns (bool)'])\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\ntype HyperliquidBridgeDepositArgs = {\n keyGen: KeyGenSubsetForPermit\n /** Arbitrum chain id (42161 mainnet, 421614 testnet). */\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n usdHuman: string\n}\n\ntype HyperliquidBridgeWithdrawArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n usdHuman: string\n /** Arbitrum address receiving USDC (defaults to executor). */\n destination?: Address\n executorAddress: Address\n}\n\nfunction parseUsdHumanTo6(usdHuman: string): bigint {\n const trimmed = usdHuman.trim().replace(/,/g, '')\n if (!trimmed || !/^\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new Error('usdHuman must be a positive decimal string')\n }\n return parseUnits(trimmed, 6)\n}\n\nexport async function buildEvmMultisignBodyHyperliquidBridgeDepositBatch(args: HyperliquidBridgeDepositArgs) {\n const cfg = hyperliquidBridgeConfig(args.chainId)\n if (!cfg) throw new Error('chainId must be Arbitrum One (42161) or Arbitrum Sepolia (421614)')\n\n const amountWei = parseUsdHumanTo6(args.usdHuman)\n const minWei = parseUnits(String(HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC), 6)\n if (amountWei < minWei) {\n throw new Error(`Bridge deposit must be at least ${HYPERLIQUID_BRIDGE_MIN_DEPOSIT_USDC} USDC`)\n }\n\n const executor = getAddress(args.executorAddress)\n const data = encodeFunctionData({\n abi: erc20TransferAbi,\n functionName: 'transfer',\n args: [cfg.bridge2, amountWei],\n })\n\n return buildEvmMultisignBatch({\n context: {\n keyGen: args.keyGen,\n chainCategory: 'evm',\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails ?? null,\n executorAddress: executor,\n purposeText: args.purposeText,\n },\n steps: [{ to: cfg.usdc, data, value: 0n, fallbackGas: HYPERLIQUID_BRIDGE_ERC20_TRANSFER_FALLBACK_GAS }],\n destinationAddress: cfg.usdc,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action: 'bridgeDeposit',\n arbitrumChainId: args.chainId,\n usdc: cfg.usdc,\n bridge2: cfg.bridge2,\n usdHuman: args.usdHuman,\n evm: { type: 'hyperliquid_bridge_deposit', version: 1, chainId: String(args.chainId) },\n }),\n })\n}\n\nexport async function buildHyperliquidBridgeWithdrawMultisign(args: HyperliquidBridgeWithdrawArgs) {\n if (!isHyperliquidChainSupported(args.chainId)) {\n throw new Error('chainId must be 999 or 998')\n }\n const isTestnet = args.chainId === 998\n const destination = getAddress(args.destination ?? args.executorAddress)\n const { action, nonce } = buildHyperliquidWithdraw3Action({\n destination,\n amountHuman: args.usdHuman,\n isTestnet,\n })\n const typed = buildHyperliquidWithdraw3TypedData({ action })\n\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n legs: [\n {\n typedData: typed,\n delivery: {\n kind: 'hyperliquid_exchange',\n chainId: args.chainId,\n isTestnet,\n action,\n nonce,\n },\n audit: {\n protocol: 'hyperliquid',\n action: 'bridgeWithdraw',\n usdHuman: args.usdHuman,\n destination,\n nonce,\n hyperliquidChain: action.hyperliquidChain,\n },\n },\n ],\n })\n}\n","import type { HyperliquidFrontendOpenOrder } from './api.js'\nimport type { HyperliquidPositionDisplayRow } from './reads.js'\n\nexport type HyperliquidPendingCloseSummary = {\n pendingCloseSz: number\n pendingClosePct: number\n}\n\nfunction parsePositiveSize(value: string | null | undefined): number | null {\n if (value == null || !String(value).trim()) return null\n const n = Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n) || n <= 0) return null\n return n\n}\n\n/** True when order side closes the given position (long → sell/A, short → buy/B). */\nexport function hyperliquidOrderClosesPosition(\n position: Pick<HyperliquidPositionDisplayRow, 'isLong'>,\n orderSide: string,\n): boolean {\n const side = String(orderSide).trim().toUpperCase()\n return position.isLong ? side === 'A' : side === 'B'\n}\n\n/** Count resting reduce-only or TP/SL trigger orders that would close the position. */\nexport function hyperliquidOrderCountsAsPendingClose(\n order: Pick<HyperliquidFrontendOpenOrder, 'reduceOnly' | 'isTrigger'>,\n): boolean {\n return Boolean(order.reduceOnly) || Boolean(order.isTrigger)\n}\n\nexport function hyperliquidPendingCloseForPosition(args: {\n position: Pick<HyperliquidPositionDisplayRow, 'coin' | 'isLong' | 'size'>\n orders: HyperliquidFrontendOpenOrder[]\n}): HyperliquidPendingCloseSummary {\n const positionSize = parsePositiveSize(args.position.size)\n if (positionSize == null) {\n return { pendingCloseSz: 0, pendingClosePct: 0 }\n }\n let pendingCloseSz = 0\n for (const order of args.orders) {\n if (order.coin !== args.position.coin) continue\n if (!hyperliquidOrderClosesPosition(args.position, order.side)) continue\n if (!hyperliquidOrderCountsAsPendingClose(order)) continue\n const sz = parsePositiveSize(order.sz)\n if (sz != null) pendingCloseSz += sz\n }\n const pendingClosePct = Math.min(100, (pendingCloseSz / positionSize) * 100)\n return { pendingCloseSz, pendingClosePct }\n}\n\nexport function hyperliquidPendingCloseByCoin(args: {\n positions: HyperliquidPositionDisplayRow[]\n orders: HyperliquidFrontendOpenOrder[]\n}): Map<string, HyperliquidPendingCloseSummary> {\n const out = new Map<string, HyperliquidPendingCloseSummary>()\n for (const position of args.positions) {\n out.set(position.key, hyperliquidPendingCloseForPosition({ position, orders: args.orders }))\n }\n return out\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { isHyperliquidChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './constants.js'\nexport * from './api.js'\nexport * from './assets.js'\nexport * from './marketSearch.js'\nexport * from './reads.js'\nexport * from './lendReads.js'\nexport * from './coreWriter.js'\nexport * from './multisign.js'\nexport * from './vaultMultisign.js'\nexport * from './stakingMultisign.js'\nexport * from './l1Signing.js'\nexport * from './exchangeMultisign.js'\nexport * from './bridgeConstants.js'\nexport * from './userSignedSigning.js'\nexport * from './bridgeMultisign.js'\nexport * from './pendingClose.js'\n\nexport const HYPERLIQUID_PROTOCOL_ID = 'hyperliquid'\n\nexport const hyperliquidProtocolModule: ProtocolModule = {\n id: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const chainId = typeof ctx.chainId === 'number' ? ctx.chainId : Number(ctx.chainId)\n return Number.isFinite(chainId) && isHyperliquidChainSupported(chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'erc20' || token.kind === 'native'\n },\n actions: [\n {\n id: 'hyperliquid.limitOrder',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Place a Hyperliquid limit/IoC order via CoreWriter, or L1 normalTpsl bracket when TP/SL triggers are set',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin e.g. BTC' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy/long, false for sell/short' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price' },\n szHuman: { type: 'string', required: true, description: 'Order size in coin units' },\n marketKind: { type: 'string', required: false, description: 'perp (default) or spot' },\n tif: { type: 'string', required: false, description: 'gtc, ioc, or alo' },\n dex: { type: 'string', required: false, description: 'HIP-3 dex name when applicable' },\n takeProfitTriggerPxHuman: { type: 'string', required: false, description: 'TP trigger — enables L1 bracket with SL' },\n stopLossTriggerPxHuman: { type: 'string', required: false, description: 'SL trigger — enables L1 bracket with TP' },\n tpslExecMode: { type: 'string', required: false, description: 'limit_at_trigger (default) or market' },\n },\n },\n {\n id: 'hyperliquid.close',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Close or reduce a perp via IoC reduce-only limit order (CoreWriter)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin' },\n isLong: { type: 'boolean', required: true, description: 'true if closing a long position' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price' },\n szHuman: { type: 'string', required: true, description: 'Size to close in coin units' },\n },\n },\n {\n id: 'hyperliquid.cancel',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel a Hyperliquid open order via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin' },\n oid: { type: 'number', required: true, description: 'Order id from openOrders' },\n },\n },\n {\n id: 'hyperliquid.usdTransfer',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Move USDC between Hyperliquid spot and perp margin accounts',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n toPerp: { type: 'boolean', required: true, description: 'true spot→perp, false perp→spot' },\n },\n },\n {\n id: 'hyperliquid.vaultDeposit',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USD into a Hyperliquid vault',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n vaultAddress: { type: 'string', required: true, description: 'Vault address' },\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n },\n },\n {\n id: 'hyperliquid.vaultWithdraw',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USD from a Hyperliquid vault (includes accrued PnL)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n vaultAddress: { type: 'string', required: true, description: 'Vault address' },\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n },\n },\n {\n id: 'hyperliquid.stake',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake HYPE via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n },\n },\n {\n id: 'hyperliquid.unstake',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Unstake HYPE via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n },\n },\n {\n id: 'hyperliquid.delegate',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Delegate staked HYPE to a validator',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n validator: { type: 'string', required: true, description: 'Validator address' },\n },\n },\n {\n id: 'hyperliquid.bridgeDeposit',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USDC from Arbitrum to Hyperliquid via Bridge2 (ERC20 transfer)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USDC amount (min 5)' },\n },\n },\n {\n id: 'hyperliquid.bridgeWithdraw',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USDC from Hyperliquid to Arbitrum via withdraw3 (EIP-712 /exchange)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USDC amount' },\n destination: { type: 'string', required: false, description: 'Arbitrum recipient (defaults to executor)' },\n },\n },\n {\n id: 'hyperliquid.updateLeverage',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Update per-market cross/isolated leverage via Hyperliquid L1 /exchange (EIP-712)',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin e.g. BTC' },\n leverage: { type: 'number', required: true, description: 'New leverage (1..market max)' },\n isCross: { type: 'boolean', required: false, description: 'true for cross (default), false for isolated' },\n marketKind: { type: 'string', required: false, description: 'perp (default) or spot' },\n },\n },\n {\n id: 'hyperliquid.lend',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description:\n 'Hyperliquid Core borrow/lend via L1 /exchange EIP-712 (supply, withdraw, borrow, repay). Not CoreWriter.',\n commonParams: ['keyGen', 'purposeText'],\n params: {\n coin: { type: 'string', required: true, description: 'Spot token e.g. USDC, USDT, HYPE, BTC/UBTC' },\n operation: { type: 'string', required: true, description: 'supply | withdraw | borrow | repay' },\n amountHuman: { type: 'string', required: false, description: 'Amount; omit or max for full withdraw/repay' },\n amountMax: { type: 'boolean', required: false, description: 'true = full amount (amount null on wire)' },\n },\n },\n {\n id: 'hyperliquid.undelegate',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Undelegate HYPE from a validator',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n validator: { type: 'string', required: true, description: 'Validator address' },\n },\n },\n ],\n}\n\nregisterProtocolModule(hyperliquidProtocolModule)\n"]}