opentool 0.19.1 → 0.19.2
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.
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/x402/types.ts","../src/x402/helpers.ts","../src/x402/payment.ts","../src/adapters/mcp.ts","../src/runtime/index.ts","../src/types/index.ts","../src/x402/client.ts","../src/wallet/constants.ts","../src/wallet/nonces.ts","../src/wallet/providers/private-key.ts","../src/wallet/providers/turnkey.ts","../src/wallet/env.ts","../src/wallet/index.ts","../src/store/index.ts","../src/adapters/hyperliquid/base.ts","../src/adapters/hyperliquid/symbols.ts","../src/adapters/hyperliquid/info.ts","../src/adapters/hyperliquid/exchange.ts","../src/adapters/hyperliquid/env.ts","../src/adapters/hyperliquid/strategy.ts","../src/adapters/hyperliquid/order-utils.ts","../src/adapters/hyperliquid/state-readers.ts","../src/adapters/hyperliquid/market-data.ts","../src/adapters/hyperliquid/actions.ts","../src/adapters/hyperliquid/tpsl.ts","../src/adapters/hyperliquid/risk-utils.ts","../src/adapters/hyperliquid/utils.ts","../src/adapters/hyperliquid/index.ts","../src/adapters/polymarket/base.ts","../src/adapters/polymarket/exchange.ts","../src/adapters/polymarket/info.ts","../src/adapters/polymarket/bootstrap.ts","../src/adapters/news/signals.ts","../src/ai/errors.ts","../src/ai/config.ts","../src/ai/models.ts","../src/ai/tools.ts","../src/ai/messages.ts","../src/ai/client.ts","../src/backtest/index.ts"],"names":["z","HTTP_METHODS","baseSepolia","privateKeyToAccount","http","createWalletClient","createPublicClient","tokens","path","base","token","universe","wallet","encodeMsgpack","UNKNOWN_SYMBOL","normalizeSpotTokenName","canonicalPair","quote","normalized","displaySymbol","orderSymbol","marketDataCoin","symbol","parsedWeight","weight","budgetUsd","desired","delta","maxDecimals","descriptor","meta","resolveRequiredNonce","assertPositiveDecimalInput","placeHyperliquidOrder","parseUnits","encodeFunctionData","erc20Abi","ZERO_ADDRESS","toDecimalString","requestJson","DEFAULT_OPENPOND_GATEWAY_URL","resolveConfig","resolve","payload"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const X402_VERSION = 1;\nexport const HEADER_X402 = \"X-PAYMENT\";\nexport const HEADER_PAYMENT_RESPONSE = \"X-PAYMENT-RESPONSE\";\n\nexport const x402RequirementSchema = z.object({\n scheme: z.string().min(1),\n network: z.string().min(1),\n maxAmountRequired: z.string().min(1),\n asset: z.string().min(1),\n payTo: z.string().min(1),\n resource: z.string().optional(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n outputSchema: z.unknown().optional(),\n maxTimeoutSeconds: z.number().int().positive().optional(),\n extra: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\nexport type X402Requirement = z.infer<typeof x402RequirementSchema>;\n\nexport const x402PaymentHeaderSchema = z.object({\n x402Version: z.number().int().positive(),\n scheme: z.string().min(1),\n network: z.string().min(1),\n correlationId: z.string().optional(),\n payload: z.unknown(),\n});\n\nexport type X402PaymentHeader = z.infer<typeof x402PaymentHeaderSchema>;\n\nexport interface X402RequirementsResponse {\n x402Version: number;\n error?: string;\n accepts: X402Requirement[];\n}\n\nexport interface X402PaymentAttempt {\n type: \"x402\";\n headerName: typeof HEADER_X402;\n raw: string;\n payload: X402PaymentHeader;\n}\n\nexport interface X402VerificationResult {\n success: boolean;\n metadata?: {\n optionId: string;\n verifier: string;\n [key: string]: unknown;\n };\n failure?: {\n reason: string;\n code: string;\n };\n responseHeaders?: Record<string, string>;\n}\n\nexport interface X402FacilitatorConfig {\n url: string;\n verifyPath?: string;\n settlePath?: string;\n apiKeyHeader?: string;\n}\n\nexport interface CurrencySpec {\n decimals: number;\n symbol: string;\n network: string;\n assetAddress: string;\n}\n\nexport const SUPPORTED_CURRENCIES: Record<string, CurrencySpec> = {\n USDC: {\n decimals: 6,\n symbol: \"USDC\",\n network: \"base\",\n assetAddress: \"0x833589fCD6eDb6E08f4c7C37b7b4c6e997E08A43\",\n },\n};\n\nexport const DEFAULT_FACILITATOR: X402FacilitatorConfig = {\n url: \"https://facilitator.x402.rs\",\n verifyPath: \"/verify\",\n settlePath: \"/settle\",\n apiKeyHeader: \"Authorization\",\n};\n","import { z } from \"zod\";\nimport {\n HEADER_X402,\n HEADER_PAYMENT_RESPONSE,\n X402_VERSION,\n x402PaymentHeaderSchema,\n x402RequirementSchema,\n type X402PaymentAttempt,\n type X402Requirement,\n type X402VerificationResult,\n type X402FacilitatorConfig,\n} from \"./types\";\n\nexport interface X402PaymentDefinition {\n amount: string;\n currency: { code: string; symbol: string; decimals: number };\n asset: { symbol: string; network: string; address: string; decimals: number };\n payTo: string;\n resource?: string;\n description?: string;\n scheme: string;\n network: string;\n facilitator: X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport function createX402PaymentRequired(definition: X402PaymentDefinition): Response {\n const requirement = toX402Requirement(definition);\n\n // Build full payment requirements response\n const body = {\n schemaVersion: 1,\n message: definition.description ?? \"Payment required\",\n resource: definition.resource,\n accepts: [\n {\n id: \"x402\",\n title: `Pay ${definition.amount} ${definition.currency.code}`,\n description: definition.description,\n amount: {\n value: definition.amount,\n currency: {\n code: definition.currency.code,\n symbol: definition.currency.symbol,\n decimals: definition.currency.decimals,\n kind: \"crypto\",\n },\n },\n asset: {\n symbol: definition.asset.symbol,\n network: definition.asset.network,\n address: definition.asset.address,\n decimals: definition.asset.decimals,\n standard: \"erc20\",\n },\n payTo: definition.payTo,\n resource: definition.resource,\n proof: {\n mode: \"x402\",\n scheme: definition.scheme,\n network: definition.network,\n version: X402_VERSION,\n facilitator: definition.facilitator,\n verifier: \"x402:facilitator\",\n },\n },\n ],\n metadata: definition.metadata ?? {},\n x402: {\n x402Version: X402_VERSION,\n error: definition.description ?? \"Payment required\",\n accepts: [requirement],\n },\n };\n\n return new Response(JSON.stringify(body), {\n status: 402,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nexport function extractX402Attempt(request: Request): X402PaymentAttempt | null {\n const raw = request.headers.get(HEADER_X402);\n if (!raw) {\n return null;\n }\n\n try {\n const payload = decodeJson(raw, x402PaymentHeaderSchema);\n return {\n type: \"x402\",\n headerName: HEADER_X402,\n raw,\n payload,\n };\n } catch {\n return null;\n }\n}\n\nexport async function verifyX402Payment(\n attempt: X402PaymentAttempt,\n definition: X402PaymentDefinition,\n options: {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n timeout?: number;\n } = {},\n): Promise<X402VerificationResult> {\n const fetchImpl = options.fetchImpl ?? fetch;\n const timeout = options.timeout ?? 25000; // 25 second default timeout\n const facilitator = definition.facilitator;\n\n const verifierUrl = new URL(\n facilitator.verifyPath ?? \"/verify\",\n ensureTrailingSlash(facilitator.url),\n ).toString();\n\n const requirement = toX402Requirement(definition);\n const headers = buildFacilitatorHeaders(facilitator);\n\n try {\n const verifyBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /verify\", {\n url: verifierUrl,\n fullBody: JSON.stringify(verifyBody, null, 2),\n });\n const verifyResponse = await Promise.race([\n fetchImpl(verifierUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(verifyBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Verification timeout after ${timeout}ms`)), timeout),\n ),\n ]);\n console.log(\"[x402] Facilitator /verify response\", { status: verifyResponse.status });\n\n if (!verifyResponse.ok) {\n const errorText = await verifyResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /verify error\", {\n status: verifyResponse.status,\n body: errorText,\n });\n return {\n success: false,\n failure: {\n reason: `Facilitator verify request failed: ${verifyResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"verification_failed\",\n },\n };\n }\n\n const verifyPayload = (await verifyResponse.json()) as {\n isValid: boolean;\n invalidReason?: string | null;\n };\n\n if (!verifyPayload.isValid) {\n return {\n success: false,\n failure: {\n reason: verifyPayload.invalidReason ?? \"Facilitator verification failed\",\n code: \"verification_failed\",\n },\n };\n }\n\n const responseHeaders: Record<string, string> = {};\n if (options.settle) {\n const settleUrl = new URL(\n facilitator.settlePath ?? \"/settle\",\n ensureTrailingSlash(facilitator.url),\n ).toString();\n\n try {\n const settleBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /settle\", {\n url: settleUrl,\n bodyPreview: JSON.stringify(settleBody).substring(0, 300),\n });\n const settleResponse = await Promise.race([\n fetchImpl(settleUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(settleBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Settlement timeout after ${timeout}ms`)), timeout),\n ),\n ]);\n console.log(\"[x402] Facilitator /settle response\", { status: settleResponse.status });\n\n if (!settleResponse.ok) {\n const errorText = await settleResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /settle error\", {\n status: settleResponse.status,\n body: errorText,\n });\n return {\n success: false,\n failure: {\n reason: `Facilitator settlement failed: ${settleResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"settlement_failed\",\n },\n };\n }\n\n const settlePayload = (await settleResponse.json()) as {\n txHash?: string;\n [key: string]: unknown;\n };\n console.log(\"[x402] Facilitator /settle success\", { txHash: settlePayload.txHash });\n if (settlePayload.txHash) {\n responseHeaders[HEADER_PAYMENT_RESPONSE] = JSON.stringify({\n settled: true,\n txHash: settlePayload.txHash,\n });\n }\n } catch (error) {\n console.error(\"[x402] Settlement exception\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Settlement failed\",\n code: \"settlement_failed\",\n },\n };\n }\n }\n\n const result: X402VerificationResult = {\n success: true,\n metadata: {\n optionId: \"x402\",\n verifier: \"x402:facilitator\",\n amount: definition.amount,\n currency: definition.currency.code,\n network: definition.network,\n },\n };\n\n if (Object.keys(responseHeaders).length > 0) {\n result.responseHeaders = responseHeaders;\n }\n\n return result;\n } catch (error) {\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Unknown error\",\n code: \"verification_failed\",\n },\n };\n }\n}\n\nfunction toX402Requirement(definition: X402PaymentDefinition): X402Requirement {\n const decimals = definition.asset.decimals;\n const units = decimalToBaseUnits(definition.amount, decimals);\n\n return x402RequirementSchema.parse({\n scheme: definition.scheme,\n network: definition.network,\n maxAmountRequired: units,\n asset: definition.asset.address,\n payTo: definition.payTo,\n resource: definition.resource,\n description: definition.description,\n mimeType: \"application/json\",\n maxTimeoutSeconds: 900,\n extra: {\n symbol: definition.asset.symbol,\n currencyCode: definition.currency.code,\n decimals,\n },\n });\n}\n\nfunction decimalToBaseUnits(value: string, decimals: number): string {\n const [whole, fraction = \"\"] = value.split(\".\");\n const sanitizedFraction = fraction.slice(0, decimals);\n const paddedFraction = sanitizedFraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`.replace(/^0+/, \"\");\n return combined.length > 0 ? combined : \"0\";\n}\n\nfunction decodeJson<T>(value: string, schema: z.ZodSchema<T>): T {\n const base64 = normalizeBase64(value);\n const json = Buffer.from(base64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n return schema.parse(parsed);\n}\n\nfunction normalizeBase64(input: string): string {\n if (/^[A-Za-z0-9+/=]+$/.test(input)) {\n return input;\n }\n const restored = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const paddingNeeded = (4 - (restored.length % 4)) % 4;\n return restored + \"=\".repeat(paddingNeeded);\n}\n\nfunction buildFacilitatorHeaders(facilitator: X402FacilitatorConfig): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (facilitator.apiKeyHeader && process.env.X402_FACILITATOR_API_KEY) {\n headers[facilitator.apiKeyHeader] = process.env.X402_FACILITATOR_API_KEY;\n }\n return headers;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nexport const PAYMENT_HEADERS = [HEADER_X402, HEADER_PAYMENT_RESPONSE] as const;\n","import {\n createX402PaymentRequired,\n extractX402Attempt,\n verifyX402Payment,\n PAYMENT_HEADERS,\n type X402PaymentDefinition,\n} from \"./helpers\";\nimport {\n SUPPORTED_CURRENCIES,\n DEFAULT_FACILITATOR,\n type X402FacilitatorConfig,\n type X402VerificationResult,\n type CurrencySpec,\n} from \"./types\";\n\nexport interface DefineX402PaymentConfig {\n amount: string | number;\n payTo: string;\n currency?: string;\n message?: string;\n resource?: string;\n network?: string;\n assetAddress?: string;\n scheme?: \"exact\" | \"bounded\";\n facilitator?: string | X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport interface X402Payment {\n definition: X402PaymentDefinition;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RequireX402PaymentOptions {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n onFailure?: (result: X402VerificationResult) => Response;\n}\n\nexport interface RequireX402PaymentSuccess {\n payment: {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n };\n headers: Record<string, string>;\n result: X402VerificationResult;\n}\n\nexport type RequireX402PaymentOutcome = Response | RequireX402PaymentSuccess;\n\nconst PAYMENT_CONTEXT_SYMBOL = Symbol.for(\"opentool.x402.context\");\n\nexport class X402PaymentRequiredError extends Error {\n readonly response: Response;\n readonly verification: X402VerificationResult | undefined;\n\n constructor(response: Response, verification?: X402VerificationResult) {\n super(\"X402 Payment required\");\n this.name = \"X402PaymentRequiredError\";\n this.response = response;\n this.verification = verification;\n }\n}\n\nexport type X402PaymentContext = RequireX402PaymentSuccess;\n\nfunction setPaymentContext(request: Request, context: X402PaymentContext): void {\n try {\n Object.defineProperty(request, PAYMENT_CONTEXT_SYMBOL, {\n value: context,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n } catch {\n (request as any)[PAYMENT_CONTEXT_SYMBOL] = context;\n }\n}\n\nexport function getX402PaymentContext(request: Request): X402PaymentContext | undefined {\n return (request as any)[PAYMENT_CONTEXT_SYMBOL];\n}\n\nexport function defineX402Payment(config: DefineX402PaymentConfig): X402Payment {\n const currencyCode = normalizeCurrency(config.currency);\n const currencySpec = SUPPORTED_CURRENCIES[currencyCode];\n\n if (!currencySpec) {\n throw new Error(`Unsupported currency for x402 payments: ${currencyCode}`);\n }\n\n const network = config.network ?? currencySpec.network;\n const assetAddress = config.assetAddress ?? currencySpec.assetAddress;\n\n if (!network || !assetAddress) {\n throw new Error(\n \"x402 payments require a network and assetAddress; supply them or choose a supported currency.\",\n );\n }\n\n const facilitator = resolveFacilitator(config.facilitator);\n const value = toDecimalString(config.amount);\n\n const definition: X402PaymentDefinition = {\n amount: value,\n currency: {\n code: currencyCode,\n symbol: currencySpec.symbol,\n decimals: currencySpec.decimals,\n },\n asset: {\n symbol: currencySpec.symbol,\n network,\n address: assetAddress,\n decimals: currencySpec.decimals,\n },\n payTo: config.payTo,\n scheme: config.scheme ?? \"exact\",\n network,\n facilitator,\n };\n\n if (config.resource) {\n definition.resource = config.resource;\n }\n if (config.message) {\n definition.description = config.message;\n }\n if (config.metadata) {\n definition.metadata = config.metadata;\n }\n\n const baseMetadata: Record<string, unknown> = {\n amountUSDC: currencyCode === \"USDC\" ? Number(value) : undefined,\n facilitator: \"x402rs\",\n network,\n };\n\n const metadata = config.metadata ? { ...baseMetadata, ...config.metadata } : baseMetadata;\n\n return {\n definition,\n metadata,\n };\n}\n\nexport async function requireX402Payment(\n request: Request,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {},\n): Promise<RequireX402PaymentOutcome> {\n const definition = isX402Payment(payment) ? payment.definition : payment;\n\n const attempt = extractX402Attempt(request);\n if (!attempt) {\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response);\n }\n\n const verifyOptions: Parameters<typeof verifyX402Payment>[2] = {\n settle: options.settle !== undefined ? options.settle : true,\n };\n if (options.fetchImpl !== undefined) {\n verifyOptions.fetchImpl = options.fetchImpl;\n }\n\n const verification = await verifyX402Payment(attempt, definition, verifyOptions);\n\n if (!verification.success || !verification.metadata) {\n if (options.onFailure) {\n return options.onFailure(verification);\n }\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response, verification);\n }\n\n return {\n payment: verification.metadata as {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n },\n headers: verification.responseHeaders ?? {},\n result: verification,\n };\n}\n\nexport function withX402Payment(\n handler: (request: Request) => Promise<Response> | Response,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {},\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const verification = await requireX402Payment(request, payment, options);\n if (verification instanceof Response) {\n return verification;\n }\n\n setPaymentContext(request, verification);\n\n const response = await Promise.resolve(handler(request));\n return applyPaymentHeaders(response, verification.headers);\n };\n}\n\nfunction applyPaymentHeaders(response: Response, headers: Record<string, string>): Response {\n const entries = Object.entries(headers ?? {});\n if (entries.length === 0) {\n return response;\n }\n\n let mutated = false;\n const merged = new Headers(response.headers);\n for (const [key, value] of entries) {\n if (!merged.has(key)) {\n merged.set(key, value);\n mutated = true;\n }\n }\n\n if (!mutated) {\n return response;\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n}\n\nfunction isX402Payment(value: unknown): value is X402Payment {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n (value as X402Payment).definition !== undefined\n );\n}\n\nfunction resolveFacilitator(\n value: string | X402FacilitatorConfig | undefined,\n): X402FacilitatorConfig {\n if (!value) {\n return DEFAULT_FACILITATOR;\n }\n if (typeof value === \"string\") {\n return { ...DEFAULT_FACILITATOR, url: value };\n }\n return value;\n}\n\nfunction normalizeCurrency(currency?: string): string {\n return (currency ?? \"USDC\").toUpperCase();\n}\n\nfunction toDecimalString(value: string | number): string {\n return typeof value === \"number\" ? value.toString() : value;\n}\n\nexport { PAYMENT_HEADERS };\nexport type { X402PaymentDefinition, X402VerificationResult, X402FacilitatorConfig, CurrencySpec };\nexport { SUPPORTED_CURRENCIES, DEFAULT_FACILITATOR };\n","import { z, type ZodSchema } from \"zod\";\nimport { X402PaymentRequiredError } from \"../x402/payment\";\nimport type { ToolResponse } from \"../types/index\";\n\nexport const HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface CreateMcpAdapterOptions {\n name: string;\n schema?: ZodSchema;\n httpHandlers: Record<string, ((request: Request) => Promise<Response> | Response) | undefined>;\n defaultMethod?: string;\n}\n\n/**\n * Create an adapter that bridges MCP `call_tool` invocations to Web Standard handlers.\n */\nexport function createMcpAdapter(options: CreateMcpAdapterOptions) {\n const normalizedSchema = ensureSchema(options.schema);\n const defaultMethod = resolveDefaultMethod(options);\n const httpHandler = options.httpHandlers[defaultMethod];\n\n if (!httpHandler) {\n throw new Error(`Tool \"${options.name}\" does not export an HTTP handler for ${defaultMethod}`);\n }\n\n return async function invoke(rawArguments: unknown): Promise<ToolResponse> {\n const validated = normalizedSchema ? normalizedSchema.parse(rawArguments ?? {}) : rawArguments;\n\n const request = buildRequest(options.name, defaultMethod, validated);\n try {\n const response = await Promise.resolve(httpHandler(request));\n return await responseToToolResponse(response);\n } catch (error) {\n if (error instanceof X402PaymentRequiredError) {\n return await responseToToolResponse(error.response);\n }\n throw error;\n }\n };\n}\n\nfunction resolveDefaultMethod(options: CreateMcpAdapterOptions): HttpMethod {\n const explicit = options.defaultMethod?.toUpperCase();\n if (explicit && typeof options.httpHandlers[explicit] === \"function\") {\n return explicit as HttpMethod;\n }\n\n const preferredOrder: HttpMethod[] = [\"POST\", \"PUT\", \"PATCH\", \"GET\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n for (const method of preferredOrder) {\n if (typeof options.httpHandlers[method] === \"function\") {\n return method;\n }\n }\n\n const available = Object.keys(options.httpHandlers).filter(\n (method) => typeof options.httpHandlers[method] === \"function\",\n );\n if (available.length > 0) {\n return available[0] as HttpMethod;\n }\n\n throw new Error(`No HTTP handlers available for tool \"${options.name}\"`);\n}\n\nfunction ensureSchema(schema: ZodSchema | undefined): ZodSchema | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (schema instanceof z.ZodType) {\n return schema;\n }\n\n if (typeof (schema as any)?.parse === \"function\") {\n return schema;\n }\n\n throw new Error(\"MCP adapter requires a valid Zod schema to validate arguments\");\n}\n\nfunction buildRequest(name: string, method: string, params: unknown): Request {\n const url = new URL(`https://opentool.local/${encodeURIComponent(name)}`);\n\n const headers = new Headers({\n \"x-opentool-invocation\": \"mcp\",\n \"x-opentool-tool\": name,\n });\n\n if (method === \"GET\" || method === \"HEAD\") {\n if (params && typeof params === \"object\") {\n Object.entries(params as Record<string, unknown>).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n return new Request(url, { method, headers });\n }\n\n headers.set(\"Content-Type\", \"application/json\");\n const init: RequestInit = { method, headers };\n if (params != null) {\n init.body = JSON.stringify(params);\n }\n return new Request(url, init);\n}\n\nexport async function responseToToolResponse(response: Response): Promise<ToolResponse> {\n const statusIsError = response.status >= 400;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n\n if (contentType.includes(\"application/json\")) {\n try {\n const payload = text ? JSON.parse(text) : {};\n if (payload && typeof payload === \"object\" && Array.isArray(payload.content)) {\n return {\n content: payload.content,\n isError: payload.isError ?? statusIsError,\n };\n }\n return {\n content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }],\n isError: statusIsError,\n };\n } catch {\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n }\n }\n\n if (!text) {\n return {\n content: [],\n isError: statusIsError,\n };\n }\n\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n}\n\nexport type { ToolResponse };\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { CallToolRequestSchema, ListToolsRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport * as fs from \"fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"url\";\nimport { zodToJsonSchema } from \"@alcyone-labs/zod-to-json-schema\";\nimport { createMcpAdapter, HTTP_METHODS } from \"../adapters/mcp\";\nimport { withX402Payment } from \"../x402/payment\";\nimport {\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n type ToolResponse,\n} from \"../types/index\";\nimport { BuildMetadata, Tool } from \"../types/metadata\";\n\ninterface AdapterEntry {\n tool: InternalToolDefinition;\n invoke: (params: unknown) => Promise<ToolResponse>;\n}\n\n/**\n * Create local development server for MCP tooling.\n */\nexport function createDevServer(tools: InternalToolDefinition[]): Server {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n\n const adapters = buildAdapters(tools);\n\n const server = new Server(\n {\n name: \"opentool-dev\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: \"text\", text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n return server;\n}\n\n/**\n * Create stdio server for use with AWS Lambda MCP Adapter\n */\nexport async function createStdioServer(tools?: InternalToolDefinition[]): Promise<void> {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n const toolDefinitions = tools || (await loadToolsFromDirectory(metadataMap));\n const adapters = buildAdapters(toolDefinitions);\n\n const server = new Server(\n {\n name: \"opentool-runtime\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: \"text\", text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"MCP stdio server started\");\n}\n\nfunction buildAdapters(tools: InternalToolDefinition[]): AdapterEntry[] {\n return tools\n .filter((tool) => isMcpEnabled(tool))\n .map((tool) => {\n const httpHandlers = toHttpHandlerMap(tool.httpHandlers);\n const adapterOptions = {\n name: tool.metadata?.name || tool.filename,\n httpHandlers,\n ...(tool.schema ? { schema: tool.schema } : {}),\n ...(tool.mcpConfig?.defaultMethod ? { defaultMethod: tool.mcpConfig.defaultMethod } : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n return {\n tool,\n invoke: adapter,\n };\n });\n}\n\n/**\n * Load tools from tools directory\n */\nasync function loadToolsFromDirectory(\n metadataMap: Map<string, Tool>,\n): Promise<InternalToolDefinition[]> {\n const tools: InternalToolDefinition[] = [];\n const toolsDir = path.join(process.cwd(), \"tools\");\n if (!fs.existsSync(toolsDir)) {\n return tools;\n }\n\n const files = fs.readdirSync(toolsDir);\n for (const file of files) {\n if (!isSupportedToolFile(file)) {\n continue;\n }\n\n const toolPath = path.join(toolsDir, file);\n try {\n const exportsObject = require(toolPath);\n const candidate = resolveModuleCandidate(exportsObject);\n if (!candidate?.schema) {\n continue;\n }\n\n const baseName = file.replace(/\\.[^.]+$/, \"\");\n const name = candidate.metadata?.name || baseName;\n const meta = metadataMap.get(name);\n\n let inputSchema = meta?.inputSchema;\n if (!inputSchema) {\n try {\n inputSchema = zodToJsonSchema(candidate.schema, {\n name: `${name}Schema`,\n target: \"jsonSchema7\",\n $refStrategy: \"none\",\n });\n } catch {\n inputSchema = { type: \"object\" };\n }\n }\n inputSchema = normalizeInputSchema(inputSchema);\n\n const payment = candidate.payment ?? null;\n const httpHandlersRaw = collectHttpHandlers(candidate);\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n continue;\n }\n\n if (payment) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withX402Payment(entry.handler, payment),\n };\n }\n }\n\n const mcpConfig = normalizeRuntimeMcpConfig(candidate.mcp);\n const adapterOptions = {\n name,\n httpHandlers: toHttpHandlerMap(httpHandlers),\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n ...(typeof candidate.mcp?.defaultMethod === \"string\"\n ? { defaultMethod: candidate.mcp.defaultMethod }\n : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n const tool: InternalToolDefinition = {\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n inputSchema,\n metadata: candidate.metadata || meta || null,\n filename: baseName,\n httpHandlers,\n mcpConfig,\n handler: async (params) => adapter(params),\n payment,\n };\n tools.push(tool);\n } catch (error) {\n console.warn(`Failed to load tool from ${file}: ${error}`);\n }\n }\n\n return tools;\n}\n\nfunction loadMetadata(): BuildMetadata | null {\n const metadataPath = path.join(process.cwd(), \"metadata.json\");\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n try {\n const contents = fs.readFileSync(metadataPath, \"utf8\");\n return JSON.parse(contents) as BuildMetadata;\n } catch (error) {\n console.warn(`Failed to parse metadata.json: ${error}`);\n return null;\n }\n}\n\nfunction buildMetadataMap(metadata: BuildMetadata | null): Map<string, Tool> {\n const map = new Map<string, Tool>();\n if (!metadata?.tools) {\n return map;\n }\n metadata.tools.forEach((tool) => {\n map.set(tool.name, tool);\n });\n return map;\n}\n\nfunction serializeTool(tool: InternalToolDefinition, metadataMap: Map<string, Tool>) {\n const name = tool.metadata?.name || tool.filename;\n const meta = metadataMap.get(name);\n return {\n name,\n description: meta?.description || tool.metadata?.description || `${tool.filename} tool`,\n inputSchema: meta?.inputSchema || tool.inputSchema,\n annotations: meta?.annotations || tool.metadata?.annotations,\n payment: meta?.payment || tool.metadata?.payment,\n discovery: meta?.discovery || tool.metadata?.discovery,\n };\n}\n\nfunction isSupportedToolFile(file: string): boolean {\n return /\\.(cjs|mjs|js|ts)$/i.test(file);\n}\n\nfunction resolveModuleCandidate(exportsObject: any): any {\n if (!exportsObject) {\n return null;\n }\n if (exportsObject.schema) {\n return exportsObject;\n }\n if (exportsObject.default && exportsObject.default.schema) {\n return exportsObject.default;\n }\n return exportsObject;\n}\n\nfunction collectHttpHandlers(module: any): HttpHandlerDefinition[] {\n const handlers: HttpHandlerDefinition[] = [];\n HTTP_METHODS.forEach((method) => {\n const handler = module?.[method];\n if (typeof handler === \"function\") {\n handlers.push({\n method,\n handler: async (request: Request) => handler.call(module, request),\n });\n }\n });\n return handlers;\n}\n\nfunction toHttpHandlerMap(\n handlers: HttpHandlerDefinition[],\n): Record<string, HttpHandlerDefinition[\"handler\"]> {\n return handlers.reduce<Record<string, HttpHandlerDefinition[\"handler\"]>>((acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n }, {});\n}\n\nfunction normalizeInputSchema(schema: any): any {\n if (!schema || typeof schema !== \"object\") {\n return schema;\n }\n\n const clone = JSON.parse(JSON.stringify(schema));\n\n if (typeof clone.$ref === \"string\" && clone.$ref.startsWith(\"#/definitions/\")) {\n const refKey = clone.$ref.replace(\"#/definitions/\", \"\");\n if (clone.definitions && typeof clone.definitions[refKey] === \"object\") {\n return normalizeInputSchema(clone.definitions[refKey]);\n }\n }\n\n delete clone.$ref;\n delete clone.definitions;\n\n if (!clone.type) {\n clone.type = \"object\";\n }\n\n return clone;\n}\n\nfunction normalizeRuntimeMcpConfig(rawConfig: any): McpConfig | null {\n if (isPlainObject(rawConfig) && rawConfig.enabled === true) {\n let normalizedMode: McpConfig[\"mode\"] | undefined;\n if (typeof rawConfig.mode === \"string\") {\n const candidate = rawConfig.mode.toLowerCase();\n if (candidate === \"stdio\" || candidate === \"lambda\" || candidate === \"dual\") {\n normalizedMode = candidate as McpConfig[\"mode\"];\n } else {\n throw new Error('mcp.mode must be one of \"stdio\", \"lambda\", or \"dual\"');\n }\n }\n const metadataOverrides = isPlainObject(rawConfig.metadataOverrides)\n ? rawConfig.metadataOverrides\n : undefined;\n const config: McpConfig = { enabled: true };\n\n if (normalizedMode) {\n config.mode = normalizedMode;\n }\n\n if (typeof rawConfig.defaultMethod === \"string\") {\n config.defaultMethod = rawConfig.defaultMethod.toUpperCase();\n }\n\n if (metadataOverrides) {\n config.metadataOverrides = metadataOverrides;\n }\n\n return config;\n }\n\n return null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isMcpEnabled(tool: InternalToolDefinition): boolean {\n return Boolean(tool.mcpConfig?.enabled);\n}\n\nexport function resolveRuntimePath(value: string): string {\n if (value.startsWith(\"file://\")) {\n return fileURLToPath(value);\n }\n return path.resolve(value);\n}\n","import { z } from \"zod\";\nimport type { ToolMetadataOverrides } from \"./metadata\";\nimport type { ToolCategory, ToolProfile } from \"./tool\";\nimport type { X402Payment } from \"../x402/payment\";\n\nexport interface ToolContent {\n type: \"text\" | \"image\" | \"resource\";\n text?: string;\n data?: string;\n mimeType?: string;\n}\n\nexport interface ToolResponse {\n content: ToolContent[];\n isError?: boolean;\n}\n\nexport const HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface HttpHandlerDefinition {\n method: HttpMethod;\n handler: (request: Request) => Promise<Response> | Response;\n}\n\nexport type ScheduleType = \"cron\" | \"rate\";\n\nexport interface NormalizedSchedule {\n type: ScheduleType;\n expression: string;\n authoredEnabled?: boolean;\n notifyEmail?: boolean;\n}\n\nexport interface McpConfig {\n enabled: boolean;\n mode?: \"stdio\" | \"lambda\" | \"dual\";\n defaultMethod?: string;\n metadataOverrides?: Partial<ToolMetadataOverrides>;\n}\n\nexport interface InternalToolDefinition<\n TSchema extends z.ZodSchema | undefined = z.ZodSchema | undefined,\n> {\n filename: string;\n schema?: TSchema;\n inputSchema?: unknown;\n metadata: ToolMetadataOverrides | null;\n httpHandlers: HttpHandlerDefinition[];\n mcpConfig?: McpConfig | null;\n sourcePath?: string;\n handler?: (params: any) => Promise<ToolResponse>;\n payment?: X402Payment | null;\n schedule?: NormalizedSchedule | null;\n notifyEmail?: boolean;\n profile?: ToolProfile | null;\n profileDescription?: string | null;\n profileCategory?: ToolCategory;\n}\n\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface BuildConfig {\n toolsDir: string;\n outputDir: string;\n serverName?: string;\n serverVersion?: string;\n}\n\nexport type {\n Tool,\n ToolMetadataOverrides,\n Metadata,\n BuildMetadata,\n PaymentConfig,\n} from \"./metadata\";\n","import {\n createWalletClient,\n http,\n type Address,\n type PrivateKeyAccount,\n type WalletClient,\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { baseSepolia } from \"viem/chains\";\n\nexport interface X402ClientConfig {\n privateKey: `0x${string}`;\n rpcUrl?: string;\n}\n\nexport interface X402PayRequest {\n url: string;\n method?: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport interface X402PayResult {\n success: boolean;\n response?: Response;\n error?: string;\n paymentDetails?: {\n amount: string;\n currency: string;\n network: string;\n signature: string;\n };\n}\n\nexport class X402Client {\n private account: PrivateKeyAccount;\n private walletClient: ReturnType<typeof createWalletClient>;\n\n constructor(config: X402ClientConfig) {\n this.account = privateKeyToAccount(config.privateKey);\n\n // Support both base and base-sepolia\n const chain = baseSepolia;\n this.walletClient = createWalletClient({\n account: this.account,\n chain,\n transport: http(config.rpcUrl),\n });\n }\n\n async pay(request: X402PayRequest): Promise<X402PayResult> {\n try {\n // Step 1: Make initial request to get 402 response\n const initialResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n // If not 402, return the response directly\n if (initialResponse.status !== 402) {\n return {\n success: initialResponse.ok,\n response: initialResponse,\n };\n }\n\n // Step 2: Parse payment requirements\n const paymentRequirements = await initialResponse.json();\n const x402Requirements = paymentRequirements.x402?.accepts?.[0];\n\n if (!x402Requirements) {\n return {\n success: false,\n error: \"No x402 payment requirements found in 402 response\",\n };\n }\n\n // Step 3: Generate EIP-3009 authorization\n const authorization = await this.signTransferAuthorization({\n from: this.account.address,\n to: x402Requirements.payTo as Address,\n value: BigInt(x402Requirements.maxAmountRequired),\n validAfter: BigInt(Math.floor(Date.now() / 1000)),\n validBefore: BigInt(Math.floor(Date.now() / 1000) + 900), // 15 min\n nonce: `0x${Array.from({ length: 32 }, () =>\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, \"0\"),\n ).join(\"\")}` as `0x${string}`,\n tokenAddress: x402Requirements.asset as Address,\n });\n\n // Step 4: Build X-PAYMENT header\n const paymentProof = {\n x402Version: 1,\n scheme: x402Requirements.scheme,\n network: x402Requirements.network,\n correlationId: \"\",\n payload: {\n signature: authorization.signature,\n authorization: {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value.toString(),\n validAfter: authorization.validAfter.toString(),\n validBefore: authorization.validBefore.toString(),\n nonce: authorization.nonce,\n },\n },\n };\n\n const paymentHeader = Buffer.from(JSON.stringify(paymentProof)).toString(\"base64\");\n\n // Step 5: Retry request with payment\n const paidResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-PAYMENT\": paymentHeader,\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n return {\n success: paidResponse.ok,\n response: paidResponse,\n paymentDetails: {\n amount: x402Requirements.maxAmountRequired,\n currency: x402Requirements.extra?.currencyCode ?? \"USDC\",\n network: x402Requirements.network,\n signature: authorization.signature,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async signTransferAuthorization(params: {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: `0x${string}`;\n tokenAddress: Address;\n }) {\n if (!this.walletClient.chain) {\n throw new Error(\"Wallet client chain not configured\");\n }\n\n const domain = {\n name: \"USD Coin\",\n version: \"2\",\n chainId: this.walletClient.chain.id,\n verifyingContract: params.tokenAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const message = {\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n };\n\n const signature = await this.walletClient.signTypedData({\n account: this.account,\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n\n return {\n signature,\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n };\n }\n\n getAddress(): Address {\n return this.account.address;\n }\n}\n\n// Helper function for quick testing\nexport async function payX402(config: {\n privateKey: `0x${string}`;\n url: string;\n body?: unknown;\n rpcUrl?: string;\n}): Promise<X402PayResult> {\n const client = new X402Client({\n privateKey: config.privateKey,\n ...(config.rpcUrl ? { rpcUrl: config.rpcUrl } : {}),\n });\n\n return client.pay({\n url: config.url,\n body: config.body,\n });\n}\n\nexport interface EIP3009Authorization {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: `0x${string}`;\n}\n\nexport interface X402BrowserClientConfig {\n walletClient: WalletClient;\n chainId: number;\n}\n\nexport class X402BrowserClient {\n private walletClient: WalletClient;\n private chainId: number;\n\n constructor(config: X402BrowserClientConfig) {\n this.walletClient = config.walletClient;\n this.chainId = config.chainId;\n }\n\n async pay(request: X402PayRequest): Promise<X402PayResult> {\n try {\n const initialResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n if (initialResponse.status !== 402) {\n return {\n success: initialResponse.ok,\n response: initialResponse,\n };\n }\n\n const paymentRequirements = await initialResponse.json();\n const x402Requirements = paymentRequirements.x402?.accepts?.[0];\n\n if (!x402Requirements) {\n return {\n success: false,\n error: \"No x402 payment requirements found in 402 response\",\n };\n }\n\n const account = this.walletClient.account;\n if (!account) {\n return {\n success: false,\n error: \"No account connected to wallet\",\n };\n }\n\n const authorization: EIP3009Authorization = {\n from: account.address,\n to: x402Requirements.payTo as Address,\n value: BigInt(x402Requirements.maxAmountRequired),\n validAfter: BigInt(Math.floor(Date.now() / 1000)),\n validBefore: BigInt(Math.floor(Date.now() / 1000) + 900),\n nonce: `0x${Array.from({ length: 32 }, () =>\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, \"0\"),\n ).join(\"\")}` as `0x${string}`,\n };\n\n const signature = await this.signTransferAuthorization(\n authorization,\n x402Requirements.asset as Address,\n );\n\n const paymentProof = {\n x402Version: 1,\n scheme: x402Requirements.scheme,\n network: x402Requirements.network,\n correlationId: \"\",\n payload: {\n signature,\n authorization: {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value.toString(),\n validAfter: authorization.validAfter.toString(),\n validBefore: authorization.validBefore.toString(),\n nonce: authorization.nonce,\n },\n },\n };\n\n const paymentHeader = btoa(JSON.stringify(paymentProof));\n\n const paidResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-PAYMENT\": paymentHeader,\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n return {\n success: paidResponse.ok,\n response: paidResponse,\n paymentDetails: {\n amount: x402Requirements.maxAmountRequired,\n currency: x402Requirements.extra?.currencyCode ?? \"USDC\",\n network: x402Requirements.network,\n signature,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async signTransferAuthorization(\n authorization: EIP3009Authorization,\n tokenAddress: Address,\n ): Promise<`0x${string}`> {\n const account = this.walletClient.account;\n if (!account) {\n throw new Error(\"No account connected to wallet\");\n }\n\n const domain = {\n name: \"USD Coin\",\n version: \"2\",\n chainId: this.chainId,\n verifyingContract: tokenAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const message = {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value,\n validAfter: authorization.validAfter,\n validBefore: authorization.validBefore,\n nonce: authorization.nonce,\n };\n\n return await this.walletClient.signTypedData({\n account,\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n }\n}\n\nexport async function payX402WithWallet(\n walletClient: WalletClient,\n chainId: number,\n request: X402PayRequest,\n): Promise<X402PayResult> {\n const client = new X402BrowserClient({ walletClient, chainId });\n return client.pay(request);\n}\n","import { zeroAddress } from \"viem\";\nimport { arbitrum, arbitrumSepolia, base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\nconst ARBITRUM_ALCHEMY_HOST = \"https://arb-mainnet.g.alchemy.com/v2/\";\nconst ARBITRUM_SEPOLIA_ALCHEMY_HOST = \"https://arb-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(host: string, fallbackUrls: readonly string[]): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\",\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(ETHEREUM_ALCHEMY_HOST, mainnet.rpcUrls.default.http),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(BASE_SEPOLIA_ALCHEMY_HOST, baseSepolia.rpcUrls.default.http),\n },\n arbitrum: {\n id: arbitrum.id,\n slug: \"arbitrum\",\n name: \"Arbitrum One\",\n chain: arbitrum,\n rpcUrl: buildRpcResolver(ARBITRUM_ALCHEMY_HOST, arbitrum.rpcUrls.default.http),\n publicRpcUrls: arbitrum.rpcUrls.default.http,\n },\n arbitrumSepolia: {\n id: arbitrumSepolia.id,\n slug: \"arbitrum-sepolia\",\n name: \"Arbitrum Sepolia\",\n chain: arbitrumSepolia,\n rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),\n publicRpcUrls: arbitrumSepolia.rpcUrls.default.http,\n },\n};\n\nfunction createNativeToken(chainId: number, symbol: string, name: string): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number,\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(base.id, \"USDC\", \"USD Coin\", \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\", 6),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(mainnet.id, \"USDC\", \"USD Coin\", \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\", 6),\n },\n arbitrum: {\n ...createNativeToken(arbitrum.id, \"ETH\", \"Ether\"),\n USDC: token(arbitrum.id, \"USDC\", \"USD Coin\", \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\", 6),\n },\n arbitrumSepolia: {\n ...createNativeToken(arbitrumSepolia.id, \"ETH\", \"Ether\"),\n USDC: token(\n arbitrumSepolia.id,\n \"USDC\",\n \"USD Coin\",\n \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n 6,\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","export type NonceSource = () => number;\n\nexport function createMonotonicNonceSource(start: number = Date.now()): 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","import {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n} from \"viem\";\nimport { privateKeyToAccount, type Account } from \"viem/accounts\";\n\nimport { createMonotonicNonceSource } from \"../nonces\";\nimport type {\n ChainMetadata,\n HexAddress,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nfunction normalizePrivateKey(raw: string): `0x${string}` {\n const trimmed = raw.trim();\n const withPrefix = trimmed.startsWith(\"0x\") ? trimmed : `0x${trimmed}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(withPrefix)) {\n throw new Error(\"wallet() privateKey must be a 32-byte hex string\");\n }\n return withPrefix as `0x${string}`;\n}\n\nexport interface PrivateKeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n privateKey: string;\n}\n\nexport interface PrivateKeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient<Transport, Chain>;\n}\n\nexport function createPrivateKeyProvider(\n config: PrivateKeyProviderConfig,\n): PrivateKeyProviderResult {\n const privateKey = normalizePrivateKey(config.privateKey);\n const account = privateKeyToAccount(privateKey);\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n nonceSource: createMonotonicNonceSource(),\n };\n}\n","import { Turnkey } from \"@turnkey/sdk-server\";\nimport { createAccount } from \"@turnkey/viem\";\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n} from \"viem\";\nimport type { Account } from \"viem/accounts\";\n\nimport { createMonotonicNonceSource } from \"../nonces\";\nimport type {\n ChainMetadata,\n HexAddress,\n TurnkeySignWith,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nexport interface TurnkeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n apiPublicKey: string;\n apiPrivateKey: string;\n signWith: TurnkeySignWith;\n apiBaseUrl?: string;\n}\n\nexport interface TurnkeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient<Transport, Chain>;\n}\n\nexport async function createTurnkeyProvider(\n config: TurnkeyProviderConfig,\n): Promise<TurnkeyProviderResult> {\n const turnkey = new Turnkey({\n apiBaseUrl: config.apiBaseUrl ?? \"https://api.turnkey.com\",\n // The delegated sub-organization the API key pair belongs to.\n defaultOrganizationId: config.organizationId,\n apiPublicKey: config.apiPublicKey,\n apiPrivateKey: config.apiPrivateKey,\n });\n\n const account = (await createAccount({\n client: turnkey.apiClient(),\n organizationId: config.organizationId,\n signWith: config.signWith,\n })) as Account;\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n nonceSource: createMonotonicNonceSource(),\n };\n}\n","export type TurnkeyEnvConfig = {\n organizationId: string;\n apiPublicKey: string;\n apiPrivateKey: string;\n signWith: string;\n apiBaseUrl?: string;\n};\n\nfunction readTrimmed(name: string): string | undefined {\n const value = process.env[name];\n const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n return trimmed.length ? trimmed : undefined;\n}\n\n/**\n * Reads Turnkey configuration from environment variables.\n */\nexport function readTurnkeyEnv(): TurnkeyEnvConfig | undefined {\n const suborgId = readTrimmed(\"TURNKEY_SUBORG_ID\");\n if (!suborgId) return undefined;\n\n const apiPublicKey = readTrimmed(\"TURNKEY_API_PUBLIC_KEY\");\n const apiPrivateKey = readTrimmed(\"TURNKEY_API_PRIVATE_KEY\");\n const signWith = readTrimmed(\"TURNKEY_WALLET_ADDRESS\");\n if (!apiPublicKey || !apiPrivateKey || !signWith) return undefined;\n\n const apiBaseUrl = readTrimmed(\"TURNKEY_API_BASE_URL\");\n\n return {\n organizationId: suborgId,\n apiPublicKey,\n apiPrivateKey,\n signWith,\n ...(apiBaseUrl ? { apiBaseUrl } : {}),\n };\n}\n","export * from \"./types\";\nexport { chains, tokens, registry, DEFAULT_CHAIN, DEFAULT_TOKENS } from \"./constants\";\n\nimport { createPublicClient, http } from \"viem\";\n\nimport type {\n RpcProviderOptions,\n WalletContext,\n WalletFullContext,\n WalletReadonlyContext,\n WalletOptions,\n WalletProviderType,\n WalletPrivateKeyOptions,\n WalletTurnkeyOptions,\n WalletReadonlyOptions,\n} from \"./types\";\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n registry as walletRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createPrivateKeyProvider } from \"./providers/private-key\";\nimport { createTurnkeyProvider } from \"./providers/turnkey\";\nimport { readTurnkeyEnv } from \"./env\";\n\ntype ChainSlug = keyof typeof chainRegistry;\n\nfunction resolveChainSlug(reference?: string | number): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nexport function getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nexport function wallet(options: WalletPrivateKeyOptions): Promise<WalletFullContext>;\nexport function wallet(options: WalletTurnkeyOptions): Promise<WalletFullContext>;\nexport function wallet(options?: WalletReadonlyOptions): Promise<WalletReadonlyContext>;\nexport async function wallet(options: WalletOptions = {}): Promise<WalletContext> {\n const envPrivateKey = process.env.PRIVATE_KEY?.trim();\n const envTurnkey = readTurnkeyEnv();\n\n const effectivePrivateKey = options.privateKey ?? envPrivateKey;\n const effectiveTurnkey = options.turnkey ?? envTurnkey;\n\n if (effectivePrivateKey && effectiveTurnkey) {\n throw new Error(\"wallet() cannot be initialized with both privateKey and turnkey credentials\");\n }\n\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? {};\n const overrides: RpcProviderOptions = {};\n const envRpcUrl = process.env.RPC_URL?.trim();\n const envApiKey = process.env.ALCHEMY_API_KEY?.trim();\n if (options.rpcUrl ?? envRpcUrl) {\n overrides.url = (options.rpcUrl ?? envRpcUrl)!;\n }\n if (options.apiKey ?? envApiKey) {\n overrides.apiKey = (options.apiKey ?? envApiKey)!;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n\n let providerType: WalletProviderType = \"readonly\";\n let signerProvider:\n | ReturnType<typeof createPrivateKeyProvider>\n | Awaited<ReturnType<typeof createTurnkeyProvider>>\n | undefined;\n\n if (effectivePrivateKey) {\n signerProvider = createPrivateKeyProvider({\n chain,\n rpcUrl,\n privateKey: effectivePrivateKey,\n });\n providerType = \"privateKey\";\n } else if (effectiveTurnkey) {\n const turnkeyConfig = {\n chain,\n rpcUrl,\n organizationId: effectiveTurnkey.organizationId,\n apiPublicKey: effectiveTurnkey.apiPublicKey,\n apiPrivateKey: effectiveTurnkey.apiPrivateKey,\n signWith: effectiveTurnkey.signWith,\n } as Parameters<typeof createTurnkeyProvider>[0];\n\n if (effectiveTurnkey.apiBaseUrl) {\n turnkeyConfig.apiBaseUrl = effectiveTurnkey.apiBaseUrl;\n }\n\n signerProvider = await createTurnkeyProvider(turnkeyConfig);\n providerType = \"turnkey\";\n }\n\n const publicClient =\n signerProvider?.publicClient ??\n createPublicClient({\n chain: chain.chain,\n transport: http(rpcUrl),\n });\n\n const baseContext = {\n chain,\n tokens,\n rpcUrl,\n providerType,\n publicClient,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n ...(signerProvider ? { address: signerProvider.address } : {}),\n } satisfies WalletReadonlyContext;\n\n if (signerProvider) {\n const { publicClient: _ignored, ...rest } = signerProvider;\n return {\n ...baseContext,\n ...rest,\n } as WalletFullContext;\n }\n\n return baseContext;\n}\n\nexport const walletToolkit = {\n chains: chainRegistry,\n tokens: tokenRegistry,\n registry: walletRegistry,\n defaults: {\n chain: DEFAULT_CHAIN,\n tokens: DEFAULT_TOKENS,\n },\n getRpcUrl,\n wallet,\n} as const;\n","type StoreStatus =\n | \"submitted\"\n | \"pending\"\n | \"confirmed\"\n | \"failed\"\n | \"cancelled\"\n | \"filled\"\n | \"partial_fill\"\n | \"settled\"\n | \"info\";\n\nconst STORE_EVENT_LEVELS = [\"decision\", \"execution\", \"lifecycle\"] as const;\n\nconst STORE_EVENT_LEVEL_SET = new Set<string>(STORE_EVENT_LEVELS);\n\nconst CANONICAL_STORE_ACTIONS = [\n \"stake\",\n \"unstake\",\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n \"custom\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS = [\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"stake\",\n \"unstake\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\nconst EXECUTION_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\n\nexport type StoreAction = (typeof CANONICAL_STORE_ACTIONS)[number] | string;\n\nexport type StoreEventLevel = (typeof STORE_EVENT_LEVELS)[number];\nexport type StoreMode = \"live\" | \"backtest\";\n\nexport type StoreSimulationConfig = {\n fillModel?: string;\n feeModel?: string;\n slippageBps?: number;\n};\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 eventLevel?: StoreEventLevel;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n market?: Record<string, unknown>;\n mode?: StoreMode;\n backtestRunId?: string;\n simulation?: StoreSimulationConfig;\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 mode?: StoreMode;\n backtestRunId?: string;\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\nconst normalizeAction = (action: string | null | undefined): string | null => {\n const normalized = action?.trim().toLowerCase();\n return normalized ? normalized : null;\n};\n\nconst coerceEventLevel = (value: unknown): StoreEventLevel | null => {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim().toLowerCase();\n if (!normalized || !STORE_EVENT_LEVEL_SET.has(normalized)) return null;\n return normalized as StoreEventLevel;\n};\n\nconst requiresMarketIdentity = (input: StoreEventInput): boolean => {\n const action = normalizeAction(input.action);\n if (!action) return false;\n return MARKET_REQUIRED_ACTIONS_SET.has(action);\n};\n\nconst hasMarketIdentity = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n const requiredKeys = [\"market_type\", \"venue\", \"environment\", \"canonical_symbol\"] as const;\n return requiredKeys.every((key) => {\n const field = record[key];\n return typeof field === \"string\" && field.trim().length > 0;\n });\n};\n\nconst resolveEventLevel = (input: StoreEventInput): StoreEventLevel | null => {\n const direct = coerceEventLevel(input.eventLevel);\n if (direct) return direct;\n\n const metadataLevel = coerceEventLevel(input.metadata?.eventLevel);\n if (metadataLevel) return metadataLevel;\n\n const action = normalizeAction(input.action);\n if (\n action &&\n EXECUTION_ACTIONS_SET.has(action) &&\n (input.metadata?.lifecycle === true ||\n typeof input.metadata?.executionRef === \"string\" ||\n typeof input.metadata?.parentExecutionRef === \"string\")\n ) {\n return \"lifecycle\";\n }\n if ((action && EXECUTION_ACTIONS_SET.has(action)) || hasMarketIdentity(input.market)) {\n return \"execution\";\n }\n if (action) return \"decision\";\n\n return null;\n};\n\nconst normalizeStoreInput = (input: StoreEventInput): StoreEventInput => {\n const metadata = { ...input.metadata };\n const eventLevel = resolveEventLevel({ ...input, metadata });\n if (eventLevel) {\n metadata.eventLevel = eventLevel;\n }\n const hasMetadata = Object.keys(metadata).length > 0;\n return {\n ...input,\n ...(eventLevel ? { eventLevel } : {}),\n ...(hasMetadata ? { metadata } : {}),\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(\"OPENPOND_API_KEY is required to store activity events\");\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(`Request failed with status ${response.status}`, response.status, body);\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 normalizedInput = normalizeStoreInput(input);\n const mode = normalizedInput.mode ?? \"live\";\n const eventLevel = normalizedInput.eventLevel;\n const normalizedAction = normalizeAction(normalizedInput.action);\n\n if (mode === \"backtest\" && !normalizedInput.backtestRunId) {\n throw new StoreError(`backtestRunId is required when mode is \"backtest\"`);\n }\n\n if (eventLevel === \"execution\" || eventLevel === \"lifecycle\") {\n if (!normalizedAction || !EXECUTION_ACTIONS_SET.has(normalizedAction)) {\n throw new StoreError(`eventLevel \"${eventLevel}\" requires an execution action`);\n }\n }\n if (eventLevel === \"execution\" && !hasMarketIdentity(normalizedInput.market)) {\n throw new StoreError(\n `market is required for execution events. market must include market_type, venue, environment, canonical_symbol`,\n );\n }\n const shouldApplyLegacyMarketRule = eventLevel == null || eventLevel === \"execution\";\n if (\n shouldApplyLegacyMarketRule &&\n requiresMarketIdentity(normalizedInput) &&\n !hasMarketIdentity(normalizedInput.market)\n ) {\n throw new StoreError(\n `market is required for action \"${normalizedInput.action}\". market must include market_type, venue, environment, canonical_symbol`,\n );\n }\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const path = mode === \"backtest\" ? \"/apps/backtests/tx\" : \"/apps/positions/tx\";\n const url = `${baseUrl}${path}`;\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(normalizedInput),\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 const mode = params?.mode ?? \"live\";\n const path = mode === \"backtest\" ? \"/apps/backtests/tx\" : \"/apps/positions/tx\";\n\n const url = new URL(`${baseUrl}${path}`);\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 if (params?.backtestRunId) {\n url.searchParams.set(\"backtestRunId\", params.backtestRunId);\n }\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<HyperliquidEnvironment, `0x${string}`> = {\n mainnet: \"0x2df1c51e09aecf9cacb7bc98cb1742757f163df7\",\n testnet: \"0x08cfc1b6b2dcf36a1480b99353a354aa8ac56f89\",\n};\n\nexport const HL_USDC_ADDRESSES: Record<HyperliquidEnvironment, `0x${string}`> = {\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 = \"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<string, { fetchedAt: number; universe: MetaResponse[\"universe\"] }>();\nconst spotMetaCache = new Map<\n string,\n { fetchedAt: number; universe: SpotUniverseItem[]; tokens: SpotToken[] }\n>();\nconst perpDexsCache = new Map<string, { fetchedAt: number; dexs: PerpDexsResponse }>();\n\nexport type HyperliquidEnvironment = \"mainnet\" | \"testnet\";\n\nexport type MarketIdentity = {\n market_type: \"perp\" | \"spot\" | \"dex\";\n venue: \"hyperliquid\";\n environment: HyperliquidEnvironment;\n base: string;\n quote?: string | null;\n dex?: string | null;\n chain_id?: number | null;\n pool_address?: string | null;\n token0_address?: string | null;\n token1_address?: string | null;\n fee_tier?: number | null;\n raw_symbol?: string | null;\n canonical_symbol: string;\n};\n\nexport type HyperliquidMarketIdentityInput = {\n environment: HyperliquidEnvironment;\n symbol: string;\n rawSymbol?: string | null;\n isSpot?: boolean;\n base?: string | null;\n quote?: string | null;\n};\n\nconst UNKNOWN_SYMBOL = \"UNKNOWN\";\n\nconst extractDexPrefix = (value?: string | null): string | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (!trimmed.includes(\":\")) return null;\n if (trimmed.startsWith(\"@\")) return null;\n const [prefix] = trimmed.split(\":\");\n const dex = prefix?.trim().toLowerCase() ?? \"\";\n return dex || null;\n};\n\nconst normalizeHyperliquidBase = (value?: string | null): string | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const base = withoutDex.split(\"-\")[0] ?? withoutDex;\n const normalized = (base.split(\"/\")[0] ?? base).trim().toUpperCase();\n if (!normalized || normalized === UNKNOWN_SYMBOL) return null;\n return normalized;\n};\n\nconst normalizeSpotTokenName = (value?: string | null): string => {\n const raw = (value ?? \"\").trim().toUpperCase();\n if (!raw) return \"\";\n if (raw.endsWith(\"0\") && raw.length > 1) {\n return raw.slice(0, -1);\n }\n return raw;\n};\n\nconst parseHyperliquidPair = (value?: string | null): { base: string; quote: string } | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const separator = withoutDex.includes(\"/\") ? \"/\" : withoutDex.includes(\"-\") ? \"-\" : null;\n if (!separator) return null;\n const [baseRaw, ...rest] = withoutDex.split(separator);\n const quoteRaw = rest.join(separator);\n if (!baseRaw || !quoteRaw) return null;\n const base = baseRaw.trim().toUpperCase();\n const quote = quoteRaw.trim().toUpperCase();\n if (!base || !quote) return null;\n return { base, quote };\n};\n\nexport function buildHyperliquidMarketIdentity(\n input: HyperliquidMarketIdentityInput,\n): MarketIdentity | null {\n const rawSymbol = input.rawSymbol ?? input.symbol;\n const dex = extractDexPrefix(rawSymbol);\n const pair = parseHyperliquidPair(rawSymbol) ?? parseHyperliquidPair(input.symbol);\n const isSpot =\n input.isSpot ?? (Boolean(pair) || rawSymbol.startsWith(\"@\") || input.symbol.includes(\"/\"));\n\n const base =\n (input.base ? input.base.trim().toUpperCase() : null) ??\n pair?.base ??\n normalizeHyperliquidBase(input.symbol) ??\n normalizeHyperliquidBase(rawSymbol);\n\n if (!base) return null;\n\n if (isSpot) {\n const quote = (input.quote ? input.quote.trim().toUpperCase() : null) ?? pair?.quote ?? null;\n if (!quote) return null;\n return {\n market_type: \"spot\",\n venue: \"hyperliquid\",\n environment: input.environment,\n base,\n quote,\n dex,\n raw_symbol: rawSymbol ?? null,\n canonical_symbol: `spot:hyperliquid:${base}-${quote}`,\n };\n }\n\n return {\n market_type: \"perp\",\n venue: \"hyperliquid\",\n environment: input.environment,\n base,\n dex,\n raw_symbol: rawSymbol ?? null,\n canonical_symbol: `perp:hyperliquid:${base}`,\n };\n}\nexport type HyperliquidTimeInForce = \"Gtc\" | \"Ioc\" | \"Alo\" | \"FrontendMarket\" | \"LiquidationMarket\";\nexport type HyperliquidGrouping = \"na\" | \"normalTpsl\" | \"positionTpsl\";\nexport type HyperliquidTriggerType = \"tp\" | \"sl\";\n\n// Hyperliquid account abstraction modes (API naming).\nexport type HyperliquidAbstraction = \"unifiedAccount\" | \"portfolioMargin\" | \"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 const precision = Math.max(0, Math.min(12, Math.floor(decimals)));\n const factor = 10 ** precision;\n const scaled = price * factor;\n const directionalRounded =\n params.side === \"buy\" ? Math.ceil(scaled) / factor : Math.floor(scaled) / factor;\n return formatRoundedDecimal(directionalRounded, precision);\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 SpotUniverseItem = {\n tokens?: number[];\n name?: string;\n index?: number;\n baseToken?: number;\n quoteToken?: number;\n isCanonical?: boolean;\n};\n\ntype SpotToken = {\n name?: string;\n index?: number;\n szDecimals?: number;\n isCanonical?: boolean;\n};\n\ntype SpotMetaResponse = {\n universe?: SpotUniverseItem[];\n tokens?: SpotToken[];\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 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(\n message: string,\n public readonly response: unknown,\n ) {\n const responseRecord =\n response && typeof response === \"object\"\n ? (response as {\n errors?: unknown;\n body?: unknown;\n })\n : null;\n const explicitErrors = Array.isArray(responseRecord?.errors)\n ? responseRecord.errors.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0,\n )\n : [];\n const bodyStatuses =\n responseRecord?.body &&\n typeof responseRecord.body === \"object\" &&\n responseRecord.body !== null &&\n \"response\" in responseRecord.body\n ? (\n (\n (responseRecord.body as {\n response?: {\n data?: {\n statuses?: Array<{ error?: unknown }>;\n status?: { error?: unknown };\n };\n };\n }).response?.data?.statuses ?? []\n )\n .map((status) => (typeof status?.error === \"string\" ? status.error : null))\n .filter((entry): entry is string => Boolean(entry && entry.trim().length > 0))\n )\n : [];\n const singleStatusError =\n responseRecord?.body &&\n typeof responseRecord.body === \"object\" &&\n responseRecord.body !== null &&\n \"response\" in responseRecord.body\n ? (\n (responseRecord.body as {\n response?: {\n data?: {\n status?: { error?: unknown };\n };\n };\n }).response?.data?.status?.error\n )\n : null;\n const details = Array.from(\n new Set(\n [\n ...explicitErrors,\n ...bodyStatuses,\n typeof singleStatusError === \"string\" ? singleStatusError : null,\n ].filter((entry): entry is string => Boolean(entry && entry.trim().length > 0)),\n ),\n );\n const enrichedMessage = details.length > 0 ? `${message} ${details.join(\" | \")}` : message;\n super(enrichedMessage);\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(message = \"Hyperliquid terms must be accepted before proceeding.\") {\n super(message);\n this.name = \"HyperliquidTermsError\";\n }\n}\n\nexport class HyperliquidBuilderApprovalError extends HyperliquidGuardError {\n constructor(message = \"Hyperliquid builder approval is required before using builder codes.\") {\n super(message);\n this.name = \"HyperliquidBuilderApprovalError\";\n }\n}\n\nexport function createMonotonicNonceFactory(start: number = Date.now()): 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(dexKey ? { type: \"meta\", dex: dexKey } : { type: \"meta\" }),\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\nasync function getSpotMeta(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n}): Promise<{ universe: SpotUniverseItem[]; tokens: SpotToken[] }> {\n const cacheKey = `${args.environment}:${args.baseUrl}`;\n const cached = spotMetaCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {\n return { universe: cached.universe, tokens: cached.tokens };\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: \"spotMeta\" }),\n });\n\n const json = (await response.json().catch(() => null)) as SpotMetaResponse | null;\n if (!response.ok || !json?.universe) {\n throw new HyperliquidApiError(\n \"Unable to load Hyperliquid spot metadata.\",\n json ?? { status: response.status },\n );\n }\n\n const universe = json.universe ?? [];\n const tokens = json.tokens ?? [];\n spotMetaCache.set(cacheKey, { fetchedAt: Date.now(), universe, tokens });\n return { universe, tokens };\n}\n\nexport function resolveAssetIndex(symbol: string, universe: MetaResponse[\"universe\"]): number {\n const [raw] = symbol.split(\"-\");\n const target = raw.trim();\n const index = universe.findIndex((entry) => entry.name.toUpperCase() === target.toUpperCase());\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 PerpDexsResponse | 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((entry) => entry?.name?.toLowerCase() === target);\n if (index === -1) {\n throw new Error(`Unknown Hyperliquid perp dex: ${args.dex}`);\n }\n return index;\n}\n\nfunction buildSpotTokenIndexMap(tokens: SpotToken[]): Map<string, number> {\n const map = new Map<string, number>();\n for (const token of tokens) {\n const name = normalizeSpotTokenName(token?.name);\n const index =\n typeof token?.index === \"number\" && Number.isFinite(token.index) ? token.index : null;\n if (!name || index == null) continue;\n if (!map.has(name) || token?.isCanonical) {\n map.set(name, index);\n }\n }\n return map;\n}\n\nfunction resolveSpotTokenIndex(tokenMap: Map<string, number>, value: string): number | null {\n const normalized = normalizeSpotTokenName(value);\n if (!normalized) return null;\n const direct = tokenMap.get(normalized);\n if (direct != null) return direct;\n if (!normalized.startsWith(\"U\")) {\n const prefixed = tokenMap.get(`U${normalized}`);\n if (prefixed != null) return prefixed;\n }\n return null;\n}\n\nfunction resolveSpotMarketIndex(args: {\n universe: SpotUniverseItem[];\n baseToken: number;\n quoteToken: number;\n}): number | null {\n for (let i = 0; i < args.universe.length; i += 1) {\n const entry = args.universe[i];\n const tokens = Array.isArray(entry?.tokens) ? entry.tokens : null;\n const baseToken = tokens?.[0] ?? entry?.baseToken ?? null;\n const quoteToken = tokens?.[1] ?? entry?.quoteToken ?? null;\n if (baseToken === args.baseToken && quoteToken === args.quoteToken) {\n if (typeof entry?.index === \"number\" && Number.isFinite(entry.index)) {\n return entry.index;\n }\n return i;\n }\n }\n return null;\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 if (trimmed.startsWith(\"@\")) {\n const rawIndex = trimmed.slice(1).trim();\n const index = Number(rawIndex);\n if (!Number.isFinite(index)) {\n throw new Error(`Hyperliquid spot market index is invalid: ${trimmed}`);\n }\n return 10000 + index;\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 pair = parseHyperliquidPair(trimmed);\n if (pair) {\n const { universe, tokens } = await getSpotMeta({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n });\n const tokenMap = buildSpotTokenIndexMap(tokens);\n const baseToken = resolveSpotTokenIndex(tokenMap, pair.base);\n const quoteToken = resolveSpotTokenIndex(tokenMap, pair.quote);\n if (baseToken == null || quoteToken == null) {\n throw new Error(`Unknown Hyperliquid spot symbol: ${trimmed}`);\n }\n const marketIndex = resolveSpotMarketIndex({\n universe,\n baseToken,\n quoteToken,\n });\n if (marketIndex == null) {\n throw new Error(`Unknown Hyperliquid spot symbol: ${trimmed}`);\n }\n return 10000 + marketIndex;\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 const trimmed = value.trim();\n if (!trimmed.length) {\n throw new Error(\"Decimal strings must be non-empty.\");\n }\n if (!/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(\"Decimal strings must be plain base-10 numbers.\");\n }\n return trimmed\n .replace(/^(-?)0+(?=\\d)/, \"$1\")\n .replace(/\\.0*$|(\\.\\d+?)0+$/, \"$1\")\n .replace(/^(-?)\\./, \"$10.\")\n .replace(/^-?$/, \"0\")\n .replace(/^-0$/, \"0\");\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 integerPart + fractionalPart.padEnd(exponent + fractionalPart.length, \"0\");\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\nconst NORMALIZED_HEX_PATTERN = /^0x[0-9a-f]+$/;\nconst ADDRESS_HEX_LENGTH = 42;\nconst CLOID_HEX_LENGTH = 34;\n\nexport function normalizeHex(value: `0x${string}`): `0x${string}` {\n const lower = value.trim().toLowerCase() as `0x${string}`;\n if (!NORMALIZED_HEX_PATTERN.test(lower)) {\n throw new Error(`Invalid hex value: ${value}`);\n }\n return lower;\n}\n\nexport function normalizeAddress(value: `0x${string}`): `0x${string}` {\n const normalized = normalizeHex(value);\n if (normalized.length !== ADDRESS_HEX_LENGTH) {\n throw new Error(`Invalid address length: ${normalized}`);\n }\n return normalized;\n}\n\nexport function normalizeCloid(value: `0x${string}`): `0x${string}` {\n const normalized = normalizeHex(value);\n if (normalized.length !== CLOID_HEX_LENGTH) {\n throw new Error(`Invalid cloid length: ${normalized}`);\n }\n return normalized;\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 { wallet, hyperliquidChain, signatureChainId, destination, token, amount, time } = 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 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 ? hexToBytes(vaultAddress.slice(2)) : new Uint8Array();\n\n const hasExpiresAfter = typeof expiresAfter === \"number\";\n const expiresMarker = hasExpiresAfter ? new Uint8Array([0]) : new Uint8Array();\n const expiresBytes =\n hasExpiresAfter && expiresAfter !== undefined ? toUint64Bytes(expiresAfter) : 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(value: number, label: string): 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 type { HyperliquidEnvironment } from \"./base\";\n\nconst UNKNOWN_SYMBOL = \"UNKNOWN\";\n\nexport type HyperliquidParsedSymbolKind = \"perp\" | \"spot\" | \"spotIndex\";\n\nexport type HyperliquidParsedSymbol = {\n raw: string;\n kind: HyperliquidParsedSymbolKind;\n normalized: string;\n routeTicker: string;\n displaySymbol: string;\n base: string | null;\n quote: string | null;\n pair: string | null;\n dex: string | null;\n leverageMode: \"cross\" | \"isolated\";\n};\n\nexport type HyperliquidMarketDescriptor = {\n rawSymbol: string;\n kind: HyperliquidParsedSymbolKind;\n routeTicker: string;\n displaySymbol: string;\n normalized: string;\n orderSymbol: string;\n marketDataCoin: string;\n base: string | null;\n quote: string | null;\n pair: string | null;\n canonicalPair: string | null;\n dex: string | null;\n leverageMode: \"cross\" | \"isolated\";\n spotIndex: number | null;\n assetId: number | null;\n};\n\nexport type HyperliquidMarketDescriptorInput = {\n symbol: string;\n quote?: string | null;\n pair?: string | null;\n displaySymbol?: string | null;\n orderSymbol?: string | null;\n marketDataCoin?: string | null;\n spotIndex?: number | null;\n assetId?: number | null;\n};\n\nexport function extractHyperliquidDex(symbol: string): string | null {\n const idx = symbol.indexOf(\":\");\n if (idx <= 0) return null;\n const dex = symbol.slice(0, idx).trim().toLowerCase();\n return dex || null;\n}\n\nexport function parseHyperliquidSymbol(value?: string | null): HyperliquidParsedSymbol | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.startsWith(\"@\")) {\n return {\n raw: trimmed,\n kind: \"spotIndex\",\n normalized: trimmed,\n routeTicker: trimmed,\n displaySymbol: trimmed,\n base: null,\n quote: null,\n pair: null,\n dex: null,\n leverageMode: \"cross\",\n };\n }\n\n const dex = extractHyperliquidDex(trimmed);\n const pair = resolveHyperliquidPair(trimmed);\n const base = normalizeHyperliquidBaseSymbol(trimmed);\n\n if (dex) {\n if (!base) return null;\n return {\n raw: trimmed,\n kind: \"perp\",\n normalized: `${dex}:${base}`,\n routeTicker: `${dex}:${base}`,\n displaySymbol: `${dex.toUpperCase()}:${base}-USDC`,\n base,\n quote: null,\n pair: null,\n dex,\n leverageMode: \"isolated\",\n };\n }\n\n if (pair) {\n const [pairBase, pairQuote] = pair.split(\"/\");\n return {\n raw: trimmed,\n kind: \"spot\",\n normalized: pair,\n routeTicker: pair.replace(\"/\", \"-\"),\n displaySymbol: pair.replace(\"/\", \"-\"),\n base: pairBase ?? null,\n quote: pairQuote ?? null,\n pair,\n dex: null,\n leverageMode: \"cross\",\n };\n }\n\n if (!base) return null;\n return {\n raw: trimmed,\n kind: \"perp\",\n normalized: base,\n routeTicker: base,\n displaySymbol: `${base}-USDC`,\n base,\n quote: null,\n pair: null,\n dex: null,\n leverageMode: \"cross\",\n };\n}\n\nfunction normalizeHyperliquidQuoteSymbol(value?: string | null): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n return canonicalizeHyperliquidTokenCase(trimmed).toUpperCase();\n}\n\nexport function normalizeSpotTokenName(value?: string | null): string {\n const raw = (value ?? \"\").trim();\n if (!raw) return \"\";\n if (raw.endsWith(\"0\") && raw.length > 1) {\n return raw.slice(0, -1);\n }\n return raw;\n}\n\nfunction canonicalizeHyperliquidTokenCase(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n return trimmed === trimmed.toLowerCase() ? trimmed.toUpperCase() : trimmed;\n}\n\nexport function normalizeHyperliquidBaseSymbol(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const base = withoutDex.split(\"-\")[0] ?? withoutDex;\n const baseNoPair = base.split(\"/\")[0] ?? base;\n const normalized = canonicalizeHyperliquidTokenCase(baseNoPair);\n if (!normalized || normalized === UNKNOWN_SYMBOL) return null;\n return normalized;\n}\n\nexport function normalizeHyperliquidMetaSymbol(symbol: string): string {\n const trimmed = symbol.trim();\n const noDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const noPair = noDex.split(\"-\")[0] ?? noDex;\n return (noPair.split(\"/\")[0] ?? noPair).trim();\n}\n\nexport function resolveHyperliquidPair(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n if (withoutDex.includes(\"/\")) {\n const [base, ...rest] = withoutDex.split(\"/\");\n const quote = rest.join(\"/\").trim();\n if (!base || !quote) return null;\n return `${canonicalizeHyperliquidTokenCase(base)}/${canonicalizeHyperliquidTokenCase(quote)}`;\n }\n if (withoutDex.includes(\"-\")) {\n const [base, ...rest] = withoutDex.split(\"-\");\n const quote = rest.join(\"-\").trim();\n if (!base || !quote) return null;\n return `${canonicalizeHyperliquidTokenCase(base)}/${canonicalizeHyperliquidTokenCase(quote)}`;\n }\n return null;\n}\n\nexport function buildHyperliquidMarketDescriptor(\n input: HyperliquidMarketDescriptorInput,\n): HyperliquidMarketDescriptor | null {\n const rawSymbol = input.symbol?.trim();\n if (!rawSymbol) return null;\n\n const parsed = parseHyperliquidSymbol(rawSymbol);\n if (!parsed) return null;\n\n const explicitPair = resolveHyperliquidPair(input.pair);\n const explicitQuote = normalizeHyperliquidQuoteSymbol(input.quote);\n\n if (parsed.kind === \"spot\" || parsed.kind === \"spotIndex\") {\n const canonicalPair = explicitPair ?? parsed.pair;\n const pair = canonicalPair;\n const [pairBase, pairQuote] = (canonicalPair ?? \"\")\n .split(\"/\")\n .map((part) => canonicalizeHyperliquidTokenCase(part).toUpperCase());\n const base = pairBase || parsed.base;\n const quote = pairQuote || explicitQuote || parsed.quote;\n const normalized = pair ?? parsed.normalized;\n const routeTicker =\n pair && base && quote ? `${base}-${quote}` : parsed.routeTicker;\n const displaySymbol =\n input.displaySymbol?.trim() ||\n (pair && base && quote ? `${base}-${quote}` : parsed.displaySymbol);\n const orderSymbol =\n input.orderSymbol?.trim() || resolveHyperliquidOrderSymbol(normalized);\n const marketDataCoin =\n input.marketDataCoin?.trim() ||\n (typeof input.spotIndex === \"number\" ? `@${input.spotIndex}` : resolveHyperliquidMarketDataCoin(normalized));\n\n if (!orderSymbol || !marketDataCoin) return null;\n\n return {\n rawSymbol,\n kind: parsed.kind,\n routeTicker,\n displaySymbol,\n normalized,\n orderSymbol,\n marketDataCoin,\n base: base ?? null,\n quote: quote ?? null,\n pair,\n canonicalPair: pair,\n dex: null,\n leverageMode: \"cross\",\n spotIndex: input.spotIndex ?? null,\n assetId: input.assetId ?? null,\n };\n }\n\n const base = parsed.base;\n const quote = explicitQuote;\n const canonicalPair = base && quote ? `${base}/${quote}` : null;\n const displaySymbol =\n input.displaySymbol?.trim() ||\n (canonicalPair\n ? canonicalPair.replace(\"/\", \"-\")\n : parsed.dex\n ? base ?? parsed.normalized\n : parsed.displaySymbol);\n const normalized = parsed.normalized;\n const orderSymbol =\n input.orderSymbol?.trim() || resolveHyperliquidOrderSymbol(normalized);\n const marketDataCoin =\n input.marketDataCoin?.trim() || resolveHyperliquidMarketDataCoin(normalized);\n\n if (!orderSymbol || !marketDataCoin) return null;\n\n return {\n rawSymbol,\n kind: parsed.kind,\n routeTicker: parsed.routeTicker,\n displaySymbol,\n normalized,\n orderSymbol,\n marketDataCoin,\n base,\n quote,\n pair: null,\n canonicalPair,\n dex: parsed.dex,\n leverageMode: parsed.leverageMode,\n spotIndex: input.spotIndex ?? null,\n assetId: input.assetId ?? null,\n };\n}\n\nexport function resolveHyperliquidLeverageMode(symbol: string): \"cross\" | \"isolated\" {\n return symbol.includes(\":\") ? \"isolated\" : \"cross\";\n}\n\nexport type HyperliquidProfileChain = \"hyperliquid\" | \"hyperliquid-testnet\";\n\nexport type HyperliquidProfileAssetInput = {\n assetSymbols: string[];\n pair?: string | null;\n leverage?: number | null;\n walletAddress?: string | null;\n};\n\nexport type HyperliquidProfileAsset = {\n venue: \"hyperliquid\";\n chain: HyperliquidProfileChain;\n assetSymbols: string[];\n pair?: string;\n leverage?: number;\n walletAddress?: string;\n};\n\nexport function resolveHyperliquidProfileChain(\n environment: HyperliquidEnvironment,\n): HyperliquidProfileChain {\n return environment === \"testnet\" ? \"hyperliquid-testnet\" : \"hyperliquid\";\n}\n\nexport function buildHyperliquidProfileAssets(params: {\n environment: HyperliquidEnvironment;\n assets: HyperliquidProfileAssetInput[];\n}): HyperliquidProfileAsset[] {\n const chain = resolveHyperliquidProfileChain(params.environment);\n\n return params.assets\n .map((asset) => {\n const symbols = asset.assetSymbols\n .map((symbol) => normalizeHyperliquidBaseSymbol(symbol))\n .filter((symbol): symbol is string => Boolean(symbol));\n if (symbols.length === 0) return null;\n\n const explicitPair =\n typeof asset.pair === \"string\" ? resolveHyperliquidPair(asset.pair) : null;\n const derivedPair =\n symbols.length === 1 ? resolveHyperliquidPair(asset.assetSymbols[0] ?? symbols[0]) : null;\n const pair = explicitPair ?? derivedPair ?? undefined;\n const leverage =\n typeof asset.leverage === \"number\" && Number.isFinite(asset.leverage) && asset.leverage > 0\n ? asset.leverage\n : undefined;\n const walletAddress =\n typeof asset.walletAddress === \"string\" && asset.walletAddress.trim().length > 0\n ? asset.walletAddress.trim()\n : undefined;\n\n return {\n venue: \"hyperliquid\" as const,\n chain,\n assetSymbols: symbols,\n ...(pair ? { pair } : {}),\n ...(leverage ? { leverage } : {}),\n ...(walletAddress ? { walletAddress } : {}),\n };\n })\n .filter((asset): asset is HyperliquidProfileAsset => asset !== null);\n}\n\nexport function parseSpotPairSymbol(symbol: string): { base: string; quote: string } | null {\n const trimmed = symbol.trim();\n if (!trimmed.includes(\"/\")) return null;\n const [rawBase, rawQuote] = trimmed.split(\"/\");\n const base = rawBase?.trim().toUpperCase() ?? \"\";\n const quote = rawQuote?.trim().toUpperCase() ?? \"\";\n if (!base || !quote) return null;\n return { base, quote };\n}\n\nexport function isHyperliquidSpotSymbol(symbol: string): boolean {\n const trimmed = symbol.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith(\"@\") || trimmed.includes(\"/\")) return true;\n if (trimmed.includes(\":\")) return false;\n return resolveHyperliquidPair(trimmed) !== null;\n}\n\nexport function resolveHyperliquidMarketDataCoin(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith(\"@\")) return trimmed;\n const pair = resolveHyperliquidPair(trimmed);\n if (pair && !extractHyperliquidDex(trimmed)) {\n return pair;\n }\n return trimmed;\n}\n\nexport function supportsHyperliquidBuilderFee(params: {\n symbol: string;\n side: \"buy\" | \"sell\";\n}): boolean {\n if (!isHyperliquidSpotSymbol(params.symbol)) {\n return true;\n }\n return params.side === \"sell\";\n}\n\nexport function resolveSpotMidCandidates(baseSymbol: string): string[] {\n const base = baseSymbol.trim().toUpperCase();\n if (!base) return [];\n const candidates = [base];\n if (base.startsWith(\"U\") && base.length > 1) {\n candidates.push(base.slice(1));\n }\n return Array.from(new Set(candidates));\n}\n\nexport function resolveSpotTokenCandidates(value: string): string[] {\n const normalized = normalizeSpotTokenName(value).toUpperCase();\n if (!normalized) return [];\n const candidates = [normalized];\n if (normalized.startsWith(\"U\") && normalized.length > 1) {\n candidates.push(normalized.slice(1));\n }\n return Array.from(new Set(candidates));\n}\n\nexport function resolveHyperliquidOrderSymbol(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith(\"@\")) return trimmed;\n if (trimmed.includes(\":\")) {\n const [rawDex, ...restParts] = trimmed.split(\":\");\n const dex = rawDex.trim().toLowerCase();\n const rest = restParts.join(\":\");\n const normalizedBase = normalizeHyperliquidBaseSymbol(rest);\n if (!dex || !normalizedBase || normalizedBase === UNKNOWN_SYMBOL) {\n return null;\n }\n return `${dex}:${normalizedBase}`;\n }\n const pair = resolveHyperliquidPair(trimmed);\n if (pair) return pair;\n return normalizeHyperliquidBaseSymbol(trimmed);\n}\n\nexport function resolveHyperliquidSymbol(asset: string, override?: string): string {\n const raw = override && override.trim().length > 0 ? override.trim() : asset.trim();\n if (!raw) return raw;\n if (raw.startsWith(\"@\")) return raw;\n if (raw.includes(\":\")) {\n const [dexRaw, ...restParts] = raw.split(\":\");\n const dex = dexRaw.trim().toLowerCase();\n const rest = restParts.join(\":\");\n const normalizedBase = normalizeHyperliquidBaseSymbol(rest) ?? canonicalizeHyperliquidTokenCase(rest);\n if (!dex) return normalizedBase;\n return `${dex}:${normalizedBase}`;\n }\n if (raw.includes(\"/\")) {\n return resolveHyperliquidPair(raw) ?? raw;\n }\n if (raw.includes(\"-\")) {\n return resolveHyperliquidPair(raw) ?? raw;\n }\n return normalizeHyperliquidBaseSymbol(raw) ?? canonicalizeHyperliquidTokenCase(raw);\n}\n\nexport function resolveHyperliquidPerpSymbol(asset: string): string {\n const raw = asset.trim();\n if (!raw) return raw;\n\n const dex = extractHyperliquidDex(raw);\n const base = normalizeHyperliquidBaseSymbol(raw) ?? raw.toUpperCase();\n return dex ? `${dex}:${base}` : base;\n}\n\nexport function resolveHyperliquidSpotSymbol(asset: string, defaultQuote = \"USDC\"): {\n symbol: string;\n base: string;\n quote: string;\n} {\n const quote = defaultQuote.trim().toUpperCase() || \"USDC\";\n const raw = asset.trim().toUpperCase();\n if (!raw) {\n return { symbol: raw, base: raw, quote };\n }\n\n const pair = resolveHyperliquidPair(raw);\n if (pair) {\n const [base, pairQuote] = pair.split(\"/\");\n return {\n symbol: pair,\n base: base?.trim() ?? raw,\n quote: pairQuote?.trim() ?? quote,\n };\n }\n\n const base = normalizeHyperliquidBaseSymbol(raw) ?? raw;\n return { symbol: `${base}/${quote}`, base, quote };\n}\n","import {\n API_BASES,\n HyperliquidApiError,\n HyperliquidEnvironment,\n normalizeAddress,\n} from \"./base\";\nimport { resolveHyperliquidOrderSymbol } from \"./symbols\";\n\ntype InfoPayload =\n | { type: \"meta\" }\n | { type: \"meta\"; dex: string }\n | { type: \"metaAndAssetCtxs\" }\n | { type: \"metaAndAssetCtxs\"; dex: string }\n | { type: \"spotMeta\" }\n | { type: \"spotMetaAndAssetCtxs\" }\n | { type: \"assetCtxs\" }\n | { type: \"spotAssetCtxs\" }\n | { type: \"openOrders\"; user: `0x${string}`; dex?: string }\n | { type: \"frontendOpenOrders\"; user: `0x${string}`; dex?: string }\n | { type: \"orderStatus\"; user: `0x${string}`; oid: number | string }\n | { type: \"historicalOrders\"; user: `0x${string}`; dex?: 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 | { type: \"activeAssetData\"; user: `0x${string}`; coin: string };\n\nexport const HYPERLIQUID_HIP3_DEXES = [\n \"xyz\",\n \"flx\",\n \"vntl\",\n \"hyna\",\n \"km\",\n \"cash\",\n] as const;\n\nexport type HyperliquidHip3Dex = (typeof HYPERLIQUID_HIP3_DEXES)[number];\n\nexport type HyperliquidOpenOrderLike = {\n oid?: number;\n cloid?: string | null;\n [key: string]: unknown;\n};\n\nexport type HyperliquidActiveAsset = {\n coin: string;\n leverage: number | null;\n leverageType: string | null;\n raw: unknown;\n};\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\nfunction mergeHyperliquidOpenOrders<T extends HyperliquidOpenOrderLike>(batches: T[][]): T[] {\n const merged = new Map<string, T>();\n for (const batch of batches) {\n for (const order of batch) {\n const oid =\n typeof order.oid === \"number\" || typeof order.oid === \"string\"\n ? String(order.oid)\n : \"no-oid\";\n const cloid = typeof order.cloid === \"string\" && order.cloid.trim().length > 0\n ? order.cloid\n : \"no-cloid\";\n merged.set(`${oid}:${cloid}`, order);\n }\n }\n return [...merged.values()];\n}\n\nfunction readNumber(value: unknown): number | null {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : null;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\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 activeAsset(user: `0x${string}`, symbol: string) {\n return fetchHyperliquidActiveAsset({\n user,\n symbol,\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 fetchHyperliquidDexMeta(\n environment: HyperliquidEnvironment = \"mainnet\",\n dex: string,\n) {\n return postInfo(environment, { type: \"meta\", dex });\n}\n\nexport async function fetchHyperliquidMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\",\n) {\n return postInfo(environment, { type: \"metaAndAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidDexMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\",\n dex: string,\n) {\n return postInfo(environment, { type: \"metaAndAssetCtxs\", dex });\n}\n\nexport async function fetchHyperliquidSpotMeta(environment: HyperliquidEnvironment = \"mainnet\") {\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(environment: HyperliquidEnvironment = \"mainnet\") {\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 dex?: string | null;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"openOrders\",\n user: normalizeAddress(params.user),\n ...(params.dex ? { dex: params.dex.trim().toLowerCase() } : {}),\n });\n}\n\nexport async function fetchHyperliquidFrontendOpenOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n dex?: string | null;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"frontendOpenOrders\",\n user: normalizeAddress(params.user),\n ...(params.dex ? { dex: params.dex.trim().toLowerCase() } : {}),\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 dex?: string | null;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"historicalOrders\",\n user: normalizeAddress(params.user),\n ...(params.dex ? { dex: params.dex.trim().toLowerCase() } : {}),\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\nexport function getKnownHyperliquidDexes(environment: HyperliquidEnvironment = \"mainnet\"): string[] {\n return environment === \"mainnet\" ? [...HYPERLIQUID_HIP3_DEXES] : [];\n}\n\nexport async function fetchHyperliquidOpenOrdersAcrossDexes<T extends HyperliquidOpenOrderLike>(\n params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n dexes?: string[];\n includePrimary?: boolean;\n },\n): Promise<T[]> {\n const environment = params.environment ?? \"mainnet\";\n const requests = [\n ...(params.includePrimary === false\n ? []\n : [fetchHyperliquidOpenOrders({ environment, user: params.user }) as Promise<T[]>]),\n ...getKnownHyperliquidDexes(environment)\n .filter((dex) => !(params.dexes && !params.dexes.includes(dex)))\n .map((dex) =>\n fetchHyperliquidOpenOrders({\n environment,\n user: params.user,\n dex,\n }) as Promise<T[]>,\n ),\n ];\n const batches = await Promise.all(requests);\n return mergeHyperliquidOpenOrders(batches);\n}\n\nexport async function fetchHyperliquidFrontendOpenOrdersAcrossDexes<\n T extends HyperliquidOpenOrderLike,\n>(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n dexes?: string[];\n includePrimary?: boolean;\n}): Promise<T[]> {\n const environment = params.environment ?? \"mainnet\";\n const requests = [\n ...(params.includePrimary === false\n ? []\n : [fetchHyperliquidFrontendOpenOrders({ environment, user: params.user }) as Promise<T[]>]),\n ...getKnownHyperliquidDexes(environment)\n .filter((dex) => !(params.dexes && !params.dexes.includes(dex)))\n .map((dex) =>\n fetchHyperliquidFrontendOpenOrders({\n environment,\n user: params.user,\n dex,\n }) as Promise<T[]>,\n ),\n ];\n const batches = await Promise.all(requests);\n return mergeHyperliquidOpenOrders(batches);\n}\n\nexport async function fetchHyperliquidActiveAsset(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n symbol: string;\n}): Promise<HyperliquidActiveAsset> {\n const environment = params.environment ?? \"mainnet\";\n const coin = resolveHyperliquidOrderSymbol(params.symbol);\n if (!coin) {\n throw new Error(`Unable to resolve Hyperliquid active asset symbol: ${params.symbol}`);\n }\n const raw = await postInfo(environment, {\n type: \"activeAssetData\",\n user: normalizeAddress(params.user),\n coin,\n });\n const record =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : null;\n const leverageRecord =\n record?.leverage && typeof record.leverage === \"object\" && !Array.isArray(record.leverage)\n ? (record.leverage as Record<string, unknown>)\n : null;\n return {\n coin,\n leverage:\n leverageRecord && \"value\" in leverageRecord\n ? readNumber(leverageRecord.value)\n : readNumber(record?.leverage),\n leverageType:\n leverageRecord && typeof leverageRecord.type === \"string\" ? leverageRecord.type : null,\n raw,\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 HyperliquidUserPortfolioMarginAction,\n type HyperliquidUserSetAbstractionAction,\n type NonceSource,\n type HyperliquidExchangeResponse,\n assertPositiveNumber,\n normalizeCloid,\n getSignatureChainId,\n normalizeAddress,\n resolveHyperliquidAbstractionFromMode,\n resolveHyperliquidAssetIndex,\n signL1Action,\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\nfunction resolveRequiredExchangeNonce(options: {\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n walletNonceProvider?: NonceSource | undefined;\n wallet: WalletFullContext;\n action: string;\n}): number {\n if (typeof options.nonce === \"number\") {\n return options.nonce;\n }\n\n const resolved =\n options.walletNonceProvider?.() ??\n options.wallet.nonceSource?.() ??\n options.nonceSource?.();\n\n if (resolved === undefined) {\n throw new Error(`${options.action} requires an explicit nonce or wallet nonce source.`);\n }\n\n return resolved;\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(\"Wallet nonce source is required for Hyperliquid exchange actions.\");\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 setAccountAbstractionMode(params: { mode: HyperliquidAccountMode; user?: `0x${string}` }) {\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<Parameters<typeof setHyperliquidAccountAbstractionMode>[0], \"user\">;\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(params.user ? { ...base, user: params.user } : base);\n }\n}\n\nexport async function setHyperliquidPortfolioMargin(\n options: {\n wallet: WalletFullContext;\n enabled: boolean;\n user?: `0x${string}`;\n } & CommonActionOptions,\n): Promise<HyperliquidExchangeResponse<unknown>> {\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 portfolio margin.\");\n }\n\n const nonce = resolveRequiredExchangeNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n walletNonceProvider: options.walletNonceProvider,\n wallet: options.wallet,\n action: \"Hyperliquid portfolio margin\",\n });\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(options.user ?? (options.wallet.address as `0x${string}`));\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 setHyperliquidAccountAbstractionMode(\n options: {\n wallet: WalletFullContext;\n mode: HyperliquidAccountMode;\n user?: `0x${string}`;\n } & CommonActionOptions,\n): Promise<HyperliquidExchangeResponse<unknown>> {\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 account abstraction mode.\");\n }\n\n const nonce = resolveRequiredExchangeNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n walletNonceProvider: options.walletNonceProvider,\n wallet: options.wallet,\n action: \"Hyperliquid account abstraction mode\",\n });\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(options.user ?? (options.wallet.address as `0x${string}`));\n\n const abstraction: HyperliquidAbstraction = 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(\n options: {\n wallet: WalletFullContext;\n cancels: CancelInput[];\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n cancels: CancelByCloidInput[];\n } & CommonActionOptions,\n) {\n options.cancels.forEach((c) => assertSymbol(c.symbol));\n const action = {\n type: \"cancelByCloid\",\n cancels: await withAssetIndexes(options, options.cancels, (idx, entry) => ({\n asset: idx,\n cloid: normalizeCloid(entry.cloid),\n })),\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelAllHyperliquidOrders(\n options: {\n wallet: WalletFullContext;\n } & CommonActionOptions,\n) {\n const action = { type: \"cancelAll\" };\n return submitExchangeAction(options, action);\n}\n\nexport async function scheduleHyperliquidCancel(\n options: {\n wallet: WalletFullContext;\n time?: number | null;\n } & CommonActionOptions,\n) {\n if (options.time != null) {\n assertPositiveNumber(options.time, \"time\");\n }\n const action =\n options.time == null\n ? { type: \"scheduleCancel\" }\n : { type: \"scheduleCancel\", time: options.time };\n return submitExchangeAction(options, action);\n}\n\nexport async function modifyHyperliquidOrder(\n options: {\n wallet: WalletFullContext;\n modification: ModifyOrderInput;\n grouping?: HyperliquidGrouping;\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n modifications: ModifyOrderInput[];\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n twap: TwapOrderInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n cancel: TwapCancelInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n input: UpdateLeverageInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n input: UpdateIsolatedMarginInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n weight: number;\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n name: string;\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n subAccountUser: `0x${string}`;\n isDeposit: boolean;\n usd: string | number | bigint;\n } & CommonActionOptions,\n) {\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 | undefined;\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 = resolveRequiredExchangeNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n wallet: options.wallet,\n action: \"Hyperliquid spot send\",\n });\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 ? normalizeAddress(options.vaultAddress) : 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: (...args) => fetch(...args),\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: (...args) => fetch(...args),\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: normalizeCloid(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(value: string | number | bigint, label: string) {\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 if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(value.trim())) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const numeric = Number(value);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n}\n\nfunction collectExchangeErrorMessages(payload: unknown): string[] {\n if (!payload || typeof payload !== \"object\") return [];\n const root = payload as {\n response?: {\n data?: {\n statuses?: unknown[];\n status?: unknown;\n };\n };\n };\n\n const messages: string[] = [];\n const statuses = root.response?.data?.statuses;\n if (Array.isArray(statuses)) {\n statuses.forEach((status, index) => {\n if (\n status &&\n typeof status === \"object\" &&\n \"error\" in status &&\n typeof (status as { error?: unknown }).error === \"string\"\n ) {\n const errorText = (status as { error: string }).error;\n messages.push(`status[${index}]: ${errorText}`);\n }\n });\n }\n\n const singleStatus = root.response?.data?.status;\n if (\n singleStatus &&\n typeof singleStatus === \"object\" &&\n \"error\" in singleStatus &&\n typeof (singleStatus as { error?: unknown }).error === \"string\"\n ) {\n messages.push((singleStatus as { error: string }).error);\n }\n\n return messages;\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 const nestedErrors = collectExchangeErrorMessages(json);\n if (nestedErrors.length > 0) {\n throw new HyperliquidApiError(\"Hyperliquid exchange returned action errors.\", {\n status: response.status,\n statusText: response.statusText,\n body: json,\n errors: nestedErrors,\n });\n }\n\n return json;\n}\n","import type { HyperliquidEnvironment } from \"./base\";\n\nexport type HyperliquidChain = \"arbitrum\" | \"arbitrum-sepolia\";\nexport type HyperliquidStoreNetwork = \"hyperliquid\" | \"hyperliquid-testnet\";\n\nexport function resolveHyperliquidChain(environment: HyperliquidEnvironment): HyperliquidChain {\n return environment === \"mainnet\" ? \"arbitrum\" : \"arbitrum-sepolia\";\n}\n\nexport function resolveHyperliquidRpcEnvVar(\n environment: HyperliquidEnvironment,\n): \"ARBITRUM_RPC_URL\" | \"ARBITRUM_SEPOLIA_RPC_URL\" {\n return environment === \"mainnet\" ? \"ARBITRUM_RPC_URL\" : \"ARBITRUM_SEPOLIA_RPC_URL\";\n}\n\nexport function resolveHyperliquidChainConfig(\n environment: HyperliquidEnvironment,\n env: Record<string, string | undefined> = process.env,\n): { chain: HyperliquidChain; rpcUrl?: string } {\n const rpcVar = resolveHyperliquidRpcEnvVar(environment);\n const rpcUrl = env[rpcVar];\n return {\n chain: resolveHyperliquidChain(environment),\n ...(rpcUrl ? { rpcUrl } : {}),\n };\n}\n\nexport function resolveHyperliquidStoreNetwork(\n environment: HyperliquidEnvironment,\n): HyperliquidStoreNetwork {\n return environment === \"mainnet\" ? \"hyperliquid\" : \"hyperliquid-testnet\";\n}\n","export type HyperliquidExecutionMode = \"long-only\" | \"long-short\";\n\nexport type HyperliquidTradeSignal = \"buy\" | \"sell\" | \"hold\" | \"unknown\";\n\nexport type HyperliquidTradePlan = {\n side: \"buy\" | \"sell\";\n size: number;\n reduceOnly: boolean;\n targetSize: number;\n};\n\nexport interface HyperliquidTargetSizeConfig {\n allocationMode: \"percent_equity\" | \"fixed\";\n percentOfEquity: number;\n maxPercentOfEquity: number;\n amountUsd?: number;\n}\n\nexport interface HyperliquidTargetSizeExecution {\n size?: number;\n}\n\nexport type HyperliquidDcaSymbolInput = { symbol: string; weight?: number } | string;\n\nexport type HyperliquidDcaSymbolEntry = {\n symbol: string;\n weight: number;\n};\n\nexport type HyperliquidDcaNormalizedEntry = {\n symbol: string;\n weight: number;\n normalizedWeight: number;\n};\n\nfunction clampDcaWeight(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return 0;\n return Math.min(1_000_000, Math.max(0, value));\n}\n\nexport function resolveHyperliquidBudgetUsd(params: {\n config: HyperliquidTargetSizeConfig;\n accountValue: number | null;\n}): number {\n const { config, accountValue } = params;\n if (config.allocationMode === \"fixed\") {\n const desiredUsd = config.amountUsd ?? 0;\n if (!Number.isFinite(desiredUsd) || desiredUsd <= 0) {\n throw new Error(\"fixed allocation requires amountUsd\");\n }\n return desiredUsd;\n }\n\n if (!Number.isFinite(accountValue ?? Number.NaN)) {\n throw new Error(\"percent allocation requires accountValue\");\n }\n const rawUsd = (accountValue as number) * (config.percentOfEquity / 100);\n const maxPercentUsd = (accountValue as number) * (config.maxPercentOfEquity / 100);\n return Math.min(rawUsd, maxPercentUsd);\n}\n\nexport function resolveHyperliquidDcaSymbolEntries(\n inputs: HyperliquidDcaSymbolInput[] | undefined,\n fallbackSymbol: string,\n): HyperliquidDcaSymbolEntry[] {\n const entries: HyperliquidDcaSymbolEntry[] = [];\n const values = Array.isArray(inputs) ? inputs : [];\n\n for (const input of values) {\n if (typeof input === \"string\") {\n const trimmed = input.trim();\n if (!trimmed) continue;\n const [rawSymbol, rawWeight] = trimmed.split(\":\");\n const symbol = rawSymbol?.trim();\n if (!symbol) continue;\n const parsedWeight =\n typeof rawWeight === \"string\" && rawWeight.trim().length > 0\n ? Number.parseFloat(rawWeight.trim())\n : 1;\n const weight =\n Number.isFinite(parsedWeight) && parsedWeight > 0 ? parsedWeight : 1;\n entries.push({ symbol, weight });\n continue;\n }\n\n if (!input || typeof input !== \"object\") continue;\n const symbol = input.symbol?.trim();\n if (!symbol) continue;\n const parsedWeight =\n typeof input.weight === \"number\" && Number.isFinite(input.weight)\n ? input.weight\n : 1;\n const weight = parsedWeight > 0 ? parsedWeight : 1;\n entries.push({ symbol, weight });\n }\n\n if (entries.length > 0) {\n return entries;\n }\n return [{ symbol: fallbackSymbol, weight: 1 }];\n}\n\nexport function normalizeHyperliquidDcaEntries(params: {\n entries: Array<{ symbol: string; weight?: number }> | undefined;\n fallbackSymbol: string;\n}): HyperliquidDcaNormalizedEntry[] {\n const map = new Map<string, HyperliquidDcaSymbolEntry>();\n const entries = Array.isArray(params.entries) ? params.entries : [];\n\n for (const entry of entries) {\n if (!entry || typeof entry !== \"object\") continue;\n const symbol = typeof entry.symbol === \"string\" ? entry.symbol.trim() : \"\";\n if (!symbol) continue;\n\n const key = symbol.toUpperCase();\n const weight = clampDcaWeight(entry.weight);\n if (weight <= 0) continue;\n const existing = map.get(key);\n if (existing) {\n existing.weight += weight;\n } else {\n map.set(key, { symbol, weight });\n }\n }\n\n if (map.size === 0) {\n map.set(params.fallbackSymbol.toUpperCase(), {\n symbol: params.fallbackSymbol,\n weight: 1,\n });\n }\n\n const entriesList = Array.from(map.values());\n const totalWeight = entriesList.reduce((sum, entry) => sum + entry.weight, 0);\n if (!Number.isFinite(totalWeight) || totalWeight <= 0) {\n return [];\n }\n\n return entriesList.map((entry) => ({\n symbol: entry.symbol,\n weight: entry.weight,\n normalizedWeight: entry.weight / totalWeight,\n }));\n}\n\nexport function resolveHyperliquidMaxPerRunUsd(\n targetNotionalUsd: number,\n hedgeRatio: number,\n): number {\n if (!Number.isFinite(targetNotionalUsd) || targetNotionalUsd <= 0) return 0;\n const ratio = Number.isFinite(hedgeRatio) && hedgeRatio > 0 ? hedgeRatio : 1;\n return Math.max(targetNotionalUsd, targetNotionalUsd * ratio);\n}\n\nexport function clampHyperliquidAbs(value: number, limit: number): number {\n if (!Number.isFinite(value) || !Number.isFinite(limit) || limit <= 0) return 0;\n const capped = Math.min(Math.abs(value), limit);\n return Math.sign(value) * capped;\n}\n\nexport function resolveHyperliquidTargetSize(params: {\n config: HyperliquidTargetSizeConfig;\n execution: HyperliquidTargetSizeExecution;\n accountValue: number | null;\n currentPrice: number;\n}): { targetSize: number; budgetUsd: number } {\n const { config, execution, accountValue, currentPrice } = params;\n\n if (execution.size && Number.isFinite(execution.size)) {\n return { targetSize: execution.size, budgetUsd: execution.size * currentPrice };\n }\n\n if (config.allocationMode === \"fixed\") {\n const budgetUsd = resolveHyperliquidBudgetUsd({\n config,\n accountValue,\n });\n return { targetSize: budgetUsd / currentPrice, budgetUsd };\n }\n\n const budgetUsd = resolveHyperliquidBudgetUsd({\n config,\n accountValue,\n });\n return { targetSize: budgetUsd / currentPrice, budgetUsd };\n}\n\nexport function planHyperliquidTrade(params: {\n signal: HyperliquidTradeSignal;\n mode: HyperliquidExecutionMode;\n currentSize: number;\n targetSize: number;\n}): HyperliquidTradePlan | null {\n const { signal, mode, currentSize, targetSize } = params;\n if (signal === \"hold\" || signal === \"unknown\") return null;\n\n if (signal === \"buy\") {\n const desired = mode === \"long-short\" ? targetSize : Math.max(targetSize, 0);\n const delta = desired - currentSize;\n if (delta <= 0) return null;\n return {\n side: \"buy\",\n size: delta,\n reduceOnly: false,\n targetSize: desired,\n };\n }\n\n if (mode === \"long-only\") {\n if (currentSize <= 0) return null;\n return {\n side: \"sell\",\n size: currentSize,\n reduceOnly: true,\n targetSize: 0,\n };\n }\n\n const desired = -Math.abs(targetSize);\n const delta = currentSize - desired;\n if (delta <= 0) return null;\n return {\n side: \"sell\",\n size: delta,\n reduceOnly: false,\n targetSize: desired,\n };\n}\n","import { HyperliquidApiError } from \"./base\";\n\nexport type HyperliquidTickSize = {\n tickSizeInt: bigint;\n tickDecimals: number;\n};\n\nexport type HyperliquidMarketType = \"perp\" | \"spot\";\ntype HyperliquidDirectionalMode = \"down\" | \"up\";\n\ntype HyperliquidOrderResponseLike = {\n response?: {\n data?: {\n statuses?: Array<Record<string, unknown>>;\n };\n };\n};\n\nfunction countDecimalPlaces(value: string): number {\n const [, dec = \"\"] = value.split(\".\");\n return dec.length;\n}\n\nfunction assertNumberString(value: string): void {\n if (!/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(value)) {\n throw new TypeError(\"Invalid decimal number string.\");\n }\n}\n\nfunction normalizeDecimalString(value: string): string {\n return value\n .trim()\n .replace(/^(-?)0+(?=\\d)/, \"$1\")\n .replace(/\\.0*$|(\\.\\d+?)0+$/, \"$1\")\n .replace(/^(-?)\\./, \"$10.\")\n .replace(/^-?$/, \"0\")\n .replace(/^-0$/, \"0\");\n}\n\nconst StringMath = {\n log10Floor(value: string): number {\n const abs = value.startsWith(\"-\") ? value.slice(1) : value;\n const num = Number(abs);\n if (!Number.isFinite(num) || num === 0) return -Infinity;\n\n const [intPart, fracPart = \"\"] = abs.split(\".\");\n if (Number(intPart) !== 0) {\n return intPart.replace(/^0+/, \"\").length - 1;\n }\n const leadingZeros = fracPart.match(/^0*/)?.[0]?.length ?? 0;\n return -(leadingZeros + 1);\n },\n multiplyByPow10(value: string, exp: number): string {\n if (!Number.isInteger(exp)) {\n throw new RangeError(\"Exponent must be an integer.\");\n }\n if (exp === 0) return normalizeDecimalString(value);\n\n const negative = value.startsWith(\"-\");\n const abs = negative ? value.slice(1) : value;\n const [intRaw, fracRaw = \"\"] = abs.split(\".\");\n const intPart = intRaw || \"0\";\n let output: string;\n\n if (exp > 0) {\n if (exp >= fracRaw.length) {\n output = intPart + fracRaw + \"0\".repeat(exp - fracRaw.length);\n } else {\n output = `${intPart}${fracRaw.slice(0, exp)}.${fracRaw.slice(exp)}`;\n }\n } else {\n const absExp = -exp;\n if (absExp >= intPart.length) {\n output = `0.${\"0\".repeat(absExp - intPart.length)}${intPart}${fracRaw}`;\n } else {\n output = `${intPart.slice(0, -absExp)}.${intPart.slice(-absExp)}${fracRaw}`;\n }\n }\n\n return normalizeDecimalString((negative ? \"-\" : \"\") + output);\n },\n trunc(value: string): string {\n const index = value.indexOf(\".\");\n return index === -1 ? value : value.slice(0, index) || \"0\";\n },\n roundInteger(value: string, mode: HyperliquidDirectionalMode): string {\n const normalized = normalizeDecimalString(value);\n const negative = normalized.startsWith(\"-\");\n if (negative) {\n throw new RangeError(\"Directional rounding only supports positive values.\");\n }\n const [intPartRaw, fracPart = \"\"] = normalized.split(\".\");\n const intPart = intPartRaw.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const hasFraction = /[1-9]/.test(fracPart);\n if (!hasFraction) return intPart;\n if (mode === \"down\") return intPart;\n\n const digits = intPart.split(\"\");\n let carry = 1;\n for (let idx = digits.length - 1; idx >= 0 && carry > 0; idx -= 1) {\n const next = Number(digits[idx] ?? \"0\") + carry;\n digits[idx] = String(next % 10);\n carry = next >= 10 ? 1 : 0;\n }\n if (carry > 0) {\n digits.unshift(\"1\");\n }\n return digits.join(\"\").replace(/^0+(?=\\d)/, \"\") || \"0\";\n },\n toPrecisionTruncate(value: string, precision: number): string {\n if (!Number.isInteger(precision) || precision < 1) {\n throw new RangeError(\"Precision must be a positive integer.\");\n }\n if (/^-?0+(\\.0*)?$/.test(value)) return \"0\";\n\n const negative = value.startsWith(\"-\");\n const abs = negative ? value.slice(1) : value;\n const magnitude = StringMath.log10Floor(abs);\n const shiftAmount = precision - magnitude - 1;\n const shifted = StringMath.multiplyByPow10(abs, shiftAmount);\n const truncated = StringMath.trunc(shifted);\n const shiftedBack = StringMath.multiplyByPow10(truncated, -shiftAmount);\n return normalizeDecimalString(negative ? `-${shiftedBack}` : shiftedBack);\n },\n toFixedTruncate(value: string, decimals: number): string {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new RangeError(\"Decimals must be a non-negative integer.\");\n }\n const matcher = new RegExp(`^-?(?:\\\\d+)?(?:\\\\.\\\\d{0,${decimals}})?`);\n const result = value.match(matcher)?.[0];\n if (!result) {\n throw new TypeError(\"Invalid number format.\");\n }\n return normalizeDecimalString(result);\n },\n};\n\nfunction ceilDiv(numerator: bigint, denominator: bigint): bigint {\n if (denominator <= 0n) {\n throw new RangeError(\"Denominator must be positive.\");\n }\n return (numerator + denominator - 1n) / denominator;\n}\n\nfunction scaleDecimalToInt(\n value: string,\n decimals: number,\n mode: HyperliquidDirectionalMode,\n): bigint {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new RangeError(\"Decimals must be a non-negative integer.\");\n }\n const normalized = normalizeDecimalString(value);\n assertNumberString(normalized);\n const negative = normalized.startsWith(\"-\");\n if (negative) {\n throw new RangeError(\"Only positive values are supported.\");\n }\n const shifted = StringMath.multiplyByPow10(normalized, decimals);\n const rounded = StringMath.roundInteger(shifted, mode);\n return BigInt(rounded);\n}\n\nfunction formatScaledDecimal(value: bigint, decimals: number): string {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new RangeError(\"Decimals must be a non-negative integer.\");\n }\n const negative = value < 0n;\n const abs = negative ? -value : value;\n const raw = abs.toString();\n if (decimals === 0) {\n return `${negative ? \"-\" : \"\"}${raw}`;\n }\n const padded = raw.padStart(decimals + 1, \"0\");\n const intPart = padded.slice(0, -decimals) || \"0\";\n const fracPart = padded.slice(-decimals);\n return normalizeDecimalString(`${negative ? \"-\" : \"\"}${intPart}.${fracPart}`);\n}\n\nexport function formatHyperliquidPrice(\n price: string | number,\n szDecimals: number,\n marketType: HyperliquidMarketType = \"perp\",\n): string {\n const normalized = price.toString().trim();\n assertNumberString(normalized);\n if (/^-?\\d+$/.test(normalized)) {\n return normalizeDecimalString(normalized);\n }\n\n const maxDecimals = Math.max((marketType === \"perp\" ? 6 : 8) - szDecimals, 0);\n const decimalsTrimmed = StringMath.toFixedTruncate(normalized, maxDecimals);\n const sigFigTrimmed = StringMath.toPrecisionTruncate(decimalsTrimmed, 5);\n if (sigFigTrimmed === \"0\") {\n throw new RangeError(\"Price is too small and was truncated to 0.\");\n }\n return sigFigTrimmed;\n}\n\nexport function formatHyperliquidSize(size: string | number, szDecimals: number): string {\n const normalized = size.toString().trim();\n assertNumberString(normalized);\n const truncated = StringMath.toFixedTruncate(normalized, szDecimals);\n if (truncated === \"0\") {\n throw new RangeError(\"Size is too small and was truncated to 0.\");\n }\n return truncated;\n}\n\nexport function formatHyperliquidOrderSize(value: number, szDecimals: number): string {\n if (!Number.isFinite(value) || value <= 0) return \"0\";\n try {\n return formatHyperliquidSize(value, szDecimals);\n } catch {\n return \"0\";\n }\n}\n\nexport function roundHyperliquidPriceToTick(\n price: string | number,\n tick: HyperliquidTickSize,\n side: \"buy\" | \"sell\",\n): string {\n if (!Number.isFinite(tick.tickDecimals) || tick.tickDecimals < 0) {\n throw new Error(\"tick.tickDecimals must be a non-negative number.\");\n }\n if (tick.tickSizeInt <= 0n) {\n throw new Error(\"tick.tickSizeInt must be positive.\");\n }\n\n const normalized = normalizeDecimalString(price.toString());\n assertNumberString(normalized);\n if (Number.parseFloat(normalized) <= 0) {\n throw new Error(\"Price must be positive.\");\n }\n\n const scaled = scaleDecimalToInt(\n normalized,\n tick.tickDecimals,\n side === \"buy\" ? \"up\" : \"down\",\n );\n const tickSize = tick.tickSizeInt;\n const rounded =\n side === \"sell\"\n ? (scaled / tickSize) * tickSize\n : ((scaled + tickSize - 1n) / tickSize) * tickSize;\n return formatScaledDecimal(rounded, tick.tickDecimals);\n}\n\nexport function formatHyperliquidMarketablePrice(params: {\n mid: number;\n side: \"buy\" | \"sell\";\n slippageBps: number;\n tick?: HyperliquidTickSize | null;\n}): string {\n const { mid, side, slippageBps, tick } = params;\n if (!Number.isFinite(mid) || mid <= 0) {\n throw new Error(\"mid must be a positive number.\");\n }\n if (!Number.isFinite(slippageBps) || slippageBps < 0) {\n throw new Error(\"slippageBps must be a non-negative number.\");\n }\n\n const midString = normalizeDecimalString(mid.toString());\n const baseDecimals = countDecimalPlaces(midString);\n const workDecimals = Math.max(baseDecimals + 4, tick?.tickDecimals ?? 0, 8);\n const scaledMid = scaleDecimalToInt(midString, workDecimals, \"down\");\n const slippageNumerator = BigInt(\n side === \"buy\" ? 10_000 + slippageBps : 10_000 - slippageBps,\n );\n const adjustedScaled =\n side === \"buy\"\n ? ceilDiv(scaledMid * slippageNumerator, 10_000n)\n : (scaledMid * slippageNumerator) / 10_000n;\n const adjusted = formatScaledDecimal(adjustedScaled, workDecimals);\n\n if (tick) {\n return roundHyperliquidPriceToTick(adjusted, tick, side);\n }\n\n const roundedScaled = scaleDecimalToInt(\n adjusted,\n baseDecimals,\n side === \"buy\" ? \"up\" : \"down\",\n );\n return formatScaledDecimal(roundedScaled, baseDecimals);\n}\n\nexport function extractHyperliquidOrderIds(responses: HyperliquidOrderResponseLike[]): {\n cloids: string[];\n oids: string[];\n} {\n const cloids = new Set<string>();\n const oids = new Set<string>();\n const push = (val: unknown, target: Set<string>) => {\n if (val === null || val === undefined) return;\n const str = String(val);\n if (str.length) target.add(str);\n };\n\n for (const res of responses) {\n const statuses = res?.response?.data?.statuses;\n if (!Array.isArray(statuses)) continue;\n\n for (const status of statuses) {\n const resting = (status as any).resting as Record<string, unknown> | undefined;\n const filled = (status as any).filled as Record<string, unknown> | undefined;\n push(resting?.cloid, cloids);\n push(resting?.oid, oids);\n push(filled?.cloid, cloids);\n push(filled?.oid, oids);\n }\n }\n\n return {\n cloids: Array.from(cloids),\n oids: Array.from(oids),\n };\n}\n\nexport function resolveHyperliquidOrderRef(params: {\n response?: HyperliquidOrderResponseLike | null;\n fallbackCloid?: string | null;\n fallbackOid?: string | null;\n prefix?: string;\n index?: number;\n}): string {\n const { response, fallbackCloid, fallbackOid, prefix = \"hl-order\", index = 0 } = params;\n\n const statuses = response?.response?.data?.statuses ?? [];\n if (Array.isArray(statuses)) {\n for (const status of statuses) {\n const filled =\n status && typeof (status as any).filled === \"object\"\n ? ((status as any).filled as Record<string, unknown>)\n : null;\n if (filled) {\n if (typeof filled.cloid === \"string\" && filled.cloid.trim().length > 0) {\n return filled.cloid;\n }\n if (\n typeof filled.oid === \"number\" ||\n (typeof filled.oid === \"string\" && filled.oid.trim().length > 0)\n ) {\n return String(filled.oid);\n }\n }\n\n const resting =\n status && typeof (status as any).resting === \"object\"\n ? ((status as any).resting as Record<string, unknown>)\n : null;\n if (resting) {\n if (typeof resting.cloid === \"string\" && resting.cloid.trim().length > 0) {\n return resting.cloid;\n }\n if (\n typeof resting.oid === \"number\" ||\n (typeof resting.oid === \"string\" && resting.oid.trim().length > 0)\n ) {\n return String(resting.oid);\n }\n }\n }\n }\n\n if (fallbackCloid && fallbackCloid.trim().length > 0) {\n return fallbackCloid;\n }\n if (fallbackOid && fallbackOid.trim().length > 0) {\n return fallbackOid;\n }\n return `${prefix}-${Date.now()}-${index}`;\n}\n\nexport function resolveHyperliquidErrorDetail(error: unknown): unknown | null {\n if (error instanceof HyperliquidApiError) {\n return error.response ?? null;\n }\n if (error && typeof error === \"object\" && \"response\" in error) {\n return (error as { response?: unknown }).response ?? null;\n }\n return null;\n}\n","function unwrapData(payload: unknown): Record<string, unknown> | null {\n if (!payload || typeof payload !== \"object\") return null;\n if (\"data\" in payload) {\n const data = (payload as { data?: unknown }).data;\n if (data && typeof data === \"object\") {\n return data as Record<string, unknown>;\n }\n }\n return payload as Record<string, unknown>;\n}\n\nexport function readHyperliquidNumber(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nexport function readHyperliquidAccountValue(payload: unknown): number | null {\n const data = unwrapData(payload);\n if (!data) return null;\n const candidates = [\n (data as any)?.marginSummary?.accountValue,\n (data as any)?.crossMarginSummary?.accountValue,\n (data as any)?.accountValue,\n (data as any)?.equity,\n (data as any)?.totalAccountValue,\n (data as any)?.marginSummary?.totalAccountValue,\n ];\n for (const value of candidates) {\n const parsed = readHyperliquidNumber(value);\n if (parsed !== null) return parsed;\n }\n return null;\n}\n\nfunction matchPerpCoin(params: { coin: string; target: string; prefixMatch: boolean }): boolean {\n const coin = params.coin.toUpperCase();\n const target = params.target.toUpperCase();\n if (params.prefixMatch) return coin.startsWith(target);\n return coin === target;\n}\n\nexport function readHyperliquidPerpPositionSize(\n payload: unknown,\n symbol: string,\n options?: { prefixMatch?: boolean },\n): number {\n const data = unwrapData(payload);\n const rows = Array.isArray((data as any)?.assetPositions)\n ? ((data as any).assetPositions as Array<Record<string, unknown>>)\n : [];\n const base = symbol.split(\"-\")[0]?.toUpperCase() ?? symbol.toUpperCase();\n const prefixMatch = options?.prefixMatch ?? false;\n\n for (const row of rows) {\n const position = (row as any).position ?? row;\n const coin =\n typeof position?.coin === \"string\"\n ? position.coin\n : typeof (row as any).coin === \"string\"\n ? (row as any).coin\n : \"\";\n\n if (!matchPerpCoin({ coin, target: base, prefixMatch })) continue;\n const size = (position as any).szi ?? (row as any).szi;\n const parsed = readHyperliquidNumber(size);\n return parsed ?? 0;\n }\n\n return 0;\n}\n\nexport function readHyperliquidPerpPosition(\n payload: unknown,\n symbol: string,\n options?: { prefixMatch?: boolean },\n): { size: number; positionValue: number; unrealizedPnl: number | null } {\n const data = unwrapData(payload);\n const rows = Array.isArray((data as any)?.assetPositions)\n ? ((data as any).assetPositions as Array<Record<string, unknown>>)\n : [];\n const target = symbol.split(\"-\")[0]?.toUpperCase() ?? symbol.toUpperCase();\n const prefixMatch = options?.prefixMatch ?? false;\n\n for (const row of rows) {\n const position = (row as any)?.position ?? row;\n const coin =\n typeof position?.coin === \"string\"\n ? position.coin\n : typeof (row as any)?.coin === \"string\"\n ? (row as any).coin\n : \"\";\n if (!matchPerpCoin({ coin, target, prefixMatch })) continue;\n\n const size = readHyperliquidNumber(position?.szi ?? (row as any).szi) ?? 0;\n const positionValue = Math.abs(\n readHyperliquidNumber(position?.positionValue ?? (row as any).positionValue) ?? 0,\n );\n const unrealizedPnl = readHyperliquidNumber(\n position?.unrealizedPnl ?? (row as any).unrealizedPnl,\n );\n return { size, positionValue, unrealizedPnl };\n }\n\n return { size: 0, positionValue: 0, unrealizedPnl: null };\n}\n\nexport function readHyperliquidSpotBalanceSize(payload: unknown, symbol: string): number {\n const data = unwrapData(payload);\n const rows = Array.isArray((data as any)?.balances)\n ? ((data as any).balances as Array<Record<string, unknown>>)\n : [];\n const base = symbol.split(\"/\")[0]?.split(\"-\")[0]?.toUpperCase() ?? symbol.toUpperCase();\n\n for (const row of rows) {\n const coin =\n typeof row?.coin === \"string\"\n ? row.coin\n : typeof (row as any)?.asset === \"string\"\n ? (row as any).asset\n : \"\";\n if (coin.toUpperCase() !== base) continue;\n\n const total = (row as any).total ?? (row as any).balance ?? (row as any).szi;\n const parsed = readHyperliquidNumber(total);\n return parsed ?? 0;\n }\n\n return 0;\n}\n\nexport function readHyperliquidSpotBalance(\n payload: unknown,\n base: string,\n): { total: number; entryNtl: number | null } {\n const data = unwrapData(payload);\n const balances = Array.isArray((data as any)?.balances)\n ? ((data as any).balances as Array<Record<string, unknown>>)\n : [];\n const target = base.toUpperCase();\n\n for (const row of balances) {\n const coin = typeof row?.coin === \"string\" ? row.coin : \"\";\n if (coin.toUpperCase() !== target) continue;\n const total = readHyperliquidNumber(row?.total) ?? 0;\n const entryNtl = readHyperliquidNumber(row?.entryNtl);\n return { total, entryNtl };\n }\n\n return { total: 0, entryNtl: null };\n}\n\nexport function readHyperliquidSpotAccountValue(params: {\n balances: unknown;\n pricesUsd: Map<string, number>;\n}): number | null {\n const rows = Array.isArray(params.balances)\n ? (params.balances as Array<Record<string, unknown>>)\n : [];\n if (rows.length === 0) return null;\n\n let total = 0;\n let hasValue = false;\n\n for (const row of rows) {\n const coin =\n typeof row?.coin === \"string\"\n ? row.coin\n : typeof (row as any)?.asset === \"string\"\n ? (row as any).asset\n : \"\";\n if (!coin) continue;\n\n const amount = readHyperliquidNumber(\n (row as any).total ?? (row as any).balance ?? (row as any).szi,\n );\n if (amount == null || amount === 0) continue;\n\n const price = params.pricesUsd.get(coin.toUpperCase());\n if (price == null || !Number.isFinite(price) || price <= 0) continue;\n\n total += amount * price;\n hasValue = true;\n }\n\n return hasValue ? total : null;\n}\n","import { API_BASES, type HyperliquidEnvironment } from \"./base\";\nimport {\n fetchHyperliquidDexMetaAndAssetCtxs,\n fetchHyperliquidMeta,\n fetchHyperliquidMetaAndAssetCtxs,\n fetchHyperliquidSpotMeta,\n fetchHyperliquidSpotMetaAndAssetCtxs,\n} from \"./info\";\nimport type { HyperliquidTickSize } from \"./order-utils\";\nimport {\n buildHyperliquidMarketDescriptor,\n type HyperliquidMarketDescriptor,\n isHyperliquidSpotSymbol,\n normalizeHyperliquidMetaSymbol,\n normalizeSpotTokenName,\n parseHyperliquidSymbol,\n parseSpotPairSymbol,\n resolveHyperliquidOrderSymbol,\n resolveSpotMidCandidates,\n resolveSpotTokenCandidates,\n} from \"./symbols\";\nimport { readHyperliquidNumber, readHyperliquidSpotAccountValue } from \"./state-readers\";\n\ntype PerpUniverseItem = {\n name?: string;\n szDecimals?: number;\n};\n\ntype PerpAssetContext = {\n markPx?: string | number;\n midPx?: string | number;\n oraclePx?: string | number;\n funding?: string | number;\n};\n\ntype SpotUniverseItem = {\n name?: string;\n index?: number;\n tokens?: number[];\n};\n\ntype SpotToken = {\n name?: string;\n index?: number;\n szDecimals?: number;\n};\n\ntype SpotAssetContext = {\n markPx?: string | number;\n midPx?: string | number;\n oraclePx?: string | number;\n};\n\ntype SpotMetaResponse = {\n universe?: SpotUniverseItem[];\n tokens?: SpotToken[];\n};\n\nexport type HyperliquidBarResolution = \"1\" | \"5\" | \"15\" | \"30\" | \"60\" | \"240\" | \"1D\" | \"1W\";\n\nexport type HyperliquidBar = {\n time: number;\n open?: number;\n high?: number;\n low?: number;\n close: number;\n volume?: number;\n [key: string]: unknown;\n};\n\nexport type HyperliquidIndicatorBar = {\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n};\n\nexport type HyperliquidPerpMarketInfo = {\n symbol: string;\n price: number;\n fundingRate: number | null;\n szDecimals: number;\n};\n\nexport type HyperliquidSpotMarketInfo = {\n symbol: string;\n base: string;\n quote: string;\n assetId: number;\n marketIndex: number;\n price: number;\n szDecimals: number;\n};\n\nexport type HyperliquidResolvedMarketDescriptor = HyperliquidMarketDescriptor;\n\nconst META_CACHE_TTL_MS = 5 * 60 * 1000;\nconst DEFAULT_OPENPOND_GATEWAY_URL = \"https://gateway.openpond.dev\";\nconst allMidsCache = new Map<\n string,\n { fetchedAt: number; mids: Record<string, string | number> }\n>();\n\nfunction resolveGatewayBase(override?: string | null): string | null {\n const value =\n override ??\n process.env.OPENPOND_GATEWAY_URL ??\n DEFAULT_OPENPOND_GATEWAY_URL;\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n return trimmed.replace(/\\/$/, \"\");\n}\n\nfunction normalizeGatewaySymbol(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return trimmed;\n const idx = trimmed.indexOf(\":\");\n if (idx > 0) {\n const dex = trimmed.slice(0, idx).toLowerCase();\n const rest = trimmed.slice(idx + 1);\n return `${dex}:${rest.toUpperCase()}`;\n }\n return trimmed.toUpperCase();\n}\n\nfunction gcd(a: bigint, b: bigint): bigint {\n let left = a < 0n ? -a : a;\n let right = b < 0n ? -b : b;\n while (right !== 0n) {\n const next = left % right;\n left = right;\n right = next;\n }\n return left;\n}\n\nfunction pow10(decimals: number): bigint {\n let result = 1n;\n for (let i = 0; i < decimals; i += 1) {\n result *= 10n;\n }\n return result;\n}\n\nfunction maxDecimals(values: string[]): number {\n let max = 0;\n for (const value of values) {\n const dot = value.indexOf(\".\");\n if (dot === -1) continue;\n const decimals = value.length - dot - 1;\n if (decimals > max) max = decimals;\n }\n return max;\n}\n\nfunction toScaledInt(value: string, decimals: number): bigint {\n const trimmed = value.trim();\n const negative = trimmed.startsWith(\"-\");\n const unsigned = negative ? trimmed.slice(1) : trimmed;\n const [intPart, fracPart = \"\"] = unsigned.split(\".\");\n const padded = fracPart.padEnd(decimals, \"0\").slice(0, decimals);\n const combined = `${intPart || \"0\"}${padded}`;\n const asInt = BigInt(combined || \"0\");\n return negative ? -asInt : asInt;\n}\n\nfunction formatScaledInt(value: bigint, decimals: number): string {\n const negative = value < 0n;\n const absValue = negative ? -value : value;\n const scale = pow10(decimals);\n const integer = absValue / scale;\n const fraction = absValue % scale;\n if (decimals === 0) {\n return `${negative ? \"-\" : \"\"}${integer.toString()}`;\n }\n const fractionStr = fraction.toString().padStart(decimals, \"0\");\n return `${negative ? \"-\" : \"\"}${integer.toString()}.${fractionStr}`.replace(/\\.?0+$/, \"\");\n}\n\nfunction resolveSpotSizeDecimals(meta: SpotMetaResponse, symbol: string): number {\n const universe = meta.universe ?? [];\n const tokens = meta.tokens ?? [];\n if (!universe.length || !tokens.length) {\n throw new Error(`Spot metadata unavailable for ${symbol}.`);\n }\n\n const tokenMap = new Map<number, { name: string; szDecimals: number }>();\n for (const token of tokens) {\n const index = token?.index;\n const szDecimals = typeof token?.szDecimals === \"number\" ? token.szDecimals : null;\n if (typeof index !== \"number\" || szDecimals == null) continue;\n tokenMap.set(index, {\n name: normalizeSpotTokenName(token?.name),\n szDecimals,\n });\n }\n\n if (symbol.startsWith(\"@\")) {\n const targetIndex = Number.parseInt(symbol.slice(1), 10);\n if (!Number.isFinite(targetIndex)) {\n throw new Error(`Invalid spot pair id: ${symbol}`);\n }\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const marketIndex = typeof market?.index === \"number\" ? market.index : idx;\n if (marketIndex !== targetIndex) continue;\n const [baseIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n if (!baseToken) break;\n return baseToken.szDecimals;\n }\n throw new Error(`Unknown spot pair id: ${symbol}`);\n }\n\n const pair = parseSpotPairSymbol(symbol);\n if (!pair) {\n throw new Error(`Invalid spot symbol: ${symbol}`);\n }\n const normalizedBase = normalizeSpotTokenName(pair.base).toUpperCase();\n const normalizedQuote = normalizeSpotTokenName(pair.quote).toUpperCase();\n\n for (const market of universe) {\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n const quoteToken = tokenMap.get(quoteIndex ?? -1);\n if (!baseToken || !quoteToken) continue;\n if (\n baseToken.name.toUpperCase() === normalizedBase &&\n quoteToken.name.toUpperCase() === normalizedQuote\n ) {\n return baseToken.szDecimals;\n }\n }\n\n throw new Error(`No size decimals found for ${symbol}.`);\n}\n\nexport async function fetchHyperliquidAllMids(\n environment: HyperliquidEnvironment,\n): Promise<Record<string, string | number>> {\n const cacheKey = environment;\n const cached = allMidsCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < META_CACHE_TTL_MS) {\n return cached.mids;\n }\n\n const baseUrl = API_BASES[environment];\n const res = await fetch(`${baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"allMids\" }),\n });\n const json = (await res.json().catch(() => null)) as Record<string, string | number> | null;\n if (!res.ok || !json || typeof json !== \"object\") {\n throw new Error(`Failed to load Hyperliquid mid prices (${res.status}).`);\n }\n\n allMidsCache.set(cacheKey, { fetchedAt: Date.now(), mids: json });\n return json;\n}\n\nexport async function fetchHyperliquidBars(params: {\n symbol: string;\n resolution: HyperliquidBarResolution;\n countBack: number;\n fromSeconds?: number;\n toSeconds?: number;\n gatewayBase?: string | null;\n}): Promise<HyperliquidBar[]> {\n const gatewayBase = resolveGatewayBase(params.gatewayBase);\n if (!gatewayBase) {\n throw new Error(\"OPENPOND_GATEWAY_URL is required.\");\n }\n\n const normalizedCountBack = Math.max(1, Math.trunc(params.countBack));\n if (!Number.isFinite(normalizedCountBack) || normalizedCountBack <= 0) {\n throw new Error(\"countBack must be a positive integer.\");\n }\n\n const url = new URL(`${gatewayBase}/v1/hyperliquid/bars`);\n url.searchParams.set(\"symbol\", normalizeGatewaySymbol(params.symbol));\n url.searchParams.set(\"resolution\", params.resolution);\n url.searchParams.set(\"countBack\", normalizedCountBack.toString());\n if (typeof params.fromSeconds === \"number\" && Number.isFinite(params.fromSeconds)) {\n url.searchParams.set(\"from\", Math.max(0, Math.trunc(params.fromSeconds)).toString());\n }\n if (typeof params.toSeconds === \"number\" && Number.isFinite(params.toSeconds)) {\n url.searchParams.set(\"to\", Math.max(0, Math.trunc(params.toSeconds)).toString());\n }\n\n const response = await fetch(url.toString());\n if (!response.ok) {\n throw new Error(`Gateway error (${response.status})`);\n }\n\n const data = (await response.json().catch(() => null)) as { bars?: unknown[] } | null;\n const bars = Array.isArray(data?.bars) ? data.bars : [];\n return bars.filter((bar): bar is HyperliquidBar => {\n if (!bar || typeof bar !== \"object\") return false;\n const record = bar as { close?: unknown; time?: unknown };\n return (\n typeof record.close === \"number\" &&\n Number.isFinite(record.close) &&\n typeof record.time === \"number\" &&\n Number.isFinite(record.time)\n );\n });\n}\n\nexport function normalizeHyperliquidIndicatorBars(\n bars: HyperliquidBar[],\n): HyperliquidIndicatorBar[] {\n return bars\n .filter(\n (bar): bar is HyperliquidBar & { time: number; close: number } =>\n bar &&\n typeof bar === \"object\" &&\n typeof bar.time === \"number\" &&\n Number.isFinite(bar.time) &&\n typeof bar.close === \"number\" &&\n Number.isFinite(bar.close),\n )\n .map((bar) => {\n const close = bar.close;\n const open = typeof bar.open === \"number\" && Number.isFinite(bar.open) ? bar.open : close;\n const high = typeof bar.high === \"number\" && Number.isFinite(bar.high) ? bar.high : close;\n const low = typeof bar.low === \"number\" && Number.isFinite(bar.low) ? bar.low : close;\n const volume =\n typeof bar.volume === \"number\" && Number.isFinite(bar.volume) ? bar.volume : 0;\n return {\n time: bar.time,\n open,\n high,\n low,\n close,\n volume,\n };\n });\n}\n\nexport async function fetchHyperliquidTickSize(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n}): Promise<HyperliquidTickSize> {\n return fetchHyperliquidTickSizeForCoin(params.environment, params.symbol);\n}\n\nexport async function fetchHyperliquidSpotTickSize(params: {\n environment: HyperliquidEnvironment;\n marketIndex: number;\n}): Promise<HyperliquidTickSize> {\n if (!Number.isFinite(params.marketIndex)) {\n throw new Error(\"Hyperliquid spot market index is invalid.\");\n }\n return fetchHyperliquidTickSizeForCoin(params.environment, `@${params.marketIndex}`);\n}\n\nasync function fetchHyperliquidTickSizeForCoin(\n environment: HyperliquidEnvironment,\n coin: string,\n): Promise<HyperliquidTickSize> {\n const base = API_BASES[environment];\n const res = await fetch(`${base}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"l2Book\", coin }),\n });\n if (!res.ok) {\n throw new Error(`Hyperliquid l2Book failed for ${coin}`);\n }\n\n const data = (await res.json().catch(() => null)) as {\n levels?: Array<Array<{ px?: string | number }>>;\n } | null;\n const levels = Array.isArray(data?.levels) ? (data?.levels ?? []) : [];\n const prices = levels\n .flatMap((side) => (Array.isArray(side) ? side.map((entry) => String(entry?.px ?? \"\")) : []))\n .filter((px) => px.length > 0);\n\n if (prices.length < 2) {\n throw new Error(`Hyperliquid l2Book missing price levels for ${coin}`);\n }\n\n const decimals = maxDecimals(prices);\n const scaled = prices.map((px) => toScaledInt(px, decimals));\n const unique = Array.from(new Set(scaled.map((v) => v.toString())))\n .map((v) => BigInt(v))\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));\n\n let tick = 0n;\n for (let i = 1; i < unique.length; i += 1) {\n const diff = unique[i] - unique[i - 1];\n if (diff <= 0n) continue;\n tick = tick === 0n ? diff : gcd(tick, diff);\n }\n\n if (tick === 0n) {\n tick = 1n;\n }\n\n return { tickSizeInt: tick, tickDecimals: decimals };\n}\n\nexport async function fetchHyperliquidPerpMarketInfo(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n}): Promise<HyperliquidPerpMarketInfo> {\n const data = (await fetchHyperliquidMetaAndAssetCtxs(params.environment)) as [\n { universe?: PerpUniverseItem[] },\n PerpAssetContext[],\n ];\n\n const universe = data?.[0]?.universe ?? [];\n const contexts = data?.[1] ?? [];\n const target = normalizeHyperliquidMetaSymbol(params.symbol).toUpperCase();\n\n const idx = universe.findIndex(\n (entry) => normalizeHyperliquidMetaSymbol(entry?.name ?? \"\").toUpperCase() === target,\n );\n if (idx < 0) {\n throw new Error(`Unknown Hyperliquid perp asset: ${params.symbol}`);\n }\n\n const ctx = contexts[idx] ?? null;\n const price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n if (!price || price <= 0) {\n throw new Error(`No perp price available for ${params.symbol}`);\n }\n\n const fundingRate = readHyperliquidNumber(ctx?.funding);\n const szDecimals = readHyperliquidNumber(universe[idx]?.szDecimals);\n if (szDecimals == null) {\n throw new Error(`No size decimals available for ${params.symbol}`);\n }\n\n return {\n symbol: params.symbol,\n price,\n fundingRate,\n szDecimals,\n };\n}\n\nexport async function fetchHyperliquidSpotMarketInfo(params: {\n environment: HyperliquidEnvironment;\n base: string;\n quote: string;\n mids?: Record<string, string | number> | null;\n}): Promise<HyperliquidSpotMarketInfo> {\n const mids =\n params.mids === undefined\n ? await fetchHyperliquidAllMids(params.environment).catch(() => null)\n : params.mids;\n\n const data = (await fetchHyperliquidSpotMetaAndAssetCtxs(params.environment)) as [\n { universe?: SpotUniverseItem[]; tokens?: SpotToken[] },\n SpotAssetContext[],\n ];\n\n const universe = data?.[0]?.universe ?? [];\n const tokens = data?.[0]?.tokens ?? [];\n const contexts = data?.[1] ?? [];\n\n const tokenMap = new Map<number, { name: string; szDecimals: number }>();\n for (const token of tokens) {\n const index = token?.index;\n const szDecimals = readHyperliquidNumber(token?.szDecimals);\n if (typeof index !== \"number\" || szDecimals == null) continue;\n tokenMap.set(index, {\n name: normalizeSpotTokenName(token?.name),\n szDecimals,\n });\n }\n\n const baseCandidates = resolveSpotTokenCandidates(params.base);\n const quoteCandidates = resolveSpotTokenCandidates(params.quote);\n const normalizedBase = normalizeSpotTokenName(params.base).toUpperCase();\n const normalizedQuote = normalizeSpotTokenName(params.quote).toUpperCase();\n\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n const quoteToken = tokenMap.get(quoteIndex ?? -1);\n if (!baseToken || !quoteToken) continue;\n\n const marketBaseCandidates = resolveSpotTokenCandidates(baseToken.name);\n const marketQuoteCandidates = resolveSpotTokenCandidates(quoteToken.name);\n if (\n baseCandidates.some((candidate) => marketBaseCandidates.includes(candidate)) &&\n quoteCandidates.some((candidate) => marketQuoteCandidates.includes(candidate))\n ) {\n const contextIndex = typeof market?.index === \"number\" ? market.index : idx;\n const ctx =\n (contextIndex >= 0 && contextIndex < contexts.length ? contexts[contextIndex] : null) ??\n contexts[idx] ??\n null;\n\n let price: number | null = null;\n if (mids) {\n for (const candidate of resolveSpotMidCandidates(baseToken.name)) {\n const mid = readHyperliquidNumber(mids[candidate]);\n if (mid != null && mid > 0) {\n price = mid;\n break;\n }\n }\n }\n if (!price || price <= 0) {\n price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n }\n if (!price || price <= 0) {\n throw new Error(`No spot price available for ${normalizedBase}/${normalizedQuote}`);\n }\n\n const marketIndex = typeof market?.index === \"number\" ? market.index : idx;\n return {\n symbol: `${baseToken.name.toUpperCase()}/${quoteToken.name.toUpperCase()}`,\n base: baseToken.name.toUpperCase(),\n quote: quoteToken.name.toUpperCase(),\n assetId: 10000 + marketIndex,\n marketIndex,\n price,\n szDecimals: baseToken.szDecimals,\n };\n }\n }\n\n throw new Error(`Unknown Hyperliquid spot market: ${normalizedBase}/${normalizedQuote}`);\n}\n\nasync function fetchHyperliquidSpotMarketInfoByIndex(params: {\n environment: HyperliquidEnvironment;\n marketIndex: number;\n mids?: Record<string, string | number> | null;\n}): Promise<HyperliquidSpotMarketInfo> {\n const mids =\n params.mids === undefined\n ? await fetchHyperliquidAllMids(params.environment).catch(() => null)\n : params.mids;\n\n const data = (await fetchHyperliquidSpotMetaAndAssetCtxs(params.environment)) as [\n { universe?: SpotUniverseItem[]; tokens?: SpotToken[] },\n SpotAssetContext[],\n ];\n\n const universe = data?.[0]?.universe ?? [];\n const tokens = data?.[0]?.tokens ?? [];\n const contexts = data?.[1] ?? [];\n\n const tokenMap = new Map<number, { name: string; szDecimals: number }>();\n for (const token of tokens) {\n const index = token?.index;\n const szDecimals = readHyperliquidNumber(token?.szDecimals);\n if (typeof index !== \"number\" || szDecimals == null) continue;\n tokenMap.set(index, {\n name: normalizeSpotTokenName(token?.name),\n szDecimals,\n });\n }\n\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const marketIndex = typeof market?.index === \"number\" ? market.index : idx;\n if (marketIndex !== params.marketIndex) continue;\n\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n const quoteToken = tokenMap.get(quoteIndex ?? -1);\n if (!baseToken || !quoteToken) {\n break;\n }\n\n const ctx =\n (marketIndex >= 0 && marketIndex < contexts.length ? contexts[marketIndex] : null) ??\n contexts[idx] ??\n null;\n\n let price: number | null = null;\n if (mids) {\n for (const candidate of resolveSpotMidCandidates(baseToken.name)) {\n const mid = readHyperliquidNumber(mids[candidate]);\n if (mid != null && mid > 0) {\n price = mid;\n break;\n }\n }\n }\n if (!price || price <= 0) {\n price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n }\n if (!price || price <= 0) {\n throw new Error(`No spot price available for @${params.marketIndex}`);\n }\n\n return {\n symbol: `${baseToken.name.toUpperCase()}/${quoteToken.name.toUpperCase()}`,\n base: baseToken.name.toUpperCase(),\n quote: quoteToken.name.toUpperCase(),\n assetId: 10000 + marketIndex,\n marketIndex,\n price,\n szDecimals: baseToken.szDecimals,\n };\n }\n\n throw new Error(`Unknown Hyperliquid spot market index: @${params.marketIndex}`);\n}\n\nexport async function fetchHyperliquidResolvedMarketDescriptor(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n mids?: Record<string, string | number> | null;\n}): Promise<HyperliquidResolvedMarketDescriptor> {\n const parsed = parseHyperliquidSymbol(params.symbol);\n if (!parsed) {\n throw new Error(`Unable to parse Hyperliquid symbol: ${params.symbol}`);\n }\n\n if (parsed.kind === \"spot\" || parsed.kind === \"spotIndex\") {\n const spotInfo =\n parsed.kind === \"spotIndex\"\n ? await fetchHyperliquidSpotMarketInfoByIndex({\n environment: params.environment,\n marketIndex: Number.parseInt(parsed.normalized.slice(1), 10),\n ...(params.mids !== undefined ? { mids: params.mids } : {}),\n })\n : await fetchHyperliquidSpotMarketInfo({\n environment: params.environment,\n base: parsed.base ?? \"\",\n quote: parsed.quote ?? \"USDC\",\n ...(params.mids !== undefined ? { mids: params.mids } : {}),\n });\n const orderSymbol = resolveHyperliquidOrderSymbol(spotInfo.symbol);\n if (!orderSymbol) {\n throw new Error(`Unable to resolve Hyperliquid spot order symbol: ${params.symbol}`);\n }\n const descriptor = buildHyperliquidMarketDescriptor({\n symbol: params.symbol,\n pair: spotInfo.symbol,\n quote: spotInfo.quote,\n displaySymbol: `${spotInfo.base}-${spotInfo.quote}`,\n orderSymbol,\n marketDataCoin: `@${spotInfo.marketIndex}`,\n spotIndex: spotInfo.marketIndex,\n assetId: spotInfo.assetId,\n });\n if (!descriptor) {\n throw new Error(`Unable to build Hyperliquid spot market descriptor: ${params.symbol}`);\n }\n return descriptor;\n }\n\n const quote =\n parsed.dex\n ? await (async () => {\n const dex = parsed.dex;\n if (!dex) return null;\n const [dexMetaAndCtxs, spotMetaRaw] = await Promise.all([\n fetchHyperliquidDexMetaAndAssetCtxs(params.environment, dex),\n fetchHyperliquidSpotMeta(params.environment),\n ]);\n const metaHeader =\n Array.isArray(dexMetaAndCtxs) && dexMetaAndCtxs.length > 0\n ? (dexMetaAndCtxs[0] as { collateralToken?: unknown } | null)\n : null;\n const collateralToken =\n typeof metaHeader?.collateralToken === \"number\" ? metaHeader.collateralToken : null;\n if (collateralToken == null) return null;\n const spotMeta = spotMetaRaw as SpotMetaResponse;\n const token = (spotMeta.tokens ?? []).find((entry) => entry?.index === collateralToken) ?? null;\n return normalizeSpotTokenName(token?.name).toUpperCase() || null;\n })()\n : \"USDC\";\n\n const descriptor = buildHyperliquidMarketDescriptor({\n symbol: params.symbol,\n ...(quote ? { quote } : {}),\n });\n if (!descriptor) {\n throw new Error(`Unable to build Hyperliquid market descriptor: ${params.symbol}`);\n }\n return descriptor;\n}\n\nexport async function fetchHyperliquidSizeDecimals(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n}): Promise<number> {\n const { symbol, environment } = params;\n if (isHyperliquidSpotSymbol(symbol)) {\n const meta = (await fetchHyperliquidSpotMeta(environment)) as SpotMetaResponse;\n return resolveSpotSizeDecimals(meta, symbol);\n }\n\n const meta = (await fetchHyperliquidMeta(environment)) as {\n universe?: Array<{ name?: string; szDecimals?: number }>;\n };\n const universe = Array.isArray(meta?.universe) ? meta.universe : [];\n const normalized = normalizeHyperliquidMetaSymbol(symbol).toUpperCase();\n const match = universe.find(\n (entry) => normalizeHyperliquidMetaSymbol(entry?.name ?? \"\").toUpperCase() === normalized,\n );\n if (!match || typeof match.szDecimals !== \"number\") {\n throw new Error(`No size decimals found for ${symbol}.`);\n }\n return match.szDecimals;\n}\n\nexport function buildHyperliquidSpotUsdPriceMap(params: {\n meta: SpotMetaResponse;\n ctxs: SpotAssetContext[];\n mids?: Record<string, string | number> | null;\n}): Map<string, number> {\n const universe = params.meta.universe ?? [];\n const tokens = params.meta.tokens ?? [];\n\n const tokenMap = new Map<number, string>();\n for (const token of tokens) {\n const index = token?.index;\n if (typeof index !== \"number\") continue;\n tokenMap.set(index, normalizeSpotTokenName(token?.name).toUpperCase());\n }\n\n const prices = new Map<string, number>();\n prices.set(\"USDC\", 1);\n\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const base = tokenMap.get(baseIndex ?? -1);\n const quote = tokenMap.get(quoteIndex ?? -1);\n if (!base || !quote) continue;\n if (quote !== \"USDC\") continue;\n\n const contextIndex = typeof market?.index === \"number\" ? market.index : idx;\n const ctx =\n (contextIndex >= 0 && contextIndex < params.ctxs.length ? params.ctxs[contextIndex] : null) ??\n params.ctxs[idx] ??\n null;\n\n let price: number | null = null;\n if (params.mids) {\n for (const candidate of resolveSpotMidCandidates(base)) {\n const mid = readHyperliquidNumber(params.mids[candidate]);\n if (mid != null && mid > 0) {\n price = mid;\n break;\n }\n }\n }\n\n if (!price || price <= 0) {\n price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n }\n if (!price || price <= 0) continue;\n\n prices.set(base, price);\n }\n\n return prices;\n}\n\nexport async function fetchHyperliquidSpotUsdPriceMap(\n environment: HyperliquidEnvironment,\n): Promise<Map<string, number>> {\n const [spotMetaAndCtxs, mids] = await Promise.all([\n fetchHyperliquidSpotMetaAndAssetCtxs(environment),\n fetchHyperliquidAllMids(environment).catch(() => null),\n ]);\n\n const [metaRaw, ctxsRaw] = spotMetaAndCtxs as [SpotMetaResponse, SpotAssetContext[]];\n const meta = {\n universe: Array.isArray(metaRaw?.universe) ? metaRaw.universe : [],\n tokens: Array.isArray(metaRaw?.tokens) ? metaRaw.tokens : [],\n } satisfies SpotMetaResponse;\n\n const ctxs = Array.isArray(ctxsRaw) ? ctxsRaw : [];\n return buildHyperliquidSpotUsdPriceMap({ meta, ctxs, mids });\n}\n\nexport async function fetchHyperliquidSpotAccountValue(params: {\n environment: HyperliquidEnvironment;\n balances: unknown;\n}): Promise<number | null> {\n const pricesUsd = await fetchHyperliquidSpotUsdPriceMap(params.environment);\n return readHyperliquidSpotAccountValue({\n balances: params.balances,\n pricesUsd,\n });\n}\n\nexport const __hyperliquidMarketDataInternals = {\n maxDecimals,\n toScaledInt,\n formatScaledInt,\n};\n","import { encodeFunctionData, erc20Abi, parseUnits } from \"viem\";\n\nimport type { WalletFullContext } from \"../../wallet/types\";\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 normalizeCloid,\n resolveHyperliquidAssetIndex,\n signApproveBuilderFee,\n signL1Action,\n splitSignature,\n toApiDecimal,\n} from \"./base\";\nimport { supportsHyperliquidBuilderFee } from \"./symbols\";\nimport type {\n ExchangeOrderAction,\n ExchangeSignature,\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n NonceSource,\n} from \"./base\";\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 nonceSource?: NonceSource;\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 | \"waitingForFill\"\n | \"waitingForTrigger\";\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 nonceSource?: NonceSource;\n signatureChainId?: string;\n}\n\nexport interface HyperliquidApproveBuilderFeeResponse {\n status: string;\n response?: unknown;\n error?: string;\n}\n\nfunction resolveRequiredNonce(params: {\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n wallet?: Pick<WalletFullContext, \"nonceSource\"> | undefined;\n action: string;\n}): number {\n if (typeof params.nonce === \"number\") {\n return params.nonce;\n }\n\n const resolved = params.nonceSource?.() ?? params.wallet?.nonceSource?.();\n if (resolved === undefined) {\n throw new Error(`${params.action} requires an explicit nonce or wallet nonce source.`);\n }\n\n return resolved;\n}\n\ntype ExchangeRequestBody = {\n action: ExchangeOrderAction;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n};\n\nfunction assertPositiveDecimalInput(value: string | number | bigint, label: string): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`${label} must be a positive number.`);\n }\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\n const trimmed = value.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const numeric = Number(trimmed);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n}\n\nfunction normalizePositiveDecimalString(raw: string, label: string): string {\n const trimmed = raw.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty decimal string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const normalized = trimmed\n .replace(/^0+(?=\\d)/, \"\")\n .replace(/(\\.\\d*?)0+$/, \"$1\")\n .replace(/\\.$/, \"\");\n const numeric = Number(normalized);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n return normalized;\n}\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 if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Hyperliquid order signing requires a wallet with signing capabilities.\");\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 assertPositiveDecimalInput(intent.price, \"price\");\n assertPositiveDecimalInput(intent.size, \"size\");\n if (intent.trigger) {\n assertPositiveDecimalInput(intent.trigger.triggerPx, \"triggerPx\");\n }\n\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: resolvedBaseUrl,\n environment: inferredEnvironment,\n fetcher: (...args) => fetch(...args),\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: 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 ...(intent.clientId ? { c: normalizeCloid(intent.clientId) } : {}),\n };\n\n return order;\n }),\n );\n\n const action: ExchangeOrderAction = {\n type: \"order\",\n orders: preparedOrders,\n grouping,\n };\n\n if (orders.every((intent) => supportsHyperliquidBuilderFee(intent))) {\n action.builder = {\n b: normalizeAddress(BUILDER_CODE.address),\n f: BUILDER_CODE.fee,\n };\n }\n\n const effectiveNonce = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid order submission\",\n });\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 =\n 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\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((entry): entry is { error: string } =>\n Boolean(\n entry &&\n typeof entry === \"object\" &&\n \"error\" in entry &&\n typeof (entry as { error?: unknown }).error === \"string\",\n ),\n );\n if (errorStatuses.length) {\n const message = errorStatuses.map((entry) => entry.error).join(\", \");\n throw new HyperliquidApiError(message || \"Hyperliquid rejected the order.\", json);\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 || !wallet.publicClient) {\n throw new Error(\"Wallet client and public client are required for deposit.\");\n }\n\n const bridgeAddress = getBridgeAddress(environment);\n const usdcAddress = getUsdcAddress(environment);\n const amountUnits = parseUnits(amount, 6);\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [bridgeAddress, amountUnits],\n });\n\n const txHash = await wallet.walletClient.sendTransaction({\n account: wallet.account,\n to: usdcAddress,\n data,\n });\n\n await wallet.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 nonce?: number;\n nonceSource?: NonceSource;\n}): Promise<HyperliquidWithdrawResult> {\n const { environment, amount, destination, wallet } = options;\n\n const normalizedAmount = normalizePositiveDecimalString(amount, \"Withdraw amount\");\n const parsedAmount = Number.parseFloat(normalizedAmount);\n\n if (!wallet.account || !wallet.walletClient || !wallet.publicClient) {\n throw new Error(\"Wallet client and public client are required for withdraw.\");\n }\n\n const signatureChainId = getSignatureChainId(environment);\n const hyperliquidChain = HL_CHAIN_LABEL[environment];\n const nonce = resolveRequiredNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid withdraw\",\n });\n const time = BigInt(nonce);\n const normalizedDestination = normalizeAddress(destination);\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain: {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n },\n 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 },\n primaryType: \"HyperliquidTransaction:Withdraw\",\n message: {\n hyperliquidChain,\n destination: normalizedDestination,\n amount: normalizedAmount,\n time,\n },\n });\n\n const response = await fetch(`${HL_ENDPOINT[environment]}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n action: {\n type: \"withdraw3\",\n signatureChainId,\n hyperliquidChain,\n destination: normalizedDestination,\n amount: normalizedAmount,\n time: nonce,\n },\n nonce,\n signature: splitSignature(signatureHex),\n }),\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: ${json?.response ?? json?.error ?? response.statusText}`,\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 response = await fetch(`${HL_ENDPOINT[params.environment]}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"clearinghouseState\", user: params.walletAddress }),\n });\n\n const data = (await response.json().catch(() => null)) as Record<string, unknown> | null;\n return { ok: response.ok, data };\n}\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(\"Hyperliquid builder approval requires a wallet with signing capabilities.\");\n }\n\n const inferredEnvironment = environment ?? \"mainnet\";\n const maxFeeRate = `${BUILDER_CODE.fee / 1000}%`;\n const effectiveNonce = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid builder approval\",\n });\n\n const response = await fetch(`${API_BASES[inferredEnvironment]}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n action: {\n type: \"approveBuilderFee\",\n maxFeeRate,\n builder: normalizeAddress(BUILDER_CODE.address),\n hyperliquidChain: HL_CHAIN_LABEL[inferredEnvironment],\n signatureChainId: signatureChainId ?? getSignatureChainId(inferredEnvironment),\n nonce: effectiveNonce,\n },\n nonce: effectiveNonce,\n signature: await signApproveBuilderFee({\n wallet,\n maxFeeRate,\n nonce: BigInt(effectiveNonce),\n signatureChainId: signatureChainId ?? getSignatureChainId(inferredEnvironment),\n isTestnet: inferredEnvironment === \"testnet\",\n }),\n }),\n });\n\n const rawText = await response.text().catch(() => null);\n let parsed:\n | HyperliquidApproveBuilderFeeResponse\n | { error?: string; message?: string }\n | string\n | 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\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\nexport async function getHyperliquidMaxBuilderFee(params: {\n environment: HyperliquidEnvironment;\n user: `0x${string}`;\n}): Promise<unknown> {\n const response = await fetch(`${API_BASES[params.environment]}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n type: \"maxBuilderFee\",\n user: normalizeAddress(params.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\n return data;\n}\n\nexport function createHyperliquidActionHash(params: {\n action: Record<string, unknown> | ExchangeOrderAction;\n nonce: number;\n isTestnet: boolean;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n}) {\n return createL1ActionHash(params);\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport type {\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n HyperliquidTriggerType,\n NonceSource,\n} from \"./base\";\nimport { placeHyperliquidOrder, type HyperliquidOrderResponse } from \"./actions\";\nimport { fetchHyperliquidSizeDecimals, fetchHyperliquidTickSize } from \"./market-data\";\nimport {\n formatHyperliquidMarketablePrice,\n formatHyperliquidPrice,\n formatHyperliquidSize,\n} from \"./order-utils\";\nimport { isHyperliquidSpotSymbol } from \"./symbols\";\n\nexport const DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS = 1_000;\n\nexport type HyperliquidTpSlExecutionType = \"market\" | \"limit\";\n\nexport interface HyperliquidTpSlLegInput {\n triggerPx: string | number | bigint;\n execution?: HyperliquidTpSlExecutionType;\n price?: string | number | bigint;\n clientId?: `0x${string}`;\n}\n\nexport interface HyperliquidPlaceOrderWithTpSlOptions {\n wallet: WalletFullContext;\n parent: HyperliquidOrderIntent;\n referencePrice: string | number;\n takeProfit?: HyperliquidTpSlLegInput | null;\n stopLoss?: HyperliquidTpSlLegInput | null;\n environment?: HyperliquidEnvironment;\n grouping?: Extract<HyperliquidGrouping, \"normalTpsl\">;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonce?: number;\n nonceSource?: NonceSource;\n triggerMarketSlippageBps?: number;\n}\n\nexport interface HyperliquidPlacePositionTpSlOptions {\n wallet: WalletFullContext;\n symbol: string;\n positionSide: \"long\" | \"short\";\n size: string | number | bigint;\n referencePrice: string | number;\n takeProfit?: HyperliquidTpSlLegInput | null;\n stopLoss?: HyperliquidTpSlLegInput | null;\n environment?: HyperliquidEnvironment;\n grouping?: Extract<HyperliquidGrouping, \"positionTpsl\">;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonce?: number;\n nonceSource?: NonceSource;\n triggerMarketSlippageBps?: number;\n}\n\nfunction toDecimalInput(value: string | number | bigint, label: string): string | number {\n if (typeof value === \"bigint\") {\n if (value <= 0n) {\n throw new Error(`${label} must be positive.`);\n }\n return value.toString();\n }\n return value;\n}\n\nfunction toPositiveNumber(value: string | number | bigint, label: string): number {\n if (typeof value === \"bigint\") {\n if (value <= 0n) {\n throw new Error(`${label} must be positive.`);\n }\n return Number(value);\n }\n const numeric =\n typeof value === \"number\" ? value : Number.parseFloat(value.toString().trim());\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n return numeric;\n}\n\nfunction normalizeExecutionType(value?: HyperliquidTpSlExecutionType): HyperliquidTpSlExecutionType {\n return value ?? \"market\";\n}\n\nfunction resolveTriggerDirection(params: {\n leg: HyperliquidTriggerType;\n parentSide: HyperliquidOrderIntent[\"side\"];\n referencePrice: number;\n triggerPx: number;\n}) {\n const isLong = params.parentSide === \"buy\";\n if (params.leg === \"tp\") {\n if (isLong && params.triggerPx <= params.referencePrice) {\n throw new Error(\"Take profit trigger must be above the current price for long positions.\");\n }\n if (!isLong && params.triggerPx >= params.referencePrice) {\n throw new Error(\"Take profit trigger must be below the current price for short positions.\");\n }\n return;\n }\n\n if (isLong && params.triggerPx >= params.referencePrice) {\n throw new Error(\"Stop loss trigger must be below the current price for long positions.\");\n }\n if (!isLong && params.triggerPx <= params.referencePrice) {\n throw new Error(\"Stop loss trigger must be above the current price for short positions.\");\n }\n}\n\nasync function buildTpSlChildOrder(params: {\n symbol: string;\n parentSide: HyperliquidOrderIntent[\"side\"];\n size: string | number | bigint;\n referencePrice: number;\n legType: HyperliquidTriggerType;\n leg: HyperliquidTpSlLegInput;\n environment: HyperliquidEnvironment;\n triggerMarketSlippageBps: number;\n}): Promise<HyperliquidOrderIntent> {\n const marketType = isHyperliquidSpotSymbol(params.symbol) ? \"spot\" : \"perp\";\n const [szDecimals, tick] = await Promise.all([\n fetchHyperliquidSizeDecimals({\n environment: params.environment,\n symbol: params.symbol,\n }),\n fetchHyperliquidTickSize({\n environment: params.environment,\n symbol: params.symbol,\n }).catch(() => null),\n ]);\n\n const childSide: HyperliquidOrderIntent[\"side\"] = params.parentSide === \"buy\" ? \"sell\" : \"buy\";\n const triggerPxNumeric = toPositiveNumber(params.leg.triggerPx, `${params.legType} triggerPx`);\n resolveTriggerDirection({\n leg: params.legType,\n parentSide: params.parentSide,\n referencePrice: params.referencePrice,\n triggerPx: triggerPxNumeric,\n });\n\n const execution = normalizeExecutionType(params.leg.execution);\n const size = formatHyperliquidSize(toDecimalInput(params.size, \"size\"), szDecimals);\n const triggerPx = formatHyperliquidPrice(triggerPxNumeric, szDecimals, marketType);\n const explicitLimitPrice =\n params.leg.price != null ? toDecimalInput(params.leg.price, `${params.legType} price`) : null;\n const explicitLimitPriceNumeric =\n explicitLimitPrice != null\n ? toPositiveNumber(explicitLimitPrice, `${params.legType} price`)\n : null;\n if (execution === \"limit\" && explicitLimitPriceNumeric == null) {\n throw new Error(`${params.legType} limit price is required for limit execution.`);\n }\n if (execution === \"limit\" && explicitLimitPriceNumeric != null) {\n if (childSide === \"sell\" && explicitLimitPriceNumeric > triggerPxNumeric) {\n throw new Error(`${params.legType} sell limit price must be at or below the trigger price.`);\n }\n if (childSide === \"buy\" && explicitLimitPriceNumeric < triggerPxNumeric) {\n throw new Error(`${params.legType} buy limit price must be at or above the trigger price.`);\n }\n }\n const price =\n execution === \"limit\"\n ? formatHyperliquidPrice(\n explicitLimitPrice!,\n szDecimals,\n marketType,\n )\n : formatHyperliquidMarketablePrice({\n mid: triggerPxNumeric,\n side: childSide,\n slippageBps: params.triggerMarketSlippageBps,\n tick,\n });\n\n return {\n symbol: params.symbol,\n side: childSide,\n price,\n size,\n reduceOnly: true,\n trigger: {\n triggerPx,\n isMarket: execution === \"market\",\n tpsl: params.legType,\n },\n ...(params.leg.clientId ? { clientId: params.leg.clientId } : {}),\n };\n}\n\nasync function buildAttachedTpSlOrders(params: {\n symbol: string;\n parentSide: HyperliquidOrderIntent[\"side\"];\n size: string | number | bigint;\n referencePrice: string | number;\n takeProfit: HyperliquidTpSlLegInput | null;\n stopLoss: HyperliquidTpSlLegInput | null;\n environment: HyperliquidEnvironment;\n triggerMarketSlippageBps: number;\n}): Promise<HyperliquidOrderIntent[]> {\n const referencePrice = toPositiveNumber(params.referencePrice, \"referencePrice\");\n const legs = await Promise.all(\n [\n params.takeProfit\n ? buildTpSlChildOrder({\n symbol: params.symbol,\n parentSide: params.parentSide,\n size: params.size,\n referencePrice,\n legType: \"tp\",\n leg: params.takeProfit,\n environment: params.environment,\n triggerMarketSlippageBps: params.triggerMarketSlippageBps,\n })\n : null,\n params.stopLoss\n ? buildTpSlChildOrder({\n symbol: params.symbol,\n parentSide: params.parentSide,\n size: params.size,\n referencePrice,\n legType: \"sl\",\n leg: params.stopLoss,\n environment: params.environment,\n triggerMarketSlippageBps: params.triggerMarketSlippageBps,\n })\n : null,\n ],\n );\n\n return legs.filter((entry): entry is HyperliquidOrderIntent => Boolean(entry));\n}\n\nexport async function placeHyperliquidOrderWithTpSl(\n options: HyperliquidPlaceOrderWithTpSlOptions,\n): Promise<HyperliquidOrderResponse> {\n const env = options.environment ?? \"mainnet\";\n const childOrders = await buildAttachedTpSlOrders({\n symbol: options.parent.symbol,\n parentSide: options.parent.side,\n size: options.parent.size,\n referencePrice: options.referencePrice,\n takeProfit: options.takeProfit ?? null,\n stopLoss: options.stopLoss ?? null,\n environment: env,\n triggerMarketSlippageBps:\n options.triggerMarketSlippageBps ?? DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS,\n });\n\n return placeHyperliquidOrder({\n wallet: options.wallet,\n orders: [options.parent, ...childOrders],\n grouping: options.grouping ?? \"normalTpsl\",\n environment: env,\n ...(options.vaultAddress ? { vaultAddress: options.vaultAddress } : {}),\n ...(typeof options.expiresAfter === \"number\" ? { expiresAfter: options.expiresAfter } : {}),\n ...(typeof options.nonce === \"number\" ? { nonce: options.nonce } : {}),\n ...(options.nonceSource ? { nonceSource: options.nonceSource } : {}),\n });\n}\n\nexport async function placeHyperliquidPositionTpSl(\n options: HyperliquidPlacePositionTpSlOptions,\n): Promise<HyperliquidOrderResponse> {\n const env = options.environment ?? \"mainnet\";\n const parentSide: HyperliquidOrderIntent[\"side\"] =\n options.positionSide === \"long\" ? \"buy\" : \"sell\";\n const childOrders = await buildAttachedTpSlOrders({\n symbol: options.symbol,\n parentSide,\n size: options.size,\n referencePrice: options.referencePrice,\n takeProfit: options.takeProfit ?? null,\n stopLoss: options.stopLoss ?? null,\n environment: env,\n triggerMarketSlippageBps:\n options.triggerMarketSlippageBps ?? DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS,\n });\n\n if (childOrders.length === 0) {\n throw new Error(\"At least one TP or SL order is required.\");\n }\n\n return placeHyperliquidOrder({\n wallet: options.wallet,\n orders: childOrders,\n grouping: options.grouping ?? \"positionTpsl\",\n environment: env,\n ...(options.vaultAddress ? { vaultAddress: options.vaultAddress } : {}),\n ...(typeof options.expiresAfter === \"number\" ? { expiresAfter: options.expiresAfter } : {}),\n ...(typeof options.nonce === \"number\" ? { nonce: options.nonce } : {}),\n ...(options.nonceSource ? { nonceSource: options.nonceSource } : {}),\n });\n}\n","export type HyperliquidApproximateLiquidationParams = {\n entryPrice: number;\n side: \"buy\" | \"sell\";\n notionalUsd: number;\n leverage: number;\n maxLeverage: number;\n marginMode: \"cross\" | \"isolated\";\n availableCollateralUsd?: number | null;\n};\n\nfunction toFinitePositive(value: number): number | null {\n return Number.isFinite(value) && value > 0 ? value : null;\n}\n\nfunction estimateMaintenanceLeverage(maxLeverage: number): number | null {\n const normalized = toFinitePositive(maxLeverage);\n if (!normalized) return null;\n return normalized * 2;\n}\n\nexport function estimateHyperliquidLiquidationPrice(\n params: HyperliquidApproximateLiquidationParams,\n): number | null {\n const entryPrice = toFinitePositive(params.entryPrice);\n const notionalUsd = toFinitePositive(params.notionalUsd);\n const leverage = toFinitePositive(params.leverage);\n const maintenanceLeverage = estimateMaintenanceLeverage(params.maxLeverage);\n\n if (!entryPrice || !notionalUsd || !leverage || !maintenanceLeverage) {\n return null;\n }\n\n const size = notionalUsd / entryPrice;\n if (!Number.isFinite(size) || size <= 0) {\n return null;\n }\n\n const isolatedMargin = notionalUsd / leverage;\n const marginAvailable =\n params.marginMode === \"cross\"\n ? Math.max(\n toFinitePositive(params.availableCollateralUsd ?? 0) ?? isolatedMargin,\n isolatedMargin,\n )\n : isolatedMargin;\n\n const sideSign = params.side === \"buy\" ? 1 : -1;\n const maintenanceFactor = 1 / maintenanceLeverage;\n const denominator = 1 - maintenanceFactor * sideSign;\n if (!Number.isFinite(denominator) || denominator <= 0) {\n return null;\n }\n\n const liquidationPrice =\n entryPrice - (sideSign * (marginAvailable / size)) / denominator;\n\n if (!Number.isFinite(liquidationPrice) || liquidationPrice <= 0) {\n return null;\n }\n\n return liquidationPrice;\n}\n","export type HyperliquidScheduleUnit = \"minutes\" | \"hours\";\n\nexport type HyperliquidCadence =\n | \"daily\"\n | \"hourly\"\n | \"weekly\"\n | \"twice-weekly\"\n | \"monthly\";\n\nexport type HyperliquidResolution = \"1\" | \"5\" | \"15\" | \"30\" | \"60\" | \"240\" | \"1D\" | \"1W\";\n\nexport const DEFAULT_HYPERLIQUID_CADENCE_CRON: Record<HyperliquidCadence, string> = {\n daily: \"0 8 * * *\",\n hourly: \"0 * * * *\",\n weekly: \"0 8 * * 1\",\n \"twice-weekly\": \"0 8 * * 1,4\",\n monthly: \"0 8 1 * *\",\n};\n\nexport function parseHyperliquidJson(raw: string | null): unknown | null {\n if (!raw) return null;\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return null;\n }\n}\n\nexport function clampHyperliquidInt(\n value: unknown,\n min: number,\n max: number,\n fallback: number,\n): number {\n if (value == null) return fallback;\n if (typeof value === \"string\" && value.trim().length === 0) return fallback;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return fallback;\n const numeric = Math.trunc(parsed);\n if (!Number.isFinite(numeric)) return fallback;\n return Math.min(max, Math.max(min, numeric));\n}\n\nexport function clampHyperliquidFloat(\n value: unknown,\n min: number,\n max: number,\n fallback: number,\n): number {\n if (value == null) return fallback;\n if (typeof value === \"string\" && value.trim().length === 0) return fallback;\n const numeric = Number(value);\n if (!Number.isFinite(numeric)) return fallback;\n return Math.min(max, Math.max(min, numeric));\n}\n\nexport function resolveHyperliquidScheduleEvery(\n input: unknown,\n options?: { min?: number; max?: number; fallback?: number },\n): number {\n const min = options?.min ?? 1;\n const max = options?.max ?? 59;\n const fallback = options?.fallback ?? 1;\n return clampHyperliquidInt(input, min, max, fallback);\n}\n\nexport function resolveHyperliquidScheduleUnit(\n input: unknown,\n fallback: HyperliquidScheduleUnit = \"hours\",\n): HyperliquidScheduleUnit {\n if (input === \"minutes\") return \"minutes\";\n if (input === \"hours\") return \"hours\";\n return fallback;\n}\n\nexport function resolveHyperliquidIntervalCron(\n every: number,\n unit: HyperliquidScheduleUnit,\n): string {\n if (unit === \"minutes\") {\n return every === 1 ? \"* * * * *\" : `*/${every} * * * *`;\n }\n return every === 1 ? \"0 * * * *\" : `0 */${every} * * *`;\n}\n\nexport function resolveHyperliquidHourlyInterval(\n input: unknown,\n fallback = 1,\n): number {\n return clampHyperliquidInt(input, 1, 24, fallback);\n}\n\nexport function resolveHyperliquidCadenceCron(\n cadence: HyperliquidCadence,\n hourlyInterval: unknown,\n cadenceToCron: Record<HyperliquidCadence, string> = DEFAULT_HYPERLIQUID_CADENCE_CRON,\n): string {\n if (cadence !== \"hourly\") {\n return cadenceToCron[cadence];\n }\n const interval = resolveHyperliquidHourlyInterval(hourlyInterval, 1);\n return interval === 1 ? cadenceToCron.hourly : `0 */${interval} * * *`;\n}\n\nexport function resolveHyperliquidCadenceFromResolution(\n resolution: HyperliquidResolution,\n): { cadence: HyperliquidCadence; hourlyInterval?: number } {\n if (resolution === \"60\") {\n return { cadence: \"hourly\", hourlyInterval: 1 };\n }\n if (resolution === \"240\") {\n return { cadence: \"hourly\", hourlyInterval: 4 };\n }\n if (resolution === \"1W\") {\n return { cadence: \"weekly\" };\n }\n return { cadence: \"daily\" };\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 normalizeCloid,\n getUsdcAddress,\n normalizeAddress,\n resolveHyperliquidAssetIndex,\n signApproveBuilderFee,\n signL1Action,\n splitSignature,\n toApiDecimal,\n} from \"./base\";\nimport { supportsHyperliquidBuilderFee } from \"./symbols\";\nimport type {\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n NonceSource,\n ExchangeOrderAction,\n ExchangeSignature,\n} from \"./base\";\nexport type {\n HyperliquidEnvironment,\n HyperliquidTimeInForce,\n HyperliquidGrouping,\n HyperliquidTriggerType,\n HyperliquidTriggerOptions,\n HyperliquidOrderIntent,\n HyperliquidAbstraction,\n HyperliquidAccountMode,\n HyperliquidBuilderFee,\n MarketIdentity,\n HyperliquidMarketIdentityInput,\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 buildHyperliquidMarketIdentity,\n} from \"./base\";\nexport {\n fetchHyperliquidMeta,\n fetchHyperliquidMetaAndAssetCtxs,\n fetchHyperliquidSpotMeta,\n fetchHyperliquidSpotMetaAndAssetCtxs,\n fetchHyperliquidAssetCtxs,\n fetchHyperliquidSpotAssetCtxs,\n fetchHyperliquidActiveAsset,\n fetchHyperliquidOpenOrders,\n fetchHyperliquidOpenOrdersAcrossDexes,\n fetchHyperliquidFrontendOpenOrders,\n fetchHyperliquidFrontendOpenOrdersAcrossDexes,\n fetchHyperliquidOrderStatus,\n fetchHyperliquidHistoricalOrders,\n fetchHyperliquidUserFills,\n fetchHyperliquidUserFillsByTime,\n fetchHyperliquidUserRateLimit,\n fetchHyperliquidPreTransferCheck,\n fetchHyperliquidSpotClearinghouseState,\n getKnownHyperliquidDexes,\n HYPERLIQUID_HIP3_DEXES,\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 nonceSource?: NonceSource;\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 | \"waitingForFill\"\n | \"waitingForTrigger\";\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 nonceSource?: NonceSource;\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\nfunction resolveRequiredNonce(params: {\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n wallet?: Pick<WalletFullContext, \"nonceSource\"> | undefined;\n action: string;\n}): number {\n if (typeof params.nonce === \"number\") {\n return params.nonce;\n }\n\n const resolved = params.nonceSource?.() ?? params.wallet?.nonceSource?.();\n if (resolved === undefined) {\n throw new Error(`${params.action} requires an explicit nonce or wallet nonce source.`);\n }\n\n return resolved;\n}\n\ntype ExchangeRequestBody = {\n action: ExchangeOrderAction;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n};\n\nfunction assertPositiveDecimalInput(value: string | number | bigint, label: string): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`${label} must be a positive number.`);\n }\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\n const trimmed = value.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const numeric = Number(trimmed);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n}\n\nfunction normalizePositiveDecimalString(raw: string, label: string): string {\n const trimmed = raw.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty decimal string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const normalized = trimmed\n .replace(/^0+(?=\\d)/, \"\")\n .replace(/(\\.\\d*?)0+$/, \"$1\")\n .replace(/\\.$/, \"\");\n const numeric = Number(normalized);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n return normalized;\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 if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Hyperliquid order signing requires a wallet with signing capabilities.\");\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 assertPositiveDecimalInput(intent.price, \"price\");\n assertPositiveDecimalInput(intent.size, \"size\");\n if (intent.trigger) {\n assertPositiveDecimalInput(intent.trigger.triggerPx, \"triggerPx\");\n }\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: resolvedBaseUrl,\n environment: inferredEnvironment,\n fetcher: (...args) => fetch(...args),\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: normalizeCloid(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 (orders.every((intent) => supportsHyperliquidBuilderFee(intent))) {\n action.builder = {\n b: normalizeAddress(BUILDER_CODE.address),\n f: BUILDER_CODE.fee,\n };\n }\n\n const effectiveNonce = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid order submission\",\n });\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 =\n 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((entry): entry is { error: string } =>\n Boolean(\n entry &&\n typeof entry === \"object\" &&\n \"error\" in entry &&\n typeof (entry as { error?: unknown }).error === \"string\",\n ),\n );\n if (errorStatuses.length) {\n const message = errorStatuses.map((entry) => entry.error).join(\", \");\n throw new HyperliquidApiError(message || \"Hyperliquid rejected the order.\", json);\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(\"Wallet client and public client are required for deposit.\");\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 nonce?: number;\n nonceSource?: NonceSource;\n}): Promise<HyperliquidWithdrawResult> {\n const { environment, amount, destination, wallet } = options;\n\n const normalizedAmount = normalizePositiveDecimalString(amount, \"Withdraw amount\");\n const parsedAmount = Number.parseFloat(normalizedAmount);\n\n if (!wallet.account || !wallet.walletClient || !wallet.publicClient) {\n throw new Error(\"Wallet client and public client are required for withdraw.\");\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 nonce = resolveRequiredNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid withdraw\",\n });\n const time = BigInt(nonce);\n const normalizedDestination = normalizeAddress(destination);\n\n const message = {\n hyperliquidChain,\n destination: normalizedDestination,\n amount: normalizedAmount,\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: normalizedAmount,\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: ${json?.response ?? json?.error ?? response.statusText}`,\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<string, unknown> | 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(\"Hyperliquid builder approval requires a wallet with signing capabilities.\");\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 = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid builder approval\",\n });\n const signatureNonce = BigInt(effectiveNonce);\n const signatureChainHex = 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:\n | HyperliquidApproveBuilderFeeResponse\n | { error?: string; message?: string }\n | string\n | 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(input: HyperliquidTermsRecordInput) {\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\";\nexport * from \"./env\";\nexport * from \"./symbols\";\nexport * from \"./strategy\";\nexport * from \"./order-utils\";\nexport * from \"./state-readers\";\nexport * from \"./market-data\";\nexport * from \"./tpsl\";\nexport * from \"./risk-utils\";\nexport * from \"./utils\";\n\nexport const __hyperliquidInternals = {\n toApiDecimal,\n createL1ActionHash,\n splitSignature,\n};\n","import { createHmac, randomBytes } from \"node:crypto\";\nimport { parseUnits } from \"viem\";\nimport type { WalletFullContext } from \"../../wallet/types\";\n\nexport type PolymarketEnvironment = \"mainnet\" | \"testnet\";\n\nexport type PolymarketSide = \"BUY\" | \"SELL\";\nexport type PolymarketOrderType = \"GTC\" | \"FOK\" | \"FAK\" | \"GTD\";\nexport type PolymarketSignatureType = 0 | 1 | 2;\n\nexport interface PolymarketApiCredentials {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketMarket {\n id: string;\n slug?: string | null;\n question?: string | null;\n description?: string | null;\n eventId?: string | null;\n eventSlug?: string | null;\n conditionId?: string | null;\n marketMakerAddress?: string | null;\n category?: string | null;\n tags?: string[];\n active?: boolean;\n closed?: boolean;\n resolved?: boolean;\n startDate?: string | null;\n endDate?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n closedTime?: string | null;\n volume?: string | null;\n liquidity?: string | null;\n openInterest?: string | null;\n outcomes?: string[];\n outcomePrices?: number[];\n clobTokenIds?: string[];\n icon?: string | null;\n image?: string | null;\n}\n\nexport interface PolymarketOrderbookLevel {\n price: number;\n size: number;\n}\n\nexport interface PolymarketOrderbook {\n market: string;\n bids: PolymarketOrderbookLevel[];\n asks: PolymarketOrderbookLevel[];\n timestamp?: string | null;\n}\n\nexport interface PolymarketPriceHistoryPoint {\n t: number;\n p: number;\n}\n\nexport interface PolymarketSignedOrderPayload {\n salt: string;\n maker: `0x${string}`;\n signer: `0x${string}`;\n taker: `0x${string}`;\n tokenId: string;\n makerAmount: string;\n takerAmount: string;\n expiration: string;\n nonce: string;\n feeRateBps: string;\n side: 0 | 1;\n signatureType: PolymarketSignatureType;\n signature: `0x${string}`;\n}\n\nexport class PolymarketApiError extends Error {\n constructor(\n message: string,\n public readonly response: unknown,\n ) {\n super(message);\n this.name = \"PolymarketApiError\";\n }\n}\n\nexport class PolymarketAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PolymarketAuthError\";\n }\n}\n\nexport const POLYMARKET_ENDPOINTS = {\n gamma: {\n mainnet: \"https://gamma-api.polymarket.com\",\n testnet: \"https://gamma-api.polymarket.com\",\n },\n clob: {\n mainnet: \"https://clob.polymarket.com\",\n testnet: \"https://clob.polymarket.com\",\n },\n data: {\n mainnet: \"https://data-api.polymarket.com\",\n testnet: \"https://data-api.polymarket.com\",\n },\n} as const satisfies Record<\"gamma\" | \"clob\" | \"data\", Record<PolymarketEnvironment, string>>;\n\nexport const POLYMARKET_CHAIN_ID: Record<PolymarketEnvironment, number> = {\n mainnet: 137,\n testnet: 80002,\n};\n\nexport const POLYMARKET_EXCHANGE_ADDRESSES: Record<\n PolymarketEnvironment,\n { ctf: `0x${string}`; negRisk: `0x${string}` }\n> = {\n mainnet: {\n ctf: \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n negRisk: \"0xc5d563a36ae78145c45a50134d48a1215220f80a\",\n },\n testnet: {\n ctf: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n negRisk: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n },\n};\n\nexport const POLYMARKET_CLOB_DOMAIN = {\n name: \"Polymarket CTF Exchange\",\n version: \"1\",\n};\n\nexport const POLYMARKET_CLOB_AUTH_DOMAIN = {\n name: \"ClobAuthDomain\",\n version: \"1\",\n};\n\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as const;\n\nexport function resolvePolymarketBaseUrl(\n service: keyof typeof POLYMARKET_ENDPOINTS,\n environment: PolymarketEnvironment,\n): string {\n return POLYMARKET_ENDPOINTS[service][environment];\n}\n\nexport function assertWalletSigner(wallet: WalletFullContext | undefined) {\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Polymarket requires a wallet with signing capabilities.\");\n }\n}\n\nexport function toDecimalString(value: string | number | bigint): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (!Number.isFinite(value)) {\n throw new Error(\"Numeric values must be finite.\");\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 integerPart + fractionalPart.padEnd(exponent + fractionalPart.length, \"0\");\n }\n const zeros = \"0\".repeat(Math.abs(exponent) - 1);\n return `0.${zeros}${integerPart}${fractionalPart}`.replace(/\\.0+$/, \"\");\n }\n return asString;\n}\n\nfunction normalizeArrayish(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return [];\n if (trimmed.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(trimmed);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return [trimmed];\n }\n return [];\n}\n\nexport function normalizeStringArrayish(value: unknown): string[] {\n return normalizeArrayish(value)\n .map((entry) => (entry == null ? \"\" : String(entry).trim()))\n .filter((entry) => entry.length > 0);\n}\n\nexport function normalizeNumberArrayish(value: unknown): number[] {\n return normalizeArrayish(value)\n .map((entry) => (typeof entry === \"number\" ? entry : Number.parseFloat(String(entry))))\n .filter((entry) => Number.isFinite(entry));\n}\n\nexport function normalizeTags(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n const tags = value\n .map((entry) => {\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const label = record.label ?? record.id ?? record.tag;\n return label ? String(label).trim() : \"\";\n }\n return String(entry ?? \"\").trim();\n })\n .filter((entry) => entry.length > 0);\n return Array.from(new Set(tags));\n}\n\nexport function parseOptionalDate(value: unknown): string | null {\n if (!value) return null;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n const ts = value > 1_000_000_000_000 ? value : value * 1000;\n const date = new Date(ts);\n return Number.isNaN(date.getTime()) ? null : date.toISOString();\n }\n return null;\n}\n\nexport function buildHmacSignature(args: {\n secret: string;\n timestamp: number | string;\n method: string;\n path: string;\n body?: string | Record<string, unknown> | null;\n}): string {\n const timestamp = args.timestamp.toString();\n const method = args.method.toUpperCase();\n const path = args.path;\n const body =\n args.body == null ? \"\" : typeof args.body === \"string\" ? args.body : JSON.stringify(args.body);\n const payload = `${timestamp}${method}${path}${body}`;\n const key = Buffer.from(args.secret, \"base64\");\n return createHmac(\"sha256\", key).update(payload).digest(\"hex\");\n}\n\nexport function buildL2Headers(args: {\n credentials: PolymarketApiCredentials;\n address: `0x${string}`;\n timestamp?: number;\n method: string;\n path: string;\n body?: Record<string, unknown> | string | null;\n}): Record<string, string> {\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const signature = buildHmacSignature({\n secret: args.credentials.secret,\n timestamp,\n method: args.method,\n path: args.path,\n body: args.body ?? null,\n });\n return {\n POLY_ADDRESS: args.address,\n POLY_API_KEY: args.credentials.apiKey,\n POLY_PASSPHRASE: args.credentials.passphrase,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport async function buildL1Headers(args: {\n wallet: WalletFullContext;\n timestamp?: number;\n nonce?: number;\n environment?: PolymarketEnvironment;\n message?: string;\n}): Promise<Record<string, string>> {\n assertWalletSigner(args.wallet);\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const nonce = args.nonce ?? Date.now();\n const chainId = POLYMARKET_CHAIN_ID[args.environment ?? \"mainnet\"];\n const address = args.wallet.address as `0x${string}`;\n const message =\n args.message ?? \"This message attests that I control the given wallet\";\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_AUTH_DOMAIN,\n chainId,\n },\n types: {\n ClobAuth: [\n { name: \"address\", type: \"address\" },\n { name: \"timestamp\", type: \"string\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"message\", type: \"string\" },\n ],\n },\n primaryType: \"ClobAuth\",\n message: {\n address,\n timestamp: timestamp.toString(),\n nonce: BigInt(nonce),\n message,\n },\n });\n\n return {\n POLY_ADDRESS: address,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_NONCE: nonce.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport function resolveExchangeAddress(args: {\n environment: PolymarketEnvironment;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): `0x${string}` {\n if (args.exchangeAddress) return args.exchangeAddress;\n const env = args.environment;\n return args.negRisk\n ? POLYMARKET_EXCHANGE_ADDRESSES[env].negRisk\n : POLYMARKET_EXCHANGE_ADDRESSES[env].ctf;\n}\n\nfunction parseUintString(value: string, name: string): bigint {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`${name} must be a base-10 integer string.`);\n }\n return BigInt(trimmed);\n}\n\nexport function buildPolymarketOrderAmounts(args: {\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n tickSize?: string | number | bigint;\n}): { makerAmount: bigint; takerAmount: bigint } {\n const priceStr = toDecimalString(args.price);\n const sizeStr = toDecimalString(args.size);\n if (!priceStr || !sizeStr) {\n throw new Error(\"Order price and size are required.\");\n }\n const priceFloat = Number(priceStr);\n if (!Number.isFinite(priceFloat) || priceFloat <= 0 || priceFloat >= 1) {\n throw new Error(\"Order price must be between 0 and 1 (exclusive).\");\n }\n const sizeFloat = Number(sizeStr);\n if (!Number.isFinite(sizeFloat) || sizeFloat <= 0) {\n throw new Error(\"Order size must be positive.\");\n }\n\n let priceUnits = parseUnits(priceStr, 6);\n if (args.tickSize !== undefined) {\n const tickUnits = parseUnits(toDecimalString(args.tickSize), 6);\n if (tickUnits <= 0n) {\n throw new Error(\"tickSize must be positive.\");\n }\n priceUnits = (priceUnits / tickUnits) * tickUnits;\n }\n\n const sizeUnits = parseUnits(sizeStr, 6);\n const quoteUnits = (priceUnits * sizeUnits) / 1_000_000n;\n\n if (args.side === \"BUY\") {\n return { makerAmount: quoteUnits, takerAmount: sizeUnits };\n }\n return { makerAmount: sizeUnits, takerAmount: quoteUnits };\n}\n\nexport async function buildSignedOrderPayload(args: {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): Promise<PolymarketSignedOrderPayload> {\n assertWalletSigner(args.wallet);\n const environment = args.environment ?? \"mainnet\";\n const chainId = POLYMARKET_CHAIN_ID[environment];\n const exchangeAddress = resolveExchangeAddress({\n environment,\n ...(args.negRisk !== undefined ? { negRisk: args.negRisk } : {}),\n ...(args.exchangeAddress ? { exchangeAddress: args.exchangeAddress } : {}),\n });\n\n const maker = args.maker ?? (args.wallet.address as `0x${string}`);\n const signer = args.signer ?? (args.wallet.address as `0x${string}`);\n const taker = args.taker ?? ZERO_ADDRESS;\n const sideValue: 0 | 1 = args.side === \"BUY\" ? 0 : 1;\n const signatureType: PolymarketSignatureType = args.signatureType ?? 0;\n\n const tokenIdValue = args.tokenId.startsWith(\"0x\")\n ? BigInt(args.tokenId)\n : parseUintString(args.tokenId, \"tokenId\");\n\n const { makerAmount, takerAmount } = buildPolymarketOrderAmounts({\n side: args.side,\n price: args.price,\n size: args.size,\n ...(args.tickSize !== undefined ? { tickSize: args.tickSize } : {}),\n });\n\n const salt = BigInt(`0x${randomBytes(16).toString(\"hex\")}`);\n const expiration = BigInt(args.expiration ?? 0);\n const nonce = BigInt(args.nonce ?? 0);\n const feeRateBps = BigInt(args.feeRateBps ?? 0);\n\n const message = {\n salt,\n maker,\n signer,\n taker,\n tokenId: tokenIdValue,\n makerAmount,\n takerAmount,\n expiration,\n nonce,\n feeRateBps,\n side: sideValue,\n signatureType,\n };\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_DOMAIN,\n chainId,\n verifyingContract: exchangeAddress,\n },\n types: {\n Order: [\n { name: \"salt\", type: \"uint256\" },\n { name: \"maker\", type: \"address\" },\n { name: \"signer\", type: \"address\" },\n { name: \"taker\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"makerAmount\", type: \"uint256\" },\n { name: \"takerAmount\", type: \"uint256\" },\n { name: \"expiration\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"feeRateBps\", type: \"uint256\" },\n { name: \"side\", type: \"uint8\" },\n { name: \"signatureType\", type: \"uint8\" },\n ],\n },\n primaryType: \"Order\",\n message,\n });\n\n return {\n salt: message.salt.toString(),\n maker,\n signer,\n taker,\n tokenId: tokenIdValue.toString(),\n makerAmount: message.makerAmount.toString(),\n takerAmount: message.takerAmount.toString(),\n expiration: message.expiration.toString(),\n nonce: message.nonce.toString(),\n feeRateBps: message.feeRateBps.toString(),\n side: sideValue,\n signatureType,\n signature: signature as `0x${string}`,\n };\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport {\n PolymarketApiCredentials,\n PolymarketApiError,\n PolymarketAuthError,\n PolymarketEnvironment,\n PolymarketOrderType,\n PolymarketSide,\n PolymarketSignatureType,\n buildL1Headers,\n buildL2Headers,\n buildSignedOrderPayload,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\nexport interface PolymarketApiKeyResponse {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketOrderIntent {\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}\n\nexport interface PolymarketPlaceOrderResponse {\n orderId?: string;\n status?: string;\n message?: string;\n [key: string]: unknown;\n}\n\ninterface PolymarketApiKeyRequestArgs {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n timestamp?: number;\n nonce?: number;\n message?: string;\n}\n\nfunction requireApiKeyNonce(\n nonce: number | undefined,\n message = \"Polymarket API key operations require an explicit nonce.\",\n): number {\n if (!Number.isSafeInteger(nonce) || nonce == null || nonce < 0) {\n throw new PolymarketAuthError(message);\n }\n return nonce;\n}\n\nasync function resolveAuthContext(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n apiKeyNonce?: number;\n}): Promise<{ credentials: PolymarketApiCredentials; address: `0x${string}` }> {\n if (args.wallet) {\n const credentials = args.credentials;\n if (credentials) {\n return {\n credentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n const apiKeyNonce = requireApiKeyNonce(\n args.apiKeyNonce,\n \"Polymarket auto-auth requires apiKeyNonce when credentials are not provided.\",\n );\n\n const derivedCredentials = await derivePolymarketApiKey({\n wallet: args.wallet,\n ...(args.environment ? { environment: args.environment } : {}),\n nonce: apiKeyNonce,\n });\n\n return {\n credentials: derivedCredentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n if (args.walletAddress && args.credentials) {\n return { credentials: args.credentials, address: args.walletAddress };\n }\n\n throw new PolymarketAuthError(\n \"Polymarket auth requires a wallet (preferred) or credentials + walletAddress.\",\n );\n}\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction resolvePath(url: string): string {\n const parsed = new URL(url);\n return `${parsed.pathname}${parsed.search}`;\n}\n\nfunction normalizeApiKeyResponse(\n data: Partial<PolymarketApiKeyResponse> | null | undefined,\n): PolymarketApiKeyResponse | null {\n if (!data?.apiKey || !data?.secret || !data?.passphrase) {\n return null;\n }\n return {\n apiKey: data.apiKey,\n secret: data.secret,\n passphrase: data.passphrase,\n };\n}\n\nasync function requestPolymarketApiKey(\n args: PolymarketApiKeyRequestArgs & { mode: \"create\" | \"derive\" },\n): Promise<Partial<PolymarketApiKeyResponse> | null> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url =\n args.mode === \"create\"\n ? `${baseUrl}/auth/api-key`\n : `${baseUrl}/auth/derive-api-key`;\n const nonce = requireApiKeyNonce(args.nonce);\n const headers = await buildL1Headers({\n wallet: args.wallet,\n environment,\n ...(args.timestamp !== undefined ? { timestamp: args.timestamp } : {}),\n nonce,\n ...(args.message !== undefined ? { message: args.message } : {}),\n });\n\n return (await requestJson(url, {\n method: args.mode === \"create\" ? \"POST\" : \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n ...(args.mode === \"create\" ? { body: JSON.stringify({}) } : {}),\n })) as Partial<PolymarketApiKeyResponse> | null;\n}\n\nexport async function createPolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n const normalized = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"create\" }),\n );\n if (!normalized) {\n throw new PolymarketAuthError(\"Failed to create Polymarket API key.\");\n }\n return normalized;\n}\n\nexport async function derivePolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n const normalized = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"derive\" }),\n );\n if (!normalized) {\n throw new PolymarketAuthError(\"Failed to derive Polymarket API key.\");\n }\n return normalized;\n}\n\nexport async function createOrDerivePolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n let deriveError: unknown;\n\n try {\n const derived = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"derive\" }),\n );\n if (derived) {\n return derived;\n }\n } catch (error) {\n deriveError = error;\n }\n\n const created = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"create\" }),\n );\n if (created) {\n return created;\n }\n\n if (deriveError) {\n throw deriveError;\n }\n\n throw new PolymarketAuthError(\n \"Failed to derive or create Polymarket API key.\",\n );\n}\n\nexport async function placePolymarketOrder(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n order: PolymarketOrderIntent;\n orderType?: PolymarketOrderType;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPlaceOrderResponse> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n\n const signedOrder = await buildSignedOrderPayload({\n wallet: args.wallet,\n environment,\n ...args.order,\n });\n\n const auth = await resolveAuthContext({\n wallet: args.wallet,\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const body = {\n order: signedOrder,\n owner: auth.credentials.apiKey,\n orderType: args.orderType ?? \"GTC\",\n };\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"POST\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as PolymarketPlaceOrderResponse;\n}\n\nexport async function cancelPolymarketOrder(args: {\n orderId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n const body = { orderID: args.orderId };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelPolymarketOrders(args: {\n orderIds: string[];\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/orders`;\n const body = { orderIDs: args.orderIds };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelAllPolymarketOrders(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-all`;\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n })) as Record<string, unknown>;\n}\n\nexport async function cancelMarketPolymarketOrders(args: {\n tokenId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-market-orders`;\n const body = { market: args.tokenId };\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport class PolymarketExchangeClient {\n private readonly wallet: WalletFullContext;\n private readonly credentials: PolymarketApiCredentials | undefined;\n private readonly apiKeyNonce: number | undefined;\n private readonly environment: PolymarketEnvironment;\n private cachedCredentials: PolymarketApiCredentials | undefined;\n\n constructor(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n }) {\n this.wallet = args.wallet;\n this.credentials = args.credentials;\n this.apiKeyNonce = args.apiKeyNonce;\n this.environment = args.environment ?? \"mainnet\";\n }\n\n private async getCredentials() {\n if (this.cachedCredentials) return this.cachedCredentials;\n const resolved = await resolveAuthContext({\n wallet: this.wallet,\n ...(this.credentials ? { credentials: this.credentials } : {}),\n environment: this.environment,\n ...(this.apiKeyNonce !== undefined\n ? { apiKeyNonce: this.apiKeyNonce }\n : {}),\n });\n this.cachedCredentials = resolved.credentials;\n return resolved.credentials;\n }\n\n async placeOrder(\n order: PolymarketOrderIntent,\n orderType?: PolymarketOrderType,\n ) {\n const credentials = await this.getCredentials();\n return placePolymarketOrder({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n order,\n ...(orderType !== undefined ? { orderType } : {}),\n });\n }\n\n async cancelOrder(orderId: string) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrder({\n orderId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelOrders(orderIds: string[]) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrders({\n orderIds,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelAll() {\n const credentials = await this.getCredentials();\n return cancelAllPolymarketOrders({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelMarket(tokenId: string) {\n const credentials = await this.getCredentials();\n return cancelMarketPolymarketOrders({\n tokenId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n}\n","import {\n PolymarketApiError,\n PolymarketEnvironment,\n PolymarketMarket,\n PolymarketOrderbook,\n PolymarketOrderbookLevel,\n PolymarketPriceHistoryPoint,\n normalizeNumberArrayish,\n normalizeStringArrayish,\n normalizeTags,\n parseOptionalDate,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\ntype GammaEvent = Record<string, unknown>;\ntype GammaMarket = Record<string, unknown>;\ntype CsvStringInput = string | string[];\ntype CsvNumberInput = number | number[];\n\ntype FetchParams = {\n environment?: PolymarketEnvironment;\n limit?: number;\n offset?: number;\n order?: string;\n ascending?: boolean;\n tagId?: string;\n relatedTags?: boolean;\n excludeTagId?: string;\n category?: string;\n slug?: string;\n active?: boolean;\n closed?: boolean;\n};\n\nexport interface PolymarketUserPosition {\n proxyWallet?: string | null;\n asset?: string | null;\n conditionId?: string | null;\n size?: number | null;\n avgPrice?: number | null;\n initialValue?: number | null;\n currentValue?: number | null;\n cashPnl?: number | null;\n percentPnl?: number | null;\n totalBought?: number | null;\n realizedPnl?: number | null;\n percentRealizedPnl?: number | null;\n curPrice?: number | null;\n redeemable?: boolean;\n mergeable?: boolean;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n outcomeIndex?: number | null;\n oppositeOutcome?: string | null;\n oppositeAsset?: string | null;\n endDate?: string | null;\n negativeRisk?: boolean;\n}\n\nexport interface PolymarketClosedPosition {\n proxyWallet?: string | null;\n asset?: string | null;\n conditionId?: string | null;\n avgPrice?: number | null;\n totalBought?: number | null;\n realizedPnl?: number | null;\n curPrice?: number | null;\n timestamp?: number | null;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n outcomeIndex?: number | null;\n oppositeOutcome?: string | null;\n oppositeAsset?: string | null;\n endDate?: string | null;\n}\n\nexport type PolymarketActivityType =\n | \"TRADE\"\n | \"SPLIT\"\n | \"MERGE\"\n | \"REDEEM\"\n | \"REWARD\"\n | \"CONVERSION\"\n | \"MAKER_REBATE\";\n\nexport interface PolymarketUserActivity {\n proxyWallet?: string | null;\n timestamp?: number | null;\n conditionId?: string | null;\n type?: PolymarketActivityType | null;\n size?: number | null;\n usdcSize?: number | null;\n transactionHash?: string | null;\n price?: number | null;\n asset?: string | null;\n side?: \"BUY\" | \"SELL\" | null;\n outcomeIndex?: number | null;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n name?: string | null;\n pseudonym?: string | null;\n bio?: string | null;\n profileImage?: string | null;\n profileImageOptimized?: string | null;\n}\n\nexport interface PolymarketPositionValue {\n user?: string | null;\n value?: number | null;\n}\n\nexport interface PolymarketPublicProfileUser {\n id?: string | null;\n creator?: boolean;\n mod?: boolean;\n}\n\nexport interface PolymarketPublicProfile {\n createdAt?: string | null;\n proxyWallet?: string | null;\n profileImage?: string | null;\n displayUsernamePublic?: boolean | null;\n bio?: string | null;\n pseudonym?: string | null;\n name?: string | null;\n users?: PolymarketPublicProfileUser[] | null;\n xUsername?: string | null;\n verifiedBadge?: boolean | null;\n}\n\ninterface PolymarketUserQueryBase {\n user: string;\n environment?: PolymarketEnvironment;\n market?: CsvStringInput;\n eventId?: CsvNumberInput;\n}\n\nexport interface PolymarketUserPositionParams extends PolymarketUserQueryBase {\n sizeThreshold?: number;\n redeemable?: boolean;\n mergeable?: boolean;\n limit?: number;\n offset?: number;\n sortBy?:\n | \"CURRENT\"\n | \"INITIAL\"\n | \"TOKENS\"\n | \"CASHPNL\"\n | \"PERCENTPNL\"\n | \"TITLE\"\n | \"RESOLVING\"\n | \"PRICE\"\n | \"AVGPRICE\";\n sortDirection?: \"ASC\" | \"DESC\";\n title?: string;\n}\n\nexport interface PolymarketClosedPositionParams extends PolymarketUserQueryBase {\n limit?: number;\n offset?: number;\n sortBy?: \"REALIZEDPNL\" | \"TITLE\" | \"PRICE\" | \"AVGPRICE\" | \"TIMESTAMP\";\n sortDirection?: \"ASC\" | \"DESC\";\n title?: string;\n}\n\nexport interface PolymarketUserActivityParams extends PolymarketUserQueryBase {\n limit?: number;\n offset?: number;\n type?: PolymarketActivityType | PolymarketActivityType[];\n start?: number;\n end?: number;\n sortBy?: \"TIMESTAMP\" | \"TOKENS\" | \"CASH\";\n sortDirection?: \"ASC\" | \"DESC\";\n side?: \"BUY\" | \"SELL\";\n}\n\nexport interface PolymarketPositionValueParams {\n user: string;\n environment?: PolymarketEnvironment;\n market?: CsvStringInput;\n}\n\nconst DEFAULT_EVENT_LIMIT = 50;\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction getString(value: unknown): string | null {\n if (value == null) return null;\n const str = String(value).trim();\n return str.length ? str : null;\n}\n\nfunction getNumber(value: unknown): number | null {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : null;\n}\n\nfunction getInteger(value: unknown): number | null {\n const numeric = getNumber(value);\n return numeric == null ? null : Math.trunc(numeric);\n}\n\nfunction getBoolean(value: unknown): boolean | null {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n }\n return null;\n}\n\nfunction normalizeCsvStringInput(value: CsvStringInput | undefined): string[] {\n if (Array.isArray(value)) {\n return value\n .flatMap((entry) => String(entry).split(\",\"))\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (typeof value === \"string\") {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n return [];\n}\n\nfunction normalizeCsvNumberInput(value: CsvNumberInput | undefined): number[] {\n if (Array.isArray(value)) {\n return value.filter((entry) => Number.isFinite(entry));\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return [value];\n }\n return [];\n}\n\nfunction appendCsvParam(url: URL, key: string, values: string[]) {\n if (values.length > 0) {\n url.searchParams.set(key, values.join(\",\"));\n }\n}\n\nfunction appendNumberParam(url: URL, key: string, value: number | undefined) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n url.searchParams.set(key, String(value));\n }\n}\n\nfunction appendBooleanParam(url: URL, key: string, value: boolean | undefined) {\n if (typeof value === \"boolean\") {\n url.searchParams.set(key, value ? \"true\" : \"false\");\n }\n}\n\nfunction assertMutuallyExclusiveMarketScope(market: string[], eventIds: number[]) {\n if (market.length > 0 && eventIds.length > 0) {\n throw new Error(\"market and eventId are mutually exclusive.\");\n }\n}\n\nfunction normalizeOrderbookLevels(raw: unknown): PolymarketOrderbookLevel[] {\n if (!Array.isArray(raw)) return [];\n return raw\n .map((entry) => {\n if (Array.isArray(entry)) {\n const [price, size] = entry;\n const p = Number(price);\n const s = Number(size);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const p = Number(record.price ?? record.p);\n const s = Number(record.size ?? record.s ?? record.quantity);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n return null;\n })\n .filter((entry): entry is PolymarketOrderbookLevel => Boolean(entry));\n}\n\nfunction normalizeGammaMarket(market: GammaMarket, event?: GammaEvent): PolymarketMarket {\n const eventTags = normalizeTags(event?.tags);\n const marketTags = normalizeTags(market.tags);\n const mergedTags = Array.from(new Set([...marketTags, ...eventTags]));\n\n const category =\n getString(market.category) ?? getString(event?.category) ?? getString(event?.title) ?? null;\n\n const normalized: PolymarketMarket = {\n id: getString(market.id) ?? \"\",\n slug: getString(market.slug),\n question: getString(market.question),\n description: getString(market.description),\n eventId: getString(market.eventId ?? event?.id),\n eventSlug: getString(event?.slug),\n conditionId: getString(market.conditionId),\n marketMakerAddress: getString(market.marketMakerAddress),\n category,\n startDate:\n parseOptionalDate(market.startDate) ??\n parseOptionalDate(event?.startDate) ??\n parseOptionalDate(event?.eventStartTime),\n endDate:\n parseOptionalDate(market.endDate) ??\n parseOptionalDate(event?.endDate) ??\n parseOptionalDate(event?.eventEndTime),\n createdAt:\n parseOptionalDate(market.createdAt) ??\n parseOptionalDate(event?.createdAt) ??\n parseOptionalDate(event?.creationDate),\n updatedAt: parseOptionalDate(market.updatedAt) ?? parseOptionalDate(event?.updatedAt),\n closedTime: parseOptionalDate(market.closedTime) ?? parseOptionalDate(event?.closedTime),\n volume: getString(market.volume),\n liquidity: getString(market.liquidity),\n openInterest: getString(market.openInterest),\n outcomes: normalizeStringArrayish(market.outcomes),\n outcomePrices: normalizeNumberArrayish(market.outcomePrices),\n clobTokenIds: normalizeStringArrayish(market.clobTokenIds),\n icon: getString(market.icon),\n image: getString(market.image),\n };\n\n if (mergedTags.length) {\n normalized.tags = mergedTags;\n }\n if (typeof market.active === \"boolean\") {\n normalized.active = market.active;\n }\n if (typeof market.closed === \"boolean\") {\n normalized.closed = market.closed;\n }\n if (typeof market.resolved === \"boolean\") {\n normalized.resolved = market.resolved;\n }\n\n return normalized;\n}\n\nfunction normalizeUserPosition(raw: unknown): PolymarketUserPosition {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n const normalized: PolymarketUserPosition = {\n proxyWallet: getString(record.proxyWallet),\n asset: getString(record.asset),\n conditionId: getString(record.conditionId),\n size: getNumber(record.size),\n avgPrice: getNumber(record.avgPrice),\n initialValue: getNumber(record.initialValue),\n currentValue: getNumber(record.currentValue),\n cashPnl: getNumber(record.cashPnl),\n percentPnl: getNumber(record.percentPnl),\n totalBought: getNumber(record.totalBought),\n realizedPnl: getNumber(record.realizedPnl),\n percentRealizedPnl: getNumber(record.percentRealizedPnl),\n curPrice: getNumber(record.curPrice),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n outcomeIndex: getInteger(record.outcomeIndex),\n oppositeOutcome: getString(record.oppositeOutcome),\n oppositeAsset: getString(record.oppositeAsset),\n endDate: parseOptionalDate(record.endDate),\n };\n const redeemable = getBoolean(record.redeemable);\n if (redeemable != null) normalized.redeemable = redeemable;\n const mergeable = getBoolean(record.mergeable);\n if (mergeable != null) normalized.mergeable = mergeable;\n const negativeRisk = getBoolean(record.negativeRisk);\n if (negativeRisk != null) normalized.negativeRisk = negativeRisk;\n return normalized;\n}\n\nfunction normalizeClosedPosition(raw: unknown): PolymarketClosedPosition {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n proxyWallet: getString(record.proxyWallet),\n asset: getString(record.asset),\n conditionId: getString(record.conditionId),\n avgPrice: getNumber(record.avgPrice),\n totalBought: getNumber(record.totalBought),\n realizedPnl: getNumber(record.realizedPnl),\n curPrice: getNumber(record.curPrice),\n timestamp: getInteger(record.timestamp),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n outcomeIndex: getInteger(record.outcomeIndex),\n oppositeOutcome: getString(record.oppositeOutcome),\n oppositeAsset: getString(record.oppositeAsset),\n endDate: parseOptionalDate(record.endDate),\n };\n}\n\nfunction normalizeUserActivity(raw: unknown): PolymarketUserActivity {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n proxyWallet: getString(record.proxyWallet),\n timestamp: getInteger(record.timestamp),\n conditionId: getString(record.conditionId),\n type: getString(record.type) as PolymarketActivityType | null,\n size: getNumber(record.size),\n usdcSize: getNumber(record.usdcSize),\n transactionHash: getString(record.transactionHash),\n price: getNumber(record.price),\n asset: getString(record.asset),\n side: getString(record.side) as \"BUY\" | \"SELL\" | null,\n outcomeIndex: getInteger(record.outcomeIndex),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n name: getString(record.name),\n pseudonym: getString(record.pseudonym),\n bio: getString(record.bio),\n profileImage: getString(record.profileImage),\n profileImageOptimized: getString(record.profileImageOptimized),\n };\n}\n\nfunction normalizePositionValue(raw: unknown): PolymarketPositionValue {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n user: getString(record.user),\n value: getNumber(record.value),\n };\n}\n\nfunction normalizeProfileUsers(raw: unknown): PolymarketPublicProfileUser[] | null {\n if (!Array.isArray(raw)) return null;\n return raw.map((entry) => {\n const record = entry && typeof entry === \"object\" ? (entry as Record<string, unknown>) : {};\n const normalized: PolymarketPublicProfileUser = {\n id: getString(record.id),\n };\n const creator = getBoolean(record.creator);\n if (creator != null) normalized.creator = creator;\n const mod = getBoolean(record.mod);\n if (mod != null) normalized.mod = mod;\n return normalized;\n });\n}\n\nfunction normalizePublicProfile(raw: unknown): PolymarketPublicProfile | null {\n if (!raw || typeof raw !== \"object\") return null;\n const record = raw as Record<string, unknown>;\n const normalized: PolymarketPublicProfile = {\n createdAt: parseOptionalDate(record.createdAt),\n proxyWallet: getString(record.proxyWallet),\n profileImage: getString(record.profileImage),\n bio: getString(record.bio),\n pseudonym: getString(record.pseudonym),\n name: getString(record.name),\n users: normalizeProfileUsers(record.users),\n xUsername: getString(record.xUsername),\n };\n const displayUsernamePublic = getBoolean(record.displayUsernamePublic);\n if (displayUsernamePublic != null) {\n normalized.displayUsernamePublic = displayUsernamePublic;\n }\n const verifiedBadge = getBoolean(record.verifiedBadge);\n if (verifiedBadge != null) {\n normalized.verifiedBadge = verifiedBadge;\n }\n return normalized;\n}\n\nexport class PolymarketInfoClient {\n private readonly environment: PolymarketEnvironment;\n\n constructor(environment: PolymarketEnvironment = \"mainnet\") {\n this.environment = environment;\n }\n\n markets(params: FetchParams = {}) {\n return fetchPolymarketMarkets({ ...params, environment: this.environment });\n }\n\n market(params: { id?: string; slug?: string; conditionId?: string }) {\n return fetchPolymarketMarket({ ...params, environment: this.environment });\n }\n\n orderbook(tokenId: string) {\n return fetchPolymarketOrderbook({ tokenId, environment: this.environment });\n }\n\n price(tokenId: string, side: \"BUY\" | \"SELL\") {\n return fetchPolymarketPrice({ tokenId, side, environment: this.environment });\n }\n\n midpoint(tokenId: string) {\n return fetchPolymarketMidpoint({ tokenId, environment: this.environment });\n }\n\n priceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n }) {\n return fetchPolymarketPriceHistory({ ...params, environment: this.environment });\n }\n\n positions(params: Omit<PolymarketUserPositionParams, \"environment\">) {\n return fetchPolymarketPositions({ ...params, environment: this.environment });\n }\n\n closedPositions(params: Omit<PolymarketClosedPositionParams, \"environment\">) {\n return fetchPolymarketClosedPositions({ ...params, environment: this.environment });\n }\n\n activity(params: Omit<PolymarketUserActivityParams, \"environment\">) {\n return fetchPolymarketActivity({ ...params, environment: this.environment });\n }\n\n positionValue(params: Omit<PolymarketPositionValueParams, \"environment\">) {\n return fetchPolymarketPositionValue({ ...params, environment: this.environment });\n }\n\n publicProfile(address: string) {\n return fetchPolymarketPublicProfile({ address, environment: this.environment });\n }\n}\n\nexport async function fetchPolymarketMarkets(\n params: FetchParams = {},\n): Promise<PolymarketMarket[]> {\n if (params.active !== undefined && params.active !== true) {\n throw new Error(\"Polymarket market list requires active=true.\");\n }\n if (params.closed !== undefined && params.closed !== false) {\n throw new Error(\"Polymarket market list requires closed=false.\");\n }\n\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/events\", baseUrl);\n const limit = params.limit ?? DEFAULT_EVENT_LIMIT;\n const offset = params.offset ?? 0;\n\n url.searchParams.set(\"limit\", String(limit));\n url.searchParams.set(\"offset\", String(offset));\n url.searchParams.set(\"active\", \"true\");\n url.searchParams.set(\"closed\", \"false\");\n url.searchParams.set(\"order\", params.order ?? \"id\");\n url.searchParams.set(\"ascending\", params.ascending ? \"true\" : \"false\");\n\n if (params.tagId) url.searchParams.set(\"tag_id\", params.tagId);\n if (params.relatedTags) url.searchParams.set(\"related_tags\", \"true\");\n if (params.excludeTagId) url.searchParams.set(\"exclude_tag_id\", params.excludeTagId);\n if (params.slug) url.searchParams.set(\"slug\", params.slug);\n\n const data = (await requestJson(url.toString())) as GammaEvent[];\n const markets = data.flatMap((event) =>\n Array.isArray(event?.markets)\n ? (event.markets as GammaMarket[]).map((market) => normalizeGammaMarket(market, event))\n : [],\n );\n\n const filtered = params.category\n ? markets.filter((market) =>\n (market.category ?? \"\").toLowerCase().includes(params.category!.toLowerCase()),\n )\n : markets;\n\n return typeof params.limit === \"number\" ? filtered.slice(0, params.limit) : filtered;\n}\n\nexport async function fetchPolymarketMarket(params: {\n id?: string;\n slug?: string;\n conditionId?: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketMarket | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n\n if (params.slug) {\n const url = new URL(`/markets/slug/${params.slug}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.id) {\n const url = new URL(`/markets/${params.id}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.conditionId) {\n const url = new URL(`/markets`, baseUrl);\n url.searchParams.set(\"condition_id\", params.conditionId);\n const data = (await requestJson(url.toString())) as GammaMarket[] | GammaMarket | null;\n if (!data) return null;\n const market = Array.isArray(data) ? data[0] : data;\n return market ? normalizeGammaMarket(market) : null;\n }\n\n throw new Error(\"id, slug, or conditionId is required.\");\n}\n\nexport async function fetchPolymarketOrderbook(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketOrderbook> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/book\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n\n return {\n market: params.tokenId,\n bids: normalizeOrderbookLevels(data.bids),\n asks: normalizeOrderbookLevels(data.asks),\n timestamp: getString(data.timestamp),\n };\n}\n\nexport async function fetchPolymarketPrice(params: {\n tokenId: string;\n side: \"BUY\" | \"SELL\";\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/price\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n url.searchParams.set(\"side\", params.side);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n const price = Number(data.price ?? data?.p);\n return Number.isFinite(price) ? price : null;\n}\n\nexport async function fetchPolymarketMidpoint(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const baseArgs = {\n tokenId: params.tokenId,\n ...(params.environment ? { environment: params.environment } : {}),\n };\n const buy = await fetchPolymarketPrice({ ...baseArgs, side: \"BUY\" });\n const sell = await fetchPolymarketPrice({ ...baseArgs, side: \"SELL\" });\n if (buy == null || sell == null) return null;\n return (buy + sell) / 2;\n}\n\nexport async function fetchPolymarketPriceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPriceHistoryPoint[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/prices-history\", baseUrl);\n url.searchParams.set(\"market\", params.tokenId);\n if (params.startTs) url.searchParams.set(\"startTs\", params.startTs.toString());\n if (params.endTs) url.searchParams.set(\"endTs\", params.endTs.toString());\n if (params.interval) url.searchParams.set(\"interval\", params.interval);\n if (params.fidelity) url.searchParams.set(\"fidelity\", params.fidelity.toString());\n\n const data = (await requestJson(url.toString())) as\n | { history?: Array<{ t: number; p: number }> }\n | Array<{ t: number; p: number }>;\n\n const points = Array.isArray(data) ? data : (data?.history ?? []);\n return points\n .map((point) => ({\n t: Number(point.t),\n p: Number(point.p),\n }))\n .filter((point) => Number.isFinite(point.t) && Number.isFinite(point.p));\n}\n\nexport async function fetchPolymarketPositions(\n params: PolymarketUserPositionParams,\n): Promise<PolymarketUserPosition[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/positions\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendNumberParam(url, \"sizeThreshold\", params.sizeThreshold);\n appendBooleanParam(url, \"redeemable\", params.redeemable);\n appendBooleanParam(url, \"mergeable\", params.mergeable);\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.title) url.searchParams.set(\"title\", params.title);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeUserPosition(entry)) : [];\n}\n\nexport async function fetchPolymarketClosedPositions(\n params: PolymarketClosedPositionParams,\n): Promise<PolymarketClosedPosition[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/closed-positions\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.title) url.searchParams.set(\"title\", params.title);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeClosedPosition(entry)) : [];\n}\n\nexport async function fetchPolymarketActivity(\n params: PolymarketUserActivityParams,\n): Promise<PolymarketUserActivity[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const types = Array.isArray(params.type) ? params.type : params.type ? [params.type] : [];\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/activity\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendCsvParam(url, \"type\", types);\n appendNumberParam(url, \"start\", params.start);\n appendNumberParam(url, \"end\", params.end);\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.side) url.searchParams.set(\"side\", params.side);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeUserActivity(entry)) : [];\n}\n\nexport async function fetchPolymarketPositionValue(\n params: PolymarketPositionValueParams,\n): Promise<PolymarketPositionValue[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/value\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", normalizeCsvStringInput(params.market));\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizePositionValue(entry)) : [];\n}\n\nexport async function fetchPolymarketPublicProfile(params: {\n address: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPublicProfile | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/public-profile\", baseUrl);\n url.searchParams.set(\"address\", params.address);\n const data = await requestJson(url.toString());\n return normalizePublicProfile(data);\n}\n","import {\n decodeFunctionData,\n encodeFunctionData,\n erc20Abi,\n maxUint256,\n type PublicClient,\n} from \"viem\";\n\nimport { PolymarketApiError, PolymarketEnvironment, POLYMARKET_EXCHANGE_ADDRESSES } from \"./base\";\n\nexport interface PolymarketBootstrapContracts {\n usdc: `0x${string}`;\n ctf: `0x${string}`;\n negRiskAdapter: `0x${string}`;\n safeFactory: `0x${string}`;\n safeMultisend: `0x${string}`;\n relayerUrl: string;\n bridgeUrl: string;\n}\n\nexport interface PolymarketBootstrapTransaction {\n to: `0x${string}`;\n data: `0x${string}`;\n value: string;\n description: string;\n}\n\nexport interface PolymarketDepositAddressSet {\n evm?: string | null;\n svm?: string | null;\n btc?: string | null;\n sol?: string | null;\n [key: string]: unknown;\n}\n\nexport interface PolymarketDepositAddressesResponse {\n address?: PolymarketDepositAddressSet | null;\n note?: string | null;\n [key: string]: unknown;\n}\n\nexport interface PolymarketApprovalState {\n funder: `0x${string}`;\n usdcAllowance: bigint;\n usdcApproved: boolean;\n ctfExchangeApproved: boolean;\n negRiskExchangeApproved: boolean;\n approvalsReady: boolean;\n}\n\nconst POLYMARKET_SET_APPROVAL_FOR_ALL_ABI = [\n {\n inputs: [\n { name: \"operator\", type: \"address\" },\n { name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"account\", type: \"address\" },\n { name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nconst POLYMARKET_BOOTSTRAP_CONTRACTS_BY_ENV: Partial<\n Record<PolymarketEnvironment, PolymarketBootstrapContracts>\n> = {\n mainnet: {\n usdc: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n ctf: \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n negRiskAdapter: \"0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296\",\n safeFactory: \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\",\n safeMultisend: \"0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761\",\n relayerUrl: \"https://relayer-v2.polymarket.com\",\n bridgeUrl: \"https://bridge.polymarket.com\",\n },\n};\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nexport function resolvePolymarketBootstrapContracts(\n environment: PolymarketEnvironment,\n): PolymarketBootstrapContracts {\n const contracts = POLYMARKET_BOOTSTRAP_CONTRACTS_BY_ENV[environment];\n if (!contracts) {\n throw new Error(\n `Polymarket bootstrap contracts are not configured for ${environment}.`,\n );\n }\n return contracts;\n}\n\nexport function buildPolymarketUsdcApprovalTransaction(args?: {\n environment?: PolymarketEnvironment;\n amount?: bigint;\n}): PolymarketBootstrapTransaction {\n const environment = args?.environment ?? \"mainnet\";\n const contracts = resolvePolymarketBootstrapContracts(environment);\n return {\n to: contracts.usdc,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [contracts.ctf, args?.amount ?? maxUint256],\n }),\n value: \"0\",\n description: \"Approve USDC.e for CTF\",\n };\n}\n\nexport function buildPolymarketOutcomeTokenApprovalTransactions(args?: {\n environment?: PolymarketEnvironment;\n includeNegRisk?: boolean;\n}): PolymarketBootstrapTransaction[] {\n const environment = args?.environment ?? \"mainnet\";\n const includeNegRisk = args?.includeNegRisk ?? true;\n const contracts = resolvePolymarketBootstrapContracts(environment);\n\n const transactions: PolymarketBootstrapTransaction[] = [\n {\n to: contracts.ctf,\n data: encodeFunctionData({\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"setApprovalForAll\",\n args: [POLYMARKET_EXCHANGE_ADDRESSES[environment].ctf, true],\n }),\n value: \"0\",\n description: \"Approve outcome tokens for CTF Exchange\",\n },\n ];\n\n if (includeNegRisk) {\n transactions.push({\n to: contracts.ctf,\n data: encodeFunctionData({\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"setApprovalForAll\",\n args: [POLYMARKET_EXCHANGE_ADDRESSES[environment].negRisk, true],\n }),\n value: \"0\",\n description: \"Approve outcome tokens for Neg Risk Exchange\",\n });\n }\n\n return transactions;\n}\n\nexport function buildPolymarketApprovalTransactions(args?: {\n environment?: PolymarketEnvironment;\n amount?: bigint;\n includeNegRisk?: boolean;\n}): PolymarketBootstrapTransaction[] {\n return [\n buildPolymarketUsdcApprovalTransaction(args),\n ...buildPolymarketOutcomeTokenApprovalTransactions(args),\n ];\n}\n\nexport async function fetchPolymarketApprovalState(args: {\n publicClient: Pick<PublicClient, \"readContract\">;\n funder: `0x${string}`;\n environment?: PolymarketEnvironment;\n includeNegRisk?: boolean;\n}): Promise<PolymarketApprovalState> {\n const environment = args.environment ?? \"mainnet\";\n const includeNegRisk = args.includeNegRisk ?? true;\n const contracts = resolvePolymarketBootstrapContracts(environment);\n const ctfExchange = POLYMARKET_EXCHANGE_ADDRESSES[environment].ctf;\n const negRiskExchange = POLYMARKET_EXCHANGE_ADDRESSES[environment].negRisk;\n\n const [allowance, ctfExchangeApproved, negRiskExchangeApproved] = await Promise.all([\n args.publicClient.readContract({\n address: contracts.usdc,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [args.funder, contracts.ctf],\n }) as Promise<bigint>,\n args.publicClient.readContract({\n address: contracts.ctf,\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"isApprovedForAll\",\n args: [args.funder, ctfExchange],\n }) as Promise<boolean>,\n includeNegRisk\n ? (args.publicClient.readContract({\n address: contracts.ctf,\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"isApprovedForAll\",\n args: [args.funder, negRiskExchange],\n }) as Promise<boolean>)\n : Promise.resolve(true),\n ]);\n\n return {\n funder: args.funder,\n usdcAllowance: allowance,\n usdcApproved: allowance > 0n,\n ctfExchangeApproved,\n negRiskExchangeApproved,\n approvalsReady: allowance > 0n && ctfExchangeApproved && negRiskExchangeApproved,\n };\n}\n\nexport async function fetchPolymarketDepositAddresses(args: {\n address: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketDepositAddressesResponse> {\n const environment = args.environment ?? \"mainnet\";\n const contracts = resolvePolymarketBootstrapContracts(environment);\n return (await requestJson(`${contracts.bridgeUrl}/deposit`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n address: args.address,\n }),\n })) as PolymarketDepositAddressesResponse;\n}\n\nexport function decodePolymarketBootstrapTransaction(\n transaction: PolymarketBootstrapTransaction,\n): {\n to: `0x${string}`;\n functionName: string;\n args: readonly unknown[];\n} {\n const abi =\n transaction.to.toLowerCase() ===\n resolvePolymarketBootstrapContracts(\"mainnet\").usdc.toLowerCase()\n ? erc20Abi\n : POLYMARKET_SET_APPROVAL_FOR_ALL_ABI;\n const decoded = decodeFunctionData({\n abi,\n data: transaction.data,\n });\n return {\n to: transaction.to,\n functionName: decoded.functionName,\n args: decoded.args ?? [],\n };\n}\n","const DEFAULT_OPENPOND_GATEWAY_URL = \"https://gateway.openpond.dev\";\n\nexport type NewsEventState =\n | \"monitoring\"\n | \"escalation\"\n | \"de_escalation\"\n | \"resolved\"\n | \"contradiction\";\n\nexport type NewsSignalValue =\n | \"none\"\n | \"escalation\"\n | \"de_escalation\"\n | \"resolved\"\n | \"contradiction\";\n\nexport type NewsPropositionAnswer = \"yes\" | \"no\" | \"unclear\";\nexport type NewsPropositionStatus = NewsPropositionAnswer | \"no_matching_event\";\nexport type NewsContinuationAction = \"continue\" | \"skip\" | \"pause\";\n\nexport type NewsPredictionMarketMatchedMarket = {\n marketId: string;\n conditionId?: string | null;\n title: string;\n slug?: string | null;\n category?: string | null;\n yesProbability?: number | null;\n noProbability?: number | null;\n leadingOutcome?: string | null;\n leadingProbability?: number | null;\n volume?: number | null;\n liquidity?: number | null;\n openInterest?: number | null;\n probabilityDelta1h?: number | null;\n probabilityDelta24h?: number | null;\n fetchedAt: string;\n};\n\nexport type NewsPredictionMarketContext = {\n matchedMarkets: NewsPredictionMarketMatchedMarket[];\n consensusProbability?: number | null;\n probabilityDelta1h?: number | null;\n probabilityDelta24h?: number | null;\n liquidityWeightedScore?: number | null;\n predictionDisagreementScore?: number | null;\n dataAgeMs?: number | null;\n} | null;\n\nexport type NewsSignalEvidence = {\n articleId: string;\n sourceId: string;\n sourceName: string;\n title: string;\n canonicalUrl: string;\n claimType: string;\n claimPolarity: string;\n evidenceConfidence: number;\n evidenceAt: string;\n summary?: string | null;\n contentPreview?: string | null;\n};\n\nexport type NewsSignalConfidenceBreakdown = {\n baseScore: number;\n winningBucketScore: number;\n opposingPenalty: number;\n contradictionPenalty: number;\n stateBonus: number;\n finalScore: number;\n};\n\nexport type NewsEventSignalPolicy = {\n minConfidence: number;\n minIndependentSources: number;\n minTierASources: number;\n cooldownMinutes: number;\n allowedSourceIds?: string[];\n};\n\nexport type NewsEventSignal = {\n eventId: string;\n eventKey: string;\n title: string | null;\n eventState: NewsEventState;\n eventConfidence: number;\n confidenceBreakdown: NewsSignalConfidenceBreakdown;\n signal: NewsSignalValue;\n triggerPassed: boolean;\n policyRisk: \"low\" | \"medium\" | \"high\";\n effectivePolicy: NewsEventSignalPolicy;\n whyNotTriggered: string | null;\n warnings: string[];\n contradictionCount: number;\n supportingSourceCount: number;\n tierASourceCount: number;\n rebuttingSourceSummary: Array<{\n sourceId: string;\n sourceName: string;\n title: string;\n }>;\n evidence: NewsSignalEvidence[];\n dataAgeMs: number | null;\n predictionMarketContext: NewsPredictionMarketContext;\n};\n\nexport type NewsPropositionSignal = {\n question: string;\n query: string | null;\n propositionType: string | null;\n propositionStatus: NewsPropositionStatus;\n answer: NewsPropositionAnswer;\n propositionConfidence: number;\n reasoning: string;\n evidenceWindowSummary: string;\n resolvedEventId: string | null;\n resolvedEventKey: string | null;\n resolvedEventTitle: string | null;\n eventState: NewsEventState | null;\n eventConfidence: number | null;\n confidenceBreakdown: NewsSignalConfidenceBreakdown | null;\n supportingEvidence: NewsSignalEvidence[];\n rebuttingEvidence: NewsSignalEvidence[];\n supportingEvidenceArticleIds: string[];\n rebuttingEvidenceArticleIds: string[];\n operatorReviewRecommended: boolean;\n dataAgeMs: number | null;\n predictionMarketContext: NewsPredictionMarketContext;\n};\n\nexport type NewsEventSignalRequest = {\n gatewayBase?: string | null;\n fetchImplementation?: typeof fetch;\n query?: string;\n eventKey?: string;\n asOf?: string | Date | null;\n includePredictionMarkets?: boolean;\n ingestOnRequest?: boolean;\n maxAgeHours?: number;\n minConfidence?: number;\n minIndependentSources?: number;\n minTierASources?: number;\n};\n\nexport type NewsPropositionSignalRequest = {\n gatewayBase?: string | null;\n fetchImplementation?: typeof fetch;\n question: string;\n query?: string;\n eventKey?: string;\n propositionType?: string;\n asOf?: string | Date | null;\n includePredictionMarkets?: boolean;\n ingestOnRequest?: boolean;\n maxAgeHours?: number;\n candidateLimit?: number;\n};\n\nexport type NewsSignalClientConfig = {\n gatewayBase?: string | null;\n fetchImplementation?: typeof fetch;\n};\n\nexport type NewsEventContinuationGate = {\n mode: \"event\";\n minConfidence?: number;\n maxDataAgeMs?: number;\n minIndependentSources?: number;\n minTierASources?: number;\n requireTriggerPassed?: boolean;\n onBlocked?: Exclude<NewsContinuationAction, \"continue\">;\n};\n\nexport type NewsPropositionContinuationGate = {\n mode: \"proposition\";\n expectedAnswer?: NewsPropositionAnswer;\n minConfidence?: number;\n maxDataAgeMs?: number;\n requireResolvedEvent?: boolean;\n onBlocked?: Exclude<NewsContinuationAction, \"continue\">;\n};\n\nexport type NewsContinuationGate =\n | NewsEventContinuationGate\n | NewsPropositionContinuationGate;\n\nexport type NewsContinuationGateResult = {\n allowed: boolean;\n action: NewsContinuationAction;\n reason: string;\n matchedRule: NewsContinuationGate[\"mode\"];\n blockingFactors: string[];\n};\n\nfunction resolveFetchImplementation(override?: typeof fetch): typeof fetch {\n const fetchImplementation = override ?? globalThis.fetch;\n if (!fetchImplementation) {\n throw new Error(\n \"No fetch implementation available. Provide one via NewsSignalClientConfig.fetchImplementation.\",\n );\n }\n return fetchImplementation;\n}\n\nexport function resolveNewsGatewayBase(override?: string | null): string {\n const value = override ?? process.env.OPENPOND_GATEWAY_URL ?? DEFAULT_OPENPOND_GATEWAY_URL;\n if (typeof value !== \"string\") {\n throw new Error(\"OPENPOND_GATEWAY_URL is required.\");\n }\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"OPENPOND_GATEWAY_URL is required.\");\n }\n return trimmed.replace(/\\/$/, \"\");\n}\n\nfunction normalizeAsOf(value?: string | Date | null): string | undefined {\n if (value == null) return undefined;\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) {\n throw new Error(\"asOf must be a valid ISO-8601 datetime or Date.\");\n }\n return date.toISOString();\n}\n\nasync function postGatewayJson<T>(params: {\n path: string;\n body: Record<string, unknown>;\n gatewayBase?: string | null | undefined;\n fetchImplementation?: typeof fetch | undefined;\n}): Promise<T> {\n const gatewayBase = resolveNewsGatewayBase(params.gatewayBase);\n const fetchImplementation = resolveFetchImplementation(params.fetchImplementation);\n const response = await fetchImplementation(`${gatewayBase}${params.path}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(params.body),\n });\n const text = await response.text().catch(() => \"\");\n let payload: unknown = null;\n try {\n payload = text ? (JSON.parse(text) as unknown) : null;\n } catch {\n payload = text;\n }\n if (!response.ok) {\n throw new Error(\n `Gateway request failed (${response.status}) for ${params.path}: ${\n typeof payload === \"string\" && payload ? payload : \"no_body\"\n }`,\n );\n }\n return payload as T;\n}\n\nexport async function fetchNewsEventSignal(\n params: NewsEventSignalRequest,\n): Promise<NewsEventSignal> {\n if (!params.query?.trim() && !params.eventKey?.trim()) {\n throw new Error(\"query or eventKey is required.\");\n }\n\n return postGatewayJson<NewsEventSignal>({\n path: \"/v1/news/event-signal\",\n gatewayBase: params.gatewayBase,\n fetchImplementation: params.fetchImplementation,\n body: {\n ...(params.query?.trim() ? { query: params.query.trim() } : {}),\n ...(params.eventKey?.trim() ? { eventKey: params.eventKey.trim() } : {}),\n ...(normalizeAsOf(params.asOf) ? { asOf: normalizeAsOf(params.asOf) } : {}),\n ...(typeof params.includePredictionMarkets === \"boolean\"\n ? { includePredictionMarkets: params.includePredictionMarkets }\n : {}),\n ...(typeof params.ingestOnRequest === \"boolean\"\n ? { ingestOnRequest: params.ingestOnRequest }\n : {}),\n ...(typeof params.maxAgeHours === \"number\" ? { maxAgeHours: params.maxAgeHours } : {}),\n policy: {\n ...(typeof params.minConfidence === \"number\"\n ? { minConfidence: params.minConfidence }\n : {}),\n ...(typeof params.minIndependentSources === \"number\"\n ? { minIndependentSources: params.minIndependentSources }\n : {}),\n ...(typeof params.minTierASources === \"number\"\n ? { minTierASources: params.minTierASources }\n : {}),\n },\n },\n });\n}\n\nexport async function fetchNewsPropositionSignal(\n params: NewsPropositionSignalRequest,\n): Promise<NewsPropositionSignal> {\n const question = params.question.trim();\n if (!question) {\n throw new Error(\"question is required.\");\n }\n\n return postGatewayJson<NewsPropositionSignal>({\n path: \"/v1/news/event-proposition-signal\",\n gatewayBase: params.gatewayBase,\n fetchImplementation: params.fetchImplementation,\n body: {\n question,\n ...(params.query?.trim() ? { query: params.query.trim() } : {}),\n ...(params.eventKey?.trim() ? { eventKey: params.eventKey.trim() } : {}),\n ...(params.propositionType?.trim()\n ? { propositionType: params.propositionType.trim() }\n : {}),\n ...(normalizeAsOf(params.asOf) ? { asOf: normalizeAsOf(params.asOf) } : {}),\n ...(typeof params.includePredictionMarkets === \"boolean\"\n ? { includePredictionMarkets: params.includePredictionMarkets }\n : {}),\n ...(typeof params.ingestOnRequest === \"boolean\"\n ? { ingestOnRequest: params.ingestOnRequest }\n : {}),\n ...(typeof params.maxAgeHours === \"number\" ? { maxAgeHours: params.maxAgeHours } : {}),\n ...(typeof params.candidateLimit === \"number\"\n ? { candidateLimit: params.candidateLimit }\n : {}),\n },\n });\n}\n\nexport function evaluateNewsContinuationGate(\n signal: NewsEventSignal | NewsPropositionSignal,\n gate: NewsContinuationGate,\n): NewsContinuationGateResult {\n const blockedAction = gate.onBlocked ?? \"skip\";\n const blockingFactors: string[] = [];\n\n if (gate.mode === \"event\") {\n const eventSignal = signal as NewsEventSignal;\n if (gate.requireTriggerPassed !== false && !eventSignal.triggerPassed) {\n blockingFactors.push(\"trigger_not_passed\");\n }\n if (\n typeof gate.minConfidence === \"number\" &&\n eventSignal.eventConfidence < gate.minConfidence\n ) {\n blockingFactors.push(\"confidence_below_threshold\");\n }\n if (\n typeof gate.maxDataAgeMs === \"number\" &&\n typeof eventSignal.dataAgeMs === \"number\" &&\n eventSignal.dataAgeMs > gate.maxDataAgeMs\n ) {\n blockingFactors.push(\"signal_too_stale\");\n }\n if (\n typeof gate.minIndependentSources === \"number\" &&\n eventSignal.supportingSourceCount < gate.minIndependentSources\n ) {\n blockingFactors.push(\"insufficient_supporting_sources\");\n }\n if (\n typeof gate.minTierASources === \"number\" &&\n eventSignal.tierASourceCount < gate.minTierASources\n ) {\n blockingFactors.push(\"insufficient_tier_a_sources\");\n }\n } else {\n const propositionSignal = signal as NewsPropositionSignal;\n if (\n gate.requireResolvedEvent !== false &&\n propositionSignal.propositionStatus === \"no_matching_event\"\n ) {\n blockingFactors.push(\"no_matching_event\");\n }\n if (\n gate.expectedAnswer &&\n propositionSignal.answer !== gate.expectedAnswer\n ) {\n blockingFactors.push(\"unexpected_answer\");\n }\n if (\n typeof gate.minConfidence === \"number\" &&\n propositionSignal.propositionConfidence < gate.minConfidence\n ) {\n blockingFactors.push(\"confidence_below_threshold\");\n }\n if (\n typeof gate.maxDataAgeMs === \"number\" &&\n typeof propositionSignal.dataAgeMs === \"number\" &&\n propositionSignal.dataAgeMs > gate.maxDataAgeMs\n ) {\n blockingFactors.push(\"signal_too_stale\");\n }\n }\n\n if (blockingFactors.length === 0) {\n return {\n allowed: true,\n action: \"continue\",\n reason: \"All continuation gate checks passed.\",\n matchedRule: gate.mode,\n blockingFactors: [],\n };\n }\n\n return {\n allowed: false,\n action: blockedAction,\n reason: `Blocked by continuation gate: ${blockingFactors.join(\", \")}.`,\n matchedRule: gate.mode,\n blockingFactors,\n };\n}\n\nexport class NewsSignalClient {\n private readonly gatewayBase: string;\n private readonly fetchImplementation: typeof fetch;\n\n constructor(config: NewsSignalClientConfig = {}) {\n this.gatewayBase = resolveNewsGatewayBase(config.gatewayBase);\n this.fetchImplementation = resolveFetchImplementation(config.fetchImplementation);\n }\n\n eventSignal(\n params: Omit<NewsEventSignalRequest, \"gatewayBase\" | \"fetchImplementation\">,\n ) {\n return fetchNewsEventSignal({\n ...params,\n gatewayBase: this.gatewayBase,\n fetchImplementation: this.fetchImplementation,\n });\n }\n\n propositionSignal(\n params: Omit<NewsPropositionSignalRequest, \"gatewayBase\" | \"fetchImplementation\">,\n ) {\n return fetchNewsPropositionSignal({\n ...params,\n gatewayBase: this.gatewayBase,\n fetchImplementation: this.fetchImplementation,\n });\n }\n}\n\nexport { DEFAULT_OPENPOND_GATEWAY_URL };\n","interface ErrorInit {\n cause?: unknown;\n}\n\nexport class AIError extends Error {\n constructor(message: string, options?: ErrorInit) {\n super(message);\n this.name = \"AIError\";\n if (options && \"cause\" in options) {\n (this as unknown as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\nexport interface ResponseErrorDetails {\n status: number;\n statusText: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class AIFetchError extends AIError {\n constructor(message: string, options?: ErrorInit) {\n super(message, options);\n this.name = \"AIFetchError\";\n }\n}\n\nexport class AIResponseError extends AIError {\n readonly status: number;\n readonly statusText: string;\n readonly body?: unknown;\n readonly headers: Record<string, string>;\n\n constructor(details: ResponseErrorDetails, message?: string) {\n super(message ?? `AI response error: ${details.status} ${details.statusText}`);\n this.name = \"AIResponseError\";\n this.status = details.status;\n this.statusText = details.statusText;\n this.body = details.body;\n this.headers = details.headers ?? {};\n }\n}\n\nexport class AIAbortError extends AIError {\n constructor(message = \"AI request aborted\") {\n super(message);\n this.name = \"AIAbortError\";\n }\n}\n","import { AIClientConfig, ResolvedAIClientConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://gateway.openpond.dev\";\nexport const DEFAULT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_MODEL = \"fireworks:accounts/fireworks/models/glm-4p7\";\n\nfunction assertFetchAvailable(fetchImplementation?: typeof fetch): asserts fetchImplementation {\n if (!fetchImplementation) {\n throw new Error(\n \"No fetch implementation available. Provide one via AIClientConfig.fetchImplementation.\",\n );\n }\n}\n\nexport function resolveConfig(config: AIClientConfig = {}): ResolvedAIClientConfig {\n const fetchImplementation = config.fetchImplementation ?? globalThis.fetch;\n assertFetchAvailable(fetchImplementation);\n\n const resolved: ResolvedAIClientConfig = {\n baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n defaultModel: config.defaultModel ?? DEFAULT_MODEL,\n defaultHeaders: {\n \"Content-Type\": \"application/json\",\n ...config.defaultHeaders,\n },\n fetchImplementation,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n };\n\n if (config.apiKey !== undefined) {\n resolved.apiKey = config.apiKey;\n }\n\n return resolved;\n}\n\nexport function mergeHeaders(\n base: Record<string, string>,\n overrides?: Record<string, string>,\n): Record<string, string> {\n if (!overrides) {\n return { ...base };\n }\n\n const merged = { ...base };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) {\n continue;\n }\n\n merged[key] = value;\n }\n return merged;\n}\n","export type ModelProvider = \"openai\" | \"anthropic\" | \"google\" | \"deepseek\" | \"fireworks\" | \"custom\";\n\nexport interface ModelConfig {\n name: string;\n label: string;\n provider: ModelProvider;\n supportsStreaming: boolean;\n supportsTools: boolean;\n reasoning?: boolean;\n aliases?: string[];\n default?: boolean;\n}\n\nconst MODEL_REGISTRY: ModelConfig[] = [\n {\n name: \"fireworks:accounts/fireworks/models/glm-4p7\",\n label: \"GLM-4P7 (Fireworks)\",\n provider: \"fireworks\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"glm-4p7\", \"glm\"],\n default: true,\n },\n {\n name: \"openai/gpt-5-mini\",\n label: \"OpenAI GPT-5 Mini\",\n provider: \"openai\",\n supportsStreaming: true,\n supportsTools: true,\n reasoning: true,\n aliases: [\"gpt-5-mini\", \"gpt5-mini\", \"gpt-5.0-mini\"],\n },\n {\n name: \"anthropic/claude-4-sonnet-20250514\",\n label: \"Claude 4 Sonnet (20250514)\",\n provider: \"anthropic\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"claude-4-sonnet\", \"claude-sonnet\"],\n },\n {\n name: \"google/gemini-2.0-flash-001\",\n label: \"Gemini 2.0 Flash\",\n provider: \"google\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"gemini-2.0-flash\", \"gemini-flash\"],\n },\n {\n name: \"deepseek/deepseek-chat\",\n label: \"DeepSeek Chat\",\n provider: \"deepseek\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"deepseek-chat\", \"deepseek\"],\n },\n];\n\nconst ALIAS_LOOKUP: Record<string, string> = MODEL_REGISTRY.reduce(\n (accumulator, model) => {\n accumulator[model.name.toLowerCase()] = model.name;\n if (model.aliases) {\n for (const alias of model.aliases) {\n accumulator[alias.toLowerCase()] = model.name;\n }\n }\n return accumulator;\n },\n {} as Record<string, string>,\n);\n\nconst DEFAULT_MODEL_NAME =\n MODEL_REGISTRY.find((model) => model.default)?.name ?? MODEL_REGISTRY[0].name;\n\nexport function listModels(): ModelConfig[] {\n return [...MODEL_REGISTRY];\n}\n\nexport function getModelConfig(modelName?: string): ModelConfig | undefined {\n if (!modelName) {\n return MODEL_REGISTRY.find((model) => model.default) ?? MODEL_REGISTRY[0];\n }\n\n const normalized = normalizeModelName(modelName);\n return MODEL_REGISTRY.find((model) => model.name === normalized);\n}\n\nexport function normalizeModelName(modelName?: string): string {\n if (!modelName) {\n return DEFAULT_MODEL_NAME;\n }\n\n const trimmed = modelName.trim();\n if (!trimmed) {\n return DEFAULT_MODEL_NAME;\n }\n\n const directMatch = ALIAS_LOOKUP[trimmed.toLowerCase()];\n if (directMatch) {\n return directMatch;\n }\n\n if (trimmed.includes(\"/\")) {\n return trimmed;\n }\n\n return `openai/${trimmed}`;\n}\n\nexport function isStreamingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsStreaming : true;\n}\n\nexport function isToolCallingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsTools : true;\n}\n","import { ToolDefinition, ToolExecutionPolicy, WebSearchOptions } from \"./types\";\n\nexport const WEBSEARCH_TOOL_NAME = \"websearch\";\n\nexport const WEBSEARCH_TOOL_DEFINITION: ToolDefinition = {\n type: \"function\",\n function: {\n name: WEBSEARCH_TOOL_NAME,\n description:\n \"Search the web using the OpenPond search engine. Returns relevant results with titles, URLs, and text content.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query\",\n },\n limit: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 5)\",\n },\n },\n required: [\"query\"],\n },\n },\n};\n\nexport function resolveToolset(\n tools: ToolDefinition[] | undefined,\n policy: ToolExecutionPolicy | undefined,\n): ToolDefinition[] | undefined {\n if (!policy) {\n return tools;\n }\n\n const resolved: ToolDefinition[] = tools ? [...tools] : [];\n\n if (policy.webSearch) {\n const alreadyIncluded = resolved.some(\n (tool) => tool.type === \"function\" && tool.function?.name === WEBSEARCH_TOOL_NAME,\n );\n if (!alreadyIncluded) {\n resolved.push(materializeWebSearchTool(policy.webSearch));\n }\n }\n\n return resolved.length > 0 ? resolved : undefined;\n}\n\nfunction materializeWebSearchTool(options: WebSearchOptions): ToolDefinition {\n if (!options || Object.keys(options).length === 0) {\n return WEBSEARCH_TOOL_DEFINITION;\n }\n\n const baseParameters =\n WEBSEARCH_TOOL_DEFINITION.function.parameters ?? ({} as Record<string, unknown>);\n const baseProperties = (baseParameters.properties as Record<string, unknown> | undefined) ?? {};\n\n const properties: Record<string, unknown> = { ...baseProperties };\n\n if (options.limit !== undefined) {\n const existingLimit = baseProperties[\"limit\"];\n const limitSchema: Record<string, unknown> =\n typeof existingLimit === \"object\" && existingLimit !== null\n ? { ...(existingLimit as Record<string, unknown>) }\n : {\n type: \"number\",\n description: \"Maximum number of results to return (default: 5)\",\n };\n\n limitSchema.default = options.limit;\n properties.limit = limitSchema;\n }\n\n if (options.includeImages) {\n properties.includeImages = {\n type: \"boolean\",\n description: \"Whether to include representative images in results.\",\n default: true,\n };\n }\n\n return {\n ...WEBSEARCH_TOOL_DEFINITION,\n function: {\n ...WEBSEARCH_TOOL_DEFINITION.function,\n parameters: {\n ...WEBSEARCH_TOOL_DEFINITION.function.parameters,\n properties,\n },\n },\n } as ToolDefinition;\n}\n","import { AIError } from \"./errors\";\nimport { ChatMessage, ChatMessageContentPart } from \"./types\";\n\nexport interface FlattenMessageContentOptions {\n /**\n * String used to join individual text segments when the content array contains multiple text parts.\n * Defaults to an empty string.\n */\n separator?: string;\n /**\n * When true, JSON stringifies non-text segments instead of discarding them.\n * Defaults to false (skip non-text parts).\n */\n includeUnknown?: boolean;\n}\n\nexport function flattenMessageContent(\n content: ChatMessage[\"content\"],\n options: FlattenMessageContentOptions = {},\n): string | undefined {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return undefined;\n }\n\n const separator = options.separator ?? \"\";\n const collected: string[] = [];\n\n for (const part of content) {\n const text = extractTextPart(part, options);\n if (text) {\n collected.push(text);\n }\n }\n\n if (collected.length === 0) {\n return undefined;\n }\n\n return collected.join(separator);\n}\n\nexport interface EnsureTextContentOptions extends FlattenMessageContentOptions {\n errorMessage?: string;\n}\n\nexport function ensureTextContent(\n message: ChatMessage,\n options?: EnsureTextContentOptions,\n): string {\n const flattened = flattenMessageContent(message.content, options);\n if (flattened !== undefined) {\n return flattened;\n }\n\n throw new AIError(options?.errorMessage ?? \"Assistant response did not contain textual content.\");\n}\n\nfunction extractTextPart(\n part: ChatMessageContentPart,\n options: FlattenMessageContentOptions,\n): string | undefined {\n if (!part || typeof part !== \"object\") {\n return undefined;\n }\n\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n\n if (options.includeUnknown) {\n try {\n return JSON.stringify(part);\n } catch (error) {\n return `[unserializable_part: ${String(error)}]`;\n }\n }\n\n return undefined;\n}\n","import { resolveConfig, mergeHeaders } from \"./config\";\nimport {\n GenerateTextOptions,\n GenerateTextResult,\n AIClientConfig,\n ChatCompletionResponse,\n ChatCompletionChoice,\n ChatCompletionUsage,\n ResolvedAIClientConfig,\n StreamTextOptions,\n StreamTextResult,\n GenerationParameters,\n AIRequestMetadata,\n ChatMessage,\n StreamingEventHandlers,\n} from \"./types\";\nimport { normalizeModelName, isToolCallingSupported, listModels } from \"./models\";\nimport { resolveToolset } from \"./tools\";\nimport { flattenMessageContent } from \"./messages\";\nimport { AIFetchError, AIResponseError, AIAbortError, AIError } from \"./errors\";\n\nconst CHAT_COMPLETIONS_PATH = \"/v1/chat/completions\";\n\nexport interface AIClient {\n readonly config: ResolvedAIClientConfig;\n generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;\n streamText(options: StreamTextOptions): Promise<StreamTextResult>;\n listModels: typeof listModels;\n}\n\ninterface ChatCompletionRequestPayload {\n model: string;\n messages: GenerateTextOptions[\"messages\"];\n temperature?: number;\n top_p?: number;\n max_tokens?: number;\n stop?: string | string[];\n presence_penalty?: number;\n frequency_penalty?: number;\n tool_choice?: GenerateTextOptions[\"toolChoice\"];\n tools?: GenerateTextOptions[\"tools\"];\n stream?: boolean;\n response_format?: GenerationParameters[\"responseFormat\"];\n metadata?: Record<string, unknown>;\n stream_options?: {\n include_usage?: boolean;\n };\n}\n\ninterface AbortBundle {\n signal: AbortSignal;\n abort: () => void;\n cleanup: () => void;\n}\n\nexport function createAIClient(config: AIClientConfig = {}): AIClient {\n const resolved = resolveConfig(config);\n\n return {\n get config() {\n return resolved;\n },\n async generateText(options) {\n return generateText(options, config);\n },\n async streamText(options) {\n return streamText(options, config);\n },\n listModels,\n };\n}\n\nexport async function generateText(\n options: GenerateTextOptions,\n clientConfig: AIClientConfig = {},\n): Promise<GenerateTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const payload = buildRequestPayload(options, model, {\n allowTools: isToolCallingSupported(model),\n });\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs,\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n } finally {\n abortBundle.cleanup();\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n const data = (await response.json()) as ChatCompletionResponse;\n const primaryChoice = data.choices.find(isPrimaryChoice);\n\n if (!primaryChoice) {\n throw new AIResponseError(\n {\n status: response.status,\n statusText: response.statusText,\n body: data,\n },\n \"Gateway response did not contain a valid choice\",\n );\n }\n\n const result: GenerateTextResult = {\n id: data.id,\n model: data.model,\n message: primaryChoice.message,\n raw: data,\n };\n\n if (primaryChoice.finish_reason !== undefined) {\n result.finishReason = primaryChoice.finish_reason;\n }\n\n if (data.usage) {\n result.usage = data.usage;\n }\n\n return result;\n}\n\nexport async function streamText(\n options: StreamTextOptions,\n clientConfig: AIClientConfig = {},\n): Promise<StreamTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const streamExtras = buildStreamMetadataExtras(options);\n const payload = buildRequestPayload(\n options,\n model,\n {\n allowTools: isToolCallingSupported(model),\n },\n streamExtras,\n );\n\n payload.stream = true;\n if (options.includeUsage) {\n payload.stream_options = { include_usage: true };\n }\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs,\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n abortBundle.cleanup();\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n if (!response.body) {\n abortBundle.cleanup();\n throw new AIFetchError(\"Streaming response did not include a readable body\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const handlers = options.handlers ?? {};\n\n let finishedResolve: () => void;\n let finishedReject: (reason?: unknown) => void;\n const finished = new Promise<void>((resolve, reject) => {\n finishedResolve = resolve;\n finishedReject = reject;\n });\n\n let settled = false;\n\n const resolveStream = () => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onDone?.();\n finishedResolve();\n } catch (error) {\n settled = false; // allow rejectError to run with handler error\n rejectStream(error);\n }\n };\n\n const rejectStream = (reason: unknown) => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onError?.(reason);\n } catch (handlerError) {\n reason = handlerError;\n }\n finishedReject(reason);\n };\n\n const abort = () => abortBundle.abort();\n\n (async () => {\n let buffer = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n buffer += decoder.decode();\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n if (buffer.trim().length > 0) {\n if (processStreamEventChunk(buffer, handlers)) {\n break;\n }\n }\n resolveStream();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\n let boundaryIndex: number;\n while ((boundaryIndex = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const chunk = buffer.slice(0, boundaryIndex);\n buffer = buffer.slice(boundaryIndex + 2);\n if (!chunk) {\n continue;\n }\n if (processStreamEventChunk(chunk, handlers)) {\n await reader.cancel().catch(() => undefined);\n resolveStream();\n return;\n }\n }\n }\n } catch (error) {\n if (abortBundle.signal.aborted) {\n rejectStream(toAbortError(abortBundle.signal.reason ?? error));\n } else {\n rejectStream(error);\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // ignore release errors\n }\n abortBundle.cleanup();\n }\n })().catch((error) => {\n rejectStream(error);\n });\n\n return {\n abort,\n finished,\n };\n\n function processStreamEventChunk(chunk: string, eventHandlers: StreamingEventHandlers): boolean {\n const dataString = extractSseData(chunk);\n if (dataString == null) {\n return false;\n }\n\n const trimmed = dataString.trim();\n if (trimmed === \"[DONE]\") {\n return true;\n }\n\n let payload: unknown;\n try {\n payload = JSON.parse(dataString);\n } catch (error) {\n rejectStream(new AIError(\"Failed to parse streaming payload\", { cause: error }));\n return true;\n }\n\n try {\n handleStreamPayload(payload, eventHandlers);\n } catch (error) {\n rejectStream(error);\n return true;\n }\n\n return false;\n }\n\n function handleStreamPayload(payload: unknown, eventHandlers: StreamingEventHandlers): void {\n if (!payload || typeof payload !== \"object\") {\n return;\n }\n\n if (\"error\" in payload && payload.error) {\n const message =\n typeof payload.error === \"string\"\n ? payload.error\n : (payload.error as { message?: string }).message;\n throw new AIError(message ?? \"AI stream returned an error payload\");\n }\n\n const structured = payload as {\n choices?: Array<{ delta?: unknown }>;\n usage?: ChatCompletionUsage;\n };\n\n if (Array.isArray(structured.choices)) {\n for (const choice of structured.choices) {\n if (!choice || typeof choice !== \"object\") {\n continue;\n }\n const delta = (choice as { delta?: unknown }).delta;\n if (!delta || typeof delta !== \"object\") {\n continue;\n }\n const deltaObject = delta as Record<string, unknown>;\n\n const textDelta = extractDeltaText(deltaObject.content);\n if (textDelta) {\n eventHandlers.onTextDelta?.(textDelta);\n }\n\n const reasoningDelta = extractDeltaText(deltaObject.reasoning);\n if (reasoningDelta) {\n eventHandlers.onReasoningDelta?.(reasoningDelta);\n }\n\n if (deltaObject.tool_calls !== undefined) {\n eventHandlers.onToolCallDelta?.(deltaObject.tool_calls);\n }\n }\n }\n\n if (structured.usage) {\n eventHandlers.onUsage?.(structured.usage);\n }\n }\n\n function extractDeltaText(value: unknown): string | undefined {\n if (!value) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return flattenMessageContent(value as ChatMessage[\"content\"]);\n }\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"content\" in value &&\n Array.isArray((value as { content?: unknown }).content)\n ) {\n return flattenMessageContent(\n ((value as { content?: ChatMessage[\"content\"] }).content ?? []) as ChatMessage[\"content\"],\n );\n }\n\n return undefined;\n }\n\n function extractSseData(chunk: string): string | null {\n const lines = chunk.split(\"\\n\");\n const dataLines: string[] = [];\n for (const rawLine of lines) {\n if (!rawLine) {\n continue;\n }\n const match = /^data:(.*)$/.exec(rawLine);\n if (!match) {\n continue;\n }\n\n const value = match[1];\n dataLines.push(value.startsWith(\" \") ? value.slice(1) : value);\n }\n\n if (dataLines.length === 0) {\n return null;\n }\n\n return dataLines.join(\"\\n\");\n }\n}\n\nfunction buildStreamMetadataExtras(\n options: StreamTextOptions,\n): Record<string, unknown> | undefined {\n const streamConfig: Record<string, unknown> = {};\n\n if (options.sendReasoning !== undefined) {\n streamConfig.sendReasoning = options.sendReasoning;\n }\n\n if (options.includeUsage !== undefined) {\n streamConfig.includeUsage = options.includeUsage;\n }\n\n if (Object.keys(streamConfig).length === 0) {\n return undefined;\n }\n\n return {\n openpond: {\n stream: streamConfig,\n },\n } satisfies Record<string, unknown>;\n}\n\nfunction buildRequestPayload(\n options: GenerateTextOptions,\n model: string,\n capabilities: { allowTools: boolean },\n metadataExtras?: Record<string, unknown>,\n): ChatCompletionRequestPayload {\n const payload: ChatCompletionRequestPayload = {\n model,\n messages: options.messages,\n };\n\n const generation: GenerationParameters = options.generation ?? {};\n\n assignIfDefined(payload, \"temperature\", generation.temperature);\n assignIfDefined(payload, \"top_p\", generation.topP);\n assignIfDefined(payload, \"max_tokens\", generation.maxTokens);\n assignIfDefined(payload, \"stop\", generation.stop);\n assignIfDefined(payload, \"frequency_penalty\", generation.frequencyPenalty);\n assignIfDefined(payload, \"presence_penalty\", generation.presencePenalty);\n assignIfDefined(payload, \"response_format\", generation.responseFormat);\n\n const toolExecution = options.toolExecution;\n const enableTools = toolExecution?.enableTools ?? true;\n if (enableTools && capabilities.allowTools) {\n const resolvedTools = resolveToolset(options.tools, toolExecution);\n assignIfDefined(payload, \"tools\", resolvedTools);\n assignIfDefined(payload, \"tool_choice\", options.toolChoice);\n } else if (options.toolChoice && options.toolChoice !== \"none\") {\n payload.tool_choice = \"none\";\n }\n\n const metadataPayload = buildMetadataPayload(options.metadata, toolExecution, metadataExtras);\n if (metadataPayload) {\n payload.metadata = metadataPayload;\n }\n\n return payload;\n}\n\nfunction assignIfDefined<T extends object, K extends keyof T>(\n target: T,\n key: K,\n value: T[K] | undefined,\n): void {\n if (value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction buildUrl(baseUrl: string, path: string): string {\n const sanitizedBase = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n return `${sanitizedBase}${path}`;\n}\n\nfunction createAbortBundle(\n upstreamSignal: AbortSignal | undefined,\n timeoutMs: number | undefined,\n): AbortBundle {\n const controller = new AbortController();\n const cleanupCallbacks: Array<() => void> = [];\n\n if (upstreamSignal) {\n if (upstreamSignal.aborted) {\n controller.abort(upstreamSignal.reason);\n } else {\n const onAbort = () => controller.abort(upstreamSignal.reason);\n upstreamSignal.addEventListener(\"abort\", onAbort, { once: true });\n cleanupCallbacks.push(() => upstreamSignal.removeEventListener(\"abort\", onAbort));\n }\n }\n\n if (timeoutMs && timeoutMs > 0) {\n const timeoutId = setTimeout(() => {\n controller.abort(new Error(\"AI request timed out\"));\n }, timeoutMs);\n cleanupCallbacks.push(() => clearTimeout(timeoutId));\n }\n\n return {\n signal: controller.signal,\n abort: () => controller.abort(),\n cleanup: () => {\n cleanupCallbacks.forEach((fn) => fn());\n },\n };\n}\n\nfunction collectHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nfunction buildMetadataPayload(\n base: AIRequestMetadata | undefined,\n toolExecution: GenerateTextOptions[\"toolExecution\"] | undefined,\n extras?: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const metadata: Record<string, unknown> = base ? { ...base } : {};\n\n if (extras) {\n for (const [key, value] of Object.entries(extras)) {\n if (value === undefined) {\n continue;\n }\n\n if (key === \"openpond\" && typeof value === \"object\" && value !== null) {\n const existing = metadata.openpond;\n metadata.openpond = {\n ...(typeof existing === \"object\" && existing !== null\n ? (existing as Record<string, unknown>)\n : undefined),\n ...(value as Record<string, unknown>),\n };\n } else {\n metadata[key] = value;\n }\n }\n }\n\n if (toolExecution) {\n const existing = metadata.openpond;\n const openpond = {\n ...(typeof existing === \"object\" && existing !== null\n ? (existing as Record<string, unknown>)\n : undefined),\n toolExecution,\n };\n metadata.openpond = openpond;\n }\n\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nasync function safeParseJson(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"application/json\")) {\n return undefined;\n }\n\n try {\n return await response.json();\n } catch (error) {\n return { error: \"Failed to parse error body\", cause: String(error) };\n }\n}\n\nfunction isPrimaryChoice(choice: ChatCompletionChoice): boolean {\n return choice.index === 0 || choice.message !== undefined;\n}\n\nfunction toAbortError(reason: unknown): AIAbortError {\n if (reason instanceof AIAbortError) {\n return reason;\n }\n\n if (reason instanceof Error) {\n if (reason.name === \"AbortError\") {\n return new AIAbortError(reason.message || \"AI request aborted\");\n }\n return new AIAbortError(reason.message);\n }\n\n return new AIAbortError(String(reason ?? \"AI request aborted\"));\n}\n\nexport { listModels };\n","import { z } from \"zod\";\n\nexport const BACKTEST_DECISION_MODE = \"backtest_decisions\" as const;\nexport type BacktestMode = typeof BACKTEST_DECISION_MODE;\n\nexport const backtestDecisionRequestSchema = z\n .object({\n mode: z.literal(BACKTEST_DECISION_MODE),\n source: z.string().min(1).optional(),\n symbol: z.string().min(1).optional(),\n lookbackDays: z.number().positive().optional(),\n timeframeStart: z.string().optional(),\n timeframeEnd: z.string().optional(),\n from: z.number().int().nonnegative().optional(),\n to: z.number().int().nonnegative().optional(),\n initialEquityUsd: z.number().positive().optional(),\n })\n .strict();\n\nexport type BacktestDecisionRequest = z.infer<typeof backtestDecisionRequestSchema>;\n\nexport type BacktestResolution = \"1\" | \"5\" | \"15\" | \"30\" | \"60\" | \"240\" | \"1D\" | \"1W\";\n\nconst RESOLUTION_SECONDS: Record<BacktestResolution, number> = {\n \"1\": 60,\n \"5\": 300,\n \"15\": 900,\n \"30\": 1800,\n \"60\": 3600,\n \"240\": 14400,\n \"1D\": 86400,\n \"1W\": 604800,\n};\n\nexport function parseTimeToSeconds(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return Math.max(0, Math.trunc(value));\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const trimmed = value.trim();\n if (/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n const numeric = Number.parseFloat(trimmed);\n return Math.max(0, Math.trunc(numeric));\n }\n const parsedDate = new Date(value);\n if (!Number.isNaN(parsedDate.getTime())) {\n return Math.max(0, Math.trunc(parsedDate.getTime() / 1000));\n }\n }\n return null;\n}\n\nexport function resolutionToSeconds(resolution: BacktestResolution): number {\n return RESOLUTION_SECONDS[resolution];\n}\n\nexport function estimateCountBack(params: {\n fallback: number;\n lookbackDays?: number;\n resolution: BacktestResolution;\n fromSeconds?: number;\n toSeconds?: number;\n minCountBack?: number;\n bufferBars?: number;\n}): number {\n const {\n fallback,\n lookbackDays,\n resolution,\n fromSeconds,\n toSeconds,\n minCountBack = 50,\n bufferBars = 5,\n } = params;\n\n if (typeof lookbackDays === \"number\" && Number.isFinite(lookbackDays) && lookbackDays > 0) {\n const interval = resolutionToSeconds(resolution);\n const bars = Math.ceil((lookbackDays * 86400) / interval);\n return Math.max(minCountBack, bars + bufferBars);\n }\n\n if (\n typeof fromSeconds === \"number\" &&\n Number.isFinite(fromSeconds) &&\n typeof toSeconds === \"number\" &&\n Number.isFinite(toSeconds) &&\n toSeconds > fromSeconds\n ) {\n const interval = resolutionToSeconds(resolution);\n const bars = Math.ceil((toSeconds - fromSeconds) / interval);\n return Math.max(minCountBack, bars + bufferBars);\n }\n\n return fallback;\n}\n\nexport function resolveBacktestMode(value: unknown): BacktestMode | null {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim().toLowerCase();\n return normalized === BACKTEST_DECISION_MODE ? BACKTEST_DECISION_MODE : null;\n}\n\nexport type ResolvedBacktestWindow = {\n fromSeconds?: number;\n toSeconds?: number;\n countBack: number;\n};\n\nexport function resolveBacktestWindow(params: {\n fallbackCountBack: number;\n lookbackDays?: unknown;\n resolution: BacktestResolution;\n from?: unknown;\n to?: unknown;\n timeframeStart?: unknown;\n timeframeEnd?: unknown;\n minCountBack?: number;\n bufferBars?: number;\n}): ResolvedBacktestWindow {\n const fromSeconds = parseTimeToSeconds(params.from) ?? parseTimeToSeconds(params.timeframeStart);\n const toSeconds = parseTimeToSeconds(params.to) ?? parseTimeToSeconds(params.timeframeEnd);\n const hasWindow =\n fromSeconds != null &&\n toSeconds != null &&\n Number.isFinite(fromSeconds) &&\n Number.isFinite(toSeconds) &&\n toSeconds > fromSeconds;\n\n const resolvedFrom = hasWindow ? fromSeconds : undefined;\n const resolvedTo = hasWindow ? toSeconds : undefined;\n const lookbackDays =\n typeof params.lookbackDays === \"number\" && Number.isFinite(params.lookbackDays)\n ? params.lookbackDays\n : undefined;\n\n const countBack = estimateCountBack({\n fallback: params.fallbackCountBack,\n resolution: params.resolution,\n ...(lookbackDays != null ? { lookbackDays } : {}),\n ...(resolvedFrom != null ? { fromSeconds: resolvedFrom } : {}),\n ...(resolvedTo != null ? { toSeconds: resolvedTo } : {}),\n ...(typeof params.minCountBack === \"number\" ? { minCountBack: params.minCountBack } : {}),\n ...(typeof params.bufferBars === \"number\" ? { bufferBars: params.bufferBars } : {}),\n });\n\n return {\n ...(resolvedFrom != null ? { fromSeconds: resolvedFrom } : {}),\n ...(resolvedTo != null ? { toSeconds: resolvedTo } : {}),\n countBack,\n };\n}\n\nexport function resolveBacktestAccountValueUsd(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value) && value > 0) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number.parseFloat(value.trim());\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n return undefined;\n}\n\nexport type BacktestDecisionSeriesInput = {\n symbol?: string;\n timeframeStart?: string;\n timeframeEnd?: string;\n from?: number;\n to?: number;\n lookbackDays?: number;\n accountValueUsd?: number;\n};\n\nexport function buildBacktestDecisionSeriesInput(\n request: Partial<BacktestDecisionRequest>,\n): BacktestDecisionSeriesInput {\n const accountValueUsd = resolveBacktestAccountValueUsd(request.initialEquityUsd);\n return {\n ...(request.symbol ? { symbol: request.symbol } : {}),\n ...(request.timeframeStart ? { timeframeStart: request.timeframeStart } : {}),\n ...(request.timeframeEnd ? { timeframeEnd: request.timeframeEnd } : {}),\n ...(request.from != null ? { from: request.from } : {}),\n ...(request.to != null ? { to: request.to } : {}),\n ...(request.lookbackDays != null ? { lookbackDays: request.lookbackDays } : {}),\n ...(accountValueUsd != null ? { accountValueUsd } : {}),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/x402/types.ts","../src/x402/helpers.ts","../src/x402/payment.ts","../src/adapters/mcp.ts","../src/runtime/index.ts","../src/types/index.ts","../src/x402/client.ts","../src/wallet/constants.ts","../src/wallet/nonces.ts","../src/wallet/providers/private-key.ts","../src/wallet/providers/turnkey.ts","../src/wallet/env.ts","../src/wallet/index.ts","../src/store/index.ts","../src/adapters/hyperliquid/base.ts","../src/adapters/hyperliquid/symbols.ts","../src/adapters/hyperliquid/info.ts","../src/adapters/hyperliquid/exchange.ts","../src/adapters/hyperliquid/env.ts","../src/adapters/hyperliquid/strategy.ts","../src/adapters/hyperliquid/order-utils.ts","../src/adapters/hyperliquid/state-readers.ts","../src/adapters/hyperliquid/market-data.ts","../src/adapters/hyperliquid/actions.ts","../src/adapters/hyperliquid/tpsl.ts","../src/adapters/hyperliquid/risk-utils.ts","../src/adapters/hyperliquid/utils.ts","../src/adapters/hyperliquid/index.ts","../src/adapters/polymarket/base.ts","../src/adapters/polymarket/exchange.ts","../src/adapters/polymarket/info.ts","../src/adapters/polymarket/bootstrap.ts","../src/adapters/news/signals.ts","../src/ai/errors.ts","../src/ai/config.ts","../src/ai/models.ts","../src/ai/tools.ts","../src/ai/messages.ts","../src/ai/client.ts","../src/backtest/index.ts"],"names":["z","HTTP_METHODS","baseSepolia","privateKeyToAccount","http","createWalletClient","createPublicClient","tokens","path","base","token","universe","wallet","encodeMsgpack","UNKNOWN_SYMBOL","normalizeSpotTokenName","canonicalPair","quote","normalized","displaySymbol","orderSymbol","marketDataCoin","symbol","parsedWeight","weight","budgetUsd","desired","delta","maxDecimals","descriptor","meta","resolveRequiredNonce","assertPositiveDecimalInput","placeHyperliquidOrder","parseUnits","encodeFunctionData","erc20Abi","ZERO_ADDRESS","toDecimalString","requestJson","DEFAULT_OPENPOND_GATEWAY_URL","resolveConfig","resolve","payload"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\n\nexport const X402_VERSION = 1;\nexport const HEADER_X402 = \"X-PAYMENT\";\nexport const HEADER_PAYMENT_RESPONSE = \"X-PAYMENT-RESPONSE\";\n\nexport const x402RequirementSchema = z.object({\n scheme: z.string().min(1),\n network: z.string().min(1),\n maxAmountRequired: z.string().min(1),\n asset: z.string().min(1),\n payTo: z.string().min(1),\n resource: z.string().optional(),\n description: z.string().optional(),\n mimeType: z.string().optional(),\n outputSchema: z.unknown().optional(),\n maxTimeoutSeconds: z.number().int().positive().optional(),\n extra: z.record(z.string(), z.unknown()).nullable().optional(),\n});\n\nexport type X402Requirement = z.infer<typeof x402RequirementSchema>;\n\nexport const x402PaymentHeaderSchema = z.object({\n x402Version: z.number().int().positive(),\n scheme: z.string().min(1),\n network: z.string().min(1),\n correlationId: z.string().optional(),\n payload: z.unknown(),\n});\n\nexport type X402PaymentHeader = z.infer<typeof x402PaymentHeaderSchema>;\n\nexport interface X402RequirementsResponse {\n x402Version: number;\n error?: string;\n accepts: X402Requirement[];\n}\n\nexport interface X402PaymentAttempt {\n type: \"x402\";\n headerName: typeof HEADER_X402;\n raw: string;\n payload: X402PaymentHeader;\n}\n\nexport interface X402VerificationResult {\n success: boolean;\n metadata?: {\n optionId: string;\n verifier: string;\n [key: string]: unknown;\n };\n failure?: {\n reason: string;\n code: string;\n };\n responseHeaders?: Record<string, string>;\n}\n\nexport interface X402FacilitatorConfig {\n url: string;\n verifyPath?: string;\n settlePath?: string;\n apiKeyHeader?: string;\n}\n\nexport interface CurrencySpec {\n decimals: number;\n symbol: string;\n network: string;\n assetAddress: string;\n}\n\nexport const SUPPORTED_CURRENCIES: Record<string, CurrencySpec> = {\n USDC: {\n decimals: 6,\n symbol: \"USDC\",\n network: \"base\",\n assetAddress: \"0x833589fCD6eDb6E08f4c7C37b7b4c6e997E08A43\",\n },\n};\n\nexport const DEFAULT_FACILITATOR: X402FacilitatorConfig = {\n url: \"https://facilitator.x402.rs\",\n verifyPath: \"/verify\",\n settlePath: \"/settle\",\n apiKeyHeader: \"Authorization\",\n};\n","import { z } from \"zod\";\nimport {\n HEADER_X402,\n HEADER_PAYMENT_RESPONSE,\n X402_VERSION,\n x402PaymentHeaderSchema,\n x402RequirementSchema,\n type X402PaymentAttempt,\n type X402Requirement,\n type X402VerificationResult,\n type X402FacilitatorConfig,\n} from \"./types\";\n\nexport interface X402PaymentDefinition {\n amount: string;\n currency: { code: string; symbol: string; decimals: number };\n asset: { symbol: string; network: string; address: string; decimals: number };\n payTo: string;\n resource?: string;\n description?: string;\n scheme: string;\n network: string;\n facilitator: X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport function createX402PaymentRequired(definition: X402PaymentDefinition): Response {\n const requirement = toX402Requirement(definition);\n\n // Build full payment requirements response\n const body = {\n schemaVersion: 1,\n message: definition.description ?? \"Payment required\",\n resource: definition.resource,\n accepts: [\n {\n id: \"x402\",\n title: `Pay ${definition.amount} ${definition.currency.code}`,\n description: definition.description,\n amount: {\n value: definition.amount,\n currency: {\n code: definition.currency.code,\n symbol: definition.currency.symbol,\n decimals: definition.currency.decimals,\n kind: \"crypto\",\n },\n },\n asset: {\n symbol: definition.asset.symbol,\n network: definition.asset.network,\n address: definition.asset.address,\n decimals: definition.asset.decimals,\n standard: \"erc20\",\n },\n payTo: definition.payTo,\n resource: definition.resource,\n proof: {\n mode: \"x402\",\n scheme: definition.scheme,\n network: definition.network,\n version: X402_VERSION,\n facilitator: definition.facilitator,\n verifier: \"x402:facilitator\",\n },\n },\n ],\n metadata: definition.metadata ?? {},\n x402: {\n x402Version: X402_VERSION,\n error: definition.description ?? \"Payment required\",\n accepts: [requirement],\n },\n };\n\n return new Response(JSON.stringify(body), {\n status: 402,\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n}\n\nexport function extractX402Attempt(request: Request): X402PaymentAttempt | null {\n const raw = request.headers.get(HEADER_X402);\n if (!raw) {\n return null;\n }\n\n try {\n const payload = decodeJson(raw, x402PaymentHeaderSchema);\n return {\n type: \"x402\",\n headerName: HEADER_X402,\n raw,\n payload,\n };\n } catch {\n return null;\n }\n}\n\nexport async function verifyX402Payment(\n attempt: X402PaymentAttempt,\n definition: X402PaymentDefinition,\n options: {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n timeout?: number;\n } = {},\n): Promise<X402VerificationResult> {\n const fetchImpl = options.fetchImpl ?? fetch;\n const timeout = options.timeout ?? 25000; // 25 second default timeout\n const facilitator = definition.facilitator;\n\n const verifierUrl = new URL(\n facilitator.verifyPath ?? \"/verify\",\n ensureTrailingSlash(facilitator.url),\n ).toString();\n\n const requirement = toX402Requirement(definition);\n const headers = buildFacilitatorHeaders(facilitator);\n\n try {\n const verifyBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /verify\", {\n url: verifierUrl,\n fullBody: JSON.stringify(verifyBody, null, 2),\n });\n const verifyResponse = await Promise.race([\n fetchImpl(verifierUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(verifyBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Verification timeout after ${timeout}ms`)), timeout),\n ),\n ]);\n console.log(\"[x402] Facilitator /verify response\", { status: verifyResponse.status });\n\n if (!verifyResponse.ok) {\n const errorText = await verifyResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /verify error\", {\n status: verifyResponse.status,\n body: errorText,\n });\n return {\n success: false,\n failure: {\n reason: `Facilitator verify request failed: ${verifyResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"verification_failed\",\n },\n };\n }\n\n const verifyPayload = (await verifyResponse.json()) as {\n isValid: boolean;\n invalidReason?: string | null;\n };\n\n if (!verifyPayload.isValid) {\n return {\n success: false,\n failure: {\n reason: verifyPayload.invalidReason ?? \"Facilitator verification failed\",\n code: \"verification_failed\",\n },\n };\n }\n\n const responseHeaders: Record<string, string> = {};\n if (options.settle) {\n const settleUrl = new URL(\n facilitator.settlePath ?? \"/settle\",\n ensureTrailingSlash(facilitator.url),\n ).toString();\n\n try {\n const settleBody = {\n x402Version: attempt.payload.x402Version,\n paymentPayload: attempt.payload,\n paymentRequirements: requirement,\n };\n console.log(\"[x402] Calling facilitator /settle\", {\n url: settleUrl,\n bodyPreview: JSON.stringify(settleBody).substring(0, 300),\n });\n const settleResponse = await Promise.race([\n fetchImpl(settleUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(settleBody),\n }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`Settlement timeout after ${timeout}ms`)), timeout),\n ),\n ]);\n console.log(\"[x402] Facilitator /settle response\", { status: settleResponse.status });\n\n if (!settleResponse.ok) {\n const errorText = await settleResponse.text().catch(() => \"\");\n console.error(\"[x402] Facilitator /settle error\", {\n status: settleResponse.status,\n body: errorText,\n });\n return {\n success: false,\n failure: {\n reason: `Facilitator settlement failed: ${settleResponse.status}${errorText ? ` - ${errorText}` : \"\"}`,\n code: \"settlement_failed\",\n },\n };\n }\n\n const settlePayload = (await settleResponse.json()) as {\n txHash?: string;\n [key: string]: unknown;\n };\n console.log(\"[x402] Facilitator /settle success\", { txHash: settlePayload.txHash });\n if (settlePayload.txHash) {\n responseHeaders[HEADER_PAYMENT_RESPONSE] = JSON.stringify({\n settled: true,\n txHash: settlePayload.txHash,\n });\n }\n } catch (error) {\n console.error(\"[x402] Settlement exception\", {\n error: error instanceof Error ? error.message : String(error),\n });\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Settlement failed\",\n code: \"settlement_failed\",\n },\n };\n }\n }\n\n const result: X402VerificationResult = {\n success: true,\n metadata: {\n optionId: \"x402\",\n verifier: \"x402:facilitator\",\n amount: definition.amount,\n currency: definition.currency.code,\n network: definition.network,\n },\n };\n\n if (Object.keys(responseHeaders).length > 0) {\n result.responseHeaders = responseHeaders;\n }\n\n return result;\n } catch (error) {\n return {\n success: false,\n failure: {\n reason: error instanceof Error ? error.message : \"Unknown error\",\n code: \"verification_failed\",\n },\n };\n }\n}\n\nfunction toX402Requirement(definition: X402PaymentDefinition): X402Requirement {\n const decimals = definition.asset.decimals;\n const units = decimalToBaseUnits(definition.amount, decimals);\n\n return x402RequirementSchema.parse({\n scheme: definition.scheme,\n network: definition.network,\n maxAmountRequired: units,\n asset: definition.asset.address,\n payTo: definition.payTo,\n resource: definition.resource,\n description: definition.description,\n mimeType: \"application/json\",\n maxTimeoutSeconds: 900,\n extra: {\n symbol: definition.asset.symbol,\n currencyCode: definition.currency.code,\n decimals,\n },\n });\n}\n\nfunction decimalToBaseUnits(value: string, decimals: number): string {\n const [whole, fraction = \"\"] = value.split(\".\");\n const sanitizedFraction = fraction.slice(0, decimals);\n const paddedFraction = sanitizedFraction.padEnd(decimals, \"0\");\n const combined = `${whole}${paddedFraction}`.replace(/^0+/, \"\");\n return combined.length > 0 ? combined : \"0\";\n}\n\nfunction decodeJson<T>(value: string, schema: z.ZodSchema<T>): T {\n const base64 = normalizeBase64(value);\n const json = Buffer.from(base64, \"base64\").toString(\"utf-8\");\n const parsed = JSON.parse(json);\n return schema.parse(parsed);\n}\n\nfunction normalizeBase64(input: string): string {\n if (/^[A-Za-z0-9+/=]+$/.test(input)) {\n return input;\n }\n const restored = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const paddingNeeded = (4 - (restored.length % 4)) % 4;\n return restored + \"=\".repeat(paddingNeeded);\n}\n\nfunction buildFacilitatorHeaders(facilitator: X402FacilitatorConfig): Record<string, string> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (facilitator.apiKeyHeader && process.env.X402_FACILITATOR_API_KEY) {\n headers[facilitator.apiKeyHeader] = process.env.X402_FACILITATOR_API_KEY;\n }\n return headers;\n}\n\nfunction ensureTrailingSlash(url: string): string {\n return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nexport const PAYMENT_HEADERS = [HEADER_X402, HEADER_PAYMENT_RESPONSE] as const;\n","import {\n createX402PaymentRequired,\n extractX402Attempt,\n verifyX402Payment,\n PAYMENT_HEADERS,\n type X402PaymentDefinition,\n} from \"./helpers\";\nimport {\n SUPPORTED_CURRENCIES,\n DEFAULT_FACILITATOR,\n type X402FacilitatorConfig,\n type X402VerificationResult,\n type CurrencySpec,\n} from \"./types\";\n\nexport interface DefineX402PaymentConfig {\n amount: string | number;\n payTo: string;\n currency?: string;\n message?: string;\n resource?: string;\n network?: string;\n assetAddress?: string;\n scheme?: \"exact\" | \"bounded\";\n facilitator?: string | X402FacilitatorConfig;\n metadata?: Record<string, unknown>;\n}\n\nexport interface X402Payment {\n definition: X402PaymentDefinition;\n metadata?: Record<string, unknown>;\n}\n\nexport interface RequireX402PaymentOptions {\n settle?: boolean;\n fetchImpl?: typeof fetch;\n onFailure?: (result: X402VerificationResult) => Response;\n}\n\nexport interface RequireX402PaymentSuccess {\n payment: {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n };\n headers: Record<string, string>;\n result: X402VerificationResult;\n}\n\nexport type RequireX402PaymentOutcome = Response | RequireX402PaymentSuccess;\n\nconst PAYMENT_CONTEXT_SYMBOL = Symbol.for(\"opentool.x402.context\");\n\nexport class X402PaymentRequiredError extends Error {\n readonly response: Response;\n readonly verification: X402VerificationResult | undefined;\n\n constructor(response: Response, verification?: X402VerificationResult) {\n super(\"X402 Payment required\");\n this.name = \"X402PaymentRequiredError\";\n this.response = response;\n this.verification = verification;\n }\n}\n\nexport type X402PaymentContext = RequireX402PaymentSuccess;\n\nfunction setPaymentContext(request: Request, context: X402PaymentContext): void {\n try {\n Object.defineProperty(request, PAYMENT_CONTEXT_SYMBOL, {\n value: context,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n } catch {\n (request as any)[PAYMENT_CONTEXT_SYMBOL] = context;\n }\n}\n\nexport function getX402PaymentContext(request: Request): X402PaymentContext | undefined {\n return (request as any)[PAYMENT_CONTEXT_SYMBOL];\n}\n\nexport function defineX402Payment(config: DefineX402PaymentConfig): X402Payment {\n const currencyCode = normalizeCurrency(config.currency);\n const currencySpec = SUPPORTED_CURRENCIES[currencyCode];\n\n if (!currencySpec) {\n throw new Error(`Unsupported currency for x402 payments: ${currencyCode}`);\n }\n\n const network = config.network ?? currencySpec.network;\n const assetAddress = config.assetAddress ?? currencySpec.assetAddress;\n\n if (!network || !assetAddress) {\n throw new Error(\n \"x402 payments require a network and assetAddress; supply them or choose a supported currency.\",\n );\n }\n\n const facilitator = resolveFacilitator(config.facilitator);\n const value = toDecimalString(config.amount);\n\n const definition: X402PaymentDefinition = {\n amount: value,\n currency: {\n code: currencyCode,\n symbol: currencySpec.symbol,\n decimals: currencySpec.decimals,\n },\n asset: {\n symbol: currencySpec.symbol,\n network,\n address: assetAddress,\n decimals: currencySpec.decimals,\n },\n payTo: config.payTo,\n scheme: config.scheme ?? \"exact\",\n network,\n facilitator,\n };\n\n if (config.resource) {\n definition.resource = config.resource;\n }\n if (config.message) {\n definition.description = config.message;\n }\n if (config.metadata) {\n definition.metadata = config.metadata;\n }\n\n const baseMetadata: Record<string, unknown> = {\n amountUSDC: currencyCode === \"USDC\" ? Number(value) : undefined,\n facilitator: \"x402rs\",\n network,\n };\n\n const metadata = config.metadata ? { ...baseMetadata, ...config.metadata } : baseMetadata;\n\n return {\n definition,\n metadata,\n };\n}\n\nexport async function requireX402Payment(\n request: Request,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {},\n): Promise<RequireX402PaymentOutcome> {\n const definition = isX402Payment(payment) ? payment.definition : payment;\n\n const attempt = extractX402Attempt(request);\n if (!attempt) {\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response);\n }\n\n const verifyOptions: Parameters<typeof verifyX402Payment>[2] = {\n settle: options.settle !== undefined ? options.settle : true,\n };\n if (options.fetchImpl !== undefined) {\n verifyOptions.fetchImpl = options.fetchImpl;\n }\n\n const verification = await verifyX402Payment(attempt, definition, verifyOptions);\n\n if (!verification.success || !verification.metadata) {\n if (options.onFailure) {\n return options.onFailure(verification);\n }\n const response = createX402PaymentRequired(definition);\n throw new X402PaymentRequiredError(response, verification);\n }\n\n return {\n payment: verification.metadata as {\n optionId: string;\n verifier: string;\n amount: string;\n currency: string;\n network: string;\n },\n headers: verification.responseHeaders ?? {},\n result: verification,\n };\n}\n\nexport function withX402Payment(\n handler: (request: Request) => Promise<Response> | Response,\n payment: X402Payment | X402PaymentDefinition,\n options: RequireX402PaymentOptions = {},\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n const verification = await requireX402Payment(request, payment, options);\n if (verification instanceof Response) {\n return verification;\n }\n\n setPaymentContext(request, verification);\n\n const response = await Promise.resolve(handler(request));\n return applyPaymentHeaders(response, verification.headers);\n };\n}\n\nfunction applyPaymentHeaders(response: Response, headers: Record<string, string>): Response {\n const entries = Object.entries(headers ?? {});\n if (entries.length === 0) {\n return response;\n }\n\n let mutated = false;\n const merged = new Headers(response.headers);\n for (const [key, value] of entries) {\n if (!merged.has(key)) {\n merged.set(key, value);\n mutated = true;\n }\n }\n\n if (!mutated) {\n return response;\n }\n\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: merged,\n });\n}\n\nfunction isX402Payment(value: unknown): value is X402Payment {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n (value as X402Payment).definition !== undefined\n );\n}\n\nfunction resolveFacilitator(\n value: string | X402FacilitatorConfig | undefined,\n): X402FacilitatorConfig {\n if (!value) {\n return DEFAULT_FACILITATOR;\n }\n if (typeof value === \"string\") {\n return { ...DEFAULT_FACILITATOR, url: value };\n }\n return value;\n}\n\nfunction normalizeCurrency(currency?: string): string {\n return (currency ?? \"USDC\").toUpperCase();\n}\n\nfunction toDecimalString(value: string | number): string {\n return typeof value === \"number\" ? value.toString() : value;\n}\n\nexport { PAYMENT_HEADERS };\nexport type { X402PaymentDefinition, X402VerificationResult, X402FacilitatorConfig, CurrencySpec };\nexport { SUPPORTED_CURRENCIES, DEFAULT_FACILITATOR };\n","import { z, type ZodSchema } from \"zod\";\nimport { X402PaymentRequiredError } from \"../x402/payment\";\nimport type { ToolResponse } from \"../types/index\";\n\nexport const HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface CreateMcpAdapterOptions {\n name: string;\n schema?: ZodSchema;\n httpHandlers: Record<string, ((request: Request) => Promise<Response> | Response) | undefined>;\n defaultMethod?: string;\n}\n\n/**\n * Create an adapter that bridges MCP `call_tool` invocations to Web Standard handlers.\n */\nexport function createMcpAdapter(options: CreateMcpAdapterOptions) {\n const normalizedSchema = ensureSchema(options.schema);\n const defaultMethod = resolveDefaultMethod(options);\n const httpHandler = options.httpHandlers[defaultMethod];\n\n if (!httpHandler) {\n throw new Error(`Tool \"${options.name}\" does not export an HTTP handler for ${defaultMethod}`);\n }\n\n return async function invoke(rawArguments: unknown): Promise<ToolResponse> {\n const validated = normalizedSchema ? normalizedSchema.parse(rawArguments ?? {}) : rawArguments;\n\n const request = buildRequest(options.name, defaultMethod, validated);\n try {\n const response = await Promise.resolve(httpHandler(request));\n return await responseToToolResponse(response);\n } catch (error) {\n if (error instanceof X402PaymentRequiredError) {\n return await responseToToolResponse(error.response);\n }\n throw error;\n }\n };\n}\n\nfunction resolveDefaultMethod(options: CreateMcpAdapterOptions): HttpMethod {\n const explicit = options.defaultMethod?.toUpperCase();\n if (explicit && typeof options.httpHandlers[explicit] === \"function\") {\n return explicit as HttpMethod;\n }\n\n const preferredOrder: HttpMethod[] = [\"POST\", \"PUT\", \"PATCH\", \"GET\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n for (const method of preferredOrder) {\n if (typeof options.httpHandlers[method] === \"function\") {\n return method;\n }\n }\n\n const available = Object.keys(options.httpHandlers).filter(\n (method) => typeof options.httpHandlers[method] === \"function\",\n );\n if (available.length > 0) {\n return available[0] as HttpMethod;\n }\n\n throw new Error(`No HTTP handlers available for tool \"${options.name}\"`);\n}\n\nfunction ensureSchema(schema: ZodSchema | undefined): ZodSchema | undefined {\n if (!schema) {\n return undefined;\n }\n\n if (schema instanceof z.ZodType) {\n return schema;\n }\n\n if (typeof (schema as any)?.parse === \"function\") {\n return schema;\n }\n\n throw new Error(\"MCP adapter requires a valid Zod schema to validate arguments\");\n}\n\nfunction buildRequest(name: string, method: string, params: unknown): Request {\n const url = new URL(`https://opentool.local/${encodeURIComponent(name)}`);\n\n const headers = new Headers({\n \"x-opentool-invocation\": \"mcp\",\n \"x-opentool-tool\": name,\n });\n\n if (method === \"GET\" || method === \"HEAD\") {\n if (params && typeof params === \"object\") {\n Object.entries(params as Record<string, unknown>).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n url.searchParams.set(key, String(value));\n });\n }\n return new Request(url, { method, headers });\n }\n\n headers.set(\"Content-Type\", \"application/json\");\n const init: RequestInit = { method, headers };\n if (params != null) {\n init.body = JSON.stringify(params);\n }\n return new Request(url, init);\n}\n\nexport async function responseToToolResponse(response: Response): Promise<ToolResponse> {\n const statusIsError = response.status >= 400;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n const text = await response.text();\n\n if (contentType.includes(\"application/json\")) {\n try {\n const payload = text ? JSON.parse(text) : {};\n if (payload && typeof payload === \"object\" && Array.isArray(payload.content)) {\n return {\n content: payload.content,\n isError: payload.isError ?? statusIsError,\n };\n }\n return {\n content: [{ type: \"text\", text: JSON.stringify(payload, null, 2) }],\n isError: statusIsError,\n };\n } catch {\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n }\n }\n\n if (!text) {\n return {\n content: [],\n isError: statusIsError,\n };\n }\n\n return {\n content: [{ type: \"text\", text }],\n isError: statusIsError,\n };\n}\n\nexport type { ToolResponse };\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { CallToolRequestSchema, ListToolsRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport * as fs from \"fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"url\";\nimport { zodToJsonSchema } from \"@alcyone-labs/zod-to-json-schema\";\nimport { createMcpAdapter, HTTP_METHODS } from \"../adapters/mcp\";\nimport { withX402Payment } from \"../x402/payment\";\nimport {\n type HttpHandlerDefinition,\n type InternalToolDefinition,\n type McpConfig,\n type ToolResponse,\n} from \"../types/index\";\nimport { BuildMetadata, Tool } from \"../types/metadata\";\n\ninterface AdapterEntry {\n tool: InternalToolDefinition;\n invoke: (params: unknown) => Promise<ToolResponse>;\n}\n\n/**\n * Create local development server for MCP tooling.\n */\nexport function createDevServer(tools: InternalToolDefinition[]): Server {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n\n const adapters = buildAdapters(tools);\n\n const server = new Server(\n {\n name: \"opentool-dev\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: \"text\", text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n return server;\n}\n\n/**\n * Create stdio server for use with AWS Lambda MCP Adapter\n */\nexport async function createStdioServer(tools?: InternalToolDefinition[]): Promise<void> {\n const metadata = loadMetadata();\n const metadataMap = buildMetadataMap(metadata);\n const toolDefinitions = tools || (await loadToolsFromDirectory(metadataMap));\n const adapters = buildAdapters(toolDefinitions);\n\n const server = new Server(\n {\n name: \"opentool-runtime\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapters.map(({ tool }) => serializeTool(tool, metadataMap)),\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const entry = adapters.find(({ tool }) => {\n const toolName = tool.metadata?.name || tool.filename;\n return toolName === request.params.name;\n });\n\n if (!entry) {\n throw new Error(`Tool ${request.params.name} not found or not MCP-enabled`);\n }\n\n try {\n return (await entry.invoke(request.params.arguments)) as any;\n } catch (error) {\n const message = (error && (error as Error).message) || String(error);\n return {\n content: [{ type: \"text\", text: `Error: ${message}` }],\n isError: true,\n } as any;\n }\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"MCP stdio server started\");\n}\n\nfunction buildAdapters(tools: InternalToolDefinition[]): AdapterEntry[] {\n return tools\n .filter((tool) => isMcpEnabled(tool))\n .map((tool) => {\n const httpHandlers = toHttpHandlerMap(tool.httpHandlers);\n const adapterOptions = {\n name: tool.metadata?.name || tool.filename,\n httpHandlers,\n ...(tool.schema ? { schema: tool.schema } : {}),\n ...(tool.mcpConfig?.defaultMethod ? { defaultMethod: tool.mcpConfig.defaultMethod } : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n return {\n tool,\n invoke: adapter,\n };\n });\n}\n\n/**\n * Load tools from tools directory\n */\nasync function loadToolsFromDirectory(\n metadataMap: Map<string, Tool>,\n): Promise<InternalToolDefinition[]> {\n const tools: InternalToolDefinition[] = [];\n const toolsDir = path.join(process.cwd(), \"tools\");\n if (!fs.existsSync(toolsDir)) {\n return tools;\n }\n\n const files = fs.readdirSync(toolsDir);\n for (const file of files) {\n if (!isSupportedToolFile(file)) {\n continue;\n }\n\n const toolPath = path.join(toolsDir, file);\n try {\n const exportsObject = require(toolPath);\n const candidate = resolveModuleCandidate(exportsObject);\n if (!candidate?.schema) {\n continue;\n }\n\n const baseName = file.replace(/\\.[^.]+$/, \"\");\n const name = candidate.metadata?.name || baseName;\n const meta = metadataMap.get(name);\n\n let inputSchema = meta?.inputSchema;\n if (!inputSchema) {\n try {\n inputSchema = zodToJsonSchema(candidate.schema, {\n name: `${name}Schema`,\n target: \"jsonSchema7\",\n $refStrategy: \"none\",\n });\n } catch {\n inputSchema = { type: \"object\" };\n }\n }\n inputSchema = normalizeInputSchema(inputSchema);\n\n const payment = candidate.payment ?? null;\n const httpHandlersRaw = collectHttpHandlers(candidate);\n const httpHandlers = [...httpHandlersRaw];\n\n if (httpHandlers.length === 0) {\n continue;\n }\n\n if (payment) {\n for (let index = 0; index < httpHandlers.length; index += 1) {\n const entry = httpHandlers[index];\n httpHandlers[index] = {\n ...entry,\n handler: withX402Payment(entry.handler, payment),\n };\n }\n }\n\n const mcpConfig = normalizeRuntimeMcpConfig(candidate.mcp);\n const adapterOptions = {\n name,\n httpHandlers: toHttpHandlerMap(httpHandlers),\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n ...(typeof candidate.mcp?.defaultMethod === \"string\"\n ? { defaultMethod: candidate.mcp.defaultMethod }\n : {}),\n };\n const adapter = createMcpAdapter(adapterOptions);\n\n const tool: InternalToolDefinition = {\n ...(candidate.schema ? { schema: candidate.schema } : {}),\n inputSchema,\n metadata: candidate.metadata || meta || null,\n filename: baseName,\n httpHandlers,\n mcpConfig,\n handler: async (params) => adapter(params),\n payment,\n };\n tools.push(tool);\n } catch (error) {\n console.warn(`Failed to load tool from ${file}: ${error}`);\n }\n }\n\n return tools;\n}\n\nfunction loadMetadata(): BuildMetadata | null {\n const metadataPath = path.join(process.cwd(), \"metadata.json\");\n if (!fs.existsSync(metadataPath)) {\n return null;\n }\n try {\n const contents = fs.readFileSync(metadataPath, \"utf8\");\n return JSON.parse(contents) as BuildMetadata;\n } catch (error) {\n console.warn(`Failed to parse metadata.json: ${error}`);\n return null;\n }\n}\n\nfunction buildMetadataMap(metadata: BuildMetadata | null): Map<string, Tool> {\n const map = new Map<string, Tool>();\n if (!metadata?.tools) {\n return map;\n }\n metadata.tools.forEach((tool) => {\n map.set(tool.name, tool);\n });\n return map;\n}\n\nfunction serializeTool(tool: InternalToolDefinition, metadataMap: Map<string, Tool>) {\n const name = tool.metadata?.name || tool.filename;\n const meta = metadataMap.get(name);\n return {\n name,\n description: meta?.description || tool.metadata?.description || `${tool.filename} tool`,\n inputSchema: meta?.inputSchema || tool.inputSchema,\n annotations: meta?.annotations || tool.metadata?.annotations,\n payment: meta?.payment || tool.metadata?.payment,\n discovery: meta?.discovery || tool.metadata?.discovery,\n };\n}\n\nfunction isSupportedToolFile(file: string): boolean {\n return /\\.(cjs|mjs|js|ts)$/i.test(file);\n}\n\nfunction resolveModuleCandidate(exportsObject: any): any {\n if (!exportsObject) {\n return null;\n }\n if (exportsObject.schema) {\n return exportsObject;\n }\n if (exportsObject.default && exportsObject.default.schema) {\n return exportsObject.default;\n }\n return exportsObject;\n}\n\nfunction collectHttpHandlers(module: any): HttpHandlerDefinition[] {\n const handlers: HttpHandlerDefinition[] = [];\n HTTP_METHODS.forEach((method) => {\n const handler = module?.[method];\n if (typeof handler === \"function\") {\n handlers.push({\n method,\n handler: async (request: Request) => handler.call(module, request),\n });\n }\n });\n return handlers;\n}\n\nfunction toHttpHandlerMap(\n handlers: HttpHandlerDefinition[],\n): Record<string, HttpHandlerDefinition[\"handler\"]> {\n return handlers.reduce<Record<string, HttpHandlerDefinition[\"handler\"]>>((acc, handler) => {\n acc[handler.method.toUpperCase()] = handler.handler;\n return acc;\n }, {});\n}\n\nfunction normalizeInputSchema(schema: any): any {\n if (!schema || typeof schema !== \"object\") {\n return schema;\n }\n\n const clone = JSON.parse(JSON.stringify(schema));\n\n if (typeof clone.$ref === \"string\" && clone.$ref.startsWith(\"#/definitions/\")) {\n const refKey = clone.$ref.replace(\"#/definitions/\", \"\");\n if (clone.definitions && typeof clone.definitions[refKey] === \"object\") {\n return normalizeInputSchema(clone.definitions[refKey]);\n }\n }\n\n delete clone.$ref;\n delete clone.definitions;\n\n if (!clone.type) {\n clone.type = \"object\";\n }\n\n return clone;\n}\n\nfunction normalizeRuntimeMcpConfig(rawConfig: any): McpConfig | null {\n if (isPlainObject(rawConfig) && rawConfig.enabled === true) {\n let normalizedMode: McpConfig[\"mode\"] | undefined;\n if (typeof rawConfig.mode === \"string\") {\n const candidate = rawConfig.mode.toLowerCase();\n if (candidate === \"stdio\" || candidate === \"lambda\" || candidate === \"dual\") {\n normalizedMode = candidate as McpConfig[\"mode\"];\n } else {\n throw new Error('mcp.mode must be one of \"stdio\", \"lambda\", or \"dual\"');\n }\n }\n const metadataOverrides = isPlainObject(rawConfig.metadataOverrides)\n ? rawConfig.metadataOverrides\n : undefined;\n const config: McpConfig = { enabled: true };\n\n if (normalizedMode) {\n config.mode = normalizedMode;\n }\n\n if (typeof rawConfig.defaultMethod === \"string\") {\n config.defaultMethod = rawConfig.defaultMethod.toUpperCase();\n }\n\n if (metadataOverrides) {\n config.metadataOverrides = metadataOverrides;\n }\n\n return config;\n }\n\n return null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isMcpEnabled(tool: InternalToolDefinition): boolean {\n return Boolean(tool.mcpConfig?.enabled);\n}\n\nexport function resolveRuntimePath(value: string): string {\n if (value.startsWith(\"file://\")) {\n return fileURLToPath(value);\n }\n return path.resolve(value);\n}\n","import { z } from \"zod\";\nimport type { ToolMetadataOverrides } from \"./metadata\";\nimport type { ToolCategory, ToolProfile } from \"./tool\";\nimport type { X402Payment } from \"../x402/payment\";\n\nexport interface ToolContent {\n type: \"text\" | \"image\" | \"resource\";\n text?: string;\n data?: string;\n mimeType?: string;\n}\n\nexport interface ToolResponse {\n content: ToolContent[];\n isError?: boolean;\n}\n\nexport const HTTP_METHODS = [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"] as const;\n\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n\nexport interface HttpHandlerDefinition {\n method: HttpMethod;\n handler: (request: Request) => Promise<Response> | Response;\n}\n\nexport type ScheduleType = \"cron\" | \"rate\";\n\nexport interface NormalizedSchedule {\n type: ScheduleType;\n expression: string;\n authoredEnabled?: boolean;\n notifyEmail?: boolean;\n}\n\nexport interface McpConfig {\n enabled: boolean;\n mode?: \"stdio\" | \"lambda\" | \"dual\";\n defaultMethod?: string;\n metadataOverrides?: Partial<ToolMetadataOverrides>;\n}\n\nexport interface InternalToolDefinition<\n TSchema extends z.ZodSchema | undefined = z.ZodSchema | undefined,\n> {\n filename: string;\n schema?: TSchema;\n inputSchema?: unknown;\n metadata: ToolMetadataOverrides | null;\n httpHandlers: HttpHandlerDefinition[];\n mcpConfig?: McpConfig | null;\n sourcePath?: string;\n handler?: (params: any) => Promise<ToolResponse>;\n payment?: X402Payment | null;\n schedule?: NormalizedSchedule | null;\n notifyEmail?: boolean;\n profile?: ToolProfile | null;\n profileDescription?: string | null;\n profileCategory?: ToolCategory;\n}\n\nexport interface ServerConfig {\n name: string;\n version: string;\n tools: InternalToolDefinition[];\n}\n\nexport interface BuildConfig {\n toolsDir: string;\n outputDir: string;\n serverName?: string;\n serverVersion?: string;\n}\n\nexport type {\n Tool,\n ToolMetadataOverrides,\n Metadata,\n BuildMetadata,\n PaymentConfig,\n} from \"./metadata\";\n","import {\n createWalletClient,\n http,\n type Address,\n type PrivateKeyAccount,\n type WalletClient,\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { baseSepolia } from \"viem/chains\";\n\nexport interface X402ClientConfig {\n privateKey: `0x${string}`;\n rpcUrl?: string;\n}\n\nexport interface X402PayRequest {\n url: string;\n method?: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport interface X402PayResult {\n success: boolean;\n response?: Response;\n error?: string;\n paymentDetails?: {\n amount: string;\n currency: string;\n network: string;\n signature: string;\n };\n}\n\nexport class X402Client {\n private account: PrivateKeyAccount;\n private walletClient: ReturnType<typeof createWalletClient>;\n\n constructor(config: X402ClientConfig) {\n this.account = privateKeyToAccount(config.privateKey);\n\n // Support both base and base-sepolia\n const chain = baseSepolia;\n this.walletClient = createWalletClient({\n account: this.account,\n chain,\n transport: http(config.rpcUrl),\n });\n }\n\n async pay(request: X402PayRequest): Promise<X402PayResult> {\n try {\n // Step 1: Make initial request to get 402 response\n const initialResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n // If not 402, return the response directly\n if (initialResponse.status !== 402) {\n return {\n success: initialResponse.ok,\n response: initialResponse,\n };\n }\n\n // Step 2: Parse payment requirements\n const paymentRequirements = await initialResponse.json();\n const x402Requirements = paymentRequirements.x402?.accepts?.[0];\n\n if (!x402Requirements) {\n return {\n success: false,\n error: \"No x402 payment requirements found in 402 response\",\n };\n }\n\n // Step 3: Generate EIP-3009 authorization\n const authorization = await this.signTransferAuthorization({\n from: this.account.address,\n to: x402Requirements.payTo as Address,\n value: BigInt(x402Requirements.maxAmountRequired),\n validAfter: BigInt(Math.floor(Date.now() / 1000)),\n validBefore: BigInt(Math.floor(Date.now() / 1000) + 900), // 15 min\n nonce: `0x${Array.from({ length: 32 }, () =>\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, \"0\"),\n ).join(\"\")}` as `0x${string}`,\n tokenAddress: x402Requirements.asset as Address,\n });\n\n // Step 4: Build X-PAYMENT header\n const paymentProof = {\n x402Version: 1,\n scheme: x402Requirements.scheme,\n network: x402Requirements.network,\n correlationId: \"\",\n payload: {\n signature: authorization.signature,\n authorization: {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value.toString(),\n validAfter: authorization.validAfter.toString(),\n validBefore: authorization.validBefore.toString(),\n nonce: authorization.nonce,\n },\n },\n };\n\n const paymentHeader = Buffer.from(JSON.stringify(paymentProof)).toString(\"base64\");\n\n // Step 5: Retry request with payment\n const paidResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-PAYMENT\": paymentHeader,\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n return {\n success: paidResponse.ok,\n response: paidResponse,\n paymentDetails: {\n amount: x402Requirements.maxAmountRequired,\n currency: x402Requirements.extra?.currencyCode ?? \"USDC\",\n network: x402Requirements.network,\n signature: authorization.signature,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async signTransferAuthorization(params: {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: `0x${string}`;\n tokenAddress: Address;\n }) {\n if (!this.walletClient.chain) {\n throw new Error(\"Wallet client chain not configured\");\n }\n\n const domain = {\n name: \"USD Coin\",\n version: \"2\",\n chainId: this.walletClient.chain.id,\n verifyingContract: params.tokenAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const message = {\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n };\n\n const signature = await this.walletClient.signTypedData({\n account: this.account,\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n\n return {\n signature,\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n };\n }\n\n getAddress(): Address {\n return this.account.address;\n }\n}\n\n// Helper function for quick testing\nexport async function payX402(config: {\n privateKey: `0x${string}`;\n url: string;\n body?: unknown;\n rpcUrl?: string;\n}): Promise<X402PayResult> {\n const client = new X402Client({\n privateKey: config.privateKey,\n ...(config.rpcUrl ? { rpcUrl: config.rpcUrl } : {}),\n });\n\n return client.pay({\n url: config.url,\n body: config.body,\n });\n}\n\nexport interface EIP3009Authorization {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: `0x${string}`;\n}\n\nexport interface X402BrowserClientConfig {\n walletClient: WalletClient;\n chainId: number;\n}\n\nexport class X402BrowserClient {\n private walletClient: WalletClient;\n private chainId: number;\n\n constructor(config: X402BrowserClientConfig) {\n this.walletClient = config.walletClient;\n this.chainId = config.chainId;\n }\n\n async pay(request: X402PayRequest): Promise<X402PayResult> {\n try {\n const initialResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n if (initialResponse.status !== 402) {\n return {\n success: initialResponse.ok,\n response: initialResponse,\n };\n }\n\n const paymentRequirements = await initialResponse.json();\n const x402Requirements = paymentRequirements.x402?.accepts?.[0];\n\n if (!x402Requirements) {\n return {\n success: false,\n error: \"No x402 payment requirements found in 402 response\",\n };\n }\n\n const account = this.walletClient.account;\n if (!account) {\n return {\n success: false,\n error: \"No account connected to wallet\",\n };\n }\n\n const authorization: EIP3009Authorization = {\n from: account.address,\n to: x402Requirements.payTo as Address,\n value: BigInt(x402Requirements.maxAmountRequired),\n validAfter: BigInt(Math.floor(Date.now() / 1000)),\n validBefore: BigInt(Math.floor(Date.now() / 1000) + 900),\n nonce: `0x${Array.from({ length: 32 }, () =>\n Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, \"0\"),\n ).join(\"\")}` as `0x${string}`,\n };\n\n const signature = await this.signTransferAuthorization(\n authorization,\n x402Requirements.asset as Address,\n );\n\n const paymentProof = {\n x402Version: 1,\n scheme: x402Requirements.scheme,\n network: x402Requirements.network,\n correlationId: \"\",\n payload: {\n signature,\n authorization: {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value.toString(),\n validAfter: authorization.validAfter.toString(),\n validBefore: authorization.validBefore.toString(),\n nonce: authorization.nonce,\n },\n },\n };\n\n const paymentHeader = btoa(JSON.stringify(paymentProof));\n\n const paidResponse = await fetch(request.url, {\n method: request.method ?? \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-PAYMENT\": paymentHeader,\n ...request.headers,\n },\n ...(request.body ? { body: JSON.stringify(request.body) } : {}),\n });\n\n return {\n success: paidResponse.ok,\n response: paidResponse,\n paymentDetails: {\n amount: x402Requirements.maxAmountRequired,\n currency: x402Requirements.extra?.currencyCode ?? \"USDC\",\n network: x402Requirements.network,\n signature,\n },\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async signTransferAuthorization(\n authorization: EIP3009Authorization,\n tokenAddress: Address,\n ): Promise<`0x${string}`> {\n const account = this.walletClient.account;\n if (!account) {\n throw new Error(\"No account connected to wallet\");\n }\n\n const domain = {\n name: \"USD Coin\",\n version: \"2\",\n chainId: this.chainId,\n verifyingContract: tokenAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n };\n\n const message = {\n from: authorization.from,\n to: authorization.to,\n value: authorization.value,\n validAfter: authorization.validAfter,\n validBefore: authorization.validBefore,\n nonce: authorization.nonce,\n };\n\n return await this.walletClient.signTypedData({\n account,\n domain,\n types,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n }\n}\n\nexport async function payX402WithWallet(\n walletClient: WalletClient,\n chainId: number,\n request: X402PayRequest,\n): Promise<X402PayResult> {\n const client = new X402BrowserClient({ walletClient, chainId });\n return client.pay(request);\n}\n","import { zeroAddress } from \"viem\";\nimport { arbitrum, arbitrumSepolia, base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\nconst ARBITRUM_ALCHEMY_HOST = \"https://arb-mainnet.g.alchemy.com/v2/\";\nconst ARBITRUM_SEPOLIA_ALCHEMY_HOST = \"https://arb-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(host: string, fallbackUrls: readonly string[]): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\",\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(ETHEREUM_ALCHEMY_HOST, mainnet.rpcUrls.default.http),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(BASE_SEPOLIA_ALCHEMY_HOST, baseSepolia.rpcUrls.default.http),\n },\n arbitrum: {\n id: arbitrum.id,\n slug: \"arbitrum\",\n name: \"Arbitrum One\",\n chain: arbitrum,\n rpcUrl: buildRpcResolver(ARBITRUM_ALCHEMY_HOST, arbitrum.rpcUrls.default.http),\n publicRpcUrls: arbitrum.rpcUrls.default.http,\n },\n arbitrumSepolia: {\n id: arbitrumSepolia.id,\n slug: \"arbitrum-sepolia\",\n name: \"Arbitrum Sepolia\",\n chain: arbitrumSepolia,\n rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),\n publicRpcUrls: arbitrumSepolia.rpcUrls.default.http,\n },\n};\n\nfunction createNativeToken(chainId: number, symbol: string, name: string): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number,\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(base.id, \"USDC\", \"USD Coin\", \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\", 6),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(mainnet.id, \"USDC\", \"USD Coin\", \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\", 6),\n },\n arbitrum: {\n ...createNativeToken(arbitrum.id, \"ETH\", \"Ether\"),\n USDC: token(arbitrum.id, \"USDC\", \"USD Coin\", \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\", 6),\n },\n arbitrumSepolia: {\n ...createNativeToken(arbitrumSepolia.id, \"ETH\", \"Ether\"),\n USDC: token(\n arbitrumSepolia.id,\n \"USDC\",\n \"USD Coin\",\n \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n 6,\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","export type NonceSource = () => number;\n\nexport function createMonotonicNonceSource(start: number = Date.now()): 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","import {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n} from \"viem\";\nimport { privateKeyToAccount, type Account } from \"viem/accounts\";\n\nimport { createMonotonicNonceSource } from \"../nonces\";\nimport type {\n ChainMetadata,\n HexAddress,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nfunction normalizePrivateKey(raw: string): `0x${string}` {\n const trimmed = raw.trim();\n const withPrefix = trimmed.startsWith(\"0x\") ? trimmed : `0x${trimmed}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(withPrefix)) {\n throw new Error(\"wallet() privateKey must be a 32-byte hex string\");\n }\n return withPrefix as `0x${string}`;\n}\n\nexport interface PrivateKeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n privateKey: string;\n}\n\nexport interface PrivateKeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient<Transport, Chain>;\n}\n\nexport function createPrivateKeyProvider(\n config: PrivateKeyProviderConfig,\n): PrivateKeyProviderResult {\n const privateKey = normalizePrivateKey(config.privateKey);\n const account = privateKeyToAccount(privateKey);\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n nonceSource: createMonotonicNonceSource(),\n };\n}\n","import { Turnkey } from \"@turnkey/sdk-server\";\nimport { createAccount } from \"@turnkey/viem\";\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n} from \"viem\";\nimport type { Account } from \"viem/accounts\";\n\nimport { createMonotonicNonceSource } from \"../nonces\";\nimport type {\n ChainMetadata,\n HexAddress,\n TurnkeySignWith,\n WalletSignerContext,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"../types\";\n\nexport interface TurnkeyProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n apiPublicKey: string;\n apiPrivateKey: string;\n signWith: TurnkeySignWith;\n apiBaseUrl?: string;\n}\n\nexport interface TurnkeyProviderResult extends WalletSignerContext {\n publicClient: PublicClient<Transport, Chain>;\n}\n\nexport async function createTurnkeyProvider(\n config: TurnkeyProviderConfig,\n): Promise<TurnkeyProviderResult> {\n const turnkey = new Turnkey({\n apiBaseUrl: config.apiBaseUrl ?? \"https://api.turnkey.com\",\n // The delegated sub-organization the API key pair belongs to.\n defaultOrganizationId: config.organizationId,\n apiPublicKey: config.apiPublicKey,\n apiPrivateKey: config.apiPrivateKey,\n });\n\n const account = (await createAccount({\n client: turnkey.apiClient(),\n organizationId: config.organizationId,\n signWith: config.signWith,\n })) as Account;\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n async function sendTransaction(params: WalletSendTransactionParams) {\n const tx: any = {\n account,\n };\n if (params.to) {\n tx.to = params.to;\n }\n if (params.value !== undefined) {\n tx.value = params.value;\n }\n if (params.data !== undefined) {\n tx.data = params.data;\n }\n\n return walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return publicClient.getBalance({ address: account.address });\n }\n\n async function transfer(params: WalletTransferParams) {\n return sendTransaction({\n to: params.to,\n value: params.amount,\n ...(params.data !== undefined ? { data: params.data } : {}),\n });\n }\n\n return {\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n sendTransaction,\n getNativeBalance,\n transfer,\n nonceSource: createMonotonicNonceSource(),\n };\n}\n","export type TurnkeyEnvConfig = {\n organizationId: string;\n apiPublicKey: string;\n apiPrivateKey: string;\n signWith: string;\n apiBaseUrl?: string;\n};\n\nfunction readTrimmed(name: string): string | undefined {\n const value = process.env[name];\n const trimmed = typeof value === \"string\" ? value.trim() : \"\";\n return trimmed.length ? trimmed : undefined;\n}\n\n/**\n * Reads Turnkey configuration from environment variables.\n */\nexport function readTurnkeyEnv(): TurnkeyEnvConfig | undefined {\n const suborgId = readTrimmed(\"TURNKEY_SUBORG_ID\");\n if (!suborgId) return undefined;\n\n const apiPublicKey = readTrimmed(\"TURNKEY_API_PUBLIC_KEY\");\n const apiPrivateKey = readTrimmed(\"TURNKEY_API_PRIVATE_KEY\");\n const signWith = readTrimmed(\"TURNKEY_WALLET_ADDRESS\");\n if (!apiPublicKey || !apiPrivateKey || !signWith) return undefined;\n\n const apiBaseUrl = readTrimmed(\"TURNKEY_API_BASE_URL\");\n\n return {\n organizationId: suborgId,\n apiPublicKey,\n apiPrivateKey,\n signWith,\n ...(apiBaseUrl ? { apiBaseUrl } : {}),\n };\n}\n","export * from \"./types\";\nexport { chains, tokens, registry, DEFAULT_CHAIN, DEFAULT_TOKENS } from \"./constants\";\n\nimport { createPublicClient, http } from \"viem\";\n\nimport type {\n RpcProviderOptions,\n WalletContext,\n WalletFullContext,\n WalletReadonlyContext,\n WalletOptions,\n WalletProviderType,\n WalletPrivateKeyOptions,\n WalletTurnkeyOptions,\n WalletReadonlyOptions,\n} from \"./types\";\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n registry as walletRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createPrivateKeyProvider } from \"./providers/private-key\";\nimport { createTurnkeyProvider } from \"./providers/turnkey\";\nimport { readTurnkeyEnv } from \"./env\";\n\ntype ChainSlug = keyof typeof chainRegistry;\n\nfunction resolveChainSlug(reference?: string | number): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nexport function getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nexport function wallet(options: WalletPrivateKeyOptions): Promise<WalletFullContext>;\nexport function wallet(options: WalletTurnkeyOptions): Promise<WalletFullContext>;\nexport function wallet(options?: WalletReadonlyOptions): Promise<WalletReadonlyContext>;\nexport async function wallet(options: WalletOptions = {}): Promise<WalletContext> {\n const envPrivateKey = process.env.PRIVATE_KEY?.trim();\n const envTurnkey = readTurnkeyEnv();\n\n const effectivePrivateKey = options.privateKey ?? envPrivateKey;\n const effectiveTurnkey = options.turnkey ?? envTurnkey;\n\n if (effectivePrivateKey && effectiveTurnkey) {\n throw new Error(\"wallet() cannot be initialized with both privateKey and turnkey credentials\");\n }\n\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? {};\n const overrides: RpcProviderOptions = {};\n const envRpcUrl = process.env.RPC_URL?.trim();\n const envApiKey = process.env.ALCHEMY_API_KEY?.trim();\n if (options.rpcUrl ?? envRpcUrl) {\n overrides.url = (options.rpcUrl ?? envRpcUrl)!;\n }\n if (options.apiKey ?? envApiKey) {\n overrides.apiKey = (options.apiKey ?? envApiKey)!;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n\n let providerType: WalletProviderType = \"readonly\";\n let signerProvider:\n | ReturnType<typeof createPrivateKeyProvider>\n | Awaited<ReturnType<typeof createTurnkeyProvider>>\n | undefined;\n\n if (effectivePrivateKey) {\n signerProvider = createPrivateKeyProvider({\n chain,\n rpcUrl,\n privateKey: effectivePrivateKey,\n });\n providerType = \"privateKey\";\n } else if (effectiveTurnkey) {\n const turnkeyConfig = {\n chain,\n rpcUrl,\n organizationId: effectiveTurnkey.organizationId,\n apiPublicKey: effectiveTurnkey.apiPublicKey,\n apiPrivateKey: effectiveTurnkey.apiPrivateKey,\n signWith: effectiveTurnkey.signWith,\n } as Parameters<typeof createTurnkeyProvider>[0];\n\n if (effectiveTurnkey.apiBaseUrl) {\n turnkeyConfig.apiBaseUrl = effectiveTurnkey.apiBaseUrl;\n }\n\n signerProvider = await createTurnkeyProvider(turnkeyConfig);\n providerType = \"turnkey\";\n }\n\n const publicClient =\n signerProvider?.publicClient ??\n createPublicClient({\n chain: chain.chain,\n transport: http(rpcUrl),\n });\n\n const baseContext = {\n chain,\n tokens,\n rpcUrl,\n providerType,\n publicClient,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n ...(signerProvider ? { address: signerProvider.address } : {}),\n } satisfies WalletReadonlyContext;\n\n if (signerProvider) {\n const { publicClient: _ignored, ...rest } = signerProvider;\n return {\n ...baseContext,\n ...rest,\n } as WalletFullContext;\n }\n\n return baseContext;\n}\n\nexport const walletToolkit = {\n chains: chainRegistry,\n tokens: tokenRegistry,\n registry: walletRegistry,\n defaults: {\n chain: DEFAULT_CHAIN,\n tokens: DEFAULT_TOKENS,\n },\n getRpcUrl,\n wallet,\n} as const;\n","type StoreStatus =\n | \"submitted\"\n | \"pending\"\n | \"confirmed\"\n | \"failed\"\n | \"cancelled\"\n | \"filled\"\n | \"partial_fill\"\n | \"settled\"\n | \"info\";\n\nconst STORE_EVENT_LEVELS = [\"decision\", \"execution\", \"lifecycle\"] as const;\n\nconst STORE_EVENT_LEVEL_SET = new Set<string>(STORE_EVENT_LEVELS);\n\nconst CANONICAL_STORE_ACTIONS = [\n \"stake\",\n \"unstake\",\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n \"custom\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS = [\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"stake\",\n \"unstake\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\nconst EXECUTION_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\n\nexport type StoreAction = (typeof CANONICAL_STORE_ACTIONS)[number] | string;\n\nexport type StoreEventLevel = (typeof STORE_EVENT_LEVELS)[number];\nexport type StoreMode = \"live\" | \"backtest\";\n\nexport type StoreSimulationConfig = {\n fillModel?: string;\n feeModel?: string;\n slippageBps?: number;\n};\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 eventLevel?: StoreEventLevel;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n market?: Record<string, unknown>;\n mode?: StoreMode;\n backtestRunId?: string;\n simulation?: StoreSimulationConfig;\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 mode?: StoreMode;\n backtestRunId?: string;\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\nconst normalizeAction = (action: string | null | undefined): string | null => {\n const normalized = action?.trim().toLowerCase();\n return normalized ? normalized : null;\n};\n\nconst coerceEventLevel = (value: unknown): StoreEventLevel | null => {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim().toLowerCase();\n if (!normalized || !STORE_EVENT_LEVEL_SET.has(normalized)) return null;\n return normalized as StoreEventLevel;\n};\n\nconst requiresMarketIdentity = (input: StoreEventInput): boolean => {\n const action = normalizeAction(input.action);\n if (!action) return false;\n return MARKET_REQUIRED_ACTIONS_SET.has(action);\n};\n\nconst hasMarketIdentity = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n const requiredKeys = [\"market_type\", \"venue\", \"environment\", \"canonical_symbol\"] as const;\n return requiredKeys.every((key) => {\n const field = record[key];\n return typeof field === \"string\" && field.trim().length > 0;\n });\n};\n\nconst resolveEventLevel = (input: StoreEventInput): StoreEventLevel | null => {\n const direct = coerceEventLevel(input.eventLevel);\n if (direct) return direct;\n\n const metadataLevel = coerceEventLevel(input.metadata?.eventLevel);\n if (metadataLevel) return metadataLevel;\n\n const action = normalizeAction(input.action);\n if (\n action &&\n EXECUTION_ACTIONS_SET.has(action) &&\n (input.metadata?.lifecycle === true ||\n typeof input.metadata?.executionRef === \"string\" ||\n typeof input.metadata?.parentExecutionRef === \"string\")\n ) {\n return \"lifecycle\";\n }\n if ((action && EXECUTION_ACTIONS_SET.has(action)) || hasMarketIdentity(input.market)) {\n return \"execution\";\n }\n if (action) return \"decision\";\n\n return null;\n};\n\nconst normalizeStoreInput = (input: StoreEventInput): StoreEventInput => {\n const metadata = { ...input.metadata };\n const eventLevel = resolveEventLevel({ ...input, metadata });\n if (eventLevel) {\n metadata.eventLevel = eventLevel;\n }\n const hasMetadata = Object.keys(metadata).length > 0;\n return {\n ...input,\n ...(eventLevel ? { eventLevel } : {}),\n ...(hasMetadata ? { metadata } : {}),\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(\"OPENPOND_API_KEY is required to store activity events\");\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(`Request failed with status ${response.status}`, response.status, body);\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 normalizedInput = normalizeStoreInput(input);\n const mode = normalizedInput.mode ?? \"live\";\n const eventLevel = normalizedInput.eventLevel;\n const normalizedAction = normalizeAction(normalizedInput.action);\n\n if (mode === \"backtest\" && !normalizedInput.backtestRunId) {\n throw new StoreError(`backtestRunId is required when mode is \"backtest\"`);\n }\n\n if (eventLevel === \"execution\" || eventLevel === \"lifecycle\") {\n if (!normalizedAction || !EXECUTION_ACTIONS_SET.has(normalizedAction)) {\n throw new StoreError(`eventLevel \"${eventLevel}\" requires an execution action`);\n }\n }\n if (eventLevel === \"execution\" && !hasMarketIdentity(normalizedInput.market)) {\n throw new StoreError(\n `market is required for execution events. market must include market_type, venue, environment, canonical_symbol`,\n );\n }\n const shouldApplyLegacyMarketRule = eventLevel == null || eventLevel === \"execution\";\n if (\n shouldApplyLegacyMarketRule &&\n requiresMarketIdentity(normalizedInput) &&\n !hasMarketIdentity(normalizedInput.market)\n ) {\n throw new StoreError(\n `market is required for action \"${normalizedInput.action}\". market must include market_type, venue, environment, canonical_symbol`,\n );\n }\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const path = mode === \"backtest\" ? \"/apps/backtests/tx\" : \"/apps/positions/tx\";\n const url = `${baseUrl}${path}`;\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(normalizedInput),\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 const mode = params?.mode ?? \"live\";\n const path = mode === \"backtest\" ? \"/apps/backtests/tx\" : \"/apps/positions/tx\";\n\n const url = new URL(`${baseUrl}${path}`);\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 if (params?.backtestRunId) {\n url.searchParams.set(\"backtestRunId\", params.backtestRunId);\n }\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<HyperliquidEnvironment, `0x${string}`> = {\n mainnet: \"0x2df1c51e09aecf9cacb7bc98cb1742757f163df7\",\n testnet: \"0x08cfc1b6b2dcf36a1480b99353a354aa8ac56f89\",\n};\n\nexport const HL_USDC_ADDRESSES: Record<HyperliquidEnvironment, `0x${string}`> = {\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 = \"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<string, { fetchedAt: number; universe: MetaResponse[\"universe\"] }>();\nconst spotMetaCache = new Map<\n string,\n { fetchedAt: number; universe: SpotUniverseItem[]; tokens: SpotToken[] }\n>();\nconst perpDexsCache = new Map<string, { fetchedAt: number; dexs: PerpDexsResponse }>();\n\nexport type HyperliquidEnvironment = \"mainnet\" | \"testnet\";\n\nexport type MarketIdentity = {\n market_type: \"perp\" | \"spot\" | \"dex\";\n venue: \"hyperliquid\";\n environment: HyperliquidEnvironment;\n base: string;\n quote?: string | null;\n dex?: string | null;\n chain_id?: number | null;\n pool_address?: string | null;\n token0_address?: string | null;\n token1_address?: string | null;\n fee_tier?: number | null;\n raw_symbol?: string | null;\n canonical_symbol: string;\n};\n\nexport type HyperliquidMarketIdentityInput = {\n environment: HyperliquidEnvironment;\n symbol: string;\n rawSymbol?: string | null;\n isSpot?: boolean;\n base?: string | null;\n quote?: string | null;\n};\n\nconst UNKNOWN_SYMBOL = \"UNKNOWN\";\n\nconst extractDexPrefix = (value?: string | null): string | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (!trimmed.includes(\":\")) return null;\n if (trimmed.startsWith(\"@\")) return null;\n const [prefix] = trimmed.split(\":\");\n const dex = prefix?.trim().toLowerCase() ?? \"\";\n return dex || null;\n};\n\nconst normalizeHyperliquidBase = (value?: string | null): string | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const base = withoutDex.split(\"-\")[0] ?? withoutDex;\n const normalized = (base.split(\"/\")[0] ?? base).trim().toUpperCase();\n if (!normalized || normalized === UNKNOWN_SYMBOL) return null;\n return normalized;\n};\n\nconst normalizeSpotTokenName = (value?: string | null): string => {\n const raw = (value ?? \"\").trim().toUpperCase();\n if (!raw) return \"\";\n if (raw.endsWith(\"0\") && raw.length > 1) {\n return raw.slice(0, -1);\n }\n return raw;\n};\n\nconst parseHyperliquidPair = (value?: string | null): { base: string; quote: string } | null => {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const separator = withoutDex.includes(\"/\") ? \"/\" : withoutDex.includes(\"-\") ? \"-\" : null;\n if (!separator) return null;\n const [baseRaw, ...rest] = withoutDex.split(separator);\n const quoteRaw = rest.join(separator);\n if (!baseRaw || !quoteRaw) return null;\n const base = baseRaw.trim().toUpperCase();\n const quote = quoteRaw.trim().toUpperCase();\n if (!base || !quote) return null;\n return { base, quote };\n};\n\nexport function buildHyperliquidMarketIdentity(\n input: HyperliquidMarketIdentityInput,\n): MarketIdentity | null {\n const rawSymbol = input.rawSymbol ?? input.symbol;\n const dex = extractDexPrefix(rawSymbol);\n const pair = parseHyperliquidPair(rawSymbol) ?? parseHyperliquidPair(input.symbol);\n const isSpot =\n input.isSpot ?? (Boolean(pair) || rawSymbol.startsWith(\"@\") || input.symbol.includes(\"/\"));\n\n const base =\n (input.base ? input.base.trim().toUpperCase() : null) ??\n pair?.base ??\n normalizeHyperliquidBase(input.symbol) ??\n normalizeHyperliquidBase(rawSymbol);\n\n if (!base) return null;\n\n if (isSpot) {\n const quote = (input.quote ? input.quote.trim().toUpperCase() : null) ?? pair?.quote ?? null;\n if (!quote) return null;\n return {\n market_type: \"spot\",\n venue: \"hyperliquid\",\n environment: input.environment,\n base,\n quote,\n dex,\n raw_symbol: rawSymbol ?? null,\n canonical_symbol: `spot:hyperliquid:${base}-${quote}`,\n };\n }\n\n return {\n market_type: \"perp\",\n venue: \"hyperliquid\",\n environment: input.environment,\n base,\n dex,\n raw_symbol: rawSymbol ?? null,\n canonical_symbol: `perp:hyperliquid:${base}`,\n };\n}\nexport type HyperliquidTimeInForce = \"Gtc\" | \"Ioc\" | \"Alo\" | \"FrontendMarket\" | \"LiquidationMarket\";\nexport type HyperliquidGrouping = \"na\" | \"normalTpsl\" | \"positionTpsl\";\nexport type HyperliquidTriggerType = \"tp\" | \"sl\";\n\n// Hyperliquid account abstraction modes (API naming).\nexport type HyperliquidAbstraction = \"unifiedAccount\" | \"portfolioMargin\" | \"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 const precision = Math.max(0, Math.min(12, Math.floor(decimals)));\n const factor = 10 ** precision;\n const scaled = price * factor;\n const directionalRounded =\n params.side === \"buy\" ? Math.ceil(scaled) / factor : Math.floor(scaled) / factor;\n return formatRoundedDecimal(directionalRounded, precision);\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 SpotUniverseItem = {\n tokens?: number[];\n name?: string;\n index?: number;\n baseToken?: number;\n quoteToken?: number;\n isCanonical?: boolean;\n};\n\ntype SpotToken = {\n name?: string;\n index?: number;\n szDecimals?: number;\n isCanonical?: boolean;\n};\n\ntype SpotMetaResponse = {\n universe?: SpotUniverseItem[];\n tokens?: SpotToken[];\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 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(\n message: string,\n public readonly response: unknown,\n ) {\n const responseRecord =\n response && typeof response === \"object\"\n ? (response as {\n errors?: unknown;\n body?: unknown;\n })\n : null;\n const explicitErrors = Array.isArray(responseRecord?.errors)\n ? responseRecord.errors.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.trim().length > 0,\n )\n : [];\n const bodyStatuses =\n responseRecord?.body &&\n typeof responseRecord.body === \"object\" &&\n responseRecord.body !== null &&\n \"response\" in responseRecord.body\n ? (\n (\n (responseRecord.body as {\n response?: {\n data?: {\n statuses?: Array<{ error?: unknown }>;\n status?: { error?: unknown };\n };\n };\n }).response?.data?.statuses ?? []\n )\n .map((status) => (typeof status?.error === \"string\" ? status.error : null))\n .filter((entry): entry is string => Boolean(entry && entry.trim().length > 0))\n )\n : [];\n const singleStatusError =\n responseRecord?.body &&\n typeof responseRecord.body === \"object\" &&\n responseRecord.body !== null &&\n \"response\" in responseRecord.body\n ? (\n (responseRecord.body as {\n response?: {\n data?: {\n status?: { error?: unknown };\n };\n };\n }).response?.data?.status?.error\n )\n : null;\n const details = Array.from(\n new Set(\n [\n ...explicitErrors,\n ...bodyStatuses,\n typeof singleStatusError === \"string\" ? singleStatusError : null,\n ].filter((entry): entry is string => Boolean(entry && entry.trim().length > 0)),\n ),\n );\n const enrichedMessage = details.length > 0 ? `${message} ${details.join(\" | \")}` : message;\n super(enrichedMessage);\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(message = \"Hyperliquid terms must be accepted before proceeding.\") {\n super(message);\n this.name = \"HyperliquidTermsError\";\n }\n}\n\nexport class HyperliquidBuilderApprovalError extends HyperliquidGuardError {\n constructor(message = \"Hyperliquid builder approval is required before using builder codes.\") {\n super(message);\n this.name = \"HyperliquidBuilderApprovalError\";\n }\n}\n\nexport function createMonotonicNonceFactory(start: number = Date.now()): 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(dexKey ? { type: \"meta\", dex: dexKey } : { type: \"meta\" }),\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\nasync function getSpotMeta(args: {\n baseUrl: string;\n environment: HyperliquidEnvironment;\n fetcher: typeof fetch;\n}): Promise<{ universe: SpotUniverseItem[]; tokens: SpotToken[] }> {\n const cacheKey = `${args.environment}:${args.baseUrl}`;\n const cached = spotMetaCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < CACHE_TTL_MS) {\n return { universe: cached.universe, tokens: cached.tokens };\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: \"spotMeta\" }),\n });\n\n const json = (await response.json().catch(() => null)) as SpotMetaResponse | null;\n if (!response.ok || !json?.universe) {\n throw new HyperliquidApiError(\n \"Unable to load Hyperliquid spot metadata.\",\n json ?? { status: response.status },\n );\n }\n\n const universe = json.universe ?? [];\n const tokens = json.tokens ?? [];\n spotMetaCache.set(cacheKey, { fetchedAt: Date.now(), universe, tokens });\n return { universe, tokens };\n}\n\nexport function resolveAssetIndex(symbol: string, universe: MetaResponse[\"universe\"]): number {\n const [raw] = symbol.split(\"-\");\n const target = raw.trim();\n const index = universe.findIndex((entry) => entry.name.toUpperCase() === target.toUpperCase());\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 PerpDexsResponse | 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((entry) => entry?.name?.toLowerCase() === target);\n if (index === -1) {\n throw new Error(`Unknown Hyperliquid perp dex: ${args.dex}`);\n }\n return index;\n}\n\nfunction buildSpotTokenIndexMap(tokens: SpotToken[]): Map<string, number> {\n const map = new Map<string, number>();\n for (const token of tokens) {\n const name = normalizeSpotTokenName(token?.name);\n const index =\n typeof token?.index === \"number\" && Number.isFinite(token.index) ? token.index : null;\n if (!name || index == null) continue;\n if (!map.has(name) || token?.isCanonical) {\n map.set(name, index);\n }\n }\n return map;\n}\n\nfunction resolveSpotTokenIndex(tokenMap: Map<string, number>, value: string): number | null {\n const normalized = normalizeSpotTokenName(value);\n if (!normalized) return null;\n const direct = tokenMap.get(normalized);\n if (direct != null) return direct;\n if (!normalized.startsWith(\"U\")) {\n const prefixed = tokenMap.get(`U${normalized}`);\n if (prefixed != null) return prefixed;\n }\n return null;\n}\n\nfunction resolveSpotMarketIndex(args: {\n universe: SpotUniverseItem[];\n baseToken: number;\n quoteToken: number;\n}): number | null {\n for (let i = 0; i < args.universe.length; i += 1) {\n const entry = args.universe[i];\n const tokens = Array.isArray(entry?.tokens) ? entry.tokens : null;\n const baseToken = tokens?.[0] ?? entry?.baseToken ?? null;\n const quoteToken = tokens?.[1] ?? entry?.quoteToken ?? null;\n if (baseToken === args.baseToken && quoteToken === args.quoteToken) {\n if (typeof entry?.index === \"number\" && Number.isFinite(entry.index)) {\n return entry.index;\n }\n return i;\n }\n }\n return null;\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 if (trimmed.startsWith(\"@\")) {\n const rawIndex = trimmed.slice(1).trim();\n const index = Number(rawIndex);\n if (!Number.isFinite(index)) {\n throw new Error(`Hyperliquid spot market index is invalid: ${trimmed}`);\n }\n return 10000 + index;\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 pair = parseHyperliquidPair(trimmed);\n if (pair) {\n const { universe, tokens } = await getSpotMeta({\n baseUrl: args.baseUrl,\n environment: args.environment,\n fetcher: args.fetcher,\n });\n const tokenMap = buildSpotTokenIndexMap(tokens);\n const baseToken = resolveSpotTokenIndex(tokenMap, pair.base);\n const quoteToken = resolveSpotTokenIndex(tokenMap, pair.quote);\n if (baseToken == null || quoteToken == null) {\n throw new Error(`Unknown Hyperliquid spot symbol: ${trimmed}`);\n }\n const marketIndex = resolveSpotMarketIndex({\n universe,\n baseToken,\n quoteToken,\n });\n if (marketIndex == null) {\n throw new Error(`Unknown Hyperliquid spot symbol: ${trimmed}`);\n }\n return 10000 + marketIndex;\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 const trimmed = value.trim();\n if (!trimmed.length) {\n throw new Error(\"Decimal strings must be non-empty.\");\n }\n if (!/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(\"Decimal strings must be plain base-10 numbers.\");\n }\n return trimmed\n .replace(/^(-?)0+(?=\\d)/, \"$1\")\n .replace(/\\.0*$|(\\.\\d+?)0+$/, \"$1\")\n .replace(/^(-?)\\./, \"$10.\")\n .replace(/^-?$/, \"0\")\n .replace(/^-0$/, \"0\");\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 integerPart + fractionalPart.padEnd(exponent + fractionalPart.length, \"0\");\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\nconst NORMALIZED_HEX_PATTERN = /^0x[0-9a-f]+$/;\nconst ADDRESS_HEX_LENGTH = 42;\nconst CLOID_HEX_LENGTH = 34;\n\nexport function normalizeHex(value: `0x${string}`): `0x${string}` {\n const lower = value.trim().toLowerCase() as `0x${string}`;\n if (!NORMALIZED_HEX_PATTERN.test(lower)) {\n throw new Error(`Invalid hex value: ${value}`);\n }\n return lower;\n}\n\nexport function normalizeAddress(value: `0x${string}`): `0x${string}` {\n const normalized = normalizeHex(value);\n if (normalized.length !== ADDRESS_HEX_LENGTH) {\n throw new Error(`Invalid address length: ${normalized}`);\n }\n return normalized;\n}\n\nexport function normalizeCloid(value: `0x${string}`): `0x${string}` {\n const normalized = normalizeHex(value);\n if (normalized.length !== CLOID_HEX_LENGTH) {\n throw new Error(`Invalid cloid length: ${normalized}`);\n }\n return normalized;\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 { wallet, hyperliquidChain, signatureChainId, destination, token, amount, time } = 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 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 ? hexToBytes(vaultAddress.slice(2)) : new Uint8Array();\n\n const hasExpiresAfter = typeof expiresAfter === \"number\";\n const expiresMarker = hasExpiresAfter ? new Uint8Array([0]) : new Uint8Array();\n const expiresBytes =\n hasExpiresAfter && expiresAfter !== undefined ? toUint64Bytes(expiresAfter) : 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(value: number, label: string): 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 type { HyperliquidEnvironment } from \"./base\";\n\nconst UNKNOWN_SYMBOL = \"UNKNOWN\";\n\nexport type HyperliquidParsedSymbolKind = \"perp\" | \"spot\" | \"spotIndex\";\n\nexport type HyperliquidParsedSymbol = {\n raw: string;\n kind: HyperliquidParsedSymbolKind;\n normalized: string;\n routeTicker: string;\n displaySymbol: string;\n base: string | null;\n quote: string | null;\n pair: string | null;\n dex: string | null;\n leverageMode: \"cross\" | \"isolated\";\n};\n\nexport type HyperliquidMarketDescriptor = {\n rawSymbol: string;\n kind: HyperliquidParsedSymbolKind;\n routeTicker: string;\n displaySymbol: string;\n normalized: string;\n orderSymbol: string;\n marketDataCoin: string;\n base: string | null;\n quote: string | null;\n pair: string | null;\n canonicalPair: string | null;\n dex: string | null;\n leverageMode: \"cross\" | \"isolated\";\n spotIndex: number | null;\n assetId: number | null;\n};\n\nexport type HyperliquidMarketDescriptorInput = {\n symbol: string;\n quote?: string | null;\n pair?: string | null;\n displaySymbol?: string | null;\n orderSymbol?: string | null;\n marketDataCoin?: string | null;\n spotIndex?: number | null;\n assetId?: number | null;\n};\n\nexport function extractHyperliquidDex(symbol: string): string | null {\n const idx = symbol.indexOf(\":\");\n if (idx <= 0) return null;\n const dex = symbol.slice(0, idx).trim().toLowerCase();\n return dex || null;\n}\n\nexport function parseHyperliquidSymbol(value?: string | null): HyperliquidParsedSymbol | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.startsWith(\"@\")) {\n return {\n raw: trimmed,\n kind: \"spotIndex\",\n normalized: trimmed,\n routeTicker: trimmed,\n displaySymbol: trimmed,\n base: null,\n quote: null,\n pair: null,\n dex: null,\n leverageMode: \"cross\",\n };\n }\n\n const dex = extractHyperliquidDex(trimmed);\n const pair = resolveHyperliquidPair(trimmed);\n const base = normalizeHyperliquidBaseSymbol(trimmed);\n\n if (dex) {\n if (!base) return null;\n return {\n raw: trimmed,\n kind: \"perp\",\n normalized: `${dex}:${base}`,\n routeTicker: `${dex}:${base}`,\n displaySymbol: `${dex.toUpperCase()}:${base}-USDC`,\n base,\n quote: null,\n pair: null,\n dex,\n leverageMode: \"isolated\",\n };\n }\n\n if (pair) {\n const [pairBase, pairQuote] = pair.split(\"/\");\n return {\n raw: trimmed,\n kind: \"spot\",\n normalized: pair,\n routeTicker: pair.replace(\"/\", \"-\"),\n displaySymbol: pair.replace(\"/\", \"-\"),\n base: pairBase ?? null,\n quote: pairQuote ?? null,\n pair,\n dex: null,\n leverageMode: \"cross\",\n };\n }\n\n if (!base) return null;\n return {\n raw: trimmed,\n kind: \"perp\",\n normalized: base,\n routeTicker: base,\n displaySymbol: `${base}-USDC`,\n base,\n quote: null,\n pair: null,\n dex: null,\n leverageMode: \"cross\",\n };\n}\n\nfunction normalizeHyperliquidQuoteSymbol(value?: string | null): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n return canonicalizeHyperliquidTokenCase(trimmed).toUpperCase();\n}\n\nexport function normalizeSpotTokenName(value?: string | null): string {\n const raw = (value ?? \"\").trim();\n if (!raw) return \"\";\n if (raw.endsWith(\"0\") && raw.length > 1) {\n return raw.slice(0, -1);\n }\n return raw;\n}\n\nfunction canonicalizeHyperliquidTokenCase(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n return trimmed === trimmed.toLowerCase() ? trimmed.toUpperCase() : trimmed;\n}\n\nexport function normalizeHyperliquidBaseSymbol(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const base = withoutDex.split(\"-\")[0] ?? withoutDex;\n const baseNoPair = base.split(\"/\")[0] ?? base;\n const normalized = canonicalizeHyperliquidTokenCase(baseNoPair);\n if (!normalized || normalized === UNKNOWN_SYMBOL) return null;\n return normalized;\n}\n\nexport function normalizeHyperliquidMetaSymbol(symbol: string): string {\n const trimmed = symbol.trim();\n const noDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n const noPair = noDex.split(\"-\")[0] ?? noDex;\n return (noPair.split(\"/\")[0] ?? noPair).trim();\n}\n\nexport function resolveHyperliquidPair(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n const withoutDex = trimmed.includes(\":\") ? trimmed.split(\":\").slice(1).join(\":\") : trimmed;\n if (withoutDex.includes(\"/\")) {\n const [base, ...rest] = withoutDex.split(\"/\");\n const quote = rest.join(\"/\").trim();\n if (!base || !quote) return null;\n return `${canonicalizeHyperliquidTokenCase(base)}/${canonicalizeHyperliquidTokenCase(quote)}`;\n }\n if (withoutDex.includes(\"-\")) {\n const [base, ...rest] = withoutDex.split(\"-\");\n const quote = rest.join(\"-\").trim();\n if (!base || !quote) return null;\n return `${canonicalizeHyperliquidTokenCase(base)}/${canonicalizeHyperliquidTokenCase(quote)}`;\n }\n return null;\n}\n\nexport function buildHyperliquidMarketDescriptor(\n input: HyperliquidMarketDescriptorInput,\n): HyperliquidMarketDescriptor | null {\n const rawSymbol = input.symbol?.trim();\n if (!rawSymbol) return null;\n\n const parsed = parseHyperliquidSymbol(rawSymbol);\n if (!parsed) return null;\n\n const explicitPair = resolveHyperliquidPair(input.pair);\n const explicitQuote = normalizeHyperliquidQuoteSymbol(input.quote);\n\n if (parsed.kind === \"spot\" || parsed.kind === \"spotIndex\") {\n const canonicalPair = explicitPair ?? parsed.pair;\n const pair = canonicalPair;\n const [pairBase, pairQuote] = (canonicalPair ?? \"\")\n .split(\"/\")\n .map((part) => canonicalizeHyperliquidTokenCase(part).toUpperCase());\n const base = pairBase || parsed.base;\n const quote = pairQuote || explicitQuote || parsed.quote;\n const normalized = pair ?? parsed.normalized;\n const routeTicker =\n pair && base && quote ? `${base}-${quote}` : parsed.routeTicker;\n const displaySymbol =\n input.displaySymbol?.trim() ||\n (pair && base && quote ? `${base}-${quote}` : parsed.displaySymbol);\n const orderSymbol =\n input.orderSymbol?.trim() || resolveHyperliquidOrderSymbol(normalized);\n const marketDataCoin =\n input.marketDataCoin?.trim() ||\n (typeof input.spotIndex === \"number\" ? `@${input.spotIndex}` : resolveHyperliquidMarketDataCoin(normalized));\n\n if (!orderSymbol || !marketDataCoin) return null;\n\n return {\n rawSymbol,\n kind: parsed.kind,\n routeTicker,\n displaySymbol,\n normalized,\n orderSymbol,\n marketDataCoin,\n base: base ?? null,\n quote: quote ?? null,\n pair,\n canonicalPair: pair,\n dex: null,\n leverageMode: \"cross\",\n spotIndex: input.spotIndex ?? null,\n assetId: input.assetId ?? null,\n };\n }\n\n const base = parsed.base;\n const quote = explicitQuote;\n const canonicalPair = base && quote ? `${base}/${quote}` : null;\n const displaySymbol =\n input.displaySymbol?.trim() ||\n (canonicalPair\n ? canonicalPair.replace(\"/\", \"-\")\n : parsed.dex\n ? base ?? parsed.normalized\n : parsed.displaySymbol);\n const normalized = parsed.normalized;\n const orderSymbol =\n input.orderSymbol?.trim() || resolveHyperliquidOrderSymbol(normalized);\n const marketDataCoin =\n input.marketDataCoin?.trim() || resolveHyperliquidMarketDataCoin(normalized);\n\n if (!orderSymbol || !marketDataCoin) return null;\n\n return {\n rawSymbol,\n kind: parsed.kind,\n routeTicker: parsed.routeTicker,\n displaySymbol,\n normalized,\n orderSymbol,\n marketDataCoin,\n base,\n quote,\n pair: null,\n canonicalPair,\n dex: parsed.dex,\n leverageMode: parsed.leverageMode,\n spotIndex: input.spotIndex ?? null,\n assetId: input.assetId ?? null,\n };\n}\n\nexport function resolveHyperliquidLeverageMode(symbol: string): \"cross\" | \"isolated\" {\n return symbol.includes(\":\") ? \"isolated\" : \"cross\";\n}\n\nexport type HyperliquidProfileChain = \"hyperliquid\" | \"hyperliquid-testnet\";\n\nexport type HyperliquidProfileAssetInput = {\n assetSymbols: string[];\n pair?: string | null;\n leverage?: number | null;\n walletAddress?: string | null;\n};\n\nexport type HyperliquidProfileAsset = {\n venue: \"hyperliquid\";\n chain: HyperliquidProfileChain;\n assetSymbols: string[];\n pair?: string;\n leverage?: number;\n walletAddress?: string;\n};\n\nexport function resolveHyperliquidProfileChain(\n environment: HyperliquidEnvironment,\n): HyperliquidProfileChain {\n return environment === \"testnet\" ? \"hyperliquid-testnet\" : \"hyperliquid\";\n}\n\nexport function buildHyperliquidProfileAssets(params: {\n environment: HyperliquidEnvironment;\n assets: HyperliquidProfileAssetInput[];\n}): HyperliquidProfileAsset[] {\n const chain = resolveHyperliquidProfileChain(params.environment);\n\n return params.assets\n .map((asset) => {\n const symbols = asset.assetSymbols\n .map((symbol) => normalizeHyperliquidBaseSymbol(symbol))\n .filter((symbol): symbol is string => Boolean(symbol));\n if (symbols.length === 0) return null;\n\n const explicitPair =\n typeof asset.pair === \"string\" ? resolveHyperliquidPair(asset.pair) : null;\n const derivedPair =\n symbols.length === 1 ? resolveHyperliquidPair(asset.assetSymbols[0] ?? symbols[0]) : null;\n const pair = explicitPair ?? derivedPair ?? undefined;\n const leverage =\n typeof asset.leverage === \"number\" && Number.isFinite(asset.leverage) && asset.leverage > 0\n ? asset.leverage\n : undefined;\n const walletAddress =\n typeof asset.walletAddress === \"string\" && asset.walletAddress.trim().length > 0\n ? asset.walletAddress.trim()\n : undefined;\n\n return {\n venue: \"hyperliquid\" as const,\n chain,\n assetSymbols: symbols,\n ...(pair ? { pair } : {}),\n ...(leverage ? { leverage } : {}),\n ...(walletAddress ? { walletAddress } : {}),\n };\n })\n .filter((asset): asset is HyperliquidProfileAsset => asset !== null);\n}\n\nexport function parseSpotPairSymbol(symbol: string): { base: string; quote: string } | null {\n const trimmed = symbol.trim();\n if (!trimmed.includes(\"/\")) return null;\n const [rawBase, rawQuote] = trimmed.split(\"/\");\n const base = rawBase?.trim().toUpperCase() ?? \"\";\n const quote = rawQuote?.trim().toUpperCase() ?? \"\";\n if (!base || !quote) return null;\n return { base, quote };\n}\n\nexport function isHyperliquidSpotSymbol(symbol: string): boolean {\n const trimmed = symbol.trim();\n if (!trimmed) return false;\n if (trimmed.startsWith(\"@\") || trimmed.includes(\"/\")) return true;\n if (trimmed.includes(\":\")) return false;\n return resolveHyperliquidPair(trimmed) !== null;\n}\n\nexport function resolveHyperliquidMarketDataCoin(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith(\"@\")) return trimmed;\n const pair = resolveHyperliquidPair(trimmed);\n if (pair && !extractHyperliquidDex(trimmed)) {\n return pair;\n }\n return trimmed;\n}\n\nexport function supportsHyperliquidBuilderFee(params: {\n symbol: string;\n side: \"buy\" | \"sell\";\n}): boolean {\n if (!isHyperliquidSpotSymbol(params.symbol)) {\n return true;\n }\n return params.side === \"sell\";\n}\n\nexport function resolveSpotMidCandidates(baseSymbol: string): string[] {\n const base = baseSymbol.trim().toUpperCase();\n if (!base) return [];\n const candidates = [base];\n if (base.startsWith(\"U\") && base.length > 1) {\n candidates.push(base.slice(1));\n }\n return Array.from(new Set(candidates));\n}\n\nexport function resolveSpotTokenCandidates(value: string): string[] {\n const normalized = normalizeSpotTokenName(value).toUpperCase();\n if (!normalized) return [];\n const candidates = [normalized];\n if (normalized.startsWith(\"U\") && normalized.length > 1) {\n candidates.push(normalized.slice(1));\n }\n return Array.from(new Set(candidates));\n}\n\nexport function resolveHyperliquidOrderSymbol(value?: string | null): string | null {\n if (!value) return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith(\"@\")) return trimmed;\n if (trimmed.includes(\":\")) {\n const [rawDex, ...restParts] = trimmed.split(\":\");\n const dex = rawDex.trim().toLowerCase();\n const rest = restParts.join(\":\");\n const normalizedBase = normalizeHyperliquidBaseSymbol(rest);\n if (!dex || !normalizedBase || normalizedBase === UNKNOWN_SYMBOL) {\n return null;\n }\n return `${dex}:${normalizedBase}`;\n }\n const pair = resolveHyperliquidPair(trimmed);\n if (pair) return pair;\n return normalizeHyperliquidBaseSymbol(trimmed);\n}\n\nexport function resolveHyperliquidSymbol(asset: string, override?: string): string {\n const raw = override && override.trim().length > 0 ? override.trim() : asset.trim();\n if (!raw) return raw;\n if (raw.startsWith(\"@\")) return raw;\n if (raw.includes(\":\")) {\n const [dexRaw, ...restParts] = raw.split(\":\");\n const dex = dexRaw.trim().toLowerCase();\n const rest = restParts.join(\":\");\n const normalizedBase = normalizeHyperliquidBaseSymbol(rest) ?? canonicalizeHyperliquidTokenCase(rest);\n if (!dex) return normalizedBase;\n return `${dex}:${normalizedBase}`;\n }\n if (raw.includes(\"/\")) {\n return resolveHyperliquidPair(raw) ?? raw;\n }\n if (raw.includes(\"-\")) {\n return resolveHyperliquidPair(raw) ?? raw;\n }\n return normalizeHyperliquidBaseSymbol(raw) ?? canonicalizeHyperliquidTokenCase(raw);\n}\n\nexport function resolveHyperliquidPerpSymbol(asset: string): string {\n const raw = asset.trim();\n if (!raw) return raw;\n\n const dex = extractHyperliquidDex(raw);\n const base = normalizeHyperliquidBaseSymbol(raw) ?? raw.toUpperCase();\n return dex ? `${dex}:${base}` : base;\n}\n\nexport function resolveHyperliquidSpotSymbol(asset: string, defaultQuote = \"USDC\"): {\n symbol: string;\n base: string;\n quote: string;\n} {\n const quote = defaultQuote.trim().toUpperCase() || \"USDC\";\n const raw = asset.trim().toUpperCase();\n if (!raw) {\n return { symbol: raw, base: raw, quote };\n }\n\n const pair = resolveHyperliquidPair(raw);\n if (pair) {\n const [base, pairQuote] = pair.split(\"/\");\n return {\n symbol: pair,\n base: base?.trim() ?? raw,\n quote: pairQuote?.trim() ?? quote,\n };\n }\n\n const base = normalizeHyperliquidBaseSymbol(raw) ?? raw;\n return { symbol: `${base}/${quote}`, base, quote };\n}\n","import {\n API_BASES,\n HyperliquidApiError,\n HyperliquidEnvironment,\n normalizeAddress,\n} from \"./base\";\nimport { resolveHyperliquidOrderSymbol } from \"./symbols\";\n\ntype InfoPayload =\n | { type: \"meta\" }\n | { type: \"meta\"; dex: string }\n | { type: \"metaAndAssetCtxs\" }\n | { type: \"metaAndAssetCtxs\"; dex: string }\n | { type: \"spotMeta\" }\n | { type: \"spotMetaAndAssetCtxs\" }\n | { type: \"assetCtxs\" }\n | { type: \"spotAssetCtxs\" }\n | { type: \"openOrders\"; user: `0x${string}`; dex?: string }\n | { type: \"frontendOpenOrders\"; user: `0x${string}`; dex?: string }\n | { type: \"orderStatus\"; user: `0x${string}`; oid: number | string }\n | { type: \"historicalOrders\"; user: `0x${string}`; dex?: 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 | { type: \"activeAssetData\"; user: `0x${string}`; coin: string };\n\nexport const HYPERLIQUID_HIP3_DEXES = [\n \"xyz\",\n \"flx\",\n \"vntl\",\n \"hyna\",\n \"km\",\n \"cash\",\n] as const;\n\nexport type HyperliquidHip3Dex = (typeof HYPERLIQUID_HIP3_DEXES)[number];\n\nexport type HyperliquidOpenOrderLike = {\n oid?: number;\n cloid?: string | null;\n [key: string]: unknown;\n};\n\nexport type HyperliquidActiveAsset = {\n coin: string;\n leverage: number | null;\n leverageType: string | null;\n raw: unknown;\n};\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\nfunction mergeHyperliquidOpenOrders<T extends HyperliquidOpenOrderLike>(batches: T[][]): T[] {\n const merged = new Map<string, T>();\n for (const batch of batches) {\n for (const order of batch) {\n const oid =\n typeof order.oid === \"number\" || typeof order.oid === \"string\"\n ? String(order.oid)\n : \"no-oid\";\n const cloid = typeof order.cloid === \"string\" && order.cloid.trim().length > 0\n ? order.cloid\n : \"no-cloid\";\n merged.set(`${oid}:${cloid}`, order);\n }\n }\n return [...merged.values()];\n}\n\nfunction readNumber(value: unknown): number | null {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : null;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\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 activeAsset(user: `0x${string}`, symbol: string) {\n return fetchHyperliquidActiveAsset({\n user,\n symbol,\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 fetchHyperliquidDexMeta(\n environment: HyperliquidEnvironment = \"mainnet\",\n dex: string,\n) {\n return postInfo(environment, { type: \"meta\", dex });\n}\n\nexport async function fetchHyperliquidMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\",\n) {\n return postInfo(environment, { type: \"metaAndAssetCtxs\" });\n}\n\nexport async function fetchHyperliquidDexMetaAndAssetCtxs(\n environment: HyperliquidEnvironment = \"mainnet\",\n dex: string,\n) {\n return postInfo(environment, { type: \"metaAndAssetCtxs\", dex });\n}\n\nexport async function fetchHyperliquidSpotMeta(environment: HyperliquidEnvironment = \"mainnet\") {\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(environment: HyperliquidEnvironment = \"mainnet\") {\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 dex?: string | null;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"openOrders\",\n user: normalizeAddress(params.user),\n ...(params.dex ? { dex: params.dex.trim().toLowerCase() } : {}),\n });\n}\n\nexport async function fetchHyperliquidFrontendOpenOrders(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n dex?: string | null;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"frontendOpenOrders\",\n user: normalizeAddress(params.user),\n ...(params.dex ? { dex: params.dex.trim().toLowerCase() } : {}),\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 dex?: string | null;\n}) {\n const env = params.environment ?? \"mainnet\";\n return postInfo(env, {\n type: \"historicalOrders\",\n user: normalizeAddress(params.user),\n ...(params.dex ? { dex: params.dex.trim().toLowerCase() } : {}),\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\nexport function getKnownHyperliquidDexes(environment: HyperliquidEnvironment = \"mainnet\"): string[] {\n return environment === \"mainnet\" ? [...HYPERLIQUID_HIP3_DEXES] : [];\n}\n\nexport async function fetchHyperliquidOpenOrdersAcrossDexes<T extends HyperliquidOpenOrderLike>(\n params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n dexes?: string[];\n includePrimary?: boolean;\n },\n): Promise<T[]> {\n const environment = params.environment ?? \"mainnet\";\n const requests = [\n ...(params.includePrimary === false\n ? []\n : [fetchHyperliquidOpenOrders({ environment, user: params.user }) as Promise<T[]>]),\n ...getKnownHyperliquidDexes(environment)\n .filter((dex) => !(params.dexes && !params.dexes.includes(dex)))\n .map((dex) =>\n fetchHyperliquidOpenOrders({\n environment,\n user: params.user,\n dex,\n }) as Promise<T[]>,\n ),\n ];\n const batches = await Promise.all(requests);\n return mergeHyperliquidOpenOrders(batches);\n}\n\nexport async function fetchHyperliquidFrontendOpenOrdersAcrossDexes<\n T extends HyperliquidOpenOrderLike,\n>(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n dexes?: string[];\n includePrimary?: boolean;\n}): Promise<T[]> {\n const environment = params.environment ?? \"mainnet\";\n const requests = [\n ...(params.includePrimary === false\n ? []\n : [fetchHyperliquidFrontendOpenOrders({ environment, user: params.user }) as Promise<T[]>]),\n ...getKnownHyperliquidDexes(environment)\n .filter((dex) => !(params.dexes && !params.dexes.includes(dex)))\n .map((dex) =>\n fetchHyperliquidFrontendOpenOrders({\n environment,\n user: params.user,\n dex,\n }) as Promise<T[]>,\n ),\n ];\n const batches = await Promise.all(requests);\n return mergeHyperliquidOpenOrders(batches);\n}\n\nexport async function fetchHyperliquidActiveAsset(params: {\n environment?: HyperliquidEnvironment;\n user: `0x${string}`;\n symbol: string;\n}): Promise<HyperliquidActiveAsset> {\n const environment = params.environment ?? \"mainnet\";\n const coin = resolveHyperliquidOrderSymbol(params.symbol);\n if (!coin) {\n throw new Error(`Unable to resolve Hyperliquid active asset symbol: ${params.symbol}`);\n }\n const raw = await postInfo(environment, {\n type: \"activeAssetData\",\n user: normalizeAddress(params.user),\n coin,\n });\n const record =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : null;\n const leverageRecord =\n record?.leverage && typeof record.leverage === \"object\" && !Array.isArray(record.leverage)\n ? (record.leverage as Record<string, unknown>)\n : null;\n return {\n coin,\n leverage:\n leverageRecord && \"value\" in leverageRecord\n ? readNumber(leverageRecord.value)\n : readNumber(record?.leverage),\n leverageType:\n leverageRecord && typeof leverageRecord.type === \"string\" ? leverageRecord.type : null,\n raw,\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 HyperliquidUserPortfolioMarginAction,\n type HyperliquidUserSetAbstractionAction,\n type NonceSource,\n type HyperliquidExchangeResponse,\n assertPositiveNumber,\n normalizeCloid,\n getSignatureChainId,\n normalizeAddress,\n resolveHyperliquidAbstractionFromMode,\n resolveHyperliquidAssetIndex,\n signL1Action,\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\nfunction resolveRequiredExchangeNonce(options: {\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n walletNonceProvider?: NonceSource | undefined;\n wallet: WalletFullContext;\n action: string;\n}): number {\n if (typeof options.nonce === \"number\") {\n return options.nonce;\n }\n\n const resolved =\n options.walletNonceProvider?.() ??\n options.wallet.nonceSource?.() ??\n options.nonceSource?.();\n\n if (resolved === undefined) {\n throw new Error(`${options.action} requires an explicit nonce or wallet nonce source.`);\n }\n\n return resolved;\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(\"Wallet nonce source is required for Hyperliquid exchange actions.\");\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 setAccountAbstractionMode(params: { mode: HyperliquidAccountMode; user?: `0x${string}` }) {\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<Parameters<typeof setHyperliquidAccountAbstractionMode>[0], \"user\">;\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(params.user ? { ...base, user: params.user } : base);\n }\n}\n\nexport async function setHyperliquidPortfolioMargin(\n options: {\n wallet: WalletFullContext;\n enabled: boolean;\n user?: `0x${string}`;\n } & CommonActionOptions,\n): Promise<HyperliquidExchangeResponse<unknown>> {\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 portfolio margin.\");\n }\n\n const nonce = resolveRequiredExchangeNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n walletNonceProvider: options.walletNonceProvider,\n wallet: options.wallet,\n action: \"Hyperliquid portfolio margin\",\n });\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(options.user ?? (options.wallet.address as `0x${string}`));\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 setHyperliquidAccountAbstractionMode(\n options: {\n wallet: WalletFullContext;\n mode: HyperliquidAccountMode;\n user?: `0x${string}`;\n } & CommonActionOptions,\n): Promise<HyperliquidExchangeResponse<unknown>> {\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 account abstraction mode.\");\n }\n\n const nonce = resolveRequiredExchangeNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n walletNonceProvider: options.walletNonceProvider,\n wallet: options.wallet,\n action: \"Hyperliquid account abstraction mode\",\n });\n\n const signatureChainId = getSignatureChainId(env);\n const hyperliquidChain = HL_CHAIN_LABEL[env];\n const user = normalizeAddress(options.user ?? (options.wallet.address as `0x${string}`));\n\n const abstraction: HyperliquidAbstraction = 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(\n options: {\n wallet: WalletFullContext;\n cancels: CancelInput[];\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n cancels: CancelByCloidInput[];\n } & CommonActionOptions,\n) {\n options.cancels.forEach((c) => assertSymbol(c.symbol));\n const action = {\n type: \"cancelByCloid\",\n cancels: await withAssetIndexes(options, options.cancels, (idx, entry) => ({\n asset: idx,\n cloid: normalizeCloid(entry.cloid),\n })),\n };\n return submitExchangeAction(options, action);\n}\n\nexport async function cancelAllHyperliquidOrders(\n options: {\n wallet: WalletFullContext;\n } & CommonActionOptions,\n) {\n const action = { type: \"cancelAll\" };\n return submitExchangeAction(options, action);\n}\n\nexport async function scheduleHyperliquidCancel(\n options: {\n wallet: WalletFullContext;\n time?: number | null;\n } & CommonActionOptions,\n) {\n if (options.time != null) {\n assertPositiveNumber(options.time, \"time\");\n }\n const action =\n options.time == null\n ? { type: \"scheduleCancel\" }\n : { type: \"scheduleCancel\", time: options.time };\n return submitExchangeAction(options, action);\n}\n\nexport async function modifyHyperliquidOrder(\n options: {\n wallet: WalletFullContext;\n modification: ModifyOrderInput;\n grouping?: HyperliquidGrouping;\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n modifications: ModifyOrderInput[];\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n twap: TwapOrderInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n cancel: TwapCancelInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n input: UpdateLeverageInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n input: UpdateIsolatedMarginInput;\n } & CommonActionOptions,\n) {\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: (...args) => fetch(...args),\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(\n options: {\n wallet: WalletFullContext;\n weight: number;\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n name: string;\n } & CommonActionOptions,\n) {\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(\n options: {\n wallet: WalletFullContext;\n subAccountUser: `0x${string}`;\n isDeposit: boolean;\n usd: string | number | bigint;\n } & CommonActionOptions,\n) {\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 | undefined;\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 = resolveRequiredExchangeNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n wallet: options.wallet,\n action: \"Hyperliquid spot send\",\n });\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 ? normalizeAddress(options.vaultAddress) : 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: (...args) => fetch(...args),\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: (...args) => fetch(...args),\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: normalizeCloid(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(value: string | number | bigint, label: string) {\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 if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(value.trim())) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const numeric = Number(value);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n}\n\nfunction collectExchangeErrorMessages(payload: unknown): string[] {\n if (!payload || typeof payload !== \"object\") return [];\n const root = payload as {\n response?: {\n data?: {\n statuses?: unknown[];\n status?: unknown;\n };\n };\n };\n\n const messages: string[] = [];\n const statuses = root.response?.data?.statuses;\n if (Array.isArray(statuses)) {\n statuses.forEach((status, index) => {\n if (\n status &&\n typeof status === \"object\" &&\n \"error\" in status &&\n typeof (status as { error?: unknown }).error === \"string\"\n ) {\n const errorText = (status as { error: string }).error;\n messages.push(`status[${index}]: ${errorText}`);\n }\n });\n }\n\n const singleStatus = root.response?.data?.status;\n if (\n singleStatus &&\n typeof singleStatus === \"object\" &&\n \"error\" in singleStatus &&\n typeof (singleStatus as { error?: unknown }).error === \"string\"\n ) {\n messages.push((singleStatus as { error: string }).error);\n }\n\n return messages;\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 const nestedErrors = collectExchangeErrorMessages(json);\n if (nestedErrors.length > 0) {\n throw new HyperliquidApiError(\"Hyperliquid exchange returned action errors.\", {\n status: response.status,\n statusText: response.statusText,\n body: json,\n errors: nestedErrors,\n });\n }\n\n return json;\n}\n","import type { HyperliquidEnvironment } from \"./base\";\n\nexport type HyperliquidChain = \"arbitrum\" | \"arbitrum-sepolia\";\nexport type HyperliquidStoreNetwork = \"hyperliquid\" | \"hyperliquid-testnet\";\n\nexport function resolveHyperliquidChain(environment: HyperliquidEnvironment): HyperliquidChain {\n return environment === \"mainnet\" ? \"arbitrum\" : \"arbitrum-sepolia\";\n}\n\nexport function resolveHyperliquidRpcEnvVar(\n environment: HyperliquidEnvironment,\n): \"ARBITRUM_RPC_URL\" | \"ARBITRUM_SEPOLIA_RPC_URL\" {\n return environment === \"mainnet\" ? \"ARBITRUM_RPC_URL\" : \"ARBITRUM_SEPOLIA_RPC_URL\";\n}\n\nexport function resolveHyperliquidChainConfig(\n environment: HyperliquidEnvironment,\n env: Record<string, string | undefined> = process.env,\n): { chain: HyperliquidChain; rpcUrl?: string } {\n const rpcVar = resolveHyperliquidRpcEnvVar(environment);\n const rpcUrl = env[rpcVar];\n return {\n chain: resolveHyperliquidChain(environment),\n ...(rpcUrl ? { rpcUrl } : {}),\n };\n}\n\nexport function resolveHyperliquidStoreNetwork(\n environment: HyperliquidEnvironment,\n): HyperliquidStoreNetwork {\n return environment === \"mainnet\" ? \"hyperliquid\" : \"hyperliquid-testnet\";\n}\n","export type HyperliquidExecutionMode = \"long-only\" | \"long-short\";\n\nexport type HyperliquidTradeSignal = \"buy\" | \"sell\" | \"hold\" | \"unknown\";\n\nexport type HyperliquidTradePlan = {\n side: \"buy\" | \"sell\";\n size: number;\n reduceOnly: boolean;\n targetSize: number;\n};\n\nexport interface HyperliquidTargetSizeConfig {\n allocationMode: \"percent_equity\" | \"fixed\";\n percentOfEquity: number;\n maxPercentOfEquity: number;\n amountUsd?: number;\n}\n\nexport interface HyperliquidTargetSizeExecution {\n size?: number;\n}\n\nexport type HyperliquidDcaSymbolInput = { symbol: string; weight?: number } | string;\n\nexport type HyperliquidDcaSymbolEntry = {\n symbol: string;\n weight: number;\n};\n\nexport type HyperliquidDcaNormalizedEntry = {\n symbol: string;\n weight: number;\n normalizedWeight: number;\n};\n\nfunction clampDcaWeight(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return 0;\n return Math.min(1_000_000, Math.max(0, value));\n}\n\nexport function resolveHyperliquidBudgetUsd(params: {\n config: HyperliquidTargetSizeConfig;\n accountValue: number | null;\n}): number {\n const { config, accountValue } = params;\n if (config.allocationMode === \"fixed\") {\n const desiredUsd = config.amountUsd ?? 0;\n if (!Number.isFinite(desiredUsd) || desiredUsd <= 0) {\n throw new Error(\"fixed allocation requires amountUsd\");\n }\n return desiredUsd;\n }\n\n if (!Number.isFinite(accountValue ?? Number.NaN)) {\n throw new Error(\"percent allocation requires accountValue\");\n }\n const rawUsd = (accountValue as number) * (config.percentOfEquity / 100);\n const maxPercentUsd = (accountValue as number) * (config.maxPercentOfEquity / 100);\n return Math.min(rawUsd, maxPercentUsd);\n}\n\nexport function resolveHyperliquidDcaSymbolEntries(\n inputs: HyperliquidDcaSymbolInput[] | undefined,\n fallbackSymbol: string,\n): HyperliquidDcaSymbolEntry[] {\n const entries: HyperliquidDcaSymbolEntry[] = [];\n const values = Array.isArray(inputs) ? inputs : [];\n\n for (const input of values) {\n if (typeof input === \"string\") {\n const trimmed = input.trim();\n if (!trimmed) continue;\n const [rawSymbol, rawWeight] = trimmed.split(\":\");\n const symbol = rawSymbol?.trim();\n if (!symbol) continue;\n const parsedWeight =\n typeof rawWeight === \"string\" && rawWeight.trim().length > 0\n ? Number.parseFloat(rawWeight.trim())\n : 1;\n const weight =\n Number.isFinite(parsedWeight) && parsedWeight > 0 ? parsedWeight : 1;\n entries.push({ symbol, weight });\n continue;\n }\n\n if (!input || typeof input !== \"object\") continue;\n const symbol = input.symbol?.trim();\n if (!symbol) continue;\n const parsedWeight =\n typeof input.weight === \"number\" && Number.isFinite(input.weight)\n ? input.weight\n : 1;\n const weight = parsedWeight > 0 ? parsedWeight : 1;\n entries.push({ symbol, weight });\n }\n\n if (entries.length > 0) {\n return entries;\n }\n return [{ symbol: fallbackSymbol, weight: 1 }];\n}\n\nexport function normalizeHyperliquidDcaEntries(params: {\n entries: Array<{ symbol: string; weight?: number }> | undefined;\n fallbackSymbol: string;\n}): HyperliquidDcaNormalizedEntry[] {\n const map = new Map<string, HyperliquidDcaSymbolEntry>();\n const entries = Array.isArray(params.entries) ? params.entries : [];\n\n for (const entry of entries) {\n if (!entry || typeof entry !== \"object\") continue;\n const symbol = typeof entry.symbol === \"string\" ? entry.symbol.trim() : \"\";\n if (!symbol) continue;\n\n const key = symbol.toUpperCase();\n const weight = clampDcaWeight(entry.weight);\n if (weight <= 0) continue;\n const existing = map.get(key);\n if (existing) {\n existing.weight += weight;\n } else {\n map.set(key, { symbol, weight });\n }\n }\n\n if (map.size === 0) {\n map.set(params.fallbackSymbol.toUpperCase(), {\n symbol: params.fallbackSymbol,\n weight: 1,\n });\n }\n\n const entriesList = Array.from(map.values());\n const totalWeight = entriesList.reduce((sum, entry) => sum + entry.weight, 0);\n if (!Number.isFinite(totalWeight) || totalWeight <= 0) {\n return [];\n }\n\n return entriesList.map((entry) => ({\n symbol: entry.symbol,\n weight: entry.weight,\n normalizedWeight: entry.weight / totalWeight,\n }));\n}\n\nexport function resolveHyperliquidMaxPerRunUsd(\n targetNotionalUsd: number,\n hedgeRatio: number,\n): number {\n if (!Number.isFinite(targetNotionalUsd) || targetNotionalUsd <= 0) return 0;\n const ratio = Number.isFinite(hedgeRatio) && hedgeRatio > 0 ? hedgeRatio : 1;\n return Math.max(targetNotionalUsd, targetNotionalUsd * ratio);\n}\n\nexport function clampHyperliquidAbs(value: number, limit: number): number {\n if (!Number.isFinite(value) || !Number.isFinite(limit) || limit <= 0) return 0;\n const capped = Math.min(Math.abs(value), limit);\n return Math.sign(value) * capped;\n}\n\nexport function resolveHyperliquidTargetSize(params: {\n config: HyperliquidTargetSizeConfig;\n execution: HyperliquidTargetSizeExecution;\n accountValue: number | null;\n currentPrice: number;\n}): { targetSize: number; budgetUsd: number } {\n const { config, execution, accountValue, currentPrice } = params;\n\n if (execution.size && Number.isFinite(execution.size)) {\n return { targetSize: execution.size, budgetUsd: execution.size * currentPrice };\n }\n\n if (config.allocationMode === \"fixed\") {\n const budgetUsd = resolveHyperliquidBudgetUsd({\n config,\n accountValue,\n });\n return { targetSize: budgetUsd / currentPrice, budgetUsd };\n }\n\n const budgetUsd = resolveHyperliquidBudgetUsd({\n config,\n accountValue,\n });\n return { targetSize: budgetUsd / currentPrice, budgetUsd };\n}\n\nexport function planHyperliquidTrade(params: {\n signal: HyperliquidTradeSignal;\n mode: HyperliquidExecutionMode;\n currentSize: number;\n targetSize: number;\n}): HyperliquidTradePlan | null {\n const { signal, mode, currentSize, targetSize } = params;\n if (signal === \"hold\" || signal === \"unknown\") return null;\n\n if (signal === \"buy\") {\n const desired = mode === \"long-short\" ? targetSize : Math.max(targetSize, 0);\n const delta = desired - currentSize;\n if (delta <= 0) return null;\n return {\n side: \"buy\",\n size: delta,\n reduceOnly: false,\n targetSize: desired,\n };\n }\n\n if (mode === \"long-only\") {\n if (currentSize <= 0) return null;\n return {\n side: \"sell\",\n size: currentSize,\n reduceOnly: true,\n targetSize: 0,\n };\n }\n\n const desired = -Math.abs(targetSize);\n const delta = currentSize - desired;\n if (delta <= 0) return null;\n return {\n side: \"sell\",\n size: delta,\n reduceOnly: false,\n targetSize: desired,\n };\n}\n","import { HyperliquidApiError } from \"./base\";\n\nexport type HyperliquidTickSize = {\n tickSizeInt: bigint;\n tickDecimals: number;\n};\n\nexport type HyperliquidMarketType = \"perp\" | \"spot\";\ntype HyperliquidDirectionalMode = \"down\" | \"up\";\n\ntype HyperliquidOrderResponseLike = {\n response?: {\n data?: {\n statuses?: Array<Record<string, unknown>>;\n };\n };\n};\n\nfunction countDecimalPlaces(value: string): number {\n const [, dec = \"\"] = value.split(\".\");\n return dec.length;\n}\n\nfunction assertNumberString(value: string): void {\n if (!/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(value)) {\n throw new TypeError(\"Invalid decimal number string.\");\n }\n}\n\nfunction normalizeDecimalString(value: string): string {\n return value\n .trim()\n .replace(/^(-?)0+(?=\\d)/, \"$1\")\n .replace(/\\.0*$|(\\.\\d+?)0+$/, \"$1\")\n .replace(/^(-?)\\./, \"$10.\")\n .replace(/^-?$/, \"0\")\n .replace(/^-0$/, \"0\");\n}\n\nconst StringMath = {\n log10Floor(value: string): number {\n const abs = value.startsWith(\"-\") ? value.slice(1) : value;\n const num = Number(abs);\n if (!Number.isFinite(num) || num === 0) return -Infinity;\n\n const [intPart, fracPart = \"\"] = abs.split(\".\");\n if (Number(intPart) !== 0) {\n return intPart.replace(/^0+/, \"\").length - 1;\n }\n const leadingZeros = fracPart.match(/^0*/)?.[0]?.length ?? 0;\n return -(leadingZeros + 1);\n },\n multiplyByPow10(value: string, exp: number): string {\n if (!Number.isInteger(exp)) {\n throw new RangeError(\"Exponent must be an integer.\");\n }\n if (exp === 0) return normalizeDecimalString(value);\n\n const negative = value.startsWith(\"-\");\n const abs = negative ? value.slice(1) : value;\n const [intRaw, fracRaw = \"\"] = abs.split(\".\");\n const intPart = intRaw || \"0\";\n let output: string;\n\n if (exp > 0) {\n if (exp >= fracRaw.length) {\n output = intPart + fracRaw + \"0\".repeat(exp - fracRaw.length);\n } else {\n output = `${intPart}${fracRaw.slice(0, exp)}.${fracRaw.slice(exp)}`;\n }\n } else {\n const absExp = -exp;\n if (absExp >= intPart.length) {\n output = `0.${\"0\".repeat(absExp - intPart.length)}${intPart}${fracRaw}`;\n } else {\n output = `${intPart.slice(0, -absExp)}.${intPart.slice(-absExp)}${fracRaw}`;\n }\n }\n\n return normalizeDecimalString((negative ? \"-\" : \"\") + output);\n },\n trunc(value: string): string {\n const index = value.indexOf(\".\");\n return index === -1 ? value : value.slice(0, index) || \"0\";\n },\n roundInteger(value: string, mode: HyperliquidDirectionalMode): string {\n const normalized = normalizeDecimalString(value);\n const negative = normalized.startsWith(\"-\");\n if (negative) {\n throw new RangeError(\"Directional rounding only supports positive values.\");\n }\n const [intPartRaw, fracPart = \"\"] = normalized.split(\".\");\n const intPart = intPartRaw.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const hasFraction = /[1-9]/.test(fracPart);\n if (!hasFraction) return intPart;\n if (mode === \"down\") return intPart;\n\n const digits = intPart.split(\"\");\n let carry = 1;\n for (let idx = digits.length - 1; idx >= 0 && carry > 0; idx -= 1) {\n const next = Number(digits[idx] ?? \"0\") + carry;\n digits[idx] = String(next % 10);\n carry = next >= 10 ? 1 : 0;\n }\n if (carry > 0) {\n digits.unshift(\"1\");\n }\n return digits.join(\"\").replace(/^0+(?=\\d)/, \"\") || \"0\";\n },\n toPrecisionTruncate(value: string, precision: number): string {\n if (!Number.isInteger(precision) || precision < 1) {\n throw new RangeError(\"Precision must be a positive integer.\");\n }\n if (/^-?0+(\\.0*)?$/.test(value)) return \"0\";\n\n const negative = value.startsWith(\"-\");\n const abs = negative ? value.slice(1) : value;\n const magnitude = StringMath.log10Floor(abs);\n const shiftAmount = precision - magnitude - 1;\n const shifted = StringMath.multiplyByPow10(abs, shiftAmount);\n const truncated = StringMath.trunc(shifted);\n const shiftedBack = StringMath.multiplyByPow10(truncated, -shiftAmount);\n return normalizeDecimalString(negative ? `-${shiftedBack}` : shiftedBack);\n },\n toFixedTruncate(value: string, decimals: number): string {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new RangeError(\"Decimals must be a non-negative integer.\");\n }\n const matcher = new RegExp(`^-?(?:\\\\d+)?(?:\\\\.\\\\d{0,${decimals}})?`);\n const result = value.match(matcher)?.[0];\n if (!result) {\n throw new TypeError(\"Invalid number format.\");\n }\n return normalizeDecimalString(result);\n },\n};\n\nfunction ceilDiv(numerator: bigint, denominator: bigint): bigint {\n if (denominator <= 0n) {\n throw new RangeError(\"Denominator must be positive.\");\n }\n return (numerator + denominator - 1n) / denominator;\n}\n\nfunction scaleDecimalToInt(\n value: string,\n decimals: number,\n mode: HyperliquidDirectionalMode,\n): bigint {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new RangeError(\"Decimals must be a non-negative integer.\");\n }\n const normalized = normalizeDecimalString(value);\n assertNumberString(normalized);\n const negative = normalized.startsWith(\"-\");\n if (negative) {\n throw new RangeError(\"Only positive values are supported.\");\n }\n const shifted = StringMath.multiplyByPow10(normalized, decimals);\n const rounded = StringMath.roundInteger(shifted, mode);\n return BigInt(rounded);\n}\n\nfunction formatScaledDecimal(value: bigint, decimals: number): string {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new RangeError(\"Decimals must be a non-negative integer.\");\n }\n const negative = value < 0n;\n const abs = negative ? -value : value;\n const raw = abs.toString();\n if (decimals === 0) {\n return `${negative ? \"-\" : \"\"}${raw}`;\n }\n const padded = raw.padStart(decimals + 1, \"0\");\n const intPart = padded.slice(0, -decimals) || \"0\";\n const fracPart = padded.slice(-decimals);\n return normalizeDecimalString(`${negative ? \"-\" : \"\"}${intPart}.${fracPart}`);\n}\n\nexport function formatHyperliquidPrice(\n price: string | number,\n szDecimals: number,\n marketType: HyperliquidMarketType = \"perp\",\n): string {\n const normalized = price.toString().trim();\n assertNumberString(normalized);\n if (/^-?\\d+$/.test(normalized)) {\n return normalizeDecimalString(normalized);\n }\n\n const maxDecimals = Math.max((marketType === \"perp\" ? 6 : 8) - szDecimals, 0);\n const decimalsTrimmed = StringMath.toFixedTruncate(normalized, maxDecimals);\n const sigFigTrimmed = StringMath.toPrecisionTruncate(decimalsTrimmed, 5);\n if (sigFigTrimmed === \"0\") {\n throw new RangeError(\"Price is too small and was truncated to 0.\");\n }\n return sigFigTrimmed;\n}\n\nexport function formatHyperliquidSize(size: string | number, szDecimals: number): string {\n const normalized = size.toString().trim();\n assertNumberString(normalized);\n const truncated = StringMath.toFixedTruncate(normalized, szDecimals);\n if (truncated === \"0\") {\n throw new RangeError(\"Size is too small and was truncated to 0.\");\n }\n return truncated;\n}\n\nexport function formatHyperliquidOrderSize(value: number, szDecimals: number): string {\n if (!Number.isFinite(value) || value <= 0) return \"0\";\n try {\n return formatHyperliquidSize(value, szDecimals);\n } catch {\n return \"0\";\n }\n}\n\nexport function roundHyperliquidPriceToTick(\n price: string | number,\n tick: HyperliquidTickSize,\n side: \"buy\" | \"sell\",\n): string {\n if (!Number.isFinite(tick.tickDecimals) || tick.tickDecimals < 0) {\n throw new Error(\"tick.tickDecimals must be a non-negative number.\");\n }\n if (tick.tickSizeInt <= 0n) {\n throw new Error(\"tick.tickSizeInt must be positive.\");\n }\n\n const normalized = normalizeDecimalString(price.toString());\n assertNumberString(normalized);\n if (Number.parseFloat(normalized) <= 0) {\n throw new Error(\"Price must be positive.\");\n }\n\n const scaled = scaleDecimalToInt(\n normalized,\n tick.tickDecimals,\n side === \"buy\" ? \"up\" : \"down\",\n );\n const tickSize = tick.tickSizeInt;\n const rounded =\n side === \"sell\"\n ? (scaled / tickSize) * tickSize\n : ((scaled + tickSize - 1n) / tickSize) * tickSize;\n return formatScaledDecimal(rounded, tick.tickDecimals);\n}\n\nexport function formatHyperliquidMarketablePrice(params: {\n mid: number;\n side: \"buy\" | \"sell\";\n slippageBps: number;\n tick?: HyperliquidTickSize | null;\n}): string {\n const { mid, side, slippageBps, tick } = params;\n if (!Number.isFinite(mid) || mid <= 0) {\n throw new Error(\"mid must be a positive number.\");\n }\n if (!Number.isFinite(slippageBps) || slippageBps < 0) {\n throw new Error(\"slippageBps must be a non-negative number.\");\n }\n\n const midString = normalizeDecimalString(mid.toString());\n const baseDecimals = countDecimalPlaces(midString);\n const workDecimals = Math.max(baseDecimals + 4, tick?.tickDecimals ?? 0, 8);\n const scaledMid = scaleDecimalToInt(midString, workDecimals, \"down\");\n const slippageNumerator = BigInt(\n side === \"buy\" ? 10_000 + slippageBps : 10_000 - slippageBps,\n );\n const adjustedScaled =\n side === \"buy\"\n ? ceilDiv(scaledMid * slippageNumerator, 10_000n)\n : (scaledMid * slippageNumerator) / 10_000n;\n const adjusted = formatScaledDecimal(adjustedScaled, workDecimals);\n\n if (tick) {\n return roundHyperliquidPriceToTick(adjusted, tick, side);\n }\n\n const roundedScaled = scaleDecimalToInt(\n adjusted,\n baseDecimals,\n side === \"buy\" ? \"up\" : \"down\",\n );\n return formatScaledDecimal(roundedScaled, baseDecimals);\n}\n\nexport function extractHyperliquidOrderIds(responses: HyperliquidOrderResponseLike[]): {\n cloids: string[];\n oids: string[];\n} {\n const cloids = new Set<string>();\n const oids = new Set<string>();\n const push = (val: unknown, target: Set<string>) => {\n if (val === null || val === undefined) return;\n const str = String(val);\n if (str.length) target.add(str);\n };\n\n for (const res of responses) {\n const statuses = res?.response?.data?.statuses;\n if (!Array.isArray(statuses)) continue;\n\n for (const status of statuses) {\n const resting = (status as any).resting as Record<string, unknown> | undefined;\n const filled = (status as any).filled as Record<string, unknown> | undefined;\n push(resting?.cloid, cloids);\n push(resting?.oid, oids);\n push(filled?.cloid, cloids);\n push(filled?.oid, oids);\n }\n }\n\n return {\n cloids: Array.from(cloids),\n oids: Array.from(oids),\n };\n}\n\nexport function resolveHyperliquidOrderRef(params: {\n response?: HyperliquidOrderResponseLike | null;\n fallbackCloid?: string | null;\n fallbackOid?: string | null;\n prefix?: string;\n index?: number;\n}): string {\n const { response, fallbackCloid, fallbackOid, prefix = \"hl-order\", index = 0 } = params;\n\n const statuses = response?.response?.data?.statuses ?? [];\n if (Array.isArray(statuses)) {\n for (const status of statuses) {\n const filled =\n status && typeof (status as any).filled === \"object\"\n ? ((status as any).filled as Record<string, unknown>)\n : null;\n if (filled) {\n if (typeof filled.cloid === \"string\" && filled.cloid.trim().length > 0) {\n return filled.cloid;\n }\n if (\n typeof filled.oid === \"number\" ||\n (typeof filled.oid === \"string\" && filled.oid.trim().length > 0)\n ) {\n return String(filled.oid);\n }\n }\n\n const resting =\n status && typeof (status as any).resting === \"object\"\n ? ((status as any).resting as Record<string, unknown>)\n : null;\n if (resting) {\n if (typeof resting.cloid === \"string\" && resting.cloid.trim().length > 0) {\n return resting.cloid;\n }\n if (\n typeof resting.oid === \"number\" ||\n (typeof resting.oid === \"string\" && resting.oid.trim().length > 0)\n ) {\n return String(resting.oid);\n }\n }\n }\n }\n\n if (fallbackCloid && fallbackCloid.trim().length > 0) {\n return fallbackCloid;\n }\n if (fallbackOid && fallbackOid.trim().length > 0) {\n return fallbackOid;\n }\n return `${prefix}-${Date.now()}-${index}`;\n}\n\nexport function resolveHyperliquidErrorDetail(error: unknown): unknown | null {\n if (error instanceof HyperliquidApiError) {\n return error.response ?? null;\n }\n if (error && typeof error === \"object\" && \"response\" in error) {\n return (error as { response?: unknown }).response ?? null;\n }\n return null;\n}\n","function unwrapData(payload: unknown): Record<string, unknown> | null {\n if (!payload || typeof payload !== \"object\") return null;\n if (\"data\" in payload) {\n const data = (payload as { data?: unknown }).data;\n if (data && typeof data === \"object\") {\n return data as Record<string, unknown>;\n }\n }\n return payload as Record<string, unknown>;\n}\n\nexport function readHyperliquidNumber(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nexport function readHyperliquidAccountValue(payload: unknown): number | null {\n const data = unwrapData(payload);\n if (!data) return null;\n const candidates = [\n (data as any)?.marginSummary?.accountValue,\n (data as any)?.crossMarginSummary?.accountValue,\n (data as any)?.accountValue,\n (data as any)?.equity,\n (data as any)?.totalAccountValue,\n (data as any)?.marginSummary?.totalAccountValue,\n ];\n for (const value of candidates) {\n const parsed = readHyperliquidNumber(value);\n if (parsed !== null) return parsed;\n }\n return null;\n}\n\nfunction matchPerpCoin(params: { coin: string; target: string; prefixMatch: boolean }): boolean {\n const coin = params.coin.toUpperCase();\n const target = params.target.toUpperCase();\n if (params.prefixMatch) return coin.startsWith(target);\n return coin === target;\n}\n\nexport function readHyperliquidPerpPositionSize(\n payload: unknown,\n symbol: string,\n options?: { prefixMatch?: boolean },\n): number {\n const data = unwrapData(payload);\n const rows = Array.isArray((data as any)?.assetPositions)\n ? ((data as any).assetPositions as Array<Record<string, unknown>>)\n : [];\n const base = symbol.split(\"-\")[0]?.toUpperCase() ?? symbol.toUpperCase();\n const prefixMatch = options?.prefixMatch ?? false;\n\n for (const row of rows) {\n const position = (row as any).position ?? row;\n const coin =\n typeof position?.coin === \"string\"\n ? position.coin\n : typeof (row as any).coin === \"string\"\n ? (row as any).coin\n : \"\";\n\n if (!matchPerpCoin({ coin, target: base, prefixMatch })) continue;\n const size = (position as any).szi ?? (row as any).szi;\n const parsed = readHyperliquidNumber(size);\n return parsed ?? 0;\n }\n\n return 0;\n}\n\nexport function readHyperliquidPerpPosition(\n payload: unknown,\n symbol: string,\n options?: { prefixMatch?: boolean },\n): { size: number; positionValue: number; unrealizedPnl: number | null } {\n const data = unwrapData(payload);\n const rows = Array.isArray((data as any)?.assetPositions)\n ? ((data as any).assetPositions as Array<Record<string, unknown>>)\n : [];\n const target = symbol.split(\"-\")[0]?.toUpperCase() ?? symbol.toUpperCase();\n const prefixMatch = options?.prefixMatch ?? false;\n\n for (const row of rows) {\n const position = (row as any)?.position ?? row;\n const coin =\n typeof position?.coin === \"string\"\n ? position.coin\n : typeof (row as any)?.coin === \"string\"\n ? (row as any).coin\n : \"\";\n if (!matchPerpCoin({ coin, target, prefixMatch })) continue;\n\n const size = readHyperliquidNumber(position?.szi ?? (row as any).szi) ?? 0;\n const positionValue = Math.abs(\n readHyperliquidNumber(position?.positionValue ?? (row as any).positionValue) ?? 0,\n );\n const unrealizedPnl = readHyperliquidNumber(\n position?.unrealizedPnl ?? (row as any).unrealizedPnl,\n );\n return { size, positionValue, unrealizedPnl };\n }\n\n return { size: 0, positionValue: 0, unrealizedPnl: null };\n}\n\nexport function readHyperliquidSpotBalanceSize(payload: unknown, symbol: string): number {\n const data = unwrapData(payload);\n const rows = Array.isArray((data as any)?.balances)\n ? ((data as any).balances as Array<Record<string, unknown>>)\n : [];\n const base = symbol.split(\"/\")[0]?.split(\"-\")[0]?.toUpperCase() ?? symbol.toUpperCase();\n\n for (const row of rows) {\n const coin =\n typeof row?.coin === \"string\"\n ? row.coin\n : typeof (row as any)?.asset === \"string\"\n ? (row as any).asset\n : \"\";\n if (coin.toUpperCase() !== base) continue;\n\n const total = (row as any).total ?? (row as any).balance ?? (row as any).szi;\n const parsed = readHyperliquidNumber(total);\n return parsed ?? 0;\n }\n\n return 0;\n}\n\nexport function readHyperliquidSpotBalance(\n payload: unknown,\n base: string,\n): { total: number; entryNtl: number | null } {\n const data = unwrapData(payload);\n const balances = Array.isArray((data as any)?.balances)\n ? ((data as any).balances as Array<Record<string, unknown>>)\n : [];\n const target = base.toUpperCase();\n\n for (const row of balances) {\n const coin = typeof row?.coin === \"string\" ? row.coin : \"\";\n if (coin.toUpperCase() !== target) continue;\n const total = readHyperliquidNumber(row?.total) ?? 0;\n const entryNtl = readHyperliquidNumber(row?.entryNtl);\n return { total, entryNtl };\n }\n\n return { total: 0, entryNtl: null };\n}\n\nexport function readHyperliquidSpotAccountValue(params: {\n balances: unknown;\n pricesUsd: Map<string, number>;\n}): number | null {\n const rows = Array.isArray(params.balances)\n ? (params.balances as Array<Record<string, unknown>>)\n : [];\n if (rows.length === 0) return null;\n\n let total = 0;\n let hasValue = false;\n\n for (const row of rows) {\n const coin =\n typeof row?.coin === \"string\"\n ? row.coin\n : typeof (row as any)?.asset === \"string\"\n ? (row as any).asset\n : \"\";\n if (!coin) continue;\n\n const amount = readHyperliquidNumber(\n (row as any).total ?? (row as any).balance ?? (row as any).szi,\n );\n if (amount == null || amount === 0) continue;\n\n const price = params.pricesUsd.get(coin.toUpperCase());\n if (price == null || !Number.isFinite(price) || price <= 0) continue;\n\n total += amount * price;\n hasValue = true;\n }\n\n return hasValue ? total : null;\n}\n","import { API_BASES, type HyperliquidEnvironment } from \"./base\";\nimport {\n fetchHyperliquidDexMetaAndAssetCtxs,\n fetchHyperliquidMeta,\n fetchHyperliquidMetaAndAssetCtxs,\n fetchHyperliquidSpotMeta,\n fetchHyperliquidSpotMetaAndAssetCtxs,\n} from \"./info\";\nimport type { HyperliquidTickSize } from \"./order-utils\";\nimport {\n buildHyperliquidMarketDescriptor,\n type HyperliquidMarketDescriptor,\n isHyperliquidSpotSymbol,\n normalizeHyperliquidMetaSymbol,\n normalizeSpotTokenName,\n parseHyperliquidSymbol,\n parseSpotPairSymbol,\n resolveHyperliquidOrderSymbol,\n resolveSpotMidCandidates,\n resolveSpotTokenCandidates,\n} from \"./symbols\";\nimport { readHyperliquidNumber, readHyperliquidSpotAccountValue } from \"./state-readers\";\n\ntype PerpUniverseItem = {\n name?: string;\n szDecimals?: number;\n};\n\ntype PerpAssetContext = {\n markPx?: string | number;\n midPx?: string | number;\n oraclePx?: string | number;\n funding?: string | number;\n};\n\ntype SpotUniverseItem = {\n name?: string;\n index?: number;\n tokens?: number[];\n};\n\ntype SpotToken = {\n name?: string;\n index?: number;\n szDecimals?: number;\n};\n\ntype SpotAssetContext = {\n markPx?: string | number;\n midPx?: string | number;\n oraclePx?: string | number;\n};\n\ntype SpotMetaResponse = {\n universe?: SpotUniverseItem[];\n tokens?: SpotToken[];\n};\n\nexport type HyperliquidBarResolution = \"1\" | \"5\" | \"15\" | \"30\" | \"60\" | \"240\" | \"1D\" | \"1W\";\n\nexport type HyperliquidBar = {\n time: number;\n open?: number;\n high?: number;\n low?: number;\n close: number;\n volume?: number;\n [key: string]: unknown;\n};\n\nexport type HyperliquidIndicatorBar = {\n time: number;\n open: number;\n high: number;\n low: number;\n close: number;\n volume: number;\n};\n\nexport type HyperliquidPerpMarketInfo = {\n symbol: string;\n price: number;\n fundingRate: number | null;\n szDecimals: number;\n};\n\nexport type HyperliquidSpotMarketInfo = {\n symbol: string;\n base: string;\n quote: string;\n assetId: number;\n marketIndex: number;\n price: number;\n szDecimals: number;\n};\n\nexport type HyperliquidResolvedMarketDescriptor = HyperliquidMarketDescriptor;\n\nconst META_CACHE_TTL_MS = 5 * 60 * 1000;\nconst DEFAULT_OPENPOND_GATEWAY_URL = \"https://gateway.openpond.dev\";\nconst allMidsCache = new Map<\n string,\n { fetchedAt: number; mids: Record<string, string | number> }\n>();\n\nfunction resolveGatewayBase(override?: string | null): string | null {\n const value =\n override ??\n process.env.OPENPOND_GATEWAY_URL ??\n DEFAULT_OPENPOND_GATEWAY_URL;\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n return trimmed.replace(/\\/$/, \"\");\n}\n\nfunction normalizeGatewaySymbol(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return trimmed;\n const idx = trimmed.indexOf(\":\");\n if (idx > 0) {\n const dex = trimmed.slice(0, idx).toLowerCase();\n const rest = trimmed.slice(idx + 1);\n return `${dex}:${rest.toUpperCase()}`;\n }\n return trimmed.toUpperCase();\n}\n\nfunction gcd(a: bigint, b: bigint): bigint {\n let left = a < 0n ? -a : a;\n let right = b < 0n ? -b : b;\n while (right !== 0n) {\n const next = left % right;\n left = right;\n right = next;\n }\n return left;\n}\n\nfunction pow10(decimals: number): bigint {\n let result = 1n;\n for (let i = 0; i < decimals; i += 1) {\n result *= 10n;\n }\n return result;\n}\n\nfunction maxDecimals(values: string[]): number {\n let max = 0;\n for (const value of values) {\n const dot = value.indexOf(\".\");\n if (dot === -1) continue;\n const decimals = value.length - dot - 1;\n if (decimals > max) max = decimals;\n }\n return max;\n}\n\nfunction toScaledInt(value: string, decimals: number): bigint {\n const trimmed = value.trim();\n const negative = trimmed.startsWith(\"-\");\n const unsigned = negative ? trimmed.slice(1) : trimmed;\n const [intPart, fracPart = \"\"] = unsigned.split(\".\");\n const padded = fracPart.padEnd(decimals, \"0\").slice(0, decimals);\n const combined = `${intPart || \"0\"}${padded}`;\n const asInt = BigInt(combined || \"0\");\n return negative ? -asInt : asInt;\n}\n\nfunction formatScaledInt(value: bigint, decimals: number): string {\n const negative = value < 0n;\n const absValue = negative ? -value : value;\n const scale = pow10(decimals);\n const integer = absValue / scale;\n const fraction = absValue % scale;\n if (decimals === 0) {\n return `${negative ? \"-\" : \"\"}${integer.toString()}`;\n }\n const fractionStr = fraction.toString().padStart(decimals, \"0\");\n return `${negative ? \"-\" : \"\"}${integer.toString()}.${fractionStr}`.replace(/\\.?0+$/, \"\");\n}\n\nfunction resolveSpotSizeDecimals(meta: SpotMetaResponse, symbol: string): number {\n const universe = meta.universe ?? [];\n const tokens = meta.tokens ?? [];\n if (!universe.length || !tokens.length) {\n throw new Error(`Spot metadata unavailable for ${symbol}.`);\n }\n\n const tokenMap = new Map<number, { name: string; szDecimals: number }>();\n for (const token of tokens) {\n const index = token?.index;\n const szDecimals = typeof token?.szDecimals === \"number\" ? token.szDecimals : null;\n if (typeof index !== \"number\" || szDecimals == null) continue;\n tokenMap.set(index, {\n name: normalizeSpotTokenName(token?.name),\n szDecimals,\n });\n }\n\n if (symbol.startsWith(\"@\")) {\n const targetIndex = Number.parseInt(symbol.slice(1), 10);\n if (!Number.isFinite(targetIndex)) {\n throw new Error(`Invalid spot pair id: ${symbol}`);\n }\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const marketIndex = typeof market?.index === \"number\" ? market.index : idx;\n if (marketIndex !== targetIndex) continue;\n const [baseIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n if (!baseToken) break;\n return baseToken.szDecimals;\n }\n throw new Error(`Unknown spot pair id: ${symbol}`);\n }\n\n const pair = parseSpotPairSymbol(symbol);\n if (!pair) {\n throw new Error(`Invalid spot symbol: ${symbol}`);\n }\n const normalizedBase = normalizeSpotTokenName(pair.base).toUpperCase();\n const normalizedQuote = normalizeSpotTokenName(pair.quote).toUpperCase();\n\n for (const market of universe) {\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n const quoteToken = tokenMap.get(quoteIndex ?? -1);\n if (!baseToken || !quoteToken) continue;\n if (\n baseToken.name.toUpperCase() === normalizedBase &&\n quoteToken.name.toUpperCase() === normalizedQuote\n ) {\n return baseToken.szDecimals;\n }\n }\n\n throw new Error(`No size decimals found for ${symbol}.`);\n}\n\nexport async function fetchHyperliquidAllMids(\n environment: HyperliquidEnvironment,\n): Promise<Record<string, string | number>> {\n const cacheKey = environment;\n const cached = allMidsCache.get(cacheKey);\n if (cached && Date.now() - cached.fetchedAt < META_CACHE_TTL_MS) {\n return cached.mids;\n }\n\n const baseUrl = API_BASES[environment];\n const res = await fetch(`${baseUrl}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"allMids\" }),\n });\n const json = (await res.json().catch(() => null)) as Record<string, string | number> | null;\n if (!res.ok || !json || typeof json !== \"object\") {\n throw new Error(`Failed to load Hyperliquid mid prices (${res.status}).`);\n }\n\n allMidsCache.set(cacheKey, { fetchedAt: Date.now(), mids: json });\n return json;\n}\n\nexport async function fetchHyperliquidBars(params: {\n symbol: string;\n resolution: HyperliquidBarResolution;\n countBack: number;\n fromSeconds?: number;\n toSeconds?: number;\n gatewayBase?: string | null;\n}): Promise<HyperliquidBar[]> {\n const gatewayBase = resolveGatewayBase(params.gatewayBase);\n if (!gatewayBase) {\n throw new Error(\"OPENPOND_GATEWAY_URL is required.\");\n }\n\n const normalizedCountBack = Math.max(1, Math.trunc(params.countBack));\n if (!Number.isFinite(normalizedCountBack) || normalizedCountBack <= 0) {\n throw new Error(\"countBack must be a positive integer.\");\n }\n\n const url = new URL(`${gatewayBase}/v1/hyperliquid/bars`);\n url.searchParams.set(\"symbol\", normalizeGatewaySymbol(params.symbol));\n url.searchParams.set(\"resolution\", params.resolution);\n url.searchParams.set(\"countBack\", normalizedCountBack.toString());\n if (typeof params.fromSeconds === \"number\" && Number.isFinite(params.fromSeconds)) {\n url.searchParams.set(\"from\", Math.max(0, Math.trunc(params.fromSeconds)).toString());\n }\n if (typeof params.toSeconds === \"number\" && Number.isFinite(params.toSeconds)) {\n url.searchParams.set(\"to\", Math.max(0, Math.trunc(params.toSeconds)).toString());\n }\n\n const response = await fetch(url.toString());\n if (!response.ok) {\n throw new Error(`Gateway error (${response.status})`);\n }\n\n const data = (await response.json().catch(() => null)) as { bars?: unknown[] } | null;\n const bars = Array.isArray(data?.bars) ? data.bars : [];\n return bars.filter((bar): bar is HyperliquidBar => {\n if (!bar || typeof bar !== \"object\") return false;\n const record = bar as { close?: unknown; time?: unknown };\n return (\n typeof record.close === \"number\" &&\n Number.isFinite(record.close) &&\n typeof record.time === \"number\" &&\n Number.isFinite(record.time)\n );\n });\n}\n\nexport function normalizeHyperliquidIndicatorBars(\n bars: HyperliquidBar[],\n): HyperliquidIndicatorBar[] {\n return bars\n .filter(\n (bar): bar is HyperliquidBar & { time: number; close: number } =>\n bar &&\n typeof bar === \"object\" &&\n typeof bar.time === \"number\" &&\n Number.isFinite(bar.time) &&\n typeof bar.close === \"number\" &&\n Number.isFinite(bar.close),\n )\n .map((bar) => {\n const close = bar.close;\n const open = typeof bar.open === \"number\" && Number.isFinite(bar.open) ? bar.open : close;\n const high = typeof bar.high === \"number\" && Number.isFinite(bar.high) ? bar.high : close;\n const low = typeof bar.low === \"number\" && Number.isFinite(bar.low) ? bar.low : close;\n const volume =\n typeof bar.volume === \"number\" && Number.isFinite(bar.volume) ? bar.volume : 0;\n return {\n time: bar.time,\n open,\n high,\n low,\n close,\n volume,\n };\n });\n}\n\nexport async function fetchHyperliquidTickSize(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n}): Promise<HyperliquidTickSize> {\n return fetchHyperliquidTickSizeForCoin(params.environment, params.symbol);\n}\n\nexport async function fetchHyperliquidSpotTickSize(params: {\n environment: HyperliquidEnvironment;\n marketIndex: number;\n}): Promise<HyperliquidTickSize> {\n if (!Number.isFinite(params.marketIndex)) {\n throw new Error(\"Hyperliquid spot market index is invalid.\");\n }\n return fetchHyperliquidTickSizeForCoin(params.environment, `@${params.marketIndex}`);\n}\n\nasync function fetchHyperliquidTickSizeForCoin(\n environment: HyperliquidEnvironment,\n coin: string,\n): Promise<HyperliquidTickSize> {\n const base = API_BASES[environment];\n const res = await fetch(`${base}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"l2Book\", coin }),\n });\n if (!res.ok) {\n throw new Error(`Hyperliquid l2Book failed for ${coin}`);\n }\n\n const data = (await res.json().catch(() => null)) as {\n levels?: Array<Array<{ px?: string | number }>>;\n } | null;\n const levels = Array.isArray(data?.levels) ? (data?.levels ?? []) : [];\n const prices = levels\n .flatMap((side) => (Array.isArray(side) ? side.map((entry) => String(entry?.px ?? \"\")) : []))\n .filter((px) => px.length > 0);\n\n if (prices.length < 2) {\n throw new Error(`Hyperliquid l2Book missing price levels for ${coin}`);\n }\n\n const decimals = maxDecimals(prices);\n const scaled = prices.map((px) => toScaledInt(px, decimals));\n const unique = Array.from(new Set(scaled.map((v) => v.toString())))\n .map((v) => BigInt(v))\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));\n\n let tick = 0n;\n for (let i = 1; i < unique.length; i += 1) {\n const diff = unique[i] - unique[i - 1];\n if (diff <= 0n) continue;\n tick = tick === 0n ? diff : gcd(tick, diff);\n }\n\n if (tick === 0n) {\n tick = 1n;\n }\n\n return { tickSizeInt: tick, tickDecimals: decimals };\n}\n\nexport async function fetchHyperliquidPerpMarketInfo(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n}): Promise<HyperliquidPerpMarketInfo> {\n const data = (await fetchHyperliquidMetaAndAssetCtxs(params.environment)) as [\n { universe?: PerpUniverseItem[] },\n PerpAssetContext[],\n ];\n\n const universe = data?.[0]?.universe ?? [];\n const contexts = data?.[1] ?? [];\n const target = normalizeHyperliquidMetaSymbol(params.symbol).toUpperCase();\n\n const idx = universe.findIndex(\n (entry) => normalizeHyperliquidMetaSymbol(entry?.name ?? \"\").toUpperCase() === target,\n );\n if (idx < 0) {\n throw new Error(`Unknown Hyperliquid perp asset: ${params.symbol}`);\n }\n\n const ctx = contexts[idx] ?? null;\n const price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n if (!price || price <= 0) {\n throw new Error(`No perp price available for ${params.symbol}`);\n }\n\n const fundingRate = readHyperliquidNumber(ctx?.funding);\n const szDecimals = readHyperliquidNumber(universe[idx]?.szDecimals);\n if (szDecimals == null) {\n throw new Error(`No size decimals available for ${params.symbol}`);\n }\n\n return {\n symbol: params.symbol,\n price,\n fundingRate,\n szDecimals,\n };\n}\n\nexport async function fetchHyperliquidSpotMarketInfo(params: {\n environment: HyperliquidEnvironment;\n base: string;\n quote: string;\n mids?: Record<string, string | number> | null;\n}): Promise<HyperliquidSpotMarketInfo> {\n const mids =\n params.mids === undefined\n ? await fetchHyperliquidAllMids(params.environment).catch(() => null)\n : params.mids;\n\n const data = (await fetchHyperliquidSpotMetaAndAssetCtxs(params.environment)) as [\n { universe?: SpotUniverseItem[]; tokens?: SpotToken[] },\n SpotAssetContext[],\n ];\n\n const universe = data?.[0]?.universe ?? [];\n const tokens = data?.[0]?.tokens ?? [];\n const contexts = data?.[1] ?? [];\n\n const tokenMap = new Map<number, { name: string; szDecimals: number }>();\n for (const token of tokens) {\n const index = token?.index;\n const szDecimals = readHyperliquidNumber(token?.szDecimals);\n if (typeof index !== \"number\" || szDecimals == null) continue;\n tokenMap.set(index, {\n name: normalizeSpotTokenName(token?.name),\n szDecimals,\n });\n }\n\n const baseCandidates = resolveSpotTokenCandidates(params.base);\n const quoteCandidates = resolveSpotTokenCandidates(params.quote);\n const normalizedBase = normalizeSpotTokenName(params.base).toUpperCase();\n const normalizedQuote = normalizeSpotTokenName(params.quote).toUpperCase();\n\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n const quoteToken = tokenMap.get(quoteIndex ?? -1);\n if (!baseToken || !quoteToken) continue;\n\n const marketBaseCandidates = resolveSpotTokenCandidates(baseToken.name);\n const marketQuoteCandidates = resolveSpotTokenCandidates(quoteToken.name);\n if (\n baseCandidates.some((candidate) => marketBaseCandidates.includes(candidate)) &&\n quoteCandidates.some((candidate) => marketQuoteCandidates.includes(candidate))\n ) {\n const contextIndex = typeof market?.index === \"number\" ? market.index : idx;\n const ctx =\n (contextIndex >= 0 && contextIndex < contexts.length ? contexts[contextIndex] : null) ??\n contexts[idx] ??\n null;\n\n let price: number | null = null;\n if (mids) {\n for (const candidate of resolveSpotMidCandidates(baseToken.name)) {\n const mid = readHyperliquidNumber(mids[candidate]);\n if (mid != null && mid > 0) {\n price = mid;\n break;\n }\n }\n }\n if (!price || price <= 0) {\n price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n }\n if (!price || price <= 0) {\n throw new Error(`No spot price available for ${normalizedBase}/${normalizedQuote}`);\n }\n\n const marketIndex = typeof market?.index === \"number\" ? market.index : idx;\n return {\n symbol: `${baseToken.name.toUpperCase()}/${quoteToken.name.toUpperCase()}`,\n base: baseToken.name.toUpperCase(),\n quote: quoteToken.name.toUpperCase(),\n assetId: 10000 + marketIndex,\n marketIndex,\n price,\n szDecimals: baseToken.szDecimals,\n };\n }\n }\n\n throw new Error(`Unknown Hyperliquid spot market: ${normalizedBase}/${normalizedQuote}`);\n}\n\nasync function fetchHyperliquidSpotMarketInfoByIndex(params: {\n environment: HyperliquidEnvironment;\n marketIndex: number;\n mids?: Record<string, string | number> | null;\n}): Promise<HyperliquidSpotMarketInfo> {\n const mids =\n params.mids === undefined\n ? await fetchHyperliquidAllMids(params.environment).catch(() => null)\n : params.mids;\n\n const data = (await fetchHyperliquidSpotMetaAndAssetCtxs(params.environment)) as [\n { universe?: SpotUniverseItem[]; tokens?: SpotToken[] },\n SpotAssetContext[],\n ];\n\n const universe = data?.[0]?.universe ?? [];\n const tokens = data?.[0]?.tokens ?? [];\n const contexts = data?.[1] ?? [];\n\n const tokenMap = new Map<number, { name: string; szDecimals: number }>();\n for (const token of tokens) {\n const index = token?.index;\n const szDecimals = readHyperliquidNumber(token?.szDecimals);\n if (typeof index !== \"number\" || szDecimals == null) continue;\n tokenMap.set(index, {\n name: normalizeSpotTokenName(token?.name),\n szDecimals,\n });\n }\n\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const marketIndex = typeof market?.index === \"number\" ? market.index : idx;\n if (marketIndex !== params.marketIndex) continue;\n\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const baseToken = tokenMap.get(baseIndex ?? -1);\n const quoteToken = tokenMap.get(quoteIndex ?? -1);\n if (!baseToken || !quoteToken) {\n break;\n }\n\n const ctx =\n (marketIndex >= 0 && marketIndex < contexts.length ? contexts[marketIndex] : null) ??\n contexts[idx] ??\n null;\n\n let price: number | null = null;\n if (mids) {\n for (const candidate of resolveSpotMidCandidates(baseToken.name)) {\n const mid = readHyperliquidNumber(mids[candidate]);\n if (mid != null && mid > 0) {\n price = mid;\n break;\n }\n }\n }\n if (!price || price <= 0) {\n price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n }\n if (!price || price <= 0) {\n throw new Error(`No spot price available for @${params.marketIndex}`);\n }\n\n return {\n symbol: `${baseToken.name.toUpperCase()}/${quoteToken.name.toUpperCase()}`,\n base: baseToken.name.toUpperCase(),\n quote: quoteToken.name.toUpperCase(),\n assetId: 10000 + marketIndex,\n marketIndex,\n price,\n szDecimals: baseToken.szDecimals,\n };\n }\n\n throw new Error(`Unknown Hyperliquid spot market index: @${params.marketIndex}`);\n}\n\nexport async function fetchHyperliquidResolvedMarketDescriptor(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n mids?: Record<string, string | number> | null;\n}): Promise<HyperliquidResolvedMarketDescriptor> {\n const parsed = parseHyperliquidSymbol(params.symbol);\n if (!parsed) {\n throw new Error(`Unable to parse Hyperliquid symbol: ${params.symbol}`);\n }\n\n if (parsed.kind === \"spot\" || parsed.kind === \"spotIndex\") {\n const spotInfo =\n parsed.kind === \"spotIndex\"\n ? await fetchHyperliquidSpotMarketInfoByIndex({\n environment: params.environment,\n marketIndex: Number.parseInt(parsed.normalized.slice(1), 10),\n ...(params.mids !== undefined ? { mids: params.mids } : {}),\n })\n : await fetchHyperliquidSpotMarketInfo({\n environment: params.environment,\n base: parsed.base ?? \"\",\n quote: parsed.quote ?? \"USDC\",\n ...(params.mids !== undefined ? { mids: params.mids } : {}),\n });\n const orderSymbol = resolveHyperliquidOrderSymbol(spotInfo.symbol);\n if (!orderSymbol) {\n throw new Error(`Unable to resolve Hyperliquid spot order symbol: ${params.symbol}`);\n }\n const descriptor = buildHyperliquidMarketDescriptor({\n symbol: params.symbol,\n pair: spotInfo.symbol,\n quote: spotInfo.quote,\n displaySymbol: `${spotInfo.base}-${spotInfo.quote}`,\n orderSymbol,\n marketDataCoin: `@${spotInfo.marketIndex}`,\n spotIndex: spotInfo.marketIndex,\n assetId: spotInfo.assetId,\n });\n if (!descriptor) {\n throw new Error(`Unable to build Hyperliquid spot market descriptor: ${params.symbol}`);\n }\n return descriptor;\n }\n\n const quote =\n parsed.dex\n ? await (async () => {\n const dex = parsed.dex;\n if (!dex) return null;\n const [dexMetaAndCtxs, spotMetaRaw] = await Promise.all([\n fetchHyperliquidDexMetaAndAssetCtxs(params.environment, dex),\n fetchHyperliquidSpotMeta(params.environment),\n ]);\n const metaHeader =\n Array.isArray(dexMetaAndCtxs) && dexMetaAndCtxs.length > 0\n ? (dexMetaAndCtxs[0] as { collateralToken?: unknown } | null)\n : null;\n const collateralToken =\n typeof metaHeader?.collateralToken === \"number\" ? metaHeader.collateralToken : null;\n if (collateralToken == null) return null;\n const spotMeta = spotMetaRaw as SpotMetaResponse;\n const token = (spotMeta.tokens ?? []).find((entry) => entry?.index === collateralToken) ?? null;\n return normalizeSpotTokenName(token?.name).toUpperCase() || null;\n })()\n : \"USDC\";\n\n const descriptor = buildHyperliquidMarketDescriptor({\n symbol: params.symbol,\n ...(quote ? { quote } : {}),\n });\n if (!descriptor) {\n throw new Error(`Unable to build Hyperliquid market descriptor: ${params.symbol}`);\n }\n return descriptor;\n}\n\nexport async function fetchHyperliquidSizeDecimals(params: {\n environment: HyperliquidEnvironment;\n symbol: string;\n}): Promise<number> {\n const { symbol, environment } = params;\n if (isHyperliquidSpotSymbol(symbol)) {\n const meta = (await fetchHyperliquidSpotMeta(environment)) as SpotMetaResponse;\n return resolveSpotSizeDecimals(meta, symbol);\n }\n\n const meta = (await fetchHyperliquidMeta(environment)) as {\n universe?: Array<{ name?: string; szDecimals?: number }>;\n };\n const universe = Array.isArray(meta?.universe) ? meta.universe : [];\n const normalized = normalizeHyperliquidMetaSymbol(symbol).toUpperCase();\n const match = universe.find(\n (entry) => normalizeHyperliquidMetaSymbol(entry?.name ?? \"\").toUpperCase() === normalized,\n );\n if (!match || typeof match.szDecimals !== \"number\") {\n throw new Error(`No size decimals found for ${symbol}.`);\n }\n return match.szDecimals;\n}\n\nexport function buildHyperliquidSpotUsdPriceMap(params: {\n meta: SpotMetaResponse;\n ctxs: SpotAssetContext[];\n mids?: Record<string, string | number> | null;\n}): Map<string, number> {\n const universe = params.meta.universe ?? [];\n const tokens = params.meta.tokens ?? [];\n\n const tokenMap = new Map<number, string>();\n for (const token of tokens) {\n const index = token?.index;\n if (typeof index !== \"number\") continue;\n tokenMap.set(index, normalizeSpotTokenName(token?.name).toUpperCase());\n }\n\n const prices = new Map<string, number>();\n prices.set(\"USDC\", 1);\n\n for (let idx = 0; idx < universe.length; idx += 1) {\n const market = universe[idx];\n const [baseIndex, quoteIndex] = Array.isArray(market?.tokens) ? market.tokens : [];\n const base = tokenMap.get(baseIndex ?? -1);\n const quote = tokenMap.get(quoteIndex ?? -1);\n if (!base || !quote) continue;\n if (quote !== \"USDC\") continue;\n\n const contextIndex = typeof market?.index === \"number\" ? market.index : idx;\n const ctx =\n (contextIndex >= 0 && contextIndex < params.ctxs.length ? params.ctxs[contextIndex] : null) ??\n params.ctxs[idx] ??\n null;\n\n let price: number | null = null;\n if (params.mids) {\n for (const candidate of resolveSpotMidCandidates(base)) {\n const mid = readHyperliquidNumber(params.mids[candidate]);\n if (mid != null && mid > 0) {\n price = mid;\n break;\n }\n }\n }\n\n if (!price || price <= 0) {\n price = readHyperliquidNumber(ctx?.markPx ?? ctx?.midPx ?? ctx?.oraclePx);\n }\n if (!price || price <= 0) continue;\n\n prices.set(base, price);\n }\n\n return prices;\n}\n\nexport async function fetchHyperliquidSpotUsdPriceMap(\n environment: HyperliquidEnvironment,\n): Promise<Map<string, number>> {\n const [spotMetaAndCtxs, mids] = await Promise.all([\n fetchHyperliquidSpotMetaAndAssetCtxs(environment),\n fetchHyperliquidAllMids(environment).catch(() => null),\n ]);\n\n const [metaRaw, ctxsRaw] = spotMetaAndCtxs as [SpotMetaResponse, SpotAssetContext[]];\n const meta = {\n universe: Array.isArray(metaRaw?.universe) ? metaRaw.universe : [],\n tokens: Array.isArray(metaRaw?.tokens) ? metaRaw.tokens : [],\n } satisfies SpotMetaResponse;\n\n const ctxs = Array.isArray(ctxsRaw) ? ctxsRaw : [];\n return buildHyperliquidSpotUsdPriceMap({ meta, ctxs, mids });\n}\n\nexport async function fetchHyperliquidSpotAccountValue(params: {\n environment: HyperliquidEnvironment;\n balances: unknown;\n}): Promise<number | null> {\n const pricesUsd = await fetchHyperliquidSpotUsdPriceMap(params.environment);\n return readHyperliquidSpotAccountValue({\n balances: params.balances,\n pricesUsd,\n });\n}\n\nexport const __hyperliquidMarketDataInternals = {\n maxDecimals,\n toScaledInt,\n formatScaledInt,\n};\n","import { encodeFunctionData, erc20Abi, parseUnits } from \"viem\";\n\nimport type { WalletFullContext } from \"../../wallet/types\";\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 normalizeCloid,\n resolveHyperliquidAssetIndex,\n signApproveBuilderFee,\n signL1Action,\n splitSignature,\n toApiDecimal,\n} from \"./base\";\nimport { supportsHyperliquidBuilderFee } from \"./symbols\";\nimport type {\n ExchangeOrderAction,\n ExchangeSignature,\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n NonceSource,\n} from \"./base\";\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 nonceSource?: NonceSource;\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 | \"waitingForFill\"\n | \"waitingForTrigger\";\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 nonceSource?: NonceSource;\n signatureChainId?: string;\n}\n\nexport interface HyperliquidApproveBuilderFeeResponse {\n status: string;\n response?: unknown;\n error?: string;\n}\n\nfunction resolveRequiredNonce(params: {\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n wallet?: Pick<WalletFullContext, \"nonceSource\"> | undefined;\n action: string;\n}): number {\n if (typeof params.nonce === \"number\") {\n return params.nonce;\n }\n\n const resolved = params.nonceSource?.() ?? params.wallet?.nonceSource?.();\n if (resolved === undefined) {\n throw new Error(`${params.action} requires an explicit nonce or wallet nonce source.`);\n }\n\n return resolved;\n}\n\ntype ExchangeRequestBody = {\n action: ExchangeOrderAction;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n};\n\nfunction assertPositiveDecimalInput(value: string | number | bigint, label: string): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`${label} must be a positive number.`);\n }\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\n const trimmed = value.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const numeric = Number(trimmed);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n}\n\nfunction normalizePositiveDecimalString(raw: string, label: string): string {\n const trimmed = raw.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty decimal string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const normalized = trimmed\n .replace(/^0+(?=\\d)/, \"\")\n .replace(/(\\.\\d*?)0+$/, \"$1\")\n .replace(/\\.$/, \"\");\n const numeric = Number(normalized);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n return normalized;\n}\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 if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Hyperliquid order signing requires a wallet with signing capabilities.\");\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 assertPositiveDecimalInput(intent.price, \"price\");\n assertPositiveDecimalInput(intent.size, \"size\");\n if (intent.trigger) {\n assertPositiveDecimalInput(intent.trigger.triggerPx, \"triggerPx\");\n }\n\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: resolvedBaseUrl,\n environment: inferredEnvironment,\n fetcher: (...args) => fetch(...args),\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: 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 ...(intent.clientId ? { c: normalizeCloid(intent.clientId) } : {}),\n };\n\n return order;\n }),\n );\n\n const action: ExchangeOrderAction = {\n type: \"order\",\n orders: preparedOrders,\n grouping,\n };\n\n if (orders.every((intent) => supportsHyperliquidBuilderFee(intent))) {\n action.builder = {\n b: normalizeAddress(BUILDER_CODE.address),\n f: BUILDER_CODE.fee,\n };\n }\n\n const effectiveNonce = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid order submission\",\n });\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 =\n 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\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((entry): entry is { error: string } =>\n Boolean(\n entry &&\n typeof entry === \"object\" &&\n \"error\" in entry &&\n typeof (entry as { error?: unknown }).error === \"string\",\n ),\n );\n if (errorStatuses.length) {\n const message = errorStatuses.map((entry) => entry.error).join(\", \");\n throw new HyperliquidApiError(message || \"Hyperliquid rejected the order.\", json);\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 || !wallet.publicClient) {\n throw new Error(\"Wallet client and public client are required for deposit.\");\n }\n\n const bridgeAddress = getBridgeAddress(environment);\n const usdcAddress = getUsdcAddress(environment);\n const amountUnits = parseUnits(amount, 6);\n\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [bridgeAddress, amountUnits],\n });\n\n const txHash = await wallet.walletClient.sendTransaction({\n account: wallet.account,\n to: usdcAddress,\n data,\n });\n\n await wallet.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 nonce?: number;\n nonceSource?: NonceSource;\n}): Promise<HyperliquidWithdrawResult> {\n const { environment, amount, destination, wallet } = options;\n\n const normalizedAmount = normalizePositiveDecimalString(amount, \"Withdraw amount\");\n const parsedAmount = Number.parseFloat(normalizedAmount);\n\n if (!wallet.account || !wallet.walletClient || !wallet.publicClient) {\n throw new Error(\"Wallet client and public client are required for withdraw.\");\n }\n\n const signatureChainId = getSignatureChainId(environment);\n const hyperliquidChain = HL_CHAIN_LABEL[environment];\n const nonce = resolveRequiredNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid withdraw\",\n });\n const time = BigInt(nonce);\n const normalizedDestination = normalizeAddress(destination);\n\n const signatureHex = await wallet.walletClient.signTypedData({\n account: wallet.account,\n domain: {\n name: \"HyperliquidSignTransaction\",\n version: \"1\",\n chainId: Number.parseInt(signatureChainId, 16),\n verifyingContract: ZERO_ADDRESS,\n },\n 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 },\n primaryType: \"HyperliquidTransaction:Withdraw\",\n message: {\n hyperliquidChain,\n destination: normalizedDestination,\n amount: normalizedAmount,\n time,\n },\n });\n\n const response = await fetch(`${HL_ENDPOINT[environment]}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n action: {\n type: \"withdraw3\",\n signatureChainId,\n hyperliquidChain,\n destination: normalizedDestination,\n amount: normalizedAmount,\n time: nonce,\n },\n nonce,\n signature: splitSignature(signatureHex),\n }),\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: ${json?.response ?? json?.error ?? response.statusText}`,\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 response = await fetch(`${HL_ENDPOINT[params.environment]}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ type: \"clearinghouseState\", user: params.walletAddress }),\n });\n\n const data = (await response.json().catch(() => null)) as Record<string, unknown> | null;\n return { ok: response.ok, data };\n}\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(\"Hyperliquid builder approval requires a wallet with signing capabilities.\");\n }\n\n const inferredEnvironment = environment ?? \"mainnet\";\n const maxFeeRate = `${BUILDER_CODE.fee / 1000}%`;\n const effectiveNonce = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid builder approval\",\n });\n\n const response = await fetch(`${API_BASES[inferredEnvironment]}/exchange`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n action: {\n type: \"approveBuilderFee\",\n maxFeeRate,\n builder: normalizeAddress(BUILDER_CODE.address),\n hyperliquidChain: HL_CHAIN_LABEL[inferredEnvironment],\n signatureChainId: signatureChainId ?? getSignatureChainId(inferredEnvironment),\n nonce: effectiveNonce,\n },\n nonce: effectiveNonce,\n signature: await signApproveBuilderFee({\n wallet,\n maxFeeRate,\n nonce: BigInt(effectiveNonce),\n signatureChainId: signatureChainId ?? getSignatureChainId(inferredEnvironment),\n isTestnet: inferredEnvironment === \"testnet\",\n }),\n }),\n });\n\n const rawText = await response.text().catch(() => null);\n let parsed:\n | HyperliquidApproveBuilderFeeResponse\n | { error?: string; message?: string }\n | string\n | 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\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\nexport async function getHyperliquidMaxBuilderFee(params: {\n environment: HyperliquidEnvironment;\n user: `0x${string}`;\n}): Promise<unknown> {\n const response = await fetch(`${API_BASES[params.environment]}/info`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n type: \"maxBuilderFee\",\n user: normalizeAddress(params.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\n return data;\n}\n\nexport function createHyperliquidActionHash(params: {\n action: Record<string, unknown> | ExchangeOrderAction;\n nonce: number;\n isTestnet: boolean;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n}) {\n return createL1ActionHash(params);\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport type {\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n HyperliquidTriggerType,\n NonceSource,\n} from \"./base\";\nimport { placeHyperliquidOrder, type HyperliquidOrderResponse } from \"./actions\";\nimport { fetchHyperliquidSizeDecimals, fetchHyperliquidTickSize } from \"./market-data\";\nimport {\n formatHyperliquidMarketablePrice,\n formatHyperliquidPrice,\n formatHyperliquidSize,\n} from \"./order-utils\";\nimport { isHyperliquidSpotSymbol } from \"./symbols\";\n\nexport const DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS = 1_000;\n\nexport type HyperliquidTpSlExecutionType = \"market\" | \"limit\";\n\nexport interface HyperliquidTpSlLegInput {\n triggerPx: string | number | bigint;\n execution?: HyperliquidTpSlExecutionType;\n price?: string | number | bigint;\n clientId?: `0x${string}`;\n}\n\nexport interface HyperliquidPlaceOrderWithTpSlOptions {\n wallet: WalletFullContext;\n parent: HyperliquidOrderIntent;\n referencePrice: string | number;\n takeProfit?: HyperliquidTpSlLegInput | null;\n stopLoss?: HyperliquidTpSlLegInput | null;\n environment?: HyperliquidEnvironment;\n grouping?: Extract<HyperliquidGrouping, \"normalTpsl\">;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonce?: number;\n nonceSource?: NonceSource;\n triggerMarketSlippageBps?: number;\n}\n\nexport interface HyperliquidPlacePositionTpSlOptions {\n wallet: WalletFullContext;\n symbol: string;\n positionSide: \"long\" | \"short\";\n size: string | number | bigint;\n referencePrice: string | number;\n takeProfit?: HyperliquidTpSlLegInput | null;\n stopLoss?: HyperliquidTpSlLegInput | null;\n environment?: HyperliquidEnvironment;\n grouping?: Extract<HyperliquidGrouping, \"positionTpsl\">;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n nonce?: number;\n nonceSource?: NonceSource;\n triggerMarketSlippageBps?: number;\n}\n\nfunction toDecimalInput(value: string | number | bigint, label: string): string | number {\n if (typeof value === \"bigint\") {\n if (value <= 0n) {\n throw new Error(`${label} must be positive.`);\n }\n return value.toString();\n }\n return value;\n}\n\nfunction toPositiveNumber(value: string | number | bigint, label: string): number {\n if (typeof value === \"bigint\") {\n if (value <= 0n) {\n throw new Error(`${label} must be positive.`);\n }\n return Number(value);\n }\n const numeric =\n typeof value === \"number\" ? value : Number.parseFloat(value.toString().trim());\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n return numeric;\n}\n\nfunction normalizeExecutionType(value?: HyperliquidTpSlExecutionType): HyperliquidTpSlExecutionType {\n return value ?? \"market\";\n}\n\nfunction resolveTriggerDirection(params: {\n leg: HyperliquidTriggerType;\n parentSide: HyperliquidOrderIntent[\"side\"];\n referencePrice: number;\n triggerPx: number;\n}) {\n const isLong = params.parentSide === \"buy\";\n if (params.leg === \"tp\") {\n if (isLong && params.triggerPx <= params.referencePrice) {\n throw new Error(\"Take profit trigger must be above the current price for long positions.\");\n }\n if (!isLong && params.triggerPx >= params.referencePrice) {\n throw new Error(\"Take profit trigger must be below the current price for short positions.\");\n }\n return;\n }\n\n if (isLong && params.triggerPx >= params.referencePrice) {\n throw new Error(\"Stop loss trigger must be below the current price for long positions.\");\n }\n if (!isLong && params.triggerPx <= params.referencePrice) {\n throw new Error(\"Stop loss trigger must be above the current price for short positions.\");\n }\n}\n\nasync function buildTpSlChildOrder(params: {\n symbol: string;\n parentSide: HyperliquidOrderIntent[\"side\"];\n size: string | number | bigint;\n referencePrice: number;\n legType: HyperliquidTriggerType;\n leg: HyperliquidTpSlLegInput;\n environment: HyperliquidEnvironment;\n triggerMarketSlippageBps: number;\n}): Promise<HyperliquidOrderIntent> {\n const marketType = isHyperliquidSpotSymbol(params.symbol) ? \"spot\" : \"perp\";\n const [szDecimals, tick] = await Promise.all([\n fetchHyperliquidSizeDecimals({\n environment: params.environment,\n symbol: params.symbol,\n }),\n fetchHyperliquidTickSize({\n environment: params.environment,\n symbol: params.symbol,\n }).catch(() => null),\n ]);\n\n const childSide: HyperliquidOrderIntent[\"side\"] = params.parentSide === \"buy\" ? \"sell\" : \"buy\";\n const triggerPxNumeric = toPositiveNumber(params.leg.triggerPx, `${params.legType} triggerPx`);\n resolveTriggerDirection({\n leg: params.legType,\n parentSide: params.parentSide,\n referencePrice: params.referencePrice,\n triggerPx: triggerPxNumeric,\n });\n\n const execution = normalizeExecutionType(params.leg.execution);\n const size = formatHyperliquidSize(toDecimalInput(params.size, \"size\"), szDecimals);\n const triggerPx = formatHyperliquidPrice(triggerPxNumeric, szDecimals, marketType);\n const explicitLimitPrice =\n params.leg.price != null ? toDecimalInput(params.leg.price, `${params.legType} price`) : null;\n const explicitLimitPriceNumeric =\n explicitLimitPrice != null\n ? toPositiveNumber(explicitLimitPrice, `${params.legType} price`)\n : null;\n if (execution === \"limit\" && explicitLimitPriceNumeric == null) {\n throw new Error(`${params.legType} limit price is required for limit execution.`);\n }\n if (execution === \"limit\" && explicitLimitPriceNumeric != null) {\n if (childSide === \"sell\" && explicitLimitPriceNumeric > triggerPxNumeric) {\n throw new Error(`${params.legType} sell limit price must be at or below the trigger price.`);\n }\n if (childSide === \"buy\" && explicitLimitPriceNumeric < triggerPxNumeric) {\n throw new Error(`${params.legType} buy limit price must be at or above the trigger price.`);\n }\n }\n const price =\n execution === \"limit\"\n ? formatHyperliquidPrice(\n explicitLimitPrice!,\n szDecimals,\n marketType,\n )\n : formatHyperliquidMarketablePrice({\n mid: triggerPxNumeric,\n side: childSide,\n slippageBps: params.triggerMarketSlippageBps,\n tick,\n });\n\n return {\n symbol: params.symbol,\n side: childSide,\n price,\n size,\n reduceOnly: true,\n trigger: {\n triggerPx,\n isMarket: execution === \"market\",\n tpsl: params.legType,\n },\n ...(params.leg.clientId ? { clientId: params.leg.clientId } : {}),\n };\n}\n\nasync function buildAttachedTpSlOrders(params: {\n symbol: string;\n parentSide: HyperliquidOrderIntent[\"side\"];\n size: string | number | bigint;\n referencePrice: string | number;\n takeProfit: HyperliquidTpSlLegInput | null;\n stopLoss: HyperliquidTpSlLegInput | null;\n environment: HyperliquidEnvironment;\n triggerMarketSlippageBps: number;\n}): Promise<HyperliquidOrderIntent[]> {\n const referencePrice = toPositiveNumber(params.referencePrice, \"referencePrice\");\n const legs = await Promise.all(\n [\n params.takeProfit\n ? buildTpSlChildOrder({\n symbol: params.symbol,\n parentSide: params.parentSide,\n size: params.size,\n referencePrice,\n legType: \"tp\",\n leg: params.takeProfit,\n environment: params.environment,\n triggerMarketSlippageBps: params.triggerMarketSlippageBps,\n })\n : null,\n params.stopLoss\n ? buildTpSlChildOrder({\n symbol: params.symbol,\n parentSide: params.parentSide,\n size: params.size,\n referencePrice,\n legType: \"sl\",\n leg: params.stopLoss,\n environment: params.environment,\n triggerMarketSlippageBps: params.triggerMarketSlippageBps,\n })\n : null,\n ],\n );\n\n return legs.filter((entry): entry is HyperliquidOrderIntent => Boolean(entry));\n}\n\nexport async function placeHyperliquidOrderWithTpSl(\n options: HyperliquidPlaceOrderWithTpSlOptions,\n): Promise<HyperliquidOrderResponse> {\n const env = options.environment ?? \"mainnet\";\n const childOrders = await buildAttachedTpSlOrders({\n symbol: options.parent.symbol,\n parentSide: options.parent.side,\n size: options.parent.size,\n referencePrice: options.referencePrice,\n takeProfit: options.takeProfit ?? null,\n stopLoss: options.stopLoss ?? null,\n environment: env,\n triggerMarketSlippageBps:\n options.triggerMarketSlippageBps ?? DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS,\n });\n\n return placeHyperliquidOrder({\n wallet: options.wallet,\n orders: [options.parent, ...childOrders],\n grouping: options.grouping ?? \"normalTpsl\",\n environment: env,\n ...(options.vaultAddress ? { vaultAddress: options.vaultAddress } : {}),\n ...(typeof options.expiresAfter === \"number\" ? { expiresAfter: options.expiresAfter } : {}),\n ...(typeof options.nonce === \"number\" ? { nonce: options.nonce } : {}),\n ...(options.nonceSource ? { nonceSource: options.nonceSource } : {}),\n });\n}\n\nexport async function placeHyperliquidPositionTpSl(\n options: HyperliquidPlacePositionTpSlOptions,\n): Promise<HyperliquidOrderResponse> {\n const env = options.environment ?? \"mainnet\";\n const parentSide: HyperliquidOrderIntent[\"side\"] =\n options.positionSide === \"long\" ? \"buy\" : \"sell\";\n const childOrders = await buildAttachedTpSlOrders({\n symbol: options.symbol,\n parentSide,\n size: options.size,\n referencePrice: options.referencePrice,\n takeProfit: options.takeProfit ?? null,\n stopLoss: options.stopLoss ?? null,\n environment: env,\n triggerMarketSlippageBps:\n options.triggerMarketSlippageBps ?? DEFAULT_HYPERLIQUID_TPSL_MARKET_SLIPPAGE_BPS,\n });\n\n if (childOrders.length === 0) {\n throw new Error(\"At least one TP or SL order is required.\");\n }\n\n return placeHyperliquidOrder({\n wallet: options.wallet,\n orders: childOrders,\n grouping: options.grouping ?? \"positionTpsl\",\n environment: env,\n ...(options.vaultAddress ? { vaultAddress: options.vaultAddress } : {}),\n ...(typeof options.expiresAfter === \"number\" ? { expiresAfter: options.expiresAfter } : {}),\n ...(typeof options.nonce === \"number\" ? { nonce: options.nonce } : {}),\n ...(options.nonceSource ? { nonceSource: options.nonceSource } : {}),\n });\n}\n","export type HyperliquidApproximateLiquidationParams = {\n entryPrice: number;\n side: \"buy\" | \"sell\";\n notionalUsd: number;\n leverage: number;\n maxLeverage: number;\n marginMode: \"cross\" | \"isolated\";\n availableCollateralUsd?: number | null;\n};\n\nfunction toFinitePositive(value: number): number | null {\n return Number.isFinite(value) && value > 0 ? value : null;\n}\n\nfunction estimateMaintenanceLeverage(maxLeverage: number): number | null {\n const normalized = toFinitePositive(maxLeverage);\n if (!normalized) return null;\n return normalized * 2;\n}\n\nexport function estimateHyperliquidLiquidationPrice(\n params: HyperliquidApproximateLiquidationParams,\n): number | null {\n const entryPrice = toFinitePositive(params.entryPrice);\n const notionalUsd = toFinitePositive(params.notionalUsd);\n const leverage = toFinitePositive(params.leverage);\n const maintenanceLeverage = estimateMaintenanceLeverage(params.maxLeverage);\n\n if (!entryPrice || !notionalUsd || !leverage || !maintenanceLeverage) {\n return null;\n }\n\n const size = notionalUsd / entryPrice;\n if (!Number.isFinite(size) || size <= 0) {\n return null;\n }\n\n const isolatedMargin = notionalUsd / leverage;\n const marginAvailable =\n params.marginMode === \"cross\"\n ? Math.max(\n toFinitePositive(params.availableCollateralUsd ?? 0) ?? isolatedMargin,\n isolatedMargin,\n )\n : isolatedMargin;\n\n const sideSign = params.side === \"buy\" ? 1 : -1;\n const maintenanceFactor = 1 / maintenanceLeverage;\n const denominator = 1 - maintenanceFactor * sideSign;\n if (!Number.isFinite(denominator) || denominator <= 0) {\n return null;\n }\n\n const liquidationPrice =\n entryPrice - (sideSign * (marginAvailable / size)) / denominator;\n\n if (!Number.isFinite(liquidationPrice) || liquidationPrice <= 0) {\n return null;\n }\n\n return liquidationPrice;\n}\n","export type HyperliquidScheduleUnit = \"minutes\" | \"hours\";\n\nexport type HyperliquidCadence =\n | \"daily\"\n | \"hourly\"\n | \"weekly\"\n | \"twice-weekly\"\n | \"monthly\";\n\nexport type HyperliquidResolution = \"1\" | \"5\" | \"15\" | \"30\" | \"60\" | \"240\" | \"1D\" | \"1W\";\n\nexport const DEFAULT_HYPERLIQUID_CADENCE_CRON: Record<HyperliquidCadence, string> = {\n daily: \"0 8 * * *\",\n hourly: \"0 * * * *\",\n weekly: \"0 8 * * 1\",\n \"twice-weekly\": \"0 8 * * 1,4\",\n monthly: \"0 8 1 * *\",\n};\n\nexport function parseHyperliquidJson(raw: string | null): unknown | null {\n if (!raw) return null;\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n return null;\n }\n}\n\nexport function clampHyperliquidInt(\n value: unknown,\n min: number,\n max: number,\n fallback: number,\n): number {\n if (value == null) return fallback;\n if (typeof value === \"string\" && value.trim().length === 0) return fallback;\n const parsed = Number(value);\n if (!Number.isFinite(parsed)) return fallback;\n const numeric = Math.trunc(parsed);\n if (!Number.isFinite(numeric)) return fallback;\n return Math.min(max, Math.max(min, numeric));\n}\n\nexport function clampHyperliquidFloat(\n value: unknown,\n min: number,\n max: number,\n fallback: number,\n): number {\n if (value == null) return fallback;\n if (typeof value === \"string\" && value.trim().length === 0) return fallback;\n const numeric = Number(value);\n if (!Number.isFinite(numeric)) return fallback;\n return Math.min(max, Math.max(min, numeric));\n}\n\nexport function resolveHyperliquidScheduleEvery(\n input: unknown,\n options?: { min?: number; max?: number; fallback?: number },\n): number {\n const min = options?.min ?? 1;\n const max = options?.max ?? 59;\n const fallback = options?.fallback ?? 1;\n return clampHyperliquidInt(input, min, max, fallback);\n}\n\nexport function resolveHyperliquidScheduleUnit(\n input: unknown,\n fallback: HyperliquidScheduleUnit = \"hours\",\n): HyperliquidScheduleUnit {\n if (input === \"minutes\") return \"minutes\";\n if (input === \"hours\") return \"hours\";\n return fallback;\n}\n\nexport function resolveHyperliquidIntervalCron(\n every: number,\n unit: HyperliquidScheduleUnit,\n): string {\n if (unit === \"minutes\") {\n return every === 1 ? \"* * * * *\" : `*/${every} * * * *`;\n }\n return every === 1 ? \"0 * * * *\" : `0 */${every} * * *`;\n}\n\nexport function resolveHyperliquidHourlyInterval(\n input: unknown,\n fallback = 1,\n): number {\n return clampHyperliquidInt(input, 1, 24, fallback);\n}\n\nexport function resolveHyperliquidCadenceCron(\n cadence: HyperliquidCadence,\n hourlyInterval: unknown,\n cadenceToCron: Record<HyperliquidCadence, string> = DEFAULT_HYPERLIQUID_CADENCE_CRON,\n): string {\n if (cadence !== \"hourly\") {\n return cadenceToCron[cadence];\n }\n const interval = resolveHyperliquidHourlyInterval(hourlyInterval, 1);\n return interval === 1 ? cadenceToCron.hourly : `0 */${interval} * * *`;\n}\n\nexport function resolveHyperliquidCadenceFromResolution(\n resolution: HyperliquidResolution,\n): { cadence: HyperliquidCadence; hourlyInterval?: number } {\n if (resolution === \"60\") {\n return { cadence: \"hourly\", hourlyInterval: 1 };\n }\n if (resolution === \"240\") {\n return { cadence: \"hourly\", hourlyInterval: 4 };\n }\n if (resolution === \"1W\") {\n return { cadence: \"weekly\" };\n }\n return { cadence: \"daily\" };\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 normalizeCloid,\n getUsdcAddress,\n normalizeAddress,\n resolveHyperliquidAssetIndex,\n signApproveBuilderFee,\n signL1Action,\n splitSignature,\n toApiDecimal,\n} from \"./base\";\nimport { supportsHyperliquidBuilderFee } from \"./symbols\";\nimport type {\n HyperliquidEnvironment,\n HyperliquidGrouping,\n HyperliquidOrderIntent,\n NonceSource,\n ExchangeOrderAction,\n ExchangeSignature,\n} from \"./base\";\nexport type {\n HyperliquidEnvironment,\n HyperliquidTimeInForce,\n HyperliquidGrouping,\n HyperliquidTriggerType,\n HyperliquidTriggerOptions,\n HyperliquidOrderIntent,\n HyperliquidAbstraction,\n HyperliquidAccountMode,\n HyperliquidBuilderFee,\n MarketIdentity,\n HyperliquidMarketIdentityInput,\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 buildHyperliquidMarketIdentity,\n} from \"./base\";\nexport {\n fetchHyperliquidMeta,\n fetchHyperliquidMetaAndAssetCtxs,\n fetchHyperliquidSpotMeta,\n fetchHyperliquidSpotMetaAndAssetCtxs,\n fetchHyperliquidAssetCtxs,\n fetchHyperliquidSpotAssetCtxs,\n fetchHyperliquidActiveAsset,\n fetchHyperliquidOpenOrders,\n fetchHyperliquidOpenOrdersAcrossDexes,\n fetchHyperliquidFrontendOpenOrders,\n fetchHyperliquidFrontendOpenOrdersAcrossDexes,\n fetchHyperliquidOrderStatus,\n fetchHyperliquidHistoricalOrders,\n fetchHyperliquidUserFills,\n fetchHyperliquidUserFillsByTime,\n fetchHyperliquidUserRateLimit,\n fetchHyperliquidPreTransferCheck,\n fetchHyperliquidSpotClearinghouseState,\n getKnownHyperliquidDexes,\n HYPERLIQUID_HIP3_DEXES,\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 nonceSource?: NonceSource;\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 | \"waitingForFill\"\n | \"waitingForTrigger\";\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 nonceSource?: NonceSource;\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\nfunction resolveRequiredNonce(params: {\n nonce?: number | undefined;\n nonceSource?: NonceSource | undefined;\n wallet?: Pick<WalletFullContext, \"nonceSource\"> | undefined;\n action: string;\n}): number {\n if (typeof params.nonce === \"number\") {\n return params.nonce;\n }\n\n const resolved = params.nonceSource?.() ?? params.wallet?.nonceSource?.();\n if (resolved === undefined) {\n throw new Error(`${params.action} requires an explicit nonce or wallet nonce source.`);\n }\n\n return resolved;\n}\n\ntype ExchangeRequestBody = {\n action: ExchangeOrderAction;\n nonce: number;\n signature: ExchangeSignature;\n vaultAddress?: `0x${string}`;\n expiresAfter?: number;\n};\n\nfunction assertPositiveDecimalInput(value: string | number | bigint, label: string): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(`${label} must be a positive number.`);\n }\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\n const trimmed = value.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const numeric = Number(trimmed);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n}\n\nfunction normalizePositiveDecimalString(raw: string, label: string): string {\n const trimmed = raw.trim();\n if (!trimmed.length) {\n throw new Error(`${label} must be a non-empty decimal string.`);\n }\n if (!/^(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n throw new Error(`${label} must be a positive decimal string.`);\n }\n const normalized = trimmed\n .replace(/^0+(?=\\d)/, \"\")\n .replace(/(\\.\\d*?)0+$/, \"$1\")\n .replace(/\\.$/, \"\");\n const numeric = Number(normalized);\n if (!Number.isFinite(numeric) || numeric <= 0) {\n throw new Error(`${label} must be positive.`);\n }\n return normalized;\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 if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Hyperliquid order signing requires a wallet with signing capabilities.\");\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 assertPositiveDecimalInput(intent.price, \"price\");\n assertPositiveDecimalInput(intent.size, \"size\");\n if (intent.trigger) {\n assertPositiveDecimalInput(intent.trigger.triggerPx, \"triggerPx\");\n }\n const assetIndex = await resolveHyperliquidAssetIndex({\n symbol: intent.symbol,\n baseUrl: resolvedBaseUrl,\n environment: inferredEnvironment,\n fetcher: (...args) => fetch(...args),\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: normalizeCloid(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 (orders.every((intent) => supportsHyperliquidBuilderFee(intent))) {\n action.builder = {\n b: normalizeAddress(BUILDER_CODE.address),\n f: BUILDER_CODE.fee,\n };\n }\n\n const effectiveNonce = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid order submission\",\n });\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 =\n 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((entry): entry is { error: string } =>\n Boolean(\n entry &&\n typeof entry === \"object\" &&\n \"error\" in entry &&\n typeof (entry as { error?: unknown }).error === \"string\",\n ),\n );\n if (errorStatuses.length) {\n const message = errorStatuses.map((entry) => entry.error).join(\", \");\n throw new HyperliquidApiError(message || \"Hyperliquid rejected the order.\", json);\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(\"Wallet client and public client are required for deposit.\");\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 nonce?: number;\n nonceSource?: NonceSource;\n}): Promise<HyperliquidWithdrawResult> {\n const { environment, amount, destination, wallet } = options;\n\n const normalizedAmount = normalizePositiveDecimalString(amount, \"Withdraw amount\");\n const parsedAmount = Number.parseFloat(normalizedAmount);\n\n if (!wallet.account || !wallet.walletClient || !wallet.publicClient) {\n throw new Error(\"Wallet client and public client are required for withdraw.\");\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 nonce = resolveRequiredNonce({\n nonce: options.nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid withdraw\",\n });\n const time = BigInt(nonce);\n const normalizedDestination = normalizeAddress(destination);\n\n const message = {\n hyperliquidChain,\n destination: normalizedDestination,\n amount: normalizedAmount,\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: normalizedAmount,\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: ${json?.response ?? json?.error ?? response.statusText}`,\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<string, unknown> | 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(\"Hyperliquid builder approval requires a wallet with signing capabilities.\");\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 = resolveRequiredNonce({\n nonce,\n nonceSource: options.nonceSource,\n wallet,\n action: \"Hyperliquid builder approval\",\n });\n const signatureNonce = BigInt(effectiveNonce);\n const signatureChainHex = 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:\n | HyperliquidApproveBuilderFeeResponse\n | { error?: string; message?: string }\n | string\n | 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(input: HyperliquidTermsRecordInput) {\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\";\nexport * from \"./env\";\nexport * from \"./symbols\";\nexport * from \"./strategy\";\nexport * from \"./order-utils\";\nexport * from \"./state-readers\";\nexport * from \"./market-data\";\nexport * from \"./tpsl\";\nexport * from \"./risk-utils\";\nexport * from \"./utils\";\n\nexport const __hyperliquidInternals = {\n toApiDecimal,\n createL1ActionHash,\n splitSignature,\n};\n","import { createHmac, randomBytes } from \"node:crypto\";\nimport { parseUnits } from \"viem\";\nimport type { WalletFullContext } from \"../../wallet/types\";\n\nexport type PolymarketEnvironment = \"mainnet\" | \"testnet\";\n\nexport type PolymarketSide = \"BUY\" | \"SELL\";\nexport type PolymarketOrderType = \"GTC\" | \"FOK\" | \"FAK\" | \"GTD\";\nexport type PolymarketSignatureType = 0 | 1 | 2;\n\nexport interface PolymarketApiCredentials {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketMarket {\n id: string;\n slug?: string | null;\n question?: string | null;\n description?: string | null;\n eventId?: string | null;\n eventSlug?: string | null;\n conditionId?: string | null;\n marketMakerAddress?: string | null;\n category?: string | null;\n tags?: string[];\n active?: boolean;\n closed?: boolean;\n resolved?: boolean;\n startDate?: string | null;\n endDate?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n closedTime?: string | null;\n volume?: string | null;\n liquidity?: string | null;\n openInterest?: string | null;\n outcomes?: string[];\n outcomePrices?: number[];\n clobTokenIds?: string[];\n icon?: string | null;\n image?: string | null;\n}\n\nexport interface PolymarketOrderbookLevel {\n price: number;\n size: number;\n}\n\nexport interface PolymarketOrderbook {\n market: string;\n bids: PolymarketOrderbookLevel[];\n asks: PolymarketOrderbookLevel[];\n timestamp?: string | null;\n}\n\nexport interface PolymarketPriceHistoryPoint {\n t: number;\n p: number;\n}\n\nexport interface PolymarketSignedOrderPayload {\n salt: string;\n maker: `0x${string}`;\n signer: `0x${string}`;\n taker: `0x${string}`;\n tokenId: string;\n makerAmount: string;\n takerAmount: string;\n expiration: string;\n nonce: string;\n feeRateBps: string;\n side: 0 | 1;\n signatureType: PolymarketSignatureType;\n signature: `0x${string}`;\n}\n\nexport class PolymarketApiError extends Error {\n constructor(\n message: string,\n public readonly response: unknown,\n ) {\n super(message);\n this.name = \"PolymarketApiError\";\n }\n}\n\nexport class PolymarketAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"PolymarketAuthError\";\n }\n}\n\nexport const POLYMARKET_ENDPOINTS = {\n gamma: {\n mainnet: \"https://gamma-api.polymarket.com\",\n testnet: \"https://gamma-api.polymarket.com\",\n },\n clob: {\n mainnet: \"https://clob.polymarket.com\",\n testnet: \"https://clob.polymarket.com\",\n },\n data: {\n mainnet: \"https://data-api.polymarket.com\",\n testnet: \"https://data-api.polymarket.com\",\n },\n} as const satisfies Record<\"gamma\" | \"clob\" | \"data\", Record<PolymarketEnvironment, string>>;\n\nexport const POLYMARKET_CHAIN_ID: Record<PolymarketEnvironment, number> = {\n mainnet: 137,\n testnet: 80002,\n};\n\nexport const POLYMARKET_EXCHANGE_ADDRESSES: Record<\n PolymarketEnvironment,\n { ctf: `0x${string}`; negRisk: `0x${string}` }\n> = {\n mainnet: {\n ctf: \"0x4bfb41d5b3570defd03c39a9a4d8de6bd8b8982e\",\n negRisk: \"0xc5d563a36ae78145c45a50134d48a1215220f80a\",\n },\n testnet: {\n ctf: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n negRisk: \"0xdfe02eb6733538f8ea35d585af8de5958ad99e40\",\n },\n};\n\nexport const POLYMARKET_CLOB_DOMAIN = {\n name: \"Polymarket CTF Exchange\",\n version: \"1\",\n};\n\nexport const POLYMARKET_CLOB_AUTH_DOMAIN = {\n name: \"ClobAuthDomain\",\n version: \"1\",\n};\n\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as const;\n\nexport function resolvePolymarketBaseUrl(\n service: keyof typeof POLYMARKET_ENDPOINTS,\n environment: PolymarketEnvironment,\n): string {\n return POLYMARKET_ENDPOINTS[service][environment];\n}\n\nexport function assertWalletSigner(wallet: WalletFullContext | undefined) {\n if (!wallet?.account || !wallet.walletClient) {\n throw new Error(\"Polymarket requires a wallet with signing capabilities.\");\n }\n}\n\nexport function toDecimalString(value: string | number | bigint): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"bigint\") return value.toString();\n if (!Number.isFinite(value)) {\n throw new Error(\"Numeric values must be finite.\");\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 integerPart + fractionalPart.padEnd(exponent + fractionalPart.length, \"0\");\n }\n const zeros = \"0\".repeat(Math.abs(exponent) - 1);\n return `0.${zeros}${integerPart}${fractionalPart}`.replace(/\\.0+$/, \"\");\n }\n return asString;\n}\n\nfunction normalizeArrayish(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return [];\n if (trimmed.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(trimmed);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n return [trimmed];\n }\n return [];\n}\n\nexport function normalizeStringArrayish(value: unknown): string[] {\n return normalizeArrayish(value)\n .map((entry) => (entry == null ? \"\" : String(entry).trim()))\n .filter((entry) => entry.length > 0);\n}\n\nexport function normalizeNumberArrayish(value: unknown): number[] {\n return normalizeArrayish(value)\n .map((entry) => (typeof entry === \"number\" ? entry : Number.parseFloat(String(entry))))\n .filter((entry) => Number.isFinite(entry));\n}\n\nexport function normalizeTags(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n const tags = value\n .map((entry) => {\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const label = record.label ?? record.id ?? record.tag;\n return label ? String(label).trim() : \"\";\n }\n return String(entry ?? \"\").trim();\n })\n .filter((entry) => entry.length > 0);\n return Array.from(new Set(tags));\n}\n\nexport function parseOptionalDate(value: unknown): string | null {\n if (!value) return null;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n const ts = value > 1_000_000_000_000 ? value : value * 1000;\n const date = new Date(ts);\n return Number.isNaN(date.getTime()) ? null : date.toISOString();\n }\n return null;\n}\n\nexport function buildHmacSignature(args: {\n secret: string;\n timestamp: number | string;\n method: string;\n path: string;\n body?: string | Record<string, unknown> | null;\n}): string {\n const timestamp = args.timestamp.toString();\n const method = args.method.toUpperCase();\n const path = args.path;\n const body =\n args.body == null ? \"\" : typeof args.body === \"string\" ? args.body : JSON.stringify(args.body);\n const payload = `${timestamp}${method}${path}${body}`;\n const key = Buffer.from(args.secret, \"base64\");\n return createHmac(\"sha256\", key).update(payload).digest(\"hex\");\n}\n\nexport function buildL2Headers(args: {\n credentials: PolymarketApiCredentials;\n address: `0x${string}`;\n timestamp?: number;\n method: string;\n path: string;\n body?: Record<string, unknown> | string | null;\n}): Record<string, string> {\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const signature = buildHmacSignature({\n secret: args.credentials.secret,\n timestamp,\n method: args.method,\n path: args.path,\n body: args.body ?? null,\n });\n return {\n POLY_ADDRESS: args.address,\n POLY_API_KEY: args.credentials.apiKey,\n POLY_PASSPHRASE: args.credentials.passphrase,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport async function buildL1Headers(args: {\n wallet: WalletFullContext;\n timestamp?: number;\n nonce?: number;\n environment?: PolymarketEnvironment;\n message?: string;\n}): Promise<Record<string, string>> {\n assertWalletSigner(args.wallet);\n const timestamp = args.timestamp ?? Math.floor(Date.now() / 1000);\n const nonce = args.nonce ?? Date.now();\n const chainId = POLYMARKET_CHAIN_ID[args.environment ?? \"mainnet\"];\n const address = args.wallet.address as `0x${string}`;\n const message =\n args.message ?? \"This message attests that I control the given wallet\";\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_AUTH_DOMAIN,\n chainId,\n },\n types: {\n ClobAuth: [\n { name: \"address\", type: \"address\" },\n { name: \"timestamp\", type: \"string\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"message\", type: \"string\" },\n ],\n },\n primaryType: \"ClobAuth\",\n message: {\n address,\n timestamp: timestamp.toString(),\n nonce: BigInt(nonce),\n message,\n },\n });\n\n return {\n POLY_ADDRESS: address,\n POLY_TIMESTAMP: timestamp.toString(),\n POLY_NONCE: nonce.toString(),\n POLY_SIGNATURE: signature,\n };\n}\n\nexport function resolveExchangeAddress(args: {\n environment: PolymarketEnvironment;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): `0x${string}` {\n if (args.exchangeAddress) return args.exchangeAddress;\n const env = args.environment;\n return args.negRisk\n ? POLYMARKET_EXCHANGE_ADDRESSES[env].negRisk\n : POLYMARKET_EXCHANGE_ADDRESSES[env].ctf;\n}\n\nfunction parseUintString(value: string, name: string): bigint {\n const trimmed = value.trim();\n if (!/^\\d+$/.test(trimmed)) {\n throw new Error(`${name} must be a base-10 integer string.`);\n }\n return BigInt(trimmed);\n}\n\nexport function buildPolymarketOrderAmounts(args: {\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n tickSize?: string | number | bigint;\n}): { makerAmount: bigint; takerAmount: bigint } {\n const priceStr = toDecimalString(args.price);\n const sizeStr = toDecimalString(args.size);\n if (!priceStr || !sizeStr) {\n throw new Error(\"Order price and size are required.\");\n }\n const priceFloat = Number(priceStr);\n if (!Number.isFinite(priceFloat) || priceFloat <= 0 || priceFloat >= 1) {\n throw new Error(\"Order price must be between 0 and 1 (exclusive).\");\n }\n const sizeFloat = Number(sizeStr);\n if (!Number.isFinite(sizeFloat) || sizeFloat <= 0) {\n throw new Error(\"Order size must be positive.\");\n }\n\n let priceUnits = parseUnits(priceStr, 6);\n if (args.tickSize !== undefined) {\n const tickUnits = parseUnits(toDecimalString(args.tickSize), 6);\n if (tickUnits <= 0n) {\n throw new Error(\"tickSize must be positive.\");\n }\n priceUnits = (priceUnits / tickUnits) * tickUnits;\n }\n\n const sizeUnits = parseUnits(sizeStr, 6);\n const quoteUnits = (priceUnits * sizeUnits) / 1_000_000n;\n\n if (args.side === \"BUY\") {\n return { makerAmount: quoteUnits, takerAmount: sizeUnits };\n }\n return { makerAmount: sizeUnits, takerAmount: quoteUnits };\n}\n\nexport async function buildSignedOrderPayload(args: {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}): Promise<PolymarketSignedOrderPayload> {\n assertWalletSigner(args.wallet);\n const environment = args.environment ?? \"mainnet\";\n const chainId = POLYMARKET_CHAIN_ID[environment];\n const exchangeAddress = resolveExchangeAddress({\n environment,\n ...(args.negRisk !== undefined ? { negRisk: args.negRisk } : {}),\n ...(args.exchangeAddress ? { exchangeAddress: args.exchangeAddress } : {}),\n });\n\n const maker = args.maker ?? (args.wallet.address as `0x${string}`);\n const signer = args.signer ?? (args.wallet.address as `0x${string}`);\n const taker = args.taker ?? ZERO_ADDRESS;\n const sideValue: 0 | 1 = args.side === \"BUY\" ? 0 : 1;\n const signatureType: PolymarketSignatureType = args.signatureType ?? 0;\n\n const tokenIdValue = args.tokenId.startsWith(\"0x\")\n ? BigInt(args.tokenId)\n : parseUintString(args.tokenId, \"tokenId\");\n\n const { makerAmount, takerAmount } = buildPolymarketOrderAmounts({\n side: args.side,\n price: args.price,\n size: args.size,\n ...(args.tickSize !== undefined ? { tickSize: args.tickSize } : {}),\n });\n\n const salt = BigInt(`0x${randomBytes(16).toString(\"hex\")}`);\n const expiration = BigInt(args.expiration ?? 0);\n const nonce = BigInt(args.nonce ?? 0);\n const feeRateBps = BigInt(args.feeRateBps ?? 0);\n\n const message = {\n salt,\n maker,\n signer,\n taker,\n tokenId: tokenIdValue,\n makerAmount,\n takerAmount,\n expiration,\n nonce,\n feeRateBps,\n side: sideValue,\n signatureType,\n };\n\n const signature = await args.wallet.walletClient.signTypedData({\n account: args.wallet.account,\n domain: {\n ...POLYMARKET_CLOB_DOMAIN,\n chainId,\n verifyingContract: exchangeAddress,\n },\n types: {\n Order: [\n { name: \"salt\", type: \"uint256\" },\n { name: \"maker\", type: \"address\" },\n { name: \"signer\", type: \"address\" },\n { name: \"taker\", type: \"address\" },\n { name: \"tokenId\", type: \"uint256\" },\n { name: \"makerAmount\", type: \"uint256\" },\n { name: \"takerAmount\", type: \"uint256\" },\n { name: \"expiration\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"feeRateBps\", type: \"uint256\" },\n { name: \"side\", type: \"uint8\" },\n { name: \"signatureType\", type: \"uint8\" },\n ],\n },\n primaryType: \"Order\",\n message,\n });\n\n return {\n salt: message.salt.toString(),\n maker,\n signer,\n taker,\n tokenId: tokenIdValue.toString(),\n makerAmount: message.makerAmount.toString(),\n takerAmount: message.takerAmount.toString(),\n expiration: message.expiration.toString(),\n nonce: message.nonce.toString(),\n feeRateBps: message.feeRateBps.toString(),\n side: sideValue,\n signatureType,\n signature: signature as `0x${string}`,\n };\n}\n","import type { WalletFullContext } from \"../../wallet/types\";\nimport {\n PolymarketApiCredentials,\n PolymarketApiError,\n PolymarketAuthError,\n PolymarketEnvironment,\n PolymarketOrderType,\n PolymarketSide,\n PolymarketSignatureType,\n buildL1Headers,\n buildL2Headers,\n buildSignedOrderPayload,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\nexport interface PolymarketApiKeyResponse {\n apiKey: string;\n secret: string;\n passphrase: string;\n}\n\nexport interface PolymarketOrderIntent {\n tokenId: string;\n side: PolymarketSide;\n price: string | number | bigint;\n size: string | number | bigint;\n expiration?: number;\n nonce?: number;\n feeRateBps?: number;\n tickSize?: string | number | bigint;\n maker?: `0x${string}`;\n signer?: `0x${string}`;\n taker?: `0x${string}`;\n signatureType?: PolymarketSignatureType;\n negRisk?: boolean;\n exchangeAddress?: `0x${string}`;\n}\n\nexport interface PolymarketPlaceOrderResponse {\n orderId?: string;\n status?: string;\n message?: string;\n [key: string]: unknown;\n}\n\ninterface PolymarketApiKeyRequestArgs {\n wallet: WalletFullContext;\n environment?: PolymarketEnvironment;\n timestamp?: number;\n nonce?: number;\n message?: string;\n}\n\nfunction requireApiKeyNonce(\n nonce: number | undefined,\n message = \"Polymarket API key operations require an explicit nonce.\",\n): number {\n if (!Number.isSafeInteger(nonce) || nonce == null || nonce < 0) {\n throw new PolymarketAuthError(message);\n }\n return nonce;\n}\n\nasync function resolveAuthContext(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n environment?: PolymarketEnvironment;\n apiKeyNonce?: number;\n}): Promise<{ credentials: PolymarketApiCredentials; address: `0x${string}` }> {\n if (args.wallet) {\n const credentials = args.credentials;\n if (credentials) {\n return {\n credentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n const apiKeyNonce = requireApiKeyNonce(\n args.apiKeyNonce,\n \"Polymarket auto-auth requires apiKeyNonce when credentials are not provided.\",\n );\n\n const derivedCredentials = await derivePolymarketApiKey({\n wallet: args.wallet,\n ...(args.environment ? { environment: args.environment } : {}),\n nonce: apiKeyNonce,\n });\n\n return {\n credentials: derivedCredentials,\n address: args.wallet.address as `0x${string}`,\n };\n }\n\n if (args.walletAddress && args.credentials) {\n return { credentials: args.credentials, address: args.walletAddress };\n }\n\n throw new PolymarketAuthError(\n \"Polymarket auth requires a wallet (preferred) or credentials + walletAddress.\",\n );\n}\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction resolvePath(url: string): string {\n const parsed = new URL(url);\n return `${parsed.pathname}${parsed.search}`;\n}\n\nfunction normalizeApiKeyResponse(\n data: Partial<PolymarketApiKeyResponse> | null | undefined,\n): PolymarketApiKeyResponse | null {\n if (!data?.apiKey || !data?.secret || !data?.passphrase) {\n return null;\n }\n return {\n apiKey: data.apiKey,\n secret: data.secret,\n passphrase: data.passphrase,\n };\n}\n\nasync function requestPolymarketApiKey(\n args: PolymarketApiKeyRequestArgs & { mode: \"create\" | \"derive\" },\n): Promise<Partial<PolymarketApiKeyResponse> | null> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url =\n args.mode === \"create\"\n ? `${baseUrl}/auth/api-key`\n : `${baseUrl}/auth/derive-api-key`;\n const nonce = requireApiKeyNonce(args.nonce);\n const headers = await buildL1Headers({\n wallet: args.wallet,\n environment,\n ...(args.timestamp !== undefined ? { timestamp: args.timestamp } : {}),\n nonce,\n ...(args.message !== undefined ? { message: args.message } : {}),\n });\n\n return (await requestJson(url, {\n method: args.mode === \"create\" ? \"POST\" : \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n ...(args.mode === \"create\" ? { body: JSON.stringify({}) } : {}),\n })) as Partial<PolymarketApiKeyResponse> | null;\n}\n\nexport async function createPolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n const normalized = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"create\" }),\n );\n if (!normalized) {\n throw new PolymarketAuthError(\"Failed to create Polymarket API key.\");\n }\n return normalized;\n}\n\nexport async function derivePolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n const normalized = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"derive\" }),\n );\n if (!normalized) {\n throw new PolymarketAuthError(\"Failed to derive Polymarket API key.\");\n }\n return normalized;\n}\n\nexport async function createOrDerivePolymarketApiKey(\n args: PolymarketApiKeyRequestArgs,\n): Promise<PolymarketApiKeyResponse> {\n let deriveError: unknown;\n\n try {\n const derived = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"derive\" }),\n );\n if (derived) {\n return derived;\n }\n } catch (error) {\n deriveError = error;\n }\n\n const created = normalizeApiKeyResponse(\n await requestPolymarketApiKey({ ...args, mode: \"create\" }),\n );\n if (created) {\n return created;\n }\n\n if (deriveError) {\n throw deriveError;\n }\n\n throw new PolymarketAuthError(\n \"Failed to derive or create Polymarket API key.\",\n );\n}\n\nexport async function placePolymarketOrder(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n order: PolymarketOrderIntent;\n orderType?: PolymarketOrderType;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPlaceOrderResponse> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n\n const signedOrder = await buildSignedOrderPayload({\n wallet: args.wallet,\n environment,\n ...args.order,\n });\n\n const auth = await resolveAuthContext({\n wallet: args.wallet,\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const body = {\n order: signedOrder,\n owner: auth.credentials.apiKey,\n orderType: args.orderType ?? \"GTC\",\n };\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"POST\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as PolymarketPlaceOrderResponse;\n}\n\nexport async function cancelPolymarketOrder(args: {\n orderId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/order`;\n const body = { orderID: args.orderId };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelPolymarketOrders(args: {\n orderIds: string[];\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/orders`;\n const body = { orderIDs: args.orderIds };\n\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport async function cancelAllPolymarketOrders(args: {\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-all`;\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n })) as Record<string, unknown>;\n}\n\nexport async function cancelMarketPolymarketOrders(args: {\n tokenId: string;\n wallet?: WalletFullContext;\n walletAddress?: `0x${string}`;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n}): Promise<Record<string, unknown>> {\n const environment = args.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = `${baseUrl}/cancel-market-orders`;\n const body = { market: args.tokenId };\n const auth = await resolveAuthContext({\n ...(args.wallet ? { wallet: args.wallet } : {}),\n ...(args.walletAddress ? { walletAddress: args.walletAddress } : {}),\n ...(args.credentials ? { credentials: args.credentials } : {}),\n environment,\n ...(args.apiKeyNonce !== undefined\n ? { apiKeyNonce: args.apiKeyNonce }\n : {}),\n });\n const headers = buildL2Headers({\n credentials: auth.credentials,\n address: auth.address,\n method: \"DELETE\",\n path: resolvePath(url),\n body,\n });\n\n return (await requestJson(url, {\n method: \"DELETE\",\n headers: {\n \"content-type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(body),\n })) as Record<string, unknown>;\n}\n\nexport class PolymarketExchangeClient {\n private readonly wallet: WalletFullContext;\n private readonly credentials: PolymarketApiCredentials | undefined;\n private readonly apiKeyNonce: number | undefined;\n private readonly environment: PolymarketEnvironment;\n private cachedCredentials: PolymarketApiCredentials | undefined;\n\n constructor(args: {\n wallet: WalletFullContext;\n credentials?: PolymarketApiCredentials;\n apiKeyNonce?: number;\n environment?: PolymarketEnvironment;\n }) {\n this.wallet = args.wallet;\n this.credentials = args.credentials;\n this.apiKeyNonce = args.apiKeyNonce;\n this.environment = args.environment ?? \"mainnet\";\n }\n\n private async getCredentials() {\n if (this.cachedCredentials) return this.cachedCredentials;\n const resolved = await resolveAuthContext({\n wallet: this.wallet,\n ...(this.credentials ? { credentials: this.credentials } : {}),\n environment: this.environment,\n ...(this.apiKeyNonce !== undefined\n ? { apiKeyNonce: this.apiKeyNonce }\n : {}),\n });\n this.cachedCredentials = resolved.credentials;\n return resolved.credentials;\n }\n\n async placeOrder(\n order: PolymarketOrderIntent,\n orderType?: PolymarketOrderType,\n ) {\n const credentials = await this.getCredentials();\n return placePolymarketOrder({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n order,\n ...(orderType !== undefined ? { orderType } : {}),\n });\n }\n\n async cancelOrder(orderId: string) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrder({\n orderId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelOrders(orderIds: string[]) {\n const credentials = await this.getCredentials();\n return cancelPolymarketOrders({\n orderIds,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelAll() {\n const credentials = await this.getCredentials();\n return cancelAllPolymarketOrders({\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n\n async cancelMarket(tokenId: string) {\n const credentials = await this.getCredentials();\n return cancelMarketPolymarketOrders({\n tokenId,\n wallet: this.wallet,\n credentials,\n environment: this.environment,\n });\n }\n}\n","import {\n PolymarketApiError,\n PolymarketEnvironment,\n PolymarketMarket,\n PolymarketOrderbook,\n PolymarketOrderbookLevel,\n PolymarketPriceHistoryPoint,\n normalizeNumberArrayish,\n normalizeStringArrayish,\n normalizeTags,\n parseOptionalDate,\n resolvePolymarketBaseUrl,\n} from \"./base\";\n\ntype GammaEvent = Record<string, unknown>;\ntype GammaMarket = Record<string, unknown>;\ntype CsvStringInput = string | string[];\ntype CsvNumberInput = number | number[];\n\ntype FetchParams = {\n environment?: PolymarketEnvironment;\n limit?: number;\n offset?: number;\n order?: string;\n ascending?: boolean;\n tagId?: string;\n relatedTags?: boolean;\n excludeTagId?: string;\n category?: string;\n slug?: string;\n active?: boolean;\n closed?: boolean;\n};\n\nexport interface PolymarketUserPosition {\n proxyWallet?: string | null;\n asset?: string | null;\n conditionId?: string | null;\n size?: number | null;\n avgPrice?: number | null;\n initialValue?: number | null;\n currentValue?: number | null;\n cashPnl?: number | null;\n percentPnl?: number | null;\n totalBought?: number | null;\n realizedPnl?: number | null;\n percentRealizedPnl?: number | null;\n curPrice?: number | null;\n redeemable?: boolean;\n mergeable?: boolean;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n outcomeIndex?: number | null;\n oppositeOutcome?: string | null;\n oppositeAsset?: string | null;\n endDate?: string | null;\n negativeRisk?: boolean;\n}\n\nexport interface PolymarketClosedPosition {\n proxyWallet?: string | null;\n asset?: string | null;\n conditionId?: string | null;\n avgPrice?: number | null;\n totalBought?: number | null;\n realizedPnl?: number | null;\n curPrice?: number | null;\n timestamp?: number | null;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n outcomeIndex?: number | null;\n oppositeOutcome?: string | null;\n oppositeAsset?: string | null;\n endDate?: string | null;\n}\n\nexport type PolymarketActivityType =\n | \"TRADE\"\n | \"SPLIT\"\n | \"MERGE\"\n | \"REDEEM\"\n | \"REWARD\"\n | \"CONVERSION\"\n | \"MAKER_REBATE\";\n\nexport interface PolymarketUserActivity {\n proxyWallet?: string | null;\n timestamp?: number | null;\n conditionId?: string | null;\n type?: PolymarketActivityType | null;\n size?: number | null;\n usdcSize?: number | null;\n transactionHash?: string | null;\n price?: number | null;\n asset?: string | null;\n side?: \"BUY\" | \"SELL\" | null;\n outcomeIndex?: number | null;\n title?: string | null;\n slug?: string | null;\n icon?: string | null;\n eventSlug?: string | null;\n outcome?: string | null;\n name?: string | null;\n pseudonym?: string | null;\n bio?: string | null;\n profileImage?: string | null;\n profileImageOptimized?: string | null;\n}\n\nexport interface PolymarketPositionValue {\n user?: string | null;\n value?: number | null;\n}\n\nexport interface PolymarketPublicProfileUser {\n id?: string | null;\n creator?: boolean;\n mod?: boolean;\n}\n\nexport interface PolymarketPublicProfile {\n createdAt?: string | null;\n proxyWallet?: string | null;\n profileImage?: string | null;\n displayUsernamePublic?: boolean | null;\n bio?: string | null;\n pseudonym?: string | null;\n name?: string | null;\n users?: PolymarketPublicProfileUser[] | null;\n xUsername?: string | null;\n verifiedBadge?: boolean | null;\n}\n\ninterface PolymarketUserQueryBase {\n user: string;\n environment?: PolymarketEnvironment;\n market?: CsvStringInput;\n eventId?: CsvNumberInput;\n}\n\nexport interface PolymarketUserPositionParams extends PolymarketUserQueryBase {\n sizeThreshold?: number;\n redeemable?: boolean;\n mergeable?: boolean;\n limit?: number;\n offset?: number;\n sortBy?:\n | \"CURRENT\"\n | \"INITIAL\"\n | \"TOKENS\"\n | \"CASHPNL\"\n | \"PERCENTPNL\"\n | \"TITLE\"\n | \"RESOLVING\"\n | \"PRICE\"\n | \"AVGPRICE\";\n sortDirection?: \"ASC\" | \"DESC\";\n title?: string;\n}\n\nexport interface PolymarketClosedPositionParams extends PolymarketUserQueryBase {\n limit?: number;\n offset?: number;\n sortBy?: \"REALIZEDPNL\" | \"TITLE\" | \"PRICE\" | \"AVGPRICE\" | \"TIMESTAMP\";\n sortDirection?: \"ASC\" | \"DESC\";\n title?: string;\n}\n\nexport interface PolymarketUserActivityParams extends PolymarketUserQueryBase {\n limit?: number;\n offset?: number;\n type?: PolymarketActivityType | PolymarketActivityType[];\n start?: number;\n end?: number;\n sortBy?: \"TIMESTAMP\" | \"TOKENS\" | \"CASH\";\n sortDirection?: \"ASC\" | \"DESC\";\n side?: \"BUY\" | \"SELL\";\n}\n\nexport interface PolymarketPositionValueParams {\n user: string;\n environment?: PolymarketEnvironment;\n market?: CsvStringInput;\n}\n\nconst DEFAULT_EVENT_LIMIT = 50;\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nfunction getString(value: unknown): string | null {\n if (value == null) return null;\n const str = String(value).trim();\n return str.length ? str : null;\n}\n\nfunction getNumber(value: unknown): number | null {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : null;\n}\n\nfunction getInteger(value: unknown): number | null {\n const numeric = getNumber(value);\n return numeric == null ? null : Math.trunc(numeric);\n}\n\nfunction getBoolean(value: unknown): boolean | null {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n }\n return null;\n}\n\nfunction normalizeCsvStringInput(value: CsvStringInput | undefined): string[] {\n if (Array.isArray(value)) {\n return value\n .flatMap((entry) => String(entry).split(\",\"))\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (typeof value === \"string\") {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n return [];\n}\n\nfunction normalizeCsvNumberInput(value: CsvNumberInput | undefined): number[] {\n if (Array.isArray(value)) {\n return value.filter((entry) => Number.isFinite(entry));\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return [value];\n }\n return [];\n}\n\nfunction appendCsvParam(url: URL, key: string, values: string[]) {\n if (values.length > 0) {\n url.searchParams.set(key, values.join(\",\"));\n }\n}\n\nfunction appendNumberParam(url: URL, key: string, value: number | undefined) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n url.searchParams.set(key, String(value));\n }\n}\n\nfunction appendBooleanParam(url: URL, key: string, value: boolean | undefined) {\n if (typeof value === \"boolean\") {\n url.searchParams.set(key, value ? \"true\" : \"false\");\n }\n}\n\nfunction assertMutuallyExclusiveMarketScope(market: string[], eventIds: number[]) {\n if (market.length > 0 && eventIds.length > 0) {\n throw new Error(\"market and eventId are mutually exclusive.\");\n }\n}\n\nfunction normalizeOrderbookLevels(raw: unknown): PolymarketOrderbookLevel[] {\n if (!Array.isArray(raw)) return [];\n return raw\n .map((entry) => {\n if (Array.isArray(entry)) {\n const [price, size] = entry;\n const p = Number(price);\n const s = Number(size);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n if (entry && typeof entry === \"object\") {\n const record = entry as Record<string, unknown>;\n const p = Number(record.price ?? record.p);\n const s = Number(record.size ?? record.s ?? record.quantity);\n if (!Number.isFinite(p) || !Number.isFinite(s)) return null;\n return { price: p, size: s };\n }\n return null;\n })\n .filter((entry): entry is PolymarketOrderbookLevel => Boolean(entry));\n}\n\nfunction normalizeGammaMarket(market: GammaMarket, event?: GammaEvent): PolymarketMarket {\n const eventTags = normalizeTags(event?.tags);\n const marketTags = normalizeTags(market.tags);\n const mergedTags = Array.from(new Set([...marketTags, ...eventTags]));\n\n const category =\n getString(market.category) ?? getString(event?.category) ?? getString(event?.title) ?? null;\n\n const normalized: PolymarketMarket = {\n id: getString(market.id) ?? \"\",\n slug: getString(market.slug),\n question: getString(market.question),\n description: getString(market.description),\n eventId: getString(market.eventId ?? event?.id),\n eventSlug: getString(event?.slug),\n conditionId: getString(market.conditionId),\n marketMakerAddress: getString(market.marketMakerAddress),\n category,\n startDate:\n parseOptionalDate(market.startDate) ??\n parseOptionalDate(event?.startDate) ??\n parseOptionalDate(event?.eventStartTime),\n endDate:\n parseOptionalDate(market.endDate) ??\n parseOptionalDate(event?.endDate) ??\n parseOptionalDate(event?.eventEndTime),\n createdAt:\n parseOptionalDate(market.createdAt) ??\n parseOptionalDate(event?.createdAt) ??\n parseOptionalDate(event?.creationDate),\n updatedAt: parseOptionalDate(market.updatedAt) ?? parseOptionalDate(event?.updatedAt),\n closedTime: parseOptionalDate(market.closedTime) ?? parseOptionalDate(event?.closedTime),\n volume: getString(market.volume),\n liquidity: getString(market.liquidity),\n openInterest: getString(market.openInterest),\n outcomes: normalizeStringArrayish(market.outcomes),\n outcomePrices: normalizeNumberArrayish(market.outcomePrices),\n clobTokenIds: normalizeStringArrayish(market.clobTokenIds),\n icon: getString(market.icon),\n image: getString(market.image),\n };\n\n if (mergedTags.length) {\n normalized.tags = mergedTags;\n }\n if (typeof market.active === \"boolean\") {\n normalized.active = market.active;\n }\n if (typeof market.closed === \"boolean\") {\n normalized.closed = market.closed;\n }\n if (typeof market.resolved === \"boolean\") {\n normalized.resolved = market.resolved;\n }\n\n return normalized;\n}\n\nfunction normalizeUserPosition(raw: unknown): PolymarketUserPosition {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n const normalized: PolymarketUserPosition = {\n proxyWallet: getString(record.proxyWallet),\n asset: getString(record.asset),\n conditionId: getString(record.conditionId),\n size: getNumber(record.size),\n avgPrice: getNumber(record.avgPrice),\n initialValue: getNumber(record.initialValue),\n currentValue: getNumber(record.currentValue),\n cashPnl: getNumber(record.cashPnl),\n percentPnl: getNumber(record.percentPnl),\n totalBought: getNumber(record.totalBought),\n realizedPnl: getNumber(record.realizedPnl),\n percentRealizedPnl: getNumber(record.percentRealizedPnl),\n curPrice: getNumber(record.curPrice),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n outcomeIndex: getInteger(record.outcomeIndex),\n oppositeOutcome: getString(record.oppositeOutcome),\n oppositeAsset: getString(record.oppositeAsset),\n endDate: parseOptionalDate(record.endDate),\n };\n const redeemable = getBoolean(record.redeemable);\n if (redeemable != null) normalized.redeemable = redeemable;\n const mergeable = getBoolean(record.mergeable);\n if (mergeable != null) normalized.mergeable = mergeable;\n const negativeRisk = getBoolean(record.negativeRisk);\n if (negativeRisk != null) normalized.negativeRisk = negativeRisk;\n return normalized;\n}\n\nfunction normalizeClosedPosition(raw: unknown): PolymarketClosedPosition {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n proxyWallet: getString(record.proxyWallet),\n asset: getString(record.asset),\n conditionId: getString(record.conditionId),\n avgPrice: getNumber(record.avgPrice),\n totalBought: getNumber(record.totalBought),\n realizedPnl: getNumber(record.realizedPnl),\n curPrice: getNumber(record.curPrice),\n timestamp: getInteger(record.timestamp),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n outcomeIndex: getInteger(record.outcomeIndex),\n oppositeOutcome: getString(record.oppositeOutcome),\n oppositeAsset: getString(record.oppositeAsset),\n endDate: parseOptionalDate(record.endDate),\n };\n}\n\nfunction normalizeUserActivity(raw: unknown): PolymarketUserActivity {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n proxyWallet: getString(record.proxyWallet),\n timestamp: getInteger(record.timestamp),\n conditionId: getString(record.conditionId),\n type: getString(record.type) as PolymarketActivityType | null,\n size: getNumber(record.size),\n usdcSize: getNumber(record.usdcSize),\n transactionHash: getString(record.transactionHash),\n price: getNumber(record.price),\n asset: getString(record.asset),\n side: getString(record.side) as \"BUY\" | \"SELL\" | null,\n outcomeIndex: getInteger(record.outcomeIndex),\n title: getString(record.title),\n slug: getString(record.slug),\n icon: getString(record.icon),\n eventSlug: getString(record.eventSlug),\n outcome: getString(record.outcome),\n name: getString(record.name),\n pseudonym: getString(record.pseudonym),\n bio: getString(record.bio),\n profileImage: getString(record.profileImage),\n profileImageOptimized: getString(record.profileImageOptimized),\n };\n}\n\nfunction normalizePositionValue(raw: unknown): PolymarketPositionValue {\n const record = raw && typeof raw === \"object\" ? (raw as Record<string, unknown>) : {};\n return {\n user: getString(record.user),\n value: getNumber(record.value),\n };\n}\n\nfunction normalizeProfileUsers(raw: unknown): PolymarketPublicProfileUser[] | null {\n if (!Array.isArray(raw)) return null;\n return raw.map((entry) => {\n const record = entry && typeof entry === \"object\" ? (entry as Record<string, unknown>) : {};\n const normalized: PolymarketPublicProfileUser = {\n id: getString(record.id),\n };\n const creator = getBoolean(record.creator);\n if (creator != null) normalized.creator = creator;\n const mod = getBoolean(record.mod);\n if (mod != null) normalized.mod = mod;\n return normalized;\n });\n}\n\nfunction normalizePublicProfile(raw: unknown): PolymarketPublicProfile | null {\n if (!raw || typeof raw !== \"object\") return null;\n const record = raw as Record<string, unknown>;\n const normalized: PolymarketPublicProfile = {\n createdAt: parseOptionalDate(record.createdAt),\n proxyWallet: getString(record.proxyWallet),\n profileImage: getString(record.profileImage),\n bio: getString(record.bio),\n pseudonym: getString(record.pseudonym),\n name: getString(record.name),\n users: normalizeProfileUsers(record.users),\n xUsername: getString(record.xUsername),\n };\n const displayUsernamePublic = getBoolean(record.displayUsernamePublic);\n if (displayUsernamePublic != null) {\n normalized.displayUsernamePublic = displayUsernamePublic;\n }\n const verifiedBadge = getBoolean(record.verifiedBadge);\n if (verifiedBadge != null) {\n normalized.verifiedBadge = verifiedBadge;\n }\n return normalized;\n}\n\nexport class PolymarketInfoClient {\n private readonly environment: PolymarketEnvironment;\n\n constructor(environment: PolymarketEnvironment = \"mainnet\") {\n this.environment = environment;\n }\n\n markets(params: FetchParams = {}) {\n return fetchPolymarketMarkets({ ...params, environment: this.environment });\n }\n\n market(params: { id?: string; slug?: string; conditionId?: string }) {\n return fetchPolymarketMarket({ ...params, environment: this.environment });\n }\n\n orderbook(tokenId: string) {\n return fetchPolymarketOrderbook({ tokenId, environment: this.environment });\n }\n\n price(tokenId: string, side: \"BUY\" | \"SELL\") {\n return fetchPolymarketPrice({ tokenId, side, environment: this.environment });\n }\n\n midpoint(tokenId: string) {\n return fetchPolymarketMidpoint({ tokenId, environment: this.environment });\n }\n\n priceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n }) {\n return fetchPolymarketPriceHistory({ ...params, environment: this.environment });\n }\n\n positions(params: Omit<PolymarketUserPositionParams, \"environment\">) {\n return fetchPolymarketPositions({ ...params, environment: this.environment });\n }\n\n closedPositions(params: Omit<PolymarketClosedPositionParams, \"environment\">) {\n return fetchPolymarketClosedPositions({ ...params, environment: this.environment });\n }\n\n activity(params: Omit<PolymarketUserActivityParams, \"environment\">) {\n return fetchPolymarketActivity({ ...params, environment: this.environment });\n }\n\n positionValue(params: Omit<PolymarketPositionValueParams, \"environment\">) {\n return fetchPolymarketPositionValue({ ...params, environment: this.environment });\n }\n\n publicProfile(address: string) {\n return fetchPolymarketPublicProfile({ address, environment: this.environment });\n }\n}\n\nexport async function fetchPolymarketMarkets(\n params: FetchParams = {},\n): Promise<PolymarketMarket[]> {\n if (params.active !== undefined && params.active !== true) {\n throw new Error(\"Polymarket market list requires active=true.\");\n }\n if (params.closed !== undefined && params.closed !== false) {\n throw new Error(\"Polymarket market list requires closed=false.\");\n }\n\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/events\", baseUrl);\n const limit = params.limit ?? DEFAULT_EVENT_LIMIT;\n const offset = params.offset ?? 0;\n\n url.searchParams.set(\"limit\", String(limit));\n url.searchParams.set(\"offset\", String(offset));\n url.searchParams.set(\"active\", \"true\");\n url.searchParams.set(\"closed\", \"false\");\n url.searchParams.set(\"order\", params.order ?? \"id\");\n url.searchParams.set(\"ascending\", params.ascending ? \"true\" : \"false\");\n\n if (params.tagId) url.searchParams.set(\"tag_id\", params.tagId);\n if (params.relatedTags) url.searchParams.set(\"related_tags\", \"true\");\n if (params.excludeTagId) url.searchParams.set(\"exclude_tag_id\", params.excludeTagId);\n if (params.slug) url.searchParams.set(\"slug\", params.slug);\n\n const data = (await requestJson(url.toString())) as GammaEvent[];\n const markets = data.flatMap((event) =>\n Array.isArray(event?.markets)\n ? (event.markets as GammaMarket[]).map((market) => normalizeGammaMarket(market, event))\n : [],\n );\n\n const filtered = params.category\n ? markets.filter((market) =>\n (market.category ?? \"\").toLowerCase().includes(params.category!.toLowerCase()),\n )\n : markets;\n\n return typeof params.limit === \"number\" ? filtered.slice(0, params.limit) : filtered;\n}\n\nexport async function fetchPolymarketMarket(params: {\n id?: string;\n slug?: string;\n conditionId?: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketMarket | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n\n if (params.slug) {\n const url = new URL(`/markets/slug/${params.slug}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.id) {\n const url = new URL(`/markets/${params.id}`, baseUrl);\n const data = (await requestJson(url.toString())) as GammaMarket | null;\n if (!data) return null;\n return normalizeGammaMarket(data);\n }\n\n if (params.conditionId) {\n const url = new URL(`/markets`, baseUrl);\n url.searchParams.set(\"condition_id\", params.conditionId);\n const data = (await requestJson(url.toString())) as GammaMarket[] | GammaMarket | null;\n if (!data) return null;\n const market = Array.isArray(data) ? data[0] : data;\n return market ? normalizeGammaMarket(market) : null;\n }\n\n throw new Error(\"id, slug, or conditionId is required.\");\n}\n\nexport async function fetchPolymarketOrderbook(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketOrderbook> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/book\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n\n return {\n market: params.tokenId,\n bids: normalizeOrderbookLevels(data.bids),\n asks: normalizeOrderbookLevels(data.asks),\n timestamp: getString(data.timestamp),\n };\n}\n\nexport async function fetchPolymarketPrice(params: {\n tokenId: string;\n side: \"BUY\" | \"SELL\";\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/price\", baseUrl);\n url.searchParams.set(\"token_id\", params.tokenId);\n url.searchParams.set(\"side\", params.side);\n const data = (await requestJson(url.toString())) as Record<string, unknown>;\n const price = Number(data.price ?? data?.p);\n return Number.isFinite(price) ? price : null;\n}\n\nexport async function fetchPolymarketMidpoint(params: {\n tokenId: string;\n environment?: PolymarketEnvironment;\n}): Promise<number | null> {\n const baseArgs = {\n tokenId: params.tokenId,\n ...(params.environment ? { environment: params.environment } : {}),\n };\n const buy = await fetchPolymarketPrice({ ...baseArgs, side: \"BUY\" });\n const sell = await fetchPolymarketPrice({ ...baseArgs, side: \"SELL\" });\n if (buy == null || sell == null) return null;\n return (buy + sell) / 2;\n}\n\nexport async function fetchPolymarketPriceHistory(params: {\n tokenId: string;\n startTs?: number;\n endTs?: number;\n interval?: string;\n fidelity?: number;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPriceHistoryPoint[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"clob\", environment);\n const url = new URL(\"/prices-history\", baseUrl);\n url.searchParams.set(\"market\", params.tokenId);\n if (params.startTs) url.searchParams.set(\"startTs\", params.startTs.toString());\n if (params.endTs) url.searchParams.set(\"endTs\", params.endTs.toString());\n if (params.interval) url.searchParams.set(\"interval\", params.interval);\n if (params.fidelity) url.searchParams.set(\"fidelity\", params.fidelity.toString());\n\n const data = (await requestJson(url.toString())) as\n | { history?: Array<{ t: number; p: number }> }\n | Array<{ t: number; p: number }>;\n\n const points = Array.isArray(data) ? data : (data?.history ?? []);\n return points\n .map((point) => ({\n t: Number(point.t),\n p: Number(point.p),\n }))\n .filter((point) => Number.isFinite(point.t) && Number.isFinite(point.p));\n}\n\nexport async function fetchPolymarketPositions(\n params: PolymarketUserPositionParams,\n): Promise<PolymarketUserPosition[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/positions\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendNumberParam(url, \"sizeThreshold\", params.sizeThreshold);\n appendBooleanParam(url, \"redeemable\", params.redeemable);\n appendBooleanParam(url, \"mergeable\", params.mergeable);\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.title) url.searchParams.set(\"title\", params.title);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeUserPosition(entry)) : [];\n}\n\nexport async function fetchPolymarketClosedPositions(\n params: PolymarketClosedPositionParams,\n): Promise<PolymarketClosedPosition[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/closed-positions\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.title) url.searchParams.set(\"title\", params.title);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeClosedPosition(entry)) : [];\n}\n\nexport async function fetchPolymarketActivity(\n params: PolymarketUserActivityParams,\n): Promise<PolymarketUserActivity[]> {\n const environment = params.environment ?? \"mainnet\";\n const market = normalizeCsvStringInput(params.market);\n const eventIds = normalizeCsvNumberInput(params.eventId);\n assertMutuallyExclusiveMarketScope(market, eventIds);\n\n const types = Array.isArray(params.type) ? params.type : params.type ? [params.type] : [];\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/activity\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", market);\n appendCsvParam(\n url,\n \"eventId\",\n eventIds.map((entry) => String(entry)),\n );\n appendCsvParam(url, \"type\", types);\n appendNumberParam(url, \"start\", params.start);\n appendNumberParam(url, \"end\", params.end);\n appendNumberParam(url, \"limit\", params.limit);\n appendNumberParam(url, \"offset\", params.offset);\n if (params.sortBy) url.searchParams.set(\"sortBy\", params.sortBy);\n if (params.sortDirection) url.searchParams.set(\"sortDirection\", params.sortDirection);\n if (params.side) url.searchParams.set(\"side\", params.side);\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizeUserActivity(entry)) : [];\n}\n\nexport async function fetchPolymarketPositionValue(\n params: PolymarketPositionValueParams,\n): Promise<PolymarketPositionValue[]> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"data\", environment);\n const url = new URL(\"/value\", baseUrl);\n url.searchParams.set(\"user\", params.user);\n appendCsvParam(url, \"market\", normalizeCsvStringInput(params.market));\n\n const data = (await requestJson(url.toString())) as unknown[];\n return Array.isArray(data) ? data.map((entry) => normalizePositionValue(entry)) : [];\n}\n\nexport async function fetchPolymarketPublicProfile(params: {\n address: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketPublicProfile | null> {\n const environment = params.environment ?? \"mainnet\";\n const baseUrl = resolvePolymarketBaseUrl(\"gamma\", environment);\n const url = new URL(\"/public-profile\", baseUrl);\n url.searchParams.set(\"address\", params.address);\n const data = await requestJson(url.toString());\n return normalizePublicProfile(data);\n}\n","import {\n decodeFunctionData,\n encodeFunctionData,\n erc20Abi,\n maxUint256,\n type PublicClient,\n} from \"viem\";\n\nimport { PolymarketApiError, PolymarketEnvironment, POLYMARKET_EXCHANGE_ADDRESSES } from \"./base\";\n\nexport interface PolymarketBootstrapContracts {\n usdc: `0x${string}`;\n ctf: `0x${string}`;\n negRiskAdapter: `0x${string}`;\n safeFactory: `0x${string}`;\n safeMultisend: `0x${string}`;\n relayerUrl: string;\n bridgeUrl: string;\n}\n\nexport interface PolymarketBootstrapTransaction {\n to: `0x${string}`;\n data: `0x${string}`;\n value: string;\n description: string;\n}\n\nexport interface PolymarketDepositAddressSet {\n evm?: string | null;\n svm?: string | null;\n btc?: string | null;\n sol?: string | null;\n [key: string]: unknown;\n}\n\nexport interface PolymarketDepositAddressesResponse {\n address?: PolymarketDepositAddressSet | null;\n note?: string | null;\n [key: string]: unknown;\n}\n\nexport interface PolymarketApprovalState {\n funder: `0x${string}`;\n usdcAllowance: bigint;\n usdcApproved: boolean;\n ctfExchangeApproved: boolean;\n negRiskExchangeApproved: boolean;\n approvalsReady: boolean;\n}\n\nconst POLYMARKET_SET_APPROVAL_FOR_ALL_ABI = [\n {\n inputs: [\n { name: \"operator\", type: \"address\" },\n { name: \"approved\", type: \"bool\" },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"account\", type: \"address\" },\n { name: \"operator\", type: \"address\" },\n ],\n name: \"isApprovedForAll\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nconst POLYMARKET_BOOTSTRAP_CONTRACTS_BY_ENV: Partial<\n Record<PolymarketEnvironment, PolymarketBootstrapContracts>\n> = {\n mainnet: {\n usdc: \"0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174\",\n ctf: \"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045\",\n negRiskAdapter: \"0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296\",\n safeFactory: \"0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b\",\n safeMultisend: \"0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761\",\n relayerUrl: \"https://relayer-v2.polymarket.com\",\n bridgeUrl: \"https://bridge.polymarket.com\",\n },\n};\n\nasync function requestJson(url: string, init?: RequestInit) {\n const response = await fetch(url, init);\n const text = await response.text().catch(() => \"\");\n let data: unknown = null;\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n if (!response.ok) {\n throw new PolymarketApiError(\n `Polymarket request failed (${response.status}).`,\n data ?? { status: response.status },\n );\n }\n return data;\n}\n\nexport function resolvePolymarketBootstrapContracts(\n environment: PolymarketEnvironment,\n): PolymarketBootstrapContracts {\n const contracts = POLYMARKET_BOOTSTRAP_CONTRACTS_BY_ENV[environment];\n if (!contracts) {\n throw new Error(\n `Polymarket bootstrap contracts are not configured for ${environment}.`,\n );\n }\n return contracts;\n}\n\nexport function buildPolymarketUsdcApprovalTransaction(args?: {\n environment?: PolymarketEnvironment;\n amount?: bigint;\n}): PolymarketBootstrapTransaction {\n const environment = args?.environment ?? \"mainnet\";\n const contracts = resolvePolymarketBootstrapContracts(environment);\n return {\n to: contracts.usdc,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [contracts.ctf, args?.amount ?? maxUint256],\n }),\n value: \"0\",\n description: \"Approve USDC.e for CTF\",\n };\n}\n\nexport function buildPolymarketOutcomeTokenApprovalTransactions(args?: {\n environment?: PolymarketEnvironment;\n includeNegRisk?: boolean;\n}): PolymarketBootstrapTransaction[] {\n const environment = args?.environment ?? \"mainnet\";\n const includeNegRisk = args?.includeNegRisk ?? true;\n const contracts = resolvePolymarketBootstrapContracts(environment);\n\n const transactions: PolymarketBootstrapTransaction[] = [\n {\n to: contracts.ctf,\n data: encodeFunctionData({\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"setApprovalForAll\",\n args: [POLYMARKET_EXCHANGE_ADDRESSES[environment].ctf, true],\n }),\n value: \"0\",\n description: \"Approve outcome tokens for CTF Exchange\",\n },\n ];\n\n if (includeNegRisk) {\n transactions.push({\n to: contracts.ctf,\n data: encodeFunctionData({\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"setApprovalForAll\",\n args: [POLYMARKET_EXCHANGE_ADDRESSES[environment].negRisk, true],\n }),\n value: \"0\",\n description: \"Approve outcome tokens for Neg Risk Exchange\",\n });\n }\n\n return transactions;\n}\n\nexport function buildPolymarketApprovalTransactions(args?: {\n environment?: PolymarketEnvironment;\n amount?: bigint;\n includeNegRisk?: boolean;\n}): PolymarketBootstrapTransaction[] {\n return [\n buildPolymarketUsdcApprovalTransaction(args),\n ...buildPolymarketOutcomeTokenApprovalTransactions(args),\n ];\n}\n\nexport async function fetchPolymarketApprovalState(args: {\n publicClient: Pick<PublicClient, \"readContract\">;\n funder: `0x${string}`;\n environment?: PolymarketEnvironment;\n includeNegRisk?: boolean;\n}): Promise<PolymarketApprovalState> {\n const environment = args.environment ?? \"mainnet\";\n const includeNegRisk = args.includeNegRisk ?? true;\n const contracts = resolvePolymarketBootstrapContracts(environment);\n const ctfExchange = POLYMARKET_EXCHANGE_ADDRESSES[environment].ctf;\n const negRiskExchange = POLYMARKET_EXCHANGE_ADDRESSES[environment].negRisk;\n\n const [allowance, ctfExchangeApproved, negRiskExchangeApproved] = await Promise.all([\n args.publicClient.readContract({\n address: contracts.usdc,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [args.funder, contracts.ctf],\n }) as Promise<bigint>,\n args.publicClient.readContract({\n address: contracts.ctf,\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"isApprovedForAll\",\n args: [args.funder, ctfExchange],\n }) as Promise<boolean>,\n includeNegRisk\n ? (args.publicClient.readContract({\n address: contracts.ctf,\n abi: POLYMARKET_SET_APPROVAL_FOR_ALL_ABI,\n functionName: \"isApprovedForAll\",\n args: [args.funder, negRiskExchange],\n }) as Promise<boolean>)\n : Promise.resolve(true),\n ]);\n\n return {\n funder: args.funder,\n usdcAllowance: allowance,\n usdcApproved: allowance > 0n,\n ctfExchangeApproved,\n negRiskExchangeApproved,\n approvalsReady: allowance > 0n && ctfExchangeApproved && negRiskExchangeApproved,\n };\n}\n\nexport async function fetchPolymarketDepositAddresses(args: {\n address: string;\n environment?: PolymarketEnvironment;\n}): Promise<PolymarketDepositAddressesResponse> {\n const environment = args.environment ?? \"mainnet\";\n const contracts = resolvePolymarketBootstrapContracts(environment);\n return (await requestJson(`${contracts.bridgeUrl}/deposit`, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n address: args.address,\n }),\n })) as PolymarketDepositAddressesResponse;\n}\n\nexport function decodePolymarketBootstrapTransaction(\n transaction: PolymarketBootstrapTransaction,\n): {\n to: `0x${string}`;\n functionName: string;\n args: readonly unknown[];\n} {\n const abi =\n transaction.to.toLowerCase() ===\n resolvePolymarketBootstrapContracts(\"mainnet\").usdc.toLowerCase()\n ? erc20Abi\n : POLYMARKET_SET_APPROVAL_FOR_ALL_ABI;\n const decoded = decodeFunctionData({\n abi,\n data: transaction.data,\n });\n return {\n to: transaction.to,\n functionName: decoded.functionName,\n args: decoded.args ?? [],\n };\n}\n","const DEFAULT_OPENPOND_GATEWAY_URL = \"https://gateway.openpond.dev\";\n\nexport type NewsEventState =\n | \"monitoring\"\n | \"escalation\"\n | \"de_escalation\"\n | \"resolved\"\n | \"contradiction\";\n\nexport type NewsSignalValue =\n | \"none\"\n | \"escalation\"\n | \"de_escalation\"\n | \"resolved\"\n | \"contradiction\";\n\nexport type NewsPropositionAnswer = \"yes\" | \"no\" | \"unclear\";\nexport type NewsPropositionStatus = NewsPropositionAnswer | \"no_matching_event\";\nexport type NewsContinuationAction = \"continue\" | \"skip\" | \"pause\";\n\nexport type NewsPredictionMarketMatchedMarket = {\n marketId: string;\n eventId?: string | null;\n eventSlug?: string | null;\n eventTitle?: string | null;\n conditionId?: string | null;\n title: string;\n slug?: string | null;\n category?: string | null;\n yesProbability?: number | null;\n noProbability?: number | null;\n leadingOutcome?: string | null;\n leadingProbability?: number | null;\n volume?: number | null;\n liquidity?: number | null;\n openInterest?: number | null;\n probabilityDelta1h?: number | null;\n probabilityDelta24h?: number | null;\n fetchedAt: string;\n};\n\nexport type NewsPredictionMarketContext = {\n matchedMarkets: NewsPredictionMarketMatchedMarket[];\n consensusProbability?: number | null;\n probabilityDelta1h?: number | null;\n probabilityDelta24h?: number | null;\n liquidityWeightedScore?: number | null;\n predictionDisagreementScore?: number | null;\n dataAgeMs?: number | null;\n} | null;\n\nexport type NewsSignalEvidence = {\n articleId: string;\n sourceId: string;\n sourceName: string;\n title: string;\n canonicalUrl: string;\n claimType: string;\n claimPolarity: string;\n evidenceConfidence: number;\n evidenceAt: string;\n summary?: string | null;\n contentPreview?: string | null;\n};\n\nexport type NewsSignalConfidenceBreakdown = {\n baseScore: number;\n winningBucketScore: number;\n opposingPenalty: number;\n contradictionPenalty: number;\n stateBonus: number;\n finalScore: number;\n};\n\nexport type NewsEventSignalPolicy = {\n minConfidence: number;\n minIndependentSources: number;\n minTierASources: number;\n cooldownMinutes: number;\n allowedSourceIds?: string[];\n};\n\nexport type NewsEventSignal = {\n eventId: string;\n eventKey: string;\n title: string | null;\n eventState: NewsEventState;\n eventConfidence: number;\n confidenceBreakdown: NewsSignalConfidenceBreakdown;\n signal: NewsSignalValue;\n triggerPassed: boolean;\n policyRisk: \"low\" | \"medium\" | \"high\";\n effectivePolicy: NewsEventSignalPolicy;\n whyNotTriggered: string | null;\n warnings: string[];\n contradictionCount: number;\n supportingSourceCount: number;\n tierASourceCount: number;\n rebuttingSourceSummary: Array<{\n sourceId: string;\n sourceName: string;\n title: string;\n }>;\n evidence: NewsSignalEvidence[];\n dataAgeMs: number | null;\n predictionMarketContext: NewsPredictionMarketContext;\n};\n\nexport type NewsPropositionSignal = {\n question: string;\n query: string | null;\n propositionType: string | null;\n propositionStatus: NewsPropositionStatus;\n answer: NewsPropositionAnswer;\n propositionConfidence: number;\n reasoning: string;\n evidenceWindowSummary: string;\n resolvedEventId: string | null;\n resolvedEventKey: string | null;\n resolvedEventTitle: string | null;\n eventState: NewsEventState | null;\n eventConfidence: number | null;\n confidenceBreakdown: NewsSignalConfidenceBreakdown | null;\n supportingEvidence: NewsSignalEvidence[];\n rebuttingEvidence: NewsSignalEvidence[];\n supportingEvidenceArticleIds: string[];\n rebuttingEvidenceArticleIds: string[];\n operatorReviewRecommended: boolean;\n dataAgeMs: number | null;\n predictionMarketContext: NewsPredictionMarketContext;\n};\n\nexport type NewsEventSignalRequest = {\n gatewayBase?: string | null;\n fetchImplementation?: typeof fetch;\n query?: string;\n eventKey?: string;\n asOf?: string | Date | null;\n includePredictionMarkets?: boolean;\n ingestOnRequest?: boolean;\n maxAgeHours?: number;\n minConfidence?: number;\n minIndependentSources?: number;\n minTierASources?: number;\n};\n\nexport type NewsPropositionSignalRequest = {\n gatewayBase?: string | null;\n fetchImplementation?: typeof fetch;\n question: string;\n query?: string;\n eventKey?: string;\n propositionType?: string;\n asOf?: string | Date | null;\n includePredictionMarkets?: boolean;\n ingestOnRequest?: boolean;\n maxAgeHours?: number;\n candidateLimit?: number;\n};\n\nexport type NewsSignalClientConfig = {\n gatewayBase?: string | null;\n fetchImplementation?: typeof fetch;\n};\n\nexport type NewsEventContinuationGate = {\n mode: \"event\";\n minConfidence?: number;\n maxDataAgeMs?: number;\n minIndependentSources?: number;\n minTierASources?: number;\n requireTriggerPassed?: boolean;\n onBlocked?: Exclude<NewsContinuationAction, \"continue\">;\n};\n\nexport type NewsPropositionContinuationGate = {\n mode: \"proposition\";\n expectedAnswer?: NewsPropositionAnswer;\n minConfidence?: number;\n maxDataAgeMs?: number;\n requireResolvedEvent?: boolean;\n onBlocked?: Exclude<NewsContinuationAction, \"continue\">;\n};\n\nexport type NewsContinuationGate = NewsEventContinuationGate | NewsPropositionContinuationGate;\n\nexport type NewsContinuationGateResult = {\n allowed: boolean;\n action: NewsContinuationAction;\n reason: string;\n matchedRule: NewsContinuationGate[\"mode\"];\n blockingFactors: string[];\n};\n\nfunction resolveFetchImplementation(override?: typeof fetch): typeof fetch {\n const fetchImplementation = override ?? globalThis.fetch;\n if (!fetchImplementation) {\n throw new Error(\n \"No fetch implementation available. Provide one via NewsSignalClientConfig.fetchImplementation.\",\n );\n }\n return fetchImplementation;\n}\n\nexport function resolveNewsGatewayBase(override?: string | null): string {\n const value = override ?? process.env.OPENPOND_GATEWAY_URL ?? DEFAULT_OPENPOND_GATEWAY_URL;\n if (typeof value !== \"string\") {\n throw new Error(\"OPENPOND_GATEWAY_URL is required.\");\n }\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"OPENPOND_GATEWAY_URL is required.\");\n }\n return trimmed.replace(/\\/$/, \"\");\n}\n\nfunction normalizeAsOf(value?: string | Date | null): string | undefined {\n if (value == null) return undefined;\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) {\n throw new Error(\"asOf must be a valid ISO-8601 datetime or Date.\");\n }\n return date.toISOString();\n}\n\nasync function postGatewayJson<T>(params: {\n path: string;\n body: Record<string, unknown>;\n gatewayBase?: string | null | undefined;\n fetchImplementation?: typeof fetch | undefined;\n}): Promise<T> {\n const gatewayBase = resolveNewsGatewayBase(params.gatewayBase);\n const fetchImplementation = resolveFetchImplementation(params.fetchImplementation);\n const response = await fetchImplementation(`${gatewayBase}${params.path}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(params.body),\n });\n const text = await response.text().catch(() => \"\");\n let payload: unknown = null;\n try {\n payload = text ? (JSON.parse(text) as unknown) : null;\n } catch {\n payload = text;\n }\n if (!response.ok) {\n throw new Error(\n `Gateway request failed (${response.status}) for ${params.path}: ${\n typeof payload === \"string\" && payload ? payload : \"no_body\"\n }`,\n );\n }\n return payload as T;\n}\n\nexport async function fetchNewsEventSignal(\n params: NewsEventSignalRequest,\n): Promise<NewsEventSignal> {\n if (!params.query?.trim() && !params.eventKey?.trim()) {\n throw new Error(\"query or eventKey is required.\");\n }\n\n return postGatewayJson<NewsEventSignal>({\n path: \"/v1/news/event-signal\",\n gatewayBase: params.gatewayBase,\n fetchImplementation: params.fetchImplementation,\n body: {\n ...(params.query?.trim() ? { query: params.query.trim() } : {}),\n ...(params.eventKey?.trim() ? { eventKey: params.eventKey.trim() } : {}),\n ...(normalizeAsOf(params.asOf) ? { asOf: normalizeAsOf(params.asOf) } : {}),\n ...(typeof params.includePredictionMarkets === \"boolean\"\n ? { includePredictionMarkets: params.includePredictionMarkets }\n : {}),\n ...(typeof params.ingestOnRequest === \"boolean\"\n ? { ingestOnRequest: params.ingestOnRequest }\n : {}),\n ...(typeof params.maxAgeHours === \"number\" ? { maxAgeHours: params.maxAgeHours } : {}),\n policy: {\n ...(typeof params.minConfidence === \"number\"\n ? { minConfidence: params.minConfidence }\n : {}),\n ...(typeof params.minIndependentSources === \"number\"\n ? { minIndependentSources: params.minIndependentSources }\n : {}),\n ...(typeof params.minTierASources === \"number\"\n ? { minTierASources: params.minTierASources }\n : {}),\n },\n },\n });\n}\n\nexport async function fetchNewsPropositionSignal(\n params: NewsPropositionSignalRequest,\n): Promise<NewsPropositionSignal> {\n const question = params.question.trim();\n if (!question) {\n throw new Error(\"question is required.\");\n }\n\n return postGatewayJson<NewsPropositionSignal>({\n path: \"/v1/news/event-proposition-signal\",\n gatewayBase: params.gatewayBase,\n fetchImplementation: params.fetchImplementation,\n body: {\n question,\n ...(params.query?.trim() ? { query: params.query.trim() } : {}),\n ...(params.eventKey?.trim() ? { eventKey: params.eventKey.trim() } : {}),\n ...(params.propositionType?.trim() ? { propositionType: params.propositionType.trim() } : {}),\n ...(normalizeAsOf(params.asOf) ? { asOf: normalizeAsOf(params.asOf) } : {}),\n ...(typeof params.includePredictionMarkets === \"boolean\"\n ? { includePredictionMarkets: params.includePredictionMarkets }\n : {}),\n ...(typeof params.ingestOnRequest === \"boolean\"\n ? { ingestOnRequest: params.ingestOnRequest }\n : {}),\n ...(typeof params.maxAgeHours === \"number\" ? { maxAgeHours: params.maxAgeHours } : {}),\n ...(typeof params.candidateLimit === \"number\"\n ? { candidateLimit: params.candidateLimit }\n : {}),\n },\n });\n}\n\nexport function evaluateNewsContinuationGate(\n signal: NewsEventSignal | NewsPropositionSignal,\n gate: NewsContinuationGate,\n): NewsContinuationGateResult {\n const blockedAction = gate.onBlocked ?? \"skip\";\n const blockingFactors: string[] = [];\n\n if (gate.mode === \"event\") {\n const eventSignal = signal as NewsEventSignal;\n if (gate.requireTriggerPassed !== false && !eventSignal.triggerPassed) {\n blockingFactors.push(\"trigger_not_passed\");\n }\n if (\n typeof gate.minConfidence === \"number\" &&\n eventSignal.eventConfidence < gate.minConfidence\n ) {\n blockingFactors.push(\"confidence_below_threshold\");\n }\n if (\n typeof gate.maxDataAgeMs === \"number\" &&\n typeof eventSignal.dataAgeMs === \"number\" &&\n eventSignal.dataAgeMs > gate.maxDataAgeMs\n ) {\n blockingFactors.push(\"signal_too_stale\");\n }\n if (\n typeof gate.minIndependentSources === \"number\" &&\n eventSignal.supportingSourceCount < gate.minIndependentSources\n ) {\n blockingFactors.push(\"insufficient_supporting_sources\");\n }\n if (\n typeof gate.minTierASources === \"number\" &&\n eventSignal.tierASourceCount < gate.minTierASources\n ) {\n blockingFactors.push(\"insufficient_tier_a_sources\");\n }\n } else {\n const propositionSignal = signal as NewsPropositionSignal;\n if (\n gate.requireResolvedEvent !== false &&\n propositionSignal.propositionStatus === \"no_matching_event\"\n ) {\n blockingFactors.push(\"no_matching_event\");\n }\n if (gate.expectedAnswer && propositionSignal.answer !== gate.expectedAnswer) {\n blockingFactors.push(\"unexpected_answer\");\n }\n if (\n typeof gate.minConfidence === \"number\" &&\n propositionSignal.propositionConfidence < gate.minConfidence\n ) {\n blockingFactors.push(\"confidence_below_threshold\");\n }\n if (\n typeof gate.maxDataAgeMs === \"number\" &&\n typeof propositionSignal.dataAgeMs === \"number\" &&\n propositionSignal.dataAgeMs > gate.maxDataAgeMs\n ) {\n blockingFactors.push(\"signal_too_stale\");\n }\n }\n\n if (blockingFactors.length === 0) {\n return {\n allowed: true,\n action: \"continue\",\n reason: \"All continuation gate checks passed.\",\n matchedRule: gate.mode,\n blockingFactors: [],\n };\n }\n\n return {\n allowed: false,\n action: blockedAction,\n reason: `Blocked by continuation gate: ${blockingFactors.join(\", \")}.`,\n matchedRule: gate.mode,\n blockingFactors,\n };\n}\n\nexport class NewsSignalClient {\n private readonly gatewayBase: string;\n private readonly fetchImplementation: typeof fetch;\n\n constructor(config: NewsSignalClientConfig = {}) {\n this.gatewayBase = resolveNewsGatewayBase(config.gatewayBase);\n this.fetchImplementation = resolveFetchImplementation(config.fetchImplementation);\n }\n\n eventSignal(params: Omit<NewsEventSignalRequest, \"gatewayBase\" | \"fetchImplementation\">) {\n return fetchNewsEventSignal({\n ...params,\n gatewayBase: this.gatewayBase,\n fetchImplementation: this.fetchImplementation,\n });\n }\n\n propositionSignal(\n params: Omit<NewsPropositionSignalRequest, \"gatewayBase\" | \"fetchImplementation\">,\n ) {\n return fetchNewsPropositionSignal({\n ...params,\n gatewayBase: this.gatewayBase,\n fetchImplementation: this.fetchImplementation,\n });\n }\n}\n\nexport { DEFAULT_OPENPOND_GATEWAY_URL };\n","interface ErrorInit {\n cause?: unknown;\n}\n\nexport class AIError extends Error {\n constructor(message: string, options?: ErrorInit) {\n super(message);\n this.name = \"AIError\";\n if (options && \"cause\" in options) {\n (this as unknown as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\nexport interface ResponseErrorDetails {\n status: number;\n statusText: string;\n body?: unknown;\n headers?: Record<string, string>;\n}\n\nexport class AIFetchError extends AIError {\n constructor(message: string, options?: ErrorInit) {\n super(message, options);\n this.name = \"AIFetchError\";\n }\n}\n\nexport class AIResponseError extends AIError {\n readonly status: number;\n readonly statusText: string;\n readonly body?: unknown;\n readonly headers: Record<string, string>;\n\n constructor(details: ResponseErrorDetails, message?: string) {\n super(message ?? `AI response error: ${details.status} ${details.statusText}`);\n this.name = \"AIResponseError\";\n this.status = details.status;\n this.statusText = details.statusText;\n this.body = details.body;\n this.headers = details.headers ?? {};\n }\n}\n\nexport class AIAbortError extends AIError {\n constructor(message = \"AI request aborted\") {\n super(message);\n this.name = \"AIAbortError\";\n }\n}\n","import { AIClientConfig, ResolvedAIClientConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://gateway.openpond.dev\";\nexport const DEFAULT_TIMEOUT_MS = 60_000;\nexport const DEFAULT_MODEL = \"fireworks:accounts/fireworks/models/glm-4p7\";\n\nfunction assertFetchAvailable(fetchImplementation?: typeof fetch): asserts fetchImplementation {\n if (!fetchImplementation) {\n throw new Error(\n \"No fetch implementation available. Provide one via AIClientConfig.fetchImplementation.\",\n );\n }\n}\n\nexport function resolveConfig(config: AIClientConfig = {}): ResolvedAIClientConfig {\n const fetchImplementation = config.fetchImplementation ?? globalThis.fetch;\n assertFetchAvailable(fetchImplementation);\n\n const resolved: ResolvedAIClientConfig = {\n baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n defaultModel: config.defaultModel ?? DEFAULT_MODEL,\n defaultHeaders: {\n \"Content-Type\": \"application/json\",\n ...config.defaultHeaders,\n },\n fetchImplementation,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n };\n\n if (config.apiKey !== undefined) {\n resolved.apiKey = config.apiKey;\n }\n\n return resolved;\n}\n\nexport function mergeHeaders(\n base: Record<string, string>,\n overrides?: Record<string, string>,\n): Record<string, string> {\n if (!overrides) {\n return { ...base };\n }\n\n const merged = { ...base };\n for (const [key, value] of Object.entries(overrides)) {\n if (value === undefined) {\n continue;\n }\n\n merged[key] = value;\n }\n return merged;\n}\n","export type ModelProvider = \"openai\" | \"anthropic\" | \"google\" | \"deepseek\" | \"fireworks\" | \"custom\";\n\nexport interface ModelConfig {\n name: string;\n label: string;\n provider: ModelProvider;\n supportsStreaming: boolean;\n supportsTools: boolean;\n reasoning?: boolean;\n aliases?: string[];\n default?: boolean;\n}\n\nconst MODEL_REGISTRY: ModelConfig[] = [\n {\n name: \"fireworks:accounts/fireworks/models/glm-4p7\",\n label: \"GLM-4P7 (Fireworks)\",\n provider: \"fireworks\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"glm-4p7\", \"glm\"],\n default: true,\n },\n {\n name: \"openai/gpt-5-mini\",\n label: \"OpenAI GPT-5 Mini\",\n provider: \"openai\",\n supportsStreaming: true,\n supportsTools: true,\n reasoning: true,\n aliases: [\"gpt-5-mini\", \"gpt5-mini\", \"gpt-5.0-mini\"],\n },\n {\n name: \"anthropic/claude-4-sonnet-20250514\",\n label: \"Claude 4 Sonnet (20250514)\",\n provider: \"anthropic\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"claude-4-sonnet\", \"claude-sonnet\"],\n },\n {\n name: \"google/gemini-2.0-flash-001\",\n label: \"Gemini 2.0 Flash\",\n provider: \"google\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"gemini-2.0-flash\", \"gemini-flash\"],\n },\n {\n name: \"deepseek/deepseek-chat\",\n label: \"DeepSeek Chat\",\n provider: \"deepseek\",\n supportsStreaming: true,\n supportsTools: true,\n aliases: [\"deepseek-chat\", \"deepseek\"],\n },\n];\n\nconst ALIAS_LOOKUP: Record<string, string> = MODEL_REGISTRY.reduce(\n (accumulator, model) => {\n accumulator[model.name.toLowerCase()] = model.name;\n if (model.aliases) {\n for (const alias of model.aliases) {\n accumulator[alias.toLowerCase()] = model.name;\n }\n }\n return accumulator;\n },\n {} as Record<string, string>,\n);\n\nconst DEFAULT_MODEL_NAME =\n MODEL_REGISTRY.find((model) => model.default)?.name ?? MODEL_REGISTRY[0].name;\n\nexport function listModels(): ModelConfig[] {\n return [...MODEL_REGISTRY];\n}\n\nexport function getModelConfig(modelName?: string): ModelConfig | undefined {\n if (!modelName) {\n return MODEL_REGISTRY.find((model) => model.default) ?? MODEL_REGISTRY[0];\n }\n\n const normalized = normalizeModelName(modelName);\n return MODEL_REGISTRY.find((model) => model.name === normalized);\n}\n\nexport function normalizeModelName(modelName?: string): string {\n if (!modelName) {\n return DEFAULT_MODEL_NAME;\n }\n\n const trimmed = modelName.trim();\n if (!trimmed) {\n return DEFAULT_MODEL_NAME;\n }\n\n const directMatch = ALIAS_LOOKUP[trimmed.toLowerCase()];\n if (directMatch) {\n return directMatch;\n }\n\n if (trimmed.includes(\"/\")) {\n return trimmed;\n }\n\n return `openai/${trimmed}`;\n}\n\nexport function isStreamingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsStreaming : true;\n}\n\nexport function isToolCallingSupported(modelName?: string): boolean {\n const config = getModelConfig(modelName);\n return config ? config.supportsTools : true;\n}\n","import { ToolDefinition, ToolExecutionPolicy, WebSearchOptions } from \"./types\";\n\nexport const WEBSEARCH_TOOL_NAME = \"websearch\";\n\nexport const WEBSEARCH_TOOL_DEFINITION: ToolDefinition = {\n type: \"function\",\n function: {\n name: WEBSEARCH_TOOL_NAME,\n description:\n \"Search the web using the OpenPond search engine. Returns relevant results with titles, URLs, and text content.\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"The search query\",\n },\n limit: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 5)\",\n },\n },\n required: [\"query\"],\n },\n },\n};\n\nexport function resolveToolset(\n tools: ToolDefinition[] | undefined,\n policy: ToolExecutionPolicy | undefined,\n): ToolDefinition[] | undefined {\n if (!policy) {\n return tools;\n }\n\n const resolved: ToolDefinition[] = tools ? [...tools] : [];\n\n if (policy.webSearch) {\n const alreadyIncluded = resolved.some(\n (tool) => tool.type === \"function\" && tool.function?.name === WEBSEARCH_TOOL_NAME,\n );\n if (!alreadyIncluded) {\n resolved.push(materializeWebSearchTool(policy.webSearch));\n }\n }\n\n return resolved.length > 0 ? resolved : undefined;\n}\n\nfunction materializeWebSearchTool(options: WebSearchOptions): ToolDefinition {\n if (!options || Object.keys(options).length === 0) {\n return WEBSEARCH_TOOL_DEFINITION;\n }\n\n const baseParameters =\n WEBSEARCH_TOOL_DEFINITION.function.parameters ?? ({} as Record<string, unknown>);\n const baseProperties = (baseParameters.properties as Record<string, unknown> | undefined) ?? {};\n\n const properties: Record<string, unknown> = { ...baseProperties };\n\n if (options.limit !== undefined) {\n const existingLimit = baseProperties[\"limit\"];\n const limitSchema: Record<string, unknown> =\n typeof existingLimit === \"object\" && existingLimit !== null\n ? { ...(existingLimit as Record<string, unknown>) }\n : {\n type: \"number\",\n description: \"Maximum number of results to return (default: 5)\",\n };\n\n limitSchema.default = options.limit;\n properties.limit = limitSchema;\n }\n\n if (options.includeImages) {\n properties.includeImages = {\n type: \"boolean\",\n description: \"Whether to include representative images in results.\",\n default: true,\n };\n }\n\n return {\n ...WEBSEARCH_TOOL_DEFINITION,\n function: {\n ...WEBSEARCH_TOOL_DEFINITION.function,\n parameters: {\n ...WEBSEARCH_TOOL_DEFINITION.function.parameters,\n properties,\n },\n },\n } as ToolDefinition;\n}\n","import { AIError } from \"./errors\";\nimport { ChatMessage, ChatMessageContentPart } from \"./types\";\n\nexport interface FlattenMessageContentOptions {\n /**\n * String used to join individual text segments when the content array contains multiple text parts.\n * Defaults to an empty string.\n */\n separator?: string;\n /**\n * When true, JSON stringifies non-text segments instead of discarding them.\n * Defaults to false (skip non-text parts).\n */\n includeUnknown?: boolean;\n}\n\nexport function flattenMessageContent(\n content: ChatMessage[\"content\"],\n options: FlattenMessageContentOptions = {},\n): string | undefined {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!Array.isArray(content)) {\n return undefined;\n }\n\n const separator = options.separator ?? \"\";\n const collected: string[] = [];\n\n for (const part of content) {\n const text = extractTextPart(part, options);\n if (text) {\n collected.push(text);\n }\n }\n\n if (collected.length === 0) {\n return undefined;\n }\n\n return collected.join(separator);\n}\n\nexport interface EnsureTextContentOptions extends FlattenMessageContentOptions {\n errorMessage?: string;\n}\n\nexport function ensureTextContent(\n message: ChatMessage,\n options?: EnsureTextContentOptions,\n): string {\n const flattened = flattenMessageContent(message.content, options);\n if (flattened !== undefined) {\n return flattened;\n }\n\n throw new AIError(options?.errorMessage ?? \"Assistant response did not contain textual content.\");\n}\n\nfunction extractTextPart(\n part: ChatMessageContentPart,\n options: FlattenMessageContentOptions,\n): string | undefined {\n if (!part || typeof part !== \"object\") {\n return undefined;\n }\n\n if (\"text\" in part && typeof part.text === \"string\") {\n return part.text;\n }\n\n if (options.includeUnknown) {\n try {\n return JSON.stringify(part);\n } catch (error) {\n return `[unserializable_part: ${String(error)}]`;\n }\n }\n\n return undefined;\n}\n","import { resolveConfig, mergeHeaders } from \"./config\";\nimport {\n GenerateTextOptions,\n GenerateTextResult,\n AIClientConfig,\n ChatCompletionResponse,\n ChatCompletionChoice,\n ChatCompletionUsage,\n ResolvedAIClientConfig,\n StreamTextOptions,\n StreamTextResult,\n GenerationParameters,\n AIRequestMetadata,\n ChatMessage,\n StreamingEventHandlers,\n} from \"./types\";\nimport { normalizeModelName, isToolCallingSupported, listModels } from \"./models\";\nimport { resolveToolset } from \"./tools\";\nimport { flattenMessageContent } from \"./messages\";\nimport { AIFetchError, AIResponseError, AIAbortError, AIError } from \"./errors\";\n\nconst CHAT_COMPLETIONS_PATH = \"/v1/chat/completions\";\n\nexport interface AIClient {\n readonly config: ResolvedAIClientConfig;\n generateText(options: GenerateTextOptions): Promise<GenerateTextResult>;\n streamText(options: StreamTextOptions): Promise<StreamTextResult>;\n listModels: typeof listModels;\n}\n\ninterface ChatCompletionRequestPayload {\n model: string;\n messages: GenerateTextOptions[\"messages\"];\n temperature?: number;\n top_p?: number;\n max_tokens?: number;\n stop?: string | string[];\n presence_penalty?: number;\n frequency_penalty?: number;\n tool_choice?: GenerateTextOptions[\"toolChoice\"];\n tools?: GenerateTextOptions[\"tools\"];\n stream?: boolean;\n response_format?: GenerationParameters[\"responseFormat\"];\n metadata?: Record<string, unknown>;\n stream_options?: {\n include_usage?: boolean;\n };\n}\n\ninterface AbortBundle {\n signal: AbortSignal;\n abort: () => void;\n cleanup: () => void;\n}\n\nexport function createAIClient(config: AIClientConfig = {}): AIClient {\n const resolved = resolveConfig(config);\n\n return {\n get config() {\n return resolved;\n },\n async generateText(options) {\n return generateText(options, config);\n },\n async streamText(options) {\n return streamText(options, config);\n },\n listModels,\n };\n}\n\nexport async function generateText(\n options: GenerateTextOptions,\n clientConfig: AIClientConfig = {},\n): Promise<GenerateTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const payload = buildRequestPayload(options, model, {\n allowTools: isToolCallingSupported(model),\n });\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs,\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n } finally {\n abortBundle.cleanup();\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n const data = (await response.json()) as ChatCompletionResponse;\n const primaryChoice = data.choices.find(isPrimaryChoice);\n\n if (!primaryChoice) {\n throw new AIResponseError(\n {\n status: response.status,\n statusText: response.statusText,\n body: data,\n },\n \"Gateway response did not contain a valid choice\",\n );\n }\n\n const result: GenerateTextResult = {\n id: data.id,\n model: data.model,\n message: primaryChoice.message,\n raw: data,\n };\n\n if (primaryChoice.finish_reason !== undefined) {\n result.finishReason = primaryChoice.finish_reason;\n }\n\n if (data.usage) {\n result.usage = data.usage;\n }\n\n return result;\n}\n\nexport async function streamText(\n options: StreamTextOptions,\n clientConfig: AIClientConfig = {},\n): Promise<StreamTextResult> {\n const resolved = resolveConfig(clientConfig);\n const model = normalizeModelName(options.model ?? resolved.defaultModel);\n\n const streamExtras = buildStreamMetadataExtras(options);\n const payload = buildRequestPayload(\n options,\n model,\n {\n allowTools: isToolCallingSupported(model),\n },\n streamExtras,\n );\n\n payload.stream = true;\n if (options.includeUsage) {\n payload.stream_options = { include_usage: true };\n }\n\n const headers = mergeHeaders(resolved.defaultHeaders, options.headers);\n if (resolved.apiKey) {\n headers.Authorization = `Bearer ${resolved.apiKey}`;\n }\n\n const endpoint = buildUrl(resolved.baseUrl, CHAT_COMPLETIONS_PATH);\n const abortBundle = createAbortBundle(\n options.abortSignal,\n options.timeoutMs ?? resolved.timeoutMs,\n );\n\n let response: Response;\n try {\n response = await resolved.fetchImplementation(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: abortBundle.signal,\n });\n } catch (error) {\n if (abortBundle.signal.aborted) {\n throw toAbortError(abortBundle.signal.reason ?? error);\n }\n\n throw new AIFetchError(\"Failed to reach AI gateway\", { cause: error });\n }\n\n if (!response.ok) {\n const errorBody = await safeParseJson(response);\n abortBundle.cleanup();\n throw new AIResponseError({\n status: response.status,\n statusText: response.statusText,\n body: errorBody,\n headers: collectHeaders(response.headers),\n });\n }\n\n if (!response.body) {\n abortBundle.cleanup();\n throw new AIFetchError(\"Streaming response did not include a readable body\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const handlers = options.handlers ?? {};\n\n let finishedResolve: () => void;\n let finishedReject: (reason?: unknown) => void;\n const finished = new Promise<void>((resolve, reject) => {\n finishedResolve = resolve;\n finishedReject = reject;\n });\n\n let settled = false;\n\n const resolveStream = () => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onDone?.();\n finishedResolve();\n } catch (error) {\n settled = false; // allow rejectError to run with handler error\n rejectStream(error);\n }\n };\n\n const rejectStream = (reason: unknown) => {\n if (settled) {\n return;\n }\n settled = true;\n try {\n handlers.onError?.(reason);\n } catch (handlerError) {\n reason = handlerError;\n }\n finishedReject(reason);\n };\n\n const abort = () => abortBundle.abort();\n\n (async () => {\n let buffer = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n buffer += decoder.decode();\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n if (buffer.trim().length > 0) {\n if (processStreamEventChunk(buffer, handlers)) {\n break;\n }\n }\n resolveStream();\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n buffer = buffer.replace(/\\r\\n/g, \"\\n\");\n\n let boundaryIndex: number;\n while ((boundaryIndex = buffer.indexOf(\"\\n\\n\")) !== -1) {\n const chunk = buffer.slice(0, boundaryIndex);\n buffer = buffer.slice(boundaryIndex + 2);\n if (!chunk) {\n continue;\n }\n if (processStreamEventChunk(chunk, handlers)) {\n await reader.cancel().catch(() => undefined);\n resolveStream();\n return;\n }\n }\n }\n } catch (error) {\n if (abortBundle.signal.aborted) {\n rejectStream(toAbortError(abortBundle.signal.reason ?? error));\n } else {\n rejectStream(error);\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // ignore release errors\n }\n abortBundle.cleanup();\n }\n })().catch((error) => {\n rejectStream(error);\n });\n\n return {\n abort,\n finished,\n };\n\n function processStreamEventChunk(chunk: string, eventHandlers: StreamingEventHandlers): boolean {\n const dataString = extractSseData(chunk);\n if (dataString == null) {\n return false;\n }\n\n const trimmed = dataString.trim();\n if (trimmed === \"[DONE]\") {\n return true;\n }\n\n let payload: unknown;\n try {\n payload = JSON.parse(dataString);\n } catch (error) {\n rejectStream(new AIError(\"Failed to parse streaming payload\", { cause: error }));\n return true;\n }\n\n try {\n handleStreamPayload(payload, eventHandlers);\n } catch (error) {\n rejectStream(error);\n return true;\n }\n\n return false;\n }\n\n function handleStreamPayload(payload: unknown, eventHandlers: StreamingEventHandlers): void {\n if (!payload || typeof payload !== \"object\") {\n return;\n }\n\n if (\"error\" in payload && payload.error) {\n const message =\n typeof payload.error === \"string\"\n ? payload.error\n : (payload.error as { message?: string }).message;\n throw new AIError(message ?? \"AI stream returned an error payload\");\n }\n\n const structured = payload as {\n choices?: Array<{ delta?: unknown }>;\n usage?: ChatCompletionUsage;\n };\n\n if (Array.isArray(structured.choices)) {\n for (const choice of structured.choices) {\n if (!choice || typeof choice !== \"object\") {\n continue;\n }\n const delta = (choice as { delta?: unknown }).delta;\n if (!delta || typeof delta !== \"object\") {\n continue;\n }\n const deltaObject = delta as Record<string, unknown>;\n\n const textDelta = extractDeltaText(deltaObject.content);\n if (textDelta) {\n eventHandlers.onTextDelta?.(textDelta);\n }\n\n const reasoningDelta = extractDeltaText(deltaObject.reasoning);\n if (reasoningDelta) {\n eventHandlers.onReasoningDelta?.(reasoningDelta);\n }\n\n if (deltaObject.tool_calls !== undefined) {\n eventHandlers.onToolCallDelta?.(deltaObject.tool_calls);\n }\n }\n }\n\n if (structured.usage) {\n eventHandlers.onUsage?.(structured.usage);\n }\n }\n\n function extractDeltaText(value: unknown): string | undefined {\n if (!value) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n return flattenMessageContent(value as ChatMessage[\"content\"]);\n }\n\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"content\" in value &&\n Array.isArray((value as { content?: unknown }).content)\n ) {\n return flattenMessageContent(\n ((value as { content?: ChatMessage[\"content\"] }).content ?? []) as ChatMessage[\"content\"],\n );\n }\n\n return undefined;\n }\n\n function extractSseData(chunk: string): string | null {\n const lines = chunk.split(\"\\n\");\n const dataLines: string[] = [];\n for (const rawLine of lines) {\n if (!rawLine) {\n continue;\n }\n const match = /^data:(.*)$/.exec(rawLine);\n if (!match) {\n continue;\n }\n\n const value = match[1];\n dataLines.push(value.startsWith(\" \") ? value.slice(1) : value);\n }\n\n if (dataLines.length === 0) {\n return null;\n }\n\n return dataLines.join(\"\\n\");\n }\n}\n\nfunction buildStreamMetadataExtras(\n options: StreamTextOptions,\n): Record<string, unknown> | undefined {\n const streamConfig: Record<string, unknown> = {};\n\n if (options.sendReasoning !== undefined) {\n streamConfig.sendReasoning = options.sendReasoning;\n }\n\n if (options.includeUsage !== undefined) {\n streamConfig.includeUsage = options.includeUsage;\n }\n\n if (Object.keys(streamConfig).length === 0) {\n return undefined;\n }\n\n return {\n openpond: {\n stream: streamConfig,\n },\n } satisfies Record<string, unknown>;\n}\n\nfunction buildRequestPayload(\n options: GenerateTextOptions,\n model: string,\n capabilities: { allowTools: boolean },\n metadataExtras?: Record<string, unknown>,\n): ChatCompletionRequestPayload {\n const payload: ChatCompletionRequestPayload = {\n model,\n messages: options.messages,\n };\n\n const generation: GenerationParameters = options.generation ?? {};\n\n assignIfDefined(payload, \"temperature\", generation.temperature);\n assignIfDefined(payload, \"top_p\", generation.topP);\n assignIfDefined(payload, \"max_tokens\", generation.maxTokens);\n assignIfDefined(payload, \"stop\", generation.stop);\n assignIfDefined(payload, \"frequency_penalty\", generation.frequencyPenalty);\n assignIfDefined(payload, \"presence_penalty\", generation.presencePenalty);\n assignIfDefined(payload, \"response_format\", generation.responseFormat);\n\n const toolExecution = options.toolExecution;\n const enableTools = toolExecution?.enableTools ?? true;\n if (enableTools && capabilities.allowTools) {\n const resolvedTools = resolveToolset(options.tools, toolExecution);\n assignIfDefined(payload, \"tools\", resolvedTools);\n assignIfDefined(payload, \"tool_choice\", options.toolChoice);\n } else if (options.toolChoice && options.toolChoice !== \"none\") {\n payload.tool_choice = \"none\";\n }\n\n const metadataPayload = buildMetadataPayload(options.metadata, toolExecution, metadataExtras);\n if (metadataPayload) {\n payload.metadata = metadataPayload;\n }\n\n return payload;\n}\n\nfunction assignIfDefined<T extends object, K extends keyof T>(\n target: T,\n key: K,\n value: T[K] | undefined,\n): void {\n if (value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction buildUrl(baseUrl: string, path: string): string {\n const sanitizedBase = baseUrl.endsWith(\"/\") ? baseUrl.slice(0, -1) : baseUrl;\n return `${sanitizedBase}${path}`;\n}\n\nfunction createAbortBundle(\n upstreamSignal: AbortSignal | undefined,\n timeoutMs: number | undefined,\n): AbortBundle {\n const controller = new AbortController();\n const cleanupCallbacks: Array<() => void> = [];\n\n if (upstreamSignal) {\n if (upstreamSignal.aborted) {\n controller.abort(upstreamSignal.reason);\n } else {\n const onAbort = () => controller.abort(upstreamSignal.reason);\n upstreamSignal.addEventListener(\"abort\", onAbort, { once: true });\n cleanupCallbacks.push(() => upstreamSignal.removeEventListener(\"abort\", onAbort));\n }\n }\n\n if (timeoutMs && timeoutMs > 0) {\n const timeoutId = setTimeout(() => {\n controller.abort(new Error(\"AI request timed out\"));\n }, timeoutMs);\n cleanupCallbacks.push(() => clearTimeout(timeoutId));\n }\n\n return {\n signal: controller.signal,\n abort: () => controller.abort(),\n cleanup: () => {\n cleanupCallbacks.forEach((fn) => fn());\n },\n };\n}\n\nfunction collectHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\n\nfunction buildMetadataPayload(\n base: AIRequestMetadata | undefined,\n toolExecution: GenerateTextOptions[\"toolExecution\"] | undefined,\n extras?: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const metadata: Record<string, unknown> = base ? { ...base } : {};\n\n if (extras) {\n for (const [key, value] of Object.entries(extras)) {\n if (value === undefined) {\n continue;\n }\n\n if (key === \"openpond\" && typeof value === \"object\" && value !== null) {\n const existing = metadata.openpond;\n metadata.openpond = {\n ...(typeof existing === \"object\" && existing !== null\n ? (existing as Record<string, unknown>)\n : undefined),\n ...(value as Record<string, unknown>),\n };\n } else {\n metadata[key] = value;\n }\n }\n }\n\n if (toolExecution) {\n const existing = metadata.openpond;\n const openpond = {\n ...(typeof existing === \"object\" && existing !== null\n ? (existing as Record<string, unknown>)\n : undefined),\n toolExecution,\n };\n metadata.openpond = openpond;\n }\n\n return Object.keys(metadata).length > 0 ? metadata : undefined;\n}\n\nasync function safeParseJson(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\");\n if (!contentType || !contentType.includes(\"application/json\")) {\n return undefined;\n }\n\n try {\n return await response.json();\n } catch (error) {\n return { error: \"Failed to parse error body\", cause: String(error) };\n }\n}\n\nfunction isPrimaryChoice(choice: ChatCompletionChoice): boolean {\n return choice.index === 0 || choice.message !== undefined;\n}\n\nfunction toAbortError(reason: unknown): AIAbortError {\n if (reason instanceof AIAbortError) {\n return reason;\n }\n\n if (reason instanceof Error) {\n if (reason.name === \"AbortError\") {\n return new AIAbortError(reason.message || \"AI request aborted\");\n }\n return new AIAbortError(reason.message);\n }\n\n return new AIAbortError(String(reason ?? \"AI request aborted\"));\n}\n\nexport { listModels };\n","import { z } from \"zod\";\n\nexport const BACKTEST_DECISION_MODE = \"backtest_decisions\" as const;\nexport type BacktestMode = typeof BACKTEST_DECISION_MODE;\n\nexport const backtestDecisionRequestSchema = z\n .object({\n mode: z.literal(BACKTEST_DECISION_MODE),\n source: z.string().min(1).optional(),\n symbol: z.string().min(1).optional(),\n lookbackDays: z.number().positive().optional(),\n timeframeStart: z.string().optional(),\n timeframeEnd: z.string().optional(),\n from: z.number().int().nonnegative().optional(),\n to: z.number().int().nonnegative().optional(),\n initialEquityUsd: z.number().positive().optional(),\n })\n .strict();\n\nexport type BacktestDecisionRequest = z.infer<typeof backtestDecisionRequestSchema>;\n\nexport type BacktestResolution = \"1\" | \"5\" | \"15\" | \"30\" | \"60\" | \"240\" | \"1D\" | \"1W\";\n\nconst RESOLUTION_SECONDS: Record<BacktestResolution, number> = {\n \"1\": 60,\n \"5\": 300,\n \"15\": 900,\n \"30\": 1800,\n \"60\": 3600,\n \"240\": 14400,\n \"1D\": 86400,\n \"1W\": 604800,\n};\n\nexport function parseTimeToSeconds(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return Math.max(0, Math.trunc(value));\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const trimmed = value.trim();\n if (/^-?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(trimmed)) {\n const numeric = Number.parseFloat(trimmed);\n return Math.max(0, Math.trunc(numeric));\n }\n const parsedDate = new Date(value);\n if (!Number.isNaN(parsedDate.getTime())) {\n return Math.max(0, Math.trunc(parsedDate.getTime() / 1000));\n }\n }\n return null;\n}\n\nexport function resolutionToSeconds(resolution: BacktestResolution): number {\n return RESOLUTION_SECONDS[resolution];\n}\n\nexport function estimateCountBack(params: {\n fallback: number;\n lookbackDays?: number;\n resolution: BacktestResolution;\n fromSeconds?: number;\n toSeconds?: number;\n minCountBack?: number;\n bufferBars?: number;\n}): number {\n const {\n fallback,\n lookbackDays,\n resolution,\n fromSeconds,\n toSeconds,\n minCountBack = 50,\n bufferBars = 5,\n } = params;\n\n if (typeof lookbackDays === \"number\" && Number.isFinite(lookbackDays) && lookbackDays > 0) {\n const interval = resolutionToSeconds(resolution);\n const bars = Math.ceil((lookbackDays * 86400) / interval);\n return Math.max(minCountBack, bars + bufferBars);\n }\n\n if (\n typeof fromSeconds === \"number\" &&\n Number.isFinite(fromSeconds) &&\n typeof toSeconds === \"number\" &&\n Number.isFinite(toSeconds) &&\n toSeconds > fromSeconds\n ) {\n const interval = resolutionToSeconds(resolution);\n const bars = Math.ceil((toSeconds - fromSeconds) / interval);\n return Math.max(minCountBack, bars + bufferBars);\n }\n\n return fallback;\n}\n\nexport function resolveBacktestMode(value: unknown): BacktestMode | null {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim().toLowerCase();\n return normalized === BACKTEST_DECISION_MODE ? BACKTEST_DECISION_MODE : null;\n}\n\nexport type ResolvedBacktestWindow = {\n fromSeconds?: number;\n toSeconds?: number;\n countBack: number;\n};\n\nexport function resolveBacktestWindow(params: {\n fallbackCountBack: number;\n lookbackDays?: unknown;\n resolution: BacktestResolution;\n from?: unknown;\n to?: unknown;\n timeframeStart?: unknown;\n timeframeEnd?: unknown;\n minCountBack?: number;\n bufferBars?: number;\n}): ResolvedBacktestWindow {\n const fromSeconds = parseTimeToSeconds(params.from) ?? parseTimeToSeconds(params.timeframeStart);\n const toSeconds = parseTimeToSeconds(params.to) ?? parseTimeToSeconds(params.timeframeEnd);\n const hasWindow =\n fromSeconds != null &&\n toSeconds != null &&\n Number.isFinite(fromSeconds) &&\n Number.isFinite(toSeconds) &&\n toSeconds > fromSeconds;\n\n const resolvedFrom = hasWindow ? fromSeconds : undefined;\n const resolvedTo = hasWindow ? toSeconds : undefined;\n const lookbackDays =\n typeof params.lookbackDays === \"number\" && Number.isFinite(params.lookbackDays)\n ? params.lookbackDays\n : undefined;\n\n const countBack = estimateCountBack({\n fallback: params.fallbackCountBack,\n resolution: params.resolution,\n ...(lookbackDays != null ? { lookbackDays } : {}),\n ...(resolvedFrom != null ? { fromSeconds: resolvedFrom } : {}),\n ...(resolvedTo != null ? { toSeconds: resolvedTo } : {}),\n ...(typeof params.minCountBack === \"number\" ? { minCountBack: params.minCountBack } : {}),\n ...(typeof params.bufferBars === \"number\" ? { bufferBars: params.bufferBars } : {}),\n });\n\n return {\n ...(resolvedFrom != null ? { fromSeconds: resolvedFrom } : {}),\n ...(resolvedTo != null ? { toSeconds: resolvedTo } : {}),\n countBack,\n };\n}\n\nexport function resolveBacktestAccountValueUsd(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value) && value > 0) {\n return value;\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n const parsed = Number.parseFloat(value.trim());\n if (Number.isFinite(parsed) && parsed > 0) {\n return parsed;\n }\n }\n return undefined;\n}\n\nexport type BacktestDecisionSeriesInput = {\n symbol?: string;\n timeframeStart?: string;\n timeframeEnd?: string;\n from?: number;\n to?: number;\n lookbackDays?: number;\n accountValueUsd?: number;\n};\n\nexport function buildBacktestDecisionSeriesInput(\n request: Partial<BacktestDecisionRequest>,\n): BacktestDecisionSeriesInput {\n const accountValueUsd = resolveBacktestAccountValueUsd(request.initialEquityUsd);\n return {\n ...(request.symbol ? { symbol: request.symbol } : {}),\n ...(request.timeframeStart ? { timeframeStart: request.timeframeStart } : {}),\n ...(request.timeframeEnd ? { timeframeEnd: request.timeframeEnd } : {}),\n ...(request.from != null ? { from: request.from } : {}),\n ...(request.to != null ? { to: request.to } : {}),\n ...(request.lookbackDays != null ? { lookbackDays: request.lookbackDays } : {}),\n ...(accountValueUsd != null ? { accountValueUsd } : {}),\n };\n}\n"]}
|