import {z} from 'zod' export type GetApiUsersMiniMeOptions = {baseUrl: string, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const mSI = z.record(z.string(), z.unknown()); export const tOSAcceptance = z.object({accepted_on: z.string().optional(), id: z.number().int().optional(), metadata: mSI.optional(), tos_version: z.string().optional(), user_id: z.number().int().optional()}); export const nullFloat64 = z.object({Float64: z.number().optional(), Valid: z.boolean().optional()}); export const driver = z.object({approved_by_admin_id: z.number().int().optional(), archived: z.boolean().optional(), birthdate: z.string().optional(), candidate_id: z.string().optional(), country: z.string().optional(), created: z.string().optional(), display_status: z.string().optional(), email: z.string().optional(), first_name: z.string().optional(), gender: z.string().optional(), id: z.number().int().optional(), is_old_enough: z.boolean().optional(), last_mvr: z.string().optional(), last_name: z.string().optional(), license_number: z.string().optional(), license_state: z.string().optional(), middle_name: z.string().optional(), status: z.string().optional(), updated: z.string().optional(), user_id: z.number().int().optional(), verification_upload_link: z.string().optional(), verified: z.boolean().optional(), zendesk_ticket_id: z.number().int().optional()}); export const dBInterfaceMap = z.unknown(); export const action = z.string(); export const earnedCredit = z.object({amount: z.number().int().optional(), booking_id: z.number().int().nullable().optional(), can_delete: z.boolean().optional(), can_edit: z.boolean().optional(), created: z.string().optional(), created_by_id: z.number().int().nullable().optional(), deleted: z.string().optional(), description: z.string().optional(), expires: z.string().optional(), has_children: z.boolean().optional(), id: z.number().int().optional(), metadata: dBInterfaceMap.optional(), parent_id: z.number().int().nullable().optional(), referred_by_user_id: z.number().int().nullable().optional(), referred_user_id: z.number().int().nullable().optional(), source: z.string().optional(), system_action: action.optional(), updated: z.string().optional(), user_id: z.number().int().optional()}); export const iMap = z.unknown(); export const gpsDevicesData = z.object({account_api_key: z.string().optional(), created: z.string().optional(), deleted: z.string().optional(), device_count: z.number().int().optional(), id: z.number().int().optional(), metadata: iMap.optional(), provider_type: z.string().optional(), updated: z.string().optional(), user_id: z.number().int().optional()}); export const dBStringSlice = z.array(z.string()); export const nullTime = z.object({Time: z.string().optional(), Valid: z.boolean().optional()}); export const taxRate = z.object({archived: z.boolean().optional(), created: z.string().optional(), description: z.string().optional(), id: z.number().int().optional(), marketplace: z.boolean().optional(), name: z.string().optional(), owner_id: z.number().int().optional(), rate: z.number().optional(), state: z.string().optional(), updated: z.string().optional(), zip_code: z.string().optional()}); export const rentalItem = z.object({applies_to_type: dBStringSlice.optional(), available: z.number().int().optional(), category: z.string().optional(), category_id: z.number().int().optional(), consigned_pay_pct: z.number().optional(), created: nullTime.optional(), daily: z.boolean().optional(), deferred: z.boolean().optional(), description: z.string().optional(), hidden: z.boolean().optional(), id: z.number().int().optional(), image_url: z.string().optional(), ledger_account_number: z.number().int().optional(), location_id: z.number().int().optional(), location_ids: z.array(z.number().int()).optional(), maximum_price: z.number().int().nullable().optional(), metadata: iMap.optional(), minimum_price: z.number().int().nullable().optional(), name: z.string().optional(), percent: z.number().optional(), percent_type: z.string().optional(), position: z.number().int().optional(), presentment_currency: z.string().optional(), price: z.number().int().optional(), rental_items_category_id: z.number().int().nullable().optional(), rental_items_category_name: z.string().optional(), rental_items_category_owner_name: z.string().optional(), rental_items_category_reason: z.string().optional(), rental_items_category_requested_name: z.string().optional(), rental_items_category_status: z.string().optional(), required: z.boolean().optional(), settlement_currency: z.string().optional(), tax: z.number().int().optional(), tax_rate_id: taxRate.optional(), tax_rate_ids: z.array(z.number().int()).optional(), travelers: z.number().int().optional(), updated: nullTime.optional()}); export const paymentAddress = z.object({city: z.string().optional(), country: z.string().optional(), state: z.string().optional(), street: z.string().optional(), street_etc: z.string().optional(), zip: z.string().optional()}); export const paymentProcessorName = z.string(); export const paymentProcessor = z.object({country: z.string().optional(), external_processor: z.string().optional(), external_processor_id: z.string().optional(), name: paymentProcessorName.optional()}); export const paymentProcessingInfo = z.object({address: paymentAddress.optional(), archived: z.boolean().optional(), bank_address: z.string().optional(), bank_last_four: z.string().optional(), bank_name: z.string().optional(), base_currency: z.string().optional(), can_accept_payments: z.boolean().optional(), can_archive_bank: z.boolean().optional(), can_send_payments: z.boolean().optional(), capabilities: dBInterfaceMap.optional(), created: z.string().optional(), customer_id: z.string().optional(), debit_agreement_date: z.string().optional(), deposits_disabled: z.boolean().optional(), form: z.record(z.string(), z.unknown()).optional(), fund_id: z.string().optional(), gateway_type: z.string().optional(), id: z.number().int().optional(), managed_account_id: z.string().optional(), missing_fields: dBStringSlice.optional(), missing_fields_change_description: z.array(z.string()).optional(), needs_migration: z.boolean().optional(), nickname: z.string().optional(), notes: z.string().optional(), owner_id: z.number().int().optional(), payment_processor: paymentProcessor.optional(), phone: z.string().optional(), reference_number: z.string().optional(), sort_code: z.string().optional(), status: z.string().optional(), support_phone: z.string().optional(), updated: z.string().optional()}); export const dBBoolMap = z.record(z.string(), z.boolean()); export const ineligibleRental = z.object({id: z.number().int().optional(), insurance_state: z.string().optional(), name: z.string().optional()}); export const proStatus = z.object({approval_rate: z.number().optional(), bank_account: z.boolean().optional(), completed_points: z.number().int().optional(), description: z.boolean().optional(), eligible_insurance: z.boolean().optional(), pending_rentals: z.array(ineligibleRental).optional(), pro: z.boolean().optional(), profile_percent_complete: z.number().int().optional(), rating: z.number().optional(), response_time: z.number().int().optional(), response_time_rank: z.number().int().optional(), total_points: z.number().int().optional(), verified_phone: z.boolean().optional()}); export const address = z.object({city: z.string().optional(), country: z.string().optional(), county: z.string().optional(), state: z.string().optional(), street: z.string().optional(), street_etc: z.string().optional(), zip: z.string().optional()}); export const bio = z.object({description: z.string().optional(), experience: z.string().optional(), years_owned: z.number().int().optional(), years_rving: z.number().int().optional()}); export const bookingOptions = z.object({bid_quality_preference: nullFloat64.optional(), coachnet_premium: z.number().int().optional(), custom_insurance_text: z.string().nullable().optional(), default_auto_insurance_bundle_tier: z.number().int().optional(), default_insurance_bundle_tier: z.number().int().optional(), deposit_percentage: z.number().optional(), disable_coachnet: z.boolean().optional(), disable_instamatch: z.boolean().nullable().optional(), final_payment_due_days: z.number().int().optional(), from_time: z.number().int().optional(), instant_book: z.boolean().optional(), instant_book_leeway: z.number().int().optional(), instant_book_type: z.string().optional(), insurance_coverage: z.string().optional(), insurance_renter_adjustable: z.boolean().optional(), minimum_days: z.number().int().optional(), minimum_deposit: z.number().int().optional(), request_less_than_minimum_days: z.number().int().optional(), require_booking_time: z.boolean().optional(), require_driver_checks: z.boolean().optional(), require_insurance: z.boolean().optional(), security_deposit_due_days: z.number().int().optional(), tax_rate_id: z.number().int().optional(), tax_rate_ids: z.array(z.number().int()).optional(), to_time: z.number().int().optional(), turnaround_days_after: z.number().int().optional(), use_day_pricing: z.boolean().optional(), use_tax_inclusive_pricing: z.boolean().optional(), variable_fees_upfront: z.boolean().optional()}); export const bookingRestrictions = z.object({all_booking_cancellation_threshold: z.number().int().optional(), all_booking_cancellations_six_months: z.number().int().optional(), cancellation_penalty_less_than_7_days: z.number().int().optional(), cancellation_penalty_more_than_7_days: z.number().int().optional(), instant_book_cancellation_threshold: z.number().int().optional(), instant_book_cancellations_six_months: z.number().int().optional(), is_instant_book_banned: z.boolean().optional()}); export const dBMSISlice = z.array(z.record(z.string(), z.unknown())); export const business = z.object({cancel_policy: z.string().optional(), cancel_policy_combo_bookings: z.string().optional(), cancel_text: z.string().optional(), checkout_questions: dBMSISlice.optional(), consigned_keep_pct_addon_fee: z.number().optional(), consigned_keep_pct_cc_fee: z.number().optional(), consigned_keep_pct_insurance_fee: z.number().optional(), consigned_pay_pct: z.number().optional(), consigned_pay_pct_generator: z.number().optional(), consigned_pay_pct_mileage: z.number().optional(), description: z.string().optional(), fax: z.string().optional(), ga4_id: z.string().optional(), google_analytics_id: z.string().nullable().optional(), google_tag_manager_id: z.string().nullable().optional(), hide_rentals: z.boolean().optional(), house_rules: z.string().optional(), localized_languages: dBStringSlice.optional(), name: z.string().optional(), outdoorsy_display_name: z.string().optional(), phone: z.string().optional(), segment_token: z.string().optional(), terms_of_service: z.string().optional(), website: z.string().optional()}); export const locAvailabilityInfo = z.object({end_time: z.number().int().optional(), start_time: z.number().int().optional(), unavailable: z.boolean().optional()}); export const locAvailabilityDay = z.object({dropoff: locAvailabilityInfo.optional(), pickup: locAvailabilityInfo.optional()}); export const locAvailability = z.object({days: z.record(z.string(), locAvailabilityDay).optional()}); export const locationLocale = z.object({base_currency: z.string().optional()}); export const specialHourDropoff = z.object({end_time: z.number().int().optional(), start_time: z.number().int().optional(), unavailable: z.boolean().optional()}); export const specialHourPickup = z.object({end_time: z.number().int().optional(), start_time: z.number().int().optional(), unavailable: z.boolean().optional()}); export const specialHour = z.object({created: z.string().optional(), created_from_id: z.number().int().optional(), dropoff: specialHourDropoff.optional(), end_date: z.string().optional(), id: z.number().int().optional(), location_id: z.number().int().nullable().optional(), name: z.string().optional(), owner_id: z.number().int().optional(), pickup: specialHourPickup.optional(), repeats: z.boolean().optional(), start_date: z.string().optional(), updated: z.string().optional(), weekdays: dBStringSlice.optional()}); export const location = z.object({archived: z.boolean().optional(), availability: locAvailability.optional(), city: z.string().optional(), country: z.string().optional(), county: z.string().optional(), created: z.string().optional(), custom_insurance_text: z.string().nullable().optional(), dropoff_end_time: z.number().int().optional(), dropoff_start_time: z.number().int().optional(), eligible_for_system_tax_rates: z.boolean().optional(), employer_identification_number: z.string().optional(), id: z.number().int().optional(), lat: z.number().optional(), lng: z.number().optional(), locale: locationLocale.optional(), name: z.string().optional(), opt_out_marketplace_taxes: z.boolean().optional(), owner_id: z.number().int().optional(), payment_processing_info_id: z.number().int().optional(), phone: z.string().optional(), pickup_end_time: z.number().int().optional(), pickup_start_time: z.number().int().optional(), rental_count: z.number().int().optional(), special_hours: z.array(specialHour).optional(), state: z.string().optional(), state_tax_id: z.string().optional(), street: z.string().optional(), street_etc: z.string().optional(), tax_rate_id: taxRate.optional(), tax_rate_ids: z.array(z.number().int()).optional(), tax_split_eligible: z.boolean().optional(), updated: z.string().optional(), waived_insurance_text: z.string().nullable().optional(), zip: z.string().optional()}); export const license = z.object({}); export const locale = z.object({base_currency: z.string().optional(), date_format: z.string().optional(), distance_unit: z.string().optional(), language: z.string().optional(), length_unit: z.string().optional(), liquid_unit: z.string().optional(), time_format: z.string().optional(), timezone: z.string().optional(), weight_unit: z.string().optional()}); export const notificationBrowser = z.object({all: z.boolean().optional()}); export const notificationEmail = z.object({abandoned_checkout: z.boolean().optional(), all: z.boolean().optional()}); export const notificationMobile = z.object({all: z.boolean().optional()}); export const notificationSMS = z.object({abandoned_checkout: z.boolean().optional(), bookings: z.boolean().optional(), marketing: z.boolean().optional(), messages: z.boolean().optional()}); export const notificationSettings = z.object({browser: notificationBrowser.optional(), email: notificationEmail.optional(), mobile: notificationMobile.optional(), sms: notificationSMS.optional()}); export const dBIntSlice = z.array(z.number().int()); export const social = z.object({count: z.number().int().optional(), link: z.string().optional(), rating: z.number().optional(), site: z.string().optional()}); export const socialSlice = z.array(social); export const profile = z.object({address: address.optional(), affiliate_description: z.string().optional(), anonymized_by: z.number().int().optional(), anonymized_on: z.string().optional(), avatar_url: z.string().optional(), bio: bio.optional(), birthdate: z.string().optional(), booking_options: bookingOptions.optional(), booking_restrictions: bookingRestrictions.optional(), business: business.optional(), coaching_completed: z.boolean().optional(), coaching_completed_on_date: z.string().optional(), coaching_dismissed_count: z.number().int().optional(), dealer_locations: z.array(location).optional(), disable_phone: z.boolean().optional(), email: z.string().optional(), employee_locations: z.array(location).optional(), exclude_locations: dBStringSlice.optional(), extra: dBInterfaceMap.optional(), first_name: z.string().optional(), gender: z.string().optional(), google_place_id: z.string().optional(), guest_smart_match_opt_out: z.boolean().optional(), last_name: z.string().optional(), license: license.optional(), listing_coach_dismiss_flag: z.boolean().optional(), locale: locale.optional(), logo_url: z.string().optional(), mast_image_url: z.string().optional(), nationality: z.string().optional(), notifications: notificationSettings.optional(), od_stays_opt_in: z.boolean().optional(), phone: z.string().optional(), sd_waiver_enabled: z.boolean().nullable().optional(), sms_exclude_locations: dBIntSlice.optional(), social: socialSlice.optional(), title: z.string().optional(), unavailable_color_labels: dBInterfaceMap.optional(), user_type: z.string().optional()}); export const rolePermission = z.object({can_create: z.boolean().optional(), can_delete: z.boolean().optional(), can_read: z.boolean().optional(), can_update: z.boolean().optional(), created: z.string().optional(), id: z.number().int().optional(), label: z.string().optional(), name: z.string().optional(), permission_id: z.number().int().optional(), role_id: z.number().int().optional(), updated: z.string().optional()}); export const role = z.object({active: z.boolean().optional(), created: z.string().optional(), deleted: z.boolean().optional(), id: z.number().int().optional(), name: z.string().optional(), owner_user_id: z.number().int().optional(), permissions: z.array(rolePermission).optional(), updated: z.string().optional()}); export const userSecurity = z.object({force_password_reset: z.boolean().optional(), social_login_disabled: z.boolean().optional(), user_id: z.number().int().optional()}); export const sSO = z.object({auth_url: z.string().optional(), client_id: z.string().optional(), client_secret: z.string().optional(), token_url: z.string().optional()}); export const tracking = z.object({campaign: z.string().optional(), content: z.string().optional(), intent: z.string().optional(), medium: z.string().optional(), source: z.string().optional(), term: z.string().optional()}); export const verifications = z.object({email: z.boolean().optional(), facebook: dBInterfaceMap.optional(), has_sent_message_without_phone_verified: z.boolean().optional(), phone: z.boolean().optional()}); export const user = z.object({accept_percent: z.number().optional(), accepted_tos_version: z.number().int().optional(), accepted_tos_versions: z.array(tOSAcceptance).optional(), account_id: z.string().nullable().optional(), active_quotes_count: z.number().int().optional(), active_reservations_count: z.number().int().optional(), addon_fee_percentage: z.number().optional(), admin: z.boolean().optional(), admin_level: z.number().int().optional(), api_key: z.string().optional(), approved_drivers: z.boolean().optional(), archived: z.boolean().nullable().optional(), auto_owner: z.boolean().optional(), average_response_time: nullFloat64.optional(), bank_country: z.string().optional(), banned: z.boolean().optional(), campground_owner: z.boolean().optional(), campground_user: z.boolean().optional(), can_accept_payments: z.boolean().optional(), cash_credits: z.number().int().optional(), cc_fee_percentage: z.number().optional(), commercial_insurance: z.boolean().optional(), completed_bookings: z.number().int().optional(), confirmed: z.boolean().optional(), created: z.string().optional(), credits: z.number().int().optional(), csm_agent_id: z.number().int().optional(), deal_id: z.string().optional(), dealer: z.boolean().optional(), deposits_disabled: z.boolean().optional(), display_w9_reminder: z.boolean().optional(), driver_checks_enabled: z.boolean().optional(), drivers: z.array(driver).optional(), earned_credits: z.array(earnedCredit).optional(), employee: z.boolean().optional(), esign_enabled: z.boolean().optional(), fleet_api_key: z.string().optional(), force_reconnect_bank: z.boolean().optional(), fraud_review_complete: z.boolean().optional(), fraudulent: z.boolean().optional(), gps_device_data: gpsDevicesData.optional(), group_on_map: z.boolean().optional(), guest: z.boolean().optional(), has_connected_gateway: z.boolean().optional(), has_gps_device: z.boolean().optional(), has_notes_to_renters_migrated: z.boolean().optional(), has_setup_intent_enabled: z.boolean().optional(), hidden: z.boolean().optional(), host_type_by_rental_category: z.string().optional(), host_type_by_rental_count: z.string().optional(), id: z.number().int().optional(), impersonated: z.boolean().optional(), import_id: z.string().optional(), inactive_by: z.number().int().optional(), inactive_on: z.string().optional(), is_admin_managed_superhost: z.boolean().optional(), is_award_winner: z.boolean().optional(), is_csm_agent: z.boolean().optional(), is_military_host: z.boolean().optional(), is_superhost: z.boolean().optional(), items: z.array(rentalItem).optional(), last_accessed_ip: z.string().nullable().optional(), last_activity_at: z.string().optional(), legacy_tracking_device_count: z.number().int().optional(), metadata: mSI.optional(), missing_fields: dBStringSlice.optional(), num_reservations: z.number().int().optional(), offer_roamly: z.boolean().optional(), offers_delivery: z.boolean().optional(), owned_by_id: z.number().int().optional(), owner: z.boolean().optional(), owner_fee_percentage: z.number().optional(), owner_score: z.number().optional(), owner_score_count: z.number().int().optional(), partner_app_id: z.number().int().nullable().optional(), partner_id: z.number().int().nullable().optional(), payment_processing_info: z.array(paymentProcessingInfo).optional(), pending_email: z.string().optional(), permissions: dBBoolMap.optional(), pro: z.boolean().optional(), pro_status: proStatus.optional(), profile: profile.optional(), reconnect_bank: z.boolean().optional(), referral_code: z.string().optional(), referred_by_id: z.number().int().optional(), referred_owner_paid: z.boolean().optional(), referred_owner_payout_amount: z.number().int().optional(), referred_renter_paid: z.boolean().optional(), referred_renter_payout_amount: z.number().int().optional(), renter: z.boolean().optional(), renter_fee_percentage: z.number().optional(), require_w9_form: z.boolean().optional(), require_w9_to_accept_booking: z.boolean().optional(), response_percent: nullFloat64.optional(), roadside_missing: dBStringSlice.optional(), roamly_carshare_user: z.boolean().optional(), roamly_policy_id: z.string().optional(), roamly_policy_number: z.string().optional(), roamly_status: z.string().optional(), role: role.optional(), rv_owner: z.boolean().optional(), score: z.number().optional(), score_count: z.number().int().optional(), search_metrics_start_date: z.string().optional(), security: userSecurity.optional(), self_serve_signup: z.boolean().nullable().optional(), session_id: z.string().optional(), show_gps_deprecation_warning: z.boolean().optional(), signup_source: z.string().optional(), skip_w9_to_publish: z.boolean().optional(), slug: z.string().optional(), sso: sSO.optional(), stay_owner: z.boolean().optional(), superhost_cancel_rate: z.number().optional(), superhost_departed_bookings: z.number().int().optional(), superhost_last_assessment: z.string().optional(), superhost_last_start_assessment: z.string().optional(), superhost_response_rate: z.number().optional(), superhost_review_rate: z.number().optional(), superhost_reviewed_bookings: z.number().int().optional(), time_to_first_action: z.number().int().optional(), tolls_enabled: z.boolean().optional(), tollspot_account_number: z.string().optional(), tollspot_account_status: z.string().optional(), tos_acceptance_date: z.string().optional(), total_bookings: z.number().int().optional(), tracking: tracking.optional(), undelivered_emails_count: z.number().int().optional(), use_fees_increase: z.boolean().nullable().optional(), use_insurance_bundles: z.boolean().optional(), verifications: verifications.optional(), viewed_outdoorsy_host_beta: z.boolean().optional(), viewed_roamly_ad: z.boolean().optional(), viewed_smart_match_banner: z.boolean().optional(), viewed_smart_pricing_banner: z.boolean().optional(), viewed_super_host_banner: z.boolean().optional(), w9_completed_at: z.string().optional(), w9_eligible: z.boolean().optional(), w9_tax_form_completed: z.boolean().optional(), w9_tin_status: z.string().optional(), waive_w9_completion: z.boolean().optional(), wheelbase_fee: z.number().int().nullable().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 }; /** * Returns currently logged in user with minimal info. * * GET /users/mini_me * * Also accepts auth: API-Key */ export const getApiUsersMiniMe = async (options: GetApiUsersMiniMeOptions) => { const {baseUrl, fetch: fetchFn = fetch, Bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (Bearer !== undefined) headers.set("Authorization", Bearer) const url = `${baseUrl.replace(/\/+$/, '')}/users/mini_me${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(user, await res.json()) };