@continuumdao/ctm-mpc-defi 0.2.11 → 0.2.13

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.
Files changed (64) hide show
  1. package/dist/agent/catalog.cjs +137 -51
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +895 -347
  4. package/dist/agent/catalog.js +136 -52
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/morpho/SKILL.md +11 -17
  7. package/dist/chains/evm/index.cjs +1 -1
  8. package/dist/chains/evm/index.cjs.map +1 -1
  9. package/dist/chains/evm/index.js +1 -1
  10. package/dist/chains/evm/index.js.map +1 -1
  11. package/dist/core/index.cjs +1 -1
  12. package/dist/core/index.cjs.map +1 -1
  13. package/dist/core/index.d.ts +1 -1
  14. package/dist/core/index.js +1 -1
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/protocols/evm/aave-v4/index.cjs +1 -1
  21. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  22. package/dist/protocols/evm/aave-v4/index.js +1 -1
  23. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  24. package/dist/protocols/evm/curve-dao/index.cjs +1 -1
  25. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  26. package/dist/protocols/evm/curve-dao/index.js +1 -1
  27. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  28. package/dist/protocols/evm/ethena/index.cjs +1 -1
  29. package/dist/protocols/evm/ethena/index.cjs.map +1 -1
  30. package/dist/protocols/evm/ethena/index.js +1 -1
  31. package/dist/protocols/evm/ethena/index.js.map +1 -1
  32. package/dist/protocols/evm/euler-v2/index.cjs +1 -1
  33. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  34. package/dist/protocols/evm/euler-v2/index.js +1 -1
  35. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  36. package/dist/protocols/evm/gmx/index.cjs +1 -1
  37. package/dist/protocols/evm/gmx/index.cjs.map +1 -1
  38. package/dist/protocols/evm/gmx/index.js +1 -1
  39. package/dist/protocols/evm/gmx/index.js.map +1 -1
  40. package/dist/protocols/evm/hyperliquid/index.cjs +1 -1
  41. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  42. package/dist/protocols/evm/hyperliquid/index.js +1 -1
  43. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  44. package/dist/protocols/evm/lido/index.cjs +1 -1
  45. package/dist/protocols/evm/lido/index.cjs.map +1 -1
  46. package/dist/protocols/evm/lido/index.js +1 -1
  47. package/dist/protocols/evm/lido/index.js.map +1 -1
  48. package/dist/protocols/evm/maple/index.cjs +1 -1
  49. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  50. package/dist/protocols/evm/maple/index.js +1 -1
  51. package/dist/protocols/evm/maple/index.js.map +1 -1
  52. package/dist/protocols/evm/morpho/index.cjs +1 -1
  53. package/dist/protocols/evm/morpho/index.cjs.map +1 -1
  54. package/dist/protocols/evm/morpho/index.js +1 -1
  55. package/dist/protocols/evm/morpho/index.js.map +1 -1
  56. package/dist/protocols/evm/sky/index.cjs +1 -1
  57. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  58. package/dist/protocols/evm/sky/index.js +1 -1
  59. package/dist/protocols/evm/sky/index.js.map +1 -1
  60. package/dist/protocols/evm/uniswap-v4/index.cjs +1 -1
  61. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  62. package/dist/protocols/evm/uniswap-v4/index.js +1 -1
  63. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  64. package/package.json +1 -1
@@ -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/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/hyperliquid/multisign.ts","../../../../src/protocols/evm/hyperliquid/vaultMultisign.ts","../../../../src/protocols/evm/hyperliquid/stakingMultisign.ts","../../../../src/protocols/evm/hyperliquid/index.ts"],"names":["name","markets","gasLimitFromEstimateAndChainConfig","getAddress"],"mappings":"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","file":"index.js","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\nexport const HYPERLIQUID_DEFAULT_LOOKBACK_DAYS = 1\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 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 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 return {\n coin,\n dex,\n interval,\n startTimeMs,\n endTimeMs,\n expectedBars,\n candleCount: candles.length,\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 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 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 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 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\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) => ({ ...m, dex: d.name }))\n }),\n )\n for (const batch of hip3Batches) markets.push(...batch)\n\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 { hyperliquidCollectAllPerpMarkets, hyperliquidResolvePerpMarket, hyperliquidSearchMarkets } 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: perp markets + HIP-3 dex list. When dex is omitted, returns native + all HIP-3 dex markets. */\nexport async function hyperliquidFetchMarketsSummary(args: { chainId: number; dex?: string }) {\n const { markets, dexes } = await hyperliquidCollectAllPerpMarkets({\n chainId: args.chainId,\n dex: args.dex?.trim(),\n })\n return { markets, dexes }\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: 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","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string, 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}\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)\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 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 {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\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: http(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 })\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 { 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'\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}\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 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 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'\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 HyperEVM CoreWriter',\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 },\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.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/coreWriter.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/hyperliquid/multisign.ts","../../../../src/protocols/evm/hyperliquid/vaultMultisign.ts","../../../../src/protocols/evm/hyperliquid/stakingMultisign.ts","../../../../src/protocols/evm/hyperliquid/index.ts"],"names":["name","markets","gasLimitFromEstimateAndChainConfig","getAddress"],"mappings":"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","file":"index.js","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\nexport const HYPERLIQUID_DEFAULT_LOOKBACK_DAYS = 1\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 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 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 return {\n coin,\n dex,\n interval,\n startTimeMs,\n endTimeMs,\n expectedBars,\n candleCount: candles.length,\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 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 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 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 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\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) => ({ ...m, dex: d.name }))\n }),\n )\n for (const batch of hip3Batches) markets.push(...batch)\n\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 { hyperliquidCollectAllPerpMarkets, hyperliquidResolvePerpMarket, hyperliquidSearchMarkets } 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: perp markets + HIP-3 dex list. When dex is omitted, returns native + all HIP-3 dex markets. */\nexport async function hyperliquidFetchMarketsSummary(args: { chainId: number; dex?: string }) {\n const { markets, dexes } = await hyperliquidCollectAllPerpMarkets({\n chainId: args.chainId,\n dex: args.dex?.trim(),\n })\n return { markets, dexes }\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: 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","/** 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}\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)\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 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 {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\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: http(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 })\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 { 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'\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}\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 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 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'\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 HyperEVM CoreWriter',\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 },\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.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"]}