iracing-data-client
Version:
Fully-typed HTTP Client for the iRacing Data API with automatic code generation, built-in caching, smart authentication, and comprehensive error handling.
1,555 lines (1,548 loc) • 130 kB
JavaScript
import * as z6 from 'zod/mini';
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
var IRacingClientOptionsSchema = z6.object({
email: z6.optional(z6.string()),
password: z6.optional(z6.string()),
headers: z6.optional(z6.record(z6.string(), z6.string())),
fetchFn: z6.optional(z6.any()),
validateParams: z6.optional(z6.boolean())
});
var IRacingError = class extends Error {
constructor(message, status, statusText, responseData) {
super(message);
this.status = status;
this.statusText = statusText;
this.responseData = responseData;
this.name = "IRacingError";
}
get isMaintenanceMode() {
var _a;
return this.status === 503 && ((_a = this.responseData) == null ? void 0 : _a.error) === "Site Maintenance";
}
get isRateLimited() {
return this.status === 429;
}
get isUnauthorized() {
return this.status === 401;
}
};
var IRacingClient = class {
constructor(opts = {}) {
__publicField(this, "baseUrl", "https://members-ng.iracing.com");
__publicField(this, "fetchFn");
__publicField(this, "authData", null);
__publicField(this, "cookies", null);
__publicField(this, "email");
__publicField(this, "password");
__publicField(this, "presetHeaders");
__publicField(this, "validateParams");
__publicField(this, "expiringCache", /* @__PURE__ */ new Map());
var _a, _b;
const validatedOpts = IRacingClientOptionsSchema.parse(opts);
this.fetchFn = (_a = validatedOpts.fetchFn) != null ? _a : globalThis.fetch;
if (!this.fetchFn) throw new Error("No fetch available. Pass fetchFn in IRacingClientOptions.");
this.email = validatedOpts.email;
this.password = validatedOpts.password;
this.presetHeaders = validatedOpts.headers;
this.validateParams = (_b = validatedOpts.validateParams) != null ? _b : true;
if (!this.email && !this.password && !this.presetHeaders) {
throw new Error("Must provide either email/password or headers for authentication");
}
}
buildUrl(endpoint, params) {
const url = new URL(endpoint.startsWith("http") ? endpoint : `${this.baseUrl}${endpoint}`);
if (params) {
Object.entries(params).forEach(([key, value]) => {
if (value !== void 0 && value !== null) {
if (Array.isArray(value)) {
url.searchParams.append(key, value.join(","));
} else if (typeof value === "boolean") {
url.searchParams.append(key, value ? "true" : "false");
} else {
url.searchParams.append(key, String(value));
}
}
});
}
return url.toString();
}
ensureAuthenticated() {
return __async(this, null, function* () {
if (this.presetHeaders) {
return;
}
if (!this.authData && this.email && this.password) {
yield this.authenticate();
}
});
}
authenticate() {
return __async(this, null, function* () {
if (!this.email || !this.password) {
throw new Error("Email and password required for authentication");
}
const response = yield this.fetchFn(`${this.baseUrl}/auth`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
email: this.email,
password: this.password
})
});
if (!response.ok) {
const text = yield response.text().catch(() => "");
throw new Error(`Authentication failed: ${response.statusText} - ${text}`);
}
this.authData = yield response.json();
if (!this.authData) {
throw new Error("Authentication failed - no auth data received");
}
this.cookies = {
"irsso_membersv2": this.authData.ssoCookieValue,
"authtoken_members": `%7B%22authtoken%22%3A%7B%22authcode%22%3A%22${this.authData.authcode}%22%2C%22email%22%3A%22${encodeURIComponent(this.authData.email)}%22%7D%7D`
};
});
}
mapParamsToApi(params) {
if (!params) return void 0;
const mapped = {};
for (const [key, value] of Object.entries(params)) {
const snakeKey = key.replace(/[A-Z]/g, (m) => "_" + m.toLowerCase());
mapped[snakeKey] = value;
}
return mapped;
}
mapResponseFromApi(data) {
if (data === null || data === void 0) return data;
if (Array.isArray(data)) {
return data.map((item) => this.mapResponseFromApi(item));
}
if (typeof data === "object") {
const mapped = {};
for (const [key, value] of Object.entries(data)) {
const camelKey = key.replace(/_([a-z0-9])/g, (_, char) => char.toUpperCase()).replace(/-([a-z0-9])/g, (_, char) => char.toUpperCase());
mapped[camelKey] = this.mapResponseFromApi(value);
}
return mapped;
}
return data;
}
get(url, options) {
return __async(this, null, function* () {
yield this.ensureAuthenticated();
const apiParams = this.mapParamsToApi(options == null ? void 0 : options.params);
const headers = {};
if (this.presetHeaders) {
Object.assign(headers, this.presetHeaders);
} else if (this.cookies) {
const cookieString = Object.entries(this.cookies).map(([name, value]) => `${name}=${value}`).join("; ");
headers["Cookie"] = cookieString;
} else {
throw new Error("No authentication available");
}
const response = yield this.fetchFn(this.buildUrl(url, apiParams), {
headers
});
if (!response.ok) {
const text = yield response.text().catch(() => "");
let responseData = null;
try {
responseData = JSON.parse(text);
} catch (e) {
}
if (response.status === 503 && (responseData == null ? void 0 : responseData.error) === "Site Maintenance") {
throw new IRacingError(
`iRacing is currently in maintenance mode: ${responseData.message || "Service temporarily unavailable"}`,
response.status,
response.statusText,
responseData
);
}
if (response.status === 429) {
throw new IRacingError(
"Rate limit exceeded. Please wait before making more requests.",
response.status,
response.statusText,
responseData
);
}
if (response.status === 401) {
throw new IRacingError(
"Authentication failed. Please check your credentials.",
response.status,
response.statusText,
responseData
);
}
const errorMessage = (responseData == null ? void 0 : responseData.message) || (responseData == null ? void 0 : responseData.error) || text || response.statusText;
throw new IRacingError(
`Request failed: ${errorMessage}`,
response.status,
response.statusText,
responseData
);
}
const contentType = response.headers.get("content-type") || "";
if (contentType.includes("application/json")) {
const data = yield response.json();
if (data.link && data.expires) {
const s3Response = yield this.fetchFn(data.link);
if (!s3Response.ok) {
throw new Error(`Failed to fetch from S3: ${s3Response.statusText}`);
}
const s3ContentType = s3Response.headers.get("content-type") || "";
if (s3ContentType.includes("text/csv") || s3ContentType.includes("text/plain")) {
const csvText = yield s3Response.text();
return {
ContentType: "csv",
RawData: csvText,
Note: "This endpoint returns CSV data, not JSON"
};
}
const s3Data = yield s3Response.json();
const mappedData2 = this.mapResponseFromApi(s3Data);
if (options == null ? void 0 : options.schema) {
return options.schema.parse(mappedData2);
}
return mappedData2;
}
const mappedData = this.mapResponseFromApi(data);
if (options == null ? void 0 : options.schema) {
return options.schema.parse(mappedData);
}
return mappedData;
}
throw new Error(`Unexpected content type: ${contentType}`);
});
}
isAuthenticated() {
return this.authData !== null || !!this.presetHeaders;
}
getCustomerId() {
var _a, _b;
return (_b = (_a = this.authData) == null ? void 0 : _a.custId) != null ? _b : null;
}
};
var CarAssets = z6.record(z6.string(), z6.object({
carId: z6.optional(z6.nullable(z6.number())),
carRules: z6.optional(z6.nullable(z6.array(z6.unknown()))),
detailCopy: z6.optional(z6.nullable(z6.string())),
detailScreenShotImages: z6.optional(z6.nullable(z6.string())),
detailTechspecsCopy: z6.optional(z6.nullable(z6.string())),
folder: z6.optional(z6.nullable(z6.string())),
galleryImages: z6.optional(z6.nullable(z6.string())),
galleryPrefix: z6.optional(z6.nullable(z6.string())),
groupImage: z6.optional(z6.nullable(z6.string())),
groupName: z6.optional(z6.nullable(z6.string())),
largeImage: z6.optional(z6.nullable(z6.string())),
logo: z6.optional(z6.nullable(z6.string())),
smallImage: z6.optional(z6.nullable(z6.string())),
sponsorLogo: z6.optional(z6.nullable(z6.string())),
templatePath: z6.optional(z6.nullable(z6.string()))
}));
var CarGet = z6.array(z6.object({
aiEnabled: z6.boolean(),
allowNumberColors: z6.boolean(),
allowNumberFont: z6.boolean(),
allowSponsor1: z6.boolean(),
allowSponsor2: z6.boolean(),
allowWheelColor: z6.boolean(),
awardExempt: z6.boolean(),
carConfigDefs: z6.array(z6.object({
carcfg: z6.number(),
cfgSubdir: z6.nullable(z6.string()),
customPaintExt: z6.nullable(z6.string()),
name: z6.string()
})),
carConfigs: z6.array(z6.object({
carcfg: z6.number(),
trackId: z6.optional(z6.number()),
trackType: z6.optional(z6.number())
})),
carDirpath: z6.string(),
carId: z6.number(),
carName: z6.string(),
carNameAbbreviated: z6.string(),
carTypes: z6.array(z6.object({
carType: z6.string()
})),
carWeight: z6.number(),
categories: z6.array(z6.string()),
created: z6.string(),
firstSale: z6.string(),
folder: z6.string(),
forumUrl: z6.optional(z6.string()),
freeWithSubscription: z6.boolean(),
hasHeadlights: z6.boolean(),
hasMultipleDryTireTypes: z6.boolean(),
hasRainCapableTireTypes: z6.boolean(),
hp: z6.number(),
isPsPurchasable: z6.boolean(),
logo: z6.nullable(z6.string()),
maxPowerAdjustPct: z6.number(),
maxWeightPenaltyKg: z6.number(),
minPowerAdjustPct: z6.number(),
packageId: z6.number(),
patterns: z6.number(),
price: z6.number(),
priceDisplay: z6.optional(z6.string()),
rainEnabled: z6.boolean(),
retired: z6.boolean(),
searchFilters: z6.string(),
sku: z6.number(),
smallImage: z6.string(),
sponsorLogo: z6.nullable(z6.string()),
carMake: z6.optional(z6.string()),
carModel: z6.optional(z6.string()),
paintRules: z6.optional(z6.record(z6.string(), z6.unknown())),
siteUrl: z6.optional(z6.string())
}));
var CarAssetsParamsSchema = z6.object({});
var CarGetParamsSchema = z6.object({});
// src/car/service.ts
var CarService = class {
constructor(client) {
this.client = client;
}
/**
* assets
* @see https://members-ng.iracing.com/data/car/assets
* @sample car.assets.json
*/
assets() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/car/assets", { schema: CarAssets });
});
}
/**
* get
* @see https://members-ng.iracing.com/data/car/get
* @sample car.get.json
*/
get() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/car/get", { schema: CarGet });
});
}
};
z6.object({
carDirpath: z6.string(),
// maps from: car_dirpath
carId: z6.number(),
// maps from: car_id
rainEnabled: z6.boolean(),
// maps from: rain_enabled
retired: z6.boolean()
});
var CarclassGet = z6.array(z6.object({
carClassId: z6.number(),
carsInClass: z6.array(z6.object({
carDirpath: z6.string(),
carId: z6.number(),
rainEnabled: z6.boolean(),
retired: z6.boolean()
})),
custId: z6.number(),
name: z6.string(),
rainEnabled: z6.boolean(),
relativeSpeed: z6.number(),
shortName: z6.string()
}));
var CarclassGetParamsSchema = z6.object({});
// src/carclass/service.ts
var CarclassService = class {
constructor(client) {
this.client = client;
}
/**
* get
* @see https://members-ng.iracing.com/data/carclass/get
* @sample carclass.get.json
*/
get() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/carclass/get", { schema: CarclassGet });
});
}
};
var ConstantsCategories = z6.array(z6.object({
label: z6.string(),
value: z6.number()
}));
var ConstantsDivisions = z6.array(z6.object({
label: z6.string(),
value: z6.number()
}));
var ConstantsEventTypes = z6.array(z6.object({
label: z6.string(),
value: z6.number()
}));
var ConstantsCategoriesParamsSchema = z6.object({});
var ConstantsDivisionsParamsSchema = z6.object({});
var ConstantsEventTypesParamsSchema = z6.object({});
// src/constants/service.ts
var ConstantsService = class {
constructor(client) {
this.client = client;
}
/**
* categories
* @see https://members-ng.iracing.com/data/constants/categories
* @sample constants.categories.json
*/
categories() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/constants/categories", { schema: ConstantsCategories });
});
}
/**
* divisions
* @see https://members-ng.iracing.com/data/constants/divisions
* @sample constants.divisions.json
*/
divisions() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/constants/divisions", { schema: ConstantsDivisions });
});
}
/**
* event_types
* @see https://members-ng.iracing.com/data/constants/event_types
* @sample constants.event_types.json
*/
eventTypes() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/constants/event_types", { schema: ConstantsEventTypes });
});
}
};
var DriverStatsByCategoryOval = z6.object({
ContentType: z6.literal("csv"),
RawData: z6.string(),
Note: z6.string()
});
var DriverStatsByCategorySportsCar = z6.object({
ContentType: z6.literal("csv"),
RawData: z6.string(),
Note: z6.string()
});
var DriverStatsByCategoryFormulaCar = z6.object({
ContentType: z6.literal("csv"),
RawData: z6.string(),
Note: z6.string()
});
var DriverStatsByCategoryRoad = z6.object({
ContentType: z6.literal("csv"),
RawData: z6.string(),
Note: z6.string()
});
var DriverStatsByCategoryDirtOval = z6.object({
ContentType: z6.literal("csv"),
RawData: z6.string(),
Note: z6.string()
});
var DriverStatsByCategoryDirtRoad = z6.object({
ContentType: z6.literal("csv"),
RawData: z6.string(),
Note: z6.string()
});
var DriverStatsByCategoryOvalParamsSchema = z6.object({});
var DriverStatsByCategorySportsCarParamsSchema = z6.object({});
var DriverStatsByCategoryFormulaCarParamsSchema = z6.object({});
var DriverStatsByCategoryRoadParamsSchema = z6.object({});
var DriverStatsByCategoryDirtOvalParamsSchema = z6.object({});
var DriverStatsByCategoryDirtRoadParamsSchema = z6.object({});
// src/driver-stats-by-category/service.ts
var DriverStatsByCategoryService = class {
constructor(client) {
this.client = client;
}
/**
* oval
* @see https://members-ng.iracing.com/data/driver_stats_by_category/oval
* @sample driver_stats_by_category.oval.json
*/
oval() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/driver_stats_by_category/oval", { schema: DriverStatsByCategoryOval });
});
}
/**
* sports_car
* @see https://members-ng.iracing.com/data/driver_stats_by_category/sports_car
* @sample driver_stats_by_category.sports_car.json
*/
sportsCar() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/driver_stats_by_category/sports_car", { schema: DriverStatsByCategorySportsCar });
});
}
/**
* formula_car
* @see https://members-ng.iracing.com/data/driver_stats_by_category/formula_car
* @sample driver_stats_by_category.formula_car.json
*/
formulaCar() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/driver_stats_by_category/formula_car", { schema: DriverStatsByCategoryFormulaCar });
});
}
/**
* road
* @see https://members-ng.iracing.com/data/driver_stats_by_category/road
* @sample driver_stats_by_category.road.json
*/
road() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/driver_stats_by_category/road", { schema: DriverStatsByCategoryRoad });
});
}
/**
* dirt_oval
* @see https://members-ng.iracing.com/data/driver_stats_by_category/dirt_oval
* @sample driver_stats_by_category.dirt_oval.json
*/
dirtOval() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/driver_stats_by_category/dirt_oval", { schema: DriverStatsByCategoryDirtOval });
});
}
/**
* dirt_road
* @see https://members-ng.iracing.com/data/driver_stats_by_category/dirt_road
* @sample driver_stats_by_category.dirt_road.json
*/
dirtRoad() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/driver_stats_by_category/dirt_road", { schema: DriverStatsByCategoryDirtRoad });
});
}
};
var HostedCombinedSessions = z6.object({
subscribed: z6.boolean(),
sequence: z6.number(),
sessions: z6.array(z6.object({
numDrivers: z6.number(),
numSpotters: z6.number(),
numSpectators: z6.number(),
numBroadcasters: z6.number(),
availableReservedBroadcasterSlots: z6.number(),
numSpectatorSlots: z6.number(),
availableSpectatorSlots: z6.number(),
canBroadcast: z6.boolean(),
canWatch: z6.boolean(),
canSpot: z6.boolean(),
elig: z6.object({
sessionFull: z6.boolean(),
canSpot: z6.boolean(),
canWatch: z6.boolean(),
canDrive: z6.boolean(),
hasSessPassword: z6.boolean(),
needsPurchase: z6.boolean(),
ownCar: z6.boolean(),
ownTrack: z6.boolean(),
purchaseSkus: z6.array(z6.number()),
registered: z6.boolean()
}),
driverChanges: z6.boolean(),
restrictViewing: z6.boolean(),
maxUsers: z6.number(),
privateSessionId: z6.number(),
sessionId: z6.number(),
subsessionId: z6.number(),
passwordProtected: z6.boolean(),
sessionName: z6.string(),
sessionDesc: z6.optional(z6.string()),
openRegExpires: z6.string(),
launchAt: z6.string(),
fullCourseCautions: z6.boolean(),
numFastTows: z6.number(),
rollingStarts: z6.boolean(),
restarts: z6.number(),
multiclassType: z6.number(),
pitsInUse: z6.number(),
carsLeft: z6.number(),
maxDrivers: z6.number(),
hardcoreLevel: z6.number(),
practiceLength: z6.number(),
loneQualify: z6.boolean(),
qualifyLaps: z6.number(),
qualifyLength: z6.number(),
warmupLength: z6.number(),
raceLaps: z6.number(),
raceLength: z6.number(),
timeLimit: z6.number(),
restrictResults: z6.boolean(),
incidentLimit: z6.number(),
incidentWarnMode: z6.number(),
incidentWarnParam1: z6.number(),
incidentWarnParam2: z6.number(),
unsportConductRuleMode: z6.number(),
connectionBlackFlag: z6.boolean(),
luckyDog: z6.boolean(),
minTeamDrivers: z6.number(),
maxTeamDrivers: z6.number(),
qualifierMustStartRace: z6.boolean(),
driverChangeRule: z6.number(),
fixedSetup: z6.boolean(),
entryCount: z6.number(),
leagueId: z6.number(),
leagueSeasonId: z6.number(),
sessionType: z6.number(),
orderId: z6.number(),
minLicenseLevel: z6.number(),
maxLicenseLevel: z6.number(),
status: z6.number(),
paceCarId: z6.nullable(z6.number()),
paceCarClassId: z6.nullable(z6.number()),
numOptLaps: z6.number(),
damageModel: z6.number(),
doNotPaintCars: z6.boolean(),
greenWhiteCheckeredLimit: z6.number(),
doNotCountCautionLaps: z6.boolean(),
consecCautionsSingleFile: z6.boolean(),
consecCautionWithinNlaps: z6.number(),
noLapperWaveArounds: z6.boolean(),
shortParadeLap: z6.boolean(),
startOnQualTire: z6.boolean(),
telemetryRestriction: z6.number(),
telemetryForceToDisk: z6.number(),
maxAiDrivers: z6.number(),
aiAvoidPlayers: z6.boolean(),
adaptiveAiEnabled: z6.boolean(),
adaptiveAiDifficulty: z6.optional(z6.number()),
mustUseDiffTireTypesInRace: z6.boolean(),
startZone: z6.boolean(),
enablePitlaneCollisions: z6.boolean(),
disallowVirtualMirror: z6.boolean(),
maxVisorTearoffs: z6.number(),
categoryId: z6.number(),
category: z6.string(),
sessionFull: z6.boolean(),
host: z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
})
}),
track: z6.object({
categoryId: z6.number(),
configName: z6.optional(z6.string()),
trackId: z6.number(),
trackName: z6.string()
}),
weather: z6.object({
allowFog: z6.boolean(),
forecastOptions: z6.optional(z6.object({
forecastType: z6.number(),
precipitation: z6.number(),
skies: z6.number(),
stopPrecip: z6.number(),
temperature: z6.number(),
weatherSeed: z6.number(),
windDir: z6.number(),
windSpeed: z6.number()
})),
precipOption: z6.number(),
relHumidity: z6.number(),
simulatedStartTime: z6.string(),
simulatedTimeMultiplier: z6.number(),
simulatedTimeOffsets: z6.array(z6.number()),
skies: z6.number(),
tempUnits: z6.number(),
tempValue: z6.number(),
timeOfDay: z6.number(),
trackWater: z6.number(),
version: z6.number(),
weatherSummary: z6.optional(z6.object({
maxPrecipRate: z6.number(),
maxPrecipRateDesc: z6.string(),
precipChance: z6.number(),
skiesHigh: z6.number(),
skiesLow: z6.number(),
tempHigh: z6.number(),
tempLow: z6.number(),
tempUnits: z6.number(),
windDir: z6.number(),
windHigh: z6.number(),
windLow: z6.number(),
windUnits: z6.number()
})),
weatherUrl: z6.optional(z6.string()),
windDir: z6.number(),
windUnits: z6.number(),
windValue: z6.number(),
fog: z6.optional(z6.number()),
type: z6.optional(z6.number())
}),
trackState: z6.object({
leaveMarbles: z6.boolean(),
practiceRubber: z6.number(),
qualifyRubber: z6.number(),
raceRubber: z6.number(),
warmupRubber: z6.number()
}),
farm: z6.object({
farmId: z6.number(),
displayName: z6.string(),
imagePath: z6.string(),
displayed: z6.boolean()
}),
admins: z6.array(z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
})
})),
allowedTeams: z6.array(z6.unknown()),
allowedLeagues: z6.array(z6.unknown()),
cars: z6.array(z6.object({
carId: z6.number(),
carName: z6.string(),
carClassId: z6.number(),
carClassName: z6.string(),
maxPctFuelFill: z6.number(),
weightPenaltyKg: z6.number(),
powerAdjustPct: z6.number(),
maxDryTireSets: z6.number(),
packageId: z6.number()
})),
countByCarId: z6.object({
112: z6.optional(z6.number()),
117: z6.optional(z6.number()),
118: z6.optional(z6.number()),
119: z6.optional(z6.number()),
128: z6.optional(z6.number()),
132: z6.optional(z6.number()),
133: z6.optional(z6.number()),
143: z6.optional(z6.number()),
146: z6.optional(z6.number()),
147: z6.optional(z6.number()),
150: z6.optional(z6.number()),
156: z6.optional(z6.number()),
157: z6.optional(z6.number()),
169: z6.optional(z6.number()),
173: z6.optional(z6.number()),
176: z6.optional(z6.number()),
184: z6.optional(z6.number()),
185: z6.optional(z6.number()),
188: z6.optional(z6.number()),
189: z6.optional(z6.number()),
190: z6.optional(z6.number()),
192: z6.optional(z6.number()),
194: z6.optional(z6.number()),
195: z6.optional(z6.number())
}),
countByCarClassId: z6.object({
0: z6.optional(z6.number()),
2708: z6.optional(z6.number()),
3104: z6.optional(z6.number()),
4073: z6.optional(z6.number()),
4076: z6.optional(z6.number()),
4083: z6.optional(z6.number()),
4084: z6.optional(z6.number()),
4085: z6.optional(z6.number())
}),
carTypes: z6.array(z6.object({
carType: z6.string()
})),
trackTypes: z6.array(z6.object({
trackType: z6.string()
})),
licenseGroupTypes: z6.array(z6.object({
licenseGroupType: z6.number()
})),
eventTypes: z6.array(z6.object({
eventType: z6.number()
})),
sessionTypes: z6.array(z6.object({
sessionType: z6.number()
})),
canJoin: z6.boolean(),
sessAdmin: z6.boolean(),
friends: z6.array(z6.unknown()),
watched: z6.array(z6.unknown()),
endTime: z6.string(),
teamEntryCount: z6.number(),
isHeatRacing: z6.boolean(),
populated: z6.boolean(),
broadcaster: z6.boolean(),
minIr: z6.number(),
maxIr: z6.number(),
aiMinSkill: z6.optional(z6.number()),
aiMaxSkill: z6.optional(z6.number()),
aiRosterName: z6.optional(z6.string())
})),
success: z6.boolean(),
packageId: z6.optional(z6.number())
});
var HostedSessions = z6.object({
subscribed: z6.boolean(),
sessions: z6.array(z6.object({
adaptiveAiEnabled: z6.boolean(),
admins: z6.array(z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
})
})),
aiAvoidPlayers: z6.boolean(),
aiMaxSkill: z6.optional(z6.number()),
aiMinSkill: z6.optional(z6.number()),
aiRosterName: z6.optional(z6.string()),
allowedLeagues: z6.array(z6.unknown()),
allowedTeams: z6.array(z6.unknown()),
carTypes: z6.array(z6.object({
carType: z6.string()
})),
cars: z6.array(z6.object({
carId: z6.number(),
carName: z6.string(),
carClassId: z6.number(),
carClassName: z6.string(),
maxPctFuelFill: z6.number(),
weightPenaltyKg: z6.number(),
powerAdjustPct: z6.number(),
maxDryTireSets: z6.number(),
packageId: z6.number()
})),
carsLeft: z6.number(),
category: z6.string(),
categoryId: z6.number(),
connectionBlackFlag: z6.boolean(),
consecCautionWithinNlaps: z6.number(),
consecCautionsSingleFile: z6.boolean(),
countByCarClassId: z6.object({
0: z6.optional(z6.number()),
2708: z6.optional(z6.number()),
3104: z6.optional(z6.number()),
4073: z6.optional(z6.number()),
4076: z6.optional(z6.number()),
4083: z6.optional(z6.number()),
4084: z6.optional(z6.number()),
4085: z6.optional(z6.number())
}),
countByCarId: z6.object({
112: z6.optional(z6.number()),
117: z6.optional(z6.number()),
118: z6.optional(z6.number()),
119: z6.optional(z6.number()),
128: z6.optional(z6.number()),
132: z6.optional(z6.number()),
133: z6.optional(z6.number()),
143: z6.optional(z6.number()),
146: z6.optional(z6.number()),
147: z6.optional(z6.number()),
150: z6.optional(z6.number()),
156: z6.optional(z6.number()),
157: z6.optional(z6.number()),
169: z6.optional(z6.number()),
173: z6.optional(z6.number()),
176: z6.optional(z6.number()),
184: z6.optional(z6.number()),
185: z6.optional(z6.number()),
188: z6.optional(z6.number()),
189: z6.optional(z6.number()),
190: z6.optional(z6.number()),
192: z6.optional(z6.number()),
194: z6.optional(z6.number()),
195: z6.optional(z6.number())
}),
damageModel: z6.number(),
disallowVirtualMirror: z6.boolean(),
doNotCountCautionLaps: z6.boolean(),
doNotPaintCars: z6.boolean(),
driverChangeRule: z6.number(),
driverChanges: z6.boolean(),
elig: z6.object({
sessionFull: z6.boolean(),
canSpot: z6.boolean(),
canWatch: z6.boolean(),
canDrive: z6.boolean(),
hasSessPassword: z6.boolean(),
needsPurchase: z6.boolean(),
ownCar: z6.boolean(),
ownTrack: z6.boolean(),
purchaseSkus: z6.array(z6.number()),
registered: z6.boolean()
}),
enablePitlaneCollisions: z6.boolean(),
entryCount: z6.number(),
eventTypes: z6.array(z6.object({
eventType: z6.number()
})),
farm: z6.object({
farmId: z6.number(),
displayName: z6.string(),
imagePath: z6.string(),
displayed: z6.boolean()
}),
fixedSetup: z6.boolean(),
fullCourseCautions: z6.boolean(),
greenWhiteCheckeredLimit: z6.number(),
hardcoreLevel: z6.number(),
host: z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
})
}),
incidentLimit: z6.number(),
incidentWarnMode: z6.number(),
incidentWarnParam1: z6.number(),
incidentWarnParam2: z6.number(),
launchAt: z6.string(),
leagueId: z6.number(),
leagueSeasonId: z6.number(),
licenseGroupTypes: z6.array(z6.object({
licenseGroupType: z6.number()
})),
loneQualify: z6.boolean(),
luckyDog: z6.boolean(),
maxAiDrivers: z6.number(),
maxDrivers: z6.number(),
maxIr: z6.number(),
maxLicenseLevel: z6.number(),
maxTeamDrivers: z6.number(),
maxVisorTearoffs: z6.number(),
minIr: z6.number(),
minLicenseLevel: z6.number(),
minTeamDrivers: z6.number(),
multiclassType: z6.number(),
mustUseDiffTireTypesInRace: z6.boolean(),
noLapperWaveArounds: z6.boolean(),
numFastTows: z6.number(),
numOptLaps: z6.number(),
openRegExpires: z6.string(),
orderId: z6.number(),
paceCarClassId: z6.nullable(z6.number()),
paceCarId: z6.nullable(z6.number()),
passwordProtected: z6.boolean(),
pitsInUse: z6.number(),
practiceLength: z6.number(),
privateSessionId: z6.number(),
qualifierMustStartRace: z6.boolean(),
qualifyLaps: z6.number(),
qualifyLength: z6.number(),
raceLaps: z6.number(),
raceLength: z6.number(),
restarts: z6.number(),
restrictResults: z6.boolean(),
restrictViewing: z6.boolean(),
rollingStarts: z6.boolean(),
sessionFull: z6.boolean(),
sessionId: z6.number(),
sessionName: z6.string(),
sessionType: z6.number(),
sessionTypes: z6.array(z6.object({
sessionType: z6.number()
})),
shortParadeLap: z6.boolean(),
startOnQualTire: z6.boolean(),
startZone: z6.boolean(),
status: z6.number(),
subsessionId: z6.number(),
teamEntryCount: z6.number(),
telemetryForceToDisk: z6.number(),
telemetryRestriction: z6.number(),
timeLimit: z6.number(),
track: z6.object({
categoryId: z6.number(),
configName: z6.optional(z6.string()),
trackId: z6.number(),
trackName: z6.string()
}),
trackState: z6.object({
leaveMarbles: z6.boolean(),
practiceRubber: z6.number(),
qualifyRubber: z6.number(),
raceRubber: z6.number(),
warmupRubber: z6.number()
}),
trackTypes: z6.array(z6.object({
trackType: z6.string()
})),
unsportConductRuleMode: z6.number(),
warmupLength: z6.number(),
weather: z6.object({
allowFog: z6.boolean(),
forecastOptions: z6.optional(z6.object({
forecastType: z6.number(),
precipitation: z6.number(),
skies: z6.number(),
stopPrecip: z6.number(),
temperature: z6.number(),
weatherSeed: z6.number(),
windDir: z6.number(),
windSpeed: z6.number()
})),
precipOption: z6.number(),
relHumidity: z6.number(),
simulatedStartTime: z6.string(),
simulatedTimeMultiplier: z6.number(),
simulatedTimeOffsets: z6.array(z6.number()),
skies: z6.number(),
tempUnits: z6.number(),
tempValue: z6.number(),
timeOfDay: z6.number(),
trackWater: z6.number(),
version: z6.number(),
weatherSummary: z6.optional(z6.object({
maxPrecipRate: z6.number(),
maxPrecipRateDesc: z6.string(),
precipChance: z6.number(),
skiesHigh: z6.number(),
skiesLow: z6.number(),
tempHigh: z6.number(),
tempLow: z6.number(),
tempUnits: z6.number(),
windDir: z6.number(),
windHigh: z6.number(),
windLow: z6.number(),
windUnits: z6.number()
})),
weatherUrl: z6.optional(z6.string()),
windDir: z6.number(),
windUnits: z6.number(),
windValue: z6.number(),
fog: z6.optional(z6.number()),
type: z6.optional(z6.number())
}),
adaptiveAiDifficulty: z6.optional(z6.number()),
sessionDesc: z6.optional(z6.string())
})),
success: z6.boolean()
});
var HostedCombinedSessionsParamsSchema = z6.object({
packageId: z6.optional(z6.number())
// If set, return only sessions using this car or track package ID. // maps to: package_id
});
var HostedSessionsParamsSchema = z6.object({});
// src/hosted/service.ts
var HostedService = class {
constructor(client) {
this.client = client;
}
/**
* combined_sessions
* @see https://members-ng.iracing.com/data/hosted/combined_sessions
* @sample hosted.combined_sessions.json
*/
combinedSessions(params) {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/hosted/combined_sessions", { params, schema: HostedCombinedSessions });
});
}
/**
* sessions
* @see https://members-ng.iracing.com/data/hosted/sessions
* @sample hosted.sessions.json
*/
sessions() {
return __async(this, null, function* () {
return this.client.get("https://members-ng.iracing.com/data/hosted/sessions", { schema: HostedSessions });
});
}
};
var LeagueCustLeagueSessions = z6.object({
mine: z6.boolean(),
subscribed: z6.boolean(),
sequence: z6.number(),
sessions: z6.array(z6.object({
numDrivers: z6.number(),
numSpotters: z6.number(),
numSpectators: z6.number(),
numBroadcasters: z6.number(),
availableReservedBroadcasterSlots: z6.number(),
numSpectatorSlots: z6.number(),
availableSpectatorSlots: z6.number(),
canBroadcast: z6.boolean(),
canWatch: z6.boolean(),
canSpot: z6.boolean(),
elig: z6.object({
sessionFull: z6.boolean(),
canSpot: z6.boolean(),
canWatch: z6.boolean(),
canDrive: z6.boolean(),
hasSessPassword: z6.boolean(),
needsPurchase: z6.boolean(),
ownCar: z6.boolean(),
ownTrack: z6.boolean(),
purchaseSkus: z6.array(z6.number()),
registered: z6.boolean()
}),
driverChanges: z6.boolean(),
restrictViewing: z6.boolean(),
maxUsers: z6.number(),
privateSessionId: z6.number(),
sessionId: z6.optional(z6.number()),
subsessionId: z6.optional(z6.number()),
passwordProtected: z6.boolean(),
sessionName: z6.string(),
openRegExpires: z6.optional(z6.string()),
launchAt: z6.string(),
fullCourseCautions: z6.boolean(),
numFastTows: z6.number(),
rollingStarts: z6.boolean(),
restarts: z6.number(),
multiclassType: z6.number(),
pitsInUse: z6.optional(z6.number()),
carsLeft: z6.optional(z6.number()),
maxDrivers: z6.number(),
hardcoreLevel: z6.number(),
practiceLength: z6.number(),
loneQualify: z6.boolean(),
qualifyLaps: z6.number(),
qualifyLength: z6.number(),
warmupLength: z6.number(),
raceLaps: z6.number(),
raceLength: z6.number(),
timeLimit: z6.number(),
restrictResults: z6.boolean(),
incidentLimit: z6.number(),
incidentWarnMode: z6.number(),
incidentWarnParam1: z6.number(),
incidentWarnParam2: z6.number(),
unsportConductRuleMode: z6.number(),
connectionBlackFlag: z6.boolean(),
luckyDog: z6.boolean(),
minTeamDrivers: z6.number(),
maxTeamDrivers: z6.number(),
qualifierMustStartRace: z6.boolean(),
driverChangeRule: z6.number(),
fixedSetup: z6.boolean(),
entryCount: z6.number(),
leagueId: z6.number(),
leagueName: z6.string(),
leagueSeasonId: z6.number(),
leagueSeasonName: z6.string(),
sessionType: z6.number(),
orderId: z6.number(),
minLicenseLevel: z6.number(),
maxLicenseLevel: z6.number(),
status: z6.number(),
paceCarId: z6.nullable(z6.number()),
paceCarClassId: z6.nullable(z6.number()),
numOptLaps: z6.number(),
damageModel: z6.number(),
doNotPaintCars: z6.boolean(),
greenWhiteCheckeredLimit: z6.number(),
doNotCountCautionLaps: z6.boolean(),
consecCautionsSingleFile: z6.boolean(),
consecCautionWithinNlaps: z6.number(),
noLapperWaveArounds: z6.boolean(),
shortParadeLap: z6.boolean(),
startOnQualTire: z6.boolean(),
telemetryRestriction: z6.number(),
telemetryForceToDisk: z6.number(),
maxAiDrivers: z6.number(),
aiAvoidPlayers: z6.boolean(),
adaptiveAiEnabled: z6.boolean(),
adaptiveAiDifficulty: z6.number(),
mustUseDiffTireTypesInRace: z6.boolean(),
startZone: z6.boolean(),
enablePitlaneCollisions: z6.boolean(),
disallowVirtualMirror: z6.boolean(),
maxVisorTearoffs: z6.number(),
categoryId: z6.number(),
category: z6.string(),
sessionFull: z6.optional(z6.boolean()),
host: z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
})
}),
track: z6.object({
categoryId: z6.number(),
configName: z6.optional(z6.string()),
trackId: z6.number(),
trackName: z6.string()
}),
weather: z6.object({
allowFog: z6.boolean(),
forecastOptions: z6.optional(z6.object({
forecastType: z6.number(),
precipitation: z6.number(),
skies: z6.number(),
stopPrecip: z6.number(),
temperature: z6.number(),
weatherSeed: z6.number(),
windDir: z6.number(),
windSpeed: z6.number()
})),
precipOption: z6.number(),
relHumidity: z6.number(),
simulatedStartTime: z6.string(),
simulatedTimeMultiplier: z6.number(),
simulatedTimeOffsets: z6.array(z6.number()),
skies: z6.number(),
tempUnits: z6.number(),
tempValue: z6.number(),
timeOfDay: z6.number(),
trackWater: z6.number(),
version: z6.number(),
weatherSummary: z6.optional(z6.object({
maxPrecipRate: z6.number(),
maxPrecipRateDesc: z6.string(),
precipChance: z6.number(),
skiesHigh: z6.number(),
skiesLow: z6.number(),
tempHigh: z6.number(),
tempLow: z6.number(),
tempUnits: z6.number(),
windDir: z6.number(),
windHigh: z6.number(),
windLow: z6.number(),
windUnits: z6.number()
})),
weatherUrl: z6.optional(z6.string()),
windDir: z6.number(),
windUnits: z6.number(),
windValue: z6.number(),
fog: z6.optional(z6.number()),
type: z6.optional(z6.number())
}),
trackState: z6.object({
leaveMarbles: z6.boolean(),
practiceRubber: z6.number(),
qualifyRubber: z6.number(),
raceRubber: z6.number(),
warmupRubber: z6.number()
}),
farm: z6.object({
farmId: z6.number(),
displayName: z6.string(),
imagePath: z6.string(),
displayed: z6.boolean()
}),
admins: z6.array(z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
})
})),
allowedTeams: z6.array(z6.unknown()),
allowedLeagues: z6.array(z6.number()),
cars: z6.array(z6.object({
carId: z6.number(),
carName: z6.string(),
carClassId: z6.number(),
carClassName: z6.string(),
maxPctFuelFill: z6.number(),
weightPenaltyKg: z6.number(),
powerAdjustPct: z6.number(),
maxDryTireSets: z6.number(),
qualSetupId: z6.optional(z6.number()),
qualSetupFilename: z6.optional(z6.string()),
raceSetupId: z6.optional(z6.number()),
raceSetupFilename: z6.optional(z6.string()),
packageId: z6.number()
})),
heatSesInfo: z6.optional(z6.object({
consolationDeltaMaxFieldSize: z6.number(),
consolationDeltaSessionLaps: z6.number(),
consolationDeltaSessionLengthMinutes: z6.number(),
consolationFirstMaxFieldSize: z6.number(),
consolationFirstSessionLaps: z6.number(),
consolationFirstSessionLengthMinutes: z6.number(),
consolationNumPositionToInvert: z6.number(),
consolationNumToConsolation: z6.number(),
consolationNumToMain: z6.number(),
consolationRunAlways: z6.boolean(),
consolationScoresChampPoints: z6.boolean(),
created: z6.string(),
custId: z6.number(),
description: z6.optional(z6.string()),
heatCautionType: z6.number(),
heatInfoId: z6.number(),
heatInfoName: z6.string(),
heatLaps: z6.number(),
heatLengthMinutes: z6.number(),
heatMaxFieldSize: z6.number(),
heatNumFromEachToMain: z6.number(),
heatNumPositionToInvert: z6.number(),
heatScoresChampPoints: z6.boolean(),
heatSessionMinutesEstimate: z6.number(),
hidden: z6.boolean(),
mainLaps: z6.number(),
mainLengthMinutes: z6.number(),
mainMaxFieldSize: z6.number(),
mainNumPositionToInvert: z6.number(),
maxEntrants: z6.number(),
openPractice: z6.boolean(),
preMainPracticeLengthMinutes: z6.number(),
preQualNumToMain: z6.number(),
preQualPracticeLengthMinutes: z6.number(),
qualCautionType: z6.number(),
qualLaps: z6.number(),
qualLengthMinutes: z6.number(),
qualNumToMain: z6.number(),
qualOpenDelaySeconds: z6.number(),
qualScoresChampPoints: z6.boolean(),
qualScoring: z6.number(),
qualStyle: z6.number(),
raceStyle: z6.number()
})),
countByCarId: z6.optional(z6.object({
67: z6.optional(z6.number()),
106: z6.optional(z6.number()),
190: z6.optional(z6.number()),
192: z6.optional(z6.number()),
203: z6.optional(z6.number())
})),
countByCarClassId: z6.optional(z6.object({
0: z6.number()
})),
carTypes: z6.array(z6.object({
carType: z6.string()
})),
trackTypes: z6.array(z6.object({
trackType: z6.string()
})),
licenseGroupTypes: z6.array(z6.object({
licenseGroupType: z6.number()
})),
eventTypes: z6.array(z6.object({
eventType: z6.number()
})),
sessionTypes: z6.array(z6.object({
sessionType: z6.number()
})),
canJoin: z6.boolean(),
image: z6.optional(z6.object({
smallLogo: z6.string(),
largeLogo: z6.nullable(z6.string())
})),
owner: z6.boolean(),
admin: z6.boolean(),
friends: z6.optional(z6.array(z6.unknown())),
watched: z6.optional(z6.array(z6.unknown())),
endTime: z6.string(),
populated: z6.boolean(),
teamEntryCount: z6.number(),
isHeatRacing: z6.boolean(),
broadcaster: z6.boolean(),
minIr: z6.number(),
maxIr: z6.number(),
sessionDesc: z6.optional(z6.string()),
raceLengthType: z6.optional(z6.number())
})),
success: z6.boolean(),
packageId: z6.optional(z6.number())
});
var LeagueDirectory = z6.object({
resultsPage: z6.array(z6.object({
leagueId: z6.number(),
ownerId: z6.number(),
leagueName: z6.string(),
created: z6.string(),
about: z6.optional(z6.string()),
url: z6.optional(z6.string()),
rosterCount: z6.number(),
recruiting: z6.boolean(),
isAdmin: z6.boolean(),
isMember: z6.boolean(),
pendingApplication: z6.boolean(),
pendingInvitation: z6.boolean(),
owner: z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
}),
carNumber: z6.nullable(z6.string()),
nickName: z6.nullable(z6.string())
})
})),
success: z6.boolean(),
lowerbound: z6.number(),
upperbound: z6.number(),
rowCount: z6.number()
});
var LeagueGet = z6.object({
leagueId: z6.number(),
ownerId: z6.number(),
leagueName: z6.string(),
created: z6.string(),
hidden: z6.boolean(),
message: z6.string(),
about: z6.string(),
recruiting: z6.boolean(),
privateWall: z6.boolean(),
privateRoster: z6.boolean(),
privateSchedule: z6.boolean(),
privateResults: z6.boolean(),
isOwner: z6.boolean(),
isAdmin: z6.boolean(),
rosterCount: z6.number(),
owner: z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
}),
carNumber: z6.nullable(z6.unknown()),
nickName: z6.nullable(z6.unknown())
}),
image: z6.object({
smallLogo: z6.nullable(z6.unknown()),
largeLogo: z6.nullable(z6.unknown())
}),
tags: z6.object({
categorized: z6.array(z6.object({
categoryId: z6.number(),
name: z6.string(),
limit: z6.nullable(z6.number()),
tags: z6.array(z6.object({
tagId: z6.number(),
tagName: z6.string()
}))
})),
notCategorized: z6.array(z6.unknown())
}),
leagueApplications: z6.array(z6.unknown()),
pendingRequests: z6.array(z6.unknown()),
isMember: z6.boolean(),
isApplicant: z6.boolean(),
isInvite: z6.boolean(),
isIgnored: z6.boolean(),
roster: z6.array(z6.object({
custId: z6.number(),
displayName: z6.string(),
helmet: z6.object({
pattern: z6.number(),
color1: z6.string(),
color2: z6.string(),
color3: z6.string(),
faceType: z6.number(),
helmetType: z6.number()
}),
owner: z6.boolean(),
admin: z6.boolean(),
leagueMailOptOut: z6.boolean(),
leaguePmOptOut: z6.boolean(),
leagueMemberSince: z6.string(),
carNumber: z6.nullable(z6.string()),
nickName: z6.string()
}))
});
var LeagueGetPointsSystems = z6.object({
subscribed: z6.boolean(),
success: z6.boolean(),
pointsSystems: z6.array(z6.object({
pointsSystemId: z6.number(),
name: z6.string(),
description: z6.string(),
leagueId: z6.number(),
retired: z6.boolean(),
iracingSystem: z6.boolean()
})),
leagueId: z6.number(),
seasonId: z6.optional(z6.number())
});
var LeagueMembership = z6.array(z6.object({
leagueId: z6.number(),
leagueName: z6.string(),
owner: z6.boolean(),
admin: z6.boolean(),
leagueMailOptOut: z6.boolean(),
leaguePmOptOut: z6.boolean(),
carNumber: z6.nullable(z6.string()),
nickName: z6.nullable(z6.string())
}));
var LeagueRoster = z6.object({
type: z6.string(),
data: z6.object({
subscribed: z6.boolean(),
success: z6.boolean(),
rosterCount: z6.number(),
leagueId: z6.number()
}),
dataUrl: z6.string()
});
var LeagueSeasons = z6.object({
subscribed: z6.boolean(),
seasons: z6.array(z6.object({
leagueId: z6.number(),
seasonId: z6.number(),
pointsSystemId: z6.number(),
seasonName: z6.string(),
active: z6.boolean(),
hidden: z6.boolean(),
numDrops: z6.number(),
noDropsOnOrAfterRaceNum: z6.number(),
pointsCars: z6.array(z6.object({
carId: z6.number(),
carName: z6.string()
})),