OpenPond
1Branch0Tags
GL
glucryptoMerge commit 'refs/tmp/prod-master'
typescript
import { z } from "zod"; import { store } from "opentool/store"; import { wallet } from "opentool/wallet"; import { HyperliquidApiError, resolveHyperliquidChainConfig, setHyperliquidDexAbstraction, } from "opentool/adapters/hyperliquid"; import type { WalletFullContext } from "opentool/wallet"; export const profile = { description: "Enable/disable HIP-3 DEX abstraction for the configured Turnkey wallet.", }; export const schema = z.object({ enabled: z.boolean().default(true), environment: z.enum(["mainnet", "testnet"]).default("testnet"), }); export async function POST(req: Request): Promise<Response> { try { const body = await req.json().catch(() => ({})); const { enabled, environment } = schema.parse(body); const chainConfig = resolveHyperliquidChainConfig(environment); const context = await wallet({ chain: chainConfig.chain, rpcUrl: chainConfig.rpcUrl ?? process.env.RPC_URL, }); const user = context.address as `0x${string}`; const result = await setHyperliquidDexAbstraction({ wallet: context as WalletFullContext, environment, enabled, user, }); await store({ source: "hyperliquid", ref: `dex-abstraction-${Date.now()}`, status: "submitted", walletAddress: user, action: "dex-abstraction", network: environment === "mainnet" ? "hyperliquid" : "hyperliquid-testnet", metadata: { environment, enabled, user, result, }, }); return Response.json({ ok: true, environment, enabled, user, result, }); } catch (error) { const err = error as { message?: unknown; response?: unknown; cause?: unknown }; const message = typeof err?.message === "string" ? err.message : "Unknown error"; const exchangeResponse = err?.response ?? (error instanceof HyperliquidApiError ? error.response : null); return Response.json( { ok: false, error: message, exchangeResponse, debug: "dex-abstraction@v2", }, { status: 400 } ); } }