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
TypeScript
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