@liberfi.io/ui-predict 0.1.59 → 0.1.61

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/base.ts","../../src/client/dflow.ts","../../src/client/ws.ts","../../src/client/v2/client.ts"],"names":["buildQuery","params","provider","qs","key","value","str","toRecord","BasePredictClient","endpoint","path","query","url","httpGet","data","httpPost","parseSide","raw","sort","levels","priceStr","quantity","a","b","normalizeOrderbook","DflowPredictClient","eventId","withNestedMarkets","ticker","seriesTicker","rest","mintAddress","marketId","request","marketTicker","walletAddress","eventTicker","err","DflowPredictWsClient","config","event","error","options","onUpdate","removeListener","callback","listeners","index","channel","subscription","status","listener","message","type","dataMsg","delay","createDflowPredictWsClient","buildV2Query","PredictClientV2","slug","createPredictClientV2"],"mappings":"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","file":"index.mjs","sourcesContent":["import { httpGet, httpPost } from \"@liberfi.io/utils\";\nimport type { ProviderType } from \"../types\";\n\n/**\n * Build a query string from a params object.\n * Skips `undefined` and `null` values.\n */\nexport function buildQuery(\n params: Record<string, unknown>,\n provider?: ProviderType,\n): string {\n const qs = new URLSearchParams();\n\n // Add provider if specified\n if (provider) {\n qs.set(\"provider\", provider);\n }\n\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n if (typeof value === \"object\") {\n qs.set(key, JSON.stringify(value));\n } else {\n qs.set(key, String(value));\n }\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\n/** Cast typed params to Record for buildQuery */\nexport function toRecord<T extends object>(params: T): Record<string, unknown> {\n return params as unknown as Record<string, unknown>;\n}\n\n/**\n * Base class for prediction market clients.\n * Provides common HTTP request utilities.\n */\nexport abstract class BasePredictClient {\n constructor(\n protected readonly endpoint: string,\n protected readonly provider: ProviderType,\n ) {}\n\n /**\n * Build URL with query parameters\n */\n protected buildUrl(path: string, params?: Record<string, unknown>): string {\n const query = buildQuery(params ?? {}, this.provider);\n return `${this.endpoint}${path}${query}`;\n }\n\n /**\n * Perform a GET request\n */\n protected async fetch<T>(\n path: string,\n params?: Record<string, unknown>,\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n return await httpGet<T>(url);\n }\n\n /**\n * Perform a POST request\n */\n protected async postRequest<T, P = unknown>(\n path: string,\n data: P,\n params?: Record<string, unknown>,\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n return await httpPost<T, P>(url, data);\n }\n}\n","import type {\n IPredictClient,\n StandardEventsResponse,\n StandardEvent,\n StandardMarketsResponse,\n StandardMarket,\n OrderbookResponse,\n OrderbookLevel,\n MultiTradeResponse,\n MultiOnchainTradeResponse,\n CandlesticksResponse,\n ForecastPercentileHistoryResponse,\n SeriesListResponse,\n SeriesResponse,\n TagsByCategoriesResponse,\n FiltersBySportsResponse,\n SearchResponse,\n OutcomeMintsResponse,\n FilterOutcomeMintsResponse,\n LiveDataResponse,\n QuoteResponse,\n SwapResponse,\n SwapInstructionsResponse,\n OrderResponse,\n OrderStatusResponse,\n IntentQuoteResponse,\n IntentSwapResponse,\n PredictionMarketInitResponse,\n TokenListResponse,\n TokenListWithDecimalsResponse,\n VenueListResponse,\n EventQueryParams,\n MarketQueryParams,\n MarketsBatchRequest,\n TradesQueryParams,\n TradesByMintQueryParams,\n OnchainTradesByWalletQueryParams,\n OnchainTradesByEventQueryParams,\n OnchainTradesByMarketQueryParams,\n CandlesticksQueryParams,\n ForecastPercentileHistoryQueryParams,\n ForecastPercentileHistoryByMintQueryParams,\n SeriesQueryParams,\n SearchQueryParams,\n LiveDataQueryParams,\n LiveDataByEventQueryParams,\n LiveDataByMintQueryParams,\n PositionsByWalletQueryParams,\n WalletPositionsResponse,\n OutcomeMintsQueryParams,\n FilterOutcomeMintsRequest,\n QuoteQueryParams,\n SwapRequestBody,\n OrderQueryParams,\n OrderStatusQueryParams,\n IntentQuoteQueryParams,\n IntentSwapRequestBody,\n PredictionMarketInitQueryParams,\n} from \"../types\";\nimport { BasePredictClient, toRecord } from \"./base\";\n\n// ---------------------------------------------------------------------------\n// DFlow-specific raw orderbook types (internal to this client)\n// ---------------------------------------------------------------------------\n\n/** Raw orderbook side as returned by the DFlow API: price string → quantity */\ntype DflowOrderbookSideRaw = Record<string, number>;\n\n/** Raw orderbook response shape from DFlow API */\ninterface DflowRawOrderbookResponse {\n yes_bids?: DflowOrderbookSideRaw;\n yes_asks?: DflowOrderbookSideRaw;\n no_bids?: DflowOrderbookSideRaw;\n no_asks?: DflowOrderbookSideRaw;\n sequence?: number;\n}\n\n/** Parse a raw orderbook side into sorted OrderbookLevel[] */\nfunction parseSide(\n raw: DflowOrderbookSideRaw | undefined,\n sort: \"asc\" | \"desc\",\n): OrderbookLevel[] {\n if (!raw) return [];\n const levels: OrderbookLevel[] = Object.entries(raw).map(\n ([priceStr, quantity]) => ({\n price: parseFloat(priceStr),\n quantity,\n }),\n );\n levels.sort((a, b) =>\n sort === \"desc\" ? b.price - a.price : a.price - b.price,\n );\n return levels;\n}\n\n/** Normalise DFlow raw orderbook response into public OrderbookResponse */\nfunction normalizeOrderbook(raw: DflowRawOrderbookResponse): OrderbookResponse {\n return {\n yesBids: parseSide(raw.yes_bids, \"desc\"),\n yesAsks: parseSide(raw.yes_asks, \"asc\"),\n noBids: parseSide(raw.no_bids, \"desc\"),\n noAsks: parseSide(raw.no_asks, \"asc\"),\n sequence: raw.sequence,\n };\n}\n\n// ---------------------------------------------------------------------------\n\n/**\n * DFlow Prediction Market Client.\n * Implements IPredictClient interface using the DFlow API.\n */\nexport class DflowPredictClient\n extends BasePredictClient\n implements IPredictClient\n{\n constructor(endpoint: string) {\n super(endpoint, \"dflow\");\n }\n\n // -- Events ----------------------------------------------------------------\n\n async getEvents(params?: EventQueryParams): Promise<StandardEventsResponse> {\n return await this.fetch<StandardEventsResponse>(\n \"/v2/event\",\n toRecord(params ?? {}),\n );\n }\n\n async getEventById(\n eventId: string,\n withNestedMarkets?: boolean,\n ): Promise<StandardEvent> {\n return await this.fetch<StandardEvent>(`/v2/event/${eventId}`, {\n withNestedMarkets,\n });\n }\n\n async getEventCandlesticks(\n ticker: string,\n params: CandlesticksQueryParams,\n ): Promise<CandlesticksResponse> {\n return await this.fetch<CandlesticksResponse>(\n `/v2/event/${ticker}/candlesticks`,\n toRecord(params),\n );\n }\n\n async getEventForecastPercentileHistory(\n params: ForecastPercentileHistoryQueryParams,\n ): Promise<ForecastPercentileHistoryResponse> {\n const { seriesTicker, eventId, ...rest } = params;\n return await this.fetch<ForecastPercentileHistoryResponse>(\n `/v2/event/${seriesTicker}/${eventId}/forecast_percentile_history`,\n toRecord(rest),\n );\n }\n\n async getEventForecastPercentileHistoryByMint(\n params: ForecastPercentileHistoryByMintQueryParams,\n ): Promise<ForecastPercentileHistoryResponse> {\n const { mintAddress, ...rest } = params;\n return await this.fetch<ForecastPercentileHistoryResponse>(\n `/v2/event/by-mint/${mintAddress}/forecast_percentile_history`,\n toRecord(rest),\n );\n }\n\n // -- Markets ---------------------------------------------------------------\n\n async getMarkets(\n params?: MarketQueryParams,\n ): Promise<StandardMarketsResponse> {\n return await this.fetch<StandardMarketsResponse>(\n \"/v2/market\",\n toRecord(params ?? {}),\n );\n }\n\n async getMarketById(marketId: string): Promise<StandardMarket> {\n return await this.fetch<StandardMarket>(`/v2/market/${marketId}`);\n }\n\n async getMarketByMint(mintAddress: string): Promise<StandardMarket> {\n return await this.fetch<StandardMarket>(\n `/v2/market/by-mint/${mintAddress}`,\n );\n }\n\n async getMarketsBatch(\n request: MarketsBatchRequest,\n ): Promise<StandardMarketsResponse> {\n return await this.postRequest<StandardMarketsResponse, MarketsBatchRequest>(\n \"/v2/market/batch\",\n request,\n );\n }\n\n async getMarketCandlesticks(\n ticker: string,\n params: CandlesticksQueryParams,\n ): Promise<CandlesticksResponse> {\n return await this.fetch<CandlesticksResponse>(\n `/v2/market/${ticker}/candlesticks`,\n toRecord(params),\n );\n }\n\n async getMarketCandlesticksByMint(\n mintAddress: string,\n params: CandlesticksQueryParams,\n ): Promise<CandlesticksResponse> {\n return await this.fetch<CandlesticksResponse>(\n `/v2/market/by-mint/${mintAddress}/candlesticks`,\n toRecord(params),\n );\n }\n\n // -- Orderbook -------------------------------------------------------------\n\n async getOrderbook(marketTicker: string): Promise<OrderbookResponse> {\n const raw = await this.fetch<DflowRawOrderbookResponse>(\n `/v2/orderbook/${marketTicker}`,\n );\n return normalizeOrderbook(raw);\n }\n\n async getOrderbookByMint(mintAddress: string): Promise<OrderbookResponse> {\n const raw = await this.fetch<DflowRawOrderbookResponse>(\n `/v2/orderbook/by-mint/${mintAddress}`,\n );\n return normalizeOrderbook(raw);\n }\n\n // -- Trades ----------------------------------------------------------------\n\n async getTrades(params?: TradesQueryParams): Promise<MultiTradeResponse> {\n return await this.fetch<MultiTradeResponse>(\n \"/v2/trades\",\n toRecord(params ?? {}),\n );\n }\n\n async getTradesByMint(\n params: TradesByMintQueryParams,\n ): Promise<MultiTradeResponse> {\n const { mintAddress, ...rest } = params;\n return await this.fetch<MultiTradeResponse>(\n `/v2/trades/by-mint/${mintAddress}`,\n toRecord(rest),\n );\n }\n\n // -- On-Chain Trades -------------------------------------------------------\n\n async getOnchainTradesByWallet(\n params: OnchainTradesByWalletQueryParams,\n ): Promise<MultiOnchainTradeResponse> {\n const { walletAddress, ...rest } = params;\n return await this.fetch<MultiOnchainTradeResponse>(\n `/v2/trades/onchain/by-wallet/${walletAddress}`,\n toRecord(rest),\n );\n }\n\n async getOnchainTradesByEvent(\n params: OnchainTradesByEventQueryParams,\n ): Promise<MultiOnchainTradeResponse> {\n const { eventTicker, ...rest } = params;\n return await this.fetch<MultiOnchainTradeResponse>(\n `/v2/trades/onchain/by-event/${eventTicker}`,\n toRecord(rest),\n );\n }\n\n async getOnchainTradesByMarket(\n params: OnchainTradesByMarketQueryParams,\n ): Promise<MultiOnchainTradeResponse> {\n const { marketTicker, ...rest } = params;\n return await this.fetch<MultiOnchainTradeResponse>(\n `/v2/trades/onchain/by-market/${marketTicker}`,\n toRecord(rest),\n );\n }\n\n // -- Live Data -------------------------------------------------------------\n\n async getLiveData(params: LiveDataQueryParams): Promise<LiveDataResponse> {\n return await this.fetch<LiveDataResponse>(\"/v2/live\", {\n milestoneIds: params.milestoneIds.join(\",\"),\n });\n }\n\n async getLiveDataByEvent(\n params: LiveDataByEventQueryParams,\n ): Promise<LiveDataResponse> {\n const { eventTicker, ...rest } = params;\n return await this.fetch<LiveDataResponse>(\n `/v2/live/event/${eventTicker}`,\n toRecord(rest),\n );\n }\n\n async getLiveDataByMint(\n params: LiveDataByMintQueryParams,\n ): Promise<LiveDataResponse> {\n const { mintAddress, ...rest } = params;\n return await this.fetch<LiveDataResponse>(\n `/v2/live/by-mint/${mintAddress}`,\n toRecord(rest),\n );\n }\n\n // -- Series ----------------------------------------------------------------\n\n async getSeries(params?: SeriesQueryParams): Promise<SeriesListResponse> {\n return await this.fetch<SeriesListResponse>(\n \"/v2/series\",\n toRecord(params ?? {}),\n );\n }\n\n async getSeriesByTicker(seriesTicker: string): Promise<SeriesResponse> {\n return await this.fetch<SeriesResponse>(`/v2/series/${seriesTicker}`);\n }\n\n // -- Tags & Sports ---------------------------------------------------------\n\n async getTagsByCategories(): Promise<TagsByCategoriesResponse> {\n return await this.fetch<TagsByCategoriesResponse>(\"/v2/tags/by_categories\");\n }\n\n async getFiltersBySports(): Promise<FiltersBySportsResponse> {\n return await this.fetch<FiltersBySportsResponse>(\"/v2/sports/filters\");\n }\n\n // -- Search ----------------------------------------------------------------\n\n async search(params: SearchQueryParams): Promise<SearchResponse> {\n return await this.fetch<SearchResponse>(\"/v2/search\", toRecord(params));\n }\n\n // -- Positions -------------------------------------------------------------\n\n async getPositionsByWallet(\n params: PositionsByWalletQueryParams,\n ): Promise<WalletPositionsResponse> {\n const { walletAddress } = params;\n return await this.fetch<WalletPositionsResponse>(\n `/v2/positions/by-wallet/${walletAddress}`,\n );\n }\n\n // -- Outcome Mints ---------------------------------------------------------\n\n async getOutcomeMints(\n params?: OutcomeMintsQueryParams,\n ): Promise<OutcomeMintsResponse> {\n return await this.fetch<OutcomeMintsResponse>(\n \"/v2/outcome_mints\",\n toRecord(params ?? {}),\n );\n }\n\n async filterOutcomeMints(\n request: FilterOutcomeMintsRequest,\n ): Promise<FilterOutcomeMintsResponse> {\n return await this.postRequest<\n FilterOutcomeMintsResponse,\n FilterOutcomeMintsRequest\n >(\"/v2/filter_outcome_mints\", request);\n }\n\n // -- Quote & Swap (Imperative) ---------------------------------------------\n\n async getQuote(params: QuoteQueryParams): Promise<QuoteResponse> {\n return await this.fetch<QuoteResponse>(\"/v2/swap/quote\", toRecord(params));\n }\n\n async createSwap(request: SwapRequestBody): Promise<SwapResponse> {\n return await this.postRequest<SwapResponse, SwapRequestBody>(\n \"/v2/swap\",\n request,\n );\n }\n\n async createSwapInstructions(\n request: SwapRequestBody,\n ): Promise<SwapInstructionsResponse> {\n return await this.postRequest<SwapInstructionsResponse, SwapRequestBody>(\n \"/v2/swap/instructions\",\n request,\n );\n }\n\n // -- Order API -------------------------------------------------------------\n\n async getOrder(params: OrderQueryParams): Promise<OrderResponse> {\n return await this.fetch<OrderResponse>(\"/v2/order\", toRecord(params));\n }\n\n async getOrderStatus(\n params: OrderStatusQueryParams,\n ): Promise<OrderStatusResponse> {\n try {\n return await this.fetch<OrderStatusResponse>(\n \"/v2/order/status\",\n toRecord(params),\n );\n } catch (err: unknown) {\n // 404 means the order hasn't been indexed yet — return pending so polling continues\n const is404 = err instanceof Error && /\\b404\\b/.test(err.message);\n if (is404) {\n return { status: \"pending\", inAmount: \"0\", outAmount: \"0\" };\n }\n throw err;\n }\n }\n\n // -- Intent (Declarative Swap) ---------------------------------------------\n\n async getIntentQuote(\n params: IntentQuoteQueryParams,\n ): Promise<IntentQuoteResponse> {\n return await this.fetch<IntentQuoteResponse>(\n \"/v2/intent/quote\",\n toRecord(params),\n );\n }\n\n async submitIntentSwap(\n request: IntentSwapRequestBody,\n ): Promise<IntentSwapResponse> {\n return await this.postRequest<IntentSwapResponse, IntentSwapRequestBody>(\n \"/v2/intent/swap\",\n request,\n );\n }\n\n // -- Prediction Market Init ------------------------------------------------\n\n async initPredictionMarket(\n params: PredictionMarketInitQueryParams,\n ): Promise<PredictionMarketInitResponse> {\n return await this.fetch<PredictionMarketInitResponse>(\n \"/v2/prediction-market/init\",\n toRecord(params),\n );\n }\n\n // -- Token & Venue ---------------------------------------------------------\n\n async getTokens(): Promise<TokenListResponse> {\n return await this.fetch<TokenListResponse>(\"/v2/tokens\");\n }\n\n async getTokensWithDecimals(): Promise<TokenListWithDecimalsResponse> {\n return await this.fetch<TokenListWithDecimalsResponse>(\n \"/v2/tokens/decimals\",\n );\n }\n\n async getVenues(): Promise<VenueListResponse> {\n return await this.fetch<VenueListResponse>(\"/v2/venues\");\n }\n}\n","/**\n * DflowPredictWsClient - WebSocket client for real-time prediction market data\n *\n * Features:\n * - Auto-reconnect with exponential backoff\n * - Heartbeat (ping/pong) for connection health\n * - Subscription management for prices, trades, orderbook channels\n * - Event emitter pattern for message handling\n */\nimport type {\n WsConnectionStatus,\n WsSubscribeOptions,\n WsPriceUpdate,\n WsTradeUpdate,\n WsOrderbookUpdate,\n IPredictWsClient,\n} from \"../types\";\n\n// ---------------------------------------------------------------------------\n// Internal WebSocket Protocol Types\n// ---------------------------------------------------------------------------\n\n/** WebSocket channel types */\ntype WsChannel = \"prices\" | \"trades\" | \"orderbook\";\n\n/** Subscribe/Unsubscribe message */\ninterface WsSubscribeMessage {\n type: \"subscribe\" | \"unsubscribe\";\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n}\n\n/** Ping message */\ninterface WsPingMessage {\n type: \"ping\";\n}\n\n/** Pong response */\ninterface WsPongMessage {\n type: \"pong\";\n timestamp: number;\n}\n\n/** Status request message */\ninterface WsStatusRequestMessage {\n type: \"status\";\n}\n\n/** Status response message */\ninterface WsStatusMessage {\n type: \"status\";\n status: WsConnectionStatus;\n message?: string;\n connected?: boolean;\n clientCount?: number;\n subscriptions?: {\n prices: { all: boolean; tickers: string[] };\n trades: { all: boolean; tickers: string[] };\n orderbook: { all: boolean; tickers: string[] };\n };\n}\n\n/** Subscription confirmation message */\ninterface WsSubscriptionConfirmation {\n type: \"subscribed\" | \"unsubscribed\";\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n success: boolean;\n}\n\n/** Error message from server */\ninterface WsErrorMessage {\n type: \"error\";\n message: string;\n code?: string;\n}\n\n/** Union type for all data messages from server */\ntype WsDataMessage = WsPriceUpdate | WsTradeUpdate | WsOrderbookUpdate;\n\n/** Union type for all server messages */\ntype WsServerMessage =\n | WsDataMessage\n | WsStatusMessage\n | WsSubscriptionConfirmation\n | WsErrorMessage\n | WsPongMessage;\n\n/** Union type for all client messages */\ntype WsClientMessage =\n | WsSubscribeMessage\n | WsPingMessage\n | WsStatusRequestMessage;\n\n/** WebSocket event types for event emitter */\ntype WsEventType =\n | \"connect\"\n | \"disconnect\"\n | \"reconnecting\"\n | \"error\"\n | \"price\"\n | \"trade\"\n | \"orderbook\"\n | \"status\"\n | \"subscribed\"\n | \"unsubscribed\";\n\n/** WebSocket client configuration */\nexport interface WsClientConfig {\n /** WebSocket endpoint URL */\n wsUrl: string;\n /** Auto-connect on instantiation */\n autoConnect?: boolean;\n /** Auto-reconnect on disconnect */\n autoReconnect?: boolean;\n /** Reconnect interval base in ms (default: 1000) */\n reconnectIntervalBase?: number;\n /** Max reconnect interval in ms (default: 30000) */\n reconnectMaxInterval?: number;\n /** Ping interval in ms (default: 30000) */\n pingInterval?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_RECONNECT_INTERVAL_BASE = 1000; // 1 second\nconst DEFAULT_RECONNECT_MAX_INTERVAL = 30000; // 30 seconds\nconst DEFAULT_PING_INTERVAL = 30000; // 30 seconds\n\n// ---------------------------------------------------------------------------\n// Event Emitter Types\n// ---------------------------------------------------------------------------\n\ntype EventCallback<T = unknown> = (data: T) => void;\n\ninterface EventListeners {\n connect: EventCallback<void>[];\n disconnect: EventCallback<{ code?: number; reason?: string }>[];\n reconnecting: EventCallback<{ attempt: number; delay: number }>[];\n error: EventCallback<Error>[];\n price: EventCallback<WsPriceUpdate>[];\n trade: EventCallback<WsTradeUpdate>[];\n orderbook: EventCallback<WsOrderbookUpdate>[];\n status: EventCallback<WsConnectionStatus>[];\n subscribed: EventCallback<{\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n }>[];\n unsubscribed: EventCallback<{\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n }>[];\n}\n\n// ---------------------------------------------------------------------------\n// Subscription State\n// ---------------------------------------------------------------------------\n\ninterface ChannelSubscription {\n all: boolean;\n tickers: Set<string>;\n}\n\ninterface SubscriptionState {\n prices: ChannelSubscription;\n trades: ChannelSubscription;\n orderbook: ChannelSubscription;\n}\n\n// ---------------------------------------------------------------------------\n// DflowPredictWsClient Class\n// ---------------------------------------------------------------------------\n\nexport class DflowPredictWsClient implements IPredictWsClient {\n private ws: WebSocket | null = null;\n private readonly wsUrl: string;\n private readonly autoReconnect: boolean;\n private readonly reconnectIntervalBase: number;\n private readonly reconnectMaxInterval: number;\n private readonly pingInterval: number;\n\n private status: WsConnectionStatus = \"disconnected\";\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private pingIntervalId: ReturnType<typeof setInterval> | null = null;\n private shouldReconnect = true;\n\n // Event listeners\n private listeners: EventListeners = {\n connect: [],\n disconnect: [],\n reconnecting: [],\n error: [],\n price: [],\n trade: [],\n orderbook: [],\n status: [],\n subscribed: [],\n unsubscribed: [],\n };\n\n // Track current subscriptions for reconnection recovery\n private subscriptions: SubscriptionState = {\n prices: { all: false, tickers: new Set() },\n trades: { all: false, tickers: new Set() },\n orderbook: { all: false, tickers: new Set() },\n };\n\n constructor(config: WsClientConfig) {\n this.wsUrl = config.wsUrl;\n this.autoReconnect = config.autoReconnect ?? true;\n this.reconnectIntervalBase =\n config.reconnectIntervalBase ?? DEFAULT_RECONNECT_INTERVAL_BASE;\n this.reconnectMaxInterval =\n config.reconnectMaxInterval ?? DEFAULT_RECONNECT_MAX_INTERVAL;\n this.pingInterval = config.pingInterval ?? DEFAULT_PING_INTERVAL;\n\n if (config.autoConnect !== false) {\n this.connect();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Connection Management\n // ---------------------------------------------------------------------------\n\n /**\n * Connect to the WebSocket server\n */\n connect(): void {\n if (\n this.ws &&\n (this.ws.readyState === WebSocket.OPEN ||\n this.ws.readyState === WebSocket.CONNECTING)\n ) {\n return;\n }\n\n this.shouldReconnect = true;\n this.setStatus(\"connecting\");\n\n try {\n this.ws = new WebSocket(this.wsUrl);\n\n this.ws.onopen = () => {\n this.reconnectAttempts = 0;\n this.setStatus(\"connected\");\n this.emit(\"connect\", undefined);\n\n // Restore subscriptions after reconnection\n this.restoreSubscriptions();\n\n // Start ping interval\n this.startPingInterval();\n };\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event.data);\n };\n\n this.ws.onerror = (event) => {\n const error = new Error(\"WebSocket error\");\n console.error(\"[DflowPredictWsClient] WebSocket error:\", event);\n this.emit(\"error\", error);\n };\n\n this.ws.onclose = (event) => {\n this.stopPingInterval();\n this.setStatus(\"disconnected\");\n this.emit(\"disconnect\", { code: event.code, reason: event.reason });\n\n // Attempt reconnection\n if (this.shouldReconnect && this.autoReconnect) {\n this.scheduleReconnect();\n }\n };\n } catch (error) {\n console.error(\n \"[DflowPredictWsClient] Failed to create WebSocket:\",\n error,\n );\n this.emit(\n \"error\",\n error instanceof Error ? error : new Error(String(error)),\n );\n\n if (this.shouldReconnect && this.autoReconnect) {\n this.scheduleReconnect();\n }\n }\n }\n\n /**\n * Disconnect from the WebSocket server\n */\n disconnect(): void {\n this.shouldReconnect = false;\n this.stopPingInterval();\n\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this.setStatus(\"disconnected\");\n }\n\n /**\n * Check if connected to the server\n */\n isConnected(): boolean {\n return this.ws !== null && this.ws.readyState === WebSocket.OPEN;\n }\n\n /**\n * Get current connection status\n */\n getStatus(): WsConnectionStatus {\n return this.status;\n }\n\n // ---------------------------------------------------------------------------\n // Business Subscription Methods (IPredictWsClient interface)\n // ---------------------------------------------------------------------------\n\n /** Subscribe to price updates, returns unsubscribe function */\n subscribePrices(\n options: WsSubscribeOptions,\n onUpdate: (update: WsPriceUpdate) => void,\n ): () => void {\n this.subscribeChannel(\"prices\", options);\n const removeListener = this.on(\"price\", onUpdate);\n return () => {\n removeListener();\n this.unsubscribeChannel(\"prices\", options);\n };\n }\n\n /** Subscribe to trade updates, returns unsubscribe function */\n subscribeTrades(\n options: WsSubscribeOptions,\n onUpdate: (update: WsTradeUpdate) => void,\n ): () => void {\n this.subscribeChannel(\"trades\", options);\n const removeListener = this.on(\"trade\", onUpdate);\n return () => {\n removeListener();\n this.unsubscribeChannel(\"trades\", options);\n };\n }\n\n /** Subscribe to orderbook updates, returns unsubscribe function */\n subscribeOrderbook(\n options: WsSubscribeOptions,\n onUpdate: (update: WsOrderbookUpdate) => void,\n ): () => void {\n this.subscribeChannel(\"orderbook\", options);\n const removeListener = this.on(\"orderbook\", onUpdate);\n return () => {\n removeListener();\n this.unsubscribeChannel(\"orderbook\", options);\n };\n }\n\n /** Subscribe to status changes, returns unsubscribe function */\n onStatusChange(callback: (status: WsConnectionStatus) => void): () => void {\n return this.on(\"status\", callback);\n }\n\n // ---------------------------------------------------------------------------\n // Event Emitter\n // ---------------------------------------------------------------------------\n\n /**\n * Add event listener\n */\n on<T extends WsEventType>(\n event: T,\n callback: EventListeners[T][number],\n ): () => void {\n const listeners = this.listeners[event] as EventCallback<unknown>[];\n listeners.push(callback as EventCallback<unknown>);\n\n // Return unsubscribe function\n return () => {\n this.off(event, callback);\n };\n }\n\n /**\n * Remove event listener\n */\n off<T extends WsEventType>(\n event: T,\n callback: EventListeners[T][number],\n ): void {\n const listeners = this.listeners[event] as EventCallback<unknown>[];\n const index = listeners.indexOf(callback as EventCallback<unknown>);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n }\n\n /**\n * Remove all listeners for an event (or all events)\n */\n removeAllListeners(event?: WsEventType): void {\n if (event) {\n (this.listeners[event] as unknown[]).length = 0;\n } else {\n for (const key of Object.keys(this.listeners)) {\n (this.listeners[key as WsEventType] as unknown[]).length = 0;\n }\n }\n }\n\n // ---------------------------------------------------------------------------\n // Private Methods\n // ---------------------------------------------------------------------------\n\n private subscribeChannel(\n channel: WsChannel,\n options: WsSubscribeOptions,\n ): void {\n const subscription = this.subscriptions[channel];\n\n if (options.all) {\n subscription.all = true;\n subscription.tickers.clear();\n } else if (options.tickers && options.tickers.length > 0) {\n subscription.all = false;\n for (const ticker of options.tickers) {\n subscription.tickers.add(ticker);\n }\n }\n\n this.sendSubscription(\"subscribe\", channel, options);\n }\n\n private unsubscribeChannel(\n channel: WsChannel,\n options: WsSubscribeOptions,\n ): void {\n const subscription = this.subscriptions[channel];\n\n if (options.all) {\n subscription.all = false;\n subscription.tickers.clear();\n } else if (options.tickers && options.tickers.length > 0) {\n for (const ticker of options.tickers) {\n subscription.tickers.delete(ticker);\n }\n }\n\n this.sendSubscription(\"unsubscribe\", channel, options);\n }\n\n private setStatus(status: WsConnectionStatus): void {\n if (this.status !== status) {\n this.status = status;\n this.emit(\"status\", status);\n }\n }\n\n private emit<T extends WsEventType>(\n event: T,\n data: Parameters<EventListeners[T][number]>[0],\n ): void {\n const listeners = this.listeners[event] as EventCallback<typeof data>[];\n for (const listener of listeners) {\n try {\n listener(data);\n } catch (error) {\n console.error(\n `[DflowPredictWsClient] Error in ${event} listener:`,\n error,\n );\n }\n }\n }\n\n private send(message: WsClientMessage): boolean {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n console.warn(\n \"[DflowPredictWsClient] Cannot send message, WebSocket not connected\",\n );\n return false;\n }\n\n try {\n this.ws.send(JSON.stringify(message));\n return true;\n } catch (error) {\n console.error(\"[DflowPredictWsClient] Failed to send message:\", error);\n return false;\n }\n }\n\n private sendSubscription(\n type: \"subscribe\" | \"unsubscribe\",\n channel: WsChannel,\n options: WsSubscribeOptions,\n ): void {\n this.send({\n type,\n channel,\n all: options.all,\n tickers: options.tickers,\n });\n }\n\n private handleMessage(data: string): void {\n try {\n const message = JSON.parse(data) as WsServerMessage;\n\n switch (message.type) {\n case \"ticker\":\n this.emit(\"price\", message as WsPriceUpdate);\n break;\n case \"trade\":\n this.emit(\"trade\", message as WsTradeUpdate);\n break;\n case \"orderbook\":\n this.emit(\"orderbook\", message as WsOrderbookUpdate);\n break;\n case \"status\":\n // Status message from server (different from connection status)\n break;\n case \"subscribed\":\n this.emit(\"subscribed\", {\n channel: message.channel,\n all: message.all,\n tickers: message.tickers,\n });\n break;\n case \"unsubscribed\":\n this.emit(\"unsubscribed\", {\n channel: message.channel,\n all: message.all,\n tickers: message.tickers,\n });\n break;\n case \"pong\":\n // Pong received, connection is alive\n break;\n case \"error\":\n console.error(\n \"[DflowPredictWsClient] Server error:\",\n message.message,\n );\n this.emit(\"error\", new Error(message.message));\n break;\n default:\n // Handle data messages without explicit type\n if (\"channel\" in message) {\n const dataMsg = message as WsDataMessage;\n switch (dataMsg.channel) {\n case \"prices\":\n this.emit(\"price\", dataMsg as WsPriceUpdate);\n break;\n case \"trades\":\n this.emit(\"trade\", dataMsg as WsTradeUpdate);\n break;\n case \"orderbook\":\n this.emit(\"orderbook\", dataMsg as WsOrderbookUpdate);\n break;\n }\n }\n }\n } catch (error) {\n console.error(\"[DflowPredictWsClient] Failed to parse message:\", error);\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimeout) {\n return;\n }\n\n const delay = Math.min(\n this.reconnectIntervalBase * Math.pow(2, this.reconnectAttempts),\n this.reconnectMaxInterval,\n );\n\n this.setStatus(\"reconnecting\");\n this.emit(\"reconnecting\", { attempt: this.reconnectAttempts + 1, delay });\n\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n this.reconnectAttempts++;\n this.connect();\n }, delay);\n }\n\n private restoreSubscriptions(): void {\n for (const channel of [\"prices\", \"trades\", \"orderbook\"] as WsChannel[]) {\n const subscription = this.subscriptions[channel];\n\n if (subscription.all) {\n this.sendSubscription(\"subscribe\", channel, { all: true });\n } else if (subscription.tickers.size > 0) {\n this.sendSubscription(\"subscribe\", channel, {\n tickers: Array.from(subscription.tickers),\n });\n }\n }\n }\n\n private startPingInterval(): void {\n this.stopPingInterval();\n\n this.pingIntervalId = setInterval(() => {\n this.send({ type: \"ping\" });\n }, this.pingInterval);\n }\n\n private stopPingInterval(): void {\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n this.pingIntervalId = null;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory function\n// ---------------------------------------------------------------------------\n\n/**\n * Create a new DflowPredictWsClient instance\n */\nexport function createDflowPredictWsClient(\n config: WsClientConfig,\n): DflowPredictWsClient {\n return new DflowPredictWsClient(config);\n}\n","import { httpGet } from \"@liberfi.io/utils\";\nimport type { V2Event, V2ListEventsParams, V2Page } from \"./types\";\n\n/**\n * Build a URL query string from a params object.\n * `undefined` and `null` values are omitted.\n * Boolean values are serialised as \"true\" / \"false\" strings.\n */\nfunction buildV2Query(params: Record<string, unknown>): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n qs.set(key, String(value));\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\n/**\n * HTTP client for the prediction-server REST API (v2 / prediction-server backend).\n *\n * Covers `GET /api/v1/events` (listEvents) and `GET /api/v1/events/:slug` (getEvent).\n *\n * This client is intentionally decoupled from the legacy `DflowPredictClient` so\n * that both can be used in parallel during the incremental migration from the old\n * DFlow-direct integration to the unified prediction-server backend.\n *\n * @example\n * ```ts\n * const client = new PredictClientV2(\"https://api.example.com\");\n * const page = await client.listEvents({ status: \"open\", limit: 20 });\n * const event = await client.getEvent(\"will-trump-win-2024\");\n * ```\n */\nexport class PredictClientV2 {\n constructor(private readonly endpoint: string) {}\n\n /**\n * List prediction events with optional filtering, sorting, and pagination.\n *\n * Maps to `GET /api/v1/events`.\n *\n * @param params - Optional query parameters (filter, sort, pagination).\n * @returns A paginated page of events.\n */\n async listEvents(params?: V2ListEventsParams): Promise<V2Page<V2Event>> {\n const query = buildV2Query((params ?? {}) as Record<string, unknown>);\n const url = `${this.endpoint}/api/v1/events${query}`;\n return await httpGet<V2Page<V2Event>>(url);\n }\n\n /**\n * Fetch a single prediction event by its slug.\n *\n * Maps to `GET /api/v1/events/:slug`.\n *\n * @param slug - Canonical event slug (e.g. \"will-trump-win-2024\" for Polymarket\n * or \"KXBTCD-25FEB-T68000\" for DFlow).\n * @returns The matching event.\n * @throws When the server responds with 404 or any other non-2xx status.\n */\n async getEvent(slug: string): Promise<V2Event> {\n const url = `${this.endpoint}/api/v1/events/${encodeURIComponent(slug)}`;\n return await httpGet<V2Event>(url);\n }\n}\n\n/**\n * Factory function for `PredictClientV2`.\n *\n * @param endpoint - Base URL of the prediction-server, without a trailing slash.\n */\nexport function createPredictClientV2(endpoint: string): PredictClientV2 {\n return new PredictClientV2(endpoint);\n}\n"]}
1
+ {"version":3,"sources":["../../src/client/base.ts","../../src/client/dflow.ts","../../src/client/ws.ts","../../src/client/v2/client.ts"],"names":["buildQuery","params","provider","qs","key","value","str","toRecord","BasePredictClient","endpoint","path","query","url","httpGet","data","httpPost","parseSide","raw","sort","levels","priceStr","quantity","a","b","normalizeOrderbook","DflowPredictClient","eventId","withNestedMarkets","ticker","seriesTicker","rest","mintAddress","marketId","request","marketTicker","walletAddress","eventTicker","err","DflowPredictWsClient","config","event","error","options","onUpdate","removeListener","callback","listeners","index","channel","subscription","status","listener","message","type","dataMsg","delay","createDflowPredictWsClient","buildV2Query","PredictClientV2","slug","source","createPredictClientV2"],"mappings":"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","file":"index.mjs","sourcesContent":["import { httpGet, httpPost } from \"@liberfi.io/utils\";\nimport type { ProviderType } from \"../types\";\n\n/**\n * Build a query string from a params object.\n * Skips `undefined` and `null` values.\n */\nexport function buildQuery(\n params: Record<string, unknown>,\n provider?: ProviderType,\n): string {\n const qs = new URLSearchParams();\n\n // Add provider if specified\n if (provider) {\n qs.set(\"provider\", provider);\n }\n\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n if (typeof value === \"object\") {\n qs.set(key, JSON.stringify(value));\n } else {\n qs.set(key, String(value));\n }\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\n/** Cast typed params to Record for buildQuery */\nexport function toRecord<T extends object>(params: T): Record<string, unknown> {\n return params as unknown as Record<string, unknown>;\n}\n\n/**\n * Base class for prediction market clients.\n * Provides common HTTP request utilities.\n */\nexport abstract class BasePredictClient {\n constructor(\n protected readonly endpoint: string,\n protected readonly provider: ProviderType,\n ) {}\n\n /**\n * Build URL with query parameters\n */\n protected buildUrl(path: string, params?: Record<string, unknown>): string {\n const query = buildQuery(params ?? {}, this.provider);\n return `${this.endpoint}${path}${query}`;\n }\n\n /**\n * Perform a GET request\n */\n protected async fetch<T>(\n path: string,\n params?: Record<string, unknown>,\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n return await httpGet<T>(url);\n }\n\n /**\n * Perform a POST request\n */\n protected async postRequest<T, P = unknown>(\n path: string,\n data: P,\n params?: Record<string, unknown>,\n ): Promise<T> {\n const url = this.buildUrl(path, params);\n return await httpPost<T, P>(url, data);\n }\n}\n","import type {\n IPredictClient,\n StandardEventsResponse,\n StandardEvent,\n StandardMarketsResponse,\n StandardMarket,\n OrderbookResponse,\n OrderbookLevel,\n MultiTradeResponse,\n MultiOnchainTradeResponse,\n CandlesticksResponse,\n ForecastPercentileHistoryResponse,\n SeriesListResponse,\n SeriesResponse,\n TagsByCategoriesResponse,\n FiltersBySportsResponse,\n SearchResponse,\n OutcomeMintsResponse,\n FilterOutcomeMintsResponse,\n LiveDataResponse,\n QuoteResponse,\n SwapResponse,\n SwapInstructionsResponse,\n OrderResponse,\n OrderStatusResponse,\n IntentQuoteResponse,\n IntentSwapResponse,\n PredictionMarketInitResponse,\n TokenListResponse,\n TokenListWithDecimalsResponse,\n VenueListResponse,\n EventQueryParams,\n MarketQueryParams,\n MarketsBatchRequest,\n TradesQueryParams,\n TradesByMintQueryParams,\n OnchainTradesByWalletQueryParams,\n OnchainTradesByEventQueryParams,\n OnchainTradesByMarketQueryParams,\n CandlesticksQueryParams,\n ForecastPercentileHistoryQueryParams,\n ForecastPercentileHistoryByMintQueryParams,\n SeriesQueryParams,\n SearchQueryParams,\n LiveDataQueryParams,\n LiveDataByEventQueryParams,\n LiveDataByMintQueryParams,\n PositionsByWalletQueryParams,\n WalletPositionsResponse,\n OutcomeMintsQueryParams,\n FilterOutcomeMintsRequest,\n QuoteQueryParams,\n SwapRequestBody,\n OrderQueryParams,\n OrderStatusQueryParams,\n IntentQuoteQueryParams,\n IntentSwapRequestBody,\n PredictionMarketInitQueryParams,\n} from \"../types\";\nimport { BasePredictClient, toRecord } from \"./base\";\n\n// ---------------------------------------------------------------------------\n// DFlow-specific raw orderbook types (internal to this client)\n// ---------------------------------------------------------------------------\n\n/** Raw orderbook side as returned by the DFlow API: price string → quantity */\ntype DflowOrderbookSideRaw = Record<string, number>;\n\n/** Raw orderbook response shape from DFlow API */\ninterface DflowRawOrderbookResponse {\n yes_bids?: DflowOrderbookSideRaw;\n yes_asks?: DflowOrderbookSideRaw;\n no_bids?: DflowOrderbookSideRaw;\n no_asks?: DflowOrderbookSideRaw;\n sequence?: number;\n}\n\n/** Parse a raw orderbook side into sorted OrderbookLevel[] */\nfunction parseSide(\n raw: DflowOrderbookSideRaw | undefined,\n sort: \"asc\" | \"desc\",\n): OrderbookLevel[] {\n if (!raw) return [];\n const levels: OrderbookLevel[] = Object.entries(raw).map(\n ([priceStr, quantity]) => ({\n price: parseFloat(priceStr),\n quantity,\n }),\n );\n levels.sort((a, b) =>\n sort === \"desc\" ? b.price - a.price : a.price - b.price,\n );\n return levels;\n}\n\n/** Normalise DFlow raw orderbook response into public OrderbookResponse */\nfunction normalizeOrderbook(raw: DflowRawOrderbookResponse): OrderbookResponse {\n return {\n yesBids: parseSide(raw.yes_bids, \"desc\"),\n yesAsks: parseSide(raw.yes_asks, \"asc\"),\n noBids: parseSide(raw.no_bids, \"desc\"),\n noAsks: parseSide(raw.no_asks, \"asc\"),\n sequence: raw.sequence,\n };\n}\n\n// ---------------------------------------------------------------------------\n\n/**\n * DFlow Prediction Market Client.\n * Implements IPredictClient interface using the DFlow API.\n */\nexport class DflowPredictClient\n extends BasePredictClient\n implements IPredictClient\n{\n constructor(endpoint: string) {\n super(endpoint, \"dflow\");\n }\n\n // -- Events ----------------------------------------------------------------\n\n async getEvents(params?: EventQueryParams): Promise<StandardEventsResponse> {\n return await this.fetch<StandardEventsResponse>(\n \"/v2/event\",\n toRecord(params ?? {}),\n );\n }\n\n async getEventById(\n eventId: string,\n withNestedMarkets?: boolean,\n ): Promise<StandardEvent> {\n return await this.fetch<StandardEvent>(`/v2/event/${eventId}`, {\n withNestedMarkets,\n });\n }\n\n async getEventCandlesticks(\n ticker: string,\n params: CandlesticksQueryParams,\n ): Promise<CandlesticksResponse> {\n return await this.fetch<CandlesticksResponse>(\n `/v2/event/${ticker}/candlesticks`,\n toRecord(params),\n );\n }\n\n async getEventForecastPercentileHistory(\n params: ForecastPercentileHistoryQueryParams,\n ): Promise<ForecastPercentileHistoryResponse> {\n const { seriesTicker, eventId, ...rest } = params;\n return await this.fetch<ForecastPercentileHistoryResponse>(\n `/v2/event/${seriesTicker}/${eventId}/forecast_percentile_history`,\n toRecord(rest),\n );\n }\n\n async getEventForecastPercentileHistoryByMint(\n params: ForecastPercentileHistoryByMintQueryParams,\n ): Promise<ForecastPercentileHistoryResponse> {\n const { mintAddress, ...rest } = params;\n return await this.fetch<ForecastPercentileHistoryResponse>(\n `/v2/event/by-mint/${mintAddress}/forecast_percentile_history`,\n toRecord(rest),\n );\n }\n\n // -- Markets ---------------------------------------------------------------\n\n async getMarkets(\n params?: MarketQueryParams,\n ): Promise<StandardMarketsResponse> {\n return await this.fetch<StandardMarketsResponse>(\n \"/v2/market\",\n toRecord(params ?? {}),\n );\n }\n\n async getMarketById(marketId: string): Promise<StandardMarket> {\n return await this.fetch<StandardMarket>(`/v2/market/${marketId}`);\n }\n\n async getMarketByMint(mintAddress: string): Promise<StandardMarket> {\n return await this.fetch<StandardMarket>(\n `/v2/market/by-mint/${mintAddress}`,\n );\n }\n\n async getMarketsBatch(\n request: MarketsBatchRequest,\n ): Promise<StandardMarketsResponse> {\n return await this.postRequest<StandardMarketsResponse, MarketsBatchRequest>(\n \"/v2/market/batch\",\n request,\n );\n }\n\n async getMarketCandlesticks(\n ticker: string,\n params: CandlesticksQueryParams,\n ): Promise<CandlesticksResponse> {\n return await this.fetch<CandlesticksResponse>(\n `/v2/market/${ticker}/candlesticks`,\n toRecord(params),\n );\n }\n\n async getMarketCandlesticksByMint(\n mintAddress: string,\n params: CandlesticksQueryParams,\n ): Promise<CandlesticksResponse> {\n return await this.fetch<CandlesticksResponse>(\n `/v2/market/by-mint/${mintAddress}/candlesticks`,\n toRecord(params),\n );\n }\n\n // -- Orderbook -------------------------------------------------------------\n\n async getOrderbook(marketTicker: string): Promise<OrderbookResponse> {\n const raw = await this.fetch<DflowRawOrderbookResponse>(\n `/v2/orderbook/${marketTicker}`,\n );\n return normalizeOrderbook(raw);\n }\n\n async getOrderbookByMint(mintAddress: string): Promise<OrderbookResponse> {\n const raw = await this.fetch<DflowRawOrderbookResponse>(\n `/v2/orderbook/by-mint/${mintAddress}`,\n );\n return normalizeOrderbook(raw);\n }\n\n // -- Trades ----------------------------------------------------------------\n\n async getTrades(params?: TradesQueryParams): Promise<MultiTradeResponse> {\n return await this.fetch<MultiTradeResponse>(\n \"/v2/trades\",\n toRecord(params ?? {}),\n );\n }\n\n async getTradesByMint(\n params: TradesByMintQueryParams,\n ): Promise<MultiTradeResponse> {\n const { mintAddress, ...rest } = params;\n return await this.fetch<MultiTradeResponse>(\n `/v2/trades/by-mint/${mintAddress}`,\n toRecord(rest),\n );\n }\n\n // -- On-Chain Trades -------------------------------------------------------\n\n async getOnchainTradesByWallet(\n params: OnchainTradesByWalletQueryParams,\n ): Promise<MultiOnchainTradeResponse> {\n const { walletAddress, ...rest } = params;\n return await this.fetch<MultiOnchainTradeResponse>(\n `/v2/trades/onchain/by-wallet/${walletAddress}`,\n toRecord(rest),\n );\n }\n\n async getOnchainTradesByEvent(\n params: OnchainTradesByEventQueryParams,\n ): Promise<MultiOnchainTradeResponse> {\n const { eventTicker, ...rest } = params;\n return await this.fetch<MultiOnchainTradeResponse>(\n `/v2/trades/onchain/by-event/${eventTicker}`,\n toRecord(rest),\n );\n }\n\n async getOnchainTradesByMarket(\n params: OnchainTradesByMarketQueryParams,\n ): Promise<MultiOnchainTradeResponse> {\n const { marketTicker, ...rest } = params;\n return await this.fetch<MultiOnchainTradeResponse>(\n `/v2/trades/onchain/by-market/${marketTicker}`,\n toRecord(rest),\n );\n }\n\n // -- Live Data -------------------------------------------------------------\n\n async getLiveData(params: LiveDataQueryParams): Promise<LiveDataResponse> {\n return await this.fetch<LiveDataResponse>(\"/v2/live\", {\n milestoneIds: params.milestoneIds.join(\",\"),\n });\n }\n\n async getLiveDataByEvent(\n params: LiveDataByEventQueryParams,\n ): Promise<LiveDataResponse> {\n const { eventTicker, ...rest } = params;\n return await this.fetch<LiveDataResponse>(\n `/v2/live/event/${eventTicker}`,\n toRecord(rest),\n );\n }\n\n async getLiveDataByMint(\n params: LiveDataByMintQueryParams,\n ): Promise<LiveDataResponse> {\n const { mintAddress, ...rest } = params;\n return await this.fetch<LiveDataResponse>(\n `/v2/live/by-mint/${mintAddress}`,\n toRecord(rest),\n );\n }\n\n // -- Series ----------------------------------------------------------------\n\n async getSeries(params?: SeriesQueryParams): Promise<SeriesListResponse> {\n return await this.fetch<SeriesListResponse>(\n \"/v2/series\",\n toRecord(params ?? {}),\n );\n }\n\n async getSeriesByTicker(seriesTicker: string): Promise<SeriesResponse> {\n return await this.fetch<SeriesResponse>(`/v2/series/${seriesTicker}`);\n }\n\n // -- Tags & Sports ---------------------------------------------------------\n\n async getTagsByCategories(): Promise<TagsByCategoriesResponse> {\n return await this.fetch<TagsByCategoriesResponse>(\"/v2/tags/by_categories\");\n }\n\n async getFiltersBySports(): Promise<FiltersBySportsResponse> {\n return await this.fetch<FiltersBySportsResponse>(\"/v2/sports/filters\");\n }\n\n // -- Search ----------------------------------------------------------------\n\n async search(params: SearchQueryParams): Promise<SearchResponse> {\n return await this.fetch<SearchResponse>(\"/v2/search\", toRecord(params));\n }\n\n // -- Positions -------------------------------------------------------------\n\n async getPositionsByWallet(\n params: PositionsByWalletQueryParams,\n ): Promise<WalletPositionsResponse> {\n const { walletAddress } = params;\n return await this.fetch<WalletPositionsResponse>(\n `/v2/positions/by-wallet/${walletAddress}`,\n );\n }\n\n // -- Outcome Mints ---------------------------------------------------------\n\n async getOutcomeMints(\n params?: OutcomeMintsQueryParams,\n ): Promise<OutcomeMintsResponse> {\n return await this.fetch<OutcomeMintsResponse>(\n \"/v2/outcome_mints\",\n toRecord(params ?? {}),\n );\n }\n\n async filterOutcomeMints(\n request: FilterOutcomeMintsRequest,\n ): Promise<FilterOutcomeMintsResponse> {\n return await this.postRequest<\n FilterOutcomeMintsResponse,\n FilterOutcomeMintsRequest\n >(\"/v2/filter_outcome_mints\", request);\n }\n\n // -- Quote & Swap (Imperative) ---------------------------------------------\n\n async getQuote(params: QuoteQueryParams): Promise<QuoteResponse> {\n return await this.fetch<QuoteResponse>(\"/v2/swap/quote\", toRecord(params));\n }\n\n async createSwap(request: SwapRequestBody): Promise<SwapResponse> {\n return await this.postRequest<SwapResponse, SwapRequestBody>(\n \"/v2/swap\",\n request,\n );\n }\n\n async createSwapInstructions(\n request: SwapRequestBody,\n ): Promise<SwapInstructionsResponse> {\n return await this.postRequest<SwapInstructionsResponse, SwapRequestBody>(\n \"/v2/swap/instructions\",\n request,\n );\n }\n\n // -- Order API -------------------------------------------------------------\n\n async getOrder(params: OrderQueryParams): Promise<OrderResponse> {\n return await this.fetch<OrderResponse>(\"/v2/order\", toRecord(params));\n }\n\n async getOrderStatus(\n params: OrderStatusQueryParams,\n ): Promise<OrderStatusResponse> {\n try {\n return await this.fetch<OrderStatusResponse>(\n \"/v2/order/status\",\n toRecord(params),\n );\n } catch (err: unknown) {\n // 404 means the order hasn't been indexed yet — return pending so polling continues\n const is404 = err instanceof Error && /\\b404\\b/.test(err.message);\n if (is404) {\n return { status: \"pending\", inAmount: \"0\", outAmount: \"0\" };\n }\n throw err;\n }\n }\n\n // -- Intent (Declarative Swap) ---------------------------------------------\n\n async getIntentQuote(\n params: IntentQuoteQueryParams,\n ): Promise<IntentQuoteResponse> {\n return await this.fetch<IntentQuoteResponse>(\n \"/v2/intent/quote\",\n toRecord(params),\n );\n }\n\n async submitIntentSwap(\n request: IntentSwapRequestBody,\n ): Promise<IntentSwapResponse> {\n return await this.postRequest<IntentSwapResponse, IntentSwapRequestBody>(\n \"/v2/intent/swap\",\n request,\n );\n }\n\n // -- Prediction Market Init ------------------------------------------------\n\n async initPredictionMarket(\n params: PredictionMarketInitQueryParams,\n ): Promise<PredictionMarketInitResponse> {\n return await this.fetch<PredictionMarketInitResponse>(\n \"/v2/prediction-market/init\",\n toRecord(params),\n );\n }\n\n // -- Token & Venue ---------------------------------------------------------\n\n async getTokens(): Promise<TokenListResponse> {\n return await this.fetch<TokenListResponse>(\"/v2/tokens\");\n }\n\n async getTokensWithDecimals(): Promise<TokenListWithDecimalsResponse> {\n return await this.fetch<TokenListWithDecimalsResponse>(\n \"/v2/tokens/decimals\",\n );\n }\n\n async getVenues(): Promise<VenueListResponse> {\n return await this.fetch<VenueListResponse>(\"/v2/venues\");\n }\n}\n","/**\n * DflowPredictWsClient - WebSocket client for real-time prediction market data\n *\n * Features:\n * - Auto-reconnect with exponential backoff\n * - Heartbeat (ping/pong) for connection health\n * - Subscription management for prices, trades, orderbook channels\n * - Event emitter pattern for message handling\n */\nimport type {\n WsConnectionStatus,\n WsSubscribeOptions,\n WsPriceUpdate,\n WsTradeUpdate,\n WsOrderbookUpdate,\n IPredictWsClient,\n} from \"../types\";\n\n// ---------------------------------------------------------------------------\n// Internal WebSocket Protocol Types\n// ---------------------------------------------------------------------------\n\n/** WebSocket channel types */\ntype WsChannel = \"prices\" | \"trades\" | \"orderbook\";\n\n/** Subscribe/Unsubscribe message */\ninterface WsSubscribeMessage {\n type: \"subscribe\" | \"unsubscribe\";\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n}\n\n/** Ping message */\ninterface WsPingMessage {\n type: \"ping\";\n}\n\n/** Pong response */\ninterface WsPongMessage {\n type: \"pong\";\n timestamp: number;\n}\n\n/** Status request message */\ninterface WsStatusRequestMessage {\n type: \"status\";\n}\n\n/** Status response message */\ninterface WsStatusMessage {\n type: \"status\";\n status: WsConnectionStatus;\n message?: string;\n connected?: boolean;\n clientCount?: number;\n subscriptions?: {\n prices: { all: boolean; tickers: string[] };\n trades: { all: boolean; tickers: string[] };\n orderbook: { all: boolean; tickers: string[] };\n };\n}\n\n/** Subscription confirmation message */\ninterface WsSubscriptionConfirmation {\n type: \"subscribed\" | \"unsubscribed\";\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n success: boolean;\n}\n\n/** Error message from server */\ninterface WsErrorMessage {\n type: \"error\";\n message: string;\n code?: string;\n}\n\n/** Union type for all data messages from server */\ntype WsDataMessage = WsPriceUpdate | WsTradeUpdate | WsOrderbookUpdate;\n\n/** Union type for all server messages */\ntype WsServerMessage =\n | WsDataMessage\n | WsStatusMessage\n | WsSubscriptionConfirmation\n | WsErrorMessage\n | WsPongMessage;\n\n/** Union type for all client messages */\ntype WsClientMessage =\n | WsSubscribeMessage\n | WsPingMessage\n | WsStatusRequestMessage;\n\n/** WebSocket event types for event emitter */\ntype WsEventType =\n | \"connect\"\n | \"disconnect\"\n | \"reconnecting\"\n | \"error\"\n | \"price\"\n | \"trade\"\n | \"orderbook\"\n | \"status\"\n | \"subscribed\"\n | \"unsubscribed\";\n\n/** WebSocket client configuration */\nexport interface WsClientConfig {\n /** WebSocket endpoint URL */\n wsUrl: string;\n /** Auto-connect on instantiation */\n autoConnect?: boolean;\n /** Auto-reconnect on disconnect */\n autoReconnect?: boolean;\n /** Reconnect interval base in ms (default: 1000) */\n reconnectIntervalBase?: number;\n /** Max reconnect interval in ms (default: 30000) */\n reconnectMaxInterval?: number;\n /** Ping interval in ms (default: 30000) */\n pingInterval?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_RECONNECT_INTERVAL_BASE = 1000; // 1 second\nconst DEFAULT_RECONNECT_MAX_INTERVAL = 30000; // 30 seconds\nconst DEFAULT_PING_INTERVAL = 30000; // 30 seconds\n\n// ---------------------------------------------------------------------------\n// Event Emitter Types\n// ---------------------------------------------------------------------------\n\ntype EventCallback<T = unknown> = (data: T) => void;\n\ninterface EventListeners {\n connect: EventCallback<void>[];\n disconnect: EventCallback<{ code?: number; reason?: string }>[];\n reconnecting: EventCallback<{ attempt: number; delay: number }>[];\n error: EventCallback<Error>[];\n price: EventCallback<WsPriceUpdate>[];\n trade: EventCallback<WsTradeUpdate>[];\n orderbook: EventCallback<WsOrderbookUpdate>[];\n status: EventCallback<WsConnectionStatus>[];\n subscribed: EventCallback<{\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n }>[];\n unsubscribed: EventCallback<{\n channel: WsChannel;\n all?: boolean;\n tickers?: string[];\n }>[];\n}\n\n// ---------------------------------------------------------------------------\n// Subscription State\n// ---------------------------------------------------------------------------\n\ninterface ChannelSubscription {\n all: boolean;\n tickers: Set<string>;\n}\n\ninterface SubscriptionState {\n prices: ChannelSubscription;\n trades: ChannelSubscription;\n orderbook: ChannelSubscription;\n}\n\n// ---------------------------------------------------------------------------\n// DflowPredictWsClient Class\n// ---------------------------------------------------------------------------\n\nexport class DflowPredictWsClient implements IPredictWsClient {\n private ws: WebSocket | null = null;\n private readonly wsUrl: string;\n private readonly autoReconnect: boolean;\n private readonly reconnectIntervalBase: number;\n private readonly reconnectMaxInterval: number;\n private readonly pingInterval: number;\n\n private status: WsConnectionStatus = \"disconnected\";\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private pingIntervalId: ReturnType<typeof setInterval> | null = null;\n private shouldReconnect = true;\n\n // Event listeners\n private listeners: EventListeners = {\n connect: [],\n disconnect: [],\n reconnecting: [],\n error: [],\n price: [],\n trade: [],\n orderbook: [],\n status: [],\n subscribed: [],\n unsubscribed: [],\n };\n\n // Track current subscriptions for reconnection recovery\n private subscriptions: SubscriptionState = {\n prices: { all: false, tickers: new Set() },\n trades: { all: false, tickers: new Set() },\n orderbook: { all: false, tickers: new Set() },\n };\n\n constructor(config: WsClientConfig) {\n this.wsUrl = config.wsUrl;\n this.autoReconnect = config.autoReconnect ?? true;\n this.reconnectIntervalBase =\n config.reconnectIntervalBase ?? DEFAULT_RECONNECT_INTERVAL_BASE;\n this.reconnectMaxInterval =\n config.reconnectMaxInterval ?? DEFAULT_RECONNECT_MAX_INTERVAL;\n this.pingInterval = config.pingInterval ?? DEFAULT_PING_INTERVAL;\n\n if (config.autoConnect !== false) {\n this.connect();\n }\n }\n\n // ---------------------------------------------------------------------------\n // Connection Management\n // ---------------------------------------------------------------------------\n\n /**\n * Connect to the WebSocket server\n */\n connect(): void {\n if (\n this.ws &&\n (this.ws.readyState === WebSocket.OPEN ||\n this.ws.readyState === WebSocket.CONNECTING)\n ) {\n return;\n }\n\n this.shouldReconnect = true;\n this.setStatus(\"connecting\");\n\n try {\n this.ws = new WebSocket(this.wsUrl);\n\n this.ws.onopen = () => {\n this.reconnectAttempts = 0;\n this.setStatus(\"connected\");\n this.emit(\"connect\", undefined);\n\n // Restore subscriptions after reconnection\n this.restoreSubscriptions();\n\n // Start ping interval\n this.startPingInterval();\n };\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event.data);\n };\n\n this.ws.onerror = (event) => {\n const error = new Error(\"WebSocket error\");\n console.error(\"[DflowPredictWsClient] WebSocket error:\", event);\n this.emit(\"error\", error);\n };\n\n this.ws.onclose = (event) => {\n this.stopPingInterval();\n this.setStatus(\"disconnected\");\n this.emit(\"disconnect\", { code: event.code, reason: event.reason });\n\n // Attempt reconnection\n if (this.shouldReconnect && this.autoReconnect) {\n this.scheduleReconnect();\n }\n };\n } catch (error) {\n console.error(\n \"[DflowPredictWsClient] Failed to create WebSocket:\",\n error,\n );\n this.emit(\n \"error\",\n error instanceof Error ? error : new Error(String(error)),\n );\n\n if (this.shouldReconnect && this.autoReconnect) {\n this.scheduleReconnect();\n }\n }\n }\n\n /**\n * Disconnect from the WebSocket server\n */\n disconnect(): void {\n this.shouldReconnect = false;\n this.stopPingInterval();\n\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this.setStatus(\"disconnected\");\n }\n\n /**\n * Check if connected to the server\n */\n isConnected(): boolean {\n return this.ws !== null && this.ws.readyState === WebSocket.OPEN;\n }\n\n /**\n * Get current connection status\n */\n getStatus(): WsConnectionStatus {\n return this.status;\n }\n\n // ---------------------------------------------------------------------------\n // Business Subscription Methods (IPredictWsClient interface)\n // ---------------------------------------------------------------------------\n\n /** Subscribe to price updates, returns unsubscribe function */\n subscribePrices(\n options: WsSubscribeOptions,\n onUpdate: (update: WsPriceUpdate) => void,\n ): () => void {\n this.subscribeChannel(\"prices\", options);\n const removeListener = this.on(\"price\", onUpdate);\n return () => {\n removeListener();\n this.unsubscribeChannel(\"prices\", options);\n };\n }\n\n /** Subscribe to trade updates, returns unsubscribe function */\n subscribeTrades(\n options: WsSubscribeOptions,\n onUpdate: (update: WsTradeUpdate) => void,\n ): () => void {\n this.subscribeChannel(\"trades\", options);\n const removeListener = this.on(\"trade\", onUpdate);\n return () => {\n removeListener();\n this.unsubscribeChannel(\"trades\", options);\n };\n }\n\n /** Subscribe to orderbook updates, returns unsubscribe function */\n subscribeOrderbook(\n options: WsSubscribeOptions,\n onUpdate: (update: WsOrderbookUpdate) => void,\n ): () => void {\n this.subscribeChannel(\"orderbook\", options);\n const removeListener = this.on(\"orderbook\", onUpdate);\n return () => {\n removeListener();\n this.unsubscribeChannel(\"orderbook\", options);\n };\n }\n\n /** Subscribe to status changes, returns unsubscribe function */\n onStatusChange(callback: (status: WsConnectionStatus) => void): () => void {\n return this.on(\"status\", callback);\n }\n\n // ---------------------------------------------------------------------------\n // Event Emitter\n // ---------------------------------------------------------------------------\n\n /**\n * Add event listener\n */\n on<T extends WsEventType>(\n event: T,\n callback: EventListeners[T][number],\n ): () => void {\n const listeners = this.listeners[event] as EventCallback<unknown>[];\n listeners.push(callback as EventCallback<unknown>);\n\n // Return unsubscribe function\n return () => {\n this.off(event, callback);\n };\n }\n\n /**\n * Remove event listener\n */\n off<T extends WsEventType>(\n event: T,\n callback: EventListeners[T][number],\n ): void {\n const listeners = this.listeners[event] as EventCallback<unknown>[];\n const index = listeners.indexOf(callback as EventCallback<unknown>);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n }\n\n /**\n * Remove all listeners for an event (or all events)\n */\n removeAllListeners(event?: WsEventType): void {\n if (event) {\n (this.listeners[event] as unknown[]).length = 0;\n } else {\n for (const key of Object.keys(this.listeners)) {\n (this.listeners[key as WsEventType] as unknown[]).length = 0;\n }\n }\n }\n\n // ---------------------------------------------------------------------------\n // Private Methods\n // ---------------------------------------------------------------------------\n\n private subscribeChannel(\n channel: WsChannel,\n options: WsSubscribeOptions,\n ): void {\n const subscription = this.subscriptions[channel];\n\n if (options.all) {\n subscription.all = true;\n subscription.tickers.clear();\n } else if (options.tickers && options.tickers.length > 0) {\n subscription.all = false;\n for (const ticker of options.tickers) {\n subscription.tickers.add(ticker);\n }\n }\n\n this.sendSubscription(\"subscribe\", channel, options);\n }\n\n private unsubscribeChannel(\n channel: WsChannel,\n options: WsSubscribeOptions,\n ): void {\n const subscription = this.subscriptions[channel];\n\n if (options.all) {\n subscription.all = false;\n subscription.tickers.clear();\n } else if (options.tickers && options.tickers.length > 0) {\n for (const ticker of options.tickers) {\n subscription.tickers.delete(ticker);\n }\n }\n\n this.sendSubscription(\"unsubscribe\", channel, options);\n }\n\n private setStatus(status: WsConnectionStatus): void {\n if (this.status !== status) {\n this.status = status;\n this.emit(\"status\", status);\n }\n }\n\n private emit<T extends WsEventType>(\n event: T,\n data: Parameters<EventListeners[T][number]>[0],\n ): void {\n const listeners = this.listeners[event] as EventCallback<typeof data>[];\n for (const listener of listeners) {\n try {\n listener(data);\n } catch (error) {\n console.error(\n `[DflowPredictWsClient] Error in ${event} listener:`,\n error,\n );\n }\n }\n }\n\n private send(message: WsClientMessage): boolean {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n console.warn(\n \"[DflowPredictWsClient] Cannot send message, WebSocket not connected\",\n );\n return false;\n }\n\n try {\n this.ws.send(JSON.stringify(message));\n return true;\n } catch (error) {\n console.error(\"[DflowPredictWsClient] Failed to send message:\", error);\n return false;\n }\n }\n\n private sendSubscription(\n type: \"subscribe\" | \"unsubscribe\",\n channel: WsChannel,\n options: WsSubscribeOptions,\n ): void {\n this.send({\n type,\n channel,\n all: options.all,\n tickers: options.tickers,\n });\n }\n\n private handleMessage(data: string): void {\n try {\n const message = JSON.parse(data) as WsServerMessage;\n\n switch (message.type) {\n case \"ticker\":\n this.emit(\"price\", message as WsPriceUpdate);\n break;\n case \"trade\":\n this.emit(\"trade\", message as WsTradeUpdate);\n break;\n case \"orderbook\":\n this.emit(\"orderbook\", message as WsOrderbookUpdate);\n break;\n case \"status\":\n // Status message from server (different from connection status)\n break;\n case \"subscribed\":\n this.emit(\"subscribed\", {\n channel: message.channel,\n all: message.all,\n tickers: message.tickers,\n });\n break;\n case \"unsubscribed\":\n this.emit(\"unsubscribed\", {\n channel: message.channel,\n all: message.all,\n tickers: message.tickers,\n });\n break;\n case \"pong\":\n // Pong received, connection is alive\n break;\n case \"error\":\n console.error(\n \"[DflowPredictWsClient] Server error:\",\n message.message,\n );\n this.emit(\"error\", new Error(message.message));\n break;\n default:\n // Handle data messages without explicit type\n if (\"channel\" in message) {\n const dataMsg = message as WsDataMessage;\n switch (dataMsg.channel) {\n case \"prices\":\n this.emit(\"price\", dataMsg as WsPriceUpdate);\n break;\n case \"trades\":\n this.emit(\"trade\", dataMsg as WsTradeUpdate);\n break;\n case \"orderbook\":\n this.emit(\"orderbook\", dataMsg as WsOrderbookUpdate);\n break;\n }\n }\n }\n } catch (error) {\n console.error(\"[DflowPredictWsClient] Failed to parse message:\", error);\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimeout) {\n return;\n }\n\n const delay = Math.min(\n this.reconnectIntervalBase * Math.pow(2, this.reconnectAttempts),\n this.reconnectMaxInterval,\n );\n\n this.setStatus(\"reconnecting\");\n this.emit(\"reconnecting\", { attempt: this.reconnectAttempts + 1, delay });\n\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n this.reconnectAttempts++;\n this.connect();\n }, delay);\n }\n\n private restoreSubscriptions(): void {\n for (const channel of [\"prices\", \"trades\", \"orderbook\"] as WsChannel[]) {\n const subscription = this.subscriptions[channel];\n\n if (subscription.all) {\n this.sendSubscription(\"subscribe\", channel, { all: true });\n } else if (subscription.tickers.size > 0) {\n this.sendSubscription(\"subscribe\", channel, {\n tickers: Array.from(subscription.tickers),\n });\n }\n }\n }\n\n private startPingInterval(): void {\n this.stopPingInterval();\n\n this.pingIntervalId = setInterval(() => {\n this.send({ type: \"ping\" });\n }, this.pingInterval);\n }\n\n private stopPingInterval(): void {\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n this.pingIntervalId = null;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory function\n// ---------------------------------------------------------------------------\n\n/**\n * Create a new DflowPredictWsClient instance\n */\nexport function createDflowPredictWsClient(\n config: WsClientConfig,\n): DflowPredictWsClient {\n return new DflowPredictWsClient(config);\n}\n","import { httpGet } from \"@liberfi.io/utils\";\nimport type {\n V2Event,\n V2ListEventsParams,\n V2Market,\n V2Page,\n V2ProviderSource,\n} from \"./types\";\n\n/**\n * Build a URL query string from a params object.\n * `undefined` and `null` values are omitted.\n * Boolean values are serialised as \"true\" / \"false\" strings.\n */\nfunction buildV2Query(params: Record<string, unknown>): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n qs.set(key, String(value));\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\n/**\n * HTTP client for the prediction-server REST API (v2 / prediction-server backend).\n *\n * Covers `GET /api/v1/events` (listEvents), `GET /api/v1/events/:slug` (getEvent),\n * and `GET /api/v1/markets/:slug` (getMarket).\n *\n * This client is intentionally decoupled from the legacy `DflowPredictClient` so\n * that both can be used in parallel during the incremental migration from the old\n * DFlow-direct integration to the unified prediction-server backend.\n *\n * @example\n * ```ts\n * const client = new PredictClientV2(\"https://api.example.com\");\n * const page = await client.listEvents({ status: \"open\", limit: 20 });\n * const event = await client.getEvent(\"will-trump-win-2024\");\n * const market = await client.getMarket(\"will-trump-win-2024-yes\");\n * ```\n */\nexport class PredictClientV2 {\n constructor(private readonly endpoint: string) {}\n\n /**\n * List prediction events with optional filtering, sorting, and pagination.\n *\n * Maps to `GET /api/v1/events`.\n *\n * @param params - Optional query parameters (filter, sort, pagination).\n * @returns A paginated page of events.\n */\n async listEvents(params?: V2ListEventsParams): Promise<V2Page<V2Event>> {\n const query = buildV2Query((params ?? {}) as Record<string, unknown>);\n const url = `${this.endpoint}/api/v1/events${query}`;\n return await httpGet<V2Page<V2Event>>(url);\n }\n\n /**\n * Fetch a single prediction event by its slug.\n *\n * Maps to `GET /api/v1/events/:slug?source=...`.\n *\n * @param slug - Canonical event slug (e.g. \"will-trump-win-2024\" for Polymarket\n * or \"KXBTCD-25FEB-T68000\" for DFlow).\n * @param source - Upstream provider (`\"dflow\"` or `\"polymarket\"`).\n * @returns The matching event.\n * @throws When the server responds with 404 or any other non-2xx status.\n */\n async getEvent(slug: string, source?: V2ProviderSource): Promise<V2Event> {\n const query = source ? buildV2Query({ source }) : \"\";\n const url = `${this.endpoint}/api/v1/events/${encodeURIComponent(slug)}${query}`;\n return await httpGet<V2Event>(url);\n }\n\n /**\n * Fetch a single prediction market by its slug.\n *\n * Maps to `GET /api/v1/markets/:slug?source=...`.\n *\n * @param slug - Canonical market slug.\n * @param source - Upstream provider (`\"dflow\"` or `\"polymarket\"`).\n * @returns The matching market.\n * @throws When the server responds with 404 or any other non-2xx status.\n */\n async getMarket(slug: string, source?: V2ProviderSource): Promise<V2Market> {\n const query = source ? buildV2Query({ source }) : \"\";\n const url = `${this.endpoint}/api/v1/markets/${encodeURIComponent(slug)}${query}`;\n return await httpGet<V2Market>(url);\n }\n}\n\n/**\n * Factory function for `PredictClientV2`.\n *\n * @param endpoint - Base URL of the prediction-server, without a trailing slash.\n */\nexport function createPredictClientV2(endpoint: string): PredictClientV2 {\n return new PredictClientV2(endpoint);\n}\n"]}
@@ -1356,7 +1356,8 @@ interface V2ListEventsParams {
1356
1356
  /**
1357
1357
  * HTTP client for the prediction-server REST API (v2 / prediction-server backend).
1358
1358
  *
1359
- * Covers `GET /api/v1/events` (listEvents) and `GET /api/v1/events/:slug` (getEvent).
1359
+ * Covers `GET /api/v1/events` (listEvents), `GET /api/v1/events/:slug` (getEvent),
1360
+ * and `GET /api/v1/markets/:slug` (getMarket).
1360
1361
  *
1361
1362
  * This client is intentionally decoupled from the legacy `DflowPredictClient` so
1362
1363
  * that both can be used in parallel during the incremental migration from the old
@@ -1367,6 +1368,7 @@ interface V2ListEventsParams {
1367
1368
  * const client = new PredictClientV2("https://api.example.com");
1368
1369
  * const page = await client.listEvents({ status: "open", limit: 20 });
1369
1370
  * const event = await client.getEvent("will-trump-win-2024");
1371
+ * const market = await client.getMarket("will-trump-win-2024-yes");
1370
1372
  * ```
1371
1373
  */
1372
1374
  declare class PredictClientV2 {
@@ -1384,14 +1386,26 @@ declare class PredictClientV2 {
1384
1386
  /**
1385
1387
  * Fetch a single prediction event by its slug.
1386
1388
  *
1387
- * Maps to `GET /api/v1/events/:slug`.
1389
+ * Maps to `GET /api/v1/events/:slug?source=...`.
1388
1390
  *
1389
1391
  * @param slug - Canonical event slug (e.g. "will-trump-win-2024" for Polymarket
1390
1392
  * or "KXBTCD-25FEB-T68000" for DFlow).
1393
+ * @param source - Upstream provider (`"dflow"` or `"polymarket"`).
1391
1394
  * @returns The matching event.
1392
1395
  * @throws When the server responds with 404 or any other non-2xx status.
1393
1396
  */
1394
- getEvent(slug: string): Promise<V2Event>;
1397
+ getEvent(slug: string, source?: V2ProviderSource): Promise<V2Event>;
1398
+ /**
1399
+ * Fetch a single prediction market by its slug.
1400
+ *
1401
+ * Maps to `GET /api/v1/markets/:slug?source=...`.
1402
+ *
1403
+ * @param slug - Canonical market slug.
1404
+ * @param source - Upstream provider (`"dflow"` or `"polymarket"`).
1405
+ * @returns The matching market.
1406
+ * @throws When the server responds with 404 or any other non-2xx status.
1407
+ */
1408
+ getMarket(slug: string, source?: V2ProviderSource): Promise<V2Market>;
1395
1409
  }
1396
1410
  /**
1397
1411
  * Factory function for `PredictClientV2`.
@@ -1356,7 +1356,8 @@ interface V2ListEventsParams {
1356
1356
  /**
1357
1357
  * HTTP client for the prediction-server REST API (v2 / prediction-server backend).
1358
1358
  *
1359
- * Covers `GET /api/v1/events` (listEvents) and `GET /api/v1/events/:slug` (getEvent).
1359
+ * Covers `GET /api/v1/events` (listEvents), `GET /api/v1/events/:slug` (getEvent),
1360
+ * and `GET /api/v1/markets/:slug` (getMarket).
1360
1361
  *
1361
1362
  * This client is intentionally decoupled from the legacy `DflowPredictClient` so
1362
1363
  * that both can be used in parallel during the incremental migration from the old
@@ -1367,6 +1368,7 @@ interface V2ListEventsParams {
1367
1368
  * const client = new PredictClientV2("https://api.example.com");
1368
1369
  * const page = await client.listEvents({ status: "open", limit: 20 });
1369
1370
  * const event = await client.getEvent("will-trump-win-2024");
1371
+ * const market = await client.getMarket("will-trump-win-2024-yes");
1370
1372
  * ```
1371
1373
  */
1372
1374
  declare class PredictClientV2 {
@@ -1384,14 +1386,26 @@ declare class PredictClientV2 {
1384
1386
  /**
1385
1387
  * Fetch a single prediction event by its slug.
1386
1388
  *
1387
- * Maps to `GET /api/v1/events/:slug`.
1389
+ * Maps to `GET /api/v1/events/:slug?source=...`.
1388
1390
  *
1389
1391
  * @param slug - Canonical event slug (e.g. "will-trump-win-2024" for Polymarket
1390
1392
  * or "KXBTCD-25FEB-T68000" for DFlow).
1393
+ * @param source - Upstream provider (`"dflow"` or `"polymarket"`).
1391
1394
  * @returns The matching event.
1392
1395
  * @throws When the server responds with 404 or any other non-2xx status.
1393
1396
  */
1394
- getEvent(slug: string): Promise<V2Event>;
1397
+ getEvent(slug: string, source?: V2ProviderSource): Promise<V2Event>;
1398
+ /**
1399
+ * Fetch a single prediction market by its slug.
1400
+ *
1401
+ * Maps to `GET /api/v1/markets/:slug?source=...`.
1402
+ *
1403
+ * @param slug - Canonical market slug.
1404
+ * @param source - Upstream provider (`"dflow"` or `"polymarket"`).
1405
+ * @returns The matching market.
1406
+ * @throws When the server responds with 404 or any other non-2xx status.
1407
+ */
1408
+ getMarket(slug: string, source?: V2ProviderSource): Promise<V2Market>;
1395
1409
  }
1396
1410
  /**
1397
1411
  * Factory function for `PredictClientV2`.
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { S as StandardEvent, a as StandardMarket, E as EventQueryParams, V as V2EventSortField, b as V2ProviderSource, c as V2Event, d as V2Market, e as V2EventStatus, O as OrderResponse, f as OrderStatusResponse, g as SeriesResponse, C as CandlesticksResponse, h as OrderbookLevel, i as SingleTradeResponse, j as V2Page, I as IPredictClient, k as IPredictWsClient, W as WalletPositionItem, P as PredictClientV2, l as V2ListEventsParams, m as StandardEventsResponse, M as MarketQueryParams, n as StandardMarketsResponse, o as MarketsBatchRequest, p as OrderbookResponse, T as TradesQueryParams, q as MultiTradeResponse, r as TradesByMintQueryParams, s as OnchainTradesByWalletQueryParams, t as MultiOnchainTradeResponse, u as OnchainTradesByEventQueryParams, v as OnchainTradesByMarketQueryParams, w as CandlesticksQueryParams, F as ForecastPercentileHistoryQueryParams, x as ForecastPercentileHistoryResponse, y as ForecastPercentileHistoryByMintQueryParams, L as LiveDataQueryParams, z as LiveDataResponse, A as LiveDataByEventQueryParams, B as LiveDataByMintQueryParams, D as SeriesQueryParams, G as SeriesListResponse, H as TagsByCategoriesResponse, J as FiltersBySportsResponse, K as SearchQueryParams, N as SearchResponse, Q as PositionsByWalletQueryParams, R as WalletPositionsResponse, U as OutcomeMintsQueryParams, X as OutcomeMintsResponse, Y as FilterOutcomeMintsRequest, Z as FilterOutcomeMintsResponse, _ as QuoteQueryParams, $ as QuoteResponse, a0 as SwapRequestBody, a1 as SwapResponse, a2 as SwapInstructionsResponse, a3 as OrderQueryParams, a4 as OrderStatusQueryParams, a5 as IntentQuoteQueryParams, a6 as IntentQuoteResponse, a7 as IntentSwapRequestBody, a8 as IntentSwapResponse, a9 as PredictionMarketInitQueryParams, aa as PredictionMarketInitResponse, ab as TokenListResponse, ac as TokenListWithDecimalsResponse, ad as VenueListResponse, ae as WsConnectionStatus, af as WsPriceUpdate, ag as WsTradeUpdate, ah as WsOrderbookUpdate } from './index-DcarFHcQ.mjs';
3
- export { aE as AccountMetaResponse, aR as BasePredictClient, aG as BlockhashWithMetadata, ax as CandlestickDataPoint, aw as CandlestickOHLC, aC as ComputeBudgetInfo, aO as CreateFeeAccountParams, aN as DestinationTokenAccountParam, aU as DflowPredictClient, aV as DflowPredictWsClient, aq as ExecutionMode, ay as ForecastPercentileDataPoint, aF as InstructionResponse, aJ as IntentExpiry, as as MarketAccountInfo, aj as MarketStatus, at as OnchainTrade, au as OnchainTradeSortBy, av as OnchainTradesBaseQueryParams, aH as OrderFill, aI as OrderRevert, am as OrderStatus, aL as OrderbookQueryParams, aB as PlatformFee, an as PlatformFeeMode, aP as PositiveSlippageParams, aU as PredictClient, aV as PredictWsClient, aM as PrioritizationFeeLamports, aD as PrioritizationType, ap as PriorityLevel, ai as ProviderType, aA as RoutePlanLeg, az as SeriesSettlementSource, ar as SettlementSource, ao as SlippageTolerance, ak as SortField, al as SortOrder, aK as TokenWithDecimals, aZ as V2MarketResult, a_ as V2MarketStatus, a$ as V2Outcome, b0 as V2ProviderMeta, b1 as V2SettlementSource, b2 as V2Tag, aX as WsClientConfig, aQ as WsSubscribeOptions, aS as buildQuery, aW as createDflowPredictWsClient, aY as createPredictClientV2, aW as createPredictWsClient, aT as toRecord } from './index-DcarFHcQ.mjs';
2
+ import { S as StandardEvent, a as StandardMarket, E as EventQueryParams, V as V2EventSortField, b as V2ProviderSource, c as V2Event, d as V2Market, e as V2EventStatus, O as OrderResponse, f as OrderStatusResponse, g as SeriesResponse, C as CandlesticksResponse, h as OrderbookLevel, i as SingleTradeResponse, j as V2Page, I as IPredictClient, k as IPredictWsClient, W as WalletPositionItem, P as PredictClientV2, l as V2ListEventsParams, m as StandardEventsResponse, M as MarketQueryParams, n as StandardMarketsResponse, o as MarketsBatchRequest, p as OrderbookResponse, T as TradesQueryParams, q as MultiTradeResponse, r as TradesByMintQueryParams, s as OnchainTradesByWalletQueryParams, t as MultiOnchainTradeResponse, u as OnchainTradesByEventQueryParams, v as OnchainTradesByMarketQueryParams, w as CandlesticksQueryParams, F as ForecastPercentileHistoryQueryParams, x as ForecastPercentileHistoryResponse, y as ForecastPercentileHistoryByMintQueryParams, L as LiveDataQueryParams, z as LiveDataResponse, A as LiveDataByEventQueryParams, B as LiveDataByMintQueryParams, D as SeriesQueryParams, G as SeriesListResponse, H as TagsByCategoriesResponse, J as FiltersBySportsResponse, K as SearchQueryParams, N as SearchResponse, Q as PositionsByWalletQueryParams, R as WalletPositionsResponse, U as OutcomeMintsQueryParams, X as OutcomeMintsResponse, Y as FilterOutcomeMintsRequest, Z as FilterOutcomeMintsResponse, _ as QuoteQueryParams, $ as QuoteResponse, a0 as SwapRequestBody, a1 as SwapResponse, a2 as SwapInstructionsResponse, a3 as OrderQueryParams, a4 as OrderStatusQueryParams, a5 as IntentQuoteQueryParams, a6 as IntentQuoteResponse, a7 as IntentSwapRequestBody, a8 as IntentSwapResponse, a9 as PredictionMarketInitQueryParams, aa as PredictionMarketInitResponse, ab as TokenListResponse, ac as TokenListWithDecimalsResponse, ad as VenueListResponse, ae as WsConnectionStatus, af as WsPriceUpdate, ag as WsTradeUpdate, ah as WsOrderbookUpdate } from './index-DEqlfEAn.mjs';
3
+ export { aE as AccountMetaResponse, aR as BasePredictClient, aG as BlockhashWithMetadata, ax as CandlestickDataPoint, aw as CandlestickOHLC, aC as ComputeBudgetInfo, aO as CreateFeeAccountParams, aN as DestinationTokenAccountParam, aU as DflowPredictClient, aV as DflowPredictWsClient, aq as ExecutionMode, ay as ForecastPercentileDataPoint, aF as InstructionResponse, aJ as IntentExpiry, as as MarketAccountInfo, aj as MarketStatus, at as OnchainTrade, au as OnchainTradeSortBy, av as OnchainTradesBaseQueryParams, aH as OrderFill, aI as OrderRevert, am as OrderStatus, aL as OrderbookQueryParams, aB as PlatformFee, an as PlatformFeeMode, aP as PositiveSlippageParams, aU as PredictClient, aV as PredictWsClient, aM as PrioritizationFeeLamports, aD as PrioritizationType, ap as PriorityLevel, ai as ProviderType, aA as RoutePlanLeg, az as SeriesSettlementSource, ar as SettlementSource, ao as SlippageTolerance, ak as SortField, al as SortOrder, aK as TokenWithDecimals, aZ as V2MarketResult, a_ as V2MarketStatus, a$ as V2Outcome, b0 as V2ProviderMeta, b1 as V2SettlementSource, b2 as V2Tag, aX as WsClientConfig, aQ as WsSubscribeOptions, aS as buildQuery, aW as createDflowPredictWsClient, aY as createPredictClientV2, aW as createPredictWsClient, aT as toRecord } from './index-DEqlfEAn.mjs';
4
4
  import { LinkComponentType } from '@liberfi.io/ui';
5
5
  import * as _tanstack_react_query from '@tanstack/react-query';
6
6
  import { UseQueryOptions, UseInfiniteQueryOptions, InfiniteData, UseMutationOptions } from '@tanstack/react-query';
@@ -14,7 +14,7 @@ declare global {
14
14
  };
15
15
  }
16
16
  }
17
- declare const _default: "0.1.59";
17
+ declare const _default: "0.1.61";
18
18
 
19
19
  interface EventsPageProps {
20
20
  /** Callback when an event is selected */
@@ -337,7 +337,7 @@ declare function EventsV2UI({ events, hasMore, onFetchMore, onSelect, onSelectOu
337
337
 
338
338
  type EventItemV2UIProps = {
339
339
  event: V2Event;
340
- /** URL for the detail page. When set, card renders as a link via Linkable. */
340
+ /** URL for the detail page. When set, header / Show More render as links. */
341
341
  href?: string;
342
342
  /** Custom link component (e.g. next/link). Passed to Linkable. */
343
343
  LinkComponent?: LinkComponentType;
@@ -567,6 +567,73 @@ interface EventMarketDetailWidgetProps {
567
567
  }
568
568
  declare function EventMarketDetailWidget({ market, onTradeAction, }: EventMarketDetailWidgetProps): react_jsx_runtime.JSX.Element;
569
569
 
570
+ interface EventDetailWidgetV2Props {
571
+ /** Event slug (canonical business key). */
572
+ eventSlug: string;
573
+ /** Upstream provider (`"dflow"` or `"polymarket"`). Required by prediction-server. */
574
+ source?: V2ProviderSource;
575
+ /** Initial market slugs to query candlesticks for. Default: top 4 by yesAsk. */
576
+ initialMarketSlugs?: string[];
577
+ /** Initial chart range. Default: "all". */
578
+ initialChartRange?: ChartRangeType;
579
+ /** Callback when a trade action is triggered (market button / orderbook click). */
580
+ onTradeAction?: (market: V2Market, outcome: TradeOutcome, side: TradeSide) => void;
581
+ }
582
+ declare function EventDetailWidgetV2({ eventSlug, source, initialMarketSlugs, initialChartRange, onTradeAction, }: EventDetailWidgetV2Props): react_jsx_runtime.JSX.Element;
583
+
584
+ interface EventDetailPageV2Props extends Omit<EventDetailWidgetV2Props, "eventSlug" | "source" | "onTradeAction"> {
585
+ /** Event slug (canonical business key). */
586
+ eventSlug: string;
587
+ /** Upstream provider (`"dflow"` or `"polymarket"`). Required by prediction-server. */
588
+ source?: V2ProviderSource;
589
+ /** Chain network for trading (default: 'solana'). */
590
+ chain?: string;
591
+ }
592
+ declare function EventDetailPageV2({ eventSlug, source, chain, ...widgetProps }: EventDetailPageV2Props): react_jsx_runtime.JSX.Element;
593
+
594
+ interface EventDetailV2UIProps {
595
+ event: V2Event;
596
+ /** Map of market slug to candlestick data */
597
+ candlesticks?: Map<string, CandlesticksResponse>;
598
+ /** Currently selected chart range */
599
+ chartRange?: ChartRangeType;
600
+ /** Derived candlestick period interval */
601
+ periodInterval?: CandlestickPeriodType;
602
+ /** Whether candlesticks are loading */
603
+ isCandlesticksLoading?: boolean;
604
+ /** Map of market slug to candlestick error */
605
+ candlestickErrors?: Map<string, Error>;
606
+ /** Callback when chart range changes */
607
+ onRangeChange?: (range: ChartRangeType) => void;
608
+ /** Selected market slugs for candlestick chart */
609
+ selectedMarketSlugs?: string[];
610
+ /** Callback when selected markets change */
611
+ onMarketSelectionChange?: (marketSlugs: string[]) => void;
612
+ /** Callback when a trade action is triggered */
613
+ onTradeAction?: (market: V2Market, outcome: TradeOutcome, side: TradeSide) => void;
614
+ }
615
+ declare function EventDetailV2UI({ event, candlesticks, chartRange, isCandlesticksLoading, onRangeChange, selectedMarketSlugs, onMarketSelectionChange, onTradeAction, }: EventDetailV2UIProps): react_jsx_runtime.JSX.Element;
616
+
617
+ interface UseEventDetailV2Params {
618
+ /** Event slug (canonical business key). */
619
+ eventSlug: string;
620
+ /** Upstream provider (`"dflow"` or `"polymarket"`). Required by prediction-server. */
621
+ source?: V2ProviderSource;
622
+ /** Market slugs to query candlesticks for. Default: top 4 by yesAsk. */
623
+ candlestickMarketSlugs?: string[];
624
+ /** Chart time range (1d / 1w / 1m / all). */
625
+ chartRange?: ChartRangeType;
626
+ }
627
+ declare const useEventDetailV2: (params: UseEventDetailV2Params) => {
628
+ event: V2Event | undefined;
629
+ isEventLoading: boolean;
630
+ eventError: Error | null;
631
+ periodInterval: CandlestickPeriodType;
632
+ candlesticks: Map<string, CandlesticksResponse>;
633
+ isCandlesticksLoading: boolean;
634
+ candlestickErrors: Map<string, Error>;
635
+ };
636
+
570
637
  interface TradeFormUIProps {
571
638
  /** Event data */
572
639
  event?: StandardEvent;
@@ -1217,27 +1284,30 @@ declare function fetchEventsV2(client: PredictClientV2, params?: V2ListEventsPar
1217
1284
  declare function useEventsV2Query(params?: V2ListEventsParams, queryOptions?: Omit<UseQueryOptions<V2Page<V2Event>, Error, V2Page<V2Event>, unknown[]>, "queryKey" | "queryFn">): _tanstack_react_query.UseQueryResult<V2Page<V2Event>, Error>;
1218
1285
 
1219
1286
  /** Stable TanStack Query key for a single v2 event. */
1220
- declare function eventV2QueryKey(slug: string): unknown[];
1287
+ declare function eventV2QueryKey(slug: string, source?: V2ProviderSource): unknown[];
1221
1288
  /**
1222
1289
  * Fetch function that can be used outside of React (e.g. in loaders or tests).
1223
1290
  *
1224
1291
  * @param client - A `PredictClientV2` instance.
1225
1292
  * @param slug - Canonical event slug.
1293
+ * @param source - Upstream provider (`"dflow"` or `"polymarket"`).
1226
1294
  */
1227
- declare function fetchEventV2(client: PredictClientV2, slug: string): Promise<V2Event>;
1295
+ declare function fetchEventV2(client: PredictClientV2, slug: string, source?: V2ProviderSource): Promise<V2Event>;
1228
1296
  interface UseEventV2QueryParams {
1229
1297
  /** Canonical event slug (e.g. "will-trump-win-2024" or "KXBTCD-25FEB-T68000"). */
1230
1298
  slug: string;
1299
+ /** Upstream provider. Required by prediction-server for single-event fetch. */
1300
+ source?: V2ProviderSource;
1231
1301
  }
1232
1302
  /**
1233
1303
  * React Query hook for `GET /api/v1/events/:slug` via the prediction-server v2 client.
1234
1304
  *
1235
- * @param params - Object containing the event `slug`.
1305
+ * @param params - Object containing the event `slug` and optional `source`.
1236
1306
  * @param queryOptions - Additional TanStack Query options (e.g. `enabled`, `staleTime`).
1237
1307
  *
1238
1308
  * @example
1239
1309
  * ```tsx
1240
- * const { data, isLoading } = useEventV2Query({ slug: "will-trump-win-2024" });
1310
+ * const { data, isLoading } = useEventV2Query({ slug: "CONTROLH-2026", source: "dflow" });
1241
1311
  * ```
1242
1312
  */
1243
1313
  declare function useEventV2Query(params: UseEventV2QueryParams, queryOptions?: Omit<UseQueryOptions<V2Event, Error, V2Event, unknown[]>, "queryKey" | "queryFn">): _tanstack_react_query.UseQueryResult<V2Event, Error>;
@@ -1271,6 +1341,35 @@ declare function useSearchEventsInfiniteQuery(params: UseSearchEventsInfiniteQue
1271
1341
  enabled?: boolean;
1272
1342
  }): _tanstack_react_query.UseInfiniteQueryResult<_tanstack_react_query.InfiniteData<V2Page<V2Event>, unknown>, Error>;
1273
1343
 
1344
+ /** Stable TanStack Query key for a single v2 market. */
1345
+ declare function marketV2QueryKey(slug: string, source?: V2ProviderSource): unknown[];
1346
+ /**
1347
+ * Fetch function that can be used outside of React (e.g. in loaders or tests).
1348
+ *
1349
+ * @param client - A `PredictClientV2` instance.
1350
+ * @param slug - Canonical market slug.
1351
+ * @param source - Upstream provider (`"dflow"` or `"polymarket"`).
1352
+ */
1353
+ declare function fetchMarketV2(client: PredictClientV2, slug: string, source?: V2ProviderSource): Promise<V2Market>;
1354
+ interface UseMarketV2QueryParams {
1355
+ /** Canonical market slug. */
1356
+ slug: string;
1357
+ /** Upstream provider. Required by prediction-server for single-market fetch. */
1358
+ source?: V2ProviderSource;
1359
+ }
1360
+ /**
1361
+ * React Query hook for `GET /api/v1/markets/:slug` via the prediction-server v2 client.
1362
+ *
1363
+ * @param params - Object containing the market `slug` and optional `source`.
1364
+ * @param queryOptions - Additional TanStack Query options (e.g. `enabled`, `staleTime`).
1365
+ *
1366
+ * @example
1367
+ * ```tsx
1368
+ * const { data, isLoading } = useMarketV2Query({ slug: "KXBTCD-25FEB-T68000-yes", source: "dflow" });
1369
+ * ```
1370
+ */
1371
+ declare function useMarketV2Query(params: UseMarketV2QueryParams, queryOptions?: Omit<UseQueryOptions<V2Market, Error, V2Market, unknown[]>, "queryKey" | "queryFn">): _tanstack_react_query.UseQueryResult<V2Market, Error>;
1372
+
1274
1373
  declare function usePredictContext(): PredictContextValue;
1275
1374
 
1276
1375
  declare function usePredictClient(): IPredictClient;
@@ -1610,4 +1709,4 @@ interface UseOrderbookSubscriptionResult {
1610
1709
  */
1611
1710
  declare function useOrderbookSubscription({ client, all, tickers, enabled, onUpdate, }: UseOrderbookSubscriptionParams): UseOrderbookSubscriptionResult;
1612
1711
 
1613
- export { CATEGORIES_V2, CHART_RANGE_DURATION, CHART_RANGE_PERIOD, CHART_RANGE_SAMPLE_INTERVAL, CandlestickPeriod, type CandlestickPeriodType, CandlesticksQueryParams, CandlesticksResponse, CategoriesSkeleton, CategoriesUI, type CategoriesUIProps, CategoriesWidget, type CategoriesWidgetProps, CategoriesWidgetV2, type CategoriesWidgetV2Props, type CategoryItemV2, type CategorySelection, ChartRange, type ChartRangeType, DEFAULT_CHART_RANGE, DEFAULT_FILTER_STATE, DEFAULT_PAGE_SIZE, DEFAULT_PRICE_HISTORY_INTERVAL, type EventCategory, EventDetailPage, type EventDetailPageProps, EventDetailSkeleton, type EventDetailSkeletonProps, EventDetailUI, type EventDetailUIProps, EventDetailWidget, type EventDetailWidgetProps, EventItemSkeleton, type EventItemSkeletonProps, EventItemUI, type EventItemUIProps, EventItemV2UI, type EventItemV2UIProps, EventMarketDetailWidget, type EventMarketDetailWidgetProps, EventQueryParams, type EventsFilterState, EventsFilterV2UI, type EventsFilterV2UIProps, EventsPage, type EventsPageProps, EventsPageV2, type EventsPageV2Props, EventsSkeleton, type EventsSkeletonProps, EventsToolbarV2UI, type EventsToolbarV2UIProps, EventsUI, type EventsUIProps, EventsV2UI, type EventsV2UIProps, EventsWidget, type EventsWidgetProps, EventsWidgetV2, type EventsWidgetV2Props, FilterOutcomeMintsRequest, FilterOutcomeMintsResponse, FiltersBySportsResponse, ForecastPercentileHistoryByMintQueryParams, ForecastPercentileHistoryQueryParams, ForecastPercentileHistoryResponse, IPredictClient, IPredictWsClient, IntentQuoteQueryParams, IntentQuoteResponse, IntentSwapRequestBody, IntentSwapResponse, LiveDataByEventQueryParams, LiveDataByMintQueryParams, LiveDataQueryParams, LiveDataResponse, MAX_PRICE_HISTORY_MARKETS, type MarketPositionsResult, MarketQueryParams, MarketsBatchRequest, MultiOnchainTradeResponse, MultiTradeResponse, ORDER_MAX_PRICE, ORDER_MIN_PRICE, ORDER_MIN_QUANTITY, ORDER_PRICE_STEP, OnchainTradesByEventQueryParams, OnchainTradesByMarketQueryParams, OnchainTradesByWalletQueryParams, OpenOrdersUI, type OpenOrdersUIProps, OpenOrdersWidget, type OpenOrdersWidgetProps, type Order, type OrderBookRow, OrderBookUI, type OrderBookUIProps, OrderBookWidget, type OrderBookWidgetProps, OrderQueryParams, OrderResponse, OrderStatusQueryParams, OrderStatusResponse, type OrderbookData, OrderbookLevel, OrderbookResponse, OutcomeMintsQueryParams, OutcomeMintsResponse, PREDICT_SEARCH_MODAL_ID, PRICE_HISTORY_SAMPLE_INTERVAL, type Position, PositionsByWalletQueryParams, type PositionsSummary, PositionsUI, type PositionsUIProps, PositionsWidget, type PositionsWidgetProps, PredictClientV2, PredictContext, type PredictContextValue, PredictProvider, type PredictProviderProps, PredictSearchModal, type PredictSearchModalParams, type PredictSearchModalResult, PredictV2Context, type PredictV2ContextValue, PredictV2Provider, type PredictV2ProviderProps, PredictionMarketInitQueryParams, PredictionMarketInitResponse, type PriceData, PriceHistoryInterval, type PriceHistoryIntervalType, QuoteQueryParams, QuoteResponse, SORT_PRESETS, SearchEventsButton, type SearchEventsButtonProps, SearchHistoryUI, type SearchHistoryUIProps, SearchHistoryWidget, type SearchHistoryWidgetProps, SearchInputUI, type SearchInputUIProps, SearchQueryParams, SearchResponse, SearchResultItemUI, type SearchResultItemUIProps, SearchResultListWidget, type SearchResultListWidgetProps, SearchWidget, type SearchWidgetProps, SeriesListResponse, SeriesQueryParams, SeriesResponse, SingleTradeResponse, type SortPreset, StandardEvent, StandardEventsResponse, StandardMarket, StandardMarketsResponse, SwapInstructionsResponse, SwapRequestBody, SwapResponse, type TagItemV2, type TagSlugSelection, TagsByCategoriesResponse, TokenListResponse, TokenListWithDecimalsResponse, type TradeData, TradeFormSkeleton, TradeFormUI, type TradeFormUIProps, type TradeFormValidation, TradeFormWidget, type TradeFormWidgetProps, TradeHistoryUI, type TradeHistoryUIProps, TradeHistoryWidget, type TradeHistoryWidgetProps, type TradeOutcome, type TradeSide, TradesByMintQueryParams, TradesQueryParams, type UseEventByIdQueryParams, type UseEventCandlesticksParams, type UseEventDetailParams, type UseEventV2QueryParams, type UseEventsCategoriesResult, type UseEventsParams, type UseEventsResult, type UseEventsV2Params, type UseEventsV2Result, type UseMarketByIdQueryParams, type UseMarketCandlesticksByMintParams, type UseMarketCandlesticksParams, type UseOpenOrdersParams, type UseOpenOrdersResult, type UseOrderBookParams, type UseOrderBookResult, type UseOrderbookSubscriptionParams, type UseOrderbookSubscriptionResult, type UsePositionsParams, type UsePositionsResult, type UsePricesSubscriptionParams, type UsePricesSubscriptionResult, type UseSearchEventsInfiniteQueryParams, type UseSearchResultListScriptParams, type UseSearchScriptParams, type UseTradeFormParams, type UseTradeFormResult, type UseTradeHistoryParams, type UseTradeHistoryResult, type UseTradesSubscriptionParams, type UseTradesSubscriptionResult, type UseWsClientResult, type UseWsConnectionParams, type UseWsConnectionResult, UserPredictContext, type UserPredictContextValue, UserPredictProvider, type UserPredictProviderProps, V2Event, V2EventSortField, V2EventStatus, V2ListEventsParams, V2Market, V2Page, V2ProviderSource, VenueListResponse, WalletPositionItem, WalletPositionsResponse, WsConnectionStatus, WsOrderbookUpdate, WsPriceUpdate, WsTradeUpdate, countActiveFilters, createSwap, createSwapInstructions, eventByIdQueryKey, eventCandlesticksQueryKey, eventV2QueryKey, eventsInfiniteQueryKey, eventsQueryKey, eventsV2QueryKey, fetchEventById, fetchEventCandlesticks, fetchEventV2, fetchEvents, fetchEventsV2, fetchFiltersBySports, fetchForecastPercentileHistory, fetchForecastPercentileHistoryByMint, fetchIntentQuote, fetchLiveData, fetchLiveDataByEvent, fetchLiveDataByMint, fetchMarketById, fetchMarketByMint, fetchMarketCandlesticks, fetchMarketCandlesticksByMint, fetchMarkets, fetchMarketsBatch, fetchOnchainTradesByEvent, fetchOnchainTradesByMarket, fetchOnchainTradesByWallet, fetchOrder, fetchOrderBook, fetchOrderBookByMint, fetchOrderStatus, fetchOutcomeMints, fetchPositionsByWallet, fetchQuote, fetchSearch, fetchSeries, fetchSeriesByTicker, fetchTagsByCategories, fetchTokens, fetchTokensWithDecimals, fetchTrades, fetchTradesByMint, fetchVenues, filterOutcomeMints, filtersBySportsQueryKey, forecastPercentileHistoryByMintQueryKey, forecastPercentileHistoryQueryKey, initPredictionMarket, intentQuoteQueryKey, liveDataByEventQueryKey, liveDataByMintQueryKey, liveDataQueryKey, marketByIdQueryKey, marketByMintQueryKey, marketCandlesticksByMintQueryKey, marketCandlesticksQueryKey, marketsBatchQueryKey, marketsQueryKey, onchainTradesByEventInfiniteQueryKey, onchainTradesByEventQueryKey, onchainTradesByMarketInfiniteQueryKey, onchainTradesByMarketQueryKey, onchainTradesByWalletInfiniteQueryKey, onchainTradesByWalletQueryKey, orderBookByMintQueryKey, orderBookQueryKey, orderQueryKey, orderStatusQueryKey, outcomeMintsQueryKey, positionsByWalletQueryKey, quoteQueryKey, searchQueryKey, seriesByTickerQueryKey, seriesQueryKey, submitIntentSwap, tagsByCategoriesQueryKey, tokensQueryKey, tokensWithDecimalsQueryKey, tradesByMintQueryKey, tradesQueryKey, useCategoriesQuery, useCreateSwapInstructionsMutation, useCreateSwapMutation, useEventByIdQuery, useEventCandlesticksQuery, useEventDetail, useEventV2Query, useEvents, useEventsCategories, useEventsInfiniteQuery, useEventsQuery, useEventsV2, useEventsV2Query, useFilterOutcomeMintsMutation, useFiltersBySportsQuery, useForecastPercentileHistoryByMintQuery, useForecastPercentileHistoryQuery, useInitPredictionMarketMutation, useIntentQuoteQuery, useLiveDataByEventQuery, useLiveDataByMintQuery, useLiveDataQuery, useMarketByIdQuery, useMarketByMintQuery, useMarketCandlesticksByMintQuery, useMarketCandlesticksQuery, useMarketPositions, useMarketsBatchQuery, useMarketsQuery, useOnchainTradesByEventInfiniteQuery, useOnchainTradesByEventQuery, useOnchainTradesByMarketInfiniteQuery, useOnchainTradesByMarketQuery, useOnchainTradesByWalletInfiniteQuery, useOnchainTradesByWalletQuery, useOpenOrders, useOrderBook, useOrderBookByMintQuery, useOrderBookQuery, useOrderQuery, useOrderStatusQuery, useOrderbookSubscription, useOutcomeMintsQuery, usePositions, usePositionsByWalletQuery, usePredictClient, usePredictContext, usePredictSearchHistory, usePredictV2Client, usePredictV2Context, usePriceHistoryQuery, usePricesSubscription, useQuoteQuery, useSearchEventsInfiniteQuery, useSearchQuery, useSearchResultListScript, useSearchScript, useSeriesByTickerQuery, useSeriesQuery, useSubmitIntentSwapMutation, useTagsByCategoriesQuery, useTokensQuery, useTokensWithDecimalsQuery, useTradeForm, useTradeHistory, useTradesByMintQuery, useTradesQuery, useTradesSubscription, useUserPredictContext, useVenuesQuery, useWsClient, useWsConnection, venuesQueryKey, _default as version };
1712
+ export { CATEGORIES_V2, CHART_RANGE_DURATION, CHART_RANGE_PERIOD, CHART_RANGE_SAMPLE_INTERVAL, CandlestickPeriod, type CandlestickPeriodType, CandlesticksQueryParams, CandlesticksResponse, CategoriesSkeleton, CategoriesUI, type CategoriesUIProps, CategoriesWidget, type CategoriesWidgetProps, CategoriesWidgetV2, type CategoriesWidgetV2Props, type CategoryItemV2, type CategorySelection, ChartRange, type ChartRangeType, DEFAULT_CHART_RANGE, DEFAULT_FILTER_STATE, DEFAULT_PAGE_SIZE, DEFAULT_PRICE_HISTORY_INTERVAL, type EventCategory, EventDetailPage, type EventDetailPageProps, EventDetailPageV2, type EventDetailPageV2Props, EventDetailSkeleton, type EventDetailSkeletonProps, EventDetailUI, type EventDetailUIProps, EventDetailV2UI, type EventDetailV2UIProps, EventDetailWidget, type EventDetailWidgetProps, EventDetailWidgetV2, type EventDetailWidgetV2Props, EventItemSkeleton, type EventItemSkeletonProps, EventItemUI, type EventItemUIProps, EventItemV2UI, type EventItemV2UIProps, EventMarketDetailWidget, type EventMarketDetailWidgetProps, EventQueryParams, type EventsFilterState, EventsFilterV2UI, type EventsFilterV2UIProps, EventsPage, type EventsPageProps, EventsPageV2, type EventsPageV2Props, EventsSkeleton, type EventsSkeletonProps, EventsToolbarV2UI, type EventsToolbarV2UIProps, EventsUI, type EventsUIProps, EventsV2UI, type EventsV2UIProps, EventsWidget, type EventsWidgetProps, EventsWidgetV2, type EventsWidgetV2Props, FilterOutcomeMintsRequest, FilterOutcomeMintsResponse, FiltersBySportsResponse, ForecastPercentileHistoryByMintQueryParams, ForecastPercentileHistoryQueryParams, ForecastPercentileHistoryResponse, IPredictClient, IPredictWsClient, IntentQuoteQueryParams, IntentQuoteResponse, IntentSwapRequestBody, IntentSwapResponse, LiveDataByEventQueryParams, LiveDataByMintQueryParams, LiveDataQueryParams, LiveDataResponse, MAX_PRICE_HISTORY_MARKETS, type MarketPositionsResult, MarketQueryParams, MarketsBatchRequest, MultiOnchainTradeResponse, MultiTradeResponse, ORDER_MAX_PRICE, ORDER_MIN_PRICE, ORDER_MIN_QUANTITY, ORDER_PRICE_STEP, OnchainTradesByEventQueryParams, OnchainTradesByMarketQueryParams, OnchainTradesByWalletQueryParams, OpenOrdersUI, type OpenOrdersUIProps, OpenOrdersWidget, type OpenOrdersWidgetProps, type Order, type OrderBookRow, OrderBookUI, type OrderBookUIProps, OrderBookWidget, type OrderBookWidgetProps, OrderQueryParams, OrderResponse, OrderStatusQueryParams, OrderStatusResponse, type OrderbookData, OrderbookLevel, OrderbookResponse, OutcomeMintsQueryParams, OutcomeMintsResponse, PREDICT_SEARCH_MODAL_ID, PRICE_HISTORY_SAMPLE_INTERVAL, type Position, PositionsByWalletQueryParams, type PositionsSummary, PositionsUI, type PositionsUIProps, PositionsWidget, type PositionsWidgetProps, PredictClientV2, PredictContext, type PredictContextValue, PredictProvider, type PredictProviderProps, PredictSearchModal, type PredictSearchModalParams, type PredictSearchModalResult, PredictV2Context, type PredictV2ContextValue, PredictV2Provider, type PredictV2ProviderProps, PredictionMarketInitQueryParams, PredictionMarketInitResponse, type PriceData, PriceHistoryInterval, type PriceHistoryIntervalType, QuoteQueryParams, QuoteResponse, SORT_PRESETS, SearchEventsButton, type SearchEventsButtonProps, SearchHistoryUI, type SearchHistoryUIProps, SearchHistoryWidget, type SearchHistoryWidgetProps, SearchInputUI, type SearchInputUIProps, SearchQueryParams, SearchResponse, SearchResultItemUI, type SearchResultItemUIProps, SearchResultListWidget, type SearchResultListWidgetProps, SearchWidget, type SearchWidgetProps, SeriesListResponse, SeriesQueryParams, SeriesResponse, SingleTradeResponse, type SortPreset, StandardEvent, StandardEventsResponse, StandardMarket, StandardMarketsResponse, SwapInstructionsResponse, SwapRequestBody, SwapResponse, type TagItemV2, type TagSlugSelection, TagsByCategoriesResponse, TokenListResponse, TokenListWithDecimalsResponse, type TradeData, TradeFormSkeleton, TradeFormUI, type TradeFormUIProps, type TradeFormValidation, TradeFormWidget, type TradeFormWidgetProps, TradeHistoryUI, type TradeHistoryUIProps, TradeHistoryWidget, type TradeHistoryWidgetProps, type TradeOutcome, type TradeSide, TradesByMintQueryParams, TradesQueryParams, type UseEventByIdQueryParams, type UseEventCandlesticksParams, type UseEventDetailParams, type UseEventDetailV2Params, type UseEventV2QueryParams, type UseEventsCategoriesResult, type UseEventsParams, type UseEventsResult, type UseEventsV2Params, type UseEventsV2Result, type UseMarketByIdQueryParams, type UseMarketCandlesticksByMintParams, type UseMarketCandlesticksParams, type UseMarketV2QueryParams, type UseOpenOrdersParams, type UseOpenOrdersResult, type UseOrderBookParams, type UseOrderBookResult, type UseOrderbookSubscriptionParams, type UseOrderbookSubscriptionResult, type UsePositionsParams, type UsePositionsResult, type UsePricesSubscriptionParams, type UsePricesSubscriptionResult, type UseSearchEventsInfiniteQueryParams, type UseSearchResultListScriptParams, type UseSearchScriptParams, type UseTradeFormParams, type UseTradeFormResult, type UseTradeHistoryParams, type UseTradeHistoryResult, type UseTradesSubscriptionParams, type UseTradesSubscriptionResult, type UseWsClientResult, type UseWsConnectionParams, type UseWsConnectionResult, UserPredictContext, type UserPredictContextValue, UserPredictProvider, type UserPredictProviderProps, V2Event, V2EventSortField, V2EventStatus, V2ListEventsParams, V2Market, V2Page, V2ProviderSource, VenueListResponse, WalletPositionItem, WalletPositionsResponse, WsConnectionStatus, WsOrderbookUpdate, WsPriceUpdate, WsTradeUpdate, countActiveFilters, createSwap, createSwapInstructions, eventByIdQueryKey, eventCandlesticksQueryKey, eventV2QueryKey, eventsInfiniteQueryKey, eventsQueryKey, eventsV2QueryKey, fetchEventById, fetchEventCandlesticks, fetchEventV2, fetchEvents, fetchEventsV2, fetchFiltersBySports, fetchForecastPercentileHistory, fetchForecastPercentileHistoryByMint, fetchIntentQuote, fetchLiveData, fetchLiveDataByEvent, fetchLiveDataByMint, fetchMarketById, fetchMarketByMint, fetchMarketCandlesticks, fetchMarketCandlesticksByMint, fetchMarketV2, fetchMarkets, fetchMarketsBatch, fetchOnchainTradesByEvent, fetchOnchainTradesByMarket, fetchOnchainTradesByWallet, fetchOrder, fetchOrderBook, fetchOrderBookByMint, fetchOrderStatus, fetchOutcomeMints, fetchPositionsByWallet, fetchQuote, fetchSearch, fetchSeries, fetchSeriesByTicker, fetchTagsByCategories, fetchTokens, fetchTokensWithDecimals, fetchTrades, fetchTradesByMint, fetchVenues, filterOutcomeMints, filtersBySportsQueryKey, forecastPercentileHistoryByMintQueryKey, forecastPercentileHistoryQueryKey, initPredictionMarket, intentQuoteQueryKey, liveDataByEventQueryKey, liveDataByMintQueryKey, liveDataQueryKey, marketByIdQueryKey, marketByMintQueryKey, marketCandlesticksByMintQueryKey, marketCandlesticksQueryKey, marketV2QueryKey, marketsBatchQueryKey, marketsQueryKey, onchainTradesByEventInfiniteQueryKey, onchainTradesByEventQueryKey, onchainTradesByMarketInfiniteQueryKey, onchainTradesByMarketQueryKey, onchainTradesByWalletInfiniteQueryKey, onchainTradesByWalletQueryKey, orderBookByMintQueryKey, orderBookQueryKey, orderQueryKey, orderStatusQueryKey, outcomeMintsQueryKey, positionsByWalletQueryKey, quoteQueryKey, searchQueryKey, seriesByTickerQueryKey, seriesQueryKey, submitIntentSwap, tagsByCategoriesQueryKey, tokensQueryKey, tokensWithDecimalsQueryKey, tradesByMintQueryKey, tradesQueryKey, useCategoriesQuery, useCreateSwapInstructionsMutation, useCreateSwapMutation, useEventByIdQuery, useEventCandlesticksQuery, useEventDetail, useEventDetailV2, useEventV2Query, useEvents, useEventsCategories, useEventsInfiniteQuery, useEventsQuery, useEventsV2, useEventsV2Query, useFilterOutcomeMintsMutation, useFiltersBySportsQuery, useForecastPercentileHistoryByMintQuery, useForecastPercentileHistoryQuery, useInitPredictionMarketMutation, useIntentQuoteQuery, useLiveDataByEventQuery, useLiveDataByMintQuery, useLiveDataQuery, useMarketByIdQuery, useMarketByMintQuery, useMarketCandlesticksByMintQuery, useMarketCandlesticksQuery, useMarketPositions, useMarketV2Query, useMarketsBatchQuery, useMarketsQuery, useOnchainTradesByEventInfiniteQuery, useOnchainTradesByEventQuery, useOnchainTradesByMarketInfiniteQuery, useOnchainTradesByMarketQuery, useOnchainTradesByWalletInfiniteQuery, useOnchainTradesByWalletQuery, useOpenOrders, useOrderBook, useOrderBookByMintQuery, useOrderBookQuery, useOrderQuery, useOrderStatusQuery, useOrderbookSubscription, useOutcomeMintsQuery, usePositions, usePositionsByWalletQuery, usePredictClient, usePredictContext, usePredictSearchHistory, usePredictV2Client, usePredictV2Context, usePriceHistoryQuery, usePricesSubscription, useQuoteQuery, useSearchEventsInfiniteQuery, useSearchQuery, useSearchResultListScript, useSearchScript, useSeriesByTickerQuery, useSeriesQuery, useSubmitIntentSwapMutation, useTagsByCategoriesQuery, useTokensQuery, useTokensWithDecimalsQuery, useTradeForm, useTradeHistory, useTradesByMintQuery, useTradesQuery, useTradesSubscription, useUserPredictContext, useVenuesQuery, useWsClient, useWsConnection, venuesQueryKey, _default as version };