@elizaos/plugin-polymarket-app 2.0.3-beta.5 → 2.0.3-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/PolymarketAppView.d.ts +3 -0
  2. package/dist/PolymarketAppView.d.ts.map +1 -0
  3. package/dist/PolymarketAppView.helpers.d.ts +10 -0
  4. package/dist/PolymarketAppView.helpers.d.ts.map +1 -0
  5. package/dist/PolymarketAppView.helpers.js +30 -0
  6. package/dist/PolymarketAppView.helpers.js.map +1 -0
  7. package/dist/PolymarketAppView.interact.d.ts +3 -0
  8. package/dist/PolymarketAppView.interact.d.ts.map +1 -0
  9. package/dist/PolymarketAppView.interact.js +70 -0
  10. package/dist/PolymarketAppView.interact.js.map +1 -0
  11. package/dist/PolymarketAppView.js +704 -0
  12. package/dist/PolymarketAppView.js.map +1 -0
  13. package/dist/PolymarketPositionsPanel.d.ts +13 -0
  14. package/dist/PolymarketPositionsPanel.d.ts.map +1 -0
  15. package/dist/PolymarketPositionsPanel.js +349 -0
  16. package/dist/PolymarketPositionsPanel.js.map +1 -0
  17. package/dist/PolymarketView.d.ts +13 -0
  18. package/dist/PolymarketView.d.ts.map +1 -0
  19. package/dist/PolymarketView.js +58 -0
  20. package/dist/PolymarketView.js.map +1 -0
  21. package/dist/__fixtures__/contract.d.ts +9 -0
  22. package/dist/__fixtures__/contract.d.ts.map +1 -0
  23. package/dist/__fixtures__/contract.js +263 -0
  24. package/dist/__fixtures__/contract.js.map +1 -0
  25. package/dist/actions.d.ts +39 -0
  26. package/dist/actions.d.ts.map +1 -0
  27. package/dist/actions.js +661 -0
  28. package/dist/actions.js.map +1 -0
  29. package/dist/client.d.ts +25 -0
  30. package/dist/client.d.ts.map +1 -0
  31. package/dist/client.js +42 -0
  32. package/dist/client.js.map +1 -0
  33. package/dist/components/PolymarketSpatialView.d.ts +34 -0
  34. package/dist/components/PolymarketSpatialView.d.ts.map +1 -0
  35. package/dist/components/PolymarketSpatialView.js +248 -0
  36. package/dist/components/PolymarketSpatialView.js.map +1 -0
  37. package/dist/index.d.ts +14 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +24 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/orderbook.d.ts +15 -0
  42. package/dist/orderbook.d.ts.map +1 -0
  43. package/dist/orderbook.js +45 -0
  44. package/dist/orderbook.js.map +1 -0
  45. package/dist/plugin.d.ts +3 -0
  46. package/dist/plugin.d.ts.map +1 -0
  47. package/dist/plugin.js +108 -0
  48. package/dist/plugin.js.map +1 -0
  49. package/dist/polymarket-app.d.ts +4 -0
  50. package/dist/polymarket-app.d.ts.map +1 -0
  51. package/dist/polymarket-app.js +18 -0
  52. package/dist/polymarket-app.js.map +1 -0
  53. package/dist/polymarket-contracts.d.ts +162 -0
  54. package/dist/polymarket-contracts.d.ts.map +1 -0
  55. package/dist/polymarket-contracts.js +16 -0
  56. package/dist/polymarket-contracts.js.map +1 -0
  57. package/dist/polymarket-view-bundle.d.ts +3 -0
  58. package/dist/polymarket-view-bundle.d.ts.map +1 -0
  59. package/dist/polymarket-view-bundle.js +7 -0
  60. package/dist/polymarket-view-bundle.js.map +1 -0
  61. package/dist/provider-text.d.ts +5 -0
  62. package/dist/provider-text.d.ts.map +1 -0
  63. package/dist/provider-text.js +44 -0
  64. package/dist/provider-text.js.map +1 -0
  65. package/dist/provider.d.ts +3 -0
  66. package/dist/provider.d.ts.map +1 -0
  67. package/dist/provider.js +21 -0
  68. package/dist/provider.js.map +1 -0
  69. package/dist/register-routes.d.ts +2 -0
  70. package/dist/register-routes.d.ts.map +1 -0
  71. package/dist/register-routes.js +6 -0
  72. package/dist/register-routes.js.map +1 -0
  73. package/dist/register-terminal-view.d.ts +15 -0
  74. package/dist/register-terminal-view.d.ts.map +1 -0
  75. package/dist/register-terminal-view.js +25 -0
  76. package/dist/register-terminal-view.js.map +1 -0
  77. package/dist/register.d.ts +2 -0
  78. package/dist/register.d.ts.map +1 -0
  79. package/dist/register.js +17 -0
  80. package/dist/register.js.map +1 -0
  81. package/dist/routes.d.ts +7 -0
  82. package/dist/routes.d.ts.map +1 -0
  83. package/dist/routes.js +455 -0
  84. package/dist/routes.js.map +1 -0
  85. package/dist/ui.d.ts +6 -0
  86. package/dist/ui.d.ts.map +1 -0
  87. package/dist/ui.js +11 -0
  88. package/dist/ui.js.map +1 -0
  89. package/dist/usePolymarketState.d.ts +13 -0
  90. package/dist/usePolymarketState.d.ts.map +1 -0
  91. package/dist/usePolymarketState.js +59 -0
  92. package/dist/usePolymarketState.js.map +1 -0
  93. package/dist/views/bundle.js +535 -0
  94. package/dist/views/bundle.js.map +1 -0
  95. package/package.json +6 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/actions.ts"],"sourcesContent":["import type {\n Action,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n ProviderDataRecord,\n State,\n} from \"@elizaos/core\";\nimport { Service } from \"@elizaos/core\";\nimport { resolveApiToken, resolveDesktopApiPort } from \"@elizaos/shared\";\nimport type {\n PolymarketDisabledResponse,\n PolymarketMarket,\n PolymarketMarketResponse,\n PolymarketMarketsResponse,\n PolymarketOrderbookResponse,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"./polymarket-contracts.js\";\n\nconst ACTION_TIMEOUT_MS = 15_000;\nexport const PREDICTION_MARKET_SERVICE_TYPE = \"prediction-market\" as const;\nconst POLYMARKET_CONTEXTS = [\"finance\", \"crypto\", \"prediction-market\"] as const;\nconst POLYMARKET_ACTION_CONTEXTS = [\n ...POLYMARKET_CONTEXTS,\n \"payments\",\n] as const;\nconst POLYMARKET_ACTION_NAME = \"PREDICTION_MARKET\";\nconst POLYMARKET_READ_COMPAT_NAME = \"POLYMARKET_READ\";\nconst POLYMARKET_PLACE_ORDER_COMPAT_NAME = \"POLYMARKET_PLACE_ORDER\";\n\nfunction toCallbackData(data: ProviderDataRecord): Content[\"data\"] {\n return data as Content[\"data\"];\n}\nconst POLYMARKET_READ_KEYWORDS = [\n \"polymarket\",\n \"prediction market\",\n \"market\",\n \"markets\",\n \"orderbook\",\n \"positions\",\n \"odds\",\n \"forecast\",\n \"predicción\",\n \"mercado\",\n \"pronóstico\",\n \"marché\",\n \"prévision\",\n \"prognose\",\n \"markt\",\n \"mercado\",\n \"previsão\",\n \"mercato\",\n \"previsione\",\n \"予測市場\",\n \"オッズ\",\n \"预测市场\",\n \"赔率\",\n \"예측 시장\",\n \"배당\",\n] as const;\nconst POLYMARKET_TRADE_KEYWORDS = [\n ...POLYMARKET_READ_KEYWORDS,\n \"buy\",\n \"sell\",\n \"trade\",\n \"order\",\n \"comprar\",\n \"vender\",\n \"orden\",\n \"acheter\",\n \"vendre\",\n \"ordre\",\n \"kaufen\",\n \"verkaufen\",\n \"auftrag\",\n \"comprare\",\n \"vendere\",\n \"注文\",\n \"買う\",\n \"売る\",\n \"买入\",\n \"卖出\",\n \"订单\",\n \"매수\",\n \"매도\",\n] as const;\n\nconst READ_KINDS = [\n \"status\",\n \"markets\",\n \"market\",\n \"orderbook\",\n \"positions\",\n] as const;\ntype PolymarketReadKind = (typeof READ_KINDS)[number];\nconst POLYMARKET_OPS = [\"read\", \"place_order\"] as const;\ntype PolymarketOp = (typeof POLYMARKET_OPS)[number];\nconst POLYMARKET_READ_COMPAT_SIMILES = [\n POLYMARKET_READ_COMPAT_NAME,\n \"POLYMARKET_STATUS\",\n \"POLYMARKET_READINESS\",\n \"POLYMARKET_HEALTH\",\n \"POLYMARKET_GET_MARKETS\",\n \"POLYMARKET_MARKETS\",\n \"SEARCH_POLYMARKET_MARKETS\",\n \"POLYMARKET_GET_MARKET\",\n \"POLYMARKET_MARKET\",\n \"POLYMARKET_MARKET_DETAILS\",\n \"POLYMARKET_GET_ORDERBOOK\",\n \"POLYMARKET_ORDERBOOK\",\n \"POLYMARKET_QUOTE\",\n \"POLYMARKET_TOKEN_INFO\",\n \"POLYMARKET_GET_POSITIONS\",\n \"POLYMARKET_POSITIONS\",\n \"POLYMARKET_WALLET_POSITIONS\",\n] as const;\nconst POLYMARKET_PLACE_ORDER_COMPAT_SIMILES = [\n POLYMARKET_PLACE_ORDER_COMPAT_NAME,\n \"POLYMARKET_TRADE\",\n \"POLYMARKET_BUY\",\n \"POLYMARKET_SELL\",\n] as const;\nconst POLYMARKET_READ_OP_ALIASES = new Set([\n ...READ_KINDS,\n ...POLYMARKET_READ_COMPAT_SIMILES.map((name) => name.toLowerCase()),\n]);\nconst POLYMARKET_PLACE_ORDER_OP_ALIASES = new Set([\n ...POLYMARKET_PLACE_ORDER_COMPAT_SIMILES.map((name) => name.toLowerCase()),\n \"trade\",\n \"order\",\n \"buy\",\n \"sell\",\n]);\n\nfunction getApiBase(): string {\n return `http://127.0.0.1:${resolveDesktopApiPort(process.env)}`;\n}\n\nfunction buildAuthHeaders(): Record<string, string> {\n const token = resolveApiToken(process.env);\n if (!token) return {};\n return {\n Authorization: /^Bearer\\s+/i.test(token) ? token : `Bearer ${token}`,\n };\n}\n\nfunction readParam(\n options: HandlerOptions | Record<string, unknown> | undefined,\n key: string,\n): unknown {\n const maybeOptions = options as { parameters?: Record<string, unknown> };\n if (maybeOptions?.parameters && key in maybeOptions.parameters) {\n return maybeOptions.parameters[key];\n }\n return (options as Record<string, unknown> | undefined)?.[key];\n}\n\nfunction readStringParam(\n options: HandlerOptions | Record<string, unknown> | undefined,\n key: string,\n): string | null {\n const value = readParam(options, key);\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction readNumberParam(\n options: HandlerOptions | Record<string, unknown> | undefined,\n key: string,\n fallback: number,\n): number {\n const value = readParam(options, key);\n const parsed =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? Number.parseInt(value, 10)\n : Number.NaN;\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction readKind(\n options: HandlerOptions | Record<string, unknown> | undefined,\n): PolymarketReadKind | null {\n const raw = readStringParam(options, \"kind\");\n if (!raw) return null;\n const normalized = raw.toLowerCase() as PolymarketReadKind;\n return (READ_KINDS as readonly string[]).includes(normalized)\n ? normalized\n : null;\n}\n\nfunction normalizeOp(value: unknown): PolymarketOp | null {\n if (typeof value !== \"string\") return null;\n const normalized = value\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\");\n if ((POLYMARKET_OPS as readonly string[]).includes(normalized)) {\n return normalized as PolymarketOp;\n }\n if (POLYMARKET_READ_OP_ALIASES.has(normalized)) {\n return \"read\";\n }\n if (POLYMARKET_PLACE_ORDER_OP_ALIASES.has(normalized)) {\n return \"place_order\";\n }\n return null;\n}\n\nfunction readOp(\n options: HandlerOptions | Record<string, unknown> | undefined,\n): PolymarketOp | null {\n const rawOp =\n readStringParam(options, \"action\") ??\n readStringParam(options, \"subaction\") ??\n readStringParam(options, \"op\") ??\n readStringParam(options, \"operation\") ??\n readStringParam(options, \"name\");\n const explicit = normalizeOp(rawOp);\n if (explicit) return explicit;\n if (readKind(options)) return \"read\";\n if (\n readStringParam(options, \"side\") ||\n readStringParam(options, \"marketId\") ||\n readStringParam(options, \"market_id\") ||\n readParam(options, \"amount\") !== undefined\n ) {\n return \"place_order\";\n }\n return null;\n}\n\nfunction hasSelectedContext(\n state: State | undefined,\n contexts: readonly string[] = POLYMARKET_ACTION_CONTEXTS,\n): boolean {\n const selected = new Set<string>();\n const collect = (value: unknown) => {\n if (!Array.isArray(value)) return;\n for (const item of value) {\n if (typeof item === \"string\") selected.add(item);\n }\n };\n collect(\n (state?.values as Record<string, unknown> | undefined)?.selectedContexts,\n );\n collect(\n (state?.data as Record<string, unknown> | undefined)?.selectedContexts,\n );\n const contextObject = (state?.data as Record<string, unknown> | undefined)\n ?.contextObject as\n | {\n trajectoryPrefix?: { selectedContexts?: unknown };\n metadata?: { selectedContexts?: unknown };\n }\n | undefined;\n collect(contextObject?.trajectoryPrefix?.selectedContexts);\n collect(contextObject?.metadata?.selectedContexts);\n return contexts.some((context) => selected.has(context));\n}\n\nfunction hasKeywordIntent(\n message: Memory,\n state: State | undefined,\n keywords: readonly string[],\n): boolean {\n const text = [\n typeof message.content?.text === \"string\" ? message.content.text : \"\",\n typeof state?.values?.recentMessages === \"string\"\n ? state.values.recentMessages\n : \"\",\n ]\n .join(\"\\n\")\n .toLowerCase();\n return keywords.some((keyword) => text.includes(keyword.toLowerCase()));\n}\n\nasync function fetchPolymarketJson<T>(\n path: string,\n options: { allowErrorStatus?: boolean } = {},\n): Promise<T> {\n const response = await fetch(`${getApiBase()}${path}`, {\n headers: { accept: \"application/json\", ...buildAuthHeaders() },\n signal: AbortSignal.timeout(ACTION_TIMEOUT_MS),\n });\n const payload = (await response.json().catch(() => null)) as T;\n if (options.allowErrorStatus && payload !== null) {\n return payload;\n }\n if (!response.ok) {\n const message =\n payload && typeof payload === \"object\" && \"error\" in payload\n ? String((payload as { error?: unknown }).error)\n : `Polymarket API request failed with ${response.status}`;\n throw new Error(message);\n }\n return payload;\n}\n\nasync function emit(\n callback: HandlerCallback | undefined,\n text: string,\n data: ProviderDataRecord,\n): Promise<ActionResult> {\n if (callback) {\n await callback({\n text,\n actions: [POLYMARKET_ACTION_NAME],\n data: toCallbackData(data),\n });\n }\n return {\n success: true,\n text,\n data: { actionName: POLYMARKET_ACTION_NAME, ...data },\n };\n}\n\nasync function emitFailure(\n callback: HandlerCallback | undefined,\n text: string,\n error: string,\n data: ProviderDataRecord,\n): Promise<ActionResult> {\n if (callback) {\n await callback({\n text,\n actions: [POLYMARKET_ACTION_NAME],\n data: toCallbackData(data),\n });\n }\n return { success: false, text, error, data };\n}\n\nfunction marketLine(market: PolymarketMarket): string {\n const price =\n market.bestBid || market.bestAsk\n ? ` bid ${market.bestBid ?? \"n/a\"} ask ${market.bestAsk ?? \"n/a\"}`\n : \"\";\n const volume = market.volume24hr ? ` volume24h ${market.volume24hr}` : \"\";\n return `- ${market.question ?? market.slug ?? market.id}${price}${volume}`;\n}\n\nfunction formatMarkets(markets: readonly PolymarketMarket[]): string {\n if (markets.length === 0) return \"No active Polymarket markets found.\";\n return `Polymarket markets:\\n${markets\n .slice(0, 12)\n .map(marketLine)\n .join(\"\\n\")}`;\n}\n\nfunction formatMarket(response: PolymarketMarketResponse): string {\n const market = response.market;\n if (!market) return \"No matching Polymarket market found.\";\n const tokens = market.clobTokenIds.length\n ? `\\nToken IDs: ${market.clobTokenIds.join(\", \")}`\n : \"\";\n const outcomes = market.outcomes.length\n ? `\\nOutcomes: ${market.outcomes\n .map((outcome) => `${outcome.name} ${outcome.price ?? \"n/a\"}`)\n .join(\", \")}`\n : \"\";\n return `${market.question ?? market.slug ?? market.id}\\nStatus: ${\n market.active ? \"active\" : \"inactive\"\n }, ${market.closed ? \"closed\" : \"open\"}\\nBest bid: ${\n market.bestBid ?? \"n/a\"\n }\\nBest ask: ${market.bestAsk ?? \"n/a\"}${outcomes}${tokens}`;\n}\n\nfunction formatOrderbook(orderbook: PolymarketOrderbookResponse): string {\n return [\n `Polymarket orderbook for ${orderbook.tokenId}:`,\n `Best bid: ${orderbook.bestBid ?? \"n/a\"} (${orderbook.bestBidSize ?? \"n/a\"})`,\n `Best ask: ${orderbook.bestAsk ?? \"n/a\"} (${orderbook.bestAskSize ?? \"n/a\"})`,\n `Spread: ${orderbook.spread ?? \"n/a\"}`,\n `Midpoint: ${orderbook.midpoint ?? \"n/a\"}`,\n `Depth: ${orderbook.bidLevels} bids, ${orderbook.askLevels} asks`,\n ].join(\"\\n\");\n}\n\nasync function handleStatus(\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const status = await fetchPolymarketJson<PolymarketStatusResponse>(\n \"/api/polymarket/status\",\n );\n const text = `Polymarket public reads: ${\n status.publicReads.ready ? \"ready\" : \"not ready\"\n }\\nTrading: ${status.trading.ready ? \"ready\" : \"disabled\"}\\nCredentials: ${\n status.trading.credentialsReady ? \"present\" : \"missing\"\n }${status.trading.reason ? `\\nReason: ${status.trading.reason}` : \"\"}`;\n return emit(callback, text, {\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"status\" satisfies PolymarketReadKind,\n status,\n });\n}\n\nasync function handleMarkets(\n options: HandlerOptions | Record<string, unknown> | undefined,\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const limit = Math.min(\n 100,\n Math.max(1, readNumberParam(options, \"limit\", 20)),\n );\n const offset = Math.max(0, readNumberParam(options, \"offset\", 0));\n const response = await fetchPolymarketJson<PolymarketMarketsResponse>(\n `/api/polymarket/markets?limit=${limit}&offset=${offset}`,\n );\n return emit(callback, formatMarkets(response.markets), {\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"markets\" satisfies PolymarketReadKind,\n markets: response.markets,\n source: response.source,\n });\n}\n\nasync function handleMarket(\n options: HandlerOptions | Record<string, unknown> | undefined,\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const id = readStringParam(options, \"id\");\n const slug = readStringParam(options, \"slug\");\n if (!id && !slug) {\n const text = \"Provide a Polymarket market id or slug.\";\n return emitFailure(callback, text, \"missing_market_identifier\", {\n actionName: POLYMARKET_ACTION_NAME,\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"market\" satisfies PolymarketReadKind,\n });\n }\n const query = new URLSearchParams();\n if (id) query.set(\"id\", id);\n if (slug && !id) query.set(\"slug\", slug);\n const response = await fetchPolymarketJson<PolymarketMarketResponse>(\n `/api/polymarket/market?${query.toString()}`,\n );\n return emit(callback, formatMarket(response), {\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"market\" satisfies PolymarketReadKind,\n market: response.market,\n source: response.source,\n });\n}\n\nasync function handleOrderbook(\n options: HandlerOptions | Record<string, unknown> | undefined,\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const tokenId =\n readStringParam(options, \"tokenId\") ?? readStringParam(options, \"token_id\");\n if (!tokenId) {\n const text = \"Provide a Polymarket CLOB token id.\";\n return emitFailure(callback, text, \"missing_token_id\", {\n actionName: POLYMARKET_ACTION_NAME,\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"orderbook\" satisfies PolymarketReadKind,\n });\n }\n const response = await fetchPolymarketJson<PolymarketOrderbookResponse>(\n `/api/polymarket/orderbook?token_id=${encodeURIComponent(tokenId)}`,\n );\n return emit(callback, formatOrderbook(response), {\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"orderbook\" satisfies PolymarketReadKind,\n orderbook: response,\n });\n}\n\nasync function handlePositions(\n options: HandlerOptions | Record<string, unknown> | undefined,\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const user = readStringParam(options, \"user\");\n if (!user) {\n const text = \"Provide a wallet address for Polymarket positions.\";\n return emitFailure(callback, text, \"missing_wallet_address\", {\n actionName: POLYMARKET_ACTION_NAME,\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"positions\" satisfies PolymarketReadKind,\n });\n }\n const response = await fetchPolymarketJson<PolymarketPositionsResponse>(\n `/api/polymarket/positions?user=${encodeURIComponent(user)}`,\n );\n const text =\n response.positions.length === 0\n ? \"No Polymarket positions found for that wallet.\"\n : `Polymarket positions:\\n${response.positions\n .slice(0, 12)\n .map(\n (position) =>\n `- ${position.question ?? position.conditionId ?? \"Market\"}: ${\n position.outcome ?? \"outcome\"\n } size ${position.size ?? \"n/a\"} value ${\n position.currentValue ?? \"n/a\"\n }`,\n )\n .join(\"\\n\")}`;\n return emit(callback, text, {\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind: \"positions\" satisfies PolymarketReadKind,\n positions: response.positions,\n source: response.source,\n });\n}\n\nasync function handleReadOperation(\n options: HandlerOptions | Record<string, unknown> | undefined,\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const kind = readKind(options);\n if (!kind) {\n const text =\n \"Provide kind: status | markets | market | orderbook | positions.\";\n return emitFailure(callback, text, \"missing_or_invalid_kind\", {\n actionName: POLYMARKET_ACTION_NAME,\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n availableKinds: [...READ_KINDS],\n });\n }\n try {\n switch (kind) {\n case \"status\":\n return await handleStatus(callback);\n case \"markets\":\n return await handleMarkets(options, callback);\n case \"market\":\n return await handleMarket(options, callback);\n case \"orderbook\":\n return await handleOrderbook(options, callback);\n case \"positions\":\n return await handlePositions(options, callback);\n }\n } catch (error) {\n const text = error instanceof Error ? error.message : String(error);\n return emitFailure(callback, text, text, {\n actionName: POLYMARKET_ACTION_NAME,\n op: \"read\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_READ_COMPAT_NAME,\n kind,\n });\n }\n}\n\nasync function handlePlaceOrderOperation(\n callback: HandlerCallback | undefined,\n): Promise<ActionResult> {\n const response = await fetchPolymarketJson<PolymarketDisabledResponse>(\n \"/api/polymarket/orders\",\n { allowErrorStatus: true },\n ).catch((error) => ({\n enabled: false,\n reason: error instanceof Error ? error.message : String(error),\n requiredForTrading: [],\n }));\n const text = `Polymarket order placement is disabled.\\nReason: ${\n response.reason\n }${\n response.requiredForTrading.length\n ? `\\nRequired env vars: ${response.requiredForTrading.join(\", \")}`\n : \"\"\n }`;\n return {\n ...(await emit(callback, text, {\n op: \"place_order\" satisfies PolymarketOp,\n compatActionName: POLYMARKET_PLACE_ORDER_COMPAT_NAME,\n trading: response,\n })),\n success: false,\n error: response.reason,\n };\n}\n\ninterface PredictionMarketProviderMetadata {\n readonly name: string;\n readonly aliases: readonly string[];\n readonly supportedSubactions: readonly PolymarketOp[];\n readonly description?: string;\n}\n\ninterface PredictionMarketProvider extends PredictionMarketProviderMetadata {\n execute(context: {\n readonly options?: HandlerOptions | Record<string, unknown>;\n readonly op: PolymarketOp;\n readonly callback?: HandlerCallback;\n }): Promise<ActionResult>;\n}\n\nfunction normalizeProviderKey(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[\\s_-]+/g, \"\");\n}\n\nfunction readTarget(\n options: HandlerOptions | Record<string, unknown> | undefined,\n): string {\n return (\n readStringParam(options, \"target\") ??\n readStringParam(options, \"provider\") ??\n \"polymarket\"\n );\n}\n\nfunction createPolymarketProvider(): PredictionMarketProvider {\n return {\n name: \"polymarket\",\n aliases: [\"poly-market\", \"clob\"],\n supportedSubactions: [\"read\", \"place_order\"],\n description:\n \"Polymarket public market reads, orderbook data, positions, and trading readiness.\",\n execute: async ({ options, op, callback }) => {\n switch (op) {\n case \"read\":\n return await handleReadOperation(options, callback);\n case \"place_order\":\n return await handlePlaceOrderOperation(callback);\n }\n },\n };\n}\n\nexport class PredictionMarketService extends Service {\n static override serviceType = PREDICTION_MARKET_SERVICE_TYPE;\n\n override capabilityDescription =\n \"Prediction market provider registry; currently registers Polymarket\";\n\n private readonly providers = new Map<string, PredictionMarketProvider>();\n private readonly aliases = new Map<string, string>();\n\n static override async start(\n runtime: IAgentRuntime,\n ): Promise<PredictionMarketService> {\n const service = new PredictionMarketService(runtime);\n service.registerProvider(createPolymarketProvider());\n return service;\n }\n\n registerProvider(provider: PredictionMarketProvider): void {\n const key = normalizeProviderKey(provider.name);\n this.providers.set(key, provider);\n for (const alias of [provider.name, ...provider.aliases]) {\n this.aliases.set(normalizeProviderKey(alias), key);\n }\n }\n\n listProviders(): PredictionMarketProviderMetadata[] {\n return [...this.providers.values()].map((provider) => ({\n name: provider.name,\n aliases: [...provider.aliases],\n supportedSubactions: [...provider.supportedSubactions],\n description: provider.description,\n }));\n }\n\n async route(args: {\n readonly target?: string;\n readonly op: PolymarketOp;\n readonly options?: HandlerOptions | Record<string, unknown>;\n readonly callback?: HandlerCallback;\n }): Promise<ActionResult> {\n const target = args.target ?? \"polymarket\";\n const key = this.aliases.get(normalizeProviderKey(target));\n const provider = key ? this.providers.get(key) : undefined;\n if (!provider) {\n const text = `Unsupported prediction market provider \"${target}\".`;\n const data: ProviderDataRecord = {\n actionName: POLYMARKET_ACTION_NAME,\n error: \"UNSUPPORTED_PROVIDER\",\n providers: this.listProviders(),\n };\n await args.callback?.({\n text,\n actions: [POLYMARKET_ACTION_NAME],\n data: toCallbackData(data),\n });\n return {\n success: false,\n text,\n error: \"UNSUPPORTED_PROVIDER\",\n data,\n };\n }\n if (!provider.supportedSubactions.includes(args.op)) {\n const text = `${provider.name} does not support ${args.op}.`;\n await args.callback?.({\n text,\n actions: [POLYMARKET_ACTION_NAME],\n data: {\n actionName: POLYMARKET_ACTION_NAME,\n error: \"UNSUPPORTED_SUBACTION\",\n provider: provider.name,\n },\n });\n return {\n success: false,\n text,\n error: \"UNSUPPORTED_SUBACTION\",\n data: {\n actionName: POLYMARKET_ACTION_NAME,\n provider: provider.name,\n },\n };\n }\n\n const result = await provider.execute(args);\n return {\n ...result,\n data: {\n ...(result.data ?? {}),\n actionName: POLYMARKET_ACTION_NAME,\n target: provider.name,\n supportedProviders: this.listProviders(),\n },\n };\n }\n\n override async stop(): Promise<void> {\n this.providers.clear();\n this.aliases.clear();\n }\n}\n\nexport const polymarketAction: Action = {\n name: POLYMARKET_ACTION_NAME,\n contexts: [...POLYMARKET_ACTION_CONTEXTS],\n contextGate: { anyOf: [...POLYMARKET_ACTION_CONTEXTS] },\n roleGate: { minRole: \"USER\" },\n similes: [\n ...POLYMARKET_READ_COMPAT_SIMILES,\n ...POLYMARKET_PLACE_ORDER_COMPAT_SIMILES,\n ],\n description:\n \"Use registered prediction market providers. target selects the provider; Polymarket is registered today. action=read reads public state with kind: status, markets, market, orderbook, or positions. action=place_order reports trading readiness; signed order placement is disabled in this app integration.\",\n descriptionCompressed:\n \"Prediction market router: target polymarket; action read or place_order.\",\n parameters: [\n {\n name: \"target\",\n description: \"Prediction market provider.\",\n required: false,\n schema: { type: \"string\", enum: [\"polymarket\"], default: \"polymarket\" },\n },\n {\n name: \"action\",\n description: \"Prediction market operation: read or place_order.\",\n required: false,\n schema: { type: \"string\", enum: [...POLYMARKET_OPS] },\n },\n {\n name: \"subaction\",\n description:\n \"Legacy alias for action. Accepts place-order as place_order.\",\n required: false,\n schema: { type: \"string\", enum: [...POLYMARKET_OPS, \"place-order\"] },\n },\n {\n name: \"kind\",\n description:\n \"read only: status | markets | market | orderbook | positions.\",\n required: false,\n schema: { type: \"string\", enum: [...READ_KINDS] },\n },\n {\n name: \"limit\",\n description: \"markets only: max markets (1-100).\",\n required: false,\n schema: { type: \"number\", default: 20 },\n },\n {\n name: \"offset\",\n description: \"markets only: result offset.\",\n required: false,\n schema: { type: \"number\", default: 0 },\n },\n {\n name: \"id\",\n description: \"market only: Polymarket Gamma market id.\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"slug\",\n description: \"market only: Polymarket market slug.\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"tokenId\",\n description: \"orderbook only: Polymarket CLOB token id.\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"user\",\n description: \"positions only: wallet address.\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"side\",\n description: \"place_order only: intended side, buy or sell.\",\n required: false,\n schema: { type: \"string\", enum: [\"buy\", \"sell\"] },\n },\n {\n name: \"marketId\",\n description: \"place_order only: Polymarket market id or condition id.\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"amount\",\n description: \"place_order only: intended order amount.\",\n required: false,\n schema: { type: \"number\" },\n },\n ],\n validate: async (_runtime, message: Memory, state?: State) =>\n hasSelectedContext(state) ||\n hasKeywordIntent(message, state, POLYMARKET_READ_KEYWORDS) ||\n hasKeywordIntent(message, state, POLYMARKET_TRADE_KEYWORDS),\n handler: async (runtime, _message, _state, options, callback) => {\n const op = readOp(options);\n if (!op) {\n const text =\n \"Provide action: read | place_order. For read, also provide kind: status | markets | market | orderbook | positions.\";\n return emitFailure(callback, text, \"missing_or_invalid_op\", {\n actionName: POLYMARKET_ACTION_NAME,\n availableActions: [...POLYMARKET_OPS],\n });\n }\n const service = runtime.getService(\n PREDICTION_MARKET_SERVICE_TYPE,\n ) as PredictionMarketService | null;\n if (!service || typeof service.route !== \"function\") {\n const text = \"Prediction market service is not available.\";\n return emitFailure(callback, text, \"service_unavailable\", {\n actionName: POLYMARKET_ACTION_NAME,\n });\n }\n return service.route({\n target: readTarget(options),\n op,\n options,\n callback,\n });\n },\n};\n\nexport const predictionMarketAction = polymarketAction;\nexport const polymarketActions: Action[] = [predictionMarketAction];\n"],"mappings":"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","names":["text"]}
@@ -0,0 +1,25 @@
1
+ import { ElizaClient } from "@elizaos/ui";
2
+ import type { PolymarketDisabledResponse, PolymarketMarketResponse, PolymarketMarketsResponse, PolymarketOrderbookResponse, PolymarketPositionsResponse, PolymarketStatusResponse } from "./polymarket-contracts";
3
+ export interface PolymarketMarketsRequest {
4
+ limit?: number;
5
+ offset?: number;
6
+ active?: boolean;
7
+ closed?: boolean;
8
+ order?: string;
9
+ ascending?: boolean;
10
+ tagId?: string;
11
+ }
12
+ export type PolymarketClient = ElizaClient & {
13
+ polymarketStatus(): Promise<PolymarketStatusResponse>;
14
+ polymarketMarkets(request?: PolymarketMarketsRequest): Promise<PolymarketMarketsResponse>;
15
+ polymarketMarketById(id: string): Promise<PolymarketMarketResponse>;
16
+ polymarketMarketBySlug(slug: string): Promise<PolymarketMarketResponse>;
17
+ polymarketOrderbook(tokenId: string): Promise<PolymarketOrderbookResponse>;
18
+ polymarketOrders(): Promise<PolymarketDisabledResponse>;
19
+ /**
20
+ * Read open positions for `user`, or for the agent's configured Polygon
21
+ * wallet when `user` is omitted (the route resolves the fallback address).
22
+ */
23
+ polymarketPositions(user?: string): Promise<PolymarketPositionsResponse>;
24
+ };
25
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,gBAAgB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACtD,iBAAiB,CACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACpE,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACxE,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC3E,gBAAgB,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACxD;;;OAGG;IACH,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CAC1E,CAAC"}
package/dist/client.js ADDED
@@ -0,0 +1,42 @@
1
+ import { ElizaClient } from "@elizaos/ui";
2
+ const elizaClientPrototype = ElizaClient.prototype;
3
+ elizaClientPrototype.polymarketStatus = async function() {
4
+ return this.fetch("/api/polymarket/status");
5
+ };
6
+ elizaClientPrototype.polymarketMarkets = async function(request = {}) {
7
+ const params = new URLSearchParams();
8
+ appendParam(params, "limit", request.limit);
9
+ appendParam(params, "offset", request.offset);
10
+ appendParam(params, "active", request.active);
11
+ appendParam(params, "closed", request.closed);
12
+ appendParam(params, "order", request.order);
13
+ appendParam(params, "ascending", request.ascending);
14
+ appendParam(params, "tag_id", request.tagId);
15
+ const query = params.toString();
16
+ return this.fetch(`/api/polymarket/markets${query ? `?${query}` : ""}`);
17
+ };
18
+ elizaClientPrototype.polymarketMarketById = async function(id) {
19
+ const params = new URLSearchParams({ id });
20
+ return this.fetch(`/api/polymarket/market?${params.toString()}`);
21
+ };
22
+ elizaClientPrototype.polymarketMarketBySlug = async function(slug) {
23
+ const params = new URLSearchParams({ slug });
24
+ return this.fetch(`/api/polymarket/market?${params.toString()}`);
25
+ };
26
+ elizaClientPrototype.polymarketOrderbook = async function(tokenId) {
27
+ const params = new URLSearchParams({ token_id: tokenId });
28
+ return this.fetch(`/api/polymarket/orderbook?${params.toString()}`);
29
+ };
30
+ elizaClientPrototype.polymarketOrders = async function() {
31
+ return this.fetch("/api/polymarket/orders");
32
+ };
33
+ elizaClientPrototype.polymarketPositions = async function(user) {
34
+ const trimmed = user?.trim();
35
+ const query = trimmed ? `?${new URLSearchParams({ user: trimmed }).toString()}` : "";
36
+ return this.fetch(`/api/polymarket/positions${query}`);
37
+ };
38
+ function appendParam(params, key, value) {
39
+ if (value === void 0) return;
40
+ params.set(key, String(value));
41
+ }
42
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/client.ts"],"sourcesContent":["import { ElizaClient } from \"@elizaos/ui\";\nimport type {\n PolymarketDisabledResponse,\n PolymarketMarketResponse,\n PolymarketMarketsResponse,\n PolymarketOrderbookResponse,\n PolymarketPositionsResponse,\n PolymarketStatusResponse,\n} from \"./polymarket-contracts.js\";\n\nexport interface PolymarketMarketsRequest {\n limit?: number;\n offset?: number;\n active?: boolean;\n closed?: boolean;\n order?: string;\n ascending?: boolean;\n tagId?: string;\n}\n\nexport type PolymarketClient = ElizaClient & {\n polymarketStatus(): Promise<PolymarketStatusResponse>;\n polymarketMarkets(\n request?: PolymarketMarketsRequest,\n ): Promise<PolymarketMarketsResponse>;\n polymarketMarketById(id: string): Promise<PolymarketMarketResponse>;\n polymarketMarketBySlug(slug: string): Promise<PolymarketMarketResponse>;\n polymarketOrderbook(tokenId: string): Promise<PolymarketOrderbookResponse>;\n polymarketOrders(): Promise<PolymarketDisabledResponse>;\n /**\n * Read open positions for `user`, or for the agent's configured Polygon\n * wallet when `user` is omitted (the route resolves the fallback address).\n */\n polymarketPositions(user?: string): Promise<PolymarketPositionsResponse>;\n};\n\nconst elizaClientPrototype = ElizaClient.prototype as PolymarketClient;\n\nelizaClientPrototype.polymarketStatus = async function () {\n return this.fetch(\"/api/polymarket/status\");\n};\n\nelizaClientPrototype.polymarketMarkets = async function (\n request: PolymarketMarketsRequest = {},\n) {\n const params = new URLSearchParams();\n appendParam(params, \"limit\", request.limit);\n appendParam(params, \"offset\", request.offset);\n appendParam(params, \"active\", request.active);\n appendParam(params, \"closed\", request.closed);\n appendParam(params, \"order\", request.order);\n appendParam(params, \"ascending\", request.ascending);\n appendParam(params, \"tag_id\", request.tagId);\n const query = params.toString();\n return this.fetch(`/api/polymarket/markets${query ? `?${query}` : \"\"}`);\n};\n\nelizaClientPrototype.polymarketMarketById = async function (id: string) {\n const params = new URLSearchParams({ id });\n return this.fetch(`/api/polymarket/market?${params.toString()}`);\n};\n\nelizaClientPrototype.polymarketMarketBySlug = async function (slug: string) {\n const params = new URLSearchParams({ slug });\n return this.fetch(`/api/polymarket/market?${params.toString()}`);\n};\n\nelizaClientPrototype.polymarketOrderbook = async function (tokenId: string) {\n const params = new URLSearchParams({ token_id: tokenId });\n return this.fetch(`/api/polymarket/orderbook?${params.toString()}`);\n};\n\nelizaClientPrototype.polymarketOrders = async function () {\n return this.fetch(\"/api/polymarket/orders\");\n};\n\nelizaClientPrototype.polymarketPositions = async function (user?: string) {\n const trimmed = user?.trim();\n const query = trimmed\n ? `?${new URLSearchParams({ user: trimmed }).toString()}`\n : \"\";\n return this.fetch(`/api/polymarket/positions${query}`);\n};\n\nfunction appendParam(\n params: URLSearchParams,\n key: string,\n value: string | number | boolean | undefined,\n): void {\n if (value === undefined) return;\n params.set(key, String(value));\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAoC5B,MAAM,uBAAuB,YAAY;AAEzC,qBAAqB,mBAAmB,iBAAkB;AACxD,SAAO,KAAK,MAAM,wBAAwB;AAC5C;AAEA,qBAAqB,oBAAoB,eACvC,UAAoC,CAAC,GACrC;AACA,QAAM,SAAS,IAAI,gBAAgB;AACnC,cAAY,QAAQ,SAAS,QAAQ,KAAK;AAC1C,cAAY,QAAQ,UAAU,QAAQ,MAAM;AAC5C,cAAY,QAAQ,UAAU,QAAQ,MAAM;AAC5C,cAAY,QAAQ,UAAU,QAAQ,MAAM;AAC5C,cAAY,QAAQ,SAAS,QAAQ,KAAK;AAC1C,cAAY,QAAQ,aAAa,QAAQ,SAAS;AAClD,cAAY,QAAQ,UAAU,QAAQ,KAAK;AAC3C,QAAM,QAAQ,OAAO,SAAS;AAC9B,SAAO,KAAK,MAAM,0BAA0B,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AACxE;AAEA,qBAAqB,uBAAuB,eAAgB,IAAY;AACtE,QAAM,SAAS,IAAI,gBAAgB,EAAE,GAAG,CAAC;AACzC,SAAO,KAAK,MAAM,0BAA0B,OAAO,SAAS,CAAC,EAAE;AACjE;AAEA,qBAAqB,yBAAyB,eAAgB,MAAc;AAC1E,QAAM,SAAS,IAAI,gBAAgB,EAAE,KAAK,CAAC;AAC3C,SAAO,KAAK,MAAM,0BAA0B,OAAO,SAAS,CAAC,EAAE;AACjE;AAEA,qBAAqB,sBAAsB,eAAgB,SAAiB;AAC1E,QAAM,SAAS,IAAI,gBAAgB,EAAE,UAAU,QAAQ,CAAC;AACxD,SAAO,KAAK,MAAM,6BAA6B,OAAO,SAAS,CAAC,EAAE;AACpE;AAEA,qBAAqB,mBAAmB,iBAAkB;AACxD,SAAO,KAAK,MAAM,wBAAwB;AAC5C;AAEA,qBAAqB,sBAAsB,eAAgB,MAAe;AACxE,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,QAAQ,UACV,IAAI,IAAI,gBAAgB,EAAE,MAAM,QAAQ,CAAC,EAAE,SAAS,CAAC,KACrD;AACJ,SAAO,KAAK,MAAM,4BAA4B,KAAK,EAAE;AACvD;AAEA,SAAS,YACP,QACA,KACA,OACM;AACN,MAAI,UAAU,OAAW;AACzB,SAAO,IAAI,KAAK,OAAO,KAAK,CAAC;AAC/B;","names":[]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PolymarketSpatialView - the Polymarket markets surface authored once with the
3
+ * spatial vocabulary, so it renders correctly wherever it is displayed:
4
+ *
5
+ * - GUI / XR - mounted in `<SpatialSurface>` (DOM; XR scales up).
6
+ * - TUI - rendered to real terminal lines by the agent terminal, via
7
+ * `registerSpatialTerminalView` (see `register-terminal-view.tsx`).
8
+ *
9
+ * It is purely presentational (a snapshot + an action callback in, primitives
10
+ * out) and imports only the cross-modality primitives plus a type-only view of
11
+ * the Polymarket contracts, so it is safe to render in the Node agent process
12
+ * where the terminal lives (no app-core/client runtime import).
13
+ */
14
+ import type { PolymarketMarket, PolymarketPosition, PolymarketPositionsSummary, PolymarketStatusResponse } from "../polymarket-contracts";
15
+ export interface PolymarketSnapshot {
16
+ status: PolymarketStatusResponse | null;
17
+ markets: readonly PolymarketMarket[];
18
+ /** Detail overlay target; null shows the list. */
19
+ selectedMarket: PolymarketMarket | null;
20
+ /** The agent's own open positions; empty when none/unreadable. */
21
+ positions?: readonly PolymarketPosition[];
22
+ /** Aggregate value/PnL across `positions`; null when none. */
23
+ positionsSummary?: PolymarketPositionsSummary | null;
24
+ loading?: boolean;
25
+ error?: string | null;
26
+ lastAction?: string;
27
+ }
28
+ export interface PolymarketSpatialViewProps {
29
+ snapshot: PolymarketSnapshot;
30
+ /** Dispatch by action id: `market:<id>` (open a market), `detail-back`, `refresh`. */
31
+ onAction?: (action: string) => void;
32
+ }
33
+ export declare function PolymarketSpatialView({ snapshot, onAction, }: PolymarketSpatialViewProps): import("react/jsx-runtime").JSX.Element;
34
+ //# sourceMappingURL=PolymarketSpatialView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolymarketSpatialView.d.ts","sourceRoot":"","sources":["../../src/components/PolymarketSpatialView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,kDAAkD;IAClD,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,kEAAkE;IAClE,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC1C,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAySD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,2CA6D5B"}
@@ -0,0 +1,248 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import {
3
+ Button,
4
+ Card,
5
+ Divider,
6
+ HStack,
7
+ List,
8
+ Text,
9
+ VStack
10
+ } from "@elizaos/ui/spatial";
11
+ const MAX_LIST = 24;
12
+ const MAX_OUTCOMES = 3;
13
+ function priceToPercent(price) {
14
+ if (price == null) return null;
15
+ const n = Number(price);
16
+ if (!Number.isFinite(n)) return null;
17
+ return Math.round(n * 100);
18
+ }
19
+ function shortNumber(value) {
20
+ if (value == null) return null;
21
+ const n = Number(value);
22
+ if (!Number.isFinite(n)) return value;
23
+ if (n >= 1e6) return `$${(n / 1e6).toFixed(1)}M`;
24
+ if (n >= 1e3) return `$${(n / 1e3).toFixed(1)}K`;
25
+ return `$${n.toFixed(0)}`;
26
+ }
27
+ function marketLabel(market) {
28
+ return market.question ?? market.slug ?? market.id;
29
+ }
30
+ function parseNumber(value) {
31
+ if (value == null) return null;
32
+ const n = Number(value);
33
+ return Number.isFinite(n) ? n : null;
34
+ }
35
+ function usd(value, withSign = false) {
36
+ if (value == null) return "-";
37
+ const sign = withSign && value > 0 ? "+" : value < 0 ? "-" : "";
38
+ const abs = Math.abs(value);
39
+ if (abs >= 1e6) return `${sign}$${(abs / 1e6).toFixed(1)}M`;
40
+ if (abs >= 1e3) return `${sign}$${(abs / 1e3).toFixed(1)}K`;
41
+ return `${sign}$${abs.toFixed(2)}`;
42
+ }
43
+ function pnlTone(value) {
44
+ if (value == null || value === 0) return "muted";
45
+ return value > 0 ? "success" : "danger";
46
+ }
47
+ function readyTone(ready) {
48
+ return ready ? "success" : "muted";
49
+ }
50
+ function ReadinessRow({ status }) {
51
+ const reads = status?.publicReads.ready ?? false;
52
+ const trading = status?.trading.ready ?? false;
53
+ return /* @__PURE__ */ jsxs(HStack, { gap: 2, align: "center", wrap: true, children: [
54
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: readyTone(reads), children: `reads ${reads ? "ready" : "off"}` }),
55
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: readyTone(trading), children: `trading ${trading ? "ready" : "off"}` })
56
+ ] });
57
+ }
58
+ function OutcomeLine({
59
+ name,
60
+ percent,
61
+ lead
62
+ }) {
63
+ return /* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", children: [
64
+ /* @__PURE__ */ jsx(Text, { tone: lead ? "primary" : "default", grow: 1, wrap: false, children: name }),
65
+ /* @__PURE__ */ jsx(
66
+ Text,
67
+ {
68
+ style: "caption",
69
+ tone: lead ? "primary" : "muted",
70
+ align: "end",
71
+ width: 6,
72
+ children: percent != null ? `${percent}%` : "n/a"
73
+ }
74
+ )
75
+ ] });
76
+ }
77
+ function outcomeSummary(outcome) {
78
+ const percent = priceToPercent(outcome.price);
79
+ return `${outcome.name} ${percent != null ? `${percent}%` : "n/a"}`;
80
+ }
81
+ function MarketRow({
82
+ market,
83
+ index,
84
+ active,
85
+ onAction
86
+ }) {
87
+ const label = marketLabel(market);
88
+ const volume = shortNumber(market.volume24hr ?? market.volume);
89
+ const liquidity = shortNumber(market.liquidity);
90
+ const top = market.outcomes.slice(0, MAX_OUTCOMES);
91
+ return /* @__PURE__ */ jsxs(
92
+ VStack,
93
+ {
94
+ gap: 0,
95
+ grow: 1,
96
+ agent: `market-${market.id}`,
97
+ tone: active ? "primary" : "default",
98
+ children: [
99
+ /* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", children: [
100
+ /* @__PURE__ */ jsx(Text, { tone: active ? "primary" : "muted", width: 3, children: String(index + 1).padStart(2, "0") }),
101
+ /* @__PURE__ */ jsx(Text, { bold: true, grow: 1, wrap: false, children: label }),
102
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: market.active ? "success" : "muted", children: market.active ? "active" : "closed" }),
103
+ /* @__PURE__ */ jsx(
104
+ Button,
105
+ {
106
+ variant: "ghost",
107
+ tone: "primary",
108
+ agent: `market:${market.id}`,
109
+ onPress: () => onAction?.(`market:${market.id}`),
110
+ children: "Open"
111
+ }
112
+ )
113
+ ] }),
114
+ top.length > 0 ? /* @__PURE__ */ jsx(HStack, { gap: 2, wrap: true, children: top.map((outcome) => /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: false, children: outcomeSummary(outcome) }, outcome.name)) }) : null,
115
+ /* @__PURE__ */ jsxs(HStack, { gap: 2, wrap: true, children: [
116
+ volume ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `vol ${volume}` }) : null,
117
+ liquidity ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `liq ${liquidity}` }) : null,
118
+ market.category ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: false, children: market.category }) : null
119
+ ] })
120
+ ]
121
+ }
122
+ );
123
+ }
124
+ function MarketDetail({
125
+ market,
126
+ onAction
127
+ }) {
128
+ const lastTrade = priceToPercent(market.lastTradePrice);
129
+ return /* @__PURE__ */ jsxs(VStack, { gap: 1, children: [
130
+ /* @__PURE__ */ jsx(
131
+ Button,
132
+ {
133
+ variant: "ghost",
134
+ tone: "default",
135
+ agent: "detail-back",
136
+ onPress: () => onAction?.("detail-back"),
137
+ children: "< Markets"
138
+ }
139
+ ),
140
+ /* @__PURE__ */ jsx(Text, { style: "subheading", wrap: true, children: market.question ?? market.slug ?? market.id }),
141
+ market.category ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: market.category }) : null,
142
+ /* @__PURE__ */ jsxs(HStack, { gap: 2, wrap: true, children: [
143
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `Volume ${shortNumber(market.volume) ?? "-"}` }),
144
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `Liquidity ${shortNumber(market.liquidity) ?? "-"}` }),
145
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `Last ${lastTrade != null ? `${lastTrade}%` : "-"}` })
146
+ ] }),
147
+ /* @__PURE__ */ jsx(Divider, { label: "outcomes" }),
148
+ /* @__PURE__ */ jsx(List, { gap: 0, children: market.outcomes.map((outcome, i) => /* @__PURE__ */ jsx(
149
+ OutcomeLine,
150
+ {
151
+ name: outcome.name,
152
+ percent: priceToPercent(outcome.price),
153
+ lead: i === 0
154
+ },
155
+ outcome.name
156
+ )) }),
157
+ /* @__PURE__ */ jsx(Divider, { label: "orderbook tokens" }),
158
+ market.clobTokenIds.length > 0 ? /* @__PURE__ */ jsx(List, { gap: 0, children: market.clobTokenIds.map((tokenId) => /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: false, children: tokenId }, tokenId)) }) : /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: "no CLOB token ids" })
159
+ ] });
160
+ }
161
+ function PositionRow({ position }) {
162
+ const label = position.question ?? position.slug ?? position.marketId ?? position.outcome;
163
+ const value = parseNumber(position.currentValue);
164
+ const cashPnl = parseNumber(position.cashPnl);
165
+ return /* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", children: [
166
+ /* @__PURE__ */ jsx(Text, { grow: 1, wrap: false, children: label ?? "-" }),
167
+ position.outcome ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", wrap: false, children: position.outcome }) : null,
168
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", align: "end", width: 8, children: usd(value) }),
169
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: pnlTone(cashPnl), align: "end", width: 8, children: usd(cashPnl, true) })
170
+ ] });
171
+ }
172
+ function PositionsSection({
173
+ positions,
174
+ summary
175
+ }) {
176
+ const open = positions.filter((position) => {
177
+ const size = parseNumber(position.size);
178
+ return size != null && Math.abs(size) > 1e-9;
179
+ });
180
+ const totalValue = parseNumber(summary?.totalValue ?? null);
181
+ const totalPnl = parseNumber(summary?.totalCashPnl ?? null);
182
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
183
+ /* @__PURE__ */ jsx(Divider, { label: "positions" }),
184
+ /* @__PURE__ */ jsxs(HStack, { gap: 2, wrap: true, children: [
185
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `value ${usd(totalValue)}` }),
186
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: pnlTone(totalPnl), children: `pnl ${usd(totalPnl, true)}` }),
187
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", children: `open ${open.length}` })
188
+ ] }),
189
+ open.length === 0 ? /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", align: "center", children: "no open positions" }) : /* @__PURE__ */ jsx(List, { gap: 0, children: open.map((position) => /* @__PURE__ */ jsx(
190
+ PositionRow,
191
+ {
192
+ position
193
+ },
194
+ `${position.conditionId ?? position.marketId ?? position.slug}-${position.outcome}`
195
+ )) })
196
+ ] });
197
+ }
198
+ function PolymarketSpatialView({
199
+ snapshot,
200
+ onAction
201
+ }) {
202
+ const { status, markets, selectedMarket, loading, error } = snapshot;
203
+ const positions = snapshot.positions ?? [];
204
+ const accountReady = status?.account?.ready ?? false;
205
+ const selectedId = selectedMarket?.id ?? null;
206
+ return /* @__PURE__ */ jsxs(Card, { gap: 1, padding: 1, children: [
207
+ /* @__PURE__ */ jsxs(HStack, { gap: 1, align: "center", wrap: true, children: [
208
+ /* @__PURE__ */ jsx(ReadinessRow, { status }),
209
+ /* @__PURE__ */ jsx(Text, { style: "caption", tone: "muted", grow: 1, children: loading ? "loading" : `${markets.length} markets` }),
210
+ /* @__PURE__ */ jsx(
211
+ Button,
212
+ {
213
+ variant: "outline",
214
+ tone: "default",
215
+ agent: "refresh",
216
+ disabled: loading,
217
+ onPress: () => onAction?.("refresh"),
218
+ children: "Refresh"
219
+ }
220
+ )
221
+ ] }),
222
+ error ? /* @__PURE__ */ jsx(Text, { tone: "danger", style: "caption", children: error }) : null,
223
+ selectedMarket ? /* @__PURE__ */ jsx(MarketDetail, { market: selectedMarket, onAction }) : /* @__PURE__ */ jsxs(Fragment, { children: [
224
+ accountReady ? /* @__PURE__ */ jsx(
225
+ PositionsSection,
226
+ {
227
+ positions,
228
+ summary: snapshot.positionsSummary ?? null
229
+ }
230
+ ) : null,
231
+ /* @__PURE__ */ jsx(Divider, { label: "markets" }),
232
+ markets.length === 0 ? /* @__PURE__ */ jsx(Text, { tone: "muted", align: "center", style: "caption", children: loading ? "loading markets" : "no markets loaded" }) : /* @__PURE__ */ jsx(List, { gap: 1, children: markets.slice(0, MAX_LIST).map((market, index) => /* @__PURE__ */ jsx(
233
+ MarketRow,
234
+ {
235
+ market,
236
+ index,
237
+ active: selectedId === market.id,
238
+ onAction
239
+ },
240
+ market.id
241
+ )) })
242
+ ] })
243
+ ] });
244
+ }
245
+ export {
246
+ PolymarketSpatialView
247
+ };
248
+ //# sourceMappingURL=PolymarketSpatialView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/PolymarketSpatialView.tsx"],"sourcesContent":["/**\n * PolymarketSpatialView - the Polymarket markets surface authored once with the\n * spatial vocabulary, so it renders correctly wherever it is displayed:\n *\n * - GUI / XR - mounted in `<SpatialSurface>` (DOM; XR scales up).\n * - TUI - rendered to real terminal lines by the agent terminal, via\n * `registerSpatialTerminalView` (see `register-terminal-view.tsx`).\n *\n * It is purely presentational (a snapshot + an action callback in, primitives\n * out) and imports only the cross-modality primitives plus a type-only view of\n * the Polymarket contracts, so it is safe to render in the Node agent process\n * where the terminal lives (no app-core/client runtime import).\n */\n\nimport {\n Button,\n Card,\n Divider,\n HStack,\n List,\n type SpatialTone,\n Text,\n VStack,\n} from \"@elizaos/ui/spatial\";\nimport type {\n PolymarketMarket,\n PolymarketPosition,\n PolymarketPositionsSummary,\n PolymarketStatusResponse,\n} from \"../polymarket-contracts.js\";\n\nexport interface PolymarketSnapshot {\n status: PolymarketStatusResponse | null;\n markets: readonly PolymarketMarket[];\n /** Detail overlay target; null shows the list. */\n selectedMarket: PolymarketMarket | null;\n /** The agent's own open positions; empty when none/unreadable. */\n positions?: readonly PolymarketPosition[];\n /** Aggregate value/PnL across `positions`; null when none. */\n positionsSummary?: PolymarketPositionsSummary | null;\n loading?: boolean;\n error?: string | null;\n lastAction?: string;\n}\n\nconst MAX_LIST = 24;\nconst MAX_OUTCOMES = 3;\n\nfunction priceToPercent(price: string | null): number | null {\n if (price == null) return null;\n const n = Number(price);\n if (!Number.isFinite(n)) return null;\n return Math.round(n * 100);\n}\n\nfunction shortNumber(value: string | null): string | null {\n if (value == null) return null;\n const n = Number(value);\n if (!Number.isFinite(n)) return value;\n if (n >= 1_000_000) return `$${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `$${(n / 1_000).toFixed(1)}K`;\n return `$${n.toFixed(0)}`;\n}\n\nfunction marketLabel(market: PolymarketMarket): string {\n return market.question ?? market.slug ?? market.id;\n}\n\nfunction parseNumber(value: string | null | undefined): number | null {\n if (value == null) return null;\n const n = Number(value);\n return Number.isFinite(n) ? n : null;\n}\n\nfunction usd(value: number | null, withSign = false): string {\n if (value == null) return \"-\";\n const sign = withSign && value > 0 ? \"+\" : value < 0 ? \"-\" : \"\";\n const abs = Math.abs(value);\n if (abs >= 1_000_000) return `${sign}$${(abs / 1_000_000).toFixed(1)}M`;\n if (abs >= 1_000) return `${sign}$${(abs / 1_000).toFixed(1)}K`;\n return `${sign}$${abs.toFixed(2)}`;\n}\n\nfunction pnlTone(value: number | null): SpatialTone {\n if (value == null || value === 0) return \"muted\";\n return value > 0 ? \"success\" : \"danger\";\n}\n\nfunction readyTone(ready: boolean): SpatialTone {\n return ready ? \"success\" : \"muted\";\n}\n\nfunction ReadinessRow({ status }: { status: PolymarketStatusResponse | null }) {\n const reads = status?.publicReads.ready ?? false;\n const trading = status?.trading.ready ?? false;\n return (\n <HStack gap={2} align=\"center\" wrap>\n <Text style=\"caption\" tone={readyTone(reads)}>\n {`reads ${reads ? \"ready\" : \"off\"}`}\n </Text>\n <Text style=\"caption\" tone={readyTone(trading)}>\n {`trading ${trading ? \"ready\" : \"off\"}`}\n </Text>\n </HStack>\n );\n}\n\nfunction OutcomeLine({\n name,\n percent,\n lead,\n}: {\n name: string;\n percent: number | null;\n lead: boolean;\n}) {\n return (\n <HStack gap={1} align=\"center\">\n <Text tone={lead ? \"primary\" : \"default\"} grow={1} wrap={false}>\n {name}\n </Text>\n <Text\n style=\"caption\"\n tone={lead ? \"primary\" : \"muted\"}\n align=\"end\"\n width={6}\n >\n {percent != null ? `${percent}%` : \"n/a\"}\n </Text>\n </HStack>\n );\n}\n\nfunction outcomeSummary(outcome: PolymarketMarket[\"outcomes\"][number]): string {\n const percent = priceToPercent(outcome.price);\n return `${outcome.name} ${percent != null ? `${percent}%` : \"n/a\"}`;\n}\n\nfunction MarketRow({\n market,\n index,\n active,\n onAction,\n}: {\n market: PolymarketMarket;\n index: number;\n active: boolean;\n onAction?: (action: string) => void;\n}) {\n const label = marketLabel(market);\n const volume = shortNumber(market.volume24hr ?? market.volume);\n const liquidity = shortNumber(market.liquidity);\n const top = market.outcomes.slice(0, MAX_OUTCOMES);\n return (\n <VStack\n gap={0}\n grow={1}\n agent={`market-${market.id}`}\n tone={active ? \"primary\" : \"default\"}\n >\n <HStack gap={1} align=\"center\">\n <Text tone={active ? \"primary\" : \"muted\"} width={3}>\n {String(index + 1).padStart(2, \"0\")}\n </Text>\n <Text bold grow={1} wrap={false}>\n {label}\n </Text>\n <Text style=\"caption\" tone={market.active ? \"success\" : \"muted\"}>\n {market.active ? \"active\" : \"closed\"}\n </Text>\n <Button\n variant=\"ghost\"\n tone=\"primary\"\n agent={`market:${market.id}`}\n onPress={() => onAction?.(`market:${market.id}`)}\n >\n Open\n </Button>\n </HStack>\n {top.length > 0 ? (\n <HStack gap={2} wrap>\n {top.map((outcome) => (\n <Text key={outcome.name} style=\"caption\" tone=\"muted\" wrap={false}>\n {outcomeSummary(outcome)}\n </Text>\n ))}\n </HStack>\n ) : null}\n <HStack gap={2} wrap>\n {volume ? (\n <Text style=\"caption\" tone=\"muted\">{`vol ${volume}`}</Text>\n ) : null}\n {liquidity ? (\n <Text style=\"caption\" tone=\"muted\">{`liq ${liquidity}`}</Text>\n ) : null}\n {market.category ? (\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {market.category}\n </Text>\n ) : null}\n </HStack>\n </VStack>\n );\n}\n\nfunction MarketDetail({\n market,\n onAction,\n}: {\n market: PolymarketMarket;\n onAction?: (action: string) => void;\n}) {\n const lastTrade = priceToPercent(market.lastTradePrice);\n return (\n <VStack gap={1}>\n <Button\n variant=\"ghost\"\n tone=\"default\"\n agent=\"detail-back\"\n onPress={() => onAction?.(\"detail-back\")}\n >\n {\"< Markets\"}\n </Button>\n <Text style=\"subheading\" wrap>\n {market.question ?? market.slug ?? market.id}\n </Text>\n {market.category ? (\n <Text style=\"caption\" tone=\"muted\">\n {market.category}\n </Text>\n ) : null}\n\n <HStack gap={2} wrap>\n <Text style=\"caption\" tone=\"muted\">\n {`Volume ${shortNumber(market.volume) ?? \"-\"}`}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {`Liquidity ${shortNumber(market.liquidity) ?? \"-\"}`}\n </Text>\n <Text style=\"caption\" tone=\"muted\">\n {`Last ${lastTrade != null ? `${lastTrade}%` : \"-\"}`}\n </Text>\n </HStack>\n\n <Divider label=\"outcomes\" />\n <List gap={0}>\n {market.outcomes.map((outcome, i) => (\n <OutcomeLine\n key={outcome.name}\n name={outcome.name}\n percent={priceToPercent(outcome.price)}\n lead={i === 0}\n />\n ))}\n </List>\n\n <Divider label=\"orderbook tokens\" />\n {market.clobTokenIds.length > 0 ? (\n <List gap={0}>\n {market.clobTokenIds.map((tokenId) => (\n <Text key={tokenId} style=\"caption\" tone=\"muted\" wrap={false}>\n {tokenId}\n </Text>\n ))}\n </List>\n ) : (\n <Text style=\"caption\" tone=\"muted\">\n no CLOB token ids\n </Text>\n )}\n </VStack>\n );\n}\n\nfunction PositionRow({ position }: { position: PolymarketPosition }) {\n const label =\n position.question ?? position.slug ?? position.marketId ?? position.outcome;\n const value = parseNumber(position.currentValue);\n const cashPnl = parseNumber(position.cashPnl);\n return (\n <HStack gap={1} align=\"center\">\n <Text grow={1} wrap={false}>\n {label ?? \"-\"}\n </Text>\n {position.outcome ? (\n <Text style=\"caption\" tone=\"muted\" wrap={false}>\n {position.outcome}\n </Text>\n ) : null}\n <Text style=\"caption\" tone=\"muted\" align=\"end\" width={8}>\n {usd(value)}\n </Text>\n <Text style=\"caption\" tone={pnlTone(cashPnl)} align=\"end\" width={8}>\n {usd(cashPnl, true)}\n </Text>\n </HStack>\n );\n}\n\nfunction PositionsSection({\n positions,\n summary,\n}: {\n positions: readonly PolymarketPosition[];\n summary: PolymarketPositionsSummary | null;\n}) {\n const open = positions.filter((position) => {\n const size = parseNumber(position.size);\n return size != null && Math.abs(size) > 1e-9;\n });\n const totalValue = parseNumber(summary?.totalValue ?? null);\n const totalPnl = parseNumber(summary?.totalCashPnl ?? null);\n return (\n <>\n <Divider label=\"positions\" />\n <HStack gap={2} wrap>\n <Text style=\"caption\" tone=\"muted\">{`value ${usd(totalValue)}`}</Text>\n <Text style=\"caption\" tone={pnlTone(totalPnl)}>\n {`pnl ${usd(totalPnl, true)}`}\n </Text>\n <Text style=\"caption\" tone=\"muted\">{`open ${open.length}`}</Text>\n </HStack>\n {open.length === 0 ? (\n <Text style=\"caption\" tone=\"muted\" align=\"center\">\n no open positions\n </Text>\n ) : (\n <List gap={0}>\n {open.map((position) => (\n <PositionRow\n key={`${position.conditionId ?? position.marketId ?? position.slug}-${position.outcome}`}\n position={position}\n />\n ))}\n </List>\n )}\n </>\n );\n}\n\nexport interface PolymarketSpatialViewProps {\n snapshot: PolymarketSnapshot;\n /** Dispatch by action id: `market:<id>` (open a market), `detail-back`, `refresh`. */\n onAction?: (action: string) => void;\n}\n\nexport function PolymarketSpatialView({\n snapshot,\n onAction,\n}: PolymarketSpatialViewProps) {\n const { status, markets, selectedMarket, loading, error } = snapshot;\n const positions = snapshot.positions ?? [];\n const accountReady = status?.account?.ready ?? false;\n const selectedId = selectedMarket?.id ?? null;\n return (\n <Card gap={1} padding={1}>\n <HStack gap={1} align=\"center\" wrap>\n <ReadinessRow status={status} />\n <Text style=\"caption\" tone=\"muted\" grow={1}>\n {loading ? \"loading\" : `${markets.length} markets`}\n </Text>\n <Button\n variant=\"outline\"\n tone=\"default\"\n agent=\"refresh\"\n disabled={loading}\n onPress={() => onAction?.(\"refresh\")}\n >\n Refresh\n </Button>\n </HStack>\n\n {error ? (\n <Text tone=\"danger\" style=\"caption\">\n {error}\n </Text>\n ) : null}\n\n {selectedMarket ? (\n <MarketDetail market={selectedMarket} onAction={onAction} />\n ) : (\n <>\n {accountReady ? (\n <PositionsSection\n positions={positions}\n summary={snapshot.positionsSummary ?? null}\n />\n ) : null}\n <Divider label=\"markets\" />\n {markets.length === 0 ? (\n <Text tone=\"muted\" align=\"center\" style=\"caption\">\n {loading ? \"loading markets\" : \"no markets loaded\"}\n </Text>\n ) : (\n <List gap={1}>\n {markets.slice(0, MAX_LIST).map((market, index) => (\n <MarketRow\n key={market.id}\n market={market}\n index={index}\n active={selectedId === market.id}\n onAction={onAction}\n />\n ))}\n </List>\n )}\n </>\n )}\n </Card>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,14 @@
1
+ export * from "./actions";
2
+ export * from "./client";
3
+ export { derivePolymarketTopOfBook, type PolymarketTopOfBook, } from "./orderbook";
4
+ export * from "./PolymarketAppView";
5
+ export * from "./PolymarketAppView.helpers";
6
+ export { PolymarketView } from "./PolymarketView";
7
+ export { polymarketPlugin } from "./plugin";
8
+ export { POLYMARKET_APP_NAME, polymarketApp } from "./polymarket-app";
9
+ export * from "./polymarket-contracts";
10
+ export { polymarketStatusProvider } from "./provider";
11
+ export * from "./register";
12
+ export * from "./routes";
13
+ export * from "./usePolymarketState";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtE,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ export * from "./actions.js";
2
+ export * from "./client.js";
3
+ import {
4
+ derivePolymarketTopOfBook
5
+ } from "./orderbook.js";
6
+ export * from "./PolymarketAppView.js";
7
+ export * from "./PolymarketAppView.helpers";
8
+ import { PolymarketView } from "./PolymarketView.js";
9
+ import { polymarketPlugin } from "./plugin.js";
10
+ import { POLYMARKET_APP_NAME, polymarketApp } from "./polymarket-app.js";
11
+ export * from "./polymarket-contracts.js";
12
+ import { polymarketStatusProvider } from "./provider.js";
13
+ export * from "./register.js";
14
+ export * from "./routes.js";
15
+ export * from "./usePolymarketState.js";
16
+ export {
17
+ POLYMARKET_APP_NAME,
18
+ PolymarketView,
19
+ derivePolymarketTopOfBook,
20
+ polymarketApp,
21
+ polymarketPlugin,
22
+ polymarketStatusProvider
23
+ };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./actions.js\";\nexport * from \"./client.js\";\nexport {\n derivePolymarketTopOfBook,\n type PolymarketTopOfBook,\n} from \"./orderbook.js\";\nexport * from \"./PolymarketAppView.js\";\nexport * from \"./PolymarketAppView.helpers\";\nexport { PolymarketView } from \"./PolymarketView.js\";\nexport { polymarketPlugin } from \"./plugin.js\";\nexport { POLYMARKET_APP_NAME, polymarketApp } from \"./polymarket-app.js\";\nexport * from \"./polymarket-contracts.js\";\nexport { polymarketStatusProvider } from \"./provider.js\";\nexport * from \"./register.js\";\nexport * from \"./routes.js\";\nexport * from \"./usePolymarketState.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd;AAAA,EACE;AAAA,OAEK;AACP,cAAc;AACd,cAAc;AACd,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB,qBAAqB;AACnD,cAAc;AACd,SAAS,gCAAgC;AACzC,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,15 @@
1
+ export interface PolymarketOrderbookLevel {
2
+ price: string;
3
+ size: string;
4
+ }
5
+ export interface PolymarketTopOfBook {
6
+ bestBid: PolymarketOrderbookLevel | null;
7
+ bestAsk: PolymarketOrderbookLevel | null;
8
+ midpoint: string | null;
9
+ spread: string | null;
10
+ }
11
+ export declare function derivePolymarketTopOfBook(args: {
12
+ bids?: readonly PolymarketOrderbookLevel[];
13
+ asks?: readonly PolymarketOrderbookLevel[];
14
+ }): PolymarketTopOfBook;
15
+ //# sourceMappingURL=orderbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../src/orderbook.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAiBD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,IAAI,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC3C,IAAI,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC5C,GAAG,mBAAmB,CAqCtB"}