import {z} from 'zod' export type LikeEqFilter = {like: string} | {eq: string}; export type LikeFilter = {like: string}; export type LtLteGtGteFilter = {lt: string} | {lte: string} | {gt: string} | {gte: string}; export type VehicleArchivedFilters = {name?: LikeEqFilter | undefined, vin?: LikeEqFilter | undefined, license_plate?: LikeEqFilter | undefined, external_id?: LikeFilter | undefined, archived_at?: LtLteGtGteFilter | undefined}; export type SortAscDesc = 'asc' | 'desc'; export type SortAscDescDefaultDesc = 'asc' | 'desc'; export type ArchivedSorts = {archived_at?: SortAscDesc | undefined, id?: SortAscDescDefaultDesc | undefined}; export type GetApiVehiclesArchivedArgs = {start_cursor?: string | undefined, per_page?: number | undefined, filter?: VehicleArchivedFilters | undefined, sort?: ArchivedSorts | undefined}; export type GetApiVehiclesArchivedOptions = {baseUrl?: string | undefined, apiKey?: string | undefined, accountToken?: string | undefined, fetch?: typeof fetch | undefined}; export const likeEqFilter = z.union([z.object({like: z.string()}), z.object({eq: z.string()})]); export const eqFilter = z.object({eq: z.string()}); export const ltLteGtGteFilter = z.union([z.object({lt: z.string()}), z.object({lte: z.string()}), z.object({gt: z.string()}), z.object({gte: z.string()})]); export const vehicleArchivedFilteredBy = z.array(z.union([z.object({name: likeEqFilter.optional()}), z.object({vin: likeEqFilter.optional()}), z.object({license_plate: likeEqFilter.optional()}), z.object({external_id: eqFilter.optional()}), z.object({archived_at: ltLteGtGteFilter.optional()})])); export const sortAscDesc = z.enum(["asc", "desc"]); export const archivedSortedBy = z.array(z.union([z.object({archived_at: sortAscDesc.optional()}), z.object({id: sortAscDesc.optional()})])); 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 contactMini = z.object({id: z.number().int().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()}).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 vehicleSummary = 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: contactMini.optional(), specs: vehicleSpecs.optional()}).nullable(); export const getApiVehiclesArchivedResponse = z.object({start_cursor: z.string().nullable().optional(), next_cursor: z.string().nullable().optional(), per_page: z.number().int().optional(), estimated_remaining_count: z.number().int().optional(), filtered_by: vehicleArchivedFilteredBy.optional(), sorted_by: archivedSortedBy.optional(), records: z.array(vehicleSummary).optional()}); 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 }; /** * List Archived Vehicles * * GET /vehicles/archived */ export const getApiVehiclesArchived = async (args: GetApiVehiclesArchivedArgs, options?: GetApiVehiclesArchivedOptions) => { 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 (args.start_cursor != null) query.append("start_cursor", String(args.start_cursor)) if (args.per_page != null) query.append("per_page", String(args.per_page)) if (args.filter != null) query.append("filter", JSON.stringify(args.filter)) if (args.sort != null) query.append("sort", JSON.stringify(args.sort)) if (apiKey !== undefined) headers.set("Authorization", apiKey) if (accountToken !== undefined) headers.set("Account-Token", accountToken) const url = `${baseUrl.replace(/\/+$/, '')}/vehicles/archived${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(getApiVehiclesArchivedResponse, await res.json()) };