opentool 0.8.20 → 0.8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/store/index.ts","../../../src/adapters/hyperliquid/base.ts","../../../src/adapters/hyperliquid/info.ts","../../../src/adapters/hyperliquid/exchange.ts","../../../src/adapters/hyperliquid/index.ts"],"names":["universe","encodeMsgpack"],"mappings":"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","file":"index.js","sourcesContent":["type StoreStatus =\n | \"submitted\"\n | \"pending\"\n | \"confirmed\"\n | \"failed\"\n | \"cancelled\"\n | \"filled\"\n | \"partial_fill\"\n | \"settled\"\n | \"info\";\n\nexport type StoreAction =\n | \"stake\"\n | \"swap\"\n | \"bridge\"\n | \"order\"\n | \"lend\"\n | \"repay\"\n | \"withdraw\"\n | \"custom\"\n | string;\n\ntype ChainScope =\n | { chainId: number; network?: never }\n | { network: string; chainId?: never }\n | { chainId?: never; network?: never };\n\nexport type StoreEventInput = ChainScope & {\n source: string;\n ref: string;\n status: StoreStatus;\n walletAddress?: `0x${string}`;\n action?: StoreAction;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n};\n\nexport interface StoreOptions {\n baseUrl?: string;\n apiKey?: string;\n fetchFn?: typeof fetch;\n}\n\nexport interface StoreResponse {\n id: string;\n status?: StoreStatus | null;\n}\n\nexport type StoreRetrieveParams = {\n source?: string;\n walletAddress?: `0x${string}`;\n symbol?: string;\n status?: StoreStatus[];\n since?: number;\n until?: number;\n limit?: number;\n cursor?: string;\n history?: boolean;\n};\n\nexport type StoreRetrieveResult = {\n items: Array<\n StoreEventInput & {\n timestamp?: number;\n updatedBy?: string | null;\n signerKeyId?: string | null;\n }\n >;\n cursor?: string | null;\n};\n\nexport type MyToolsResponse = {\n tools: Array<{\n id: string;\n name: string;\n displayName: string;\n description?: string;\n serverUrl: string;\n source: \"internal\" | \"public\";\n appId?: string;\n deploymentId?: string;\n metadata?: unknown;\n }>;\n};\n\nexport type ToolExecuteRequest = {\n appId: string;\n deploymentId: string;\n toolName: string;\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n body?: unknown;\n};\n\nexport type ToolExecuteResponse = {\n ok: boolean;\n status: number;\n data: unknown;\n};\n\nexport type AgentDigestRequest = {\n content: string;\n runAt?: string;\n metadata?: Record<string, unknown>;\n};\nexport class StoreError extends Error {\n constructor(\n message: string,\n public readonly status?: number,\n public readonly causeData?: unknown\n ) {\n super(message);\n this.name = \"StoreError\";\n }\n}\n\nfunction resolveConfig(options?: StoreOptions) {\n const baseUrl = options?.baseUrl ?? process.env.BASE_URL ?? \"https://api.openpond.ai\";\n const apiKey = options?.apiKey ?? process.env.OPENPOND_API_KEY;\n\n if (!baseUrl) {\n throw new StoreError(\"BASE_URL is required to store activity events\");\n }\n if (!apiKey) {\n throw new StoreError(\n \"OPENPOND_API_KEY is required to store activity events\"\n );\n }\n\n const normalizedBaseUrl = baseUrl.replace(/\\/$/, \"\");\n const fetchFn = options?.fetchFn ?? globalThis.fetch;\n if (!fetchFn) {\n throw new StoreError(\"Fetch is not available in this environment\");\n }\n\n return { baseUrl: normalizedBaseUrl, apiKey, fetchFn };\n}\n\nasync function requestJson(\n url: string,\n options: StoreOptions | undefined,\n init: RequestInit\n): Promise<unknown> {\n const { apiKey, fetchFn } = resolveConfig(options);\n const response = await fetchFn(url, {\n ...init,\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n ...(init.headers ?? {}),\n },\n });\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n if (response.status === 204) {\n return null;\n }\n\n try {\n return await response.json();\n } catch {\n return await response.text().catch(() => null);\n }\n}\n\n/**\n * Store a generic activity event (onchain tx, Hyperliquid order, etc.) in OpenPond.\n */\nexport async function store(\n input: StoreEventInput,\n options?: StoreOptions\n): Promise<StoreResponse> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = `${baseUrl}/apps/positions/tx`;\n\n let response: Response;\n try {\n response = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n body: JSON.stringify(input),\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n try {\n const data = (await response.json()) as Partial<StoreResponse>;\n return {\n id: data.id ?? \"\",\n status: data.status ?? null,\n };\n } catch {\n // Response is optional; return empty success\n return { id: \"\", status: null };\n }\n}\n\n/**\n * Retrieve stored activity events for an app.\n */\nexport async function retrieve(\n params?: StoreRetrieveParams,\n options?: StoreOptions\n): Promise<StoreRetrieveResult> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = new URL(`${baseUrl}/apps/positions/tx`);\n if (params?.source) url.searchParams.set(\"source\", params.source);\n if (params?.walletAddress) url.searchParams.set(\"walletAddress\", params.walletAddress);\n if (params?.symbol) url.searchParams.set(\"symbol\", params.symbol);\n if (params?.status?.length) url.searchParams.set(\"status\", params.status.join(\",\"));\n if (typeof params?.since === \"number\") url.searchParams.set(\"since\", params.since.toString());\n if (typeof params?.until === \"number\") url.searchParams.set(\"until\", params.until.toString());\n if (typeof params?.limit === \"number\") url.searchParams.set(\"limit\", params.limit.toString());\n if (params?.cursor) url.searchParams.set(\"cursor\", params.cursor);\n if (params?.history) url.searchParams.set(\"history\", \"true\");\n\n let response: Response;\n try {\n response = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store retrieve failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n const data = (await response.json().catch(() => null)) as StoreRetrieveResult | null;\n if (!data) {\n return { items: [], cursor: null };\n }\n return data;\n}\n\nexport async function getMyTools(options?: StoreOptions): Promise<MyToolsResponse> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/tools`;\n const data = (await requestJson(url, options, { method: \"GET\" })) as MyToolsResponse;\n return data;\n}\n\nexport async function getMyPerformance(options?: StoreOptions): Promise<unknown> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/performance`;\n return requestJson(url, options, { method: \"GET\" });\n}\n\nexport async function postAgentDigest(\n input: AgentDigestRequest,\n options?: StoreOptions\n): Promise<unknown> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/agent/digest`;\n return requestJson(url, options, {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n}\n\nexport async function executeTool(\n input: ToolExecuteRequest,\n options?: StoreOptions\n): Promise<ToolExecuteResponse> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/tools/execute`;\n const data = (await requestJson(url, options, {\n method: \"POST\",\n body: JSON.stringify(input),\n })) as ToolExecuteResponse;\n return data;\n}\n","import { encode as encodeMsgpack } from \"@msgpack/msgpack\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { bytesToHex, concatBytes, hexToBytes } from \"@noble/hashes/utils\";\nimport type { WalletFullContext } from \"../../wallet/types\";\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\nexport const API_BASES = {\n mainnet: \"https://api.hyperliquid.xyz\",\n testnet: \"https://api.hyperliquid-testnet.xyz\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const HL_ENDPOINT = {\n mainnet: \"https://api.hyperliquid.xyz\",\n testnet: \"https://api.hyperliquid-testnet.xyz\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const HL_CHAIN_LABEL = {\n mainnet: \"Mainnet\",\n testnet: \"Testnet\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const HL_BRIDGE_ADDRESSES: Record<\n HyperliquidEnvironment,\n `0x${string}`\n> = {\n mainnet: \"0x2df1c51e09aecf9cacb7bc98cb1742757f163df7\",\n testnet: \"0x08cfc1b6b2dcf36a1480b99353a354aa8ac56f89\",\n};\n\nexport const HL_USDC_ADDRESSES: Record<HyperliquidEnvironment, `0x${string}`> =\n {\n mainnet: \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\",\n testnet: \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n };\n\nexport const HL_SIGNATURE_CHAIN_ID = {\n mainnet: \"0xa4b1\",\n testnet: \"0x66eee\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const EXCHANGE_TYPED_DATA_DOMAIN = {\n name: \"Exchange\",\n version: \"1\",\n chainId: 1337,\n verifyingContract: \"0x0000000000000000000000000000000000000000\" as const,\n};\n\nexport const ZERO_ADDRESS =\n \"0x0000000000000000000000000000000000000000\" as const;\nexport const MIN_DEPOSIT_USDC = 5;\nexport const BUILDER_CODE: HyperliquidBuilderFee = {\n address: \"0x4b2aec4F91612849d6e20C9c1881FabB1A48cd12\",\n fee: 100,\n};\n\nconst metaCache = new Map<\n string,\n { fetchedAt: number; universe: MetaResponse[\"universe\"] }\n>();\nconst perpDexsCache = new Map<\n string,\n { fetchedAt: number; dexs: PerpDexsResponse }\n>();\n\nexport type HyperliquidEnvironment = \"mainnet\" | \"testnet\";\nexport type HyperliquidTimeInForce =\n | \"Gtc\"\n | \"Ioc\"\n | \"Alo\"\n | \"FrontendMarket\"\n | \"LiquidationMarket\";\nexport type HyperliquidGrouping = \"na\" | \"normalTpsl\" | \"positionTpsl\";\nexport type HyperliquidTriggerType = \"tp\" | \"sl\";\n\nexport interface HyperliquidTriggerOptions {\n triggerPx: string | number | bigint;\n isMarket?: boolean;\n tpsl: HyperliquidTriggerType;\n}\n\nexport interface HyperliquidBuilderFee {\n address: `0x${string}`;\n /**\n * Fee in tenths of basis points (10 = 1bp = 0.01%). Max defaults to 0.1% (100).\n */\n fee: number;\n}\n\nexport interface HyperliquidOrderIntent {\n symbol: string;\n side: \"buy\" | \"sell\";\n price: string | number | bigint;\n size: string | number | bigint;\n tif?: HyperliquidTimeInForce;\n reduceOnly?: boolean;\n clientId?: `0x${string}`;\n trigger?: HyperliquidTriggerOptions;\n}\n\ntype MetaResponse = {\n universe: Array<{\n name: string;\n }>;\n};\n\ntype PerpDexsResponse = Array<{ name: string } | null>;\n\nexport type ExchangeOrderAction = {\n type: \"order\";\n orders: Array<{\n a: number;\n b: boolean;\n p: string;\n s: string;\n r: boolean;\n t:\n | { limit: { tif: HyperliquidTimeInForce } }\n | {\n trigger: {\n isMarket: boolean;\n triggerPx: string;\n tpsl: HyperliquidTriggerType;\n };\n };\n c?: `0x${string}`;\n }>;\n grouping: HyperliquidGrouping;\n builder?: {\n b: `0x${string}`;\n f: number;\n };\n};\n\nexport type ExchangeSignature = {\n r: `0x${string}`;\n s: `0x${string}`;\n v: 27 | 28;\n};\n\nexport type HyperliquidUserPortfolioMarginAction = {\n type: \"userPortfolioMargin\";\n enabled: boolean;\n hyperliquidChain: string;\n signatureChainId: string;\n user: `0x${string}`;\n nonce: number;\n};\n\nexport type HyperliquidExchangeResponse<T = unknown> = {\n status: string;\n response?: {\n type: string;\n data?: T;\n };\n error?: string;\n};\n\nexport type NonceSource = () => number;\n\nexport class HyperliquidApiError extends Error {\n constructor(message: string, public readonly response: unknown) {\n super(message);\n this.name = \"HyperliquidApiError\";\n }\n}\n\nexport class HyperliquidGuardError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"HyperliquidGuardError\";\n }\n}\n\nexport class HyperliquidTermsError extends HyperliquidGuardError {\n constructor(\n message = \"Hyperliquid terms must be accepted before proceeding.\"\n ) {\n super(message);\n this.name = \"HyperliquidTermsError\";\n }\n}\n\nexport class HyperliquidBuilderApprovalError extends HyperliquidGuardError {\n constructor(\n message = \"Hyperliquid builder approval is required before using builder codes.\"\n ) {\n super(message);\n this.name = \"HyperliquidBuilderApprovalError\";\n }\n}\n\nexport function createMonotonicNonceFactory(\n start: number = Date.now()\n): NonceSource {\n let last = start;\n return () => {\n const now = Date.now();\n if (now > last) {\n last = now;\n } else {\n last += 1;\n }\n return last;\n };\n}\n\nexport async function getUniverse(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n dex?: string;\n}): Promise<MetaResponse[\"universe\"]> {\n const dexKey = args.dex ? args.dex.trim().toLowerCase() : \"\";\n const cacheKey = `${args.environment}:${args.baseUrl}:${dexKey}`;\n const cached = metaCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {\n return cached.universe;\n }\n\n const response = await args.fetcher(`${args.baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(\n dexKey ? { type: \"meta\", dex: dexKey } : { type: \"meta\" }\n ),\n });\n\n const json = (await response.json().catch(() => null)) as MetaResponse | null;\n if (!response.ok || !json?.universe) {\n throw new HyperliquidApiError(\n \"Unable to load Hyperliquid metadata.\",\n json ?? { status: response.status }\n );\n }\n\n metaCache.set(cacheKey, { fetchedAt: Date.now(), universe: json.universe });\n return json.universe;\n}\n\nexport function resolveAssetIndex(\n symbol: string,\n universe: MetaResponse[\"universe\"]\n): number {\n const [raw] = symbol.split(\"-\");\n const target = raw.trim();\n const index = universe.findIndex(\n (entry) => entry.name.toUpperCase() === target.toUpperCase()\n );\n if (index === -1) {\n throw new Error(`Unknown Hyperliquid asset symbol: ${symbol}`);\n }\n return index;\n}\n\nasync function getPerpDexs(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n}): Promise<PerpDexsResponse> {\n const cacheKey = `${args.environment}:${args.baseUrl}`;\n const cached = perpDexsCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {\n return cached.dexs;\n }\n\n const response = await args.fetcher(`${args.baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"perpDexs\" }),\n });\n const json = (await response.json().catch(() => null)) as\n | PerpDexsResponse\n | null;\n if (!response.ok || !Array.isArray(json)) {\n throw new HyperliquidApiError(\n \"Unable to load Hyperliquid perp dex metadata.\",\n json ?? { status: response.status }\n );\n }\n\n perpDexsCache.set(cacheKey, { fetchedAt: Date.now(), dexs: json });\n return json;\n}\n\nasync function resolveDexIndex(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n dex: string;\n}): Promise<number> {\n const dexs = await getPerpDexs(args);\n const target = args.dex.trim().toLowerCase();\n const index = dexs.findIndex(\n (entry) => entry?.name?.toLowerCase() === target\n );\n if (index === -1) {\n throw new Error(`Unknown Hyperliquid perp dex: ${args.dex}`);\n }\n return index;\n}\n\nexport async function resolveHyperliquidAssetIndex(args: {\n symbol: string;\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n}): Promise<number> {\n const trimmed = args.symbol.trim();\n if (!trimmed) {\n throw new Error(\"Hyperliquid symbol must be a non-empty string.\");\n }\n\n const separator = trimmed.indexOf(\":\");\n if (separator > 0) {\n const dex = trimmed.slice(0, separator).trim();\n if (!dex) {\n throw new Error(\"Hyperliquid dex name is required.\");\n }\n const dexIndex = await resolveDexIndex({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n dex,\n });\n const universe = await getUniverse({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n dex,\n });\n const assetIndex = universe.findIndex(\n (entry) => entry.name.toUpperCase() === trimmed.toUpperCase()\n );\n if (assetIndex === -1) {\n throw new Error(`Unknown Hyperliquid asset symbol: ${trimmed}`);\n }\n return 100000 + dexIndex * 10000 + assetIndex;\n }\n\n const universe = await getUniverse({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n });\n return resolveAssetIndex(trimmed, universe);\n}\n\nexport function toApiDecimal(value: string | number | bigint): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n\n if (!Number.isFinite(value)) {\n throw new Error(\"Numeric values must be finite.\");\n }\n\n const asString = value.toString();\n if (/e/i.test(asString)) {\n const [mantissa, exponentPart] = asString.split(/e/i);\n const exponent = Number(exponentPart);\n const [integerPart, fractionalPart = \"\"] = mantissa.split(\".\");\n if (exponent >= 0) {\n return (\n integerPart +\n fractionalPart.padEnd(exponent + fractionalPart.length, \"0\")\n );\n }\n const zeros = \"0\".repeat(Math.abs(exponent) - 1);\n return `0.${zeros}${integerPart}${fractionalPart}`.replace(/\\.0+$/, \"\");\n }\n\n return asString;\n}\n\nexport function normalizeHex(value: `0x${string}`): `0x${string}` {\n const lower = value.toLowerCase();\n return (lower.replace(/^0x0+/, \"0x\") || \"0x0\") as `0x${string}`;\n}\n\nexport function normalizeAddress(value: `0x${string}`): `0x${string}` {\n return normalizeHex(value);\n}\n\nexport async function signL1Action(args: {\n wallet: WalletFullContext;\n action: ExchangeOrderAction | Record<string, unknown>;\n nonce: number;\n vaultAddress?: `0x${string}` | undefined;\n expiresAfter?: number | undefined;\n isTestnet: boolean;\n}): Promise<ExchangeSignature> {\n const { wallet, action, nonce, vaultAddress, expiresAfter, isTestnet } = args;\n\n const actionHash = createL1ActionHash({\n action,\n nonce,\n vaultAddress,\n expiresAfter,\n });\n const message = {\n source: isTestnet ? \"b\" : \"a\",\n connectionId: actionHash,\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain: EXCHANGE_TYPED_DATA_DOMAIN,\n types: {\n Agent: [\n { name: \"source\", type: \"string\" },\n { name: \"connectionId\", type: \"bytes32\" },\n ],\n },\n primaryType: \"Agent\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signSpotSend(args: {\n wallet: WalletFullContext;\n hyperliquidChain: string;\n signatureChainId: string;\n destination: `0x${string}`;\n token: string;\n amount: string;\n time: bigint;\n}): Promise<ExchangeSignature> {\n const {\n wallet,\n hyperliquidChain,\n signatureChainId,\n destination,\n token,\n amount,\n time,\n } = args;\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n hyperliquidChain,\n destination,\n token,\n amount,\n time,\n };\n\n const types = {\n \"HyperliquidTransaction:SpotSend\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"destination\", type: \"string\" },\n { name: \"token\", type: \"string\" },\n { name: \"amount\", type: \"string\" },\n { name: \"time\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:SpotSend\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signApproveBuilderFee(args: {\n wallet: WalletFullContext;\n maxFeeRate: string;\n nonce: bigint;\n signatureChainId: string;\n isTestnet: boolean;\n}): Promise<ExchangeSignature> {\n const { wallet, maxFeeRate, nonce, signatureChainId, isTestnet } = args;\n\n const hyperliquidChain = isTestnet ? \"Testnet\" : \"Mainnet\";\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n hyperliquidChain,\n maxFeeRate,\n builder: BUILDER_CODE.address,\n nonce,\n };\n\n const types = {\n \"HyperliquidTransaction:ApproveBuilderFee\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"maxFeeRate\", type: \"string\" },\n { name: \"builder\", type: \"address\" },\n { name: \"nonce\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:ApproveBuilderFee\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signUserPortfolioMargin(args: {\n wallet: WalletFullContext;\n action: HyperliquidUserPortfolioMarginAction;\n}): Promise<ExchangeSignature> {\n const { wallet, action } = args;\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(action.signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n enabled: action.enabled,\n hyperliquidChain: action.hyperliquidChain,\n user: action.user,\n nonce: BigInt(action.nonce),\n };\n\n const types = {\n \"HyperliquidTransaction:UserPortfolioMargin\": [\n { name: \"enabled\", type: \"bool\" },\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"user\", type: \"address\" },\n { name: \"nonce\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:UserPortfolioMargin\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport function splitSignature(signature: `0x${string}`): ExchangeSignature {\n const cleaned = signature.slice(2);\n const rHex = `0x${cleaned.slice(0, 64)}` as `0x${string}`;\n const sHex = `0x${cleaned.slice(64, 128)}` as `0x${string}`;\n let v = parseInt(cleaned.slice(128, 130), 16);\n if (Number.isNaN(v)) {\n throw new Error(\"Invalid signature returned by wallet client.\");\n }\n if (v < 27) {\n v += 27;\n }\n const normalizedV = (v === 27 || v === 28 ? v : v % 2 ? 27 : 28) as 27 | 28;\n return {\n r: normalizeHex(rHex),\n s: normalizeHex(sHex),\n v: normalizedV,\n };\n}\n\nexport function createL1ActionHash(args: {\n action: ExchangeOrderAction | Record<string, unknown>;\n nonce: number;\n vaultAddress?: `0x${string}` | undefined;\n expiresAfter?: number | undefined;\n}): `0x${string}` {\n const { action, nonce, vaultAddress, expiresAfter } = args;\n\n const actionBytes = encodeMsgpack(action, { ignoreUndefined: true });\n const nonceBytes = toUint64Bytes(nonce);\n\n const vaultMarker = vaultAddress ? new Uint8Array([1]) : new Uint8Array([0]);\n const vaultBytes = vaultAddress\n ? hexToBytes(vaultAddress.slice(2))\n : new Uint8Array();\n\n const hasExpiresAfter = typeof expiresAfter === \"number\";\n const expiresMarker = hasExpiresAfter\n ? new Uint8Array([0])\n : new Uint8Array();\n const expiresBytes =\n hasExpiresAfter && expiresAfter !== undefined\n ? toUint64Bytes(expiresAfter)\n : new Uint8Array();\n\n const bytes = concatBytes(\n actionBytes,\n nonceBytes,\n vaultMarker,\n vaultBytes,\n expiresMarker,\n expiresBytes\n );\n const hash = keccak_256(bytes);\n return `0x${bytesToHex(hash)}`;\n}\n\nexport function toUint64Bytes(value: number): Uint8Array {\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setBigUint64(0, BigInt(value));\n return bytes;\n}\n\nexport function getBridgeAddress(env: HyperliquidEnvironment): `0x${string}` {\n const override = process.env.HYPERLIQUID_BRIDGE_ADDRESS;\n if (override?.trim()) {\n return normalizeAddress(override as `0x${string}`);\n }\n return HL_BRIDGE_ADDRESSES[env];\n}\n\nexport function getUsdcAddress(env: HyperliquidEnvironment): `0x${string}` {\n const override = process.env.HYPERLIQUID_USDC_ADDRESS;\n if (override?.trim()) {\n return normalizeAddress(override as `0x${string}`);\n }\n return HL_USDC_ADDRESSES[env];\n}\n\nexport function getSignatureChainId(env: HyperliquidEnvironment): string {\n const override = process.env.HYPERLIQUID_SIGNATURE_CHAIN_ID;\n const selected = override?.trim() || HL_SIGNATURE_CHAIN_ID[env];\n return normalizeHex(selected as `0x${string}`);\n}\n\nexport function getBaseUrl(environment: HyperliquidEnvironment): string {\n return API_BASES[environment];\n}\n\nexport function assertPositiveNumber(\n value: number,\n label: string\n): asserts value is number {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`${label} must be a positive number.`);\n }\n}\n","import {\n API_BASES,\n HyperliquidApiError,\n HyperliquidEnvironment,\n normalizeAddress,\n} from \"./base\";\n\ntype InfoPayload =\n | { type: \"meta\" }\n | { type: \"metaAndAssetCtxs\" }\n | { type: \"spotMeta\" }\n | { type: \"spotMetaAndAssetCtxs\" }\n | { type: \"assetCtxs\" }\n | { type: \"spotAssetCtxs\" }\n | { type: \"openOrders\"; user: `0x${string}` }\n | { type: \"frontendOpenOrders\"; user: `0x${string}` }\n | { type: \"orderStatus\"; user: `0x${string}`; oid: number | string }\n | { type: \"historicalOrders\"; user: `0x${string}` }\n | { type: \"userHistoricalOrders\"; user: `0x${string}` }\n | { type: \"userFills\"; user: `0x${string}` }\n | {\n type: \"userFillsByTime\";\n user: `0x${string}`;\n startTime: number;\n endTime: number;\n }\n | { type: \"userRateLimit\"; user: `0x${string}` }\n | { type: \"preTransferCheck\"; user: `0x${string}`; source: `0x${string}` }\n | { type: \"spotClearinghouseState\"; user: `0x${string}` };\n\nasync function postInfo(environment: HyperliquidEnvironment, payload: InfoPayload) {\n const baseUrl = API_BASES[environment];\n const response = await fetch(`${baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n const data = await response.json().catch(() => null);\n if (!response.ok) {\n throw new HyperliquidApiError(\n \"Hyperliquid info request failed.\",\n data ?? { status: response.status }\n );\n }\n return data;\n}\n\nexport class HyperliquidInfoClient {\n private readonly environment: HyperliquidEnvironment;\n\n constructor(environment: HyperliquidEnvironment = \"mainnet\") {\n this.environment = environment;\n }\n\n meta() {\n return fetchHyperliquidMeta(this.environment);\n }\n\n metaAndAssetCtxs() {\n return fetchHyperliquidMetaAndAssetCtxs(this.environment);\n }\n\n spotMeta() {\n return fetchHyperliquidSpotMeta(this.environment);\n }\n\n spotMetaAndAssetCtxs() {\n return fetchHyperliquidSpotMetaAndAssetCtxs(this.environment);\n }\n\n assetCtxs() {\n return fetchHyperliquidAssetCtxs(this.environment);\n }\n\n spotAssetCtxs() {\n return fetchHyperliquidSpotAssetCtxs(this.environment);\n }\n\n openOrders(user: `0x${string}`) {\n return fetchHyperliquidOpenOrders({ user, environment: this.environment });\n }\n\n frontendOpenOrders(user: `0x${string}`) {\n return fetchHyperliquidFrontendOpenOrders({\n user,\n environment: this.environment,\n });\n }\n\n orderStatus(user: `0x${string}`, oid: number | string) {\n return fetchHyperliquidOrderStatus({\n user,\n oid,\n environment: this.environment,\n });\n }\n\n historicalOrders(user: `0x${string}`) {\n return fetchHyperliquidHistoricalOrders({\n user,\n environment: this.environment,\n });\n }\n\n userFills(user: `0x${string}`) {\n return fetchHyperliquidUserFills({ user, environment: this.environment });\n }\n\n userFillsByTime(user: `0x${string}`, startTime: number, endTime: number) {\n return fetchHyperliquidUserFillsByTime({\n user,\n startTime,\n endTime,\n environment: this.environment,\n });\n }\n\n userRateLimit(user: `0x${string}`) {\n return fetchHyperliquidUserRateLimit({\n user,\n environment: this.environment,\n });\n }\n\n preTransferCheck(user: `0x${string}`, source: `0x${string}`) {\n return fetchHyperliquidPreTransferCheck({\n user,\n source,\n environment: this.environment,\n });\n }\n\n spotClearinghouseState(user: `0x${string}`) {\n return fetchHyperliquidSpotClearinghouseState({\n user,\n environment: this.environment,\n });\n }\n}\n\nexport async function fetchHyperliquidMeta(environment: HyperliquidEnvironment = \"mainnet\") {\n return postInfo(environment, { type: \"meta\" });\n}\n\nexport async function fetchHyperliquidMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"metaAndAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidSpotMeta(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"spotMeta\" });\n}\n\nexport async function fetchHyperliquidSpotMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"spotMetaAndAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"assetCtxs\" });\n}\n\nexport async function fetchHyperliquidSpotAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"spotAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidOpenOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, { type: \"openOrders\", user: normalizeAddress(params.user) });\n}\n\nexport async function fetchHyperliquidFrontendOpenOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"frontendOpenOrders\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidOrderStatus(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n oid: number | string;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"orderStatus\",\n user: normalizeAddress(params.user),\n oid: params.oid,\n });\n}\n\nexport async function fetchHyperliquidHistoricalOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"historicalOrders\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidUserFills(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"userFills\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidUserFillsByTime(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n startTime: number;\n endTime: number;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"userFillsByTime\",\n user: normalizeAddress(params.user),\n startTime: params.startTime,\n endTime: params.endTime,\n });\n}\n\nexport async function fetchHyperliquidUserRateLimit(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"userRateLimit\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidPreTransferCheck(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n source: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"preTransferCheck\",\n user: normalizeAddress(params.user),\n source: normalizeAddress(params.source),\n });\n}\n\nexport async function fetchHyperliquidSpotClearinghouseState(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"spotClearinghouseState\",\n user: normalizeAddress(params.user),\n });\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport {\n API_BASES,\n HL_CHAIN_LABEL,\n HyperliquidApiError,\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n HyperliquidTriggerOptions,\n type ExchangeOrderAction,\n type ExchangeSignature,\n type HyperliquidUserPortfolioMarginAction,\n type NonceSource,\n type HyperliquidExchangeResponse,\n assertPositiveNumber,\n getSignatureChainId,\n normalizeAddress,\n resolveHyperliquidAssetIndex,\n signL1Action,\n signUserPortfolioMargin,\n signSpotSend,\n toApiDecimal,\n} from \"./base\";\n\ntype CommonActionOptions = {\n environment?: HyperliquidEnvironment;\n vaultAddress?: `0x${string}` | undefined;\n expiresAfter?: number | undefined;\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n /**\n * Optional per-wallet nonce provider (preferred if available).\n */\n walletNonceProvider?: NonceSource | undefined;\n};\n\ntype CancelInput = { symbol: string; oid: number | string };\ntype CancelByCloidInput = { symbol: string; cloid: `0x${string}` };\n\ntype ModifyOrderInput = {\n oid: number | `0x${string}`;\n order: HyperliquidOrderIntent;\n};\n\ntype TwapOrderInput = {\n symbol: string;\n side: \"buy\" | \"sell\";\n size: string | number | bigint;\n reduceOnly?: boolean;\n minutes: number;\n randomize?: boolean;\n};\n\ntype TwapCancelInput = {\n symbol: string;\n twapId: number;\n};\n\ntype UpdateLeverageInput = {\n symbol: string;\n leverageMode: \"cross\" | \"isolated\";\n leverage: number;\n};\n\ntype UpdateIsolatedMarginInput = {\n symbol: string;\n isBuy: boolean;\n ntli: number;\n};\n\nexport class HyperliquidExchangeClient {\n private readonly nonceSource: NonceSource;\n private readonly environment: HyperliquidEnvironment;\n private readonly vaultAddress: `0x${string}` | undefined;\n private readonly expiresAfter: number | undefined;\n private readonly wallet: WalletFullContext;\n\n constructor(args: {\n wallet: WalletFullContext;\n environment?: HyperliquidEnvironment;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonceSource?: NonceSource;\n walletNonceProvider?: NonceSource;\n }) {\n this.wallet = args.wallet;\n this.environment = args.environment ?? \"mainnet\";\n this.vaultAddress = args.vaultAddress;\n this.expiresAfter = args.expiresAfter;\n const resolvedNonceSource =\n args.walletNonceProvider ?? args.wallet.nonceSource ?? args.nonceSource;\n if (!resolvedNonceSource) {\n throw new Error(\n \"Wallet nonce source is required for Hyperliquid exchange actions.\"\n );\n }\n this.nonceSource = resolvedNonceSource;\n }\n\n cancel(cancels: CancelInput[]) {\n return cancelHyperliquidOrders({\n wallet: this.wallet,\n cancels,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n cancelByCloid(cancels: CancelByCloidInput[]) {\n return cancelHyperliquidOrdersByCloid({\n wallet: this.wallet,\n cancels,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n cancelAll() {\n return cancelAllHyperliquidOrders({\n wallet: this.wallet,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n scheduleCancel(time: number | null) {\n return scheduleHyperliquidCancel({\n wallet: this.wallet,\n time,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n modify(modification: ModifyOrderInput) {\n return modifyHyperliquidOrder({\n wallet: this.wallet,\n modification,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n batchModify(modifications: ModifyOrderInput[]) {\n return batchModifyHyperliquidOrders({\n wallet: this.wallet,\n modifications,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n twapOrder(twap: TwapOrderInput) {\n return placeHyperliquidTwapOrder({\n wallet: this.wallet,\n twap,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n twapCancel(cancel: TwapCancelInput) {\n return cancelHyperliquidTwapOrder({\n wallet: this.wallet,\n cancel,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n updateLeverage(input: UpdateLeverageInput) {\n return updateHyperliquidLeverage({\n wallet: this.wallet,\n input,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n updateIsolatedMargin(input: UpdateIsolatedMarginInput) {\n return updateHyperliquidIsolatedMargin({\n wallet: this.wallet,\n input,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n reserveRequestWeight(weight: number) {\n return reserveHyperliquidRequestWeight({\n wallet: this.wallet,\n weight,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n spotSend(params: {\n destination: `0x${string}`;\n token: string;\n amount: string | number | bigint;\n }) {\n return sendHyperliquidSpot({\n wallet: this.wallet,\n environment: this.environment,\n nonceSource: this.nonceSource,\n ...params,\n });\n }\n\n setPortfolioMargin(params: { enabled: boolean; user?: `0x${string}` }) {\n const base = {\n wallet: this.wallet,\n enabled: params.enabled,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n } satisfies Omit<Parameters<typeof setHyperliquidPortfolioMargin>[0], \"user\">;\n\n return setHyperliquidPortfolioMargin(\n params.user ? { ...base, user: params.user } : base\n );\n }\n}\n\nexport async function setHyperliquidPortfolioMargin(options: {\n wallet: WalletFullContext;\n enabled: boolean;\n user?: `0x${string}`;\n} & CommonActionOptions): Promise<HyperliquidExchangeResponse<unknown>> {\n const env = options.environment ?? \"mainnet\";\n if (!options.wallet?.account || !options.wallet.walletClient) {\n throw new Error(\n \"Wallet with signing capability is required for portfolio margin.\"\n );\n }\n\n const nonce =\n options.nonce ??\n options.walletNonceProvider?.() ??\n options.wallet.nonceSource?.() ??\n options.nonceSource?.() ??\n Date.now();\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(\n options.user ?? (options.wallet.address as `0x${string}`)\n );\n\n const action: HyperliquidUserPortfolioMarginAction = {\n type: \"userPortfolioMargin\",\n enabled: Boolean(options.enabled),\n hyperliquidChain,\n signatureChainId,\n user,\n nonce,\n };\n\n const signature: ExchangeSignature = await signUserPortfolioMargin({\n wallet: options.wallet,\n action,\n });\n\n const body: {\n action: typeof action;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n } = {\n action,\n nonce,\n signature,\n };\n\n if (options.vaultAddress) {\n body.vaultAddress = normalizeAddress(options.vaultAddress);\n }\n if (typeof options.expiresAfter === \"number\") {\n body.expiresAfter = options.expiresAfter;\n }\n\n return postExchange(env, body);\n}\n\nexport async function cancelHyperliquidOrders(options: {\n wallet: WalletFullContext;\n cancels: CancelInput[];\n} & CommonActionOptions) {\n options.cancels.forEach((c) => assertSymbol(c.symbol));\n const action = {\n type: \"cancel\",\n cancels: await withAssetIndexes(options, options.cancels, (idx, entry) => ({\n a: idx,\n o: entry.oid,\n })),\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelHyperliquidOrdersByCloid(options: {\n wallet: WalletFullContext;\n cancels: CancelByCloidInput[];\n} & CommonActionOptions) {\n options.cancels.forEach((c) => assertSymbol(c.symbol));\n const action = {\n type: \"cancelByCloid\",\n cancels: await withAssetIndexes(\n options,\n options.cancels,\n (idx, entry) => ({\n a: idx,\n c: normalizeAddress(entry.cloid),\n })\n ),\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelAllHyperliquidOrders(options: {\n wallet: WalletFullContext;\n} & CommonActionOptions) {\n const action = { type: \"cancelAll\" };\n return submitExchangeAction(options, action);\n}\n\nexport async function scheduleHyperliquidCancel(options: {\n wallet: WalletFullContext;\n time: number | null;\n} & CommonActionOptions) {\n if (options.time !== null) {\n assertPositiveNumber(options.time, \"time\");\n }\n const action = { type: \"scheduleCancel\", time: options.time };\n return submitExchangeAction(options, action);\n}\n\nexport async function modifyHyperliquidOrder(options: {\n wallet: WalletFullContext;\n modification: ModifyOrderInput;\n grouping?: HyperliquidGrouping;\n} & CommonActionOptions) {\n const { modification } = options;\n const order = await buildOrder(modification.order, options);\n const action = {\n type: \"modify\",\n oid: modification.oid,\n order,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function batchModifyHyperliquidOrders(options: {\n wallet: WalletFullContext;\n modifications: ModifyOrderInput[];\n} & CommonActionOptions) {\n options.modifications.forEach((m) => assertSymbol(m.order.symbol));\n const modifies = await Promise.all(\n options.modifications.map(async (mod) => ({\n oid: mod.oid,\n order: await buildOrder(mod.order, options),\n }))\n );\n const action = {\n type: \"batchModify\",\n modifies,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function placeHyperliquidTwapOrder(options: {\n wallet: WalletFullContext;\n twap: TwapOrderInput;\n} & CommonActionOptions) {\n const { twap } = options;\n assertSymbol(twap.symbol);\n assertPositiveDecimal(twap.size, \"size\");\n assertPositiveNumber(twap.minutes, \"minutes\");\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: twap.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"twapOrder\",\n twap: {\n a: asset,\n b: twap.side === \"buy\",\n s: toApiDecimal(twap.size),\n r: Boolean(twap.reduceOnly),\n m: twap.minutes,\n t: Boolean(twap.randomize),\n },\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelHyperliquidTwapOrder(options: {\n wallet: WalletFullContext;\n cancel: TwapCancelInput;\n} & CommonActionOptions) {\n assertSymbol(options.cancel.symbol);\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: options.cancel.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"twapCancel\",\n a: asset,\n t: options.cancel.twapId,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function updateHyperliquidLeverage(options: {\n wallet: WalletFullContext;\n input: UpdateLeverageInput;\n} & CommonActionOptions) {\n assertSymbol(options.input.symbol);\n assertPositiveNumber(options.input.leverage, \"leverage\");\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: options.input.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"updateLeverage\",\n asset,\n isCross: options.input.leverageMode === \"cross\",\n leverage: options.input.leverage,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function updateHyperliquidIsolatedMargin(options: {\n wallet: WalletFullContext;\n input: UpdateIsolatedMarginInput;\n} & CommonActionOptions) {\n assertSymbol(options.input.symbol);\n assertPositiveNumber(options.input.ntli, \"ntli\");\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: options.input.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"updateIsolatedMargin\",\n asset,\n isBuy: options.input.isBuy,\n ntli: options.input.ntli,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function reserveHyperliquidRequestWeight(options: {\n wallet: WalletFullContext;\n weight: number;\n} & CommonActionOptions) {\n assertPositiveNumber(options.weight, \"weight\");\n const action = {\n type: \"reserveRequestWeight\",\n weight: options.weight,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function createHyperliquidSubAccount(options: {\n wallet: WalletFullContext;\n name: string;\n} & CommonActionOptions) {\n assertString(options.name, \"name\");\n const action = {\n type: \"createSubAccount\",\n name: options.name,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function transferHyperliquidSubAccount(options: {\n wallet: WalletFullContext;\n subAccountUser: `0x${string}`;\n isDeposit: boolean;\n usd: string | number | bigint;\n} & CommonActionOptions) {\n assertString(options.subAccountUser, \"subAccountUser\");\n const usdScaled = normalizeUsdToInt(options.usd);\n const action = {\n type: \"subAccountTransfer\",\n subAccountUser: normalizeAddress(options.subAccountUser),\n isDeposit: Boolean(options.isDeposit),\n usd: usdScaled,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function sendHyperliquidSpot(options: {\n wallet: WalletFullContext;\n destination: `0x${string}`;\n token: string;\n amount: string | number | bigint;\n environment?: HyperliquidEnvironment;\n nonce?: number;\n nonceSource?: NonceSource;\n}) {\n const env = options.environment ?? \"mainnet\";\n if (!options.wallet.account || !options.wallet.walletClient) {\n throw new Error(\"Wallet with signing capability is required for spotSend.\");\n }\n assertString(options.token, \"token\");\n assertPositiveDecimal(options.amount, \"amount\");\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n\n const nonce =\n options.nonce ?? options.nonceSource?.() ?? Date.now();\n const time = BigInt(nonce);\n\n const signature = await signSpotSend({\n wallet: options.wallet,\n hyperliquidChain,\n signatureChainId,\n destination: normalizeAddress(options.destination),\n token: options.token,\n amount: toApiDecimal(options.amount),\n time,\n });\n\n const action = {\n type: \"spotSend\",\n hyperliquidChain,\n signatureChainId,\n destination: normalizeAddress(options.destination),\n token: options.token,\n amount: toApiDecimal(options.amount),\n time: nonce,\n };\n\n return postExchange(env, { action, nonce, signature });\n}\n\nasync function submitExchangeAction(\n options: { wallet: WalletFullContext } & CommonActionOptions,\n action: Record<string, unknown> | ExchangeOrderAction\n): Promise<HyperliquidExchangeResponse<unknown>> {\n if (!options.wallet?.account || !options.wallet.walletClient) {\n throw new Error(\"Hyperliquid exchange actions require a signing wallet.\");\n }\n\n const env = options.environment ?? \"mainnet\";\n const nonceSource =\n options.walletNonceProvider ?? options.wallet.nonceSource ?? options.nonceSource;\n if (!nonceSource && options.nonce === undefined) {\n throw new Error(\"Wallet nonce source is required for Hyperliquid exchange actions.\");\n }\n const effectiveNonce = options.nonce ?? nonceSource?.();\n if (effectiveNonce === undefined) {\n throw new Error(\"Hyperliquid exchange actions require a nonce.\");\n }\n\n const signature: ExchangeSignature = await signL1Action({\n wallet: options.wallet,\n action,\n nonce: effectiveNonce,\n vaultAddress: options.vaultAddress\n ? normalizeAddress(options.vaultAddress)\n : undefined,\n expiresAfter: options.expiresAfter,\n isTestnet: env === \"testnet\",\n });\n\n const body: {\n action: typeof action;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n } = {\n action,\n nonce: effectiveNonce,\n signature,\n };\n\n if (options.vaultAddress) {\n body.vaultAddress = normalizeAddress(options.vaultAddress);\n }\n if (typeof options.expiresAfter === \"number\") {\n body.expiresAfter = options.expiresAfter;\n }\n\n return postExchange(env, body);\n}\n\nasync function withAssetIndexes<TInput>(\n options: { environment?: HyperliquidEnvironment },\n entries: TInput[],\n mapper: (assetIndex: number, entry: TInput) => Record<string, unknown>\n) {\n const env = options.environment ?? \"mainnet\";\n return Promise.all(\n entries.map(async (entry: any) => {\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: entry.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n return mapper(assetIndex, entry);\n })\n );\n}\n\nasync function buildOrder(\n intent: HyperliquidOrderIntent,\n options: { environment?: HyperliquidEnvironment }\n): Promise<ExchangeOrderAction[\"orders\"][number]> {\n assertSymbol(intent.symbol);\n assertPositiveDecimal(intent.price, \"price\");\n assertPositiveDecimal(intent.size, \"size\");\n const env = options.environment ?? \"mainnet\";\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n\n const limitOrTrigger = intent.trigger\n ? mapTrigger(intent.trigger)\n : {\n limit: {\n tif: intent.tif ?? \"Ioc\",\n },\n };\n\n return {\n a: assetIndex,\n b: intent.side === \"buy\",\n p: toApiDecimal(intent.price),\n s: toApiDecimal(intent.size),\n r: intent.reduceOnly ?? false,\n t: limitOrTrigger,\n ...(intent.clientId\n ? {\n c: normalizeAddress(intent.clientId),\n }\n : {}),\n };\n}\n\nfunction mapTrigger(\n trigger: HyperliquidTriggerOptions\n): ExchangeOrderAction[\"orders\"][number][\"t\"] {\n assertPositiveDecimal(trigger.triggerPx, \"triggerPx\");\n return {\n trigger: {\n isMarket: Boolean(trigger.isMarket),\n triggerPx: toApiDecimal(trigger.triggerPx),\n tpsl: trigger.tpsl,\n },\n };\n}\n\nfunction assertSymbol(value: string) {\n assertString(value, \"symbol\");\n}\n\nfunction normalizeUsdToInt(value: string | number | bigint): number {\n if (typeof value === \"bigint\") {\n if (value < 0n) {\n throw new Error(\"usd must be non-negative.\");\n }\n return Number(value);\n }\n const parsed = typeof value === \"string\" ? Number.parseFloat(value) : Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\"usd must be a non-negative number.\");\n }\n return Math.round(parsed * 1_000_000);\n}\n\nfunction assertString(value: unknown, label: string) {\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n}\n\nfunction assertPositiveDecimal(\n value: string | number | bigint,\n label: string\n) {\n if (typeof value === \"number\") {\n assertPositiveNumber(value, label);\n return;\n }\n if (typeof value === \"bigint\") {\n if (value <= 0n) {\n throw new Error(`${label} must be positive.`);\n }\n return;\n }\n assertString(value, label);\n}\n\nasync function postExchange(\n env: HyperliquidEnvironment,\n body: Record<string, unknown>\n): Promise<HyperliquidExchangeResponse<unknown>> {\n const response = await fetch(`${API_BASES[env]}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n const text = await response.text().catch(() => \"\");\n const json = (() => {\n if (!text) return null;\n try {\n return JSON.parse(text) as HyperliquidExchangeResponse<unknown>;\n } catch {\n return null;\n }\n })();\n\n if (!response.ok) {\n throw new HyperliquidApiError(\"Hyperliquid exchange action failed.\", {\n status: response.status,\n statusText: response.statusText,\n body: json ?? (text ? text : null),\n });\n }\n\n if (!json) {\n throw new HyperliquidApiError(\"Hyperliquid exchange action failed.\", {\n status: response.status,\n statusText: response.statusText,\n body: text ? text : null,\n });\n }\n\n if (json.status !== \"ok\") {\n throw new HyperliquidApiError(\"Hyperliquid exchange returned error.\", {\n status: response.status,\n statusText: response.statusText,\n body: json,\n });\n }\n\n return json;\n}\n","import { encodeFunctionData, erc20Abi, parseUnits } from \"viem\";\nimport type { WalletFullContext } from \"../../wallet/types\";\nimport { store, type StoreOptions } from \"../../store\";\nimport {\n API_BASES,\n BUILDER_CODE,\n HL_CHAIN_LABEL,\n HL_ENDPOINT,\n HyperliquidApiError,\n MIN_DEPOSIT_USDC,\n ZERO_ADDRESS,\n createL1ActionHash,\n getBridgeAddress,\n getSignatureChainId,\n getUsdcAddress,\n normalizeAddress,\n normalizeHex,\n resolveHyperliquidAssetIndex,\n signApproveBuilderFee,\n signL1Action,\n splitSignature,\n toApiDecimal,\n} from \"./base\";\nimport type {\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n ExchangeOrderAction,\n ExchangeSignature,\n} from \"./base\";\nexport type {\n HyperliquidEnvironment as HyperliquidEnvironment,\n HyperliquidGrouping as HyperliquidGrouping,\n HyperliquidTriggerType as HyperliquidTriggerType,\n HyperliquidTriggerOptions as HyperliquidTriggerOptions,\n HyperliquidOrderIntent as HyperliquidOrderIntent,\n HyperliquidBuilderFee as HyperliquidBuilderFee,\n NonceSource,\n HyperliquidExchangeResponse,\n} from \"./base\";\nexport {\n HyperliquidApiError,\n HyperliquidGuardError,\n HyperliquidTermsError,\n HyperliquidBuilderApprovalError,\n createMonotonicNonceFactory,\n} from \"./base\";\nexport {\n fetchHyperliquidMeta,\n fetchHyperliquidMetaAndAssetCtxs,\n fetchHyperliquidSpotMeta,\n fetchHyperliquidSpotMetaAndAssetCtxs,\n fetchHyperliquidAssetCtxs,\n fetchHyperliquidSpotAssetCtxs,\n fetchHyperliquidOpenOrders,\n fetchHyperliquidFrontendOpenOrders,\n fetchHyperliquidOrderStatus,\n fetchHyperliquidHistoricalOrders,\n fetchHyperliquidUserFills,\n fetchHyperliquidUserFillsByTime,\n fetchHyperliquidUserRateLimit,\n fetchHyperliquidPreTransferCheck,\n fetchHyperliquidSpotClearinghouseState,\n HyperliquidInfoClient,\n} from \"./info\";\n\nexport interface HyperliquidOrderOptions {\n wallet: WalletFullContext;\n orders: HyperliquidOrderIntent[];\n grouping?: HyperliquidGrouping;\n environment?: HyperliquidEnvironment;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonce?: number;\n}\n\nexport type HyperliquidOrderStatus =\n | { resting: { oid: number; cloid?: `0x${string}` } }\n | {\n filled: {\n totalSz: string;\n avgPx: string;\n oid: number;\n cloid?: `0x${string}`;\n };\n }\n | { error: string };\n\nexport interface HyperliquidOrderResponse {\n status: \"ok\";\n response: {\n type: \"order\";\n data: {\n statuses: HyperliquidOrderStatus[];\n };\n };\n}\n\nexport interface HyperliquidDepositResult {\n txHash: `0x${string}`;\n amount: number;\n amountUnits: string;\n environment: HyperliquidEnvironment;\n bridgeAddress: `0x${string}`;\n}\n\nexport interface HyperliquidWithdrawResult {\n amount: number;\n destination: `0x${string}`;\n environment: HyperliquidEnvironment;\n nonce: number;\n status: string;\n}\n\nexport interface HyperliquidClearinghouseState {\n ok: boolean;\n data: Record<string, unknown> | null;\n}\n\nexport interface HyperliquidApproveBuilderFeeOptions {\n environment: HyperliquidEnvironment;\n wallet: WalletFullContext;\n nonce?: number;\n /** Override default signature chain id. */\n signatureChainId?: string;\n}\n\nexport interface HyperliquidApproveBuilderFeeResponse {\n status: string;\n response?: unknown;\n error?: string;\n}\n\nexport interface HyperliquidTermsRecordInput {\n environment: HyperliquidEnvironment;\n walletAddress: `0x${string}`;\n storeOptions?: StoreOptions;\n}\n\nexport interface HyperliquidBuilderApprovalRecordInput {\n environment: HyperliquidEnvironment;\n walletAddress: `0x${string}`;\n storeOptions?: StoreOptions;\n}\n\ntype ExchangeRequestBody = {\n action: ExchangeOrderAction;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n};\n\n/**\n * Sign and submit one or more orders to the Hyperliquid exchange endpoint.\n */\nexport async function placeHyperliquidOrder(\n options: HyperliquidOrderOptions\n): Promise<HyperliquidOrderResponse> {\n const {\n wallet,\n orders,\n grouping = \"na\",\n environment,\n vaultAddress,\n expiresAfter,\n nonce,\n } = options;\n\n const effectiveBuilder = BUILDER_CODE;\n\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\n \"Hyperliquid order signing requires a wallet with signing capabilities.\"\n );\n }\n\n if (!orders.length) {\n throw new Error(\"At least one order is required.\");\n }\n\n const inferredEnvironment = environment ?? \"mainnet\";\n const resolvedBaseUrl = API_BASES[inferredEnvironment];\n const preparedOrders = await Promise.all(\n orders.map(async (intent) => {\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: resolvedBaseUrl,\n environment: inferredEnvironment,\n fetcher: fetch,\n });\n\n const limitOrTrigger = intent.trigger\n ? {\n trigger: {\n isMarket: Boolean(intent.trigger.isMarket),\n triggerPx: toApiDecimal(intent.trigger.triggerPx),\n tpsl: intent.trigger.tpsl,\n },\n }\n : {\n limit: {\n tif: intent.tif ?? \"Ioc\",\n },\n };\n\n const order: ExchangeOrderAction[\"orders\"][number] = {\n a: assetIndex,\n b: intent.side === \"buy\",\n p: toApiDecimal(intent.price),\n s: toApiDecimal(intent.size),\n r: intent.reduceOnly ?? false,\n t: limitOrTrigger,\n ...(intent.clientId\n ? {\n c: normalizeHex(intent.clientId),\n }\n : {}),\n };\n\n return order;\n })\n );\n\n const action: ExchangeOrderAction = {\n type: \"order\",\n orders: preparedOrders,\n grouping,\n };\n\n if (effectiveBuilder) {\n action.builder = {\n b: normalizeAddress(effectiveBuilder.address),\n f: effectiveBuilder.fee,\n };\n }\n\n const effectiveNonce = nonce ?? Date.now();\n const signature = await signL1Action({\n wallet,\n action,\n nonce: effectiveNonce,\n ...(vaultAddress ? { vaultAddress } : {}),\n ...(typeof expiresAfter === \"number\" ? { expiresAfter } : {}),\n isTestnet: inferredEnvironment === \"testnet\",\n });\n\n const body: ExchangeRequestBody = {\n action,\n nonce: effectiveNonce,\n signature,\n };\n\n if (vaultAddress) {\n body.vaultAddress = normalizeAddress(vaultAddress);\n }\n\n if (typeof expiresAfter === \"number\") {\n body.expiresAfter = expiresAfter;\n }\n\n const response = await fetch(`${resolvedBaseUrl}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n const rawText = await response.text().catch(() => null);\n let parsed: HyperliquidOrderResponse | { error?: string; message?: string } | string | null = null;\n if (rawText && rawText.length) {\n try {\n parsed = JSON.parse(rawText) as\n | HyperliquidOrderResponse\n | { error?: string; message?: string }\n | null;\n } catch {\n parsed = rawText;\n }\n }\n const json =\n parsed && typeof parsed === \"object\" && \"status\" in parsed\n ? (parsed as HyperliquidOrderResponse)\n : null;\n\n if (!response.ok || !json) {\n const detail =\n (parsed as { error?: string; message?: string } | null)?.error ??\n (parsed as { error?: string; message?: string } | null)?.message ??\n (typeof parsed === \"string\" ? parsed : rawText);\n const suffix = detail ? ` Detail: ${detail}` : \"\";\n throw new HyperliquidApiError(\n `Failed to submit Hyperliquid order.${suffix}`,\n parsed ?? rawText ?? { status: response.status }\n );\n }\n\n if (json.status !== \"ok\") {\n const detail = (parsed as { error?: string } | null)?.error ?? rawText;\n throw new HyperliquidApiError(\n detail\n ? `Hyperliquid API returned an error status: ${detail}`\n : \"Hyperliquid API returned an error status.\",\n json\n );\n }\n\n const statuses = json.response?.data?.statuses ?? [];\n const errorStatuses = statuses.filter(\n (entry): entry is { error: string } => \"error\" in entry\n );\n if (errorStatuses.length) {\n const message = errorStatuses.map((entry) => entry.error).join(\", \");\n throw new HyperliquidApiError(\n message || \"Hyperliquid rejected the order.\",\n json\n );\n }\n\n return json;\n}\n\nexport async function depositToHyperliquidBridge(options: {\n environment: HyperliquidEnvironment;\n amount: string;\n wallet: WalletFullContext;\n}): Promise<HyperliquidDepositResult> {\n const { environment, amount, wallet } = options;\n\n const parsedAmount = Number(amount);\n if (!Number.isFinite(parsedAmount) || parsedAmount <= 0) {\n throw new Error(\"Deposit amount must be a positive number.\");\n }\n if (parsedAmount < MIN_DEPOSIT_USDC) {\n throw new Error(`Minimum deposit is ${MIN_DEPOSIT_USDC} USDC.`);\n }\n\n if (!wallet.account || !wallet.walletClient) {\n throw new Error(\"Wallet with signing capability is required for deposit.\");\n }\n\n const bridgeAddress = getBridgeAddress(environment);\n const usdcAddress = getUsdcAddress(environment);\n const amountUnits = parseUnits(amount, 6);\n\n if (!wallet.walletClient || !wallet.publicClient) {\n throw new Error(\n \"Wallet client and public client are required for deposit.\"\n );\n }\n\n const walletClient = wallet.walletClient;\n const publicClient = wallet.publicClient;\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [bridgeAddress, amountUnits],\n });\n\n const txHash = await walletClient.sendTransaction({\n account: wallet.account,\n to: usdcAddress,\n data,\n });\n\n await publicClient.waitForTransactionReceipt({ hash: txHash });\n\n return {\n txHash,\n amount: parsedAmount,\n amountUnits: amountUnits.toString(),\n environment,\n bridgeAddress,\n };\n}\n\nexport async function withdrawFromHyperliquid(options: {\n environment: HyperliquidEnvironment;\n amount: string;\n destination: `0x${string}`;\n wallet: WalletFullContext;\n}): Promise<HyperliquidWithdrawResult> {\n const { environment, amount, destination, wallet } = options;\n\n const parsedAmount = Number(amount);\n if (!Number.isFinite(parsedAmount) || parsedAmount <= 0) {\n throw new Error(\"Withdraw amount must be a positive number.\");\n }\n\n if (!wallet.account || !wallet.walletClient || !wallet.publicClient) {\n throw new Error(\n \"Wallet client and public client are required for withdraw.\"\n );\n }\n\n const signatureChainId = getSignatureChainId(environment);\n const hyperliquidChain = HL_CHAIN_LABEL[environment];\n\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const time = BigInt(Date.now());\n const nonce = Number(time);\n const normalizedDestination = normalizeAddress(destination);\n\n const message = {\n hyperliquidChain,\n destination: normalizedDestination,\n amount: parsedAmount.toString(),\n time,\n };\n\n const types = {\n \"HyperliquidTransaction:Withdraw\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"destination\", type: \"string\" },\n { name: \"amount\", type: \"string\" },\n { name: \"time\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:Withdraw\",\n message,\n });\n\n const signature = splitSignature(signatureHex);\n\n const payload = {\n action: {\n type: \"withdraw3\",\n signatureChainId,\n hyperliquidChain,\n destination: normalizedDestination,\n amount: parsedAmount.toString(),\n time: nonce,\n },\n nonce,\n signature,\n };\n\n const endpoint = `${HL_ENDPOINT[environment]}/exchange`;\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n const json = (await response.json().catch(() => null)) as {\n status?: string;\n response?: unknown;\n error?: string;\n } | null;\n\n if (!response.ok || json?.status !== \"ok\") {\n throw new Error(\n `Hyperliquid withdraw failed: ${\n json?.response ?? json?.error ?? response.statusText\n }`\n );\n }\n\n return {\n amount: parsedAmount,\n destination: normalizedDestination,\n environment,\n nonce,\n status: json.status ?? \"ok\",\n };\n}\n\nexport async function fetchHyperliquidClearinghouseState(params: {\n environment: HyperliquidEnvironment;\n walletAddress: `0x${string}`;\n}): Promise<HyperliquidClearinghouseState> {\n const { environment, walletAddress } = params;\n const response = await fetch(`${HL_ENDPOINT[environment]}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"clearinghouseState\", user: walletAddress }),\n });\n\n const data = (await response.json().catch(() => null)) as Record<\n string,\n unknown\n > | null;\n\n return {\n ok: response.ok,\n data,\n };\n}\n\n/**\n * Approve a max builder fee for a specific builder address (user-signed action).\n */\nexport async function approveHyperliquidBuilderFee(\n options: HyperliquidApproveBuilderFeeOptions\n): Promise<HyperliquidApproveBuilderFeeResponse> {\n const { environment, wallet, nonce, signatureChainId } = options;\n\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\n \"Hyperliquid builder approval requires a wallet with signing capabilities.\"\n );\n }\n\n const maxFeeRateValue = BUILDER_CODE.fee / 1000;\n const formattedPercent = `${maxFeeRateValue}%`;\n\n const normalizedBuilder = normalizeAddress(BUILDER_CODE.address);\n const inferredEnvironment = environment ?? \"mainnet\";\n const resolvedBaseUrl = API_BASES[inferredEnvironment];\n const maxFeeRate = formattedPercent;\n\n const effectiveNonce = nonce ?? Date.now();\n const signatureNonce = BigInt(effectiveNonce);\n const signatureChainHex =\n signatureChainId ?? getSignatureChainId(inferredEnvironment);\n\n const approvalSignature = await signApproveBuilderFee({\n wallet,\n maxFeeRate,\n nonce: signatureNonce,\n signatureChainId: signatureChainHex,\n isTestnet: inferredEnvironment === \"testnet\",\n });\n\n const action = {\n type: \"approveBuilderFee\",\n maxFeeRate,\n builder: normalizedBuilder,\n hyperliquidChain: HL_CHAIN_LABEL[inferredEnvironment],\n signatureChainId: signatureChainHex,\n nonce: effectiveNonce,\n };\n\n const payload = {\n action,\n nonce: effectiveNonce,\n signature: approvalSignature,\n };\n\n const response = await fetch(`${resolvedBaseUrl}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n const rawText = await response.text().catch(() => null);\n let parsed: HyperliquidApproveBuilderFeeResponse | { error?: string; message?: string } | string | null = null;\n if (rawText && rawText.length) {\n try {\n parsed = JSON.parse(rawText) as\n | HyperliquidApproveBuilderFeeResponse\n | { error?: string; message?: string }\n | null;\n } catch {\n parsed = rawText;\n }\n }\n const json =\n parsed && typeof parsed === \"object\" && \"status\" in parsed\n ? (parsed as HyperliquidApproveBuilderFeeResponse)\n : null;\n\n if (!response.ok || !json) {\n const detail =\n (parsed as { error?: string; message?: string } | null)?.error ??\n (parsed as { error?: string; message?: string } | null)?.message ??\n (typeof parsed === \"string\" ? parsed : rawText);\n const suffix = detail ? ` Detail: ${detail}` : \"\";\n throw new HyperliquidApiError(\n `Failed to submit builder approval.${suffix}`,\n parsed ?? rawText ?? { status: response.status }\n );\n }\n\n if (json.status !== \"ok\") {\n const detail = (parsed as { error?: string } | null)?.error ?? rawText;\n throw new HyperliquidApiError(\n detail\n ? `Hyperliquid builder approval returned an error: ${detail}`\n : \"Hyperliquid builder approval returned an error.\",\n json\n );\n }\n\n return json;\n}\n\n/**\n * Query max builder fee for a user/builder pair.\n */\nexport async function getHyperliquidMaxBuilderFee(params: {\n environment: HyperliquidEnvironment;\n user: `0x${string}`;\n}): Promise<unknown> {\n const { environment, user } = params;\n const resolvedBaseUrl = API_BASES[environment];\n\n const response = await fetch(`${resolvedBaseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n type: \"maxBuilderFee\",\n user: normalizeAddress(user),\n builder: BUILDER_CODE.address,\n }),\n });\n\n const data = await response.json().catch(() => null);\n if (!response.ok) {\n throw new HyperliquidApiError(\n \"Failed to query max builder fee.\",\n data ?? { status: response.status }\n );\n }\n return data;\n}\n\nexport async function recordHyperliquidTermsAcceptance(\n input: HyperliquidTermsRecordInput\n) {\n const { environment, walletAddress, storeOptions } = input;\n return store(\n {\n source: \"hyperliquid\",\n ref: `${environment}-terms-${Date.now()}`,\n status: \"info\",\n walletAddress,\n action: \"terms\",\n metadata: {\n environment,\n note: \"Hyperliquid does not expose a terms endpoint; this records local acknowledgement only.\",\n },\n },\n storeOptions\n );\n}\n\nexport async function recordHyperliquidBuilderApproval(\n input: HyperliquidBuilderApprovalRecordInput\n) {\n const { environment, walletAddress, storeOptions } = input;\n const maxFeeRate = `${BUILDER_CODE.fee / 1000}%`;\n return store(\n {\n source: \"hyperliquid\",\n ref: `${environment}-builder-${Date.now()}`,\n status: \"info\",\n walletAddress,\n action: \"builder-approval\",\n metadata: {\n environment,\n builder: BUILDER_CODE.address,\n maxFeeRate,\n },\n },\n storeOptions\n );\n}\n\nexport * from \"./exchange\";\nexport * from \"./info\";\n\nexport const __hyperliquidInternals = {\n toApiDecimal,\n createL1ActionHash,\n splitSignature,\n};\n"]}
1
+ {"version":3,"sources":["../../../src/store/index.ts","../../../src/adapters/hyperliquid/base.ts","../../../src/adapters/hyperliquid/info.ts","../../../src/adapters/hyperliquid/exchange.ts","../../../src/adapters/hyperliquid/index.ts"],"names":["universe","encodeMsgpack"],"mappings":"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","file":"index.js","sourcesContent":["type StoreStatus =\n | \"submitted\"\n | \"pending\"\n | \"confirmed\"\n | \"failed\"\n | \"cancelled\"\n | \"filled\"\n | \"partial_fill\"\n | \"settled\"\n | \"info\";\n\nexport type StoreAction =\n | \"stake\"\n | \"swap\"\n | \"bridge\"\n | \"order\"\n | \"lend\"\n | \"repay\"\n | \"withdraw\"\n | \"custom\"\n | string;\n\ntype ChainScope =\n | { chainId: number; network?: never }\n | { network: string; chainId?: never }\n | { chainId?: never; network?: never };\n\nexport type StoreEventInput = ChainScope & {\n source: string;\n ref: string;\n status: StoreStatus;\n walletAddress?: `0x${string}`;\n action?: StoreAction;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n};\n\nexport interface StoreOptions {\n baseUrl?: string;\n apiKey?: string;\n fetchFn?: typeof fetch;\n}\n\nexport interface StoreResponse {\n id: string;\n status?: StoreStatus | null;\n}\n\nexport type StoreRetrieveParams = {\n source?: string;\n walletAddress?: `0x${string}`;\n symbol?: string;\n status?: StoreStatus[];\n since?: number;\n until?: number;\n limit?: number;\n cursor?: string;\n history?: boolean;\n};\n\nexport type StoreRetrieveResult = {\n items: Array<\n StoreEventInput & {\n timestamp?: number;\n updatedBy?: string | null;\n signerKeyId?: string | null;\n }\n >;\n cursor?: string | null;\n};\n\nexport type MyToolsResponse = {\n tools: Array<{\n id: string;\n name: string;\n displayName: string;\n description?: string;\n serverUrl: string;\n source: \"internal\" | \"public\";\n appId?: string;\n deploymentId?: string;\n metadata?: unknown;\n }>;\n};\n\nexport type ToolExecuteRequest = {\n appId: string;\n deploymentId: string;\n toolName: string;\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n body?: unknown;\n};\n\nexport type ToolExecuteResponse = {\n ok: boolean;\n status: number;\n data: unknown;\n};\n\nexport type AgentDigestRequest = {\n content: string;\n runAt?: string;\n metadata?: Record<string, unknown>;\n};\nexport class StoreError extends Error {\n constructor(\n message: string,\n public readonly status?: number,\n public readonly causeData?: unknown\n ) {\n super(message);\n this.name = \"StoreError\";\n }\n}\n\nfunction resolveConfig(options?: StoreOptions) {\n const baseUrl = options?.baseUrl ?? process.env.BASE_URL ?? \"https://api.openpond.ai\";\n const apiKey = options?.apiKey ?? process.env.OPENPOND_API_KEY;\n\n if (!baseUrl) {\n throw new StoreError(\"BASE_URL is required to store activity events\");\n }\n if (!apiKey) {\n throw new StoreError(\n \"OPENPOND_API_KEY is required to store activity events\"\n );\n }\n\n const normalizedBaseUrl = baseUrl.replace(/\\/$/, \"\");\n const fetchFn = options?.fetchFn ?? globalThis.fetch;\n if (!fetchFn) {\n throw new StoreError(\"Fetch is not available in this environment\");\n }\n\n return { baseUrl: normalizedBaseUrl, apiKey, fetchFn };\n}\n\nasync function requestJson(\n url: string,\n options: StoreOptions | undefined,\n init: RequestInit\n): Promise<unknown> {\n const { apiKey, fetchFn } = resolveConfig(options);\n const response = await fetchFn(url, {\n ...init,\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n ...(init.headers ?? {}),\n },\n });\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n if (response.status === 204) {\n return null;\n }\n\n try {\n return await response.json();\n } catch {\n return await response.text().catch(() => null);\n }\n}\n\n/**\n * Store a generic activity event (onchain tx, Hyperliquid order, etc.) in OpenPond.\n */\nexport async function store(\n input: StoreEventInput,\n options?: StoreOptions\n): Promise<StoreResponse> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = `${baseUrl}/apps/positions/tx`;\n\n let response: Response;\n try {\n response = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n body: JSON.stringify(input),\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n try {\n const data = (await response.json()) as Partial<StoreResponse>;\n return {\n id: data.id ?? \"\",\n status: data.status ?? null,\n };\n } catch {\n // Response is optional; return empty success\n return { id: \"\", status: null };\n }\n}\n\n/**\n * Retrieve stored activity events for an app.\n */\nexport async function retrieve(\n params?: StoreRetrieveParams,\n options?: StoreOptions\n): Promise<StoreRetrieveResult> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = new URL(`${baseUrl}/apps/positions/tx`);\n if (params?.source) url.searchParams.set(\"source\", params.source);\n if (params?.walletAddress) url.searchParams.set(\"walletAddress\", params.walletAddress);\n if (params?.symbol) url.searchParams.set(\"symbol\", params.symbol);\n if (params?.status?.length) url.searchParams.set(\"status\", params.status.join(\",\"));\n if (typeof params?.since === \"number\") url.searchParams.set(\"since\", params.since.toString());\n if (typeof params?.until === \"number\") url.searchParams.set(\"until\", params.until.toString());\n if (typeof params?.limit === \"number\") url.searchParams.set(\"limit\", params.limit.toString());\n if (params?.cursor) url.searchParams.set(\"cursor\", params.cursor);\n if (params?.history) url.searchParams.set(\"history\", \"true\");\n\n let response: Response;\n try {\n response = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store retrieve failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n const data = (await response.json().catch(() => null)) as StoreRetrieveResult | null;\n if (!data) {\n return { items: [], cursor: null };\n }\n return data;\n}\n\nexport async function getMyTools(options?: StoreOptions): Promise<MyToolsResponse> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/tools`;\n const data = (await requestJson(url, options, { method: \"GET\" })) as MyToolsResponse;\n return data;\n}\n\nexport async function getMyPerformance(options?: StoreOptions): Promise<unknown> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/performance`;\n return requestJson(url, options, { method: \"GET\" });\n}\n\nexport async function postAgentDigest(\n input: AgentDigestRequest,\n options?: StoreOptions\n): Promise<unknown> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/agent/digest`;\n return requestJson(url, options, {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n}\n\nexport async function executeTool(\n input: ToolExecuteRequest,\n options?: StoreOptions\n): Promise<ToolExecuteResponse> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/tools/execute`;\n const data = (await requestJson(url, options, {\n method: \"POST\",\n body: JSON.stringify(input),\n })) as ToolExecuteResponse;\n return data;\n}\n","import { encode as encodeMsgpack } from \"@msgpack/msgpack\";\nimport { keccak_256 } from \"@noble/hashes/sha3\";\nimport { bytesToHex, concatBytes, hexToBytes } from \"@noble/hashes/utils\";\nimport type { WalletFullContext } from \"../../wallet/types\";\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\n\nexport const API_BASES = {\n mainnet: \"https://api.hyperliquid.xyz\",\n testnet: \"https://api.hyperliquid-testnet.xyz\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const HL_ENDPOINT = {\n mainnet: \"https://api.hyperliquid.xyz\",\n testnet: \"https://api.hyperliquid-testnet.xyz\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const HL_CHAIN_LABEL = {\n mainnet: \"Mainnet\",\n testnet: \"Testnet\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const HL_BRIDGE_ADDRESSES: Record<\n HyperliquidEnvironment,\n `0x${string}`\n> = {\n mainnet: \"0x2df1c51e09aecf9cacb7bc98cb1742757f163df7\",\n testnet: \"0x08cfc1b6b2dcf36a1480b99353a354aa8ac56f89\",\n};\n\nexport const HL_USDC_ADDRESSES: Record<HyperliquidEnvironment, `0x${string}`> =\n {\n mainnet: \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\",\n testnet: \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n };\n\nexport const HL_SIGNATURE_CHAIN_ID = {\n mainnet: \"0xa4b1\",\n testnet: \"0x66eee\",\n} as const satisfies Record<HyperliquidEnvironment, string>;\n\nexport const EXCHANGE_TYPED_DATA_DOMAIN = {\n name: \"Exchange\",\n version: \"1\",\n chainId: 1337,\n verifyingContract: \"0x0000000000000000000000000000000000000000\" as const,\n};\n\nexport const ZERO_ADDRESS =\n \"0x0000000000000000000000000000000000000000\" as const;\nexport const MIN_DEPOSIT_USDC = 5;\nexport const BUILDER_CODE: HyperliquidBuilderFee = {\n address: \"0x4b2aec4F91612849d6e20C9c1881FabB1A48cd12\",\n fee: 100,\n};\n\nconst metaCache = new Map<\n string,\n { fetchedAt: number; universe: MetaResponse[\"universe\"] }\n>();\nconst perpDexsCache = new Map<\n string,\n { fetchedAt: number; dexs: PerpDexsResponse }\n>();\n\nexport type HyperliquidEnvironment = \"mainnet\" | \"testnet\";\nexport type HyperliquidTimeInForce =\n | \"Gtc\"\n | \"Ioc\"\n | \"Alo\"\n | \"FrontendMarket\"\n | \"LiquidationMarket\";\nexport type HyperliquidGrouping = \"na\" | \"normalTpsl\" | \"positionTpsl\";\nexport type HyperliquidTriggerType = \"tp\" | \"sl\";\n\n// Hyperliquid account abstraction modes (API naming).\nexport type HyperliquidAbstraction =\n | \"unifiedAccount\"\n | \"portfolioMargin\"\n | \"disabled\";\n\n// Product-facing naming.\nexport type HyperliquidAccountMode = \"standard\" | \"unified\" | \"portfolio\";\n\nexport function resolveHyperliquidAbstractionFromMode(\n mode: HyperliquidAccountMode\n): HyperliquidAbstraction {\n switch (mode) {\n case \"standard\":\n return \"disabled\";\n case \"unified\":\n return \"unifiedAccount\";\n case \"portfolio\":\n return \"portfolioMargin\";\n default: {\n const _exhaustive: never = mode;\n return _exhaustive;\n }\n }\n}\n\nexport const DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS = 30;\n\nfunction formatRoundedDecimal(value: number, decimals: number): string {\n const precision = Math.max(0, Math.min(12, Math.floor(decimals)));\n const factor = 10 ** precision;\n const rounded = Math.round(value * factor) / factor;\n if (!Number.isFinite(rounded) || rounded <= 0) {\n throw new Error(\"Price must be positive.\");\n }\n const fixed = rounded.toFixed(precision);\n return fixed.replace(/\\.?0+$/, \"\");\n}\n\nexport function computeHyperliquidMarketIocLimitPrice(params: {\n markPrice: number;\n side: \"buy\" | \"sell\";\n slippageBps?: number;\n decimals?: number;\n}): string {\n const bps = params.slippageBps ?? DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS;\n const decimals = params.decimals ?? 6;\n if (!Number.isFinite(params.markPrice) || params.markPrice <= 0) {\n throw new Error(\"markPrice must be a positive number.\");\n }\n if (!Number.isFinite(bps) || bps < 0) {\n throw new Error(\"slippageBps must be a non-negative number.\");\n }\n const slippage = bps / 10_000;\n const multiplier = params.side === \"buy\" ? 1 + slippage : 1 - slippage;\n const price = params.markPrice * multiplier;\n return formatRoundedDecimal(price, decimals);\n}\n\nexport interface HyperliquidTriggerOptions {\n triggerPx: string | number | bigint;\n isMarket?: boolean;\n tpsl: HyperliquidTriggerType;\n}\n\nexport interface HyperliquidBuilderFee {\n address: `0x${string}`;\n /**\n * Fee in tenths of basis points (10 = 1bp = 0.01%). Max defaults to 0.1% (100).\n */\n fee: number;\n}\n\nexport interface HyperliquidOrderIntent {\n symbol: string;\n side: \"buy\" | \"sell\";\n price: string | number | bigint;\n size: string | number | bigint;\n tif?: HyperliquidTimeInForce;\n reduceOnly?: boolean;\n clientId?: `0x${string}`;\n trigger?: HyperliquidTriggerOptions;\n}\n\ntype MetaResponse = {\n universe: Array<{\n name: string;\n }>;\n};\n\ntype PerpDexsResponse = Array<{ name: string } | null>;\n\nexport type ExchangeOrderAction = {\n type: \"order\";\n orders: Array<{\n a: number;\n b: boolean;\n p: string;\n s: string;\n r: boolean;\n t:\n | { limit: { tif: HyperliquidTimeInForce } }\n | {\n trigger: {\n isMarket: boolean;\n triggerPx: string;\n tpsl: HyperliquidTriggerType;\n };\n };\n c?: `0x${string}`;\n }>;\n grouping: HyperliquidGrouping;\n builder?: {\n b: `0x${string}`;\n f: number;\n };\n};\n\nexport type ExchangeSignature = {\n r: `0x${string}`;\n s: `0x${string}`;\n v: 27 | 28;\n};\n\nexport type HyperliquidUserPortfolioMarginAction = {\n type: \"userPortfolioMargin\";\n enabled: boolean;\n hyperliquidChain: string;\n signatureChainId: string;\n user: `0x${string}`;\n nonce: number;\n};\n\nexport type HyperliquidUserDexAbstractionAction = {\n type: \"userDexAbstraction\";\n enabled: boolean;\n hyperliquidChain: string;\n signatureChainId: string;\n user: `0x${string}`;\n nonce: number;\n};\n\nexport type HyperliquidUserSetAbstractionAction = {\n type: \"userSetAbstraction\";\n abstraction: HyperliquidAbstraction;\n hyperliquidChain: string;\n signatureChainId: string;\n user: `0x${string}`;\n nonce: number;\n};\n\nexport type HyperliquidExchangeResponse<T = unknown> = {\n status: string;\n response?: {\n type: string;\n data?: T;\n };\n error?: string;\n};\n\nexport type NonceSource = () => number;\n\nexport class HyperliquidApiError extends Error {\n constructor(message: string, public readonly response: unknown) {\n super(message);\n this.name = \"HyperliquidApiError\";\n }\n}\n\nexport class HyperliquidGuardError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"HyperliquidGuardError\";\n }\n}\n\nexport class HyperliquidTermsError extends HyperliquidGuardError {\n constructor(\n message = \"Hyperliquid terms must be accepted before proceeding.\"\n ) {\n super(message);\n this.name = \"HyperliquidTermsError\";\n }\n}\n\nexport class HyperliquidBuilderApprovalError extends HyperliquidGuardError {\n constructor(\n message = \"Hyperliquid builder approval is required before using builder codes.\"\n ) {\n super(message);\n this.name = \"HyperliquidBuilderApprovalError\";\n }\n}\n\nexport function createMonotonicNonceFactory(\n start: number = Date.now()\n): NonceSource {\n let last = start;\n return () => {\n const now = Date.now();\n if (now > last) {\n last = now;\n } else {\n last += 1;\n }\n return last;\n };\n}\n\nexport async function getUniverse(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n dex?: string;\n}): Promise<MetaResponse[\"universe\"]> {\n const dexKey = args.dex ? args.dex.trim().toLowerCase() : \"\";\n const cacheKey = `${args.environment}:${args.baseUrl}:${dexKey}`;\n const cached = metaCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {\n return cached.universe;\n }\n\n const response = await args.fetcher(`${args.baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(\n dexKey ? { type: \"meta\", dex: dexKey } : { type: \"meta\" }\n ),\n });\n\n const json = (await response.json().catch(() => null)) as MetaResponse | null;\n if (!response.ok || !json?.universe) {\n throw new HyperliquidApiError(\n \"Unable to load Hyperliquid metadata.\",\n json ?? { status: response.status }\n );\n }\n\n metaCache.set(cacheKey, { fetchedAt: Date.now(), universe: json.universe });\n return json.universe;\n}\n\nexport function resolveAssetIndex(\n symbol: string,\n universe: MetaResponse[\"universe\"]\n): number {\n const [raw] = symbol.split(\"-\");\n const target = raw.trim();\n const index = universe.findIndex(\n (entry) => entry.name.toUpperCase() === target.toUpperCase()\n );\n if (index === -1) {\n throw new Error(`Unknown Hyperliquid asset symbol: ${symbol}`);\n }\n return index;\n}\n\nasync function getPerpDexs(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n}): Promise<PerpDexsResponse> {\n const cacheKey = `${args.environment}:${args.baseUrl}`;\n const cached = perpDexsCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {\n return cached.dexs;\n }\n\n const response = await args.fetcher(`${args.baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"perpDexs\" }),\n });\n const json = (await response.json().catch(() => null)) as\n | PerpDexsResponse\n | null;\n if (!response.ok || !Array.isArray(json)) {\n throw new HyperliquidApiError(\n \"Unable to load Hyperliquid perp dex metadata.\",\n json ?? { status: response.status }\n );\n }\n\n perpDexsCache.set(cacheKey, { fetchedAt: Date.now(), dexs: json });\n return json;\n}\n\nasync function resolveDexIndex(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n dex: string;\n}): Promise<number> {\n const dexs = await getPerpDexs(args);\n const target = args.dex.trim().toLowerCase();\n const index = dexs.findIndex(\n (entry) => entry?.name?.toLowerCase() === target\n );\n if (index === -1) {\n throw new Error(`Unknown Hyperliquid perp dex: ${args.dex}`);\n }\n return index;\n}\n\nexport async function resolveHyperliquidAssetIndex(args: {\n symbol: string;\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n}): Promise<number> {\n const trimmed = args.symbol.trim();\n if (!trimmed) {\n throw new Error(\"Hyperliquid symbol must be a non-empty string.\");\n }\n\n const separator = trimmed.indexOf(\":\");\n if (separator > 0) {\n const dex = trimmed.slice(0, separator).trim();\n if (!dex) {\n throw new Error(\"Hyperliquid dex name is required.\");\n }\n const dexIndex = await resolveDexIndex({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n dex,\n });\n const universe = await getUniverse({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n dex,\n });\n const assetIndex = universe.findIndex(\n (entry) => entry.name.toUpperCase() === trimmed.toUpperCase()\n );\n if (assetIndex === -1) {\n throw new Error(`Unknown Hyperliquid asset symbol: ${trimmed}`);\n }\n return 100000 + dexIndex * 10000 + assetIndex;\n }\n\n const universe = await getUniverse({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n });\n return resolveAssetIndex(trimmed, universe);\n}\n\nexport function toApiDecimal(value: string | number | bigint): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n\n if (!Number.isFinite(value)) {\n throw new Error(\"Numeric values must be finite.\");\n }\n\n const asString = value.toString();\n if (/e/i.test(asString)) {\n const [mantissa, exponentPart] = asString.split(/e/i);\n const exponent = Number(exponentPart);\n const [integerPart, fractionalPart = \"\"] = mantissa.split(\".\");\n if (exponent >= 0) {\n return (\n integerPart +\n fractionalPart.padEnd(exponent + fractionalPart.length, \"0\")\n );\n }\n const zeros = \"0\".repeat(Math.abs(exponent) - 1);\n return `0.${zeros}${integerPart}${fractionalPart}`.replace(/\\.0+$/, \"\");\n }\n\n return asString;\n}\n\nexport function normalizeHex(value: `0x${string}`): `0x${string}` {\n const lower = value.toLowerCase();\n return (lower.replace(/^0x0+/, \"0x\") || \"0x0\") as `0x${string}`;\n}\n\nexport function normalizeAddress(value: `0x${string}`): `0x${string}` {\n return normalizeHex(value);\n}\n\nexport async function signL1Action(args: {\n wallet: WalletFullContext;\n action: ExchangeOrderAction | Record<string, unknown>;\n nonce: number;\n vaultAddress?: `0x${string}` | undefined;\n expiresAfter?: number | undefined;\n isTestnet: boolean;\n}): Promise<ExchangeSignature> {\n const { wallet, action, nonce, vaultAddress, expiresAfter, isTestnet } = args;\n\n const actionHash = createL1ActionHash({\n action,\n nonce,\n vaultAddress,\n expiresAfter,\n });\n const message = {\n source: isTestnet ? \"b\" : \"a\",\n connectionId: actionHash,\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain: EXCHANGE_TYPED_DATA_DOMAIN,\n types: {\n Agent: [\n { name: \"source\", type: \"string\" },\n { name: \"connectionId\", type: \"bytes32\" },\n ],\n },\n primaryType: \"Agent\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signSpotSend(args: {\n wallet: WalletFullContext;\n hyperliquidChain: string;\n signatureChainId: string;\n destination: `0x${string}`;\n token: string;\n amount: string;\n time: bigint;\n}): Promise<ExchangeSignature> {\n const {\n wallet,\n hyperliquidChain,\n signatureChainId,\n destination,\n token,\n amount,\n time,\n } = args;\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n hyperliquidChain,\n destination,\n token,\n amount,\n time,\n };\n\n const types = {\n \"HyperliquidTransaction:SpotSend\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"destination\", type: \"string\" },\n { name: \"token\", type: \"string\" },\n { name: \"amount\", type: \"string\" },\n { name: \"time\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:SpotSend\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signApproveBuilderFee(args: {\n wallet: WalletFullContext;\n maxFeeRate: string;\n nonce: bigint;\n signatureChainId: string;\n isTestnet: boolean;\n}): Promise<ExchangeSignature> {\n const { wallet, maxFeeRate, nonce, signatureChainId, isTestnet } = args;\n\n const hyperliquidChain = isTestnet ? \"Testnet\" : \"Mainnet\";\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n hyperliquidChain,\n maxFeeRate,\n builder: BUILDER_CODE.address,\n nonce,\n };\n\n const types = {\n \"HyperliquidTransaction:ApproveBuilderFee\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"maxFeeRate\", type: \"string\" },\n { name: \"builder\", type: \"address\" },\n { name: \"nonce\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:ApproveBuilderFee\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signUserPortfolioMargin(args: {\n wallet: WalletFullContext;\n action: HyperliquidUserPortfolioMarginAction;\n}): Promise<ExchangeSignature> {\n const { wallet, action } = args;\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(action.signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n enabled: action.enabled,\n hyperliquidChain: action.hyperliquidChain,\n user: action.user,\n nonce: BigInt(action.nonce),\n };\n\n const types = {\n \"HyperliquidTransaction:UserPortfolioMargin\": [\n { name: \"enabled\", type: \"bool\" },\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"user\", type: \"address\" },\n { name: \"nonce\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:UserPortfolioMargin\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signUserDexAbstraction(args: {\n wallet: WalletFullContext;\n action: HyperliquidUserDexAbstractionAction;\n}): Promise<ExchangeSignature> {\n const { wallet, action } = args;\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(action.signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n hyperliquidChain: action.hyperliquidChain,\n user: action.user,\n enabled: action.enabled,\n nonce: BigInt(action.nonce),\n };\n\n const types = {\n \"HyperliquidTransaction:UserDexAbstraction\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"user\", type: \"address\" },\n { name: \"enabled\", type: \"bool\" },\n { name: \"nonce\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:UserDexAbstraction\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport async function signUserSetAbstraction(args: {\n wallet: WalletFullContext;\n action: HyperliquidUserSetAbstractionAction;\n}): Promise<ExchangeSignature> {\n const { wallet, action } = args;\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(action.signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const message = {\n hyperliquidChain: action.hyperliquidChain,\n user: action.user,\n abstraction: action.abstraction,\n nonce: BigInt(action.nonce),\n };\n\n const types = {\n \"HyperliquidTransaction:UserSetAbstraction\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"user\", type: \"address\" },\n { name: \"abstraction\", type: \"string\" },\n { name: \"nonce\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:UserSetAbstraction\",\n message,\n });\n\n return splitSignature(signatureHex);\n}\n\nexport function splitSignature(signature: `0x${string}`): ExchangeSignature {\n const cleaned = signature.slice(2);\n const rHex = `0x${cleaned.slice(0, 64)}` as `0x${string}`;\n const sHex = `0x${cleaned.slice(64, 128)}` as `0x${string}`;\n let v = parseInt(cleaned.slice(128, 130), 16);\n if (Number.isNaN(v)) {\n throw new Error(\"Invalid signature returned by wallet client.\");\n }\n if (v < 27) {\n v += 27;\n }\n const normalizedV = (v === 27 || v === 28 ? v : v % 2 ? 27 : 28) as 27 | 28;\n return {\n r: normalizeHex(rHex),\n s: normalizeHex(sHex),\n v: normalizedV,\n };\n}\n\nexport function createL1ActionHash(args: {\n action: ExchangeOrderAction | Record<string, unknown>;\n nonce: number;\n vaultAddress?: `0x${string}` | undefined;\n expiresAfter?: number | undefined;\n}): `0x${string}` {\n const { action, nonce, vaultAddress, expiresAfter } = args;\n\n const actionBytes = encodeMsgpack(action, { ignoreUndefined: true });\n const nonceBytes = toUint64Bytes(nonce);\n\n const vaultMarker = vaultAddress ? new Uint8Array([1]) : new Uint8Array([0]);\n const vaultBytes = vaultAddress\n ? hexToBytes(vaultAddress.slice(2))\n : new Uint8Array();\n\n const hasExpiresAfter = typeof expiresAfter === \"number\";\n const expiresMarker = hasExpiresAfter\n ? new Uint8Array([0])\n : new Uint8Array();\n const expiresBytes =\n hasExpiresAfter && expiresAfter !== undefined\n ? toUint64Bytes(expiresAfter)\n : new Uint8Array();\n\n const bytes = concatBytes(\n actionBytes,\n nonceBytes,\n vaultMarker,\n vaultBytes,\n expiresMarker,\n expiresBytes\n );\n const hash = keccak_256(bytes);\n return `0x${bytesToHex(hash)}`;\n}\n\nexport function toUint64Bytes(value: number): Uint8Array {\n const bytes = new Uint8Array(8);\n new DataView(bytes.buffer).setBigUint64(0, BigInt(value));\n return bytes;\n}\n\nexport function getBridgeAddress(env: HyperliquidEnvironment): `0x${string}` {\n const override = process.env.HYPERLIQUID_BRIDGE_ADDRESS;\n if (override?.trim()) {\n return normalizeAddress(override as `0x${string}`);\n }\n return HL_BRIDGE_ADDRESSES[env];\n}\n\nexport function getUsdcAddress(env: HyperliquidEnvironment): `0x${string}` {\n const override = process.env.HYPERLIQUID_USDC_ADDRESS;\n if (override?.trim()) {\n return normalizeAddress(override as `0x${string}`);\n }\n return HL_USDC_ADDRESSES[env];\n}\n\nexport function getSignatureChainId(env: HyperliquidEnvironment): string {\n const override = process.env.HYPERLIQUID_SIGNATURE_CHAIN_ID;\n const selected = override?.trim() || HL_SIGNATURE_CHAIN_ID[env];\n return normalizeHex(selected as `0x${string}`);\n}\n\nexport function getBaseUrl(environment: HyperliquidEnvironment): string {\n return API_BASES[environment];\n}\n\nexport function assertPositiveNumber(\n value: number,\n label: string\n): asserts value is number {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`${label} must be a positive number.`);\n }\n}\n","import {\n API_BASES,\n HyperliquidApiError,\n HyperliquidEnvironment,\n normalizeAddress,\n} from \"./base\";\n\ntype InfoPayload =\n | { type: \"meta\" }\n | { type: \"metaAndAssetCtxs\" }\n | { type: \"spotMeta\" }\n | { type: \"spotMetaAndAssetCtxs\" }\n | { type: \"assetCtxs\" }\n | { type: \"spotAssetCtxs\" }\n | { type: \"openOrders\"; user: `0x${string}` }\n | { type: \"frontendOpenOrders\"; user: `0x${string}` }\n | { type: \"orderStatus\"; user: `0x${string}`; oid: number | string }\n | { type: \"historicalOrders\"; user: `0x${string}` }\n | { type: \"userHistoricalOrders\"; user: `0x${string}` }\n | { type: \"userFills\"; user: `0x${string}` }\n | {\n type: \"userFillsByTime\";\n user: `0x${string}`;\n startTime: number;\n endTime: number;\n }\n | { type: \"userRateLimit\"; user: `0x${string}` }\n | { type: \"preTransferCheck\"; user: `0x${string}`; source: `0x${string}` }\n | { type: \"spotClearinghouseState\"; user: `0x${string}` };\n\nasync function postInfo(environment: HyperliquidEnvironment, payload: InfoPayload) {\n const baseUrl = API_BASES[environment];\n const response = await fetch(`${baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n const data = await response.json().catch(() => null);\n if (!response.ok) {\n throw new HyperliquidApiError(\n \"Hyperliquid info request failed.\",\n data ?? { status: response.status }\n );\n }\n return data;\n}\n\nexport class HyperliquidInfoClient {\n private readonly environment: HyperliquidEnvironment;\n\n constructor(environment: HyperliquidEnvironment = \"mainnet\") {\n this.environment = environment;\n }\n\n meta() {\n return fetchHyperliquidMeta(this.environment);\n }\n\n metaAndAssetCtxs() {\n return fetchHyperliquidMetaAndAssetCtxs(this.environment);\n }\n\n spotMeta() {\n return fetchHyperliquidSpotMeta(this.environment);\n }\n\n spotMetaAndAssetCtxs() {\n return fetchHyperliquidSpotMetaAndAssetCtxs(this.environment);\n }\n\n assetCtxs() {\n return fetchHyperliquidAssetCtxs(this.environment);\n }\n\n spotAssetCtxs() {\n return fetchHyperliquidSpotAssetCtxs(this.environment);\n }\n\n openOrders(user: `0x${string}`) {\n return fetchHyperliquidOpenOrders({ user, environment: this.environment });\n }\n\n frontendOpenOrders(user: `0x${string}`) {\n return fetchHyperliquidFrontendOpenOrders({\n user,\n environment: this.environment,\n });\n }\n\n orderStatus(user: `0x${string}`, oid: number | string) {\n return fetchHyperliquidOrderStatus({\n user,\n oid,\n environment: this.environment,\n });\n }\n\n historicalOrders(user: `0x${string}`) {\n return fetchHyperliquidHistoricalOrders({\n user,\n environment: this.environment,\n });\n }\n\n userFills(user: `0x${string}`) {\n return fetchHyperliquidUserFills({ user, environment: this.environment });\n }\n\n userFillsByTime(user: `0x${string}`, startTime: number, endTime: number) {\n return fetchHyperliquidUserFillsByTime({\n user,\n startTime,\n endTime,\n environment: this.environment,\n });\n }\n\n userRateLimit(user: `0x${string}`) {\n return fetchHyperliquidUserRateLimit({\n user,\n environment: this.environment,\n });\n }\n\n preTransferCheck(user: `0x${string}`, source: `0x${string}`) {\n return fetchHyperliquidPreTransferCheck({\n user,\n source,\n environment: this.environment,\n });\n }\n\n spotClearinghouseState(user: `0x${string}`) {\n return fetchHyperliquidSpotClearinghouseState({\n user,\n environment: this.environment,\n });\n }\n}\n\nexport async function fetchHyperliquidMeta(environment: HyperliquidEnvironment = \"mainnet\") {\n return postInfo(environment, { type: \"meta\" });\n}\n\nexport async function fetchHyperliquidMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"metaAndAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidSpotMeta(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"spotMeta\" });\n}\n\nexport async function fetchHyperliquidSpotMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"spotMetaAndAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"assetCtxs\" });\n}\n\nexport async function fetchHyperliquidSpotAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\"\n) {\n return postInfo(environment, { type: \"spotAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidOpenOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, { type: \"openOrders\", user: normalizeAddress(params.user) });\n}\n\nexport async function fetchHyperliquidFrontendOpenOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"frontendOpenOrders\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidOrderStatus(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n oid: number | string;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"orderStatus\",\n user: normalizeAddress(params.user),\n oid: params.oid,\n });\n}\n\nexport async function fetchHyperliquidHistoricalOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"historicalOrders\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidUserFills(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"userFills\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidUserFillsByTime(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n startTime: number;\n endTime: number;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"userFillsByTime\",\n user: normalizeAddress(params.user),\n startTime: params.startTime,\n endTime: params.endTime,\n });\n}\n\nexport async function fetchHyperliquidUserRateLimit(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"userRateLimit\",\n user: normalizeAddress(params.user),\n });\n}\n\nexport async function fetchHyperliquidPreTransferCheck(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n source: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"preTransferCheck\",\n user: normalizeAddress(params.user),\n source: normalizeAddress(params.source),\n });\n}\n\nexport async function fetchHyperliquidSpotClearinghouseState(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"spotClearinghouseState\",\n user: normalizeAddress(params.user),\n });\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport {\n API_BASES,\n HL_CHAIN_LABEL,\n HyperliquidApiError,\n type HyperliquidAbstraction,\n type HyperliquidAccountMode,\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n HyperliquidTriggerOptions,\n type ExchangeOrderAction,\n type ExchangeSignature,\n type HyperliquidUserDexAbstractionAction,\n type HyperliquidUserPortfolioMarginAction,\n type HyperliquidUserSetAbstractionAction,\n type NonceSource,\n type HyperliquidExchangeResponse,\n assertPositiveNumber,\n getSignatureChainId,\n normalizeAddress,\n resolveHyperliquidAbstractionFromMode,\n resolveHyperliquidAssetIndex,\n signL1Action,\n signUserDexAbstraction,\n signUserPortfolioMargin,\n signUserSetAbstraction,\n signSpotSend,\n toApiDecimal,\n} from \"./base\";\n\ntype CommonActionOptions = {\n environment?: HyperliquidEnvironment;\n vaultAddress?: `0x${string}` | undefined;\n expiresAfter?: number | undefined;\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n /**\n * Optional per-wallet nonce provider (preferred if available).\n */\n walletNonceProvider?: NonceSource | undefined;\n};\n\ntype CancelInput = { symbol: string; oid: number | string };\ntype CancelByCloidInput = { symbol: string; cloid: `0x${string}` };\n\ntype ModifyOrderInput = {\n oid: number | `0x${string}`;\n order: HyperliquidOrderIntent;\n};\n\ntype TwapOrderInput = {\n symbol: string;\n side: \"buy\" | \"sell\";\n size: string | number | bigint;\n reduceOnly?: boolean;\n minutes: number;\n randomize?: boolean;\n};\n\ntype TwapCancelInput = {\n symbol: string;\n twapId: number;\n};\n\ntype UpdateLeverageInput = {\n symbol: string;\n leverageMode: \"cross\" | \"isolated\";\n leverage: number;\n};\n\ntype UpdateIsolatedMarginInput = {\n symbol: string;\n isBuy: boolean;\n ntli: number;\n};\n\nexport class HyperliquidExchangeClient {\n private readonly nonceSource: NonceSource;\n private readonly environment: HyperliquidEnvironment;\n private readonly vaultAddress: `0x${string}` | undefined;\n private readonly expiresAfter: number | undefined;\n private readonly wallet: WalletFullContext;\n\n constructor(args: {\n wallet: WalletFullContext;\n environment?: HyperliquidEnvironment;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonceSource?: NonceSource;\n walletNonceProvider?: NonceSource;\n }) {\n this.wallet = args.wallet;\n this.environment = args.environment ?? \"mainnet\";\n this.vaultAddress = args.vaultAddress;\n this.expiresAfter = args.expiresAfter;\n const resolvedNonceSource =\n args.walletNonceProvider ?? args.wallet.nonceSource ?? args.nonceSource;\n if (!resolvedNonceSource) {\n throw new Error(\n \"Wallet nonce source is required for Hyperliquid exchange actions.\"\n );\n }\n this.nonceSource = resolvedNonceSource;\n }\n\n cancel(cancels: CancelInput[]) {\n return cancelHyperliquidOrders({\n wallet: this.wallet,\n cancels,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n cancelByCloid(cancels: CancelByCloidInput[]) {\n return cancelHyperliquidOrdersByCloid({\n wallet: this.wallet,\n cancels,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n cancelAll() {\n return cancelAllHyperliquidOrders({\n wallet: this.wallet,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n scheduleCancel(time: number | null) {\n return scheduleHyperliquidCancel({\n wallet: this.wallet,\n time,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n modify(modification: ModifyOrderInput) {\n return modifyHyperliquidOrder({\n wallet: this.wallet,\n modification,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n batchModify(modifications: ModifyOrderInput[]) {\n return batchModifyHyperliquidOrders({\n wallet: this.wallet,\n modifications,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n twapOrder(twap: TwapOrderInput) {\n return placeHyperliquidTwapOrder({\n wallet: this.wallet,\n twap,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n twapCancel(cancel: TwapCancelInput) {\n return cancelHyperliquidTwapOrder({\n wallet: this.wallet,\n cancel,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n updateLeverage(input: UpdateLeverageInput) {\n return updateHyperliquidLeverage({\n wallet: this.wallet,\n input,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n updateIsolatedMargin(input: UpdateIsolatedMarginInput) {\n return updateHyperliquidIsolatedMargin({\n wallet: this.wallet,\n input,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n reserveRequestWeight(weight: number) {\n return reserveHyperliquidRequestWeight({\n wallet: this.wallet,\n weight,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n });\n }\n\n spotSend(params: {\n destination: `0x${string}`;\n token: string;\n amount: string | number | bigint;\n }) {\n return sendHyperliquidSpot({\n wallet: this.wallet,\n environment: this.environment,\n nonceSource: this.nonceSource,\n ...params,\n });\n }\n\n setDexAbstraction(params: { enabled: boolean; user?: `0x${string}` }) {\n const base = {\n wallet: this.wallet,\n enabled: params.enabled,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n } satisfies Omit<Parameters<typeof setHyperliquidDexAbstraction>[0], \"user\">;\n\n return setHyperliquidDexAbstraction(\n params.user ? { ...base, user: params.user } : base\n );\n }\n\n setAccountAbstractionMode(params: {\n mode: HyperliquidAccountMode;\n user?: `0x${string}`;\n }) {\n const base = {\n wallet: this.wallet,\n mode: params.mode,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n } satisfies Omit<\n Parameters<typeof setHyperliquidAccountAbstractionMode>[0],\n \"user\"\n >;\n\n return setHyperliquidAccountAbstractionMode(\n params.user ? { ...base, user: params.user } : base\n );\n }\n\n setPortfolioMargin(params: { enabled: boolean; user?: `0x${string}` }) {\n const base = {\n wallet: this.wallet,\n enabled: params.enabled,\n environment: this.environment,\n vaultAddress: this.vaultAddress,\n expiresAfter: this.expiresAfter,\n nonceSource: this.nonceSource,\n } satisfies Omit<Parameters<typeof setHyperliquidPortfolioMargin>[0], \"user\">;\n\n return setHyperliquidPortfolioMargin(\n params.user ? { ...base, user: params.user } : base\n );\n }\n}\n\nexport async function setHyperliquidPortfolioMargin(options: {\n wallet: WalletFullContext;\n enabled: boolean;\n user?: `0x${string}`;\n} & CommonActionOptions): Promise<HyperliquidExchangeResponse<unknown>> {\n const env = options.environment ?? \"mainnet\";\n if (!options.wallet?.account || !options.wallet.walletClient) {\n throw new Error(\n \"Wallet with signing capability is required for portfolio margin.\"\n );\n }\n\n const nonce =\n options.nonce ??\n options.walletNonceProvider?.() ??\n options.wallet.nonceSource?.() ??\n options.nonceSource?.() ??\n Date.now();\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(\n options.user ?? (options.wallet.address as `0x${string}`)\n );\n\n const action: HyperliquidUserPortfolioMarginAction = {\n type: \"userPortfolioMargin\",\n enabled: Boolean(options.enabled),\n hyperliquidChain,\n signatureChainId,\n user,\n nonce,\n };\n\n const signature: ExchangeSignature = await signUserPortfolioMargin({\n wallet: options.wallet,\n action,\n });\n\n const body: {\n action: typeof action;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n } = {\n action,\n nonce,\n signature,\n };\n\n if (options.vaultAddress) {\n body.vaultAddress = normalizeAddress(options.vaultAddress);\n }\n if (typeof options.expiresAfter === \"number\") {\n body.expiresAfter = options.expiresAfter;\n }\n\n return postExchange(env, body);\n}\n\nexport async function setHyperliquidDexAbstraction(options: {\n wallet: WalletFullContext;\n enabled: boolean;\n user?: `0x${string}`;\n} & CommonActionOptions): Promise<HyperliquidExchangeResponse<unknown>> {\n const env = options.environment ?? \"mainnet\";\n if (!options.wallet?.account || !options.wallet.walletClient) {\n throw new Error(\n \"Wallet with signing capability is required for dex abstraction.\"\n );\n }\n\n const nonce =\n options.nonce ??\n options.walletNonceProvider?.() ??\n options.wallet.nonceSource?.() ??\n options.nonceSource?.() ??\n Date.now();\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(\n options.user ?? (options.wallet.address as `0x${string}`)\n );\n\n const action: HyperliquidUserDexAbstractionAction = {\n type: \"userDexAbstraction\",\n enabled: Boolean(options.enabled),\n hyperliquidChain,\n signatureChainId,\n user,\n nonce,\n };\n\n const signature: ExchangeSignature = await signUserDexAbstraction({\n wallet: options.wallet,\n action,\n });\n\n const body: {\n action: typeof action;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n } = {\n action,\n nonce,\n signature,\n };\n\n if (options.vaultAddress) {\n body.vaultAddress = normalizeAddress(options.vaultAddress);\n }\n if (typeof options.expiresAfter === \"number\") {\n body.expiresAfter = options.expiresAfter;\n }\n\n return postExchange(env, body);\n}\n\nexport async function setHyperliquidAccountAbstractionMode(options: {\n wallet: WalletFullContext;\n mode: HyperliquidAccountMode;\n user?: `0x${string}`;\n} & CommonActionOptions): Promise<HyperliquidExchangeResponse<unknown>> {\n const env = options.environment ?? \"mainnet\";\n if (!options.wallet?.account || !options.wallet.walletClient) {\n throw new Error(\n \"Wallet with signing capability is required for account abstraction mode.\"\n );\n }\n\n const nonce =\n options.nonce ??\n options.walletNonceProvider?.() ??\n options.wallet.nonceSource?.() ??\n options.nonceSource?.() ??\n Date.now();\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(\n options.user ?? (options.wallet.address as `0x${string}`)\n );\n\n const abstraction: HyperliquidAbstraction =\n resolveHyperliquidAbstractionFromMode(options.mode);\n\n const action: HyperliquidUserSetAbstractionAction = {\n type: \"userSetAbstraction\",\n abstraction,\n hyperliquidChain,\n signatureChainId,\n user,\n nonce,\n };\n\n const signature: ExchangeSignature = await signUserSetAbstraction({\n wallet: options.wallet,\n action,\n });\n\n const body: {\n action: typeof action;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n } = {\n action,\n nonce,\n signature,\n };\n\n if (options.vaultAddress) {\n body.vaultAddress = normalizeAddress(options.vaultAddress);\n }\n if (typeof options.expiresAfter === \"number\") {\n body.expiresAfter = options.expiresAfter;\n }\n\n return postExchange(env, body);\n}\n\nexport async function cancelHyperliquidOrders(options: {\n wallet: WalletFullContext;\n cancels: CancelInput[];\n} & CommonActionOptions) {\n options.cancels.forEach((c) => assertSymbol(c.symbol));\n const action = {\n type: \"cancel\",\n cancels: await withAssetIndexes(options, options.cancels, (idx, entry) => ({\n a: idx,\n o: entry.oid,\n })),\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelHyperliquidOrdersByCloid(options: {\n wallet: WalletFullContext;\n cancels: CancelByCloidInput[];\n} & CommonActionOptions) {\n options.cancels.forEach((c) => assertSymbol(c.symbol));\n const action = {\n type: \"cancelByCloid\",\n cancels: await withAssetIndexes(\n options,\n options.cancels,\n (idx, entry) => ({\n a: idx,\n c: normalizeAddress(entry.cloid),\n })\n ),\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelAllHyperliquidOrders(options: {\n wallet: WalletFullContext;\n} & CommonActionOptions) {\n const action = { type: \"cancelAll\" };\n return submitExchangeAction(options, action);\n}\n\nexport async function scheduleHyperliquidCancel(options: {\n wallet: WalletFullContext;\n time: number | null;\n} & CommonActionOptions) {\n if (options.time !== null) {\n assertPositiveNumber(options.time, \"time\");\n }\n const action = { type: \"scheduleCancel\", time: options.time };\n return submitExchangeAction(options, action);\n}\n\nexport async function modifyHyperliquidOrder(options: {\n wallet: WalletFullContext;\n modification: ModifyOrderInput;\n grouping?: HyperliquidGrouping;\n} & CommonActionOptions) {\n const { modification } = options;\n const order = await buildOrder(modification.order, options);\n const action = {\n type: \"modify\",\n oid: modification.oid,\n order,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function batchModifyHyperliquidOrders(options: {\n wallet: WalletFullContext;\n modifications: ModifyOrderInput[];\n} & CommonActionOptions) {\n options.modifications.forEach((m) => assertSymbol(m.order.symbol));\n const modifies = await Promise.all(\n options.modifications.map(async (mod) => ({\n oid: mod.oid,\n order: await buildOrder(mod.order, options),\n }))\n );\n const action = {\n type: \"batchModify\",\n modifies,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function placeHyperliquidTwapOrder(options: {\n wallet: WalletFullContext;\n twap: TwapOrderInput;\n} & CommonActionOptions) {\n const { twap } = options;\n assertSymbol(twap.symbol);\n assertPositiveDecimal(twap.size, \"size\");\n assertPositiveNumber(twap.minutes, \"minutes\");\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: twap.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"twapOrder\",\n twap: {\n a: asset,\n b: twap.side === \"buy\",\n s: toApiDecimal(twap.size),\n r: Boolean(twap.reduceOnly),\n m: twap.minutes,\n t: Boolean(twap.randomize),\n },\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelHyperliquidTwapOrder(options: {\n wallet: WalletFullContext;\n cancel: TwapCancelInput;\n} & CommonActionOptions) {\n assertSymbol(options.cancel.symbol);\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: options.cancel.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"twapCancel\",\n a: asset,\n t: options.cancel.twapId,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function updateHyperliquidLeverage(options: {\n wallet: WalletFullContext;\n input: UpdateLeverageInput;\n} & CommonActionOptions) {\n assertSymbol(options.input.symbol);\n assertPositiveNumber(options.input.leverage, \"leverage\");\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: options.input.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"updateLeverage\",\n asset,\n isCross: options.input.leverageMode === \"cross\",\n leverage: options.input.leverage,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function updateHyperliquidIsolatedMargin(options: {\n wallet: WalletFullContext;\n input: UpdateIsolatedMarginInput;\n} & CommonActionOptions) {\n assertSymbol(options.input.symbol);\n assertPositiveNumber(options.input.ntli, \"ntli\");\n const env = options.environment ?? \"mainnet\";\n const asset = await resolveHyperliquidAssetIndex({\n symbol: options.input.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n const action = {\n type: \"updateIsolatedMargin\",\n asset,\n isBuy: options.input.isBuy,\n ntli: options.input.ntli,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function reserveHyperliquidRequestWeight(options: {\n wallet: WalletFullContext;\n weight: number;\n} & CommonActionOptions) {\n assertPositiveNumber(options.weight, \"weight\");\n const action = {\n type: \"reserveRequestWeight\",\n weight: options.weight,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function createHyperliquidSubAccount(options: {\n wallet: WalletFullContext;\n name: string;\n} & CommonActionOptions) {\n assertString(options.name, \"name\");\n const action = {\n type: \"createSubAccount\",\n name: options.name,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function transferHyperliquidSubAccount(options: {\n wallet: WalletFullContext;\n subAccountUser: `0x${string}`;\n isDeposit: boolean;\n usd: string | number | bigint;\n} & CommonActionOptions) {\n assertString(options.subAccountUser, \"subAccountUser\");\n const usdScaled = normalizeUsdToInt(options.usd);\n const action = {\n type: \"subAccountTransfer\",\n subAccountUser: normalizeAddress(options.subAccountUser),\n isDeposit: Boolean(options.isDeposit),\n usd: usdScaled,\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function sendHyperliquidSpot(options: {\n wallet: WalletFullContext;\n destination: `0x${string}`;\n token: string;\n amount: string | number | bigint;\n environment?: HyperliquidEnvironment;\n nonce?: number;\n nonceSource?: NonceSource;\n}) {\n const env = options.environment ?? \"mainnet\";\n if (!options.wallet.account || !options.wallet.walletClient) {\n throw new Error(\"Wallet with signing capability is required for spotSend.\");\n }\n assertString(options.token, \"token\");\n assertPositiveDecimal(options.amount, \"amount\");\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n\n const nonce =\n options.nonce ?? options.nonceSource?.() ?? Date.now();\n const time = BigInt(nonce);\n\n const signature = await signSpotSend({\n wallet: options.wallet,\n hyperliquidChain,\n signatureChainId,\n destination: normalizeAddress(options.destination),\n token: options.token,\n amount: toApiDecimal(options.amount),\n time,\n });\n\n const action = {\n type: \"spotSend\",\n hyperliquidChain,\n signatureChainId,\n destination: normalizeAddress(options.destination),\n token: options.token,\n amount: toApiDecimal(options.amount),\n time: nonce,\n };\n\n return postExchange(env, { action, nonce, signature });\n}\n\nasync function submitExchangeAction(\n options: { wallet: WalletFullContext } & CommonActionOptions,\n action: Record<string, unknown> | ExchangeOrderAction\n): Promise<HyperliquidExchangeResponse<unknown>> {\n if (!options.wallet?.account || !options.wallet.walletClient) {\n throw new Error(\"Hyperliquid exchange actions require a signing wallet.\");\n }\n\n const env = options.environment ?? \"mainnet\";\n const nonceSource =\n options.walletNonceProvider ?? options.wallet.nonceSource ?? options.nonceSource;\n if (!nonceSource && options.nonce === undefined) {\n throw new Error(\"Wallet nonce source is required for Hyperliquid exchange actions.\");\n }\n const effectiveNonce = options.nonce ?? nonceSource?.();\n if (effectiveNonce === undefined) {\n throw new Error(\"Hyperliquid exchange actions require a nonce.\");\n }\n\n const signature: ExchangeSignature = await signL1Action({\n wallet: options.wallet,\n action,\n nonce: effectiveNonce,\n vaultAddress: options.vaultAddress\n ? normalizeAddress(options.vaultAddress)\n : undefined,\n expiresAfter: options.expiresAfter,\n isTestnet: env === \"testnet\",\n });\n\n const body: {\n action: typeof action;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n } = {\n action,\n nonce: effectiveNonce,\n signature,\n };\n\n if (options.vaultAddress) {\n body.vaultAddress = normalizeAddress(options.vaultAddress);\n }\n if (typeof options.expiresAfter === \"number\") {\n body.expiresAfter = options.expiresAfter;\n }\n\n return postExchange(env, body);\n}\n\nasync function withAssetIndexes<TInput>(\n options: { environment?: HyperliquidEnvironment },\n entries: TInput[],\n mapper: (assetIndex: number, entry: TInput) => Record<string, unknown>\n) {\n const env = options.environment ?? \"mainnet\";\n return Promise.all(\n entries.map(async (entry: any) => {\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: entry.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n return mapper(assetIndex, entry);\n })\n );\n}\n\nasync function buildOrder(\n intent: HyperliquidOrderIntent,\n options: { environment?: HyperliquidEnvironment }\n): Promise<ExchangeOrderAction[\"orders\"][number]> {\n assertSymbol(intent.symbol);\n assertPositiveDecimal(intent.price, \"price\");\n assertPositiveDecimal(intent.size, \"size\");\n const env = options.environment ?? \"mainnet\";\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: API_BASES[env],\n environment: env,\n fetcher: fetch,\n });\n\n const limitOrTrigger = intent.trigger\n ? mapTrigger(intent.trigger)\n : {\n limit: {\n tif: intent.tif ?? \"Ioc\",\n },\n };\n\n return {\n a: assetIndex,\n b: intent.side === \"buy\",\n p: toApiDecimal(intent.price),\n s: toApiDecimal(intent.size),\n r: intent.reduceOnly ?? false,\n t: limitOrTrigger,\n ...(intent.clientId\n ? {\n c: normalizeAddress(intent.clientId),\n }\n : {}),\n };\n}\n\nfunction mapTrigger(\n trigger: HyperliquidTriggerOptions\n): ExchangeOrderAction[\"orders\"][number][\"t\"] {\n assertPositiveDecimal(trigger.triggerPx, \"triggerPx\");\n return {\n trigger: {\n isMarket: Boolean(trigger.isMarket),\n triggerPx: toApiDecimal(trigger.triggerPx),\n tpsl: trigger.tpsl,\n },\n };\n}\n\nfunction assertSymbol(value: string) {\n assertString(value, \"symbol\");\n}\n\nfunction normalizeUsdToInt(value: string | number | bigint): number {\n if (typeof value === \"bigint\") {\n if (value < 0n) {\n throw new Error(\"usd must be non-negative.\");\n }\n return Number(value);\n }\n const parsed = typeof value === \"string\" ? Number.parseFloat(value) : Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(\"usd must be a non-negative number.\");\n }\n return Math.round(parsed * 1_000_000);\n}\n\nfunction assertString(value: unknown, label: string) {\n if (typeof value !== \"string\" || !value.trim()) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n}\n\nfunction assertPositiveDecimal(\n value: string | number | bigint,\n label: string\n) {\n if (typeof value === \"number\") {\n assertPositiveNumber(value, label);\n return;\n }\n if (typeof value === \"bigint\") {\n if (value <= 0n) {\n throw new Error(`${label} must be positive.`);\n }\n return;\n }\n assertString(value, label);\n}\n\nasync function postExchange(\n env: HyperliquidEnvironment,\n body: Record<string, unknown>\n): Promise<HyperliquidExchangeResponse<unknown>> {\n const response = await fetch(`${API_BASES[env]}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n const text = await response.text().catch(() => \"\");\n const json = (() => {\n if (!text) return null;\n try {\n return JSON.parse(text) as HyperliquidExchangeResponse<unknown>;\n } catch {\n return null;\n }\n })();\n\n if (!response.ok) {\n throw new HyperliquidApiError(\"Hyperliquid exchange action failed.\", {\n status: response.status,\n statusText: response.statusText,\n body: json ?? (text ? text : null),\n });\n }\n\n if (!json) {\n throw new HyperliquidApiError(\"Hyperliquid exchange action failed.\", {\n status: response.status,\n statusText: response.statusText,\n body: text ? text : null,\n });\n }\n\n if (json.status !== \"ok\") {\n throw new HyperliquidApiError(\"Hyperliquid exchange returned error.\", {\n status: response.status,\n statusText: response.statusText,\n body: json,\n });\n }\n\n return json;\n}\n","import { encodeFunctionData, erc20Abi, parseUnits } from \"viem\";\nimport type { WalletFullContext } from \"../../wallet/types\";\nimport { store, type StoreOptions } from \"../../store\";\nimport {\n API_BASES,\n BUILDER_CODE,\n HL_CHAIN_LABEL,\n HL_ENDPOINT,\n HyperliquidApiError,\n MIN_DEPOSIT_USDC,\n ZERO_ADDRESS,\n createL1ActionHash,\n getBridgeAddress,\n getSignatureChainId,\n getUsdcAddress,\n normalizeAddress,\n normalizeHex,\n resolveHyperliquidAssetIndex,\n signApproveBuilderFee,\n signL1Action,\n splitSignature,\n toApiDecimal,\n} from \"./base\";\nimport type {\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n ExchangeOrderAction,\n ExchangeSignature,\n} from \"./base\";\nexport type {\n HyperliquidEnvironment as HyperliquidEnvironment,\n HyperliquidTimeInForce as HyperliquidTimeInForce,\n HyperliquidGrouping as HyperliquidGrouping,\n HyperliquidTriggerType as HyperliquidTriggerType,\n HyperliquidTriggerOptions as HyperliquidTriggerOptions,\n HyperliquidOrderIntent as HyperliquidOrderIntent,\n HyperliquidAbstraction as HyperliquidAbstraction,\n HyperliquidAccountMode as HyperliquidAccountMode,\n HyperliquidBuilderFee as HyperliquidBuilderFee,\n NonceSource,\n HyperliquidExchangeResponse,\n} from \"./base\";\nexport {\n HyperliquidApiError,\n HyperliquidGuardError,\n HyperliquidTermsError,\n HyperliquidBuilderApprovalError,\n createMonotonicNonceFactory,\n DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS,\n computeHyperliquidMarketIocLimitPrice,\n resolveHyperliquidAbstractionFromMode,\n} from \"./base\";\nexport {\n fetchHyperliquidMeta,\n fetchHyperliquidMetaAndAssetCtxs,\n fetchHyperliquidSpotMeta,\n fetchHyperliquidSpotMetaAndAssetCtxs,\n fetchHyperliquidAssetCtxs,\n fetchHyperliquidSpotAssetCtxs,\n fetchHyperliquidOpenOrders,\n fetchHyperliquidFrontendOpenOrders,\n fetchHyperliquidOrderStatus,\n fetchHyperliquidHistoricalOrders,\n fetchHyperliquidUserFills,\n fetchHyperliquidUserFillsByTime,\n fetchHyperliquidUserRateLimit,\n fetchHyperliquidPreTransferCheck,\n fetchHyperliquidSpotClearinghouseState,\n HyperliquidInfoClient,\n} from \"./info\";\n\nexport interface HyperliquidOrderOptions {\n wallet: WalletFullContext;\n orders: HyperliquidOrderIntent[];\n grouping?: HyperliquidGrouping;\n environment?: HyperliquidEnvironment;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonce?: number;\n}\n\nexport type HyperliquidOrderStatus =\n | { resting: { oid: number; cloid?: `0x${string}` } }\n | {\n filled: {\n totalSz: string;\n avgPx: string;\n oid: number;\n cloid?: `0x${string}`;\n };\n }\n | { error: string };\n\nexport interface HyperliquidOrderResponse {\n status: \"ok\";\n response: {\n type: \"order\";\n data: {\n statuses: HyperliquidOrderStatus[];\n };\n };\n}\n\nexport interface HyperliquidDepositResult {\n txHash: `0x${string}`;\n amount: number;\n amountUnits: string;\n environment: HyperliquidEnvironment;\n bridgeAddress: `0x${string}`;\n}\n\nexport interface HyperliquidWithdrawResult {\n amount: number;\n destination: `0x${string}`;\n environment: HyperliquidEnvironment;\n nonce: number;\n status: string;\n}\n\nexport interface HyperliquidClearinghouseState {\n ok: boolean;\n data: Record<string, unknown> | null;\n}\n\nexport interface HyperliquidApproveBuilderFeeOptions {\n environment: HyperliquidEnvironment;\n wallet: WalletFullContext;\n nonce?: number;\n /** Override default signature chain id. */\n signatureChainId?: string;\n}\n\nexport interface HyperliquidApproveBuilderFeeResponse {\n status: string;\n response?: unknown;\n error?: string;\n}\n\nexport interface HyperliquidTermsRecordInput {\n environment: HyperliquidEnvironment;\n walletAddress: `0x${string}`;\n storeOptions?: StoreOptions;\n}\n\nexport interface HyperliquidBuilderApprovalRecordInput {\n environment: HyperliquidEnvironment;\n walletAddress: `0x${string}`;\n storeOptions?: StoreOptions;\n}\n\ntype ExchangeRequestBody = {\n action: ExchangeOrderAction;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n};\n\n/**\n * Sign and submit one or more orders to the Hyperliquid exchange endpoint.\n */\nexport async function placeHyperliquidOrder(\n options: HyperliquidOrderOptions\n): Promise<HyperliquidOrderResponse> {\n const {\n wallet,\n orders,\n grouping = \"na\",\n environment,\n vaultAddress,\n expiresAfter,\n nonce,\n } = options;\n\n const effectiveBuilder = BUILDER_CODE;\n\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\n \"Hyperliquid order signing requires a wallet with signing capabilities.\"\n );\n }\n\n if (!orders.length) {\n throw new Error(\"At least one order is required.\");\n }\n\n const inferredEnvironment = environment ?? \"mainnet\";\n const resolvedBaseUrl = API_BASES[inferredEnvironment];\n const preparedOrders = await Promise.all(\n orders.map(async (intent) => {\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: resolvedBaseUrl,\n environment: inferredEnvironment,\n fetcher: fetch,\n });\n\n const limitOrTrigger = intent.trigger\n ? {\n trigger: {\n isMarket: Boolean(intent.trigger.isMarket),\n triggerPx: toApiDecimal(intent.trigger.triggerPx),\n tpsl: intent.trigger.tpsl,\n },\n }\n : {\n limit: {\n tif: intent.tif ?? \"Ioc\",\n },\n };\n\n const order: ExchangeOrderAction[\"orders\"][number] = {\n a: assetIndex,\n b: intent.side === \"buy\",\n p: toApiDecimal(intent.price),\n s: toApiDecimal(intent.size),\n r: intent.reduceOnly ?? false,\n t: limitOrTrigger,\n ...(intent.clientId\n ? {\n c: normalizeHex(intent.clientId),\n }\n : {}),\n };\n\n return order;\n })\n );\n\n const action: ExchangeOrderAction = {\n type: \"order\",\n orders: preparedOrders,\n grouping,\n };\n\n if (effectiveBuilder) {\n action.builder = {\n b: normalizeAddress(effectiveBuilder.address),\n f: effectiveBuilder.fee,\n };\n }\n\n const effectiveNonce = nonce ?? Date.now();\n const signature = await signL1Action({\n wallet,\n action,\n nonce: effectiveNonce,\n ...(vaultAddress ? { vaultAddress } : {}),\n ...(typeof expiresAfter === \"number\" ? { expiresAfter } : {}),\n isTestnet: inferredEnvironment === \"testnet\",\n });\n\n const body: ExchangeRequestBody = {\n action,\n nonce: effectiveNonce,\n signature,\n };\n\n if (vaultAddress) {\n body.vaultAddress = normalizeAddress(vaultAddress);\n }\n\n if (typeof expiresAfter === \"number\") {\n body.expiresAfter = expiresAfter;\n }\n\n const response = await fetch(`${resolvedBaseUrl}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n\n const rawText = await response.text().catch(() => null);\n let parsed: HyperliquidOrderResponse | { error?: string; message?: string } | string | null = null;\n if (rawText && rawText.length) {\n try {\n parsed = JSON.parse(rawText) as\n | HyperliquidOrderResponse\n | { error?: string; message?: string }\n | null;\n } catch {\n parsed = rawText;\n }\n }\n const json =\n parsed && typeof parsed === \"object\" && \"status\" in parsed\n ? (parsed as HyperliquidOrderResponse)\n : null;\n\n if (!response.ok || !json) {\n const detail =\n (parsed as { error?: string; message?: string } | null)?.error ??\n (parsed as { error?: string; message?: string } | null)?.message ??\n (typeof parsed === \"string\" ? parsed : rawText);\n const suffix = detail ? ` Detail: ${detail}` : \"\";\n throw new HyperliquidApiError(\n `Failed to submit Hyperliquid order.${suffix}`,\n parsed ?? rawText ?? { status: response.status }\n );\n }\n\n if (json.status !== \"ok\") {\n const detail = (parsed as { error?: string } | null)?.error ?? rawText;\n throw new HyperliquidApiError(\n detail\n ? `Hyperliquid API returned an error status: ${detail}`\n : \"Hyperliquid API returned an error status.\",\n json\n );\n }\n\n const statuses = json.response?.data?.statuses ?? [];\n const errorStatuses = statuses.filter(\n (entry): entry is { error: string } => \"error\" in entry\n );\n if (errorStatuses.length) {\n const message = errorStatuses.map((entry) => entry.error).join(\", \");\n throw new HyperliquidApiError(\n message || \"Hyperliquid rejected the order.\",\n json\n );\n }\n\n return json;\n}\n\nexport async function depositToHyperliquidBridge(options: {\n environment: HyperliquidEnvironment;\n amount: string;\n wallet: WalletFullContext;\n}): Promise<HyperliquidDepositResult> {\n const { environment, amount, wallet } = options;\n\n const parsedAmount = Number(amount);\n if (!Number.isFinite(parsedAmount) || parsedAmount <= 0) {\n throw new Error(\"Deposit amount must be a positive number.\");\n }\n if (parsedAmount < MIN_DEPOSIT_USDC) {\n throw new Error(`Minimum deposit is ${MIN_DEPOSIT_USDC} USDC.`);\n }\n\n if (!wallet.account || !wallet.walletClient) {\n throw new Error(\"Wallet with signing capability is required for deposit.\");\n }\n\n const bridgeAddress = getBridgeAddress(environment);\n const usdcAddress = getUsdcAddress(environment);\n const amountUnits = parseUnits(amount, 6);\n\n if (!wallet.walletClient || !wallet.publicClient) {\n throw new Error(\n \"Wallet client and public client are required for deposit.\"\n );\n }\n\n const walletClient = wallet.walletClient;\n const publicClient = wallet.publicClient;\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [bridgeAddress, amountUnits],\n });\n\n const txHash = await walletClient.sendTransaction({\n account: wallet.account,\n to: usdcAddress,\n data,\n });\n\n await publicClient.waitForTransactionReceipt({ hash: txHash });\n\n return {\n txHash,\n amount: parsedAmount,\n amountUnits: amountUnits.toString(),\n environment,\n bridgeAddress,\n };\n}\n\nexport async function withdrawFromHyperliquid(options: {\n environment: HyperliquidEnvironment;\n amount: string;\n destination: `0x${string}`;\n wallet: WalletFullContext;\n}): Promise<HyperliquidWithdrawResult> {\n const { environment, amount, destination, wallet } = options;\n\n const parsedAmount = Number(amount);\n if (!Number.isFinite(parsedAmount) || parsedAmount <= 0) {\n throw new Error(\"Withdraw amount must be a positive number.\");\n }\n\n if (!wallet.account || !wallet.walletClient || !wallet.publicClient) {\n throw new Error(\n \"Wallet client and public client are required for withdraw.\"\n );\n }\n\n const signatureChainId = getSignatureChainId(environment);\n const hyperliquidChain = HL_CHAIN_LABEL[environment];\n\n const domain = {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n } as const;\n\n const time = BigInt(Date.now());\n const nonce = Number(time);\n const normalizedDestination = normalizeAddress(destination);\n\n const message = {\n hyperliquidChain,\n destination: normalizedDestination,\n amount: parsedAmount.toString(),\n time,\n };\n\n const types = {\n \"HyperliquidTransaction:Withdraw\": [\n { name: \"hyperliquidChain\", type: \"string\" },\n { name: \"destination\", type: \"string\" },\n { name: \"amount\", type: \"string\" },\n { name: \"time\", type: \"uint64\" },\n ],\n } as const;\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain,\n types,\n primaryType: \"HyperliquidTransaction:Withdraw\",\n message,\n });\n\n const signature = splitSignature(signatureHex);\n\n const payload = {\n action: {\n type: \"withdraw3\",\n signatureChainId,\n hyperliquidChain,\n destination: normalizedDestination,\n amount: parsedAmount.toString(),\n time: nonce,\n },\n nonce,\n signature,\n };\n\n const endpoint = `${HL_ENDPOINT[environment]}/exchange`;\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n const json = (await response.json().catch(() => null)) as {\n status?: string;\n response?: unknown;\n error?: string;\n } | null;\n\n if (!response.ok || json?.status !== \"ok\") {\n throw new Error(\n `Hyperliquid withdraw failed: ${\n json?.response ?? json?.error ?? response.statusText\n }`\n );\n }\n\n return {\n amount: parsedAmount,\n destination: normalizedDestination,\n environment,\n nonce,\n status: json.status ?? \"ok\",\n };\n}\n\nexport async function fetchHyperliquidClearinghouseState(params: {\n environment: HyperliquidEnvironment;\n walletAddress: `0x${string}`;\n}): Promise<HyperliquidClearinghouseState> {\n const { environment, walletAddress } = params;\n const response = await fetch(`${HL_ENDPOINT[environment]}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"clearinghouseState\", user: walletAddress }),\n });\n\n const data = (await response.json().catch(() => null)) as Record<\n string,\n unknown\n > | null;\n\n return {\n ok: response.ok,\n data,\n };\n}\n\n/**\n * Approve a max builder fee for a specific builder address (user-signed action).\n */\nexport async function approveHyperliquidBuilderFee(\n options: HyperliquidApproveBuilderFeeOptions\n): Promise<HyperliquidApproveBuilderFeeResponse> {\n const { environment, wallet, nonce, signatureChainId } = options;\n\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\n \"Hyperliquid builder approval requires a wallet with signing capabilities.\"\n );\n }\n\n const maxFeeRateValue = BUILDER_CODE.fee / 1000;\n const formattedPercent = `${maxFeeRateValue}%`;\n\n const normalizedBuilder = normalizeAddress(BUILDER_CODE.address);\n const inferredEnvironment = environment ?? \"mainnet\";\n const resolvedBaseUrl = API_BASES[inferredEnvironment];\n const maxFeeRate = formattedPercent;\n\n const effectiveNonce = nonce ?? Date.now();\n const signatureNonce = BigInt(effectiveNonce);\n const signatureChainHex =\n signatureChainId ?? getSignatureChainId(inferredEnvironment);\n\n const approvalSignature = await signApproveBuilderFee({\n wallet,\n maxFeeRate,\n nonce: signatureNonce,\n signatureChainId: signatureChainHex,\n isTestnet: inferredEnvironment === \"testnet\",\n });\n\n const action = {\n type: \"approveBuilderFee\",\n maxFeeRate,\n builder: normalizedBuilder,\n hyperliquidChain: HL_CHAIN_LABEL[inferredEnvironment],\n signatureChainId: signatureChainHex,\n nonce: effectiveNonce,\n };\n\n const payload = {\n action,\n nonce: effectiveNonce,\n signature: approvalSignature,\n };\n\n const response = await fetch(`${resolvedBaseUrl}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n const rawText = await response.text().catch(() => null);\n let parsed: HyperliquidApproveBuilderFeeResponse | { error?: string; message?: string } | string | null = null;\n if (rawText && rawText.length) {\n try {\n parsed = JSON.parse(rawText) as\n | HyperliquidApproveBuilderFeeResponse\n | { error?: string; message?: string }\n | null;\n } catch {\n parsed = rawText;\n }\n }\n const json =\n parsed && typeof parsed === \"object\" && \"status\" in parsed\n ? (parsed as HyperliquidApproveBuilderFeeResponse)\n : null;\n\n if (!response.ok || !json) {\n const detail =\n (parsed as { error?: string; message?: string } | null)?.error ??\n (parsed as { error?: string; message?: string } | null)?.message ??\n (typeof parsed === \"string\" ? parsed : rawText);\n const suffix = detail ? ` Detail: ${detail}` : \"\";\n throw new HyperliquidApiError(\n `Failed to submit builder approval.${suffix}`,\n parsed ?? rawText ?? { status: response.status }\n );\n }\n\n if (json.status !== \"ok\") {\n const detail = (parsed as { error?: string } | null)?.error ?? rawText;\n throw new HyperliquidApiError(\n detail\n ? `Hyperliquid builder approval returned an error: ${detail}`\n : \"Hyperliquid builder approval returned an error.\",\n json\n );\n }\n\n return json;\n}\n\n/**\n * Query max builder fee for a user/builder pair.\n */\nexport async function getHyperliquidMaxBuilderFee(params: {\n environment: HyperliquidEnvironment;\n user: `0x${string}`;\n}): Promise<unknown> {\n const { environment, user } = params;\n const resolvedBaseUrl = API_BASES[environment];\n\n const response = await fetch(`${resolvedBaseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n type: \"maxBuilderFee\",\n user: normalizeAddress(user),\n builder: BUILDER_CODE.address,\n }),\n });\n\n const data = await response.json().catch(() => null);\n if (!response.ok) {\n throw new HyperliquidApiError(\n \"Failed to query max builder fee.\",\n data ?? { status: response.status }\n );\n }\n return data;\n}\n\nexport async function recordHyperliquidTermsAcceptance(\n input: HyperliquidTermsRecordInput\n) {\n const { environment, walletAddress, storeOptions } = input;\n return store(\n {\n source: \"hyperliquid\",\n ref: `${environment}-terms-${Date.now()}`,\n status: \"info\",\n walletAddress,\n action: \"terms\",\n metadata: {\n environment,\n note: \"Hyperliquid does not expose a terms endpoint; this records local acknowledgement only.\",\n },\n },\n storeOptions\n );\n}\n\nexport async function recordHyperliquidBuilderApproval(\n input: HyperliquidBuilderApprovalRecordInput\n) {\n const { environment, walletAddress, storeOptions } = input;\n const maxFeeRate = `${BUILDER_CODE.fee / 1000}%`;\n return store(\n {\n source: \"hyperliquid\",\n ref: `${environment}-builder-${Date.now()}`,\n status: \"info\",\n walletAddress,\n action: \"builder-approval\",\n metadata: {\n environment,\n builder: BUILDER_CODE.address,\n maxFeeRate,\n },\n },\n storeOptions\n );\n}\n\nexport * from \"./exchange\";\nexport * from \"./info\";\n\nexport const __hyperliquidInternals = {\n toApiDecimal,\n createL1ActionHash,\n splitSignature,\n};\n"]}