@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.
- package/dist/agent/catalog.cjs +1344 -22
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +1528 -9
- package/dist/agent/catalog.js +1316 -23
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +2 -0
- package/dist/agent/skills/continuum-dao-marketplace/SKILL.md +58 -0
- package/dist/agent/skills/hyperliquidOutcome/SKILL.md +47 -0
- package/dist/agent/skills/trueo/SKILL.md +64 -0
- package/dist/core/index.cjs +3 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +3 -1
- package/dist/core/index.js.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/protocols/evm/aerodrome/index.cjs.map +1 -1
- package/dist/protocols/evm/aerodrome/index.js.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +2274 -59
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +690 -2
- package/dist/protocols/evm/continuum-dao/index.js +2218 -61
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquidOutcome/index.cjs +1294 -0
- package/dist/protocols/evm/hyperliquidOutcome/index.cjs.map +1 -0
- package/dist/protocols/evm/hyperliquidOutcome/index.d.ts +465 -0
- package/dist/protocols/evm/hyperliquidOutcome/index.js +1247 -0
- package/dist/protocols/evm/hyperliquidOutcome/index.js.map +1 -0
- package/dist/protocols/evm/pendle/index.cjs +3 -1
- package/dist/protocols/evm/pendle/index.cjs.map +1 -1
- package/dist/protocols/evm/pendle/index.js +3 -1
- package/dist/protocols/evm/pendle/index.js.map +1 -1
- package/dist/protocols/evm/trueo/index.cjs +2868 -0
- package/dist/protocols/evm/trueo/index.cjs.map +1 -0
- package/dist/protocols/evm/trueo/index.d.ts +1295 -0
- package/dist/protocols/evm/trueo/index.js +2725 -0
- package/dist/protocols/evm/trueo/index.js.map +1 -0
- package/package.json +11 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/trueo/support.ts","../../../../src/protocols/evm/trueo/abi.ts","../../../../src/protocols/evm/trueo/encode.ts","../../../../src/protocols/evm/trueo/prices.ts","../../../../src/protocols/evm/trueo/marketScope.ts","../../../../src/protocols/evm/trueo/marketApi.ts","../../../../src/protocols/evm/trueo/betWindow.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/trueo/orderbook.ts","../../../../src/protocols/evm/trueo/addTokens.ts","../../../../src/protocols/evm/hyperliquid/support.ts","../../../../src/protocols/evm/hyperliquidOutcome/model.ts","../../../../src/protocols/evm/hyperliquidOutcome/api.ts","../../../../src/protocols/evm/hyperliquidOutcome/mcpSummaries.ts","../../../../src/protocols/evm/trueo/predictionSearch.ts","../../../../src/protocols/evm/trueo/purpose.ts","../../../../src/core/expiry.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/trueo/multisign.ts","../../../../src/protocols/evm/trueo/index.ts"],"names":["getAddress","client","http","page","nextIndexBase","more","market","ohlc","row","defineChain","publicClient","createPublicClient","gasLimitFromEstimateAndChainConfig"],"mappings":"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","file":"index.js","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","import { getAddress, type Address } from 'viem'\n\nexport const TRUEO_PROTOCOL_ID = 'trueo'\nexport const PREDICTION_MARKETS_PROTOCOL_ID = 'prediction-markets'\n\nexport const TRUEO_BASE_CHAIN_ID = 8453\nexport const TRUEO_CHAIN_IDS = [TRUEO_BASE_CHAIN_ID] as const\n\nexport const TRUEO_NETWORK = 'base-mainnet' as const\n\n/** Public JSON API (CORS `*`). The marketing site at trueo.com does not serve these routes. */\nexport const TRUEO_API_ORIGIN = 'https://api.trueo.com'\nexport const TRUEO_MARKET_API_PREFIX = '/market'\n\nexport function trueoMarketApiPath(suffix: string): string {\n const s = suffix.startsWith('/') ? suffix : `/${suffix}`\n return `${TRUEO_MARKET_API_PREFIX}${s}`\n}\n\nexport const TRUEO_TYD = getAddress('0xb13CF163d916917d9cD6E836905cA5f12a1dEF4B')\nexport const TRUEO_TRUE = getAddress('0x21CFCFc3d8F98fC728f48341D10Ad8283F6EB7AB')\nexport const TRUEO_USDC = getAddress('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913')\n\nexport const TRUEO_TRUTH_MARKET_MANAGER = getAddress('0x61A98Bef11867c69489B91f340fE545eEfc695d7')\nexport const TRUEO_ORDER_MANAGER = getAddress('0x1cdB1C43eB64e99780EA9d3C7162C23432C59a1A')\nexport const TRUEO_UNIVERSAL_ROUTER_ADAPTER = getAddress('0x0A1AFc2121B4441127a02DEF72928F61f564034a')\nexport const TRUEO_TRUTH_MARKET_ADAPTER = getAddress('0x6E08d24AEf78F6d1a97503F64E84fDF65f8125E1')\nexport const TRUEO_V4_HOOK = getAddress('0x3E83479B2276EcFb7C7181F67b5d092d3511e0C4')\nexport const TRUEO_PERMIT2 = getAddress('0x000000000022D473030F116dDEE9F6B43aC78BA3')\n\nexport const TRUEO_TYD_DECIMALS = 6\nexport const TRUEO_OUTCOME_TOKEN_DECIMALS = 18\n\nexport const TRUEO_BET_CLOSE_BUFFER_SECONDS = 5 * 60\nexport const TRUEO_PERMIT2_APPROVAL_SECONDS = 30 * 60\n\nexport const TRUEO_BET_ACTIONS = ['swap', 'createOrder'] as const\nexport type TrueoBetAction = (typeof TRUEO_BET_ACTIONS)[number]\n\nexport function isTrueoChainSupported(chainId: number): boolean {\n return (TRUEO_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function assertTrueoChainId(chainId: number): void {\n if (!isTrueoChainSupported(chainId)) {\n throw new Error(`Trueo is Base-only (chainId ${TRUEO_BASE_CHAIN_ID}).`)\n }\n}\n\nexport function isTrueoCoreToken(address: string): boolean {\n try {\n const n = getAddress(address)\n return n === TRUEO_TYD || n === TRUEO_TRUE\n } catch {\n return false\n }\n}\n\nexport function normalizeTrueoAddress(address: string): Address {\n return getAddress(address)\n}\n","import { parseAbi } from 'viem'\n\nexport const trueoErc20Abi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function approve(address spender, uint256 amount) returns (bool)',\n 'function balanceOf(address account) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n])\n\nexport const trueoMarketAbi = parseAbi([\n 'function mint(uint256 paymentTokenAmount)',\n 'function burn(uint256 amount)',\n 'function redeem(uint256 amount)',\n 'function paymentToken() view returns (address)',\n 'function yesToken() view returns (address)',\n 'function noToken() view returns (address)',\n 'function getCurrentStatus() view returns (uint8)',\n 'function winningPosition() view returns (uint256)',\n 'function paused() view returns (bool)',\n])\n\nexport const trueoMarketV2Abi = parseAbi([\n 'function getPoolKeys() view returns ((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) yesPoolKey, (address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) noPoolKey)',\n 'function getPoolIds() view returns (bytes32 yesPoolId, bytes32 noPoolId)',\n])\n\nexport const trueoAdapterMintAbi = parseAbi([\n 'function mint(address truthMarket, uint256 assetAmount)',\n 'function burn(address truthMarket, uint256 amount)',\n 'function redeem(address truthMarket, uint256 amount)',\n])\n\n/** Yearn ERC-4626 TYD vault (USDC in, TYD shares out). */\nexport const trueoTydVaultAbi = parseAbi([\n 'function asset() view returns (address)',\n 'function deposit(uint256 assets, address receiver) returns (uint256 shares)',\n 'function redeem(uint256 shares, address receiver, address owner) returns (uint256 assets)',\n])\n\nexport const trueoUniversalRouterAdapterAbi = parseAbi([\n 'function execute(bytes commands, bytes[] inputs, uint256 deadline) payable',\n])\n\nexport const trueoPermit2ApproveAbi = parseAbi([\n 'function approve(address token, address spender, uint160 amount, uint48 expiration)',\n 'function allowance(address owner, address token, address spender) view returns (uint160 amount, uint48 expiration, uint48 nonce)',\n])\n\nexport const trueoOrderManagerAbi = parseAbi([\n 'function createOrder((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, uint128 amountIn, int24 tickLower, int24 tickUpper, bool zeroForOne, bool enablePartialFill) returns (uint32 orderId)',\n 'function cancelOrder((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, uint32 orderId, uint128 amount0Min, uint128 amount1Min)',\n 'function pendingOrder(bytes32 poolId, uint32 orderId) view returns (address owner, bool zeroForOne, int24 tickLower, int24 tickUpper, uint256 liquidity, bool enablePartialFill)',\n])\n\n/** Alternate createOrder struct encoding used by IOrderManager.CreateOrderParams. */\nexport const trueoOrderManagerStructAbi = parseAbi([\n 'function createOrder(((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, uint128 amountIn, int24 tickLower, int24 tickUpper, bool zeroForOne, bool enablePartialFill) params) returns (uint32 orderId)',\n 'function cancelOrder(((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, uint32 orderId, uint128 amount0Min, uint128 amount1Min) params)',\n])\n","import { encodeAbiParameters, encodeFunctionData, getAddress, type Address, type Hex } from 'viem'\nimport {\n trueoAdapterMintAbi,\n trueoErc20Abi,\n trueoMarketAbi,\n trueoOrderManagerStructAbi,\n trueoPermit2ApproveAbi,\n trueoTydVaultAbi,\n trueoUniversalRouterAdapterAbi,\n} from './abi.js'\nimport {\n TRUEO_PERMIT2,\n TRUEO_PERMIT2_APPROVAL_SECONDS,\n TRUEO_TRUTH_MARKET_ADAPTER,\n TRUEO_UNIVERSAL_ROUTER_ADAPTER,\n} from './support.js'\n\n/** Uniswap Universal Router command: V4_SWAP */\nexport const UR_COMMAND_V4_SWAP = 0x10\n/** Uniswap V4 Actions */\nexport const V4_ACTION_SWAP_EXACT_IN_SINGLE = 0x06\nexport const V4_ACTION_SETTLE = 0x0b\nexport const V4_ACTION_TAKE = 0x0c\n\nexport type TrueoPoolKey = {\n currency0: Address\n currency1: Address\n fee: number\n tickSpacing: number\n hooks: Address\n}\n\nconst poolKeyComponents = [\n { name: 'currency0', type: 'address' },\n { name: 'currency1', type: 'address' },\n { name: 'fee', type: 'uint24' },\n { name: 'tickSpacing', type: 'int24' },\n { name: 'hooks', type: 'address' },\n] as const\n\nexport function encodeErc20Approve(spender: Address, amount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoErc20Abi,\n functionName: 'approve',\n args: [getAddress(spender), amount],\n })\n}\n\nexport function encodePermit2Approve(args: {\n token: Address\n spender: Address\n amount: bigint\n expiration: number\n}): Hex {\n return encodeFunctionData({\n abi: trueoPermit2ApproveAbi,\n functionName: 'approve',\n args: [getAddress(args.token), getAddress(args.spender), args.amount, args.expiration],\n })\n}\n\nexport function encodeTrueoTydDeposit(assets: bigint, receiver: Address): Hex {\n return encodeFunctionData({\n abi: trueoTydVaultAbi,\n functionName: 'deposit',\n args: [assets, getAddress(receiver)],\n })\n}\n\nexport function encodeTrueoTydRedeem(shares: bigint, receiver: Address, owner: Address): Hex {\n return encodeFunctionData({\n abi: trueoTydVaultAbi,\n functionName: 'redeem',\n args: [shares, getAddress(receiver), getAddress(owner)],\n })\n}\n\nexport function encodeTrueoMint(paymentTokenAmount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoMarketAbi,\n functionName: 'mint',\n args: [paymentTokenAmount],\n })\n}\n\nexport function encodeTrueoBurn(amount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoMarketAbi,\n functionName: 'burn',\n args: [amount],\n })\n}\n\nexport function encodeTrueoRedeem(amount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoMarketAbi,\n functionName: 'redeem',\n args: [amount],\n })\n}\n\nexport function encodeTrueoAdapterMint(market: Address, assetAmount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoAdapterMintAbi,\n functionName: 'mint',\n args: [getAddress(market), assetAmount],\n })\n}\n\nexport function encodeTrueoAdapterBurn(market: Address, amount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoAdapterMintAbi,\n functionName: 'burn',\n args: [getAddress(market), amount],\n })\n}\n\nexport function encodeTrueoAdapterRedeem(market: Address, amount: bigint): Hex {\n return encodeFunctionData({\n abi: trueoAdapterMintAbi,\n functionName: 'redeem',\n args: [getAddress(market), amount],\n })\n}\n\nexport function encodeTrueoV4ExactInInput(args: {\n poolKey: TrueoPoolKey\n zeroForOne: boolean\n amountIn: bigint\n amountOutMinimum: bigint\n recipient: Address\n}): Hex {\n const poolKey = {\n currency0: getAddress(args.poolKey.currency0),\n currency1: getAddress(args.poolKey.currency1),\n fee: args.poolKey.fee,\n tickSpacing: args.poolKey.tickSpacing,\n hooks: getAddress(args.poolKey.hooks),\n }\n const settleCurrency = args.zeroForOne ? poolKey.currency0 : poolKey.currency1\n const takeCurrency = args.zeroForOne ? poolKey.currency1 : poolKey.currency0\n const swapParams = encodeAbiParameters(\n [\n {\n type: 'tuple',\n components: [\n { name: 'poolKey', type: 'tuple', components: [...poolKeyComponents] },\n { name: 'zeroForOne', type: 'bool' },\n { name: 'amountIn', type: 'uint128' },\n { name: 'amountOutMinimum', type: 'uint128' },\n { name: 'hookData', type: 'bytes' },\n ],\n },\n ],\n [\n {\n poolKey,\n zeroForOne: args.zeroForOne,\n amountIn: args.amountIn,\n amountOutMinimum: args.amountOutMinimum,\n hookData: '0x',\n },\n ],\n )\n const settleParams = encodeAbiParameters(\n [\n { name: 'currency', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'payerIsUser', type: 'bool' },\n ],\n [settleCurrency, args.amountIn, true],\n )\n const takeParams = encodeAbiParameters(\n [\n { name: 'currency', type: 'address' },\n { name: 'recipient', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n [takeCurrency, getAddress(args.recipient), 0n],\n )\n const actions = (`0x${[V4_ACTION_SWAP_EXACT_IN_SINGLE, V4_ACTION_SETTLE, V4_ACTION_TAKE]\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')}`) as Hex\n return encodeAbiParameters(\n [\n { name: 'actions', type: 'bytes' },\n { name: 'params', type: 'bytes[]' },\n ],\n [actions, [swapParams, settleParams, takeParams]],\n )\n}\n\nexport function encodeTrueoUniversalRouterExecute(args: {\n commands: Hex\n inputs: readonly Hex[]\n deadline: bigint\n}): Hex {\n return encodeFunctionData({\n abi: trueoUniversalRouterAdapterAbi,\n functionName: 'execute',\n args: [args.commands, [...args.inputs], args.deadline],\n })\n}\n\nexport function encodeTrueoV4ExactInSwap(args: {\n poolKey: TrueoPoolKey\n zeroForOne: boolean\n amountIn: bigint\n amountOutMinimum: bigint\n recipient: Address\n deadline: bigint\n}): { commands: Hex; inputs: Hex[]; deadline: bigint; data: Hex; to: Address } {\n const commands = (`0x${UR_COMMAND_V4_SWAP.toString(16).padStart(2, '0')}`) as Hex\n const inputs = [\n encodeTrueoV4ExactInInput({\n poolKey: args.poolKey,\n zeroForOne: args.zeroForOne,\n amountIn: args.amountIn,\n amountOutMinimum: args.amountOutMinimum,\n recipient: args.recipient,\n }),\n ]\n const data = encodeTrueoUniversalRouterExecute({\n commands,\n inputs,\n deadline: args.deadline,\n })\n return { commands, inputs, deadline: args.deadline, data, to: TRUEO_UNIVERSAL_ROUTER_ADAPTER }\n}\n\nexport function encodeTrueoCreateOrder(args: {\n poolKey: TrueoPoolKey\n amountIn: bigint\n tickLower: number\n tickUpper: number\n zeroForOne: boolean\n enablePartialFill: boolean\n}): Hex {\n return encodeFunctionData({\n abi: trueoOrderManagerStructAbi,\n functionName: 'createOrder',\n args: [\n {\n poolKey: {\n currency0: getAddress(args.poolKey.currency0),\n currency1: getAddress(args.poolKey.currency1),\n fee: args.poolKey.fee,\n tickSpacing: args.poolKey.tickSpacing,\n hooks: getAddress(args.poolKey.hooks),\n },\n amountIn: args.amountIn,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n zeroForOne: args.zeroForOne,\n enablePartialFill: args.enablePartialFill,\n },\n ],\n })\n}\n\nexport function encodeTrueoCancelOrder(args: {\n poolKey: TrueoPoolKey\n orderId: number\n amount0Min?: bigint\n amount1Min?: bigint\n}): Hex {\n return encodeFunctionData({\n abi: trueoOrderManagerStructAbi,\n functionName: 'cancelOrder',\n args: [\n {\n poolKey: {\n currency0: getAddress(args.poolKey.currency0),\n currency1: getAddress(args.poolKey.currency1),\n fee: args.poolKey.fee,\n tickSpacing: args.poolKey.tickSpacing,\n hooks: getAddress(args.poolKey.hooks),\n },\n orderId: args.orderId,\n amount0Min: args.amount0Min ?? 0n,\n amount1Min: args.amount1Min ?? 0n,\n },\n ],\n })\n}\n\nexport function trueoPermit2Expiration(nowSec = Math.floor(Date.now() / 1000)): number {\n return nowSec + TRUEO_PERMIT2_APPROVAL_SECONDS\n}\n\nexport function trueoSwapDeadline(nowSec = Math.floor(Date.now() / 1000)): bigint {\n return BigInt(nowSec + TRUEO_PERMIT2_APPROVAL_SECONDS)\n}\n\nexport { TRUEO_PERMIT2, TRUEO_TRUTH_MARKET_ADAPTER, TRUEO_UNIVERSAL_ROUTER_ADAPTER }\n","import { TRUEO_OUTCOME_TOKEN_DECIMALS, TRUEO_TYD_DECIMALS } from './support.js'\n\nconst Q96 = 2n ** 96n\n\n/** Implied TYD-per-outcome from a Uniswap v4 sqrtPriceX96 when token0 is Yes/No (18d) and token1 is TYD (6d). */\nexport function trueoImpliedPriceFromSqrtX96(\n sqrtPriceX96: string | bigint | null | undefined,\n token0Decimals = TRUEO_OUTCOME_TOKEN_DECIMALS,\n token1Decimals = TRUEO_TYD_DECIMALS,\n): number | null {\n if (sqrtPriceX96 == null) return null\n let sqrt: bigint\n try {\n sqrt = typeof sqrtPriceX96 === 'bigint' ? sqrtPriceX96 : BigInt(String(sqrtPriceX96))\n } catch {\n return null\n }\n if (sqrt <= 0n) return null\n const raw = Number(sqrt) / Number(Q96)\n if (!Number.isFinite(raw) || raw <= 0) return null\n const price = raw * raw * 10 ** (token0Decimals - token1Decimals)\n return Number.isFinite(price) && price > 0 ? price : null\n}\n\n/** Binary Yes/No implied prices above this are treated as a corrupt pool tick. */\nexport const TRUEO_SANE_IMPLIED_PRICE_MAX = 1.05\n\nexport function trueoIsSaneImpliedPrice(price: number | null | undefined): price is number {\n return price != null && Number.isFinite(price) && price >= 0 && price <= TRUEO_SANE_IMPLIED_PRICE_MAX\n}\n\n/** Keep a valid side; fill the other as the complement when a tick is corrupt. */\nexport function trueoSanitizeBinaryPrices(\n yes: number | null,\n no: number | null,\n): { yes: number | null; no: number | null } {\n const y = trueoIsSaneImpliedPrice(yes) ? yes : null\n const n = trueoIsSaneImpliedPrice(no) ? no : null\n if (y != null && n == null) return { yes: y, no: Math.min(1, Math.max(0, 1 - y)) }\n if (n != null && y == null) return { yes: Math.min(1, Math.max(0, 1 - n)), no: n }\n return { yes: y, no: n }\n}\n\nexport function trueoPercentLabel(price: number | null): string | null {\n if (!trueoIsSaneImpliedPrice(price)) return null\n const pct = Math.min(100, Math.max(0, price * 100))\n return `${pct.toFixed(1)}%`\n}\n\n/** Compact size for chat / Telegram (192403.7 → `192k`). */\nexport function trueoCompactVolumeLabel(size: string | number | null | undefined): string {\n if (size == null || size === '') return ''\n const n = typeof size === 'number' ? size : Number(String(size).replace(/,/g, ''))\n if (!Number.isFinite(n) || n < 0) return ''\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(n >= 10_000_000 ? 0 : 1)}M`\n if (n >= 100_000) return `${(n / 1_000).toFixed(0)}k`\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}k`\n if (n >= 10) return n.toFixed(0)\n if (n >= 1) return n.toFixed(1)\n if (n === 0) return '0'\n return n.toFixed(2)\n}\n\nexport function trueoExpiresAtIso(endOfTrading: number): string | null {\n if (!Number.isFinite(endOfTrading) || endOfTrading <= 0) return null\n return new Date(endOfTrading * 1000).toISOString()\n}\n\nexport function trueoExpiresAtLabel(endOfTrading: number): string | null {\n if (!Number.isFinite(endOfTrading) || endOfTrading <= 0) return null\n const d = new Date(endOfTrading * 1000)\n const y = d.getUTCFullYear()\n const m = String(d.getUTCMonth() + 1).padStart(2, '0')\n const day = String(d.getUTCDate()).padStart(2, '0')\n const hh = String(d.getUTCHours()).padStart(2, '0')\n const mm = String(d.getUTCMinutes()).padStart(2, '0')\n return `${y}-${m}-${day} ${hh}:${mm} UTC`\n}\n\nconst UTC_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] as const\n\n/** Human trading deadline, e.g. `16 Sep 2025, 02:16 UTC`. */\nexport function trueoTradingDeadlineLabel(endOfTrading: number): string | null {\n if (!Number.isFinite(endOfTrading) || endOfTrading <= 0) return null\n const d = new Date(endOfTrading * 1000)\n const day = d.getUTCDate()\n const mon = UTC_MONTHS[d.getUTCMonth()]\n const y = d.getUTCFullYear()\n const hh = String(d.getUTCHours()).padStart(2, '0')\n const mm = String(d.getUTCMinutes()).padStart(2, '0')\n return `${day} ${mon} ${y}, ${hh}:${mm} UTC`\n}\n\nexport function trueoTimeUntilTradingEndsLabel(\n endOfTrading: number,\n nowSec = Math.floor(Date.now() / 1000),\n): string | null {\n if (!Number.isFinite(endOfTrading) || endOfTrading <= 0) return null\n const sec = Math.floor(endOfTrading) - nowSec\n if (sec <= 0) return 'ended'\n const days = Math.floor(sec / 86400)\n const hours = Math.floor((sec % 86400) / 3600)\n if (days >= 60) {\n const months = Math.max(1, Math.round(days / 30))\n return `in ${months} month${months === 1 ? '' : 's'}`\n }\n if (days >= 2) return `in ${days} days`\n if (days === 1) return hours > 0 ? `in 1 day ${hours}h` : 'in 1 day'\n if (hours >= 2) return `in ${hours} hours`\n const mins = Math.max(1, Math.floor(sec / 60))\n return `in ${mins} min`\n}\n","import type { TrueoMarketRow } from './marketApi.js'\n\n/** Default search/trending keep resolved/voided markets only if they finished in this window. */\nexport const TRUEO_RECENT_MARKET_WINDOW_SECONDS = 14 * 24 * 60 * 60\n\nexport type TrueoMarketSearchScopeRow = Pick<TrueoMarketRow, 'status' | 'endOfTrading'> & {\n statusUpdatedAt?: string | null\n}\n\nfunction trueoFinishedAtSec(row: TrueoMarketSearchScopeRow, nowSec: number): number | null {\n if (row.endOfTrading > 0 && nowSec >= row.endOfTrading) return row.endOfTrading\n if (row.statusUpdatedAt?.trim()) {\n const ms = Date.parse(row.statusUpdatedAt)\n if (Number.isFinite(ms) && ms <= nowSec * 1000) return Math.floor(ms / 1000)\n }\n return null\n}\n\n/**\n * Default browse/search: still trading, or finished within 14 days.\n * Stuck resolving / awaiting-resolution rows older than the window stay hidden unless includeAll.\n * Recency uses endOfTrading (not a later statusUpdatedAt bump).\n */\nexport function isTrueoMarketLiveOrRecent(\n row: TrueoMarketSearchScopeRow,\n nowSec = Math.floor(Date.now() / 1000),\n recentWindowSec = TRUEO_RECENT_MARKET_WINDOW_SECONDS,\n): boolean {\n if (row.endOfTrading > 0 && nowSec < row.endOfTrading) return true\n const status = Number(row.status)\n if (status === 0 && row.endOfTrading <= 0) return true\n const finishedAt = trueoFinishedAtSec(row, nowSec)\n if (finishedAt == null) return false\n return nowSec - finishedAt <= recentWindowSec\n}\n\nexport function applyTrueoMarketSearchScope<T extends TrueoMarketSearchScopeRow>(\n rows: T[],\n args?: { includeAll?: boolean; nowSec?: number },\n): T[] {\n if (args?.includeAll === true) return rows\n return rows.filter((row) => isTrueoMarketLiveOrRecent(row, args?.nowSec))\n}\n\n/** Still in the trading window (status 0 and endOfTrading in the future). */\nexport function isTrueoMarketTradingOpen(\n row: TrueoMarketSearchScopeRow,\n nowSec = Math.floor(Date.now() / 1000),\n): boolean {\n const status = Number(row.status)\n if (status !== 0) return false\n if (row.endOfTrading > 0 && nowSec >= row.endOfTrading) return false\n return true\n}\n\n/** Title search: if any live match exists, drop recently finished / resolving rows. */\nexport function preferOpenTrueoTitleMatches<T extends TrueoMarketSearchScopeRow>(\n rows: T[],\n args?: { includeAll?: boolean; nowSec?: number },\n): T[] {\n if (args?.includeAll === true || rows.length === 0) return rows\n const open = rows.filter((row) => isTrueoMarketTradingOpen(row, args?.nowSec))\n return open.length > 0 ? open : rows\n}\n\nexport function trueoSearchScopeNote(includeAll: boolean): string {\n return includeAll\n ? 'Includes closed and resolved markets.'\n : 'Live and recently finished only (last 14 days). Set includeAll to include older closed markets.'\n}\n","import { getAddress } from 'viem'\nimport {\n applyTrueoMarketSearchScope,\n isTrueoMarketTradingOpen,\n preferOpenTrueoTitleMatches,\n trueoSearchScopeNote,\n} from './marketScope.js'\nimport {\n trueoExpiresAtIso,\n trueoExpiresAtLabel,\n trueoImpliedPriceFromSqrtX96,\n trueoIsSaneImpliedPrice,\n trueoPercentLabel,\n trueoSanitizeBinaryPrices,\n} from './prices.js'\nimport { TRUEO_API_ORIGIN, TRUEO_BASE_CHAIN_ID, TRUEO_NETWORK, trueoMarketApiPath } from './support.js'\n\nexport type TrueoCategory = {\n id: number\n name: string\n}\n\nexport type TrueoMarketRow = {\n address: string\n question: string\n rules: string\n source: string\n categories: string[]\n size: string\n tvl: number | null\n yesTokenAddress: string\n noTokenAddress: string\n yesPoolAddress: string\n noPoolAddress: string\n paymentTokenAddress: string\n paymentTokenSymbol: string\n paymentTokenDecimals: number\n endOfTrading: number\n status: number\n /** 0 unknown, 1 Yes, 2 No — set after resolution. */\n outcome: number\n statusUpdatedAt: string | null\n imageUrl: string | null\n yesPoolTick: number | null\n noPoolTick: number | null\n yesPoolSqrtPriceX96: string | null\n noPoolSqrtPriceX96: string | null\n yesPrice: number | null\n noPrice: number | null\n yesPriceLabel: string | null\n noPriceLabel: string | null\n expiresAt: string | null\n expiresAtLabel: string | null\n chainId: number\n network: string\n}\n\nexport type TrueoOhlcBar = {\n timestamp: number\n open: number\n high: number\n low: number\n close: number\n}\n\nexport type TrueoJsonFetchOptions = {\n signal?: AbortSignal\n}\n\nfunction trueoHeaders(): HeadersInit {\n return { Accept: 'application/json' }\n}\n\nexport async function trueoJsonFetch<T>(path: string, opts?: TrueoJsonFetchOptions): Promise<T> {\n const url = path.startsWith('http') ? path : `${TRUEO_API_ORIGIN}${path}`\n const res = await fetch(url, { headers: trueoHeaders(), signal: opts?.signal })\n if (!res.ok) {\n throw new Error(`Trueo API ${res.status} for ${path}`)\n }\n return (await res.json()) as T\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction asString(value: unknown, fallback = ''): string {\n return value == null ? fallback : String(value)\n}\n\nfunction asNumber(value: unknown, fallback = 0): number {\n const n = typeof value === 'number' ? value : Number(value)\n return Number.isFinite(n) ? n : fallback\n}\n\nfunction asNumberOrNull(value: unknown): number | null {\n if (value == null || value === '') return null\n const n = typeof value === 'number' ? value : Number(value)\n return Number.isFinite(n) ? n : null\n}\n\nfunction asStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n return value.map((v) => String(v)).filter(Boolean)\n}\n\nexport function normalizeTrueoMarketRow(raw: unknown): TrueoMarketRow {\n const r = asRecord(raw) ?? {}\n const address = asString(r.address).toLowerCase()\n const endOfTrading = asNumber(r.endOfTrading, 0)\n const yesSqrt = r.yesPoolSqrtPriceX96 == null ? null : asString(r.yesPoolSqrtPriceX96)\n const noSqrt = r.noPoolSqrtPriceX96 == null ? null : asString(r.noPoolSqrtPriceX96)\n const { yes: yesPrice, no: noPrice } = trueoSanitizeBinaryPrices(\n trueoImpliedPriceFromSqrtX96(yesSqrt),\n trueoImpliedPriceFromSqrtX96(noSqrt),\n )\n return {\n address,\n question: asString(r.question),\n rules: asString(r.rules),\n source: asString(r.source),\n categories: asStringArray(r.categories),\n size: asString(r.size, '0'),\n tvl: asNumberOrNull(r.tvl),\n yesTokenAddress: asString(r.yesTokenAddress).toLowerCase(),\n noTokenAddress: asString(r.noTokenAddress).toLowerCase(),\n yesPoolAddress: asString(r.yesPoolAddress).toLowerCase(),\n noPoolAddress: asString(r.noPoolAddress).toLowerCase(),\n paymentTokenAddress: asString(r.paymentTokenAddress).toLowerCase(),\n paymentTokenSymbol: asString(r.paymentTokenSymbol, 'TYD'),\n paymentTokenDecimals: asNumber(r.paymentTokenDecimals, 6),\n endOfTrading,\n status: asNumber(r.status, 0),\n outcome: asNumber(r.outcome, 0),\n statusUpdatedAt: r.statusUpdatedAt == null || r.statusUpdatedAt === '' ? null : asString(r.statusUpdatedAt),\n imageUrl: r.imageUrl == null ? null : asString(r.imageUrl),\n yesPoolTick: asNumberOrNull(r.yesPoolTick),\n noPoolTick: asNumberOrNull(r.noPoolTick),\n yesPoolSqrtPriceX96: yesSqrt,\n noPoolSqrtPriceX96: noSqrt,\n yesPrice,\n noPrice,\n yesPriceLabel: trueoPercentLabel(yesPrice),\n noPriceLabel: trueoPercentLabel(noPrice),\n expiresAt: trueoExpiresAtIso(endOfTrading),\n expiresAtLabel: trueoExpiresAtLabel(endOfTrading),\n chainId: TRUEO_BASE_CHAIN_ID,\n network: asString(r.network, TRUEO_NETWORK),\n }\n}\n\nconst TRUEO_QUERY_STOPWORDS = new Set([\n 'the',\n 'for',\n 'any',\n 'all',\n 'and',\n 'search',\n 'find',\n 'show',\n 'list',\n 'market',\n 'markets',\n 'prediction',\n 'live',\n 'recent',\n 'trending',\n 'trueo',\n 'topic',\n 'about',\n])\n\n/** Topic tokens for title search: drop short/stop words so \"silver commodities\" still hits Silver. */\nexport function trueoQueryTokens(query: string): string[] {\n const seen = new Set<string>()\n const out: string[] = []\n for (const raw of query.toLowerCase().split(/[^a-z0-9]+/)) {\n const t = raw.trim()\n if (t.length < 3 || TRUEO_QUERY_STOPWORDS.has(t) || seen.has(t)) continue\n seen.add(t)\n out.push(t)\n }\n return out\n}\n\n/** Case-insensitive substring match on title (and rules / source / category / addresses). */\nexport function filterTrueoMarkets(\n rows: TrueoMarketRow[],\n args: { query?: string; category?: string },\n): TrueoMarketRow[] {\n const q = args.query?.trim().toLowerCase() ?? ''\n const tokens = q ? trueoQueryTokens(q) : []\n const category = args.category?.trim().toLowerCase() ?? ''\n return rows.filter((row) => {\n if (category) {\n const hit = row.categories.some((c) => c.toLowerCase() === category || c.toLowerCase().includes(category))\n if (!hit) return false\n }\n if (!q) return true\n const hay = [\n row.question,\n row.rules,\n row.source,\n row.address,\n row.yesTokenAddress,\n row.noTokenAddress,\n ...row.categories,\n ]\n .join(' ')\n .toLowerCase()\n if (hay.includes(q)) return true\n return tokens.some((t) => hay.includes(t))\n })\n}\n\nexport async function fetchTrueoCategories(opts?: TrueoJsonFetchOptions): Promise<TrueoCategory[]> {\n const raw = await trueoJsonFetch<unknown>(trueoMarketApiPath('categories'), opts)\n if (!Array.isArray(raw)) return []\n return raw\n .map((item) => {\n const r = asRecord(item)\n if (!r) return null\n const name = asString(r.name).trim()\n if (!name) return null\n return { id: asNumber(r.id, 0), name }\n })\n .filter((c): c is TrueoCategory => c != null)\n}\n\n/** Trueo `/trending` 400s above this; omit limit and the API still returns 10. Offset is ignored. */\nexport const TRUEO_TRENDING_MAX_LIMIT = 10\nexport const TRUEO_MARKET_PAGE_SIZE = 10\n\nexport type TrueoMarketPage = {\n markets: TrueoMarketRow[]\n hasMore: boolean\n nextOffset: number\n}\n\nfunction trueoSearchFetchLimit(requested: number, includeAll: boolean): number {\n const cap = 100\n if (includeAll) return Math.min(requested, cap)\n return Math.min(Math.max(requested * 4, 40), cap)\n}\n\nexport async function fetchTrueoTrending(args?: {\n limit?: number\n includeAll?: boolean\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoMarketRow[]> {\n const requested = Math.min(Math.max(args?.limit ?? 20, 1), TRUEO_TRENDING_MAX_LIMIT)\n const includeAll = args?.includeAll === true\n const raw = await trueoJsonFetch<unknown>(\n `${trueoMarketApiPath(`${TRUEO_NETWORK}/trending`)}?limit=${requested}`,\n args?.opts,\n )\n if (!Array.isArray(raw)) return []\n const rows = applyTrueoMarketSearchScope(raw.map(normalizeTrueoMarketRow), { includeAll })\n return rows.slice(0, requested)\n}\n\n/** Vendor `q=` is ignored (same first page for any string). Title search must scan + filter locally. */\nconst TRUEO_TITLE_SEARCH_PAGE_SIZE = 100\nconst TRUEO_TITLE_SEARCH_MAX_PAGES = 16\n\nexport async function searchTrueoMarketsPage(args: {\n query?: string\n category?: string\n limit?: number\n offset?: number\n includeAll?: boolean\n excludeAddresses?: string[]\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoMarketPage> {\n const requested = Math.min(Math.max(args.limit ?? TRUEO_MARKET_PAGE_SIZE, 1), 100)\n const includeAll = args.includeAll === true\n const titleQuery = Boolean(args.query?.trim())\n const pageSize = titleQuery ? TRUEO_TITLE_SEARCH_PAGE_SIZE : trueoSearchFetchLimit(requested, includeAll)\n const maxPages = titleQuery ? TRUEO_TITLE_SEARCH_MAX_PAGES : 3\n let offset = Math.max(args.offset ?? 0, 0)\n const exclude = new Set((args.excludeAddresses ?? []).map((a) => a.toLowerCase()))\n const collected: TrueoMarketRow[] = []\n let apiExhausted = false\n for (let page = 0; page < maxPages && collected.length < requested; page++) {\n const params = new URLSearchParams()\n params.set('limit', String(pageSize))\n params.set('offset', String(offset))\n if (args.category?.trim()) params.set('category', args.category.trim())\n const raw = await trueoJsonFetch<unknown>(\n `${trueoMarketApiPath(TRUEO_NETWORK)}?${params.toString()}`,\n args.opts,\n )\n const pageRows = Array.isArray(raw) ? raw.map(normalizeTrueoMarketRow) : []\n const scoped = applyTrueoMarketSearchScope(\n filterTrueoMarkets(pageRows, { query: args.query, category: args.category }),\n { includeAll },\n )\n let filled = false\n for (const row of scoped) {\n if (exclude.has(row.address)) continue\n exclude.add(row.address)\n collected.push(row)\n const enough =\n titleQuery && !includeAll\n ? collected.filter((r) => isTrueoMarketTradingOpen(r)).length >= requested\n : collected.length >= requested\n if (enough) {\n filled = true\n break\n }\n }\n if (filled) break\n offset += pageRows.length\n if (pageRows.length < pageSize) {\n apiExhausted = true\n break\n }\n }\n const ranked = titleQuery ? preferOpenTrueoTitleMatches(collected, { includeAll }) : collected\n const markets = ranked.slice(0, requested)\n return {\n markets,\n hasMore: !apiExhausted,\n nextOffset: offset,\n }\n}\n\nexport async function searchTrueoMarkets(args: {\n query?: string\n category?: string\n limit?: number\n offset?: number\n includeAll?: boolean\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoMarketRow[]> {\n return (await searchTrueoMarketsPage(args)).markets\n}\n\nexport function trueoListUsesTrending(args: {\n query?: string\n category?: string\n offset?: number\n trending?: boolean\n}): boolean {\n if (args.query?.trim() || args.category?.trim()) return false\n const offset = Math.max(args.offset ?? 0, 0)\n return args.trending === true || (offset === 0 && args.trending !== false)\n}\n\nexport async function listTrueoMarketsPage(args: {\n query?: string\n category?: string\n offset?: number\n includeAll?: boolean\n trending?: boolean\n excludeAddresses?: string[]\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoMarketPage> {\n const offset = Math.max(args.offset ?? 0, 0)\n const includeAll = args.includeAll === true\n const useTrending = trueoListUsesTrending(args)\n if (useTrending) {\n const markets = await fetchTrueoTrending({ limit: TRUEO_TRENDING_MAX_LIMIT, includeAll, opts: args.opts })\n if (includeAll || markets.length >= TRUEO_TRENDING_MAX_LIMIT) {\n return { markets, hasMore: true, nextOffset: 0 }\n }\n const fill = await searchTrueoMarketsPage({\n limit: TRUEO_TRENDING_MAX_LIMIT - markets.length,\n includeAll,\n excludeAddresses: [...(args.excludeAddresses ?? []), ...markets.map((m) => m.address)],\n opts: args.opts,\n })\n return {\n markets: [...markets, ...fill.markets],\n hasMore: fill.hasMore,\n nextOffset: fill.nextOffset,\n }\n }\n return searchTrueoMarketsPage({\n query: args.query,\n category: args.category,\n limit: TRUEO_MARKET_PAGE_SIZE,\n offset,\n includeAll,\n excludeAddresses: args.excludeAddresses,\n opts: args.opts,\n })\n}\n\nexport async function fetchTrueoMarket(args: {\n marketAddress: string\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoMarketRow> {\n const address = getAddress(args.marketAddress).toLowerCase()\n const raw = await trueoJsonFetch<unknown>(trueoMarketApiPath(`${TRUEO_NETWORK}/${address}`), args.opts)\n return normalizeTrueoMarketRow(raw)\n}\n\n/**\n * Trueo `/ohlc` `resolution` is a sample step in seconds (`3600` = hourly).\n * Calendar tokens `1D` / `1W` / `All` 400. `1H` is 1-second ticks, not hourly bars.\n */\nexport const TRUEO_CHANCE_SERIES_RESOLUTION = '3600'\nexport const TRUEO_CHANCE_SERIES_LOOKBACK_SECONDS = 14 * 24 * 60 * 60\n\nconst TRUEO_OHLC_CALENDAR_ALIASES = new Set(['1h', '1d', '1w', 'all', 'hour', 'day', 'week'])\n\nexport function normalizeTrueoOhlcResolution(raw?: string): string {\n const v = raw?.trim() ?? ''\n if (!v || TRUEO_OHLC_CALENDAR_ALIASES.has(v.toLowerCase())) {\n return TRUEO_CHANCE_SERIES_RESOLUTION\n }\n return v\n}\n\nexport async function fetchTrueoOhlc(args: {\n poolId: string\n from: number\n to: number\n resolution?: string\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoOhlcBar[]> {\n const poolId = args.poolId.startsWith('0x') ? args.poolId.toLowerCase() : args.poolId\n const resolution = normalizeTrueoOhlcResolution(args.resolution)\n const raw = await trueoJsonFetch<unknown>(\n `${trueoMarketApiPath(`${TRUEO_NETWORK}/${poolId}/ohlc`)}?from=${Math.floor(args.from)}&to=${Math.floor(args.to)}&resolution=${encodeURIComponent(resolution)}`,\n args.opts,\n )\n if (!Array.isArray(raw)) return []\n return raw\n .map((item) => {\n const r = asRecord(item)\n if (!r) return null\n return {\n timestamp: asNumber(r.timestamp, 0),\n open: asNumber(r.open, 0),\n high: asNumber(r.high, 0),\n low: asNumber(r.low, 0),\n close: asNumber(r.close, 0),\n }\n })\n .filter((b): b is TrueoOhlcBar => b != null && b.timestamp > 0)\n}\n\nexport async function fetchTrueoTransactions(args: {\n marketAddress: string\n limit?: number\n opts?: TrueoJsonFetchOptions\n}): Promise<unknown[]> {\n const address = getAddress(args.marketAddress).toLowerCase()\n const limit = Math.min(Math.max(args.limit ?? 20, 1), 100)\n const raw = await trueoJsonFetch<unknown>(\n `${trueoMarketApiPath('transactions')}?marketAddress=${address}&limit=${limit}`,\n args.opts,\n )\n return Array.isArray(raw) ? raw : []\n}\n\nexport async function trueoFetchCategoriesSummary() {\n const categories = await fetchTrueoCategories()\n return { categories, chainId: TRUEO_BASE_CHAIN_ID }\n}\n\nexport async function trueoFetchTrendingSummary(input: { limit?: number; includeAll?: boolean } = {}) {\n const includeAll = input.includeAll === true\n const markets = await fetchTrueoTrending({ limit: input.limit, includeAll })\n return {\n markets,\n hasMore: true,\n nextOffset: 0,\n notes: `Trueo trending on Base (max ${TRUEO_TRENDING_MAX_LIMIT}; API does not page trending). More: ctm_trueo_search_markets with offset=0, skip listed addresses. ${trueoSearchScopeNote(includeAll)}`,\n }\n}\n\nexport async function trueoSearchMarketsSummary(input: {\n query?: string\n category?: string\n limit?: number\n offset?: number\n includeAll?: boolean\n excludeAddresses?: string[]\n}) {\n const includeAll = input.includeAll === true\n const page = await searchTrueoMarketsPage({ ...input, includeAll })\n const q = input.query?.trim() ?? ''\n let notes = `Trueo search on Base (page ${TRUEO_MARKET_PAGE_SIZE}). ${page.hasMore ? `More: same tool with offset=${page.nextOffset}.` : 'End of results.'} ${trueoSearchScopeNote(includeAll)}`\n if (q && page.markets.length === 0) {\n notes = `No live or recent title match for ${JSON.stringify(q)} after scanning the catalog (vendor search text is ignored). Do not list trending unless the operator asked.`\n }\n return {\n markets: page.markets,\n hasMore: page.hasMore,\n nextOffset: page.nextOffset,\n notes,\n }\n}\n\nexport async function trueoFetchMarketSummary(input: { marketAddress: string }) {\n return fetchTrueoMarket({ marketAddress: input.marketAddress })\n}\n\nexport async function fetchTrueoChanceSeries(args: {\n poolId: string\n lookbackSeconds?: number\n opts?: TrueoJsonFetchOptions\n}): Promise<TrueoOhlcBar[]> {\n const to = Math.floor(Date.now() / 1000)\n const lookback = Math.max(3600, args.lookbackSeconds ?? TRUEO_CHANCE_SERIES_LOOKBACK_SECONDS)\n const bars = await fetchTrueoOhlc({\n poolId: args.poolId,\n from: to - lookback,\n to,\n resolution: TRUEO_CHANCE_SERIES_RESOLUTION,\n opts: args.opts,\n })\n return bars.filter((b) => trueoIsSaneImpliedPrice(b.close))\n}\n\nexport async function trueoFetchChanceSeriesSummary(input: {\n poolId: string\n from?: number\n to?: number\n resolution?: string\n lookbackDays?: number\n}) {\n const resolution = normalizeTrueoOhlcResolution(input.resolution)\n const to = input.to ?? Math.floor(Date.now() / 1000)\n const from =\n input.from ??\n to - Math.max(1, input.lookbackDays ?? TRUEO_CHANCE_SERIES_LOOKBACK_SECONDS / 86400) * 86400\n const bars = await fetchTrueoOhlc({\n poolId: input.poolId,\n from,\n to,\n resolution,\n })\n return {\n poolId: input.poolId,\n bars,\n from,\n to,\n resolution,\n notes: 'Chance samples (not candlesticks). resolution is seconds; default 3600 (hourly). 1H/1D/1W/All coerce to hourly.',\n }\n}\n","import { getAddress } from 'viem'\nimport { fetchTrueoMarket, type TrueoMarketRow } from './marketApi.js'\nimport { trueoTimeUntilTradingEndsLabel, trueoTradingDeadlineLabel } from './prices.js'\nimport { TRUEO_BET_ACTIONS, TRUEO_BET_CLOSE_BUFFER_SECONDS, type TrueoBetAction } from './support.js'\n\nexport const TRUEO_BET_CLOSE_ERROR = 'Market closes within 5 minutes.'\nexport const TRUEO_BET_EXPIRED_ERROR = 'Market expired. Cannot Get Sig or Execute.'\n\nexport type TrueoMarketStatusLabel = 'open' | 'resolving' | 'resolved' | 'closed'\n\n/** Continuum treats `endOfTrading` (and resolved/closed status) as the bet cutoff. */\nexport function trueoMarketStatusLabel(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): TrueoMarketStatusLabel {\n const status = Number(row.status)\n if (status === 7) return 'resolved'\n if (status >= 4) return 'closed'\n if (status >= 1) return 'resolving'\n if (row.endOfTrading > 0 && nowSec >= row.endOfTrading) return 'closed'\n return 'open'\n}\n\n/** Trading-window line only. Use `trueoResolutionCopy` for how it ended. */\nexport function trueoTradingEndsCopy(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): string {\n const when = trueoTradingDeadlineLabel(row.endOfTrading)\n if (!when) {\n return trueoMarketStatusLabel(row, nowSec) === 'open' ? 'Trading end unknown' : 'Trading ended'\n }\n const remain = trueoTimeUntilTradingEndsLabel(row.endOfTrading, nowSec)\n return remain && remain !== 'ended' ? `Trading ends ${when} · ${remain}` : `Trading ended ${when}`\n}\n\nexport type TrueoResolvedSide = 'yes' | 'no' | null\n\nexport function trueoResolvedSide(outcome: number | null | undefined): TrueoResolvedSide {\n if (outcome === 1) return 'yes'\n if (outcome === 2) return 'no'\n return null\n}\n\nfunction statusUpdatedAtLabel(raw: string | null | undefined): string | null {\n if (!raw?.trim()) return null\n const ms = Date.parse(raw)\n if (!Number.isFinite(ms)) return null\n return trueoTradingDeadlineLabel(Math.floor(ms / 1000))\n}\n\n/**\n * How the market finished (or that it has not). Null while still in the trading window.\n * API: status 7 resolved; outcome 1 Yes / 2 No; status 1–3 resolving; 4–6 closed/void.\n */\nexport function trueoResolutionCopy(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'> & {\n outcome?: number\n statusUpdatedAt?: string | null\n },\n nowSec = Math.floor(Date.now() / 1000),\n): string | null {\n const status = Number(row.status)\n const when = statusUpdatedAtLabel(row.statusUpdatedAt)\n const side = trueoResolvedSide(row.outcome)\n const sideWord = side === 'yes' ? 'Yes' : side === 'no' ? 'No' : null\n if (status === 7) {\n const who = sideWord ?? 'unknown outcome'\n return when ? `Resolved ${who} · ${when}` : `Resolved ${who}`\n }\n if (status >= 1 && status < 4) {\n return when ? `This market is being resolved · since ${when}` : 'This market is being resolved'\n }\n if (status >= 4) {\n if (sideWord) return when ? `Closed ${sideWord} · ${when}` : `Closed ${sideWord}`\n return when ? `Closed without a Yes/No result · ${when}` : 'Closed without a Yes/No result'\n }\n if (row.endOfTrading > 0 && nowSec >= row.endOfTrading) {\n return 'This market is being resolved'\n }\n return null\n}\n\nexport function isTrueoBetAction(action: string): action is TrueoBetAction {\n return (TRUEO_BET_ACTIONS as readonly string[]).includes(action)\n}\n\n/** True when new Yes/No votes (mint/swap/limit) are still allowed. */\nexport function trueoMarketVotingOpen(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): boolean {\n return trueoBetCreateBlockedReason(row, nowSec) == null\n}\n\nexport function trueoBetCreateBlockedReason(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): string | null {\n const label = trueoMarketStatusLabel(row, nowSec)\n if (label !== 'open') return TRUEO_BET_CLOSE_ERROR\n if (row.endOfTrading > 0 && nowSec + TRUEO_BET_CLOSE_BUFFER_SECONDS >= row.endOfTrading) {\n return TRUEO_BET_CLOSE_ERROR\n }\n return null\n}\n\nexport function trueoBetExecuteBlockedReason(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): string | null {\n const label = trueoMarketStatusLabel(row, nowSec)\n if (label === 'resolved' || label === 'closed') return TRUEO_BET_EXPIRED_ERROR\n if (row.endOfTrading > 0 && nowSec >= row.endOfTrading) return TRUEO_BET_EXPIRED_ERROR\n return null\n}\n\nexport function assertTrueoBetCanCreate(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): void {\n const reason = trueoBetCreateBlockedReason(row, nowSec)\n if (reason) throw new Error(reason)\n}\n\nexport function assertTrueoBetCanExecute(\n row: Pick<TrueoMarketRow, 'status' | 'endOfTrading'>,\n nowSec = Math.floor(Date.now() / 1000),\n): void {\n const reason = trueoBetExecuteBlockedReason(row, nowSec)\n if (reason) throw new Error(reason)\n}\n\n/** Live re-read for Get Sig / Execute. Do not trust a stale extraJSON endOfTrading alone. */\nexport async function assertTrueoBetStillOpen(marketAddress: string): Promise<TrueoMarketRow> {\n const row = await fetchTrueoMarket({ marketAddress: getAddress(marketAddress) })\n assertTrueoBetCanExecute(row)\n return row\n}\n\nexport type TrueoBetExtraJson = {\n protocolId: 'trueo'\n trueoAction: TrueoBetAction\n marketAddress: string\n endOfTrading: number\n}\n\nexport function buildTrueoBetExtraJson(args: {\n action: TrueoBetAction\n marketAddress: string\n endOfTrading: number\n}): TrueoBetExtraJson {\n return {\n protocolId: 'trueo',\n trueoAction: args.action,\n marketAddress: getAddress(args.marketAddress),\n endOfTrading: args.endOfTrading,\n }\n}\n\nexport function parseTrueoBetExtraJson(raw: unknown): TrueoBetExtraJson | null {\n let obj: Record<string, unknown> | null = null\n if (typeof raw === 'string' && raw.trim()) {\n try {\n const parsed = JSON.parse(raw) as unknown\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n obj = parsed as Record<string, unknown>\n }\n } catch {\n return null\n }\n } else if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n obj = raw as Record<string, unknown>\n }\n if (!obj) return null\n if (obj.protocolId !== 'trueo') return null\n const action = String(obj.trueoAction ?? '')\n if (!isTrueoBetAction(action)) return null\n const marketAddress = String(obj.marketAddress ?? '').trim()\n if (!marketAddress) return null\n const endOfTrading = Number(obj.endOfTrading ?? 0)\n return {\n protocolId: 'trueo',\n trueoAction: action,\n marketAddress,\n endOfTrading: Number.isFinite(endOfTrading) ? endOfTrading : 0,\n }\n}\n\nexport function extraJsonFromSignRequest(detail: Record<string, unknown> | null | undefined): unknown {\n return detail?.ExtraJSON ?? detail?.extraJSON ?? null\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","import { createPublicClient, defineChain, getAddress, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { trueoMarketV2Abi, trueoOrderManagerAbi } from './abi.js'\nimport { fetchTrueoMarket, fetchTrueoTransactions, type TrueoMarketRow } from './marketApi.js'\nimport { TRUEO_BASE_CHAIN_ID, TRUEO_ORDER_MANAGER } from './support.js'\nimport type { TrueoPoolKey } from './encode.js'\n\nexport type TrueoOrderbookLevel = {\n tick: number | null\n price: number | null\n orderId: number | null\n owner: string | null\n zeroForOne: boolean | null\n}\n\nexport type TrueoOrderbook = {\n marketAddress: string\n side: 'yes' | 'no'\n poolId: string\n currentTick: number | null\n impliedPrice: number | null\n impliedPriceLabel: string | null\n levels: TrueoOrderbookLevel[]\n recentTrades: Array<{\n timestamp: string | null\n price: number | null\n usdValue: string | null\n poolId: string | null\n }>\n notes: string\n}\n\nfunction publicClient(rpcUrl: string, chainId: number): PublicClient {\n const chain = defineChain({\n id: chainId,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nexport async function readTrueoPoolKeys(args: {\n rpcUrl: string\n marketAddress: Address\n}): Promise<{ yes: TrueoPoolKey; no: TrueoPoolKey } | null> {\n const client = publicClient(args.rpcUrl, TRUEO_BASE_CHAIN_ID)\n try {\n const [yes, no] = await client.readContract({\n address: getAddress(args.marketAddress),\n abi: trueoMarketV2Abi,\n functionName: 'getPoolKeys',\n })\n return {\n yes: {\n currency0: yes.currency0,\n currency1: yes.currency1,\n fee: Number(yes.fee),\n tickSpacing: Number(yes.tickSpacing),\n hooks: yes.hooks,\n },\n no: {\n currency0: no.currency0,\n currency1: no.currency1,\n fee: Number(no.fee),\n tickSpacing: Number(no.tickSpacing),\n hooks: no.hooks,\n },\n }\n } catch {\n return null\n }\n}\n\nasync function probePendingOrders(args: {\n rpcUrl: string\n poolId: `0x${string}`\n}): Promise<TrueoOrderbookLevel[]> {\n const client = publicClient(args.rpcUrl, TRUEO_BASE_CHAIN_ID)\n const levels: TrueoOrderbookLevel[] = []\n const ids = [1, 2, 3, 4, 5, 6, 7, 8]\n const reads = await Promise.all(\n ids.map(async (orderId) => {\n try {\n const order = await client.readContract({\n address: TRUEO_ORDER_MANAGER,\n abi: trueoOrderManagerAbi,\n functionName: 'pendingOrder',\n args: [args.poolId, orderId],\n })\n const [owner, zeroForOne, tickLower, , liquidity] = order\n if (!owner || owner === '0x0000000000000000000000000000000000000000') return null\n if (liquidity === 0n) return null\n return {\n tick: Number(tickLower),\n price: null,\n orderId,\n owner,\n zeroForOne: Boolean(zeroForOne),\n } satisfies TrueoOrderbookLevel\n } catch {\n return null\n }\n }),\n )\n for (const row of reads) {\n if (row) levels.push(row)\n }\n return levels\n}\n\nfunction recentTradesFromApi(raw: unknown[], _side: 'yes' | 'no', poolId: string) {\n return raw\n .map((item) => {\n if (!item || typeof item !== 'object') return null\n const r = item as Record<string, unknown>\n const swap = r.v4PoolSwapData && typeof r.v4PoolSwapData === 'object' ? (r.v4PoolSwapData as Record<string, unknown>) : null\n const tradePool = swap ? String(swap.poolId ?? '').toLowerCase() : ''\n if (tradePool && tradePool !== poolId.toLowerCase()) return null\n return {\n timestamp: r.timestamp == null ? null : String(r.timestamp),\n price: swap && typeof swap.price === 'number' ? swap.price : null,\n usdValue: r.usdValue == null ? null : String(r.usdValue),\n poolId: tradePool || null,\n }\n })\n .filter((t): t is NonNullable<typeof t> => t != null)\n .slice(0, 12)\n}\n\nexport async function fetchTrueoOrderbook(args: {\n marketAddress: string\n side?: 'yes' | 'no'\n rpcUrl?: string\n}): Promise<TrueoOrderbook> {\n const market = await fetchTrueoMarket({ marketAddress: args.marketAddress })\n const side = args.side === 'no' ? 'no' : 'yes'\n const poolId = side === 'yes' ? market.yesPoolAddress : market.noPoolAddress\n const impliedPrice = side === 'yes' ? market.yesPrice : market.noPrice\n const currentTick = side === 'yes' ? market.yesPoolTick : market.noPoolTick\n const txs = await fetchTrueoTransactions({ marketAddress: market.address, limit: 20 }).catch(() => [])\n let levels: TrueoOrderbookLevel[] = []\n if (args.rpcUrl && poolId.startsWith('0x') && poolId.length === 66) {\n levels = await probePendingOrders({ rpcUrl: args.rpcUrl, poolId: poolId as `0x${string}` })\n }\n return {\n marketAddress: market.address,\n side,\n poolId,\n currentTick,\n impliedPrice,\n impliedPriceLabel: side === 'yes' ? market.yesPriceLabel : market.noPriceLabel,\n levels,\n recentTrades: recentTradesFromApi(txs, side, poolId),\n notes: levels.length\n ? 'On-chain OrderManager pending orders plus recent pool trades.'\n : 'Depth from live tick / implied price and recent pool trades. Pending OrderManager rows are included when rpcUrl can read them.',\n }\n}\n\nexport async function trueoFetchOrderbookSummary(input: {\n marketAddress: string\n side?: 'yes' | 'no'\n rpcUrl?: string\n}) {\n return fetchTrueoOrderbook(input)\n}\n\nexport function outcomeTokensFromMarkets(markets: TrueoMarketRow[]): string[] {\n const out = new Set<string>()\n for (const m of markets) {\n if (m.yesTokenAddress) out.add(m.yesTokenAddress.toLowerCase())\n if (m.noTokenAddress) out.add(m.noTokenAddress.toLowerCase())\n }\n return [...out]\n}\n","import { getAddress } from 'viem'\nimport type { TrueoPurposeAction } from './purpose.js'\nimport { TRUEO_OUTCOME_TOKEN_DECIMALS, TRUEO_TYD, TRUEO_TYD_DECIMALS, TRUEO_USDC } from './support.js'\n\nexport type TrueoSuggestedAddToken = {\n address: string\n name: string\n symbol: string\n decimals: number\n kind: 'tyd' | 'usdc' | 'yes' | 'no'\n}\n\nexport type TrueoSuggestAddMarket = {\n question?: string\n yesTokenAddress: string\n noTokenAddress: string\n}\n\n/** Node-list YES/NO we suggested (symbol YES/NO or our `Trueo Yes/No —` name). */\nexport function isTrueoOutcomeTokenLabel(symbol?: string | null, name?: string | null): boolean {\n const s = (symbol ?? '').trim().toUpperCase()\n if (s === 'YES' || s === 'NO') return true\n const n = (name ?? '').trim().toLowerCase()\n return n.startsWith('trueo yes') || n.startsWith('trueo no')\n}\n\nfunction clipQuestion(question: string | undefined): string {\n const t = (question ?? '').trim()\n if (!t) return 'Trueo market'\n return t.length <= 48 ? t : `${t.slice(0, 45).trim()}…`\n}\n\nfunction outcomeToken(\n address: string,\n kind: 'yes' | 'no',\n question: string | undefined,\n): TrueoSuggestedAddToken {\n const label = clipQuestion(question)\n const side = kind === 'no' ? 'No' : 'Yes'\n return {\n address: getAddress(address),\n name: `Trueo ${side} — ${label}`,\n symbol: kind === 'no' ? 'NO' : 'YES',\n decimals: TRUEO_OUTCOME_TOKEN_DECIMALS,\n kind,\n }\n}\n\n/**\n * Tokens the user will hold after this Trueo action — offer “add to node”.\n * YES/NO are per-market position tokens (like Pendle PT/YT). TRUE is governance\n * and is never suggested.\n */\nexport function suggestTrueoTokensToAdd(args: {\n action: TrueoPurposeAction\n side: 'yes' | 'no'\n market?: TrueoSuggestAddMarket | null\n}): TrueoSuggestedAddToken[] {\n const tyd: TrueoSuggestedAddToken = {\n address: TRUEO_TYD,\n name: 'True Yield Dollar',\n symbol: 'TYD',\n decimals: TRUEO_TYD_DECIMALS,\n kind: 'tyd',\n }\n const usdc: TrueoSuggestedAddToken = {\n address: TRUEO_USDC,\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n kind: 'usdc',\n }\n if (args.action === 'wrapTyd') return [tyd]\n if (args.action === 'unwrapTyd') return [usdc]\n if (!args.market) return []\n try {\n const yes = outcomeToken(args.market.yesTokenAddress, 'yes', args.market.question)\n const no = outcomeToken(args.market.noTokenAddress, 'no', args.market.question)\n switch (args.action) {\n case 'swap':\n case 'createOrder':\n return [args.side === 'no' ? no : yes]\n case 'mint':\n return [yes, no]\n case 'burn':\n case 'redeem':\n return [tyd]\n default:\n return []\n }\n } catch {\n return []\n }\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","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 {\n trueoMarketStatusLabel,\n trueoMarketVotingOpen,\n trueoResolutionCopy,\n trueoTradingEndsCopy,\n} from './betWindow.js'\nimport { isTrueoOutcomeTokenLabel } from './addTokens.js'\nimport {\n fetchTrueoChanceSeries,\n fetchTrueoMarket,\n listTrueoMarketsPage,\n searchTrueoMarketsPage,\n TRUEO_MARKET_PAGE_SIZE,\n type TrueoMarketRow,\n type TrueoOhlcBar,\n} from './marketApi.js'\nimport { trueoSearchScopeNote } from './marketScope.js'\nimport { trueoCompactVolumeLabel } from './prices.js'\nimport { fetchTrueoOrderbook, type TrueoOrderbook } from './orderbook.js'\nimport {\n fetchHyperliquidOutcomeBook,\n fetchHyperliquidOutcomeChanceSeries,\n getHyperliquidOutcomeMarket,\n HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID,\n listHyperliquidOutcomeMarkets,\n} from '../hyperliquidOutcome/api.js'\nimport { hyperliquidOutcomeToPredictionFields } from '../hyperliquidOutcome/mcpSummaries.js'\n\nexport const PREDICTION_MARKET_V1_KIND = 'continuum/prediction-market/v1' as const\n\nexport type PredictionMarketVenue = 'trueo' | 'hyperliquid'\n\nexport type PredictionMarketRow = {\n venue: PredictionMarketVenue\n venueMarketId: string\n question: string\n categories: string[]\n yesPrice: number | null\n noPrice: number | null\n yesPriceLabel: string | null\n noPriceLabel: string | null\n volume: string\n tvl: number | null\n expiresAt: string | null\n expiresAtLabel: string | null\n tradingEndsLabel: string\n endOfTrading: number\n status: string\n outcome: number\n statusUpdatedAt: string | null\n resolutionLabel: string | null\n chainId: number\n paymentSymbol: string\n tradable: boolean\n rules?: string\n source?: string\n imageUrl?: string | null\n index?: number\n}\n\nexport type PredictionMarketEnvelope = {\n kind: typeof PREDICTION_MARKET_V1_KIND\n market: PredictionMarketRow & {\n yesTokenAddress?: string\n noTokenAddress?: string\n yesPoolAddress?: string\n noPoolAddress?: string\n paymentTokenAddress?: string\n endOfTrading?: number\n ohlc?: TrueoOhlcBar[]\n orderbook?: TrueoOrderbook | null\n }\n}\n\nexport function trueoMarketToPredictionRow(row: TrueoMarketRow): PredictionMarketRow {\n const status = trueoMarketStatusLabel(row)\n return {\n venue: 'trueo',\n venueMarketId: row.address,\n question: row.question,\n categories: row.categories,\n yesPrice: row.yesPrice,\n noPrice: row.noPrice,\n yesPriceLabel: row.yesPriceLabel,\n noPriceLabel: row.noPriceLabel,\n volume: trueoCompactVolumeLabel(row.size),\n tvl: row.tvl,\n expiresAt: row.expiresAt,\n expiresAtLabel: row.expiresAtLabel,\n tradingEndsLabel: trueoTradingEndsCopy(row),\n endOfTrading: row.endOfTrading,\n status,\n outcome: row.outcome,\n statusUpdatedAt: row.statusUpdatedAt,\n resolutionLabel: trueoResolutionCopy(row),\n chainId: row.chainId,\n paymentSymbol: row.paymentTokenSymbol,\n tradable: trueoMarketVotingOpen(row),\n rules: row.rules,\n source: row.source,\n imageUrl: row.imageUrl,\n }\n}\n\nexport async function searchPredictionMarkets(args: {\n query?: string\n category?: string\n venues?: string[]\n trending?: boolean\n includeAll?: boolean\n limit?: number\n offset?: number\n indexBase?: number\n excludeAddresses?: string[]\n}): Promise<{\n markets: PredictionMarketRow[]\n notes: string\n hasMore: boolean\n nextOffset: number\n nextIndexBase: number\n includeAll: boolean\n}> {\n const venues = (args.venues ?? ['trueo', 'hyperliquid']).map((v) => v.trim().toLowerCase()).filter(Boolean)\n const wantTrueo = venues.includes('trueo')\n const wantHl = venues.includes('hyperliquid')\n if (!wantTrueo && !wantHl) {\n return {\n markets: [],\n notes: 'No supported venues in the filter. Use trueo and/or hyperliquid.',\n hasMore: false,\n includeAll: false,\n nextOffset: 0,\n nextIndexBase: 0,\n }\n }\n const includeAll = args.includeAll === true\n const offset = Math.max(args.offset ?? 0, 0)\n const indexBase = Math.max(args.indexBase ?? 0, 0)\n const limit = args.limit ?? TRUEO_MARKET_PAGE_SIZE\n const exclude = new Set((args.excludeAddresses ?? []).map((id) => id.trim().toLowerCase()).filter(Boolean))\n\n let hlAll: PredictionMarketRow[] = []\n let hlError = ''\n if (wantHl) {\n try {\n const listed = await listHyperliquidOutcomeMarkets({ query: args.query })\n hlAll = listed.markets\n .map((market) => hyperliquidOutcomeToPredictionFields(market, HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID))\n .filter((row) => !exclude.has(row.venueMarketId.toLowerCase()))\n } catch (error) {\n hlError = error instanceof Error ? error.message : 'Hyperliquid outcome search failed.'\n }\n }\n\n if (!wantTrueo) {\n const page = hlAll.slice(offset, offset + limit).map((row, i) => ({ ...row, index: indexBase + i + 1 }))\n const nextOffset = offset + page.length\n const nextIndexBase = indexBase + page.length\n const more = nextOffset < hlAll.length\n return {\n markets: page,\n hasMore: more,\n nextOffset,\n nextIndexBase,\n includeAll: false,\n notes: hlError\n ? hlError\n : page.length\n ? `Hyperliquid outcome markets. ${more ? `More: offset=${nextOffset}, indexBase=${nextIndexBase}.` : 'End of results.'} Pick #N then get_prediction_market with venue hyperliquid.`\n : `No Hyperliquid outcome title match for ${JSON.stringify(args.query?.trim() ?? '')}.`,\n }\n }\n\n const hlPrefix = offset === 0 ? hlAll.slice(0, limit) : []\n const page = await listTrueoMarketsPage({\n query: args.query,\n category: args.category,\n offset,\n includeAll,\n trending: args.trending,\n excludeAddresses: args.excludeAddresses,\n })\n const trueoRows = page.markets\n .map(trueoMarketToPredictionRow)\n .filter((row) => !exclude.has(row.venueMarketId.toLowerCase()))\n .slice(0, limit)\n const markets = [...hlPrefix, ...trueoRows].map((row, i) => ({ ...row, index: indexBase + i + 1 }))\n const nextIndexBase = indexBase + markets.length\n const scope = trueoSearchScopeNote(includeAll)\n const q = args.query?.trim() ?? ''\n const hlNote =\n hlPrefix.length > 0\n ? `Included ${hlPrefix.length} Hyperliquid outcome match(es) on this page (venue hyperliquid).`\n : hlError\n if (q && markets.length === 0) {\n return {\n markets,\n hasMore: page.hasMore,\n nextOffset: page.nextOffset,\n nextIndexBase,\n includeAll,\n notes: `No live or recent title match for ${JSON.stringify(q)} after scanning Trueo${wantHl ? ' and Hyperliquid' : ''}. Do not list trending unless the operator asked. ${scope} ${hlError}`.trim(),\n }\n }\n const more = page.hasMore\n ? `More Trueo: search_prediction_markets with offset=${page.nextOffset}, trending=false, indexBase=${nextIndexBase}, excludeAddresses from this page's venueMarketIds.`\n : 'End of Trueo results.'\n return {\n markets,\n hasMore: page.hasMore,\n nextOffset: page.nextOffset,\n nextIndexBase,\n includeAll,\n notes: `${hlNote} ${scope} ${more} Pick #N then get_prediction_market.`.replace(/\\s+/g, ' ').trim(),\n }\n}\n\nexport function buildPredictionMarketEnvelope(\n market: PredictionMarketEnvelope['market'],\n): PredictionMarketEnvelope {\n return { kind: PREDICTION_MARKET_V1_KIND, market }\n}\n\nexport async function searchPredictionMarketsSummary(input: {\n query?: string\n category?: string\n venues?: string[]\n trending?: boolean\n includeAll?: boolean\n limit?: number\n offset?: number\n indexBase?: number\n excludeAddresses?: string[]\n}) {\n return searchPredictionMarkets(input)\n}\n\nexport function trueoHoldingTokenAddressesFromRegistry(\n tokens: Array<{ contractAddress?: string; symbol?: string; name?: string }>,\n): string[] {\n const out: string[] = []\n const seen = new Set<string>()\n for (const t of tokens) {\n const addr = String(t.contractAddress ?? '').trim().toLowerCase()\n if (!addr || seen.has(addr)) continue\n if (!isTrueoOutcomeTokenLabel(t.symbol, t.name)) continue\n seen.add(addr)\n out.push(addr)\n }\n return out\n}\n\nexport async function listPredictionMarketsForHoldings(args: {\n tokenAddresses?: string[]\n marketAddresses?: string[]\n}): Promise<{\n markets: PredictionMarketRow[]\n notes: string\n hasMore: boolean\n nextOffset: number\n nextIndexBase: number\n includeAll: boolean\n}> {\n const marketIds = new Set(\n (args.marketAddresses ?? []).map((a) => a.trim().toLowerCase()).filter((a) => a.startsWith('0x')),\n )\n const tokens = (args.tokenAddresses ?? []).map((a) => a.trim().toLowerCase()).filter((a) => a.startsWith('0x'))\n for (const token of tokens) {\n try {\n const page = await searchTrueoMarketsPage({\n query: token,\n includeAll: true,\n limit: TRUEO_MARKET_PAGE_SIZE,\n })\n for (const row of page.markets) {\n if (row.yesTokenAddress === token || row.noTokenAddress === token || row.address === token) {\n marketIds.add(row.address)\n }\n }\n } catch {\n /* keep going */\n }\n }\n const markets: PredictionMarketRow[] = []\n let i = 0\n for (const id of marketIds) {\n try {\n const row = await fetchTrueoMarket({ marketAddress: id })\n markets.push({ ...trueoMarketToPredictionRow(row), index: ++i })\n } catch {\n /* skip stale address */\n }\n }\n const notes =\n markets.length === 0\n ? 'No matching holdings. Pass YES/NO token addresses from get_token_registry (or add_to_token_registry after a bet) and/or marketAddresses from prior bets.'\n : `Live status for ${markets.length} market(s) you hold or named. Pick #N then get_prediction_market.`\n return {\n markets,\n notes,\n hasMore: false,\n nextOffset: 0,\n nextIndexBase: markets.length,\n includeAll: true,\n }\n}\n\nexport async function listMyPredictionMarketsSummary(input: {\n tokenAddresses?: string[]\n marketAddresses?: string[]\n}) {\n return listPredictionMarketsForHoldings(input)\n}\n\nexport async function getPredictionMarketSummary(input: { venue?: string; venueMarketId: string }) {\n const venue = (input.venue ?? 'trueo').trim().toLowerCase()\n if (venue === 'hyperliquid') {\n const outcomeId = Number.parseInt(input.venueMarketId, 10)\n if (!Number.isFinite(outcomeId)) {\n throw new Error('Hyperliquid venueMarketId must be the outcome id.')\n }\n const market = await getHyperliquidOutcomeMarket({ outcomeId })\n const [yesBook, noBook] = await Promise.all([\n fetchHyperliquidOutcomeBook({ coin: market.yesCoin }),\n fetchHyperliquidOutcomeBook({ coin: market.noCoin }),\n ])\n let ohlc: TrueoOhlcBar[] = []\n try {\n ohlc = await fetchHyperliquidOutcomeChanceSeries({ coin: market.yesCoin })\n } catch {\n ohlc = []\n }\n const row = {\n ...hyperliquidOutcomeToPredictionFields(market, HYPERLIQUID_OUTCOME_MAINNET_CHAIN_ID),\n yesBook,\n noBook,\n ohlc,\n }\n return {\n kind: PREDICTION_MARKET_V1_KIND,\n ...row,\n envelope: buildPredictionMarketEnvelope(row as unknown as PredictionMarketEnvelope['market']),\n }\n }\n if (venue !== 'trueo') {\n throw new Error(`Venue \"${venue}\" is not supported. Use trueo or hyperliquid.`)\n }\n const row = await fetchTrueoMarket({ marketAddress: input.venueMarketId })\n let ohlc: TrueoOhlcBar[] = []\n let orderbook: TrueoOrderbook | null = null\n try {\n ohlc = await fetchTrueoChanceSeries({\n poolId: row.yesPoolAddress,\n })\n } catch {\n ohlc = []\n }\n try {\n orderbook = await fetchTrueoOrderbook({ marketAddress: row.address, side: 'yes' })\n } catch {\n orderbook = null\n }\n const market = {\n ...trueoMarketToPredictionRow(row),\n rules: row.rules,\n source: row.source,\n yesTokenAddress: row.yesTokenAddress,\n noTokenAddress: row.noTokenAddress,\n yesPoolAddress: row.yesPoolAddress,\n noPoolAddress: row.noPoolAddress,\n paymentTokenAddress: row.paymentTokenAddress,\n endOfTrading: row.endOfTrading,\n ohlc,\n orderbook,\n }\n return {\n kind: PREDICTION_MARKET_V1_KIND,\n ...market,\n envelope: buildPredictionMarketEnvelope(market),\n }\n}\n","import { TRUEO_BASE_CHAIN_ID } from './support.js'\n\nexport type TrueoPurposeAction =\n | 'wrapTyd'\n | 'unwrapTyd'\n | 'mint'\n | 'burn'\n | 'redeem'\n | 'swap'\n | 'createOrder'\n | 'cancelOrder'\n\nexport function buildTrueoPurposePrefill(args: {\n action: TrueoPurposeAction\n side?: 'yes' | 'no'\n amountHuman?: string\n paymentSymbol?: string\n question?: string\n chainId?: number\n}): string {\n const chainId = args.chainId ?? TRUEO_BASE_CHAIN_ID\n const q = args.question?.trim() ? ` on ${args.question.trim()}` : ''\n const amt = args.amountHuman?.trim() ?? ''\n const sym = args.paymentSymbol?.trim() || 'TYD'\n const side = args.side === 'no' ? 'No' : 'Yes'\n switch (args.action) {\n case 'wrapTyd':\n return `Trueo: mint ${amt || ''} TYD from USDC on Base (chainId ${chainId})`.replace(/\\s+/g, ' ').trim()\n case 'unwrapTyd':\n return `Trueo: unwrap ${amt || ''} TYD to USDC on Base (chainId ${chainId})`.replace(/\\s+/g, ' ').trim()\n case 'mint':\n return `Trueo: mint ${amt || 'YES+NO'} ${sym}${q} on Base (chainId ${chainId})`\n case 'burn':\n return `Trueo: burn ${amt || 'YES+NO'}${q} on Base (chainId ${chainId})`\n case 'redeem':\n return `Trueo: redeem ${amt || 'winning tokens'}${q} on Base (chainId ${chainId})`\n case 'swap':\n return `Trueo: buy ${side} ${amt || ''} ${sym}${q} on Base (chainId ${chainId})`.replace(/\\s+/g, ' ').trim()\n case 'createOrder':\n return `Trueo: limit ${side} ${amt || ''} ${sym}${q} on Base (chainId ${chainId})`.replace(/\\s+/g, ' ').trim()\n case 'cancelOrder':\n return `Trueo: cancel order${q} on Base (chainId ${chainId})`\n default:\n return `Trueo${q} on Base (chainId ${chainId})`\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","/** 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 { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import {\n createPublicClient,\n defineChain,\n getAddress,\n parseUnits,\n type Address,\n type PublicClient,\n} from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { defiMultisignExpiryUnixSeconds } from '../../../core/expiry.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmChainDetail, EvmTxStep } from '../../../chains/evm/types.js'\nimport { trueoErc20Abi, trueoTydVaultAbi } from './abi.js'\nimport { assertTrueoBetCanCreate, buildTrueoBetExtraJson } from './betWindow.js'\nimport {\n encodeErc20Approve,\n encodePermit2Approve,\n encodeTrueoAdapterBurn,\n encodeTrueoAdapterMint,\n encodeTrueoAdapterRedeem,\n encodeTrueoBurn,\n encodeTrueoCancelOrder,\n encodeTrueoCreateOrder,\n encodeTrueoMint,\n encodeTrueoRedeem,\n encodeTrueoTydDeposit,\n encodeTrueoTydRedeem,\n encodeTrueoV4ExactInSwap,\n trueoPermit2Expiration,\n trueoSwapDeadline,\n type TrueoPoolKey,\n} from './encode.js'\nimport { fetchTrueoMarket } from './marketApi.js'\nimport { readTrueoPoolKeys } from './orderbook.js'\nimport { buildTrueoPurposePrefill } from './purpose.js'\nimport {\n TRUEO_BASE_CHAIN_ID,\n TRUEO_ORDER_MANAGER,\n TRUEO_PERMIT2,\n TRUEO_PROTOCOL_ID,\n TRUEO_TRUTH_MARKET_ADAPTER,\n TRUEO_TYD,\n TRUEO_TYD_DECIMALS,\n TRUEO_UNIVERSAL_ROUTER_ADAPTER,\n TRUEO_USDC,\n assertTrueoChainId,\n} from './support.js'\n\nexport const TRUEO_APPROVE_FALLBACK_GAS = 80_000n\nexport const TRUEO_MINT_FALLBACK_GAS = 450_000n\nexport const TRUEO_TYD_VAULT_FALLBACK_GAS = 350_000n\nexport const TRUEO_SWAP_FALLBACK_GAS = 650_000n\nexport const TRUEO_ORDER_FALLBACK_GAS = 520_000n\n\ntype TrueoStep = EvmTxStep & { kind: string }\n\nfunction client(rpcUrl: string): PublicClient {\n const chain = defineChain({\n id: TRUEO_BASE_CHAIN_ID,\n name: 'Base',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n return createPublicClient({ chain, transport: defiEvmTransport(rpcUrl) })\n}\n\nasync function allowance(args: {\n rpcUrl: string\n token: Address\n owner: Address\n spender: Address\n}): Promise<bigint> {\n return client(args.rpcUrl).readContract({\n address: args.token,\n abi: trueoErc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n}\n\nasync function pushApproveIfNeeded(args: {\n steps: TrueoStep[]\n rpcUrl: string\n token: Address\n owner: Address\n spender: Address\n amount: bigint\n}): Promise<void> {\n const current = await allowance({\n rpcUrl: args.rpcUrl,\n token: args.token,\n owner: args.owner,\n spender: args.spender,\n })\n if (current >= args.amount) return\n if (current > 0n) {\n args.steps.push({\n kind: 'approve_zero',\n to: args.token,\n data: encodeErc20Approve(args.spender, 0n),\n value: 0n,\n fallbackGas: TRUEO_APPROVE_FALLBACK_GAS,\n })\n }\n args.steps.push({\n kind: 'approve',\n to: args.token,\n data: encodeErc20Approve(args.spender, args.amount),\n value: 0n,\n fallbackGas: TRUEO_APPROVE_FALLBACK_GAS,\n })\n}\n\nfunction mergeExtraJson(\n result: { bodyForSign: Record<string, unknown> },\n extra: Record<string, unknown>,\n): void {\n const body = result.bodyForSign\n const existing =\n typeof body.extraJSON === 'string'\n ? (JSON.parse(body.extraJSON) as Record<string, unknown>)\n : ((body.extraJSON as Record<string, unknown>) ?? {})\n body.extraJSON = JSON.stringify({ ...existing, ...extra })\n}\n\nasync function finalizeTrueo(args: {\n keyGen: KeyGenSubsetForPermit\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n purposeSuffix: string\n expiryDate?: number\n steps: TrueoStep[]\n betExtra?: ReturnType<typeof buildTrueoBetExtraJson>\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const expiryDate = defiMultisignExpiryUnixSeconds(TRUEO_PROTOCOL_ID, args.expiryDate)\n const first = args.steps[0]\n if (!first) throw new Error('Trueo: no transaction steps.')\n const firstDataNo0x = first.data.startsWith('0x') ? first.data.slice(2) : first.data\n const result = await buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: TRUEO_BASE_CHAIN_ID,\n rpcUrl: args.rpcUrl,\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n expiryDate,\n },\n steps: args.steps,\n purposeSuffix: args.purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: first.to,\n buildBatchMeta: ({ step, index }) => {\n const s = step as TrueoStep\n return {\n signatureText: JSON.stringify({\n kind: 'Trueo',\n name: s.kind,\n index,\n chainId: TRUEO_BASE_CHAIN_ID,\n }),\n evm: { type: `trueo_${s.kind}`, version: 1, chainId: String(TRUEO_BASE_CHAIN_ID) },\n }\n },\n })\n if (args.betExtra) mergeExtraJson(result, args.betExtra)\n return result\n}\n\ntype CommonBuildArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address | string\n purposeText: string\n expiryDate?: number\n marketAddress: string\n amountHuman: string\n}\n\nfunction parseAmount(human: string, decimals: number): bigint {\n const amt = parseUnits(String(human).trim(), decimals)\n if (amt <= 0n) throw new Error('Amount must be greater than zero.')\n return amt\n}\n\ntype TydVaultBuildArgs = Omit<CommonBuildArgs, 'marketAddress'>\n\nasync function assertTrueoTydVaultUnderlying(rpcUrl: string): Promise<void> {\n const underlying = await client(rpcUrl).readContract({\n address: TRUEO_TYD,\n abi: trueoTydVaultAbi,\n functionName: 'asset',\n })\n if (getAddress(underlying) !== TRUEO_USDC) {\n throw new Error('TYD vault underlying is not Base USDC.')\n }\n}\n\n/** Deposit Base USDC into the Yearn TYD ERC-4626 vault. No market. */\nexport async function buildEvmMultisignBodyTrueoWrapTyd(\n args: TydVaultBuildArgs,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const amount = parseAmount(args.amountHuman, 6)\n await assertTrueoTydVaultUnderlying(args.rpcUrl)\n const steps: TrueoStep[] = []\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: TRUEO_USDC,\n owner: executor,\n spender: TRUEO_TYD,\n amount,\n })\n steps.push({\n kind: 'wrap_tyd',\n to: TRUEO_TYD,\n data: encodeTrueoTydDeposit(amount, executor),\n value: 0n,\n fallbackGas: TRUEO_TYD_VAULT_FALLBACK_GAS,\n })\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({ action: 'wrapTyd', amountHuman: args.amountHuman, paymentSymbol: 'USDC' })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: 'Trueo: mint TYD from USDC (Yearn ERC-4626 deposit).',\n steps,\n })\n}\n\n/** Redeem TYD shares back to Base USDC. No market. */\nexport async function buildEvmMultisignBodyTrueoUnwrapTyd(\n args: TydVaultBuildArgs,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const amount = parseAmount(args.amountHuman, TRUEO_TYD_DECIMALS)\n await assertTrueoTydVaultUnderlying(args.rpcUrl)\n const steps: TrueoStep[] = [\n {\n kind: 'unwrap_tyd',\n to: TRUEO_TYD,\n data: encodeTrueoTydRedeem(amount, executor, executor),\n value: 0n,\n fallbackGas: TRUEO_TYD_VAULT_FALLBACK_GAS,\n },\n ]\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({ action: 'unwrapTyd', amountHuman: args.amountHuman, paymentSymbol: 'TYD' })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: 'Trueo: unwrap TYD to USDC (Yearn ERC-4626 redeem).',\n steps,\n })\n}\n\nexport async function buildEvmMultisignBodyTrueoMint(args: CommonBuildArgs & {\n paymentKind?: 'tyd' | 'usdc'\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const market = getAddress(args.marketAddress)\n const paymentKind = args.paymentKind === 'usdc' ? 'usdc' : 'tyd'\n const decimals = paymentKind === 'usdc' ? 6 : TRUEO_TYD_DECIMALS\n const amount = parseAmount(args.amountHuman, decimals)\n const row = await fetchTrueoMarket({ marketAddress: market })\n const steps: TrueoStep[] = []\n if (paymentKind === 'usdc') {\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: TRUEO_USDC,\n owner: executor,\n spender: TRUEO_TRUTH_MARKET_ADAPTER,\n amount,\n })\n steps.push({\n kind: 'adapter_mint',\n to: TRUEO_TRUTH_MARKET_ADAPTER,\n data: encodeTrueoAdapterMint(market, amount),\n value: 0n,\n fallbackGas: TRUEO_MINT_FALLBACK_GAS,\n })\n } else {\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: TRUEO_TYD,\n owner: executor,\n spender: market,\n amount,\n })\n steps.push({\n kind: 'mint',\n to: market,\n data: encodeTrueoMint(amount),\n value: 0n,\n fallbackGas: TRUEO_MINT_FALLBACK_GAS,\n })\n }\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({\n action: 'mint',\n amountHuman: args.amountHuman,\n paymentSymbol: paymentKind === 'usdc' ? 'USDC' : 'TYD',\n question: row.question,\n })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: `Trueo: mint YES+NO on ${row.question || market}.`,\n steps,\n })\n}\n\nexport async function buildEvmMultisignBodyTrueoBurn(args: CommonBuildArgs & {\n paymentKind?: 'tyd' | 'usdc'\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const market = getAddress(args.marketAddress)\n const row = await fetchTrueoMarket({ marketAddress: market })\n const amount = parseAmount(args.amountHuman, 18)\n const steps: TrueoStep[] = []\n const paymentKind = args.paymentKind === 'usdc' ? 'usdc' : 'tyd'\n if (paymentKind === 'usdc') {\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(row.yesTokenAddress),\n owner: executor,\n spender: TRUEO_TRUTH_MARKET_ADAPTER,\n amount,\n })\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(row.noTokenAddress),\n owner: executor,\n spender: TRUEO_TRUTH_MARKET_ADAPTER,\n amount,\n })\n steps.push({\n kind: 'adapter_burn',\n to: TRUEO_TRUTH_MARKET_ADAPTER,\n data: encodeTrueoAdapterBurn(market, amount),\n value: 0n,\n fallbackGas: TRUEO_MINT_FALLBACK_GAS,\n })\n } else {\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(row.yesTokenAddress),\n owner: executor,\n spender: market,\n amount,\n })\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(row.noTokenAddress),\n owner: executor,\n spender: market,\n amount,\n })\n steps.push({\n kind: 'burn',\n to: market,\n data: encodeTrueoBurn(amount),\n value: 0n,\n fallbackGas: TRUEO_MINT_FALLBACK_GAS,\n })\n }\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({ action: 'burn', amountHuman: args.amountHuman, question: row.question })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: `Trueo: burn YES+NO on ${row.question || market}.`,\n steps,\n })\n}\n\nexport async function buildEvmMultisignBodyTrueoRedeem(args: CommonBuildArgs & {\n paymentKind?: 'tyd' | 'usdc'\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const market = getAddress(args.marketAddress)\n const row = await fetchTrueoMarket({ marketAddress: market })\n const amount = parseAmount(args.amountHuman, 18)\n const steps: TrueoStep[] = []\n const paymentKind = args.paymentKind === 'usdc' ? 'usdc' : 'tyd'\n const winning = row.yesTokenAddress\n if (paymentKind === 'usdc') {\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(winning),\n owner: executor,\n spender: TRUEO_TRUTH_MARKET_ADAPTER,\n amount,\n })\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(row.noTokenAddress),\n owner: executor,\n spender: TRUEO_TRUTH_MARKET_ADAPTER,\n amount,\n })\n steps.push({\n kind: 'adapter_redeem',\n to: TRUEO_TRUTH_MARKET_ADAPTER,\n data: encodeTrueoAdapterRedeem(market, amount),\n value: 0n,\n fallbackGas: TRUEO_MINT_FALLBACK_GAS,\n })\n } else {\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(winning),\n owner: executor,\n spender: market,\n amount,\n })\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: getAddress(row.noTokenAddress),\n owner: executor,\n spender: market,\n amount,\n })\n steps.push({\n kind: 'redeem',\n to: market,\n data: encodeTrueoRedeem(amount),\n value: 0n,\n fallbackGas: TRUEO_MINT_FALLBACK_GAS,\n })\n }\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({ action: 'redeem', amountHuman: args.amountHuman, question: row.question })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: `Trueo: redeem on ${row.question || market}.`,\n steps,\n })\n}\n\nfunction zeroForOneBuyOutcome(poolKey: TrueoPoolKey, tyd: Address): boolean {\n return getAddress(poolKey.currency0) === getAddress(tyd)\n}\n\nasync function loadBetMarketAndPool(args: {\n rpcUrl: string\n marketAddress: string\n side: 'yes' | 'no'\n}): Promise<{ row: Awaited<ReturnType<typeof fetchTrueoMarket>>; poolKey: TrueoPoolKey }> {\n const row = await fetchTrueoMarket({ marketAddress: args.marketAddress })\n assertTrueoBetCanCreate(row)\n const keys = await readTrueoPoolKeys({ rpcUrl: args.rpcUrl, marketAddress: getAddress(args.marketAddress) })\n if (!keys) throw new Error('Could not read Trueo V2 pool keys. Confirm the market is Uniswap v4.')\n return { row, poolKey: args.side === 'no' ? keys.no : keys.yes }\n}\n\nexport async function buildEvmMultisignBodyTrueoSwap(args: CommonBuildArgs & {\n side: 'yes' | 'no'\n amountOutMinimumHuman?: string\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const { row, poolKey } = await loadBetMarketAndPool({\n rpcUrl: args.rpcUrl,\n marketAddress: args.marketAddress,\n side: args.side,\n })\n const amount = parseAmount(args.amountHuman, TRUEO_TYD_DECIMALS)\n const amountOutMin = args.amountOutMinimumHuman?.trim()\n ? parseUnits(args.amountOutMinimumHuman.trim(), 18)\n : 0n\n const steps: TrueoStep[] = []\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: TRUEO_TYD,\n owner: executor,\n spender: TRUEO_PERMIT2,\n amount,\n })\n steps.push({\n kind: 'permit2_approve',\n to: TRUEO_PERMIT2,\n data: encodePermit2Approve({\n token: TRUEO_TYD,\n spender: TRUEO_UNIVERSAL_ROUTER_ADAPTER,\n amount,\n expiration: trueoPermit2Expiration(),\n }),\n value: 0n,\n fallbackGas: TRUEO_APPROVE_FALLBACK_GAS,\n })\n const encoded = encodeTrueoV4ExactInSwap({\n poolKey,\n zeroForOne: zeroForOneBuyOutcome(poolKey, TRUEO_TYD),\n amountIn: amount,\n amountOutMinimum: amountOutMin,\n recipient: executor,\n deadline: trueoSwapDeadline(),\n })\n steps.push({\n kind: 'swap',\n to: encoded.to,\n data: encoded.data,\n value: 0n,\n fallbackGas: TRUEO_SWAP_FALLBACK_GAS,\n routerSwap: true,\n })\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({\n action: 'swap',\n side: args.side,\n amountHuman: args.amountHuman,\n paymentSymbol: 'TYD',\n question: row.question,\n })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: `Trueo: buy ${args.side === 'no' ? 'No' : 'Yes'} ${args.amountHuman} TYD.`,\n steps,\n betExtra: buildTrueoBetExtraJson({\n action: 'swap',\n marketAddress: row.address,\n endOfTrading: row.endOfTrading,\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyTrueoCreateOrder(args: CommonBuildArgs & {\n side: 'yes' | 'no'\n tickLower: number\n tickUpper: number\n enablePartialFill?: boolean\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const { row, poolKey } = await loadBetMarketAndPool({\n rpcUrl: args.rpcUrl,\n marketAddress: args.marketAddress,\n side: args.side,\n })\n const amount = parseAmount(args.amountHuman, TRUEO_TYD_DECIMALS)\n const steps: TrueoStep[] = []\n await pushApproveIfNeeded({\n steps,\n rpcUrl: args.rpcUrl,\n token: TRUEO_TYD,\n owner: executor,\n spender: TRUEO_PERMIT2,\n amount,\n })\n steps.push({\n kind: 'permit2_approve',\n to: TRUEO_PERMIT2,\n data: encodePermit2Approve({\n token: TRUEO_TYD,\n spender: TRUEO_ORDER_MANAGER,\n amount,\n expiration: trueoPermit2Expiration(),\n }),\n value: 0n,\n fallbackGas: TRUEO_APPROVE_FALLBACK_GAS,\n })\n steps.push({\n kind: 'createOrder',\n to: TRUEO_ORDER_MANAGER,\n data: encodeTrueoCreateOrder({\n poolKey,\n amountIn: amount,\n tickLower: args.tickLower,\n tickUpper: args.tickUpper,\n zeroForOne: zeroForOneBuyOutcome(poolKey, TRUEO_TYD),\n enablePartialFill: args.enablePartialFill !== false,\n }),\n value: 0n,\n fallbackGas: TRUEO_ORDER_FALLBACK_GAS,\n })\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({\n action: 'createOrder',\n side: args.side,\n amountHuman: args.amountHuman,\n question: row.question,\n })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: `Trueo: limit ${args.side === 'no' ? 'No' : 'Yes'} ${args.amountHuman} TYD.`,\n steps,\n betExtra: buildTrueoBetExtraJson({\n action: 'createOrder',\n marketAddress: row.address,\n endOfTrading: row.endOfTrading,\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyTrueoCancelOrder(args: {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address | string\n purposeText: string\n expiryDate?: number\n marketAddress: string\n side: 'yes' | 'no'\n orderId: number\n}): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n assertTrueoChainId(args.chainId)\n const executor = getAddress(args.executorAddress as `0x${string}`)\n const row = await fetchTrueoMarket({ marketAddress: args.marketAddress })\n const keys = await readTrueoPoolKeys({ rpcUrl: args.rpcUrl, marketAddress: getAddress(args.marketAddress) })\n if (!keys) throw new Error('Could not read Trueo V2 pool keys.')\n const poolKey = args.side === 'no' ? keys.no : keys.yes\n const steps: TrueoStep[] = [\n {\n kind: 'cancelOrder',\n to: TRUEO_ORDER_MANAGER,\n data: encodeTrueoCancelOrder({ poolKey, orderId: args.orderId }),\n value: 0n,\n fallbackGas: TRUEO_ORDER_FALLBACK_GAS,\n },\n ]\n const purposeText =\n args.purposeText.trim() ||\n buildTrueoPurposePrefill({ action: 'cancelOrder', question: row.question })\n return finalizeTrueo({\n ...args,\n executorAddress: executor,\n purposeText,\n purposeSuffix: `Trueo: cancel order ${args.orderId}.`,\n steps,\n })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { TRUEO_PROTOCOL_ID, isTrueoChainSupported } from './support.js'\n\nexport const trueoProtocolModule: ProtocolModule = {\n id: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n const id = typeof ctx.chainId === 'string' ? Number(ctx.chainId) : ctx.chainId\n return ctx.chainCategory === 'evm' && isTrueoChainSupported(id)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'erc20' || token.kind === 'ctmerc20')\n },\n actions: [\n {\n id: 'trueo.wrap-tyd',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Mint TYD by depositing Base USDC into the Yearn ERC-4626 vault',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.unwrap-tyd',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Redeem TYD shares back to Base USDC',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.mint',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Mint YES+NO from TYD (or USDC via adapter)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.burn',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Burn equal YES+NO back to TYD',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.redeem',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Redeem winning outcome tokens after resolution',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.swap',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Buy Yes or No with TYD via UniversalRouterAdapter V4 swap',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.create-order',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Create an on-chain OrderManager limit order',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n {\n id: 'trueo.cancel-order',\n protocolId: TRUEO_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel an on-chain OrderManager order',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {},\n },\n ],\n}\n\nregisterProtocolModule(trueoProtocolModule)\n\nexport * from './support.js'\nexport * from './abi.js'\nexport * from './encode.js'\nexport * from './prices.js'\nexport * from './marketApi.js'\nexport * from './marketScope.js'\nexport * from './betWindow.js'\nexport * from './orderbook.js'\nexport * from './predictionSearch.js'\nexport * from './purpose.js'\nexport * from './addTokens.js'\nexport * from './multisign.js'\n"]}
|