@continuumdao/ctm-mpc-defi 0.2.49 → 0.2.50

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.
@@ -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/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","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","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'\n\nexport const PREDICTION_MARKET_V1_KIND = 'continuum/prediction-market/v1' as const\n\nexport type PredictionMarketVenue = 'trueo'\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']).map((v) => v.trim().toLowerCase()).filter(Boolean)\n if (venues.length && !venues.includes('trueo')) {\n return {\n markets: [],\n notes: 'No supported venues in the filter. v1 adapter is trueo (Base).',\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 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 markets = page.markets\n .map(trueoMarketToPredictionRow)\n .slice(0, args.limit ?? TRUEO_MARKET_PAGE_SIZE)\n .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 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 the catalog. Do not list trending unless the operator asked. ${scope}`,\n }\n }\n const more = page.hasMore\n ? `More: search_prediction_markets with offset=${page.nextOffset}, trending=false, indexBase=${nextIndexBase}, excludeAddresses from this page's venueMarketIds.`\n : 'End of results.'\n return {\n markets,\n hasMore: page.hasMore,\n nextOffset: page.nextOffset,\n nextIndexBase,\n includeAll,\n notes: `${scope} ${more} Pick #N then get_prediction_market.`,\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 !== 'trueo') {\n throw new Error(`Venue \"${venue}\" is not supported. v1 adapter is trueo.`)\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])\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@continuumdao/ctm-mpc-defi",
3
- "version": "0.2.49",
3
+ "version": "0.2.50",
4
4
  "description": "Continuum MPC DeFi protocol library — multiSignRequest builders for EVM and future chain categories",
5
5
  "repository": {
6
6
  "type": "git",
@@ -135,6 +135,11 @@
135
135
  "import": "./dist/protocols/evm/derive/index.js",
136
136
  "require": "./dist/protocols/evm/derive/index.cjs"
137
137
  },
138
+ "./protocols/evm/trueo": {
139
+ "types": "./dist/protocols/evm/trueo/index.d.ts",
140
+ "import": "./dist/protocols/evm/trueo/index.js",
141
+ "require": "./dist/protocols/evm/trueo/index.cjs"
142
+ },
138
143
  "./agent": {
139
144
  "types": "./dist/agent/catalog.d.ts",
140
145
  "import": "./dist/agent/catalog.js",