UNPKG

betfair-node

Version:

A comprehensive Node.js TypeScript library for the Betfair Exchange API, providing both JSON-RPC API integration and real-time Exchange Stream API support for automated betting and trading applications.

145 lines 4.79 kB
import * as fs from 'fs'; import { MarketCache, StreamRunnerStatus, StreamMarketStatus, MarketChangeCallback, RawDataCallback } from './betfair-exchange-stream-api-types'; import { BetfairApiState } from './betfair-api'; import { MarketCatalogue } from './betfair-api-types'; export interface MarketRecordingConfig { outputDirectory: string; enableBasicRecording: boolean; enableRawRecording: boolean; rawFilePrefix?: string; basicFilePrefix?: string; recordingMode?: 'finite' | 'perpetual'; onAllMarketsComplete?: () => void; enrichment?: { enabled: boolean; apiState: BetfairApiState; cacheExpiryMinutes?: number; }; } export interface BasicMarketRecord { marketId: string; marketName: string; eventName: string; marketStatus: StreamMarketStatus; marketTime: string; openDate: string; totalMatched: number; inPlay: boolean; bspReconciled: boolean; complete: boolean; numberOfWinners: number; runners: BasicRunnerRecord[]; recordedAt: string; finalTotalMatched?: number; winners?: number[]; reconciled?: boolean; reconciliationTime?: string; calculatedTotalTurnover?: number; liquidityProfile?: { totalUniquePrice: number; averageSpread?: number; marketDepth: number; }; } export interface BasicRunnerRecord { id: number; name: string; status: StreamRunnerStatus; adjustmentFactor: number; lastPriceTraded: number; totalMatched: number; bsp?: number; ltp: number; tv: number; spn?: number; spf?: number; finalStatus?: StreamRunnerStatus; isWinner: boolean; reconciledVolume?: number; totalTurnover?: number; volumeWeightedPrice?: number; priceRange?: { highest: number; lowest: number; trades: number; }; tradingActivity?: [number, number][]; } export interface MarketRecorderState { config: MarketRecordingConfig; rawFileStreams: Map<string, fs.WriteStream>; basicRecords: Map<string, BasicMarketRecord>; isRecording: boolean; subscribedMarkets: Set<string>; completedMarkets: Set<string>; enrichmentCache: Map<string, { catalogue: MarketCatalogue; cachedAt: Date; }>; } /** * Creates initial market recorder state */ export declare const createMarketRecorderState: (config: MarketRecordingConfig) => MarketRecorderState; /** * Starts recording for specified markets */ export declare const startRecording: (state: MarketRecorderState, marketIds: string[]) => MarketRecorderState; export declare const registerRecorderProcessCleanup: (state: MarketRecorderState) => void; /** * Stops recording and closes all file streams */ export declare const stopRecording: (state: MarketRecorderState) => MarketRecorderState; /** * Records raw transmission data to file */ export declare const recordRawTransmission: (state: MarketRecorderState, rawData: string) => void; /** * Updates basic market record from market cache */ export declare const updateBasicRecord: (state: MarketRecorderState, marketCache: MarketCache) => void; /** * Gets completion status for all markets */ export declare const getRecordingCompletionStatus: (state: MarketRecorderState) => { totalMarkets: number; completedMarkets: number; pendingMarkets: string[]; isAllComplete: boolean; recordingMode: "finite" | "perpetual"; }; /** * Adds new markets to an existing recording session */ export declare const addMarketsToRecording: (state: MarketRecorderState, marketIds: string[]) => MarketRecorderState; /** * Creates a raw data callback for recording raw transmissions */ export declare const createRawDataCallback: (state: MarketRecorderState) => RawDataCallback; /** * Creates a market change callback that handles basic recording */ export declare const createRecordingMarketChangeCallback: (state: MarketRecorderState, originalCallback?: MarketChangeCallback) => MarketChangeCallback; /** * Gets recording status for a market */ export declare const getRecordingStatus: (state: MarketRecorderState, marketId: string) => { isRecording: boolean; hasRawStream: boolean; hasBasicRecord: boolean; rawFilePath?: string; basicFilePath?: string; }; /** * Loads a basic market record from file */ export declare const loadBasicRecord: (config: MarketRecordingConfig, marketId: string) => BasicMarketRecord | null; /** * Lists all recorded markets in the output directory */ export declare const listRecordedMarkets: (config: MarketRecordingConfig) => { basicRecords: string[]; rawRecords: string[]; }; export declare const shutdownRecorder: (state: MarketRecorderState) => MarketRecorderState; //# sourceMappingURL=market-recorder.d.ts.map