@continuumdao/ctm-mpc-defi 0.2.49 → 0.2.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/agent/catalog.cjs +1344 -22
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +1528 -9
  4. package/dist/agent/catalog.js +1316 -23
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/continuum-dao/SKILL.md +2 -0
  7. package/dist/agent/skills/continuum-dao-marketplace/SKILL.md +58 -0
  8. package/dist/agent/skills/hyperliquidOutcome/SKILL.md +47 -0
  9. package/dist/agent/skills/trueo/SKILL.md +64 -0
  10. package/dist/core/index.cjs +3 -1
  11. package/dist/core/index.cjs.map +1 -1
  12. package/dist/core/index.js +3 -1
  13. package/dist/core/index.js.map +1 -1
  14. package/dist/index.cjs +3 -1
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +3 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
  19. package/dist/protocols/evm/aerodrome/index.js.map +1 -1
  20. package/dist/protocols/evm/continuum-dao/index.cjs +2274 -59
  21. package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
  22. package/dist/protocols/evm/continuum-dao/index.d.ts +690 -2
  23. package/dist/protocols/evm/continuum-dao/index.js +2218 -61
  24. package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
  25. package/dist/protocols/evm/hyperliquidOutcome/index.cjs +1294 -0
  26. package/dist/protocols/evm/hyperliquidOutcome/index.cjs.map +1 -0
  27. package/dist/protocols/evm/hyperliquidOutcome/index.d.ts +465 -0
  28. package/dist/protocols/evm/hyperliquidOutcome/index.js +1247 -0
  29. package/dist/protocols/evm/hyperliquidOutcome/index.js.map +1 -0
  30. package/dist/protocols/evm/pendle/index.cjs +3 -1
  31. package/dist/protocols/evm/pendle/index.cjs.map +1 -1
  32. package/dist/protocols/evm/pendle/index.js +3 -1
  33. package/dist/protocols/evm/pendle/index.js.map +1 -1
  34. package/dist/protocols/evm/trueo/index.cjs +2868 -0
  35. package/dist/protocols/evm/trueo/index.cjs.map +1 -0
  36. package/dist/protocols/evm/trueo/index.d.ts +1295 -0
  37. package/dist/protocols/evm/trueo/index.js +2725 -0
  38. package/dist/protocols/evm/trueo/index.js.map +1 -0
  39. package/package.json +11 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/hyperliquid/support.ts","../../../../src/protocols/evm/hyperliquidOutcome/model.ts","../../../../src/protocols/evm/hyperliquidOutcome/api.ts","../../../../src/protocols/evm/hyperliquidOutcome/purpose.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/core/eip712Multisign.ts","../../../../src/core/expiry.ts","../../../../src/protocols/evm/hyperliquid/l1Signing.ts","../../../../src/protocols/evm/hyperliquidOutcome/multisign.ts","../../../../src/protocols/evm/hyperliquidOutcome/mcpSummaries.ts","../../../../src/protocols/evm/hyperliquidOutcome/index.ts"],"names":["getClientIdFromKeyGenResult","stringToHex","hashTypedData","encodeMsgpack","keccak256"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","/** HyperEVM chains for Hyperliquid CoreWriter integration. */\nexport const HYPERLIQUID_SUPPORTED_CHAIN_IDS = [999, 998] as const\n\nexport type HyperliquidSupportedChainId = (typeof HYPERLIQUID_SUPPORTED_CHAIN_IDS)[number]\n\nexport function isHyperliquidChainSupported(chainId: number): chainId is HyperliquidSupportedChainId {\n return (HYPERLIQUID_SUPPORTED_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function hyperliquidApiBaseUrl(chainId: number): string {\n return chainId === 998 ? 'https://api.hyperliquid-testnet.xyz' : 'https://api.hyperliquid.xyz'\n}\n\n/** Stats feed used by app.hyperliquid.xyz/vaults (official vaultSummaries returns []). */\nexport function hyperliquidVaultStatsUrl(chainId: number): string | null {\n return chainId === 998 ? null : 'https://stats-data.hyperliquid.xyz/Mainnet/vaults'\n}\n\nexport const HYPERLIQUID_HLP_VAULT_ADDRESS = '0xdfc24b077bc1425ad1dea75bcb6f8158e10df303'\n\n/** HIP-3 coins use `{dex}:{symbol}` (e.g. `xyz:AAPL`). Returns dex segment when present. */\nexport function hyperliquidInferDexFromCoin(coin: string): string | undefined {\n const trimmed = coin.trim()\n const sep = trimmed.indexOf(':')\n if (sep <= 0) return undefined\n return trimmed.slice(0, sep)\n}\n","/** HIP-4 outcome id + side (0 = first side, usually Yes). */\nexport function outcomeEncoding(outcome: number, side: number): number {\n const o = Math.trunc(outcome)\n const s = Math.trunc(side)\n if (!Number.isFinite(o) || o < 0) throw new Error('outcome must be a non-negative integer')\n if (s !== 0 && s !== 1) throw new Error('side must be 0 or 1')\n return 10 * o + s\n}\n\nexport function outcomeTradeCoin(encoding: number): string {\n return `#${encoding}`\n}\n\nexport function outcomeBalanceCoin(encoding: number): string {\n return `+${encoding}`\n}\n\nexport function outcomeAssetId(encoding: number): number {\n return 100_000_000 + encoding\n}\n\nexport function outcomeSideIndex(side: 'yes' | 'no' | 0 | 1): 0 | 1 {\n if (side === 'no' || side === 1) return 1\n return 0\n}\n\nexport function outcomeSideName(name: string | undefined, fallback: string): string {\n const raw = (name ?? '').trim()\n const stripped = raw.replace(/^template:/i, '').trim()\n return stripped || fallback\n}\n\nexport type HyperliquidOutcomeSideSpec = { name?: string }\n\nexport type HyperliquidOutcomeMeta = {\n outcome: number\n name: string\n description: string\n sideSpecs?: HyperliquidOutcomeSideSpec[]\n quoteToken?: string\n venue?: string\n deployerFeeScale?: string\n}\n\nexport type HyperliquidOutcomeQuestion = {\n question: number\n name?: string\n description?: string\n fallbackOutcome?: number\n namedOutcomes?: number[]\n settledNamedOutcomes?: number[]\n}\n\nexport function parseHyperliquidPipeFields(description: string | undefined): Record<string, string> {\n const out: Record<string, string> = {}\n for (const part of (description ?? '').split('|')) {\n const i = part.indexOf(':')\n if (i <= 0) continue\n const key = part.slice(0, i).trim()\n const value = part.slice(i + 1).trim()\n if (key && value) out[key] = value\n }\n return out\n}\n\n/** `20261001-0000` → unix seconds UTC. */\nexport function parseHyperliquidStamp(raw: string | undefined): number | null {\n const m = /^(\\d{4})(\\d{2})(\\d{2})-(\\d{2})(\\d{2})$/.exec((raw ?? '').trim())\n if (!m) return null\n const ms = Date.parse(`${m[1]}-${m[2]}-${m[3]}T${m[4]}:${m[5]}:00Z`)\n return Number.isFinite(ms) ? Math.floor(ms / 1000) : null\n}\n\nexport function formatHyperliquidStamp(unixSec: number | null): string | null {\n if (unixSec == null || !Number.isFinite(unixSec) || unixSec <= 0) return null\n const d = new Date(unixSec * 1000)\n if (Number.isNaN(d.getTime())) return null\n const pad = (n: number) => String(n).padStart(2, '0')\n return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())} ${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())} UTC`\n}\n\nexport function questionForOutcome(\n outcomeId: number,\n questions: readonly HyperliquidOutcomeQuestion[],\n): HyperliquidOutcomeQuestion | undefined {\n for (const q of questions) {\n if (q.fallbackOutcome === outcomeId) return q\n if ((q.namedOutcomes ?? []).includes(outcomeId)) return q\n }\n return undefined\n}\n\nexport function formatOutcomeQuestion(\n outcome: HyperliquidOutcomeMeta,\n question?: HyperliquidOutcomeQuestion,\n): string {\n const fields = parseHyperliquidPipeFields(outcome.description)\n const qFields = parseHyperliquidPipeFields(question?.description)\n const when = formatHyperliquidStamp(\n parseHyperliquidStamp(fields.time) ?? parseHyperliquidStamp(qFields.resolutionDeadline),\n )\n const whenSuffix = when ? ` at ${when}` : ''\n if (outcome.name === 'template:binaryPrice') {\n const asset = fields.priceDescription || fields.perp || 'the asset'\n const threshold = fields.threshold ?? ''\n return `Will ${asset} be above ${threshold}${whenSuffix}?`.replace(/\\s+/g, ' ').trim()\n }\n if (outcome.name === 'template:priceTouch') {\n const asset = fields.priceDescription || fields.perp || 'the asset'\n const target = fields.target ?? ''\n return `Will ${asset} touch ${target}${when ? ` by ${when}` : ''}?`.replace(/\\s+/g, ' ').trim()\n }\n if (outcome.name === 'template:sportsTournamentParticipant') {\n const participant = fields.participant || 'this participant'\n const competition = qFields.competition\n return competition ? `Will ${participant} win ${competition}?` : `Will ${participant} win?`\n }\n const desc = (outcome.description ?? '').trim()\n if (desc && desc !== 'other') return desc\n return outcome.name || `Outcome ${outcome.outcome}`\n}\n\nexport type HyperliquidOutcomeTemplate = {\n id: string\n description?: string\n role?: string | { questionOutcome?: { parent?: string } }\n}\n\nconst STAMP_FIELDS = new Set([\n 'time',\n 'dateTime',\n 'resolutionDeadline',\n 'scheduledStart',\n 'scheduledDecision',\n 'expiry',\n 'decisionDeadline',\n])\n\nexport function outcomeTemplateId(name: string | undefined): string {\n return (name ?? '').replace(/^template:/, '').trim()\n}\n\nexport function outcomeFieldMap(\n outcome: HyperliquidOutcomeMeta,\n question?: HyperliquidOutcomeQuestion,\n): Record<string, string> {\n return {\n ...parseHyperliquidPipeFields(question?.description),\n ...parseHyperliquidPipeFields(outcome.description),\n }\n}\n\nfunction displayField(key: string, raw: string): string {\n if (STAMP_FIELDS.has(key)) {\n const formatted = formatHyperliquidStamp(parseHyperliquidStamp(raw))\n if (formatted) return formatted\n }\n return raw.trim()\n}\n\nexport function fillOutcomeTemplate(text: string, fields: Record<string, string>): string {\n return text.replace(/\\{([A-Za-z0-9_]+)\\}/g, (token, key: string) => {\n const raw = fields[key]\n if (raw == null || !raw.trim()) return token\n return displayField(key, raw)\n })\n}\n\nfunction stripTemplateMetadata(text: string): string {\n return (text.split(/\\smetadata=/)[0] ?? text).replace(/\\bprice price\\b/g, 'price').trim()\n}\n\nfunction templateById(\n templates: readonly HyperliquidOutcomeTemplate[] | undefined,\n id: string,\n): HyperliquidOutcomeTemplate | undefined {\n return templates?.find((template) => template.id === id)\n}\n\nfunction parentTemplateId(template: HyperliquidOutcomeTemplate | undefined): string | null {\n const role = template?.role\n if (!role || typeof role !== 'object') return null\n const parent = role.questionOutcome?.parent?.trim()\n return parent || null\n}\n\nexport function resolveOutcomeSideLabel(\n specName: string | undefined,\n fields: Record<string, string>,\n fallback: string,\n): string {\n const raw = outcomeSideName(specName, fallback)\n const filled = fillOutcomeTemplate(raw, fields).trim()\n return filled || fallback\n}\n\nfunction recurringRules(outcome: HyperliquidOutcomeMeta, fields: Record<string, string>): string | null {\n const when = fields.expiry ? displayField('expiry', fields.expiry) : 'expiry'\n const asset = fields.underlying || 'the asset'\n if (outcome.name === 'Recurring' && fields.class === 'priceBinary') {\n const period = fields.period ? ` Period ${fields.period}.` : ''\n return `Yes if the ${asset} HyperCore mark at ${when} is at or above ${fields.targetPrice ?? '—'}. Otherwise No. The mark is the linear interpolation of the HyperCore mark updates immediately before and after that time.${period}`\n }\n if (outcome.name === 'Recurring Fallback') {\n return `Yes if none of the named ${asset} price buckets contain the mark at ${when}. Otherwise No. Thresholds: ${fields.priceThresholds || '—'}.`\n }\n if (outcome.name === 'Recurring Named Outcome') {\n return `Yes if bucket ${fields.index ?? '—'} is the ${asset} price range that contains the interpolated HyperCore mark at ${when}. Otherwise No. Thresholds: ${fields.priceThresholds || '—'}.`\n }\n return null\n}\n\nfunction fallbackRules(outcome: HyperliquidOutcomeMeta, fields: Record<string, string>): string {\n const id = outcomeTemplateId(outcome.name)\n const when = fields.time ? displayField('time', fields.time) : 'the settlement time'\n const feed = fields.priceDescription || fields.perp || 'the price'\n if (id === 'binaryPrice') {\n const twap = fields.seconds\n ? ` Settlement uses the ${fields.seconds}-second TWAP of ${feed} ending at ${when}.`\n : ''\n return `Yes if the ${fields.perp || feed} price is above ${fields.threshold ?? '—'} at ${when}. Otherwise No.${twap}`.replace(\n /\\bprice price\\b/g,\n 'price',\n )\n }\n if (id === 'priceTouch') {\n return `Yes if the ${fields.perp || feed} price touches ${fields.target ?? '—'} at or before ${when}. Otherwise No. A touch is the ${fields.seconds || '—'}-second TWAP of ${feed} equaling or crossing the target.`\n }\n if (id === 'companyIpoConfirmed') {\n const at = fields.dateTime ? displayField('dateTime', fields.dateTime) : 'the deadline'\n return `Yes if ${fields.company || 'the company'}'s first public listing is confirmed at or before ${at}. Otherwise No.`\n }\n if (id === 'sportsTournamentParticipant' || id === 'sportsContestParticipant2') {\n return `Yes if ${fields.participant || 'this participant'} is the sole winner. Otherwise No.`\n }\n if (id === 'sportsContestDraw2') return 'Yes if the contest is a draw. Otherwise No.'\n if (id === 'policyRateNoChange') return 'Yes if the announced policy value equals the prior value. Otherwise No.'\n if (id === 'policyRateDecrease') return 'Yes if the announced policy value is lower than the prior value. Otherwise No.'\n if (id === 'policyRateIncrease') return 'Yes if the announced policy value is higher than the prior value. Otherwise No.'\n if (id === 'sportsContestWinner') {\n const a = fields.shortNameA || fields.participantA || 'Side A'\n const b = fields.shortNameB || fields.participantB || 'Side B'\n return `${a} wins if ${fields.participantA || a} wins the contest. ${b} wins if ${fields.participantB || b} wins. Counted play: ${fields.countedPlay || 'the scheduled contest'}.`\n }\n return ''\n}\n\n/** Official template text with this market's fields filled in. */\nexport function formatOutcomeRules(\n outcome: HyperliquidOutcomeMeta,\n question?: HyperliquidOutcomeQuestion,\n templates?: readonly HyperliquidOutcomeTemplate[],\n): string {\n const fields = outcomeFieldMap(outcome, question)\n const recurring = recurringRules(outcome, fields)\n if (recurring) return recurring\n const template = templateById(templates, outcomeTemplateId(outcome.name))\n const ownRaw = template?.description?.trim()\n const own = ownRaw ? stripTemplateMetadata(fillOutcomeTemplate(ownRaw, fields)) : fallbackRules(outcome, fields)\n const parentRaw = templateById(templates, parentTemplateId(template) ?? '')?.description?.trim()\n const parent = parentRaw ? stripTemplateMetadata(fillOutcomeTemplate(parentRaw, fields)) : ''\n if (own && parent) return `${own}\\n\\n${parent}`\n return own\n}\n\nexport function outcomeExpiryUnix(\n outcome: HyperliquidOutcomeMeta,\n question?: HyperliquidOutcomeQuestion,\n): number {\n const fields = parseHyperliquidPipeFields(outcome.description)\n const qFields = parseHyperliquidPipeFields(question?.description)\n return parseHyperliquidStamp(fields.time) ?? parseHyperliquidStamp(qFields.resolutionDeadline) ?? 0\n}\n","import { hyperliquidApiBaseUrl, isHyperliquidChainSupported } from '../hyperliquid/support.js'\nimport {\n formatHyperliquidStamp,\n formatOutcomeQuestion,\n formatOutcomeRules,\n outcomeAssetId,\n outcomeBalanceCoin,\n outcomeEncoding,\n outcomeExpiryUnix,\n outcomeFieldMap,\n outcomeTradeCoin,\n questionForOutcome,\n resolveOutcomeSideLabel,\n type HyperliquidOutcomeMeta,\n type HyperliquidOutcomeQuestion,\n type HyperliquidOutcomeTemplate,\n} from './model.js'\n\nexport const HYPERLIQUID_OUTCOME_PROTOCOL_ID = 'hyperliquidOutcome'\nexport const HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID = 999\n\nexport type OutcomeBookLevel = { px: string; sz: string; n: number }\n\nexport type OutcomeBook = {\n coin: string\n time: number | null\n bids: OutcomeBookLevel[]\n asks: OutcomeBookLevel[]\n}\n\nexport type HyperliquidOutcomeMarket = {\n outcome: number\n name: string\n description: string\n question: string\n questionId: number | null\n sideNames: [string, string]\n quoteToken: string\n venue: string\n categories: string[]\n yesEncoding: number\n noEncoding: number\n yesCoin: string\n noCoin: string\n yesAssetId: number\n noAssetId: number\n yesBalanceCoin: string\n noBalanceCoin: string\n yesPrice: number | null\n noPrice: number | null\n yesPriceLabel: string | null\n noPriceLabel: string | null\n expiresAt: string | null\n endOfTrading: number\n status: 'live' | 'closed'\n tradable: boolean\n rules: string\n}\n\ntype OutcomeMetaResponse = {\n outcomes?: HyperliquidOutcomeMeta[]\n questions?: HyperliquidOutcomeQuestion[]\n}\n\ntype L2BookResponse = {\n coin?: string\n time?: number\n levels?: OutcomeBookLevel[][]\n}\n\nconst META_TTL_MS = 15_000\nconst metaCache = new Map<\n number,\n {\n at: number\n data: OutcomeMetaResponse\n mids: Record<string, string>\n templates: HyperliquidOutcomeTemplate[]\n }\n>()\n\nexport function clearHyperliquidOutcomeMetaCache(): void {\n metaCache.clear()\n}\n\nfunction outcomeFetchFailure(error: unknown): string {\n if (!(error instanceof Error)) return 'request failed'\n const cause = error.cause\n if (cause instanceof Error && cause.message.trim()) return cause.message\n return error.message\n}\n\nfunction outcomeErrorCode(error: unknown): string {\n if (!error || typeof error !== 'object') return ''\n if ('code' in error && error.code != null) return String(error.code)\n if (error instanceof Error && error.cause && typeof error.cause === 'object' && 'code' in error.cause) {\n return String((error.cause as { code?: unknown }).code ?? '')\n }\n return ''\n}\n\nconst OUTCOME_RETRYABLE_CODES = new Set([\n 'UND_ERR_CONNECT_TIMEOUT',\n 'UND_ERR_CONNECT',\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'ETIMEDOUT',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'EPIPE',\n])\n\nfunction outcomeFetchRetryable(error: unknown): boolean {\n if (error && typeof error === 'object' && 'outcomeFinal' in error) return false\n const code = outcomeErrorCode(error)\n return (\n OUTCOME_RETRYABLE_CODES.has(code) ||\n (error instanceof Error && (error.message === 'fetch failed' || error.message === 'connect timeout'))\n )\n}\n\ntype OutcomeNodeHttp = typeof import('node:http')\ntype OutcomeNodeHttps = typeof import('node:https')\n\nlet outcomeHttpsAgent: InstanceType<OutcomeNodeHttps['Agent']> | null = null\n\nasync function outcomeNodeModules(): Promise<{ http: OutcomeNodeHttp; https: OutcomeNodeHttps }> {\n const importer = new Function('specifier', 'return import(specifier)') as (\n specifier: string,\n ) => Promise<OutcomeNodeHttp | OutcomeNodeHttps>\n const [http, https] = await Promise.all([importer('node:http'), importer('node:https')])\n return { http: http as OutcomeNodeHttp, https: https as OutcomeNodeHttps }\n}\n\nasync function outcomeNodePost(urlString: string, payload: string): Promise<{ status: number; text: string }> {\n const { http, https } = await outcomeNodeModules()\n if (!outcomeHttpsAgent) {\n outcomeHttpsAgent = new https.Agent({ keepAlive: true, maxSockets: 4, timeout: 20_000 })\n }\n const url = new URL(urlString)\n const lib = url.protocol === 'http:' ? http : https\n return new Promise((resolve, reject) => {\n const req = lib.request(\n {\n protocol: url.protocol,\n hostname: url.hostname,\n port: url.port || undefined,\n path: `${url.pathname}${url.search}`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Content-Length': Buffer.byteLength(payload),\n },\n agent: url.protocol === 'https:' ? outcomeHttpsAgent ?? undefined : undefined,\n timeout: 20_000,\n },\n (res) => {\n const chunks: Buffer[] = []\n res.on('data', (chunk: Buffer) => chunks.push(chunk))\n res.on('end', () => {\n resolve({ status: res.statusCode ?? 0, text: Buffer.concat(chunks).toString('utf8') })\n })\n },\n )\n req.on('timeout', () => {\n const error = new Error('connect timeout') as Error & { code?: string }\n error.code = 'ETIMEDOUT'\n req.destroy(error)\n })\n req.on('error', reject)\n req.write(payload)\n req.end()\n })\n}\n\nasync function outcomeFetchPost(url: string, payload: string): Promise<{ status: number; text: string }> {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: payload,\n cache: 'no-store',\n })\n return { status: res.status, text: await res.text() }\n}\n\nasync function outcomeInfoPost<T>(chainId: number, body: Record<string, unknown>): Promise<T> {\n if (!isHyperliquidChainSupported(chainId)) {\n throw new Error(`Hyperliquid outcome markets require chainId 999 or 998 (got ${chainId}).`)\n }\n const url = `${hyperliquidApiBaseUrl(chainId)}/info`\n const payload = JSON.stringify(body)\n let last: unknown\n for (let attempt = 0; attempt < 3; attempt++) {\n try {\n const res =\n typeof window !== 'undefined' || process.env.VITEST\n ? await outcomeFetchPost(url, payload)\n : await outcomeNodePost(url, payload)\n if (res.status < 200 || res.status >= 300) {\n const error = new Error(`Hyperliquid info API failed (${res.status}): ${res.text.slice(0, 200)}`) as Error & {\n outcomeFinal?: boolean\n }\n if (res.status !== 429 && res.status !== 502 && res.status !== 503 && res.status !== 504) {\n error.outcomeFinal = true\n }\n throw error\n }\n return JSON.parse(res.text) as T\n } catch (error) {\n last = error\n if (!outcomeFetchRetryable(error) || attempt === 2) break\n await new Promise((resolve) => setTimeout(resolve, 250 * (attempt + 1)))\n }\n }\n throw new Error(`Hyperliquid info API failed: ${outcomeFetchFailure(last)}`)\n}\n\nfunction priceNumber(raw: string | undefined): number | null {\n if (raw == null || raw === '') return null\n const n = Number.parseFloat(raw)\n return Number.isFinite(n) ? n : null\n}\n\nfunction priceLabel(n: number | null): string | null {\n if (n == null) return null\n if (n >= 0 && n <= 1) return `${(n * 100).toFixed(1)}%`\n return String(n)\n}\n\nfunction marketFromMeta(\n outcome: HyperliquidOutcomeMeta,\n question: HyperliquidOutcomeQuestion | undefined,\n mids: Record<string, string>,\n nowSec: number,\n templates: readonly HyperliquidOutcomeTemplate[],\n): HyperliquidOutcomeMarket {\n const fields = outcomeFieldMap(outcome, question)\n const yesEncoding = outcomeEncoding(outcome.outcome, 0)\n const noEncoding = outcomeEncoding(outcome.outcome, 1)\n const yesCoin = outcomeTradeCoin(yesEncoding)\n const noCoin = outcomeTradeCoin(noEncoding)\n const yesPrice = priceNumber(mids[yesCoin])\n const noPrice = priceNumber(mids[noCoin])\n const endOfTrading = outcomeExpiryUnix(outcome, question)\n const closed = endOfTrading > 0 && nowSec >= endOfTrading\n const template = outcome.name.replace(/^template:/, '')\n const categories = [template, outcome.venue].filter((v): v is string => Boolean(v && v.trim()))\n return {\n outcome: outcome.outcome,\n name: outcome.name,\n description: outcome.description,\n question: formatOutcomeQuestion(outcome, question),\n questionId: question?.question ?? null,\n sideNames: [\n resolveOutcomeSideLabel(outcome.sideSpecs?.[0]?.name, fields, 'Yes'),\n resolveOutcomeSideLabel(outcome.sideSpecs?.[1]?.name, fields, 'No'),\n ],\n quoteToken: outcome.quoteToken?.trim() || 'USDC',\n venue: outcome.venue ?? '',\n categories,\n yesEncoding,\n noEncoding,\n yesCoin,\n noCoin,\n yesAssetId: outcomeAssetId(yesEncoding),\n noAssetId: outcomeAssetId(noEncoding),\n yesBalanceCoin: outcomeBalanceCoin(yesEncoding),\n noBalanceCoin: outcomeBalanceCoin(noEncoding),\n yesPrice,\n noPrice,\n yesPriceLabel: priceLabel(yesPrice),\n noPriceLabel: priceLabel(noPrice),\n expiresAt: formatHyperliquidStamp(endOfTrading > 0 ? endOfTrading : null),\n endOfTrading,\n status: closed ? 'closed' : 'live',\n tradable: !closed,\n rules: formatOutcomeRules(outcome, question, templates),\n }\n}\n\nasync function loadOutcomeSnapshot(chainId: number): Promise<{\n outcomes: HyperliquidOutcomeMeta[]\n questions: HyperliquidOutcomeQuestion[]\n mids: Record<string, string>\n templates: HyperliquidOutcomeTemplate[]\n}> {\n const hit = metaCache.get(chainId)\n if (hit && Date.now() - hit.at < META_TTL_MS) {\n return {\n outcomes: hit.data.outcomes ?? [],\n questions: hit.data.questions ?? [],\n mids: hit.mids,\n templates: hit.templates,\n }\n }\n const meta = await outcomeInfoPost<OutcomeMetaResponse>(chainId, { type: 'outcomeMeta' })\n let mids: Record<string, string> = {}\n try {\n mids = await outcomeInfoPost<Record<string, string>>(chainId, { type: 'allMids' })\n } catch {\n mids = {}\n }\n let templates: HyperliquidOutcomeTemplate[] = []\n try {\n const raw = await outcomeInfoPost<HyperliquidOutcomeTemplate[]>(chainId, { type: 'outcomeTemplates' })\n templates = Array.isArray(raw) ? raw : []\n } catch {\n templates = []\n }\n metaCache.set(chainId, { at: Date.now(), data: meta, mids, templates })\n return { outcomes: meta.outcomes ?? [], questions: meta.questions ?? [], mids, templates }\n}\n\nexport function hyperliquidOutcomeMatchesQuery(market: HyperliquidOutcomeMarket, query: string): boolean {\n const q = query.trim().toLowerCase()\n if (!q) return true\n const hay = [market.question, market.description, market.name, market.sideNames.join(' '), String(market.outcome)]\n .join(' ')\n .toLowerCase()\n return hay.includes(q)\n}\n\nexport async function listHyperliquidOutcomeMarkets(args: {\n chainId?: number\n query?: string\n}): Promise<{ markets: HyperliquidOutcomeMarket[]; questions: HyperliquidOutcomeQuestion[] }> {\n const chainId = args.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const snap = await loadOutcomeSnapshot(chainId)\n const nowSec = Math.floor(Date.now() / 1000)\n const markets = snap.outcomes\n .map((outcome) =>\n marketFromMeta(\n outcome,\n questionForOutcome(outcome.outcome, snap.questions),\n snap.mids,\n nowSec,\n snap.templates,\n ),\n )\n .filter((market) => hyperliquidOutcomeMatchesQuery(market, args.query ?? ''))\n return { markets, questions: snap.questions }\n}\n\nexport async function getHyperliquidOutcomeMarket(args: {\n chainId?: number\n outcomeId: number\n}): Promise<HyperliquidOutcomeMarket> {\n const { markets } = await listHyperliquidOutcomeMarkets({ chainId: args.chainId })\n const found = markets.find((m) => m.outcome === args.outcomeId)\n if (!found) throw new Error(`Hyperliquid outcome ${args.outcomeId} is not in outcomeMeta.`)\n return found\n}\n\nfunction normalizeLevels(rows: OutcomeBookLevel[] | undefined): OutcomeBookLevel[] {\n return (rows ?? []).map((row) => ({\n px: String(row.px ?? ''),\n sz: String(row.sz ?? ''),\n n: Number(row.n ?? 0),\n }))\n}\n\nconst CHANCE_LOOKBACK_MS = 14 * 24 * 60 * 60 * 1000\n\nexport type OutcomeChanceBar = {\n timestamp: number\n open: number\n high: number\n low: number\n close: number\n}\n\n/** Hourly Yes/No mid history from candleSnapshot. Closes are probabilities in 0–1. */\nexport async function fetchHyperliquidOutcomeChanceSeries(args: {\n chainId?: number\n coin: string\n}): Promise<OutcomeChanceBar[]> {\n const chainId = args.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const endTime = Date.now()\n const raw = await outcomeInfoPost<\n Array<{ t?: number; o?: string; h?: string; l?: string; c?: string }>\n >(chainId, {\n type: 'candleSnapshot',\n req: {\n coin: args.coin,\n interval: '1h',\n startTime: endTime - CHANCE_LOOKBACK_MS,\n endTime,\n },\n })\n if (!Array.isArray(raw)) return []\n return raw\n .map((bar) => {\n const timestamp = Number(bar.t)\n const open = Number(bar.o)\n const high = Number(bar.h)\n const low = Number(bar.l)\n const close = Number(bar.c)\n if (![timestamp, open, high, low, close].every(Number.isFinite)) return null\n return { timestamp, open, high, low, close }\n })\n .filter((bar): bar is OutcomeChanceBar => bar != null)\n}\n\nexport async function fetchHyperliquidOutcomeBook(args: {\n chainId?: number\n coin: string\n}): Promise<OutcomeBook> {\n const chainId = args.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const raw = await outcomeInfoPost<L2BookResponse | null>(chainId, { type: 'l2Book', coin: args.coin })\n if (raw == null || typeof raw !== 'object') {\n return { coin: args.coin, time: null, bids: [], asks: [] }\n }\n return {\n coin: raw.coin ?? args.coin,\n time: typeof raw.time === 'number' ? raw.time : null,\n bids: normalizeLevels(raw.levels?.[0]),\n asks: normalizeLevels(raw.levels?.[1]),\n }\n}\n\nexport type OutcomeBalance = {\n coin: string\n total: string\n hold: string\n outcome: number | null\n side: 'yes' | 'no' | null\n}\n\nexport type OutcomeOpenOrder = {\n coin: string\n side: string\n limitPx: string\n sz: string\n oid: number\n timestamp: number\n outcome: number | null\n outcomeSide: 'yes' | 'no' | null\n}\n\nfunction outcomeFromBalanceCoin(coin: string): { outcome: number; side: 'yes' | 'no' } | null {\n if (!coin.startsWith('+')) return null\n const encoding = Number.parseInt(coin.slice(1), 10)\n if (!Number.isFinite(encoding)) return null\n const sideDigit = encoding % 10\n if (sideDigit !== 0 && sideDigit !== 1) return null\n return { outcome: (encoding - sideDigit) / 10, side: sideDigit === 1 ? 'no' : 'yes' }\n}\n\nfunction outcomeFromTradeCoin(coin: string): { outcome: number; side: 'yes' | 'no' } | null {\n if (!coin.startsWith('#')) return null\n return outcomeFromBalanceCoin(`+${coin.slice(1)}`)\n}\n\nexport async function fetchHyperliquidOutcomeAccount(args: {\n chainId?: number\n user: string\n}): Promise<{\n quoteBalances: Array<{ coin: string; total: string; hold: string }>\n outcomeBalances: OutcomeBalance[]\n openOrders: OutcomeOpenOrder[]\n}> {\n const chainId = args.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const user = args.user.trim()\n if (!user) throw new Error('user address is required')\n const [spot, orders] = await Promise.all([\n outcomeInfoPost<{ balances?: Array<{ coin?: string; total?: string; hold?: string }> }>(chainId, {\n type: 'spotClearinghouseState',\n user,\n }),\n outcomeInfoPost<\n Array<{ coin?: string; side?: string; limitPx?: string; sz?: string; oid?: number; timestamp?: number }>\n >(chainId, { type: 'openOrders', user }),\n ])\n const quoteBalances: Array<{ coin: string; total: string; hold: string }> = []\n const outcomeBalances: OutcomeBalance[] = []\n for (const row of spot.balances ?? []) {\n const coin = String(row.coin ?? '')\n const total = String(row.total ?? '0')\n const hold = String(row.hold ?? '0')\n const parsed = outcomeFromBalanceCoin(coin)\n if (parsed) {\n outcomeBalances.push({ coin, total, hold, outcome: parsed.outcome, side: parsed.side })\n } else if (coin && !coin.startsWith('#')) {\n quoteBalances.push({ coin, total, hold })\n }\n }\n const openOrders: OutcomeOpenOrder[] = []\n for (const row of orders ?? []) {\n const coin = String(row.coin ?? '')\n const parsed = outcomeFromTradeCoin(coin)\n if (!parsed) continue\n openOrders.push({\n coin,\n side: String(row.side ?? ''),\n limitPx: String(row.limitPx ?? ''),\n sz: String(row.sz ?? ''),\n oid: Number(row.oid ?? 0),\n timestamp: Number(row.timestamp ?? 0),\n outcome: parsed.outcome,\n outcomeSide: parsed.side,\n })\n }\n return { quoteBalances, outcomeBalances, openOrders }\n}\n","export type HyperliquidOutcomePurposeAction =\n | 'order'\n | 'cancel'\n | 'split'\n | 'merge'\n | 'mergeQuestion'\n | 'negate'\n\nexport function buildHyperliquidOutcomePurposePrefill(args: {\n action: HyperliquidOutcomePurposeAction\n question?: string\n side?: 'yes' | 'no'\n isBuy?: boolean\n szHuman?: string\n limitPxHuman?: string\n tif?: string\n amountHuman?: string\n oid?: number\n}): string {\n const q = (args.question ?? '').trim()\n const topic = q ? ` ${q}` : ''\n const side = args.side === 'no' ? 'No' : args.side === 'yes' ? 'Yes' : ''\n switch (args.action) {\n case 'order': {\n const dir = args.isBuy === false ? 'sell' : 'buy'\n const tif = (args.tif ?? 'gtc').toUpperCase()\n return `Hyperliquid outcome: ${dir} ${side}${topic} ${args.szHuman ?? ''} @ ${args.limitPxHuman ?? ''} ${tif}`\n .replace(/\\s+/g, ' ')\n .trim()\n }\n case 'cancel':\n return `Hyperliquid outcome: cancel order ${args.oid ?? ''}${topic}`.replace(/\\s+/g, ' ').trim()\n case 'split':\n return `Hyperliquid outcome: split ${args.amountHuman ?? ''} quote into Yes+No${topic}`\n .replace(/\\s+/g, ' ')\n .trim()\n case 'merge':\n return `Hyperliquid outcome: merge Yes+No into quote ${args.amountHuman ?? 'max'}${topic}`\n .replace(/\\s+/g, ' ')\n .trim()\n case 'mergeQuestion':\n return `Hyperliquid outcome: merge question into quote ${args.amountHuman ?? 'max'}${topic}`\n .replace(/\\s+/g, ' ')\n .trim()\n case 'negate':\n return `Hyperliquid outcome: negate ${side || 'No'}${topic} ${args.amountHuman ?? ''}`\n .replace(/\\s+/g, ' ')\n .trim()\n default:\n return 'Hyperliquid outcome'\n }\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","/** Default MPC sign-request agreement window for fast-moving DeFi protocols (30 minutes). */\nexport const DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS = 30 * 60\n\n/** Protocol ids that default to 30-minute expiry when `expiryDate` is omitted on multisign MCP tools. */\nexport const DEFI_PROTOCOLS_WITH_30MIN_EXPIRY = new Set([\n 'uniswap-v4',\n 'gmx',\n 'hyperliquid',\n 'arcus',\n 'curve-dao',\n 'aerodrome',\n 'pendle',\n 'derive',\n 'trueo',\n 'hyperliquidOutcome',\n])\n\nexport function defiMultisignExpiryUnixSeconds(\n protocolId: string | undefined,\n explicitExpiryDate?: number | null,\n): number | undefined {\n if (typeof explicitExpiryDate === 'number' && Number.isFinite(explicitExpiryDate) && explicitExpiryDate > 0) {\n return Math.floor(explicitExpiryDate)\n }\n if (protocolId && DEFI_PROTOCOLS_WITH_30MIN_EXPIRY.has(protocolId)) {\n return Math.floor(Date.now() / 1000) + DEFAULT_DEFI_MULTISIGN_EXPIRY_SECONDS\n }\n return undefined\n}\n","import { encode as encodeMsgpack } from '@msgpack/msgpack'\nimport { keccak256, type Hex } from 'viem'\n\nexport type HyperliquidL1Action = Record<string, unknown>\n\nconst EXCHANGE_DOMAIN = {\n name: 'Exchange',\n version: '1',\n chainId: 1337,\n verifyingContract: '0x0000000000000000000000000000000000000000',\n} as const\n\nconst AGENT_TYPES = {\n Agent: [\n { name: 'source', type: 'string' },\n { name: 'connectionId', type: 'bytes32' },\n ],\n} as const\n\n/**\n * Normalize values for Hyperliquid wire msgpack (matches @nktkas/hyperliquid signing).\n */\nfunction adjustMsgpackValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(adjustMsgpackValue)\n if (typeof value === 'object' && value !== null) {\n const result: Record<string, unknown> = {}\n for (const key of Object.keys(value)) {\n const entry = (value as Record<string, unknown>)[key]\n if (entry !== undefined) result[key] = adjustMsgpackValue(entry)\n }\n return result\n }\n if (typeof value === 'number' && Number.isInteger(value) && (value >= 0x100000000 || value < -0x80000000)) {\n return BigInt(value)\n }\n return value\n}\n\nfunction toUint64Bytes(n: number): Uint8Array {\n const bytes = new Uint8Array(8)\n new DataView(bytes.buffer).setBigUint64(0, BigInt(n))\n return bytes\n}\n\nfunction concatBytes(...parts: Uint8Array[]): Uint8Array {\n const total = parts.reduce((sum, p) => sum + p.length, 0)\n const out = new Uint8Array(total)\n let offset = 0\n for (const p of parts) {\n out.set(p, offset)\n offset += p.length\n }\n return out\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const h = hex.startsWith('0x') ? hex.slice(2) : hex\n const bytes = new Uint8Array(h.length / 2)\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(h.slice(i * 2, i * 2 + 2), 16)\n }\n return bytes\n}\n\nexport function createHyperliquidL1ActionHash(args: {\n action: HyperliquidL1Action\n nonce: number\n vaultAddress?: Hex\n expiresAfter?: number\n}): Hex {\n const { action, nonce, vaultAddress, expiresAfter } = args\n const actionBytes = encodeMsgpack(adjustMsgpackValue(action))\n const nonceBytes = toUint64Bytes(nonce)\n const vaultMarker = vaultAddress ? new Uint8Array([1]) : new Uint8Array([0])\n const vaultBytes = vaultAddress ? hexToBytes(vaultAddress) : new Uint8Array()\n const expiresMarker = expiresAfter !== undefined ? new Uint8Array([0]) : new Uint8Array()\n const expiresBytes = expiresAfter !== undefined ? toUint64Bytes(expiresAfter) : new Uint8Array()\n const bytes = concatBytes(actionBytes, nonceBytes, vaultMarker, vaultBytes, expiresMarker, expiresBytes)\n return keccak256(bytes)\n}\n\nexport function buildHyperliquidAgentTypedData(args: {\n action: HyperliquidL1Action\n nonce: number\n isTestnet?: boolean\n vaultAddress?: Hex\n expiresAfter?: number\n}) {\n const connectionId = createHyperliquidL1ActionHash(args)\n const source = args.isTestnet ? 'b' : 'a'\n return {\n domain: EXCHANGE_DOMAIN,\n types: AGENT_TYPES,\n primaryType: 'Agent' as const,\n message: {\n source,\n connectionId,\n },\n connectionId,\n nonce: args.nonce,\n action: args.action,\n }\n}\n\nexport type HyperliquidUpdateLeverageAction = {\n type: 'updateLeverage'\n asset: number\n isCross: boolean\n leverage: number\n}\n\nexport function buildHyperliquidUpdateLeverageAction(args: {\n asset: number\n leverage: number\n isCross?: boolean\n}): HyperliquidUpdateLeverageAction {\n const leverage = Math.trunc(args.leverage)\n if (!Number.isFinite(leverage) || leverage < 1) {\n throw new Error('leverage must be a positive integer')\n }\n return {\n type: 'updateLeverage',\n asset: args.asset,\n isCross: args.isCross !== false,\n leverage,\n }\n}\n\nexport type HyperliquidBorrowLendOperation = 'supply' | 'withdraw' | 'repay' | 'borrow'\n\nexport type HyperliquidBorrowLendAction = {\n type: 'borrowLend'\n operation: HyperliquidBorrowLendOperation\n token: number\n amount: string | null\n}\n\nexport function parseHyperliquidBorrowLendAmount(amountHuman: string | null | undefined): string | null {\n if (amountHuman == null) return null\n const trimmed = String(amountHuman).trim()\n if (!trimmed || trimmed.toLowerCase() === 'max') return null\n return hyperliquidFloatToWire(trimmed)\n}\n\nexport function buildHyperliquidBorrowLendAction(args: {\n operation: HyperliquidBorrowLendOperation\n token: number\n amount: string | null\n}): HyperliquidBorrowLendAction {\n const operation = args.operation\n if (operation !== 'supply' && operation !== 'withdraw' && operation !== 'repay' && operation !== 'borrow') {\n throw new Error('operation must be supply, withdraw, repay, or borrow')\n }\n const token = Math.trunc(args.token)\n if (!Number.isFinite(token) || token < 0) {\n throw new Error('token must be a non-negative integer token index')\n }\n return {\n type: 'borrowLend',\n operation,\n token,\n amount: args.amount,\n }\n}\n\nexport type HyperliquidL1Tif = 'Alo' | 'Gtc' | 'Ioc'\nexport type HyperliquidTpslExecMode = 'limit_at_trigger' | 'market'\nexport type HyperliquidOrderGrouping = 'na' | 'normalTpsl' | 'positionTpsl'\n\nexport type HyperliquidOrderWire = {\n a: number\n b: boolean\n p: string\n s: string\n r: boolean\n t: { limit: { tif: HyperliquidL1Tif } } | { trigger: { isMarket: boolean; triggerPx: string; tpsl: 'tp' | 'sl' } }\n c?: string\n}\n\nexport type HyperliquidOrderAction = {\n type: 'order'\n orders: HyperliquidOrderWire[]\n grouping: HyperliquidOrderGrouping\n}\n\n/** Wire-format decimal string for L1 order prices/sizes (matches Python float_to_wire). */\nexport function hyperliquidFloatToWire(value: string | number): string {\n const n = typeof value === 'number' ? value : Number.parseFloat(String(value).trim())\n if (!Number.isFinite(n)) throw new Error('Invalid Hyperliquid wire number.')\n const rounded = n.toFixed(8)\n if (Math.abs(Number.parseFloat(rounded) - n) >= 1e-12) {\n throw new Error(`Hyperliquid wire value ${value} has too many decimal places.`)\n }\n const normalized = Number(rounded === '-0' ? '0' : rounded)\n return String(normalized)\n}\n\nexport function hyperliquidL1TifFromKey(tif: string | undefined): HyperliquidL1Tif {\n const key = String(tif ?? 'gtc').trim().toLowerCase()\n if (key === 'alo') return 'Alo'\n if (key === 'ioc') return 'Ioc'\n if (key === 'gtc') return 'Gtc'\n throw new Error(`Unknown time-in-force: ${tif}. Use alo, gtc, or ioc.`)\n}\n\nexport function buildHyperliquidLimitOrderWire(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: string\n}): HyperliquidOrderWire {\n return {\n a: args.asset,\n b: args.isBuy,\n p: hyperliquidFloatToWire(args.limitPxHuman),\n s: hyperliquidFloatToWire(args.szHuman),\n r: Boolean(args.reduceOnly),\n t: { limit: { tif: hyperliquidL1TifFromKey(args.tif) } },\n }\n}\n\nexport function buildHyperliquidTriggerOrderWire(args: {\n asset: number\n isBuy: boolean\n szHuman: string\n triggerPxHuman: string\n tpsl: 'tp' | 'sl'\n tpslExecMode?: HyperliquidTpslExecMode\n /** Limit px after trigger; defaults to trigger px for limit_at_trigger. */\n limitPxHuman?: string\n}): HyperliquidOrderWire {\n const mode = args.tpslExecMode ?? 'limit_at_trigger'\n const triggerPx = hyperliquidFloatToWire(args.triggerPxHuman)\n const limitPx =\n mode === 'market'\n ? triggerPx\n : hyperliquidFloatToWire(args.limitPxHuman ?? args.triggerPxHuman)\n return {\n a: args.asset,\n b: args.isBuy,\n p: limitPx,\n s: hyperliquidFloatToWire(args.szHuman),\n r: true,\n t: {\n trigger: {\n isMarket: mode === 'market',\n triggerPx,\n tpsl: args.tpsl,\n },\n },\n }\n}\n\nexport function validateHyperliquidTpslGeometry(args: {\n isBuy: boolean\n entryPxHuman: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n}): void {\n const entry = Number.parseFloat(String(args.entryPxHuman).trim())\n const tp =\n args.takeProfitTriggerPxHuman?.trim() != null && args.takeProfitTriggerPxHuman.trim() !== ''\n ? Number.parseFloat(args.takeProfitTriggerPxHuman.trim())\n : null\n const sl =\n args.stopLossTriggerPxHuman?.trim() != null && args.stopLossTriggerPxHuman.trim() !== ''\n ? Number.parseFloat(args.stopLossTriggerPxHuman.trim())\n : null\n if (!Number.isFinite(entry)) throw new Error('Invalid entry limit price for TP/SL validation.')\n if (tp != null && !Number.isFinite(tp)) throw new Error('Invalid take-profit trigger price.')\n if (sl != null && !Number.isFinite(sl)) throw new Error('Invalid stop-loss trigger price.')\n if (args.isBuy) {\n if (sl != null && sl >= entry) {\n throw new Error('Long stop-loss must be below entry price.')\n }\n if (tp != null && tp <= entry) {\n throw new Error('Long take-profit must be above entry price.')\n }\n } else {\n if (sl != null && sl <= entry) {\n throw new Error('Short stop-loss must be above entry price.')\n }\n if (tp != null && tp >= entry) {\n throw new Error('Short take-profit must be below entry price.')\n }\n }\n}\n\nexport function buildHyperliquidNormalTpslOrderWires(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: string\n takeProfitTriggerPxHuman?: string\n stopLossTriggerPxHuman?: string\n tpslExecMode?: HyperliquidTpslExecMode\n}): HyperliquidOrderWire[] {\n validateHyperliquidTpslGeometry({\n isBuy: args.isBuy,\n entryPxHuman: args.limitPxHuman,\n takeProfitTriggerPxHuman: args.takeProfitTriggerPxHuman,\n stopLossTriggerPxHuman: args.stopLossTriggerPxHuman,\n })\n const orders: HyperliquidOrderWire[] = [\n buildHyperliquidLimitOrderWire({\n asset: args.asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n }),\n ]\n const closeIsBuy = !args.isBuy\n const tp = args.takeProfitTriggerPxHuman?.trim()\n const sl = args.stopLossTriggerPxHuman?.trim()\n if (tp) {\n orders.push(\n buildHyperliquidTriggerOrderWire({\n asset: args.asset,\n isBuy: closeIsBuy,\n szHuman: args.szHuman,\n triggerPxHuman: tp,\n tpsl: 'tp',\n tpslExecMode: args.tpslExecMode,\n }),\n )\n }\n if (sl) {\n orders.push(\n buildHyperliquidTriggerOrderWire({\n asset: args.asset,\n isBuy: closeIsBuy,\n szHuman: args.szHuman,\n triggerPxHuman: sl,\n tpsl: 'sl',\n tpslExecMode: args.tpslExecMode,\n }),\n )\n }\n return orders\n}\n\nexport function buildHyperliquidOrderAction(args: {\n orders: HyperliquidOrderWire[]\n grouping?: HyperliquidOrderGrouping\n}): HyperliquidOrderAction {\n return {\n type: 'order',\n orders: args.orders,\n grouping: args.grouping ?? 'na',\n }\n}\n\n/** Venue wire: `price` → `{ px }`, `percentage` → `{ pct: \"2.0000%\" }`. */\nexport type HyperliquidTrailingOffsetType = 'price' | 'percentage'\n\nexport type HyperliquidTrailingRetracement = { pct: string } | { px: string }\n\nexport type HyperliquidTrailingStopAction = {\n type: 'trailingStop'\n asset: number\n isBuy: boolean\n sz: string\n reduceOnly: boolean\n retracement: HyperliquidTrailingRetracement\n activationPx: string | null\n}\n\nexport type HyperliquidTrailingStopParams = {\n offsetType: HyperliquidTrailingOffsetType\n offsetHuman: string\n activationPxHuman?: string\n}\n\nconst TRAILING_PCT_DECIMALS = 4\n\nexport function parseHyperliquidTrailingOffsetType(value: string | undefined): HyperliquidTrailingOffsetType {\n const key = String(value ?? 'percentage').trim().toLowerCase()\n if (key === 'price' || key === 'px' || key === 'distance') return 'price'\n if (key === 'percentage' || key === 'percent' || key === 'pct' || key === '%') return 'percentage'\n throw new Error('trailingOffsetType must be price or percentage.')\n}\n\nexport function hyperliquidTrailingPercentToWire(value: string | number): string {\n const raw = typeof value === 'number' ? String(value) : String(value).trim()\n const stripped = raw.endsWith('%') ? raw.slice(0, -1).trim() : raw\n const n = Number.parseFloat(stripped)\n if (!Number.isFinite(n) || n <= 0) {\n throw new Error('Trailing retracement percentage must be greater than zero.')\n }\n return `${n.toFixed(TRAILING_PCT_DECIMALS)}%`\n}\n\nexport function buildHyperliquidTrailingRetracement(args: {\n offsetType: HyperliquidTrailingOffsetType\n offsetHuman: string\n}): HyperliquidTrailingRetracement {\n const offset = String(args.offsetHuman ?? '').trim()\n if (!offset) throw new Error('trailingOffsetHuman is required.')\n if (args.offsetType === 'percentage') {\n return { pct: hyperliquidTrailingPercentToWire(offset) }\n }\n const px = hyperliquidFloatToWire(offset)\n if (Number.parseFloat(px) <= 0) {\n throw new Error('Trailing retracement distance must be greater than zero.')\n }\n return { px }\n}\n\nexport const HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR = 'Invalid trailing activation price.'\n\nconst POSITIVE_DECIMAL_RE = /^\\d+(\\.\\d+)?$/\n\n/** Empty/whitespace → omit. Otherwise a finite price greater than zero (full decimal, not a parseFloat prefix). */\nexport function parseHyperliquidTrailingActivationPx(\n value: string | number | undefined | null,\n): string | null {\n if (value == null) return null\n const raw = String(value).trim().replace(/,/g, '')\n if (!raw) return null\n if (!POSITIVE_DECIMAL_RE.test(raw)) {\n throw new Error(HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR)\n }\n const px = Number.parseFloat(raw)\n if (!Number.isFinite(px) || px <= 0) {\n throw new Error(HYPERLIQUID_TRAILING_ACTIVATION_PX_ERROR)\n }\n hyperliquidFloatToWire(raw)\n return raw\n}\n\nexport function isHyperliquidTrailingActivationPxHuman(\n value: string | number | undefined | null,\n): boolean {\n try {\n parseHyperliquidTrailingActivationPx(value)\n return true\n } catch {\n return false\n }\n}\n\nexport function validateHyperliquidTrailingStopParams(args: HyperliquidTrailingStopParams): void {\n buildHyperliquidTrailingRetracement({\n offsetType: args.offsetType,\n offsetHuman: args.offsetHuman,\n })\n parseHyperliquidTrailingActivationPx(args.activationPxHuman)\n}\n\nexport function parseHyperliquidTrailingStopParams(args: {\n trailingOffsetHuman?: string\n trailingOffsetType?: string\n trailingActivationPxHuman?: string\n}): HyperliquidTrailingStopParams | null {\n const offset = args.trailingOffsetHuman?.trim()\n if (!offset) return null\n const params: HyperliquidTrailingStopParams = {\n offsetType: parseHyperliquidTrailingOffsetType(args.trailingOffsetType),\n offsetHuman: offset,\n activationPxHuman: args.trailingActivationPxHuman?.trim() || undefined,\n }\n validateHyperliquidTrailingStopParams(params)\n return params\n}\n\n/** Native Hyperliquid L1 action — not an `order` trigger child. */\nexport function buildHyperliquidTrailingStopAction(args: {\n asset: number\n isBuy: boolean\n szHuman: string\n reduceOnly?: boolean\n offsetType: HyperliquidTrailingOffsetType\n offsetHuman: string\n activationPxHuman?: string\n}): HyperliquidTrailingStopAction {\n const asset = Math.trunc(args.asset)\n if (!Number.isFinite(asset) || asset < 0) {\n throw new Error('asset must be a non-negative integer.')\n }\n const retracement = buildHyperliquidTrailingRetracement({\n offsetType: args.offsetType,\n offsetHuman: args.offsetHuman,\n })\n const activation = parseHyperliquidTrailingActivationPx(args.activationPxHuman)\n return {\n type: 'trailingStop',\n asset,\n isBuy: Boolean(args.isBuy),\n sz: hyperliquidFloatToWire(args.szHuman),\n reduceOnly: Boolean(args.reduceOnly),\n retracement,\n activationPx: activation ? hyperliquidFloatToWire(activation) : null,\n }\n}\n\nexport type HyperliquidTrailingTriggerDisplay = {\n retracement: string\n activationPx: string | null\n bestPx: string | null\n}\n\n/** Parse frontend `triggerCondition` e.g. `retracement 2%, activation above 100, best 110`. */\nexport function parseHyperliquidTrailingTriggerCondition(\n triggerCondition: string | undefined,\n): HyperliquidTrailingTriggerDisplay | null {\n const text = String(triggerCondition ?? '').trim()\n if (!text) return null\n const retracement = text.match(/(?:^|,\\s*)retracement\\s+([^,]+)/i)?.[1]?.trim()\n if (!retracement) return null\n const activationRaw = text.match(/(?:^|,\\s*)activation\\s+(?:above|below)\\s+([^,]+)/i)?.[1]?.trim()\n const bestMatch = text.match(/(?:^|,\\s*)best\\s+([^,]+)/i)\n const bestRaw = bestMatch?.[1]?.trim()\n const bestPx =\n bestRaw && bestRaw.toLowerCase() !== 'waiting' && Number.isFinite(Number.parseFloat(bestRaw))\n ? bestRaw\n : null\n const activationPx =\n activationRaw && Number.isFinite(Number.parseFloat(activationRaw)) ? activationRaw : null\n return { retracement, activationPx, bestPx }\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport { defiMultisignExpiryUnixSeconds } from '../../../core/expiry.js'\nimport {\n buildHyperliquidAgentTypedData,\n buildHyperliquidLimitOrderWire,\n buildHyperliquidOrderAction,\n hyperliquidFloatToWire,\n type HyperliquidL1Action,\n} from '../hyperliquid/l1Signing.js'\nimport { isHyperliquidChainSupported } from '../hyperliquid/support.js'\nimport { HYPERLIQUID_OUTCOME_PROTOCOL_ID } from './api.js'\nimport { outcomeAssetId, outcomeEncoding, outcomeSideIndex, outcomeTradeCoin } from './model.js'\n\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'\n\ntype OutcomeMultisignCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n purposeText: string\n nonce?: number\n expiryDate?: number\n}\n\nfunction assertOutcomeChain(chainId: number) {\n if (!isHyperliquidChainSupported(chainId)) {\n throw new Error(`Hyperliquid outcome markets require chainId 999 or 998 (got ${chainId}).`)\n }\n}\n\nfunction outcomeExchangeLeg(args: {\n action: HyperliquidL1Action\n nonce: number\n chainId: number\n audit: Record<string, unknown>\n}) {\n const isTestnet = args.chainId === 998\n const typed = buildHyperliquidAgentTypedData({\n action: args.action,\n nonce: args.nonce,\n isTestnet,\n })\n return {\n typedData: {\n domain: typed.domain,\n types: typed.types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: 'hyperliquid_exchange' as const,\n chainId: args.chainId,\n isTestnet,\n action: args.action,\n nonce: args.nonce,\n },\n audit: {\n ...args.audit,\n nonce: args.nonce,\n connectionId: typed.connectionId,\n },\n }\n}\n\nfunction finishOutcomeMultisign(args: OutcomeMultisignCommon, leg: ReturnType<typeof outcomeExchangeLeg>) {\n assertOutcomeChain(args.chainId)\n const expiryDate = defiMultisignExpiryUnixSeconds(HYPERLIQUID_OUTCOME_PROTOCOL_ID, args.expiryDate)\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: ZERO_ADDRESS,\n expiryDate,\n legs: [leg],\n })\n}\n\nexport type HyperliquidOutcomeOrderArgs = OutcomeMultisignCommon & {\n outcome: number\n side: 'yes' | 'no'\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: string\n reduceOnly?: boolean\n}\n\nexport function buildHyperliquidOutcomeOrderAction(args: {\n outcome: number\n side: 'yes' | 'no'\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n tif?: string\n reduceOnly?: boolean\n}) {\n const encoding = outcomeEncoding(args.outcome, outcomeSideIndex(args.side))\n const asset = outcomeAssetId(encoding)\n return {\n encoding,\n coin: outcomeTradeCoin(encoding),\n asset,\n action: buildHyperliquidOrderAction({\n orders: [\n buildHyperliquidLimitOrderWire({\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n tif: args.tif,\n reduceOnly: args.reduceOnly,\n }),\n ],\n grouping: 'na',\n }),\n }\n}\n\nexport async function buildEvmMultisignBodyHyperliquidOutcomeOrder(args: HyperliquidOutcomeOrderArgs) {\n const built = buildHyperliquidOutcomeOrderAction(args)\n const nonce = args.nonce ?? Date.now()\n return finishOutcomeMultisign(\n args,\n outcomeExchangeLeg({\n action: built.action,\n nonce,\n chainId: args.chainId,\n audit: {\n protocol: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n action: 'order',\n outcome: args.outcome,\n side: args.side,\n coin: built.coin,\n asset: built.asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n },\n }),\n )\n}\n\nexport function buildHyperliquidOutcomeCancelAction(args: {\n outcome: number\n side: 'yes' | 'no'\n oid: number\n}) {\n const encoding = outcomeEncoding(args.outcome, outcomeSideIndex(args.side))\n const asset = outcomeAssetId(encoding)\n const oid = Math.trunc(args.oid)\n if (!Number.isFinite(oid) || oid <= 0) throw new Error('oid must be a positive order id')\n return {\n encoding,\n coin: outcomeTradeCoin(encoding),\n asset,\n action: {\n type: 'cancel',\n cancels: [{ a: asset, o: oid }],\n },\n }\n}\n\nexport async function buildEvmMultisignBodyHyperliquidOutcomeCancel(\n args: OutcomeMultisignCommon & { outcome: number; side: 'yes' | 'no'; oid: number },\n) {\n const built = buildHyperliquidOutcomeCancelAction(args)\n const nonce = args.nonce ?? Date.now()\n return finishOutcomeMultisign(\n args,\n outcomeExchangeLeg({\n action: built.action,\n nonce,\n chainId: args.chainId,\n audit: {\n protocol: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n action: 'cancel',\n outcome: args.outcome,\n side: args.side,\n oid: args.oid,\n coin: built.coin,\n asset: built.asset,\n },\n }),\n )\n}\n\nfunction positiveWireAmount(amountHuman: string, label: string): string {\n const wire = hyperliquidFloatToWire(amountHuman)\n if (Number.parseFloat(wire) <= 0) throw new Error(`${label} must be greater than zero`)\n return wire\n}\n\nexport function buildHyperliquidOutcomeSplitAction(args: { outcome: number; amountHuman: string }) {\n const outcome = Math.trunc(args.outcome)\n outcomeEncoding(outcome, 0)\n return {\n type: 'userOutcome' as const,\n splitOutcome: { outcome, amount: positiveWireAmount(args.amountHuman, 'amount') },\n }\n}\n\nexport async function buildEvmMultisignBodyHyperliquidOutcomeSplit(\n args: OutcomeMultisignCommon & { outcome: number; amountHuman: string },\n) {\n const action = buildHyperliquidOutcomeSplitAction(args)\n const nonce = args.nonce ?? Date.now()\n return finishOutcomeMultisign(\n args,\n outcomeExchangeLeg({\n action,\n nonce,\n chainId: args.chainId,\n audit: {\n protocol: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n action: 'split',\n outcome: action.splitOutcome.outcome,\n amount: action.splitOutcome.amount,\n },\n }),\n )\n}\n\nexport function buildHyperliquidOutcomeMergeAction(args: {\n outcome: number\n amountHuman?: string\n amountMax?: boolean\n}) {\n const outcome = Math.trunc(args.outcome)\n outcomeEncoding(outcome, 0)\n const amount =\n args.amountMax || !args.amountHuman?.trim() ? null : positiveWireAmount(args.amountHuman, 'amount')\n return {\n type: 'userOutcome' as const,\n mergeOutcome: { outcome, amount },\n }\n}\n\nexport async function buildEvmMultisignBodyHyperliquidOutcomeMerge(\n args: OutcomeMultisignCommon & { outcome: number; amountHuman?: string; amountMax?: boolean },\n) {\n const action = buildHyperliquidOutcomeMergeAction(args)\n const nonce = args.nonce ?? Date.now()\n return finishOutcomeMultisign(\n args,\n outcomeExchangeLeg({\n action,\n nonce,\n chainId: args.chainId,\n audit: {\n protocol: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n action: 'merge',\n outcome: action.mergeOutcome.outcome,\n amount: action.mergeOutcome.amount,\n },\n }),\n )\n}\n\nexport function buildHyperliquidOutcomeMergeQuestionAction(args: {\n question: number\n amountHuman?: string\n amountMax?: boolean\n}) {\n const question = Math.trunc(args.question)\n if (!Number.isFinite(question) || question < 0) throw new Error('question must be a non-negative integer')\n const amount =\n args.amountMax || !args.amountHuman?.trim() ? null : positiveWireAmount(args.amountHuman, 'amount')\n return {\n type: 'userOutcome' as const,\n mergeQuestion: { question, amount },\n }\n}\n\nexport async function buildEvmMultisignBodyHyperliquidOutcomeMergeQuestion(\n args: OutcomeMultisignCommon & { question: number; amountHuman?: string; amountMax?: boolean },\n) {\n const action = buildHyperliquidOutcomeMergeQuestionAction(args)\n const nonce = args.nonce ?? Date.now()\n return finishOutcomeMultisign(\n args,\n outcomeExchangeLeg({\n action,\n nonce,\n chainId: args.chainId,\n audit: {\n protocol: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n action: 'mergeQuestion',\n question: action.mergeQuestion.question,\n amount: action.mergeQuestion.amount,\n },\n }),\n )\n}\n\nexport function buildHyperliquidOutcomeNegateAction(args: {\n question: number\n outcome: number\n amountHuman: string\n}) {\n const question = Math.trunc(args.question)\n const outcome = Math.trunc(args.outcome)\n if (!Number.isFinite(question) || question < 0) throw new Error('question must be a non-negative integer')\n outcomeEncoding(outcome, 0)\n return {\n type: 'userOutcome' as const,\n negateOutcome: {\n question,\n outcome,\n amount: positiveWireAmount(args.amountHuman, 'amount'),\n },\n }\n}\n\nexport async function buildEvmMultisignBodyHyperliquidOutcomeNegate(\n args: OutcomeMultisignCommon & { question: number; outcome: number; amountHuman: string },\n) {\n const action = buildHyperliquidOutcomeNegateAction(args)\n const nonce = args.nonce ?? Date.now()\n return finishOutcomeMultisign(\n args,\n outcomeExchangeLeg({\n action,\n nonce,\n chainId: args.chainId,\n audit: {\n protocol: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n action: 'negate',\n question: action.negateOutcome.question,\n outcome: action.negateOutcome.outcome,\n amount: action.negateOutcome.amount,\n },\n }),\n )\n}\n","import {\n fetchHyperliquidOutcomeAccount,\n fetchHyperliquidOutcomeBook,\n getHyperliquidOutcomeMarket,\n HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID,\n listHyperliquidOutcomeMarkets,\n type HyperliquidOutcomeMarket,\n} from './api.js'\n\nexport function hyperliquidOutcomeToPredictionFields(market: HyperliquidOutcomeMarket, chainId: number) {\n return {\n venue: 'hyperliquid' as const,\n venueMarketId: String(market.outcome),\n question: market.question,\n categories: market.categories,\n yesPrice: market.yesPrice,\n noPrice: market.noPrice,\n yesPriceLabel: market.yesPriceLabel,\n noPriceLabel: market.noPriceLabel,\n volume: '—',\n tvl: null,\n expiresAt: market.expiresAt,\n expiresAtLabel: market.expiresAt,\n tradingEndsLabel: market.expiresAt ? `Settles ${market.expiresAt}` : 'Settlement time not listed',\n endOfTrading: market.endOfTrading,\n status: market.status,\n outcome: market.outcome,\n statusUpdatedAt: null,\n resolutionLabel: null,\n chainId,\n paymentSymbol: market.quoteToken,\n tradable: market.tradable,\n rules: market.rules,\n source: market.name,\n }\n}\n\nexport async function hyperliquidOutcomeFetchMarketsSummary(input: {\n chainId?: number\n query?: string\n limit?: number\n offset?: number\n}) {\n const chainId = input.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const { markets } = await listHyperliquidOutcomeMarkets({ chainId, query: input.query })\n const offset = Math.max(input.offset ?? 0, 0)\n const limit = input.limit ?? 20\n const page = markets.slice(offset, offset + limit)\n const nextOffset = offset + page.length\n return {\n markets: page,\n hasMore: nextOffset < markets.length,\n nextOffset,\n notes: page.length\n ? `${page.length} Hyperliquid outcome market(s). Yes price is the implied probability. Writes need load_defi_protocol hyperliquidOutcome.`\n : 'No Hyperliquid outcome markets matched.',\n }\n}\n\nexport async function hyperliquidOutcomeFetchMarketSummary(input: { chainId?: number; outcome: number }) {\n const chainId = input.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const market = await getHyperliquidOutcomeMarket({ chainId, outcomeId: input.outcome })\n const [yesBook, noBook] = await Promise.all([\n fetchHyperliquidOutcomeBook({ chainId, coin: market.yesCoin }),\n fetchHyperliquidOutcomeBook({ chainId, coin: market.noCoin }),\n ])\n return {\n ...market,\n yesBook,\n noBook,\n notes: 'Books are HyperCore l2Book for the #encoding coins. Do not add Yes/No shares to the node token list.',\n }\n}\n\nexport async function hyperliquidOutcomeFetchOrderbookSummary(input: {\n chainId?: number\n outcome: number\n side?: 'yes' | 'no'\n}) {\n const chainId = input.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const side = input.side ?? 'yes'\n const market = await getHyperliquidOutcomeMarket({ chainId, outcomeId: input.outcome })\n const coin = side === 'no' ? market.noCoin : market.yesCoin\n const book = await fetchHyperliquidOutcomeBook({ chainId, coin })\n return {\n outcome: market.outcome,\n side,\n book,\n notes: `${side} book for ${coin}.`,\n }\n}\n\nexport async function hyperliquidOutcomeFetchPositionsSummary(input: { chainId?: number; user: string }) {\n const chainId = input.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const account = await fetchHyperliquidOutcomeAccount({ chainId, user: input.user })\n return {\n quoteBalances: account.quoteBalances,\n outcomeBalances: account.outcomeBalances,\n notes: 'Outcome shares are HyperCore balances (+encoding), not ERC20s. Do not call add_to_token_registry.',\n }\n}\n\nexport async function hyperliquidOutcomeFetchOpenOrdersSummary(input: { chainId?: number; user: string }) {\n const chainId = input.chainId ?? HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID\n const account = await fetchHyperliquidOutcomeAccount({ chainId, user: input.user })\n return {\n openOrders: account.openOrders,\n notes: account.openOrders.length\n ? 'Cancel with ctm_hyperliquid_outcome_build_cancel_multisign using outcome, side, and oid.'\n : 'No open Hyperliquid outcome orders.',\n }\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { isHyperliquidChainSupported } from '../hyperliquid/support.js'\nimport { HYPERLIQUID_OUTCOME_PROTOCOL_ID } from './api.js'\n\nexport const hyperliquidOutcomeProtocolModule: ProtocolModule = {\n id: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const chainId = typeof ctx.chainId === 'number' ? ctx.chainId : Number(ctx.chainId)\n return Number.isFinite(chainId) && isHyperliquidChainSupported(chainId)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && token.kind === 'native'\n },\n actions: [\n {\n id: 'hyperliquidOutcome.order',\n protocolId: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Limit buy or sell a HIP-4 outcome side via Hyperliquid /exchange',\n commonParams: ['keyGen', 'purposeText'],\n params: {},\n },\n {\n id: 'hyperliquidOutcome.cancel',\n protocolId: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel a resting HIP-4 outcome order',\n commonParams: ['keyGen', 'purposeText'],\n params: {},\n },\n {\n id: 'hyperliquidOutcome.split',\n protocolId: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Split quote tokens into Yes and No shares',\n commonParams: ['keyGen', 'purposeText'],\n params: {},\n },\n {\n id: 'hyperliquidOutcome.merge',\n protocolId: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Merge Yes and No shares back into quote tokens',\n commonParams: ['keyGen', 'purposeText'],\n params: {},\n },\n {\n id: 'hyperliquidOutcome.merge-question',\n protocolId: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Merge Yes shares across a question into quote tokens',\n commonParams: ['keyGen', 'purposeText'],\n params: {},\n },\n {\n id: 'hyperliquidOutcome.negate',\n protocolId: HYPERLIQUID_OUTCOME_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Convert No shares of one outcome into Yes shares of the other outcomes',\n commonParams: ['keyGen', 'purposeText'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(hyperliquidOutcomeProtocolModule)\n\nexport * from './api.js'\nexport * from './model.js'\nexport * from './purpose.js'\nexport * from './multisign.js'\nexport * from './mcpSummaries.js'\n"]}