Skip to content

Track Information

Examples for working with track data and assets.

import { IRacingDataClient } from 'iracing-data-client';
const iracing = new IRacingDataClient({
auth: {
type: 'password-limited',
clientId: process.env.IRACING_CLIENT_ID!,
clientSecret: process.env.IRACING_CLIENT_SECRET!,
username: process.env.IRACING_USERNAME!,
password: process.env.IRACING_PASSWORD!,
},
});
async function getAllTracks() {
const tracks = await iracing.track.get();
// Group by category
const roadCourses = tracks.filter(t => t.categoryId === 2);
const ovals = tracks.filter(t => t.categoryId === 1);
console.log(`Total tracks: ${tracks.length}`);
console.log(`Road courses: ${roadCourses.length}`);
console.log(`Ovals: ${ovals.length}`);
// List configurations
tracks.forEach(track => {
console.log(`\n${track.trackName}:`);
track.configs.forEach(config => {
console.log(` - ${config.configName} (${config.trackLength} ${config.lengthUnit})`);
});
});
return tracks;
}
async function getTrackAssets() {
const assets = await iracing.track.assets();
// Map assets by track ID
const assetMap = new Map();
Object.entries(assets).forEach(([trackId, asset]) => {
assetMap.set(parseInt(trackId), {
logo: asset.logo,
map: asset.trackMap,
mapLayers: asset.trackMapLayers,
folder: asset.folder,
images: {
small: asset.smallImage,
large: asset.largeImage
}
});
});
return assetMap;
}
async function findTrackByName(searchName: string) {
const tracks = await iracing.track.get();
const matches = tracks.filter(track =>
track.trackName.toLowerCase().includes(searchName.toLowerCase())
);
matches.forEach(track => {
console.log(`${track.trackName} (ID: ${track.trackId})`);
console.log(` Location: ${track.location}`);
console.log(` Configurations: ${track.configs.length}`);
});
return matches;
}
// Search for Spa
const spaTracks = await findTrackByName('spa');
async function getTrackDetails(trackId: number) {
const [tracks, assets] = await Promise.all([
iracing.track.get(),
iracing.track.assets()
]);
const track = tracks.find(t => t.trackId === trackId);
const trackAssets = assets[trackId];
if (!track) {
throw new Error(`Track ${trackId} not found`);
}
return {
info: track,
assets: trackAssets,
configurations: track.configs.map(config => ({
name: config.configName,
length: `${config.trackLength} ${config.lengthUnit}`,
turns: config.corners,
banking: config.banking,
pitStalls: config.pitStalls
}))
};
}