import {z} from 'zod' export type GetApiVehiclesIdArgs = {id: string}; export type GetApiVehiclesIdOptions = {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 }; /** * Retrieve Vehicle * * GET /vehicles/{id} */ export const getApiVehiclesId = async (args: GetApiVehiclesIdArgs, options?: GetApiVehiclesIdOptions) => { const {baseUrl = "https://secure.fleetio.com/api", fetch: fetchFn = fetch, apiKey, accountToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() 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: "GET", headers}) 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()) };