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,224 lines (1,215 loc) • 166 kB
JavaScript
'use strict';
var z6 = require('zod/mini');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var z6__namespace = /*#__PURE__*/_interopNamespace(z6);
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__namespace.object({
email: z6__namespace.optional(z6__namespace.string()),
password: z6__namespace.optional(z6__namespace.string()),
headers: z6__namespace.optional(z6__namespace.record(z6__namespace.string(), z6__namespace.string())),
fetchFn: z6__namespace.optional(z6__namespace.any()),
validateParams: z6__namespace.optional(z6__namespace.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__namespace.record(z6__namespace.string(), z6__namespace.object({
carId: z6__namespace.optional(z6__namespace.nullable(z6__namespace.number())),
carRules: z6__namespace.optional(z6__namespace.nullable(z6__namespace.array(z6__namespace.unknown()))),
detailCopy: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
detailScreenShotImages: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
detailTechspecsCopy: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
folder: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
galleryImages: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
galleryPrefix: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
groupImage: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
groupName: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
largeImage: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
logo: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
smallImage: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
sponsorLogo: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string())),
templatePath: z6__namespace.optional(z6__namespace.nullable(z6__namespace.string()))
}));
var CarGet = z6__namespace.array(z6__namespace.object({
aiEnabled: z6__namespace.boolean(),
allowNumberColors: z6__namespace.boolean(),
allowNumberFont: z6__namespace.boolean(),
allowSponsor1: z6__namespace.boolean(),
allowSponsor2: z6__namespace.boolean(),
allowWheelColor: z6__namespace.boolean(),
awardExempt: z6__namespace.boolean(),
carConfigDefs: z6__namespace.array(z6__namespace.object({
carcfg: z6__namespace.number(),
cfgSubdir: z6__namespace.nullable(z6__namespace.string()),
customPaintExt: z6__namespace.nullable(z6__namespace.string()),
name: z6__namespace.string()
})),
carConfigs: z6__namespace.array(z6__namespace.object({
carcfg: z6__namespace.number(),
trackId: z6__namespace.optional(z6__namespace.number()),
trackType: z6__namespace.optional(z6__namespace.number())
})),
carDirpath: z6__namespace.string(),
carId: z6__namespace.number(),
carName: z6__namespace.string(),
carNameAbbreviated: z6__namespace.string(),
carTypes: z6__namespace.array(z6__namespace.object({
carType: z6__namespace.string()
})),
carWeight: z6__namespace.number(),
categories: z6__namespace.array(z6__namespace.string()),
created: z6__namespace.string(),
firstSale: z6__namespace.string(),
folder: z6__namespace.string(),
forumUrl: z6__namespace.optional(z6__namespace.string()),
freeWithSubscription: z6__namespace.boolean(),
hasHeadlights: z6__namespace.boolean(),
hasMultipleDryTireTypes: z6__namespace.boolean(),
hasRainCapableTireTypes: z6__namespace.boolean(),
hp: z6__namespace.number(),
isPsPurchasable: z6__namespace.boolean(),
logo: z6__namespace.nullable(z6__namespace.string()),
maxPowerAdjustPct: z6__namespace.number(),
maxWeightPenaltyKg: z6__namespace.number(),
minPowerAdjustPct: z6__namespace.number(),
packageId: z6__namespace.number(),
patterns: z6__namespace.number(),
price: z6__namespace.number(),
priceDisplay: z6__namespace.optional(z6__namespace.string()),
rainEnabled: z6__namespace.boolean(),
retired: z6__namespace.boolean(),
searchFilters: z6__namespace.string(),
sku: z6__namespace.number(),
smallImage: z6__namespace.string(),
sponsorLogo: z6__namespace.nullable(z6__namespace.string()),
carMake: z6__namespace.optional(z6__namespace.string()),
carModel: z6__namespace.optional(z6__namespace.string()),
paintRules: z6__namespace.optional(z6__namespace.record(z6__namespace.string(), z6__namespace.unknown())),
siteUrl: z6__namespace.optional(z6__namespace.string())
}));
var CarAssetsParamsSchema = z6__namespace.object({});
var CarGetParamsSchema = z6__namespace.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__namespace.object({
carDirpath: z6__namespace.string(),
// maps from: car_dirpath
carId: z6__namespace.number(),
// maps from: car_id
rainEnabled: z6__namespace.boolean(),
// maps from: rain_enabled
retired: z6__namespace.boolean()
});
var CarclassGet = z6__namespace.array(z6__namespace.object({
carClassId: z6__namespace.number(),
carsInClass: z6__namespace.array(z6__namespace.object({
carDirpath: z6__namespace.string(),
carId: z6__namespace.number(),
rainEnabled: z6__namespace.boolean(),
retired: z6__namespace.boolean()
})),
custId: z6__namespace.number(),
name: z6__namespace.string(),
rainEnabled: z6__namespace.boolean(),
relativeSpeed: z6__namespace.number(),
shortName: z6__namespace.string()
}));
var CarclassGetParamsSchema = z6__namespace.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__namespace.array(z6__namespace.object({
label: z6__namespace.string(),
value: z6__namespace.number()
}));
var ConstantsDivisions = z6__namespace.array(z6__namespace.object({
label: z6__namespace.string(),
value: z6__namespace.number()
}));
var ConstantsEventTypes = z6__namespace.array(z6__namespace.object({
label: z6__namespace.string(),
value: z6__namespace.number()
}));
var ConstantsCategoriesParamsSchema = z6__namespace.object({});
var ConstantsDivisionsParamsSchema = z6__namespace.object({});
var ConstantsEventTypesParamsSchema = z6__namespace.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__namespace.object({
ContentType: z6__namespace.literal("csv"),
RawData: z6__namespace.string(),
Note: z6__namespace.string()
});
var DriverStatsByCategorySportsCar = z6__namespace.object({
ContentType: z6__namespace.literal("csv"),
RawData: z6__namespace.string(),
Note: z6__namespace.string()
});
var DriverStatsByCategoryFormulaCar = z6__namespace.object({
ContentType: z6__namespace.literal("csv"),
RawData: z6__namespace.string(),
Note: z6__namespace.string()
});
var DriverStatsByCategoryRoad = z6__namespace.object({
ContentType: z6__namespace.literal("csv"),
RawData: z6__namespace.string(),
Note: z6__namespace.string()
});
var DriverStatsByCategoryDirtOval = z6__namespace.object({
ContentType: z6__namespace.literal("csv"),
RawData: z6__namespace.string(),
Note: z6__namespace.string()
});
var DriverStatsByCategoryDirtRoad = z6__namespace.object({
ContentType: z6__namespace.literal("csv"),
RawData: z6__namespace.string(),
Note: z6__namespace.string()
});
var DriverStatsByCategoryOvalParamsSchema = z6__namespace.object({});
var DriverStatsByCategorySportsCarParamsSchema = z6__namespace.object({});
var DriverStatsByCategoryFormulaCarParamsSchema = z6__namespace.object({});
var DriverStatsByCategoryRoadParamsSchema = z6__namespace.object({});
var DriverStatsByCategoryDirtOvalParamsSchema = z6__namespace.object({});
var DriverStatsByCategoryDirtRoadParamsSchema = z6__namespace.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__namespace.object({
subscribed: z6__namespace.boolean(),
sequence: z6__namespace.number(),
sessions: z6__namespace.array(z6__namespace.object({
numDrivers: z6__namespace.number(),
numSpotters: z6__namespace.number(),
numSpectators: z6__namespace.number(),
numBroadcasters: z6__namespace.number(),
availableReservedBroadcasterSlots: z6__namespace.number(),
numSpectatorSlots: z6__namespace.number(),
availableSpectatorSlots: z6__namespace.number(),
canBroadcast: z6__namespace.boolean(),
canWatch: z6__namespace.boolean(),
canSpot: z6__namespace.boolean(),
elig: z6__namespace.object({
sessionFull: z6__namespace.boolean(),
canSpot: z6__namespace.boolean(),
canWatch: z6__namespace.boolean(),
canDrive: z6__namespace.boolean(),
hasSessPassword: z6__namespace.boolean(),
needsPurchase: z6__namespace.boolean(),
ownCar: z6__namespace.boolean(),
ownTrack: z6__namespace.boolean(),
purchaseSkus: z6__namespace.array(z6__namespace.number()),
registered: z6__namespace.boolean()
}),
driverChanges: z6__namespace.boolean(),
restrictViewing: z6__namespace.boolean(),
maxUsers: z6__namespace.number(),
privateSessionId: z6__namespace.number(),
sessionId: z6__namespace.number(),
subsessionId: z6__namespace.number(),
passwordProtected: z6__namespace.boolean(),
sessionName: z6__namespace.string(),
sessionDesc: z6__namespace.optional(z6__namespace.string()),
openRegExpires: z6__namespace.string(),
launchAt: z6__namespace.string(),
fullCourseCautions: z6__namespace.boolean(),
numFastTows: z6__namespace.number(),
rollingStarts: z6__namespace.boolean(),
restarts: z6__namespace.number(),
multiclassType: z6__namespace.number(),
pitsInUse: z6__namespace.number(),
carsLeft: z6__namespace.number(),
maxDrivers: z6__namespace.number(),
hardcoreLevel: z6__namespace.number(),
practiceLength: z6__namespace.number(),
loneQualify: z6__namespace.boolean(),
qualifyLaps: z6__namespace.number(),
qualifyLength: z6__namespace.number(),
warmupLength: z6__namespace.number(),
raceLaps: z6__namespace.number(),
raceLength: z6__namespace.number(),
timeLimit: z6__namespace.number(),
restrictResults: z6__namespace.boolean(),
incidentLimit: z6__namespace.number(),
incidentWarnMode: z6__namespace.number(),
incidentWarnParam1: z6__namespace.number(),
incidentWarnParam2: z6__namespace.number(),
unsportConductRuleMode: z6__namespace.number(),
connectionBlackFlag: z6__namespace.boolean(),
luckyDog: z6__namespace.boolean(),
minTeamDrivers: z6__namespace.number(),
maxTeamDrivers: z6__namespace.number(),
qualifierMustStartRace: z6__namespace.boolean(),
driverChangeRule: z6__namespace.number(),
fixedSetup: z6__namespace.boolean(),
entryCount: z6__namespace.number(),
leagueId: z6__namespace.number(),
leagueSeasonId: z6__namespace.number(),
sessionType: z6__namespace.number(),
orderId: z6__namespace.number(),
minLicenseLevel: z6__namespace.number(),
maxLicenseLevel: z6__namespace.number(),
status: z6__namespace.number(),
paceCarId: z6__namespace.nullable(z6__namespace.number()),
paceCarClassId: z6__namespace.nullable(z6__namespace.number()),
numOptLaps: z6__namespace.number(),
damageModel: z6__namespace.number(),
doNotPaintCars: z6__namespace.boolean(),
greenWhiteCheckeredLimit: z6__namespace.number(),
doNotCountCautionLaps: z6__namespace.boolean(),
consecCautionsSingleFile: z6__namespace.boolean(),
consecCautionWithinNlaps: z6__namespace.number(),
noLapperWaveArounds: z6__namespace.boolean(),
shortParadeLap: z6__namespace.boolean(),
startOnQualTire: z6__namespace.boolean(),
telemetryRestriction: z6__namespace.number(),
telemetryForceToDisk: z6__namespace.number(),
maxAiDrivers: z6__namespace.number(),
aiAvoidPlayers: z6__namespace.boolean(),
adaptiveAiEnabled: z6__namespace.boolean(),
adaptiveAiDifficulty: z6__namespace.optional(z6__namespace.number()),
mustUseDiffTireTypesInRace: z6__namespace.boolean(),
startZone: z6__namespace.boolean(),
enablePitlaneCollisions: z6__namespace.boolean(),
disallowVirtualMirror: z6__namespace.boolean(),
maxVisorTearoffs: z6__namespace.number(),
categoryId: z6__namespace.number(),
category: z6__namespace.string(),
sessionFull: z6__namespace.boolean(),
host: z6__namespace.object({
custId: z6__namespace.number(),
displayName: z6__namespace.string(),
helmet: z6__namespace.object({
pattern: z6__namespace.number(),
color1: z6__namespace.string(),
color2: z6__namespace.string(),
color3: z6__namespace.string(),
faceType: z6__namespace.number(),
helmetType: z6__namespace.number()
})
}),
track: z6__namespace.object({
categoryId: z6__namespace.number(),
configName: z6__namespace.optional(z6__namespace.string()),
trackId: z6__namespace.number(),
trackName: z6__namespace.string()
}),
weather: z6__namespace.object({
allowFog: z6__namespace.boolean(),
forecastOptions: z6__namespace.optional(z6__namespace.object({
forecastType: z6__namespace.number(),
precipitation: z6__namespace.number(),
skies: z6__namespace.number(),
stopPrecip: z6__namespace.number(),
temperature: z6__namespace.number(),
weatherSeed: z6__namespace.number(),
windDir: z6__namespace.number(),
windSpeed: z6__namespace.number()
})),
precipOption: z6__namespace.number(),
relHumidity: z6__namespace.number(),
simulatedStartTime: z6__namespace.string(),
simulatedTimeMultiplier: z6__namespace.number(),
simulatedTimeOffsets: z6__namespace.array(z6__namespace.number()),
skies: z6__namespace.number(),
tempUnits: z6__namespace.number(),
tempValue: z6__namespace.number(),
timeOfDay: z6__namespace.number(),
trackWater: z6__namespace.number(),
version: z6__namespace.number(),
weatherSummary: z6__namespace.optional(z6__namespace.object({
maxPrecipRate: z6__namespace.number(),
maxPrecipRateDesc: z6__namespace.string(),
precipChance: z6__namespace.number(),
skiesHigh: z6__namespace.number(),
skiesLow: z6__namespace.number(),
tempHigh: z6__namespace.number(),
tempLow: z6__namespace.number(),
tempUnits: z6__namespace.number(),
windDir: z6__namespace.number(),
windHigh: z6__namespace.number(),
windLow: z6__namespace.number(),
windUnits: z6__namespace.number()
})),
weatherUrl: z6__namespace.optional(z6__namespace.string()),
windDir: z6__namespace.number(),
windUnits: z6__namespace.number(),
windValue: z6__namespace.number(),
fog: z6__namespace.optional(z6__namespace.number()),
type: z6__namespace.optional(z6__namespace.number())
}),
trackState: z6__namespace.object({
leaveMarbles: z6__namespace.boolean(),
practiceRubber: z6__namespace.number(),
qualifyRubber: z6__namespace.number(),
raceRubber: z6__namespace.number(),
warmupRubber: z6__namespace.number()
}),
farm: z6__namespace.object({
farmId: z6__namespace.number(),
displayName: z6__namespace.string(),
imagePath: z6__namespace.string(),
displayed: z6__namespace.boolean()
}),
admins: z6__namespace.array(z6__namespace.object({
custId: z6__namespace.number(),
displayName: z6__namespace.string(),
helmet: z6__namespace.object({
pattern: z6__namespace.number(),
color1: z6__namespace.string(),
color2: z6__namespace.string(),
color3: z6__namespace.string(),
faceType: z6__namespace.number(),
helmetType: z6__namespace.number()
})
})),
allowedTeams: z6__namespace.array(z6__namespace.unknown()),
allowedLeagues: z6__namespace.array(z6__namespace.unknown()),
cars: z6__namespace.array(z6__namespace.object({
carId: z6__namespace.number(),
carName: z6__namespace.string(),
carClassId: z6__namespace.number(),
carClassName: z6__namespace.string(),
maxPctFuelFill: z6__namespace.number(),
weightPenaltyKg: z6__namespace.number(),
powerAdjustPct: z6__namespace.number(),
maxDryTireSets: z6__namespace.number(),
packageId: z6__namespace.number()
})),
countByCarId: z6__namespace.object({
112: z6__namespace.optional(z6__namespace.number()),
117: z6__namespace.optional(z6__namespace.number()),
118: z6__namespace.optional(z6__namespace.number()),
119: z6__namespace.optional(z6__namespace.number()),
128: z6__namespace.optional(z6__namespace.number()),
132: z6__namespace.optional(z6__namespace.number()),
133: z6__namespace.optional(z6__namespace.number()),
143: z6__namespace.optional(z6__namespace.number()),
146: z6__namespace.optional(z6__namespace.number()),
147: z6__namespace.optional(z6__namespace.number()),
150: z6__namespace.optional(z6__namespace.number()),
156: z6__namespace.optional(z6__namespace.number()),
157: z6__namespace.optional(z6__namespace.number()),
169: z6__namespace.optional(z6__namespace.number()),
173: z6__namespace.optional(z6__namespace.number()),
176: z6__namespace.optional(z6__namespace.number()),
184: z6__namespace.optional(z6__namespace.number()),
185: z6__namespace.optional(z6__namespace.number()),
188: z6__namespace.optional(z6__namespace.number()),
189: z6__namespace.optional(z6__namespace.number()),
190: z6__namespace.optional(z6__namespace.number()),
192: z6__namespace.optional(z6__namespace.number()),
194: z6__namespace.optional(z6__namespace.number()),
195: z6__namespace.optional(z6__namespace.number())
}),
countByCarClassId: z6__namespace.object({
0: z6__namespace.optional(z6__namespace.number()),
2708: z6__namespace.optional(z6__namespace.number()),
3104: z6__namespace.optional(z6__namespace.number()),
4073: z6__namespace.optional(z6__namespace.number()),
4076: z6__namespace.optional(z6__namespace.number()),
4083: z6__namespace.optional(z6__namespace.number()),
4084: z6__namespace.optional(z6__namespace.number()),
4085: z6__namespace.optional(z6__namespace.number())
}),
carTypes: z6__namespace.array(z6__namespace.object({
carType: z6__namespace.string()
})),
trackTypes: z6__namespace.array(z6__namespace.object({
trackType: z6__namespace.string()
})),
licenseGroupTypes: z6__namespace.array(z6__namespace.object({
licenseGroupType: z6__namespace.number()
})),
eventTypes: z6__namespace.array(z6__namespace.object({
eventType: z6__namespace.number()
})),
sessionTypes: z6__namespace.array(z6__namespace.object({
sessionType: z6__namespace.number()
})),
canJoin: z6__namespace.boolean(),
sessAdmin: z6__namespace.boolean(),
friends: z6__namespace.array(z6__namespace.unknown()),
watched: z6__namespace.array(z6__namespace.unknown()),
endTime: z6__namespace.string(),
teamEntryCount: z6__namespace.number(),
isHeatRacing: z6__namespace.boolean(),
populated: z6__namespace.boolean(),
broadcaster: z6__namespace.boolean(),
minIr: z6__namespace.number(),
maxIr: z6__namespace.number(),
aiMinSkill: z6__namespace.optional(z6__namespace.number()),
aiMaxSkill: z6__namespace.optional(z6__namespace.number()),
aiRosterName: z6__namespace.optional(z6__namespace.string())
})),
success: z6__namespace.boolean(),
packageId: z6__namespace.optional(z6__namespace.number())
});
var HostedSessions = z6__namespace.object({
subscribed: z6__namespace.boolean(),
sessions: z6__namespace.array(z6__namespace.object({
adaptiveAiEnabled: z6__namespace.boolean(),
admins: z6__namespace.array(z6__namespace.object({
custId: z6__namespace.number(),
displayName: z6__namespace.string(),
helmet: z6__namespace.object({
pattern: z6__namespace.number(),
color1: z6__namespace.string(),
color2: z6__namespace.string(),
color3: z6__namespace.string(),
faceType: z6__namespace.number(),
helmetType: z6__namespace.number()
})
})),
aiAvoidPlayers: z6__namespace.boolean(),
aiMaxSkill: z6__namespace.optional(z6__namespace.number()),
aiMinSkill: z6__namespace.optional(z6__namespace.number()),
aiRosterName: z6__namespace.optional(z6__namespace.string()),
allowedLeagues: z6__namespace.array(z6__namespace.unknown()),
allowedTeams: z6__namespace.array(z6__namespace.unknown()),
carTypes: z6__namespace.array(z6__namespace.object({
carType: z6__namespace.string()
})),
cars: z6__namespace.array(z6__namespace.object({
carId: z6__namespace.number(),
carName: z6__namespace.string(),
carClassId: z6__namespace.number(),
carClassName: z6__namespace.string(),
maxPctFuelFill: z6__namespace.number(),
weightPenaltyKg: z6__namespace.number(),
powerAdjustPct: z6__namespace.number(),
maxDryTireSets: z6__namespace.number(),
packageId: z6__namespace.number()
})),
carsLeft: z6__namespace.number(),
category: z6__namespace.string(),
categoryId: z6__namespace.number(),
connectionBlackFlag: z6__namespace.boolean(),
consecCautionWithinNlaps: z6__namespace.number(),
consecCautionsSingleFile: z6__namespace.boolean(),
countByCarClassId: z6__namespace.object({
0: z6__namespace.optional(z6__namespace.number()),
2708: z6__namespace.optional(z6__namespace.number()),
3104: z6__namespace.optional(z6__namespace.number()),
4073: z6__namespace.optional(z6__namespace.number()),
4076: z6__namespace.optional(z6__namespace.number()),
4083: z6__namespace.optional(z6__namespace.number()),
4084: z6__namespace.optional(z6__namespace.number()),
4085: z6__namespace.optional(z6__namespace.number())
}),
countByCarId: z6__namespace.object({
112: z6__namespace.optional(z6__namespace.number()),
117: z6__namespace.optional(z6__namespace.number()),
118: z6__namespace.optional(z6__namespace.number()),
119: z6__namespace.optional(z6__namespace.number()),
128: z6__namespace.optional(z6__namespace.number()),
132: z6__namespace.optional(z6__namespace.number()),
133: z6__namespace.optional(z6__namespace.number()),
143: z6__namespace.optional(z6__namespace.number()),
146: z6__namespace.optional(z6__namespace.number()),
147: z6__namespace.optional(z6__namespace.number()),
150: z6__namespace.optional(z6__namespace.number()),
156: z6__namespace.optional(z6__namespace.number()),
157: z6__namespace.optional(z6__namespace.number()),
169: z6__namespace.optional(z6__namespace.number()),
173: z6__namespace.optional(z6__namespace.number()),
176: z6__namespace.optional(z6__namespace.number()),
184: z6__namespace.optional(z6__namespace.number()),
185: z6__namespace.optional(z6__namespace.number()),
188: z6__namespace.optional(z6__namespace.number()),
189: z6__namespace.optional(z6__namespace.number()),
190: z6__namespace.optional(z6__namespace.number()),
192: z6__namespace.optional(z6__namespace.number()),
194: z6__namespace.optional(z6__namespace.number()),
195: z6__namespace.optional(z6__namespace.number())
}),
damageModel: z6__namespace.number(),
disallowVirtualMirror: z6__namespace.boolean(),
doNotCountCautionLaps: z6__namespace.boolean(),
doNotPaintCars: z6__namespace.boolean(),
driverChangeRule: z6__namespace.number(),
driverChanges: z6__namespace.boolean(),
elig: z6__namespace.object({
sessionFull: z6__namespace.boolean(),
canSpot: z6__namespace.boolean(),
canWatch: z6__namespace.boolean(),
canDrive: z6__namespace.boolean(),
hasSessPassword: z6__namespace.boolean(),
needsPurchase: z6__namespace.boolean(),
ownCar: z6__namespace.boolean(),
ownTrack: z6__namespace.boolean(),
purchaseSkus: z6__namespace.array(z6__namespace.number()),
registered: z6__namespace.boolean()
}),
enablePitlaneCollisions: z6__namespace.boolean(),
entryCount: z6__namespace.number(),
eventTypes: z6__namespace.array(z6__namespace.object({
eventType: z6__namespace.number()
})),
farm: z6__namespace.object({
farmId: z6__namespace.number(),
displayName: z6__namespace.string(),
imagePath: z6__namespace.string(),
displayed: z6__namespace.boolean()
}),
fixedSetup: z6__namespace.boolean(),
fullCourseCautions: z6__namespace.boolean(),
greenWhiteCheckeredLimit: z6__namespace.number(),
hardcoreLevel: z6__namespace.number(),
host: z6__namespace.object({
custId: z6__namespace.number(),
displayName: z6__namespace.string(),
helmet: z6__namespace.object({
pattern: z6__namespace.number(),
color1: z6__namespace.string(),
color2: z6__namespace.string(),
color3: z6__namespace.string(),
faceType: z6__namespace.number(),
helmetType: z6__namespace.number()
})
}),
incidentLimit: z6__namespace.number(),
incidentWarnMode: z6__namespace.number(),
incidentWarnParam1: z6__namespace.number(),
incidentWarnParam2: z6__namespace.number(),
launchAt: z6__namespace.string(),
leagueId: z6__namespace.number(),
leagueSeasonId: z6__namespace.number(),
licenseGroupTypes: z6__namespace.array(z6__namespace.object({
licenseGroupType: z6__namespace.number()
})),
loneQualify: z6__namespace.boolean(),
luckyDog: z6__namespace.boolean(),
maxAiDrivers: z6__namespace.number(),
maxDrivers: z6__namespace.number(),
maxIr: z6__namespace.number(),
maxLicenseLevel: z6__namespace.number(),
maxTeamDrivers: z6__namespace.number(),
maxVisorTearoffs: z6__namespace.number(),
minIr: z6__namespace.number(),
minLicenseLevel: z6__namespace.number(),
minTeamDrivers: z6__namespace.number(),
multiclassType: z6__namespace.number(),
mustUseDiffTireTypesInRace: z6__namespace.boolean(),
noLapperWaveArounds: z6__namespace.boolean(),
numFastTows: z6__namespace.number(),
numOptLaps: z6__namespace.number(),
openRegExpires: z6__namespace.string(),
orderId: z6__namespace.number(),
paceCarClassId: z6__namespace.nullable(z6__namespace.number()),
paceCarId: z6__namespace.nullable(z6__namespace.number()),
passwordProtected: z6__namespace.boolean(),
pitsInUse: z6__namespace.number(),
practiceLength: z6__namespace.number(),
privateSessionId: z6__namespace.number(),
qualifierMustStartRace: z6__namespace.boolean(),
qualifyLaps: z6__namespace.number(),
qualifyLength: z6__namespace.number(),
raceLaps: z6__namespace.number(),
raceLength: z6__namespace.number(),
restarts: z6__namespace.number(),
restrictResults: z6__namespace.boolean(),
restrictViewing: z6__namespace.boolean(),
rollingStarts: z6__namespace.boolean(),
sessionFull: z6__namespace.boolean(),
sessionId: z6__namespace.number(),
sessionName: z6__namespace.string(),
sessionType: z6__namespace.number(),
sessionTypes: z6__namespace.array(z6__namespace.object({
sessionType: z6__namespace.number()
})),
shortParadeLap: z6__namespace.boolean(),
startOnQualTire: z6__namespace.boolean(),
startZone: z6__namespace.boolean(),
status: z6__namespace.number(),
subsessionId: z6__namespace.number(),
teamEntryCount: z6__namespace.number(),
telemetryForceToDisk: z6__namespace.number(),
telemetryRestriction: z6__namespace.number(),
timeLimit: z6__namespace.number(),
track: z6__namespace.object({
categoryId: z6__namespace.number(),
configName: z6__namespace.optional(z6__namespace.string()),
trackId: z6__namespace.number(),
trackName: z6__namespace.string()
}),
trackState: z6__namespace.object({
leaveMarbles: z6__namespace.boolean(),
practiceRubber: z6__namespace.number(),
qualifyRubber: z6__namespace.number(),
raceRubber: z6__namespace.number(),
warmupRubber: z6__namespace.number()
}),
trackTypes: z6__namespace.array(z6__namespace.object({
trackType: z6__namespace.string()
})),
unsportConductRuleMode: z6__namespace.number(),
warmupLength: z6__namespace.number(),
weather: z6__namespace.object({
allowFog: z6__namespace.boolean(),
forecastOptions: z6__namespace.optional(z6__namespace.object({
forecastType: z6__namespace.number(),
precipitation: z6__namespace.number(),
skies: z6__namespace.number(),
stopPrecip: z6__namespace.number(),
temperature: z6__namespace.number(),
weatherSeed: z6__namespace.number(),
windDir: z6__namespace.number(),
windSpeed: z6__namespace.number()
})),
precipOption: z6__namespace.number(),
relHumidity: z6__namespace.number(),
simulatedStartTime: z6__namespace.string(),
simulatedTimeMultiplier: z6__namespace.number(),
simulatedTimeOffsets: z6__namespace.array(z6__namespace.number()),
skies: z6__namespace.number(),
tempUnits: z6__namespace.number(),
tempValue: z6__namespace.number(),
timeOfDay: z6__namespace.number(),
trackWater: z6__namespace.number(),
version: z6__namespace.number(),
weatherSummary: z6__namespace.optional(z6__namespace.object({
maxPrecipRate: z6__namespace.number(),
maxPrecipRateDesc: z6__namespace.string(),
precipChance: z6__namespace.number(),
skiesHigh: z6__namespace.number(),
skiesLow: z6__namespace.number(),
tempHigh: z6__namespace.number(),
tempLow: z6__namespace.number(),
tempUnits: z6__namespace.number(),
windDir: z6__namespace.number(),
windHigh: z6__namespace.number(),
windLow: z6__namespace.number(),
windUnits: z6__namespace.number()
})),
weatherUrl: z6__namespace.optional(z6__namespace.string()),
windDir: z6__namespace.number(),
windUnits: z6__namespace.number(),
windValue: z6__namespace.number(),
fog: z6__namespace.optional(z6__namespace.number()),
type: z6__namespace.optional(z6__namespace.number())
}),
adaptiveAiDifficulty: z6__namespace.optional(z6__namespace.number()),
sessionDesc: z6__namespace.optional(z6__namespace.string())
})),
success: z6__namespace.boolean()
});
var HostedCombinedSessionsParamsSchema = z6__namespace.object({
packageId: z6__namespace.optional(z6__namespace.number())
// If set, return only sessions using this car or track package ID. // maps to: package_id
});
var HostedSessionsParamsSchema = z6__namespace.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__namespace.object({
mine: z6__namespace.boolean(),
subscribed: z6__namespace.boolean(),
sequence: z6__namespace.number(),
sessions: z6__namespace.array(z6__namespace.object({
numDrivers: z6__namespace.number(),
numSpotters: z6__namespace.number(),
numSpectators: z6__namespace.number(),
numBroadcasters: z6__namespace.number(),
availableReservedBroadcasterSlots: z6__namespace.number(),
numSpectatorSlots: z6__namespace.number(),
availableSpectatorSlots: z6__namespace.number(),
canBroadcast: z6__namespace.boolean(),
canWatch: z6__namespace.boolean(),
canSpot: z6__namespace.boolean(),
elig: z6__namespace.object({
sessionFull: z6__namespace.boolean(),
canSpot: z6__namespace.boolean(),
canWatch: z6__namespace.boolean(),
canDrive: z6__namespace.boolean(),
hasSessPassword: z6__namespace.boolean(),
needsPurchase: z6__namespace.boolean(),
ownCar: z6__namespace.boolean(),
ownTrack: z6__namespace.boolean(),
purchaseSkus: z6__namespace.array(z6__namespace.number()),
registered: z6__namespace.boolean()
}),
driverChanges: z6__namespace.boolean(),
restrictViewing: z6__namespace.boolean(),
maxUsers: z6__namespace.number(),
privateSessionId: z6__namespace.number(),
sessionId: z6__namespace.optional(z6__namespace.number()),
subsessionId: z6__namespace.optional(z6__namespace.number()),
passwordProtected: z6__namespace.boolean(),
sessionName: z6__namespace.string(),
openRegExpires: z6__namespace.optional(z6__namespace.string()),
launchAt: z6__namespace.string(),
fullCourseCautions: z6__namespace.boolean(),
numFastTows: z6__namespace.number(),
rollingStarts: z6__namespace.boolean(),
restarts: z6__namespace.number(),
multiclassType: z6__namespace.number(),
pitsInUse: z6__namespace.optional(z6__namespace.number()),
carsLeft: z6__namespace.optional(z6__namespace.number()),
maxDrivers: z6__namespace.number(),
hardcoreLevel: z6__namespace.number(),
practiceLength: z6__namespace.number(),
loneQualify: z6__namespace.boolean(),
qualifyLaps: z6__namespace.number(),
qualifyLength: z6__namespace.number(),
warmupLength: z6__namespace.number(),
raceLaps: z6__namespace.number(),
raceLength: z6__namespace.number(),
timeLimit: z6__namespace.number(),
restrictResults: z6__namespace.boolean(),
incidentLimit: z6__namespace.number(),
incidentWarnMode: z6__namespace.number(),
incidentWarnParam1: z6__namespace.number(),
incidentWarnParam2: z6__namespace.number(),
unsportConductRuleMode: z6__namespace.number(),
connectionBlackFlag: z6__namespace.boolean(),
luckyDog: z6__namespace.boolean(),
minTeamDrivers: z6__namespace.number(),
maxTeamDrivers: z6__namespace.number(),
qualifierMustStartRace: z6__namespace.boolean(),
driverChangeRule: z6__namespace.number(),
fixedSetup: z6__namespace.boolean(),
entryCount: z6__namespace.number(),
leagueId: z6__namespace.number(),
leagueName: z6__namespace.string(),
leagueSeasonId: z6__namespace.number(),
leagueSeasonName: z6__namespace.string(),
sessionType: z6__namespace.number(),
orderId: z6__namespace.number(),
minLicenseLevel: z6__namespace.number(),
maxLicenseLevel: z6__namespace.number(),
status: z6__namespace.number(),
paceCarId: z6__namespace.nullable(z6__namespace.number()),
paceCarClassId: z6__namespace.nullable(z6__namespace.number()),
numOptLaps: z6__namespace.number(),
damageModel: z6__namespace.number(),
doNotPaintCars: z6__namespace.boolean(),
greenWhiteCheckeredLimit: z6__namespace.number(),
doNotCountCautionLaps: z6__namespace.boolean(),
consecCautionsSingleFile: z6__namespace.boolean(),
consecCautionWithinNlaps: z6__namespace.number(),
noLapperWaveArounds: z6__namespace.boolean(),
shortParadeLap: z6__namespace.boolean(),
startOnQualTire: z6__namespace.boolean(),
telemetryRestriction: z6__namespace.number(),
telemetryForceToDisk: z6__namespace.number(),
maxAiDrivers: z6__namespace.number(),
aiAvoidPlayers: z6__namespace.boolean(),
adaptiveAiEnabled: z6__namespace.boolean(),
adaptiveAiDifficulty: z6__namespace.number(),
mustUseDiffTireTypesInRace: z6__namespace.boolean(),
startZone: z6__namespace.boolean(),
enablePitlaneCollisions: z6__namespace.boolean(),
disallowVirtualMirror: z6__namespace.boolean(),
maxVisorTearoffs: z6__namespace.number(),
categoryId: z6__namespace.number(),
category: z6__name