@liberfi.io/ui-predict 0.1.47 → 0.1.49

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"],"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","eventTicker","DflowPredictWsClient","config","event","error","options","onUpdate","removeListener","callback","listeners","index","channel","subscription","status","listener","message","type","dataMsg","delay","createDflowPredictWsClient"],"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 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 CandlesticksQueryParams,\n ForecastPercentileHistoryQueryParams,\n ForecastPercentileHistoryByMintQueryParams,\n SeriesQueryParams,\n SearchQueryParams,\n LiveDataQueryParams,\n LiveDataByEventQueryParams,\n LiveDataByMintQueryParams,\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 // -- 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 // -- 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 return await this.fetch<OrderStatusResponse>(\n \"/v2/order/status\",\n toRecord(params),\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"]}
1
+ {"version":3,"sources":["../../src/client/base.ts","../../src/client/dflow.ts","../../src/client/ws.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","DflowPredictWsClient","config","event","error","options","onUpdate","removeListener","callback","listeners","index","channel","subscription","status","listener","message","type","dataMsg","delay","createDflowPredictWsClient"],"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 return await this.fetch<OrderStatusResponse>(\n \"/v2/order/status\",\n toRecord(params),\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"]}
@@ -184,6 +184,88 @@ interface MultiTradeResponse {
184
184
  /** List of trades */
185
185
  trades: SingleTradeResponse[];
186
186
  }
187
+ /** Single on-chain trade */
188
+ interface OnchainTrade {
189
+ /** Unique trade ID */
190
+ id: number;
191
+ /** Unix timestamp when trade was created */
192
+ createdAt: number;
193
+ /** Event type (e.g. "fill") */
194
+ eventType: string;
195
+ /** Order Solana account address */
196
+ orderAccount: string;
197
+ /** Input token mint address */
198
+ inputMint: string;
199
+ /** Output token mint address */
200
+ outputMint: string;
201
+ /** Input amount in raw token units */
202
+ inputAmount: number;
203
+ /** Output amount in raw token units */
204
+ outputAmount: number;
205
+ /** Fee token mint address */
206
+ feeMint: string;
207
+ /** Fee amount in raw token units */
208
+ feeAmount: number;
209
+ /** Solana transaction signature */
210
+ transactionSignature: string;
211
+ /** User wallet address */
212
+ wallet: string;
213
+ /** Fill recipient address */
214
+ fillRecipient: string;
215
+ /** Refund recipient address */
216
+ refundRecipient: string;
217
+ /** Number of contracts (raw amount / 10^6) */
218
+ contracts?: number | null;
219
+ /** Market ticker */
220
+ marketTicker?: string | null;
221
+ /** Trade side ("yes" | "no") */
222
+ side?: string | null;
223
+ /** USD price per outcome contract */
224
+ usdPricePerContract?: number | null;
225
+ }
226
+ /** On-chain trades paginated response */
227
+ interface MultiOnchainTradeResponse {
228
+ /** Pagination cursor for next page */
229
+ cursor?: string | null;
230
+ /** List of on-chain trades */
231
+ trades: OnchainTrade[];
232
+ }
233
+ /** Sort field for on-chain trades */
234
+ type OnchainTradeSortBy = "createdAt" | "inputAmount" | "outputAmount";
235
+ /** Base query parameters shared by all on-chain trade endpoints */
236
+ interface OnchainTradesBaseQueryParams {
237
+ /** Maximum number of trades to return (1-250, default 100) */
238
+ limit?: number;
239
+ /** Pagination cursor (trade ID) */
240
+ cursor?: string;
241
+ /** Sort field */
242
+ sortBy?: OnchainTradeSortBy;
243
+ /** Sort order */
244
+ sortOrder?: SortOrder;
245
+ /** Minimum amount filter (raw 6-decimal precision) */
246
+ minAmount?: number;
247
+ /** Maximum amount filter (raw 6-decimal precision) */
248
+ maxAmount?: number;
249
+ }
250
+ /** Query parameters for on-chain trades by wallet */
251
+ interface OnchainTradesByWalletQueryParams extends OnchainTradesBaseQueryParams {
252
+ /** Wallet address */
253
+ walletAddress: string;
254
+ }
255
+ /** Query parameters for on-chain trades by event */
256
+ interface OnchainTradesByEventQueryParams extends OnchainTradesBaseQueryParams {
257
+ /** Event ticker */
258
+ eventTicker: string;
259
+ /** Optional wallet address filter */
260
+ wallet?: string;
261
+ }
262
+ /** Query parameters for on-chain trades by market */
263
+ interface OnchainTradesByMarketQueryParams extends OnchainTradesBaseQueryParams {
264
+ /** Market ticker */
265
+ marketTicker: string;
266
+ /** Optional wallet address filter */
267
+ wallet?: string;
268
+ }
187
269
  /** Candlestick OHLC prices */
188
270
  interface CandlestickOHLC {
189
271
  /** Open price */
@@ -547,6 +629,28 @@ type TokenListResponse = string[];
547
629
  type TokenListWithDecimalsResponse = TokenWithDecimals[];
548
630
  /** Venue list response */
549
631
  type VenueListResponse = string[];
632
+ /** Single wallet position item */
633
+ interface WalletPositionItem {
634
+ /** Token mint address */
635
+ mint: string;
636
+ /** Token balance (UI amount) */
637
+ balance: number;
638
+ /** Token decimals */
639
+ decimals: number;
640
+ /** Position side: YES, NO, or UNKNOWN */
641
+ position: "YES" | "NO" | "UNKNOWN";
642
+ /** Associated market details */
643
+ market?: StandardMarket | null;
644
+ }
645
+ /** Wallet positions response */
646
+ interface WalletPositionsResponse {
647
+ /** Wallet address */
648
+ wallet: string;
649
+ /** USDC balance (UI amount) */
650
+ usdcBalance: number;
651
+ /** List of positions */
652
+ positions: WalletPositionItem[];
653
+ }
550
654
  /** Outcome mints response */
551
655
  interface OutcomeMintsResponse {
552
656
  /** List of all yes_mint and no_mint pubkeys from supported markets */
@@ -941,6 +1045,11 @@ interface IntentSwapRequestBody {
941
1045
  /** Base64-encoded intent opening transaction, signed by the user */
942
1046
  signedOpenTransaction: string;
943
1047
  }
1048
+ /** Positions by wallet query parameters */
1049
+ interface PositionsByWalletQueryParams {
1050
+ /** Solana wallet address */
1051
+ walletAddress: string;
1052
+ }
944
1053
  /** Prediction market init query parameters */
945
1054
  interface PredictionMarketInitQueryParams {
946
1055
  /** Base58-encoded address of the payer */
@@ -983,6 +1092,12 @@ interface IPredictClient {
983
1092
  getTrades(params?: TradesQueryParams): Promise<MultiTradeResponse>;
984
1093
  /** Get trades by mint address */
985
1094
  getTradesByMint(params: TradesByMintQueryParams): Promise<MultiTradeResponse>;
1095
+ /** Get on-chain trades by wallet address */
1096
+ getOnchainTradesByWallet(params: OnchainTradesByWalletQueryParams): Promise<MultiOnchainTradeResponse>;
1097
+ /** Get on-chain trades by event ticker */
1098
+ getOnchainTradesByEvent(params: OnchainTradesByEventQueryParams): Promise<MultiOnchainTradeResponse>;
1099
+ /** Get on-chain trades by market ticker */
1100
+ getOnchainTradesByMarket(params: OnchainTradesByMarketQueryParams): Promise<MultiOnchainTradeResponse>;
986
1101
  /** Get live data */
987
1102
  getLiveData(params: LiveDataQueryParams): Promise<LiveDataResponse>;
988
1103
  /** Get live data by event ticker */
@@ -999,6 +1114,8 @@ interface IPredictClient {
999
1114
  getFiltersBySports(): Promise<FiltersBySportsResponse>;
1000
1115
  /** Search events */
1001
1116
  search(params: SearchQueryParams): Promise<SearchResponse>;
1117
+ /** Get prediction market positions by wallet address */
1118
+ getPositionsByWallet(params: PositionsByWalletQueryParams): Promise<WalletPositionsResponse>;
1002
1119
  /** Get outcome mints */
1003
1120
  getOutcomeMints(params?: OutcomeMintsQueryParams): Promise<OutcomeMintsResponse>;
1004
1121
  /** Filter outcome mints */
@@ -1147,6 +1264,9 @@ declare class DflowPredictClient extends BasePredictClient implements IPredictCl
1147
1264
  getOrderbookByMint(mintAddress: string): Promise<OrderbookResponse>;
1148
1265
  getTrades(params?: TradesQueryParams): Promise<MultiTradeResponse>;
1149
1266
  getTradesByMint(params: TradesByMintQueryParams): Promise<MultiTradeResponse>;
1267
+ getOnchainTradesByWallet(params: OnchainTradesByWalletQueryParams): Promise<MultiOnchainTradeResponse>;
1268
+ getOnchainTradesByEvent(params: OnchainTradesByEventQueryParams): Promise<MultiOnchainTradeResponse>;
1269
+ getOnchainTradesByMarket(params: OnchainTradesByMarketQueryParams): Promise<MultiOnchainTradeResponse>;
1150
1270
  getLiveData(params: LiveDataQueryParams): Promise<LiveDataResponse>;
1151
1271
  getLiveDataByEvent(params: LiveDataByEventQueryParams): Promise<LiveDataResponse>;
1152
1272
  getLiveDataByMint(params: LiveDataByMintQueryParams): Promise<LiveDataResponse>;
@@ -1155,6 +1275,7 @@ declare class DflowPredictClient extends BasePredictClient implements IPredictCl
1155
1275
  getTagsByCategories(): Promise<TagsByCategoriesResponse>;
1156
1276
  getFiltersBySports(): Promise<FiltersBySportsResponse>;
1157
1277
  search(params: SearchQueryParams): Promise<SearchResponse>;
1278
+ getPositionsByWallet(params: PositionsByWalletQueryParams): Promise<WalletPositionsResponse>;
1158
1279
  getOutcomeMints(params?: OutcomeMintsQueryParams): Promise<OutcomeMintsResponse>;
1159
1280
  filterOutcomeMints(request: FilterOutcomeMintsRequest): Promise<FilterOutcomeMintsResponse>;
1160
1281
  getQuote(params: QuoteQueryParams): Promise<QuoteResponse>;
@@ -1294,4 +1415,4 @@ declare class DflowPredictWsClient implements IPredictWsClient {
1294
1415
  */
1295
1416
  declare function createDflowPredictWsClient(config: WsClientConfig): DflowPredictWsClient;
1296
1417
 
1297
- export { type WsConnectionStatus as $, type FilterOutcomeMintsResponse as A, type QuoteResponse as B, type CandlesticksResponse as C, type SwapRequestBody as D, type EventQueryParams as E, type ForecastPercentileHistoryQueryParams as F, type SwapResponse as G, type SwapInstructionsResponse as H, type IPredictClient as I, type OrderQueryParams as J, type OrderStatusQueryParams as K, type LiveDataQueryParams as L, type MarketQueryParams as M, type OrderStatusResponse as N, type OrderResponse as O, type IntentQuoteQueryParams as P, type QuoteQueryParams as Q, type IntentQuoteResponse as R, type StandardEvent as S, type TradesQueryParams as T, type IntentSwapRequestBody as U, type IntentSwapResponse as V, type PredictionMarketInitQueryParams as W, type PredictionMarketInitResponse as X, type TokenListResponse as Y, type TokenListWithDecimalsResponse as Z, type VenueListResponse as _, type StandardMarket as a, type WsPriceUpdate as a0, type WsTradeUpdate as a1, type WsOrderbookUpdate as a2, type ProviderType as a3, type MarketStatus as a4, type SortField as a5, type SortOrder as a6, type OrderStatus as a7, type PlatformFeeMode as a8, type SlippageTolerance as a9, buildQuery as aA, toRecord as aB, DflowPredictClient as aC, DflowPredictWsClient as aD, createDflowPredictWsClient as aE, type WsClientConfig as aF, type PriorityLevel as aa, type ExecutionMode as ab, type SettlementSource as ac, type MarketAccountInfo as ad, type CandlestickOHLC as ae, type CandlestickDataPoint as af, type ForecastPercentileDataPoint as ag, type SeriesSettlementSource as ah, type RoutePlanLeg as ai, type PlatformFee as aj, type ComputeBudgetInfo as ak, type PrioritizationType as al, type AccountMetaResponse as am, type InstructionResponse as an, type BlockhashWithMetadata as ao, type OrderFill as ap, type OrderRevert as aq, type IntentExpiry as ar, type TokenWithDecimals as as, type OrderbookQueryParams as at, type PrioritizationFeeLamports as au, type DestinationTokenAccountParam as av, type CreateFeeAccountParams as aw, type PositiveSlippageParams as ax, type WsSubscribeOptions as ay, BasePredictClient as az, type SeriesResponse as b, type OrderbookLevel as c, type SingleTradeResponse as d, type IPredictWsClient as e, type StandardEventsResponse as f, type StandardMarketsResponse as g, type MarketsBatchRequest as h, type OrderbookResponse as i, type MultiTradeResponse as j, type TradesByMintQueryParams as k, type CandlesticksQueryParams as l, type ForecastPercentileHistoryResponse as m, type ForecastPercentileHistoryByMintQueryParams as n, type LiveDataResponse as o, type LiveDataByEventQueryParams as p, type LiveDataByMintQueryParams as q, type SeriesQueryParams as r, type SeriesListResponse as s, type TagsByCategoriesResponse as t, type FiltersBySportsResponse as u, type SearchQueryParams as v, type SearchResponse as w, type OutcomeMintsQueryParams as x, type OutcomeMintsResponse as y, type FilterOutcomeMintsRequest as z };
1418
+ export { type IntentSwapRequestBody as $, type SearchResponse as A, type WalletPositionsResponse as B, type CandlesticksResponse as C, type OutcomeMintsQueryParams as D, type EventQueryParams as E, type ForecastPercentileHistoryQueryParams as F, type OutcomeMintsResponse as G, type FilterOutcomeMintsRequest as H, type IPredictClient as I, type FilterOutcomeMintsResponse as J, type QuoteResponse as K, type LiveDataQueryParams as L, type MarketQueryParams as M, type SwapRequestBody as N, type OrderResponse as O, type PositionsByWalletQueryParams as P, type QuoteQueryParams as Q, type SwapResponse as R, type StandardEvent as S, type TradesQueryParams as T, type SwapInstructionsResponse as U, type OrderQueryParams as V, type WalletPositionItem as W, type OrderStatusQueryParams as X, type OrderStatusResponse as Y, type IntentQuoteQueryParams as Z, type IntentQuoteResponse as _, type StandardMarket as a, type IntentSwapResponse as a0, type PredictionMarketInitQueryParams as a1, type PredictionMarketInitResponse as a2, type TokenListResponse as a3, type TokenListWithDecimalsResponse as a4, type VenueListResponse as a5, type WsConnectionStatus as a6, type WsPriceUpdate as a7, type WsTradeUpdate as a8, type WsOrderbookUpdate as a9, type OrderRevert as aA, type IntentExpiry as aB, type TokenWithDecimals as aC, type OrderbookQueryParams as aD, type PrioritizationFeeLamports as aE, type DestinationTokenAccountParam as aF, type CreateFeeAccountParams as aG, type PositiveSlippageParams as aH, type WsSubscribeOptions as aI, BasePredictClient as aJ, buildQuery as aK, toRecord as aL, DflowPredictClient as aM, DflowPredictWsClient as aN, createDflowPredictWsClient as aO, type WsClientConfig as aP, type ProviderType as aa, type MarketStatus as ab, type SortField as ac, type SortOrder as ad, type OrderStatus as ae, type PlatformFeeMode as af, type SlippageTolerance as ag, type PriorityLevel as ah, type ExecutionMode as ai, type SettlementSource as aj, type MarketAccountInfo as ak, type OnchainTrade as al, type OnchainTradeSortBy as am, type OnchainTradesBaseQueryParams as an, type CandlestickOHLC as ao, type CandlestickDataPoint as ap, type ForecastPercentileDataPoint as aq, type SeriesSettlementSource as ar, type RoutePlanLeg as as, type PlatformFee as at, type ComputeBudgetInfo as au, type PrioritizationType as av, type AccountMetaResponse as aw, type InstructionResponse as ax, type BlockhashWithMetadata as ay, type OrderFill as az, type SeriesResponse as b, type OrderbookLevel as c, type SingleTradeResponse as d, type IPredictWsClient as e, type StandardEventsResponse as f, type StandardMarketsResponse as g, type MarketsBatchRequest as h, type OrderbookResponse as i, type MultiTradeResponse as j, type TradesByMintQueryParams as k, type OnchainTradesByWalletQueryParams as l, type MultiOnchainTradeResponse as m, type OnchainTradesByEventQueryParams as n, type OnchainTradesByMarketQueryParams as o, type CandlesticksQueryParams as p, type ForecastPercentileHistoryResponse as q, type ForecastPercentileHistoryByMintQueryParams as r, type LiveDataResponse as s, type LiveDataByEventQueryParams as t, type LiveDataByMintQueryParams as u, type SeriesQueryParams as v, type SeriesListResponse as w, type TagsByCategoriesResponse as x, type FiltersBySportsResponse as y, type SearchQueryParams as z };
@@ -184,6 +184,88 @@ interface MultiTradeResponse {
184
184
  /** List of trades */
185
185
  trades: SingleTradeResponse[];
186
186
  }
187
+ /** Single on-chain trade */
188
+ interface OnchainTrade {
189
+ /** Unique trade ID */
190
+ id: number;
191
+ /** Unix timestamp when trade was created */
192
+ createdAt: number;
193
+ /** Event type (e.g. "fill") */
194
+ eventType: string;
195
+ /** Order Solana account address */
196
+ orderAccount: string;
197
+ /** Input token mint address */
198
+ inputMint: string;
199
+ /** Output token mint address */
200
+ outputMint: string;
201
+ /** Input amount in raw token units */
202
+ inputAmount: number;
203
+ /** Output amount in raw token units */
204
+ outputAmount: number;
205
+ /** Fee token mint address */
206
+ feeMint: string;
207
+ /** Fee amount in raw token units */
208
+ feeAmount: number;
209
+ /** Solana transaction signature */
210
+ transactionSignature: string;
211
+ /** User wallet address */
212
+ wallet: string;
213
+ /** Fill recipient address */
214
+ fillRecipient: string;
215
+ /** Refund recipient address */
216
+ refundRecipient: string;
217
+ /** Number of contracts (raw amount / 10^6) */
218
+ contracts?: number | null;
219
+ /** Market ticker */
220
+ marketTicker?: string | null;
221
+ /** Trade side ("yes" | "no") */
222
+ side?: string | null;
223
+ /** USD price per outcome contract */
224
+ usdPricePerContract?: number | null;
225
+ }
226
+ /** On-chain trades paginated response */
227
+ interface MultiOnchainTradeResponse {
228
+ /** Pagination cursor for next page */
229
+ cursor?: string | null;
230
+ /** List of on-chain trades */
231
+ trades: OnchainTrade[];
232
+ }
233
+ /** Sort field for on-chain trades */
234
+ type OnchainTradeSortBy = "createdAt" | "inputAmount" | "outputAmount";
235
+ /** Base query parameters shared by all on-chain trade endpoints */
236
+ interface OnchainTradesBaseQueryParams {
237
+ /** Maximum number of trades to return (1-250, default 100) */
238
+ limit?: number;
239
+ /** Pagination cursor (trade ID) */
240
+ cursor?: string;
241
+ /** Sort field */
242
+ sortBy?: OnchainTradeSortBy;
243
+ /** Sort order */
244
+ sortOrder?: SortOrder;
245
+ /** Minimum amount filter (raw 6-decimal precision) */
246
+ minAmount?: number;
247
+ /** Maximum amount filter (raw 6-decimal precision) */
248
+ maxAmount?: number;
249
+ }
250
+ /** Query parameters for on-chain trades by wallet */
251
+ interface OnchainTradesByWalletQueryParams extends OnchainTradesBaseQueryParams {
252
+ /** Wallet address */
253
+ walletAddress: string;
254
+ }
255
+ /** Query parameters for on-chain trades by event */
256
+ interface OnchainTradesByEventQueryParams extends OnchainTradesBaseQueryParams {
257
+ /** Event ticker */
258
+ eventTicker: string;
259
+ /** Optional wallet address filter */
260
+ wallet?: string;
261
+ }
262
+ /** Query parameters for on-chain trades by market */
263
+ interface OnchainTradesByMarketQueryParams extends OnchainTradesBaseQueryParams {
264
+ /** Market ticker */
265
+ marketTicker: string;
266
+ /** Optional wallet address filter */
267
+ wallet?: string;
268
+ }
187
269
  /** Candlestick OHLC prices */
188
270
  interface CandlestickOHLC {
189
271
  /** Open price */
@@ -547,6 +629,28 @@ type TokenListResponse = string[];
547
629
  type TokenListWithDecimalsResponse = TokenWithDecimals[];
548
630
  /** Venue list response */
549
631
  type VenueListResponse = string[];
632
+ /** Single wallet position item */
633
+ interface WalletPositionItem {
634
+ /** Token mint address */
635
+ mint: string;
636
+ /** Token balance (UI amount) */
637
+ balance: number;
638
+ /** Token decimals */
639
+ decimals: number;
640
+ /** Position side: YES, NO, or UNKNOWN */
641
+ position: "YES" | "NO" | "UNKNOWN";
642
+ /** Associated market details */
643
+ market?: StandardMarket | null;
644
+ }
645
+ /** Wallet positions response */
646
+ interface WalletPositionsResponse {
647
+ /** Wallet address */
648
+ wallet: string;
649
+ /** USDC balance (UI amount) */
650
+ usdcBalance: number;
651
+ /** List of positions */
652
+ positions: WalletPositionItem[];
653
+ }
550
654
  /** Outcome mints response */
551
655
  interface OutcomeMintsResponse {
552
656
  /** List of all yes_mint and no_mint pubkeys from supported markets */
@@ -941,6 +1045,11 @@ interface IntentSwapRequestBody {
941
1045
  /** Base64-encoded intent opening transaction, signed by the user */
942
1046
  signedOpenTransaction: string;
943
1047
  }
1048
+ /** Positions by wallet query parameters */
1049
+ interface PositionsByWalletQueryParams {
1050
+ /** Solana wallet address */
1051
+ walletAddress: string;
1052
+ }
944
1053
  /** Prediction market init query parameters */
945
1054
  interface PredictionMarketInitQueryParams {
946
1055
  /** Base58-encoded address of the payer */
@@ -983,6 +1092,12 @@ interface IPredictClient {
983
1092
  getTrades(params?: TradesQueryParams): Promise<MultiTradeResponse>;
984
1093
  /** Get trades by mint address */
985
1094
  getTradesByMint(params: TradesByMintQueryParams): Promise<MultiTradeResponse>;
1095
+ /** Get on-chain trades by wallet address */
1096
+ getOnchainTradesByWallet(params: OnchainTradesByWalletQueryParams): Promise<MultiOnchainTradeResponse>;
1097
+ /** Get on-chain trades by event ticker */
1098
+ getOnchainTradesByEvent(params: OnchainTradesByEventQueryParams): Promise<MultiOnchainTradeResponse>;
1099
+ /** Get on-chain trades by market ticker */
1100
+ getOnchainTradesByMarket(params: OnchainTradesByMarketQueryParams): Promise<MultiOnchainTradeResponse>;
986
1101
  /** Get live data */
987
1102
  getLiveData(params: LiveDataQueryParams): Promise<LiveDataResponse>;
988
1103
  /** Get live data by event ticker */
@@ -999,6 +1114,8 @@ interface IPredictClient {
999
1114
  getFiltersBySports(): Promise<FiltersBySportsResponse>;
1000
1115
  /** Search events */
1001
1116
  search(params: SearchQueryParams): Promise<SearchResponse>;
1117
+ /** Get prediction market positions by wallet address */
1118
+ getPositionsByWallet(params: PositionsByWalletQueryParams): Promise<WalletPositionsResponse>;
1002
1119
  /** Get outcome mints */
1003
1120
  getOutcomeMints(params?: OutcomeMintsQueryParams): Promise<OutcomeMintsResponse>;
1004
1121
  /** Filter outcome mints */
@@ -1147,6 +1264,9 @@ declare class DflowPredictClient extends BasePredictClient implements IPredictCl
1147
1264
  getOrderbookByMint(mintAddress: string): Promise<OrderbookResponse>;
1148
1265
  getTrades(params?: TradesQueryParams): Promise<MultiTradeResponse>;
1149
1266
  getTradesByMint(params: TradesByMintQueryParams): Promise<MultiTradeResponse>;
1267
+ getOnchainTradesByWallet(params: OnchainTradesByWalletQueryParams): Promise<MultiOnchainTradeResponse>;
1268
+ getOnchainTradesByEvent(params: OnchainTradesByEventQueryParams): Promise<MultiOnchainTradeResponse>;
1269
+ getOnchainTradesByMarket(params: OnchainTradesByMarketQueryParams): Promise<MultiOnchainTradeResponse>;
1150
1270
  getLiveData(params: LiveDataQueryParams): Promise<LiveDataResponse>;
1151
1271
  getLiveDataByEvent(params: LiveDataByEventQueryParams): Promise<LiveDataResponse>;
1152
1272
  getLiveDataByMint(params: LiveDataByMintQueryParams): Promise<LiveDataResponse>;
@@ -1155,6 +1275,7 @@ declare class DflowPredictClient extends BasePredictClient implements IPredictCl
1155
1275
  getTagsByCategories(): Promise<TagsByCategoriesResponse>;
1156
1276
  getFiltersBySports(): Promise<FiltersBySportsResponse>;
1157
1277
  search(params: SearchQueryParams): Promise<SearchResponse>;
1278
+ getPositionsByWallet(params: PositionsByWalletQueryParams): Promise<WalletPositionsResponse>;
1158
1279
  getOutcomeMints(params?: OutcomeMintsQueryParams): Promise<OutcomeMintsResponse>;
1159
1280
  filterOutcomeMints(request: FilterOutcomeMintsRequest): Promise<FilterOutcomeMintsResponse>;
1160
1281
  getQuote(params: QuoteQueryParams): Promise<QuoteResponse>;
@@ -1294,4 +1415,4 @@ declare class DflowPredictWsClient implements IPredictWsClient {
1294
1415
  */
1295
1416
  declare function createDflowPredictWsClient(config: WsClientConfig): DflowPredictWsClient;
1296
1417
 
1297
- export { type WsConnectionStatus as $, type FilterOutcomeMintsResponse as A, type QuoteResponse as B, type CandlesticksResponse as C, type SwapRequestBody as D, type EventQueryParams as E, type ForecastPercentileHistoryQueryParams as F, type SwapResponse as G, type SwapInstructionsResponse as H, type IPredictClient as I, type OrderQueryParams as J, type OrderStatusQueryParams as K, type LiveDataQueryParams as L, type MarketQueryParams as M, type OrderStatusResponse as N, type OrderResponse as O, type IntentQuoteQueryParams as P, type QuoteQueryParams as Q, type IntentQuoteResponse as R, type StandardEvent as S, type TradesQueryParams as T, type IntentSwapRequestBody as U, type IntentSwapResponse as V, type PredictionMarketInitQueryParams as W, type PredictionMarketInitResponse as X, type TokenListResponse as Y, type TokenListWithDecimalsResponse as Z, type VenueListResponse as _, type StandardMarket as a, type WsPriceUpdate as a0, type WsTradeUpdate as a1, type WsOrderbookUpdate as a2, type ProviderType as a3, type MarketStatus as a4, type SortField as a5, type SortOrder as a6, type OrderStatus as a7, type PlatformFeeMode as a8, type SlippageTolerance as a9, buildQuery as aA, toRecord as aB, DflowPredictClient as aC, DflowPredictWsClient as aD, createDflowPredictWsClient as aE, type WsClientConfig as aF, type PriorityLevel as aa, type ExecutionMode as ab, type SettlementSource as ac, type MarketAccountInfo as ad, type CandlestickOHLC as ae, type CandlestickDataPoint as af, type ForecastPercentileDataPoint as ag, type SeriesSettlementSource as ah, type RoutePlanLeg as ai, type PlatformFee as aj, type ComputeBudgetInfo as ak, type PrioritizationType as al, type AccountMetaResponse as am, type InstructionResponse as an, type BlockhashWithMetadata as ao, type OrderFill as ap, type OrderRevert as aq, type IntentExpiry as ar, type TokenWithDecimals as as, type OrderbookQueryParams as at, type PrioritizationFeeLamports as au, type DestinationTokenAccountParam as av, type CreateFeeAccountParams as aw, type PositiveSlippageParams as ax, type WsSubscribeOptions as ay, BasePredictClient as az, type SeriesResponse as b, type OrderbookLevel as c, type SingleTradeResponse as d, type IPredictWsClient as e, type StandardEventsResponse as f, type StandardMarketsResponse as g, type MarketsBatchRequest as h, type OrderbookResponse as i, type MultiTradeResponse as j, type TradesByMintQueryParams as k, type CandlesticksQueryParams as l, type ForecastPercentileHistoryResponse as m, type ForecastPercentileHistoryByMintQueryParams as n, type LiveDataResponse as o, type LiveDataByEventQueryParams as p, type LiveDataByMintQueryParams as q, type SeriesQueryParams as r, type SeriesListResponse as s, type TagsByCategoriesResponse as t, type FiltersBySportsResponse as u, type SearchQueryParams as v, type SearchResponse as w, type OutcomeMintsQueryParams as x, type OutcomeMintsResponse as y, type FilterOutcomeMintsRequest as z };
1418
+ export { type IntentSwapRequestBody as $, type SearchResponse as A, type WalletPositionsResponse as B, type CandlesticksResponse as C, type OutcomeMintsQueryParams as D, type EventQueryParams as E, type ForecastPercentileHistoryQueryParams as F, type OutcomeMintsResponse as G, type FilterOutcomeMintsRequest as H, type IPredictClient as I, type FilterOutcomeMintsResponse as J, type QuoteResponse as K, type LiveDataQueryParams as L, type MarketQueryParams as M, type SwapRequestBody as N, type OrderResponse as O, type PositionsByWalletQueryParams as P, type QuoteQueryParams as Q, type SwapResponse as R, type StandardEvent as S, type TradesQueryParams as T, type SwapInstructionsResponse as U, type OrderQueryParams as V, type WalletPositionItem as W, type OrderStatusQueryParams as X, type OrderStatusResponse as Y, type IntentQuoteQueryParams as Z, type IntentQuoteResponse as _, type StandardMarket as a, type IntentSwapResponse as a0, type PredictionMarketInitQueryParams as a1, type PredictionMarketInitResponse as a2, type TokenListResponse as a3, type TokenListWithDecimalsResponse as a4, type VenueListResponse as a5, type WsConnectionStatus as a6, type WsPriceUpdate as a7, type WsTradeUpdate as a8, type WsOrderbookUpdate as a9, type OrderRevert as aA, type IntentExpiry as aB, type TokenWithDecimals as aC, type OrderbookQueryParams as aD, type PrioritizationFeeLamports as aE, type DestinationTokenAccountParam as aF, type CreateFeeAccountParams as aG, type PositiveSlippageParams as aH, type WsSubscribeOptions as aI, BasePredictClient as aJ, buildQuery as aK, toRecord as aL, DflowPredictClient as aM, DflowPredictWsClient as aN, createDflowPredictWsClient as aO, type WsClientConfig as aP, type ProviderType as aa, type MarketStatus as ab, type SortField as ac, type SortOrder as ad, type OrderStatus as ae, type PlatformFeeMode as af, type SlippageTolerance as ag, type PriorityLevel as ah, type ExecutionMode as ai, type SettlementSource as aj, type MarketAccountInfo as ak, type OnchainTrade as al, type OnchainTradeSortBy as am, type OnchainTradesBaseQueryParams as an, type CandlestickOHLC as ao, type CandlestickDataPoint as ap, type ForecastPercentileDataPoint as aq, type SeriesSettlementSource as ar, type RoutePlanLeg as as, type PlatformFee as at, type ComputeBudgetInfo as au, type PrioritizationType as av, type AccountMetaResponse as aw, type InstructionResponse as ax, type BlockhashWithMetadata as ay, type OrderFill as az, type SeriesResponse as b, type OrderbookLevel as c, type SingleTradeResponse as d, type IPredictWsClient as e, type StandardEventsResponse as f, type StandardMarketsResponse as g, type MarketsBatchRequest as h, type OrderbookResponse as i, type MultiTradeResponse as j, type TradesByMintQueryParams as k, type OnchainTradesByWalletQueryParams as l, type MultiOnchainTradeResponse as m, type OnchainTradesByEventQueryParams as n, type OnchainTradesByMarketQueryParams as o, type CandlesticksQueryParams as p, type ForecastPercentileHistoryResponse as q, type ForecastPercentileHistoryByMintQueryParams as r, type LiveDataResponse as s, type LiveDataByEventQueryParams as t, type LiveDataByMintQueryParams as u, type SeriesQueryParams as v, type SeriesListResponse as w, type TagsByCategoriesResponse as x, type FiltersBySportsResponse as y, type SearchQueryParams as z };