UNPKG

iracing-api

Version:

Javascript client for iracing API

264 lines (263 loc) 7.77 kB
import * as z from 'zod'; import { HelmetSchema } from './common'; export const SuitSchema = z.object({ pattern: z.number(), color1: z.string(), color2: z.string(), color3: z.string(), bodyType: z.number(), }); export const RestrictionsSchema = z.object({}); export const DirtOvalSchema = z.object({ categoryId: z.number(), category: z.string(), licenseLevel: z.number(), safetyRating: z.number(), cpi: z.number(), irating: z.number(), ttRating: z.number(), mprNumRaces: z.number(), color: z.string(), groupName: z.string(), groupId: z.number(), proPromotable: z.boolean(), mprNumTts: z.number(), }); export const LicenseDetailSchema = z.object({ categoryId: z.number(), category: z.string(), categoryName: z.string(), licenseLevel: z.number(), safetyRating: z.number(), cpi: z.number(), irating: z.number(), ttRating: z.number(), mprNumRaces: z.number(), color: z.string(), groupName: z.string(), groupId: z.number(), proPromotable: z.boolean(), seq: z.number(), mprNumTts: z.number(), }); export const LicensesSchema = z.record(LicenseDetailSchema); export const PackageSchema = z.object({ packageId: z.number(), contentIds: z.array(z.number()), }); export const AccountSchema = z.object({ irDollars: z.number(), irCredits: z.number(), status: z.string(), countryRules: z.null().optional(), }); export const MemberInfoSchema = z.object({ custId: z.number(), email: z.string().optional(), username: z.string().optional(), displayName: z.string(), firstName: z.string(), lastName: z.string(), onCarName: z.string(), memberSince: z.string(), lastTestTrack: z.number().optional(), lastTestCar: z.number().optional(), lastSeason: z.number(), flags: z.number(), clubId: z.number(), clubName: z.string(), connectionType: z.string(), downloadServer: z.string(), lastLogin: z.string().datetime(), readCompRules: z.string().datetime(), account: AccountSchema, helmet: HelmetSchema, suit: SuitSchema, licenses: LicensesSchema, carPackages: z.array(PackageSchema), trackPackages: z.array(PackageSchema), otherOwnedPackages: z.array(z.number()), dev: z.boolean(), alphaTester: z.boolean(), rainTester: z.boolean(), broadcaster: z.boolean(), restrictions: RestrictionsSchema, hasReadCompRules: z.boolean(), hasReadNda: z.boolean(), flagsHex: z.string(), hundredPctClub: z.boolean(), twentyPctDiscount: z.boolean(), raceOfficial: z.boolean().optional(), ai: z.boolean().optional(), bypassHostedPassword: z.boolean().optional(), readTc: z.string().datetime(), readPp: z.string().datetime(), hasReadTc: z.boolean(), hasReadPp: z.boolean(), hasAdditionalContent: z.boolean(), }); export const MemberParticipationCreditSchema = z.object({ custId: z.number(), seasonId: z.number(), seriesId: z.number(), seriesName: z.string(), licenseGroup: z.number(), licenseGroupName: z.string(), participationCredits: z.number(), minWeeks: z.number(), weeks: z.number(), earnedCredits: z.number(), totalCredits: z.number(), }); // Params export const GetMemberAwardsParamsSchema = z.object({ customerId: z.number().optional(), }); export const GetMemberChartDataParamsSchema = z.object({ customerId: z.number().optional(), categoryId: z.number(), chartType: z.number(), }); export const GetMemberDataParamsSchema = z.object({ customerIds: z.array(z.string()), includeLicenses: z.boolean().optional(), }); export const GetMemberProfileParamsSchema = z.object({ customerId: z.number().optional(), }); export const GetMemberAwardInstancesParamsSchema = z.object({ awardId: z.number(), customerId: z.number().optional(), }); // Response export const GetMemberAwardsDataSchema = z.object({ success: z.boolean(), cust_id: z.number(), award_count: z.number(), }); export const GetMemberAwardsResponseSchema = z.object({ type: z.literal('member_awards'), data: GetMemberAwardsDataSchema, data_url: z.string().url(), }); export const MemberChartDataPointSchema = z.object({ when: z.string(), value: z.number(), }); export const GetMemberChartDataResponseSchema = z.object({ blackout: z.boolean(), categoryId: z.number(), chartType: z.number(), data: z.array(MemberChartDataPointSchema), success: z.boolean(), custId: z.number(), }); export const MemberDataEntrySchema = z.object({ custId: z.number(), displayName: z.string(), helmet: HelmetSchema, lastLogin: z.string().datetime(), memberSince: z.string(), clubId: z.number(), clubName: z.string(), ai: z.boolean(), }); export const GetMemberDataResponseSchema = z.object({ success: z.boolean(), custIds: z.array(z.number()), members: z.array(MemberDataEntrySchema), }); // Response Schemas for GetMemberProfile export const RecentAwardSchema = z.object({ memberAwardId: z.number(), awardId: z.number(), achievement: z.boolean(), awardCount: z.number(), awardDate: z.string(), awardOrder: z.number(), awardedDescription: z.string(), description: z.string(), groupName: z.string(), hasPdf: z.boolean(), iconUrlLarge: z.string(), iconUrlSmall: z.string(), iconUrlUnawarded: z.string(), name: z.string(), progress: z.number().optional(), progressLabel: z.string().optional(), threshold: z.number().optional(), subsessionId: z.number().optional(), viewed: z.boolean(), weight: z.number(), }); export const ActivitySchema = z.object({ recent30daysCount: z.number(), prev30daysCount: z.number(), consecutiveWeeks: z.number(), mostConsecutiveWeeks: z.number(), }); export const MemberProfileInfoSchema = z.object({ custId: z.number(), displayName: z.string(), helmet: HelmetSchema, lastLogin: z.string().datetime(), memberSince: z.string(), clubId: z.number(), clubName: z.string(), ai: z.boolean(), licenses: z.array(LicenseDetailSchema), country: z.string(), countryCode: z.string(), }); export const LicenseHistoryEntrySchema = z.object({ categoryId: z.number(), category: z.string(), categoryName: z.string(), licenseLevel: z.number(), safetyRating: z.number(), cpi: z.number(), irating: z.number(), ttRating: z.number(), color: z.string(), groupName: z.string(), groupId: z.number(), seq: z.number(), }); export const RecentEventTrackSchema = z.object({ configName: z.string(), trackId: z.number(), trackName: z.string(), }); export const RecentEventSchema = z.object({ eventType: z.string(), subsessionId: z.number(), startTime: z.string().datetime(), eventId: z.number(), eventName: z.string(), simsessionType: z.number(), startingPosition: z.number(), finishPosition: z.number(), bestLapTime: z.number(), percentRank: z.number(), carId: z.number(), carName: z.string(), logoUrl: z.string().nullable(), track: RecentEventTrackSchema, }); export const FollowCountsSchema = z.object({ followers: z.number(), follows: z.number(), }); export const GetMemberProfileResponseSchema = z.object({ recentAwards: z.array(RecentAwardSchema), activity: ActivitySchema, success: z.boolean(), imageUrl: z.string().url(), memberInfo: MemberProfileInfoSchema, disabled: z.boolean(), licenseHistory: z.array(LicenseHistoryEntrySchema), recentEvents: z.array(RecentEventSchema), custId: z.number(), isGenericImage: z.boolean(), followCounts: FollowCountsSchema, });