import { OrderbookWS } from './orderbook.js'; import { LocalOrderbook } from './orderbook-state.js'; import type { OrderbookLevel, OrderbookOptions, BookSnapshot, BookUpdate, PriceChange } from './types/orderbook.js'; export interface OrderbookEngineConfig extends OrderbookOptions { apiKey: string; obUrl?: string; } type EngineHandler = T extends void ? () => void : (data: T) => void; /** A filtered view over the shared orderbook state. Only receives updates for its tokens. */ export declare class EngineView { /** @internal */ _tokens: Set; /** @internal */ _handlers: { update: ((data: BookSnapshot | BookUpdate) => void)[]; price: ((data: PriceChange) => void)[]; }; /** @internal */ _destroyed: boolean; private readonly state; private readonly removeFromEngine; /** @internal */ constructor(tokenIds: string[], state: LocalOrderbook, removeFromEngine: () => void); /** Register a handler for updates to this view's tokens. */ on(event: 'update', handler: (data: BookSnapshot | BookUpdate) => void): this; on(event: 'price', handler: (data: PriceChange) => void): this; /** Remove a handler. */ off(event: 'update' | 'price', handler: (...args: any[]) => void): this; /** Change the tokens this view tracks. */ setTokens(tokenIds: string[]): void; /** Get the full book for a token in this view. */ book(tokenId: string): { bids: OrderbookLevel[]; asks: OrderbookLevel[]; } | undefined; /** Get the midpoint price for a token. */ midpoint(tokenId: string): number | undefined; /** Get the bid-ask spread for a token. */ spread(tokenId: string): number | undefined; /** Get the best bid for a token. */ bestBid(tokenId: string): OrderbookLevel | undefined; /** Get the best ask for a token. */ bestAsk(tokenId: string): OrderbookLevel | undefined; /** Destroy this view. Removes all handlers and detaches from the engine. */ destroy(): void; /** @internal Emit to this view's handlers. */ _emitUpdate(data: BookSnapshot | BookUpdate): void; /** @internal */ _emitPrice(data: PriceChange): void; } /** * High-level orderbook client. Manages one WebSocket connection, maintains * local state for all subscribed tokens, and routes updates to filtered views. * * ```typescript * const engine = new OrderbookEngine({ apiKey: 'pn_live_...' }) * await engine.subscribe([tokenA, tokenB, tokenC]) * * const view = engine.view([tokenA, tokenB]) * view.on('update', (u) => console.log(u.asset_id, 'updated')) * console.log(view.midpoint(tokenA)) * ``` */ export declare class OrderbookEngine { private readonly ws; private readonly state; private readonly views; private readonly handlers; constructor(config: OrderbookEngineConfig); /** Subscribe to orderbook updates. Accepts token IDs, slugs, or condition IDs. */ subscribe(identifiers: string[]): Promise; /** Register an engine-level event handler (fires for all tokens). */ on(event: 'update', handler: EngineHandler): this; on(event: 'price', handler: EngineHandler): this; on(event: 'ready', handler: EngineHandler): this; /** Remove an engine-level event handler. */ off(event: 'update' | 'price' | 'ready', handler: (...args: any[]) => void): this; /** Create a filtered view. Only receives updates for the specified tokens. */ view(tokenIds: string[]): EngineView; /** Get the full book for any token. */ book(tokenId: string): { bids: OrderbookLevel[]; asks: OrderbookLevel[]; } | undefined; /** Get the midpoint price for any token. */ midpoint(tokenId: string): number | undefined; /** Get the bid-ask spread for any token. */ spread(tokenId: string): number | undefined; /** Get the best bid for any token. */ bestBid(tokenId: string): OrderbookLevel | undefined; /** Get the best ask for any token. */ bestAsk(tokenId: string): OrderbookLevel | undefined; /** Access the underlying OrderbookWS for system event handlers (onConnect, onDisconnect, etc). */ get connection(): OrderbookWS; /** Number of tracked assets in local state. */ get size(): number; /** Close the connection and clean up all views. */ close(): void; private _routeUpdate; } export {}; //# sourceMappingURL=engine.d.ts.map