#!/usr/bin/env bun export interface SessionInfoMessage { type: 'session_info'; data: { trackId: number; trackName: string; trackDisplayName: string; trackLength: string; trackConfig: string; carId: number; carName: string; carNumber: string; driverName: string; driverId: number; sessionType: string; sessionNum: number; tickRate: number; sectors: Array<{ sectorNum: number; startPct: number; }>; }; } export interface TelemetryMessage { type: 'telemetry'; data: TelemetryFrame; } export interface TelemetryFrame { tick: number; sessionTime: number; lap: number; lapDistPct: number; speed: number; rpm: number; gear: number; throttle: number; brake: number; clutch: number; steer: number; lat: number; lon: number; alt: number; yaw: number; pitch: number; roll: number; lapCurrentLapTime: number; lapLastLapTime: number; lapBestLapTime: number; lapDeltaToBestLap: number; fuelLevel: number; fuelLevelPct: number; oilTemp: number; waterTemp: number; isOnTrack: boolean; playerPosition: number; playerClassPosition: number; brakeABSactive: boolean; dcBrakeBias: number; dcTractionControl: number; dcABS: number; tireTempLF: number; tireTempRF: number; tireTempLR: number; tireTempRR: number; tirePressureLF: number | null; tirePressureRF: number | null; tirePressureLR: number | null; tirePressureRR: number | null; tireWearLF: number | null; tireWearRF: number | null; tireWearLR: number | null; tireWearRR: number | null; sessionNum: number; onPitRoad: boolean; playerCarIdx: number; /** All cars' lap-distance pct at this tick (4dp) — head-to-head sector * timing needs the full 60Hz stream, not the 15Hz field snapshot. */ carIdxLapDistPct: number[]; /** irsdk_Flags bitfield (green/yellow/blue/white/checkered...). */ sessionFlags: number; /** irsdk_CarLeftRight spotter enum: 1 clear, 2 left, 3 right, 4 both, 5 two left, 6 two right. */ carLeftRight: number; } export interface LapChangeMessage { type: 'lap_change'; data: { fromLap: number; toLap: number; lapTime: number; sessionNum: number; }; } export interface StatusMessage { type: 'status'; data: { connected: boolean; initialized: boolean; error?: string; }; } export interface FieldMessage { type: 'field'; data: FieldData; } /** Live multi-car snapshot, published at ~15Hz. Parallel arrays indexed by CarIdx. */ export interface FieldData { tick: number; sessionTime: number; sessionNum: number; sessionState: number; sessionTimeRemain: number; sessionLapsRemain: number; playerCarIdx: number; paceCarIdx: number; position: number[]; classPosition: number[]; lap: number[]; lapCompleted: number[]; lapDistPct: number[]; estTime: number[]; f2Time: number[]; onPitRoad: boolean[]; trackSurface: number[]; lastLapTime: number[]; bestLapTime: number[]; } export interface OverlayDriver { carIdx: number; userName: string; teamName?: string; carNumber: string; carClassId: number; carClassShortName: string; carClassColor: number; carClassRelSpeed: number; carClassEstLapTime: number; iRating: number; licString: string; licColor: number; incidentCount: number; } export interface ClassInfo { classId: number; shortName: string; color: number; sof: number; carCount: number; } export interface SessionStateMessage { type: 'session_state'; data: SessionStateData; } /** Roster + results snapshot, published when iRacing bumps its session-info counter. */ export interface SessionStateData { sessionInfoUpdate: number; subSessionId: number; trackId: number; sessionNum: number; sessionType: string; sessionLaps: string | number; sessionTimeTotal: string | number; drivers: OverlayDriver[]; classes: ClassInfo[]; results: Array<{ carIdx: number; position: number; classPosition: number; fastestTime: number; lastTime: number; lapsComplete: number; incidents: number; }>; fastestLap: Array<{ carIdx: number; fastestTime: number; }>; } export type ServerMessage = SessionInfoMessage | TelemetryMessage | LapChangeMessage | StatusMessage | FieldMessage | SessionStateMessage; //# sourceMappingURL=telemetry-server.d.ts.map