import {z} from 'zod' export type VolumeUnit = 'us_gallons' | 'uk_gallons' | 'liters'; export type Id = number; export type MeterUnit = 'km' | 'hr' | 'mi' | null; export type VehicleOwnership = 'owned' | 'leased' | 'rented' | 'customer' | 'financed' | 'rent_to_own'; export type MeasurementSystem = 'imperial' | 'metric'; export type CustomFields = Record | null; export type PatchApiVehiclesIdArgs = {id: string, body: {color?: string | undefined, default_image?: ({file_url?: string | undefined}) | undefined, fuel_type_id?: number | undefined, fuel_volume_units?: VolumeUnit | undefined, group_id?: Id | undefined, group_hierarchy?: string | undefined, label_ids?: Array | undefined, license_plate?: string | undefined, make?: string | undefined, meter_unit?: MeterUnit | undefined, model?: string | undefined, name?: string | undefined, ownership?: VehicleOwnership | undefined, registration_expiration_month?: number | undefined, registration_state?: string | undefined, secondary_meter?: boolean | undefined, secondary_meter_unit?: MeterUnit | undefined, system_of_measurement?: MeasurementSystem | undefined, trim?: string | undefined, vehicle_status_id?: Id | undefined, vehicle_type_id?: Id | undefined, vin?: string | undefined, year?: number | undefined, linked_vehicle_ids?: Array | undefined, purchase_detail_attributes?: ({comment?: string | undefined, date?: string | undefined, price?: number | undefined, vendor_id?: Id | undefined, warranty_expiration_date?: string | undefined, warranty_expiration_meter_value?: number | undefined, 'meter_entry_attributes.value'?: number | undefined, 'meter_entry_attributes.void'?: boolean | undefined}) | undefined, external_ids?: Record | undefined, vehicle_status_name?: string | undefined, vehicle_type_name?: string | undefined, in_service_date?: string | undefined, in_service_meter?: number | undefined, estimated_service_months?: number | undefined, estimated_replacement_mileage?: number | undefined, estimated_resale_price?: number | undefined, out_of_service_date?: string | undefined, out_of_service_meter?: number | undefined, specs_attributes?: ({base_towing_capacity?: number | undefined, bed_length?: number | undefined, body_subtype?: string | undefined, body_type?: string | undefined, brake_system?: string | undefined, cargo_volume?: number | undefined, curb_weight?: number | undefined, drive_type?: string | undefined, engine_aspiration?: string | undefined, engine_block_type?: string | undefined, engine_bore?: number | undefined, engine_brand?: string | undefined, engine_cam_type?: string | undefined, engine_compression?: number | undefined, engine_cylinders?: number | undefined, engine_description?: string | undefined, engine_displacement?: number | undefined, engine_stroke?: number | undefined, engine_valves?: number | undefined, epa_city?: number | undefined, epa_combined?: number | undefined, epa_highway?: number | undefined, front_tire_psi?: number | undefined, front_tire_type?: string | undefined, front_track_width?: number | undefined, front_wheel_diameter?: string | undefined, fuel_induction?: string | undefined, fuel_quality?: string | undefined, fuel_tank_capacity?: number | undefined, fuel_tank_2_capacity?: number | undefined, gross_vehicle_weight_rating?: number | undefined, ground_clearance?: number | undefined, height?: number | undefined, interior_volume?: number | undefined, length?: number | undefined, max_hp?: number | undefined, max_payload?: number | undefined, max_torque?: number | undefined, msrp?: number | undefined, oil_capacity?: number | undefined, passenger_volume?: string | undefined, rear_axle_type?: string | undefined, rear_tire_psi?: number | undefined, rear_tire_type?: string | undefined, rear_track_width?: number | undefined, rear_wheel_diameter?: string | undefined, redline_rpm?: string | undefined, transmission_brand?: string | undefined, transmission_description?: string | undefined, transmission_gears?: number | undefined, transmission_type?: string | undefined, wheelbase?: number | undefined, width?: number | undefined}) | undefined, custom_fields?: CustomFields | undefined}}; export type PatchApiVehiclesIdOptions = {baseUrl?: string | undefined, apiKey?: string | undefined, accountToken?: string | undefined, fetch?: typeof fetch | undefined}; export const volumeUnit = z.enum(["us_gallons", "uk_gallons", "liters"]); export const vehicleOwnership = z.enum(["owned", "leased", "rented", "customer", "financed", "rent_to_own"]); export const measurementSystem = z.enum(["imperial", "metric"]); export const meterUnit = z.enum(["km", "hr", "mi"]).nullable(); export const id = z.number().int().gte(1); export const labels = z.array(z.object({id: id.optional(), name: z.string().optional()})); export const customFields = z.object({}).nullable(); export const vehicleSpecs = z.object({id: id.optional(), vehicle_id: z.number().int().optional(), account_id: z.number().int().optional(), body_type: z.string().nullable().optional(), body_subtype: z.string().nullable().optional(), drive_type: z.string().nullable().optional(), brake_system: z.string().nullable().optional(), msrp_cents: z.number().int().nullable().optional(), fuel_tank_capacity: z.number().nullable().optional(), fuel_tank_2_capacity: z.number().nullable().optional(), front_track_width: z.number().nullable().optional(), ground_clearance: z.number().nullable().optional(), height: z.number().nullable().optional(), length: z.number().nullable().optional(), rear_track_width: z.number().nullable().optional(), width: z.number().nullable().optional(), wheelbase: z.number().nullable().optional(), front_tire_psi: z.string().nullable().optional(), rear_tire_psi: z.string().nullable().optional(), base_towing_capacity: z.number().nullable().optional(), curb_weight: z.number().nullable().optional(), gross_vehicle_weight_rating: z.number().nullable().optional(), bed_length: z.string().nullable().optional(), max_payload: z.number().nullable().optional(), rear_axle_type: z.string().optional(), front_tire_type: z.string().optional(), front_wheel_diameter: z.string().optional(), rear_tire_type: z.string().optional(), rear_wheel_diameter: z.string().optional(), epa_city: z.number().nullable().optional(), epa_highway: z.number().nullable().optional(), epa_combined: z.number().nullable().optional(), engine_description: z.string().optional(), engine_brand: z.string().optional(), engine_aspiration: z.string().nullable().optional(), engine_block_type: z.string().nullable().optional(), engine_bore: z.number().nullable().optional(), engine_cam_type: z.string().nullable().optional(), engine_compression: z.number().nullable().optional(), engine_cylinders: z.number().int().nullable().optional(), engine_displacement: z.number().nullable().optional(), fuel_induction: z.string().nullable().optional(), fuel_quality: z.string().optional(), max_hp: z.number().int().nullable().optional(), max_torque: z.number().int().nullable().optional(), oil_capacity: z.number().nullable().optional(), redline_rpm: z.string().optional(), engine_stroke: z.number().nullable().optional(), engine_valves: z.number().int().nullable().optional(), transmission_description: z.string().optional(), transmission_brand: z.string().optional(), transmission_type: z.string().nullable().optional(), transmission_gears: z.number().int().nullable().optional(), cargo_volume: z.number().nullable().optional(), interior_volume: z.number().nullable().optional(), passenger_volume: z.string().optional(), created_at: z.string().optional(), updated_at: z.string().optional(), duty_type: z.string().nullable().optional(), weight_class: z.string().nullable().optional(), engine_bore_with_units: z.string().nullable().optional(), wheelbase_with_units: z.string().nullable().optional(), msrp: z.string().nullable().optional()}); export const nullableId = z.number().int().gte(1).nullable(); export const currentLocationEntry = z.object({id: z.number().int().optional(), locatable_type: z.string().optional(), locatable_id: z.number().int().optional(), date: z.string().optional(), created_at: z.string().optional(), updated_at: z.string().optional(), contact_id: z.number().int().optional(), address: z.string().optional(), is_current: z.boolean().optional(), item_type: z.string().optional(), item_id: z.number().int().optional(), location: z.string().optional(), address_components: z.object({street_number: z.string().optional(), street: z.string().optional(), city: z.string().optional(), region: z.string().optional(), region_short: z.string().optional(), country: z.string().optional(), country_short: z.string().optional(), postal_code: z.string().optional()}).optional(), geolocation: z.object({latitude: z.number().optional(), longitude: z.number().optional()}).optional()}).nullable(); export const vehicle2 = z.object({id: z.number().int().optional(), account_id: z.number().int().optional(), archived_at: z.string().nullable().optional(), fuel_type_id: z.number().int().nullable().optional(), fuel_type_name: z.string().nullable().optional(), fuel_volume_units: volumeUnit.optional(), group_id: z.number().int().nullable().optional(), group_name: z.string().nullable().optional(), name: z.string().optional(), ownership: vehicleOwnership.optional(), current_location_entry_id: z.number().int().nullable().optional(), system_of_measurement: measurementSystem.optional(), vehicle_type_id: z.number().int().optional(), vehicle_type_name: z.string().optional(), is_sample: z.boolean().optional(), vehicle_status_id: z.number().int().optional(), vehicle_status_name: z.string().optional(), vehicle_status_color: z.string().nullable().optional(), primary_meter_unit: meterUnit.optional(), primary_meter_value: z.string().nullable().optional(), primary_meter_date: z.string().nullable().optional(), primary_meter_usage_per_day: z.string().nullable().optional(), secondary_meter_unit: meterUnit.optional(), secondary_meter_value: z.string().nullable().optional(), secondary_meter_date: z.string().nullable().optional(), secondary_meter_usage_per_day: z.string().nullable().optional(), in_service_meter_value: z.string().nullable().optional(), in_service_date: z.string().nullable().optional(), out_of_service_meter_value: z.string().nullable().optional(), out_of_service_date: z.string().nullable().optional(), estimated_service_months: z.number().int().nullable().optional(), estimated_replacement_mileage: z.string().nullable().optional(), estimated_resale_price_cents: z.number().int().nullable().optional(), fuel_entries_count: z.number().int().gte(0).optional(), service_entries_count: z.number().int().gte(0).optional(), service_reminders_count: z.number().int().gte(0).optional(), vehicle_renewal_reminders_count: z.number().int().gte(0).optional(), comments_count: z.number().int().gte(0).optional(), documents_count: z.number().int().gte(0).optional(), images_count: z.number().int().gte(0).optional(), issues_count: z.number().int().gte(0).optional(), work_orders_count: z.number().int().gte(0).optional(), labels: labels.optional(), group_ancestry: z.string().nullable().optional(), color: z.string().nullable().optional(), license_plate: z.string().nullable().optional(), vin: z.string().nullable().optional(), year: z.number().nullable().optional(), make: z.string().nullable().optional(), model: z.string().nullable().optional(), trim: z.string().nullable().optional(), registration_expiration_month: z.number().int().gte(0).lte(12).nullable().optional(), registration_state: z.string().nullable().optional(), default_image_url_small: z.string().nullable().optional(), external_ids: z.object({}).optional(), ai_enabled: z.boolean().optional(), assetable_type: z.literal("Vehicle").optional(), custom_fields: customFields.optional(), axle_config_id: z.number().int().nullable().optional(), driver: z.object({id: z.number().int().gte(1).nullable().optional(), email: z.string().nullable().optional(), name: z.string().nullable().optional(), group_id: z.number().int().nullable().optional(), employee: z.boolean().nullable().optional(), employee_number: z.string().nullable().optional(), default_image_url: z.string().nullable().optional(), first_name: z.string().nullable().optional(), last_name: z.string().nullable().optional(), full_name: z.string().nullable().optional()}).nullable().optional(), specs: vehicleSpecs.optional(), meter_name: z.string().optional(), secondary_meter_name: z.string().optional(), loan_account_number: z.string().nullable().optional(), loan_ended_at: z.string().nullable().optional(), loan_interest_rate: z.number().nullable().optional(), loan_notes: z.string().nullable().optional(), loan_started_at: z.string().nullable().optional(), loan_vendor_id: nullableId.optional(), loan_vendor_name: z.string().nullable().optional(), job_assignment: z.object({id: z.number().int().optional(), started_at: z.string().optional(), ended_at: z.string().nullable().optional(), job: z.object({id: z.number().int().optional(), name: z.string().optional(), number: z.string().optional()}).nullable().optional()}).nullable().optional(), inspection_schedules_count: z.number().int().gte(0).optional(), default_image_url: z.string().nullable().optional(), default_image_url_medium: z.string().nullable().optional(), default_image_url_large: z.string().nullable().optional(), current_location_entry: currentLocationEntry.optional()}).nullable(); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Update Vehicle * * PATCH /vehicles/{id} */ export const patchApiVehiclesId = async (args: PatchApiVehiclesIdArgs, options?: PatchApiVehiclesIdOptions) => { const {baseUrl = "https://secure.fleetio.com/api", fetch: fetchFn = fetch, apiKey, accountToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (apiKey !== undefined) headers.set("Authorization", apiKey) if (accountToken !== undefined) headers.set("Account-Token", accountToken) const url = `${baseUrl.replace(/\/+$/, '')}/vehicles/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(vehicle2, await res.json()) };