import {z} from 'zod' export type GetApiMessagesIdArgs = {id: number}; export type GetApiMessagesIdOptions = {baseUrl: string, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const iSlice = z.array(z.unknown()); export const dailyChange = z.object({date: z.string().optional(), price: z.number().int().optional(), rules: iSlice.optional()}); export const dBInterfaceMap = z.unknown(); export const noticeResponse = z.object({guest_acknowledgement_text: z.string().optional(), guest_need_to_acknowledge: z.boolean().optional(), guest_user_text: z.string().optional(), host_acknowledgement_text: z.string().optional(), host_help_url: z.string().optional(), host_need_to_acknowledge: z.boolean().optional(), host_user_text: z.string().optional(), id: z.number().int().optional(), name: z.string().optional()}); export const proposal = z.object({action: z.string().optional(), booking_id: z.number().int().optional(), created: z.string().optional(), daily_changes: z.array(dailyChange).optional(), details: dBInterfaceMap.optional(), dry_create: z.boolean().optional(), future_booking: z.unknown(), id: z.number().int().optional(), note: z.string().optional(), object_id: z.number().int().optional(), object_type: z.string().optional(), owner_acknowledged: z.string().optional(), owner_id: z.number().int().optional(), renter_acknowledged: z.string().optional(), renter_dismissed: z.string().optional(), status: z.string().optional(), updated: z.string().optional(), user_notice_events: z.array(noticeResponse).optional(), user_notices_acknowledged: z.array(z.number().int()).optional()}); export const attentionItemData = z.object({auto_expires: z.boolean().optional(), completed_at: z.string().optional(), confirmation_message: z.string().optional(), conversation_first_message: z.number().int().optional(), created_at: z.string().optional(), daily: z.boolean().optional(), description: z.string().optional(), expires_at: z.string().optional(), from: z.string().optional(), group_item_details: z.array(proposal).optional(), id: z.number().int().optional(), message: z.string().optional(), name: z.string().optional(), price: z.number().int().optional(), quantity: z.number().int().optional(), rental_amount: z.number().int().optional(), to: z.string().optional(), total: z.number().int().optional()}); export const attentionItem = z.object({data: attentionItemData.optional(), is_actionable: z.boolean().optional(), type: z.string().optional()}); export const nullTime = z.object({Time: z.string().optional(), Valid: z.boolean().optional()}); export const bookingTaxRate = z.object({booking_id: z.number().int().optional(), created: z.string().optional(), deleted: z.boolean().optional(), id: z.number().int().optional(), object_id: z.number().int().optional(), object_type: z.string().optional(), payable_to: z.string().optional(), source: z.string().optional(), state: z.string().optional(), tax_amount: z.number().int().optional(), tax_description: z.string().optional(), tax_name: z.string().optional(), tax_rate: z.number().optional(), tax_rate_id: z.number().int().optional(), updated: z.string().optional(), zip_code: z.string().optional()}); export const bookingItem = z.object({_deleted: z.boolean().optional(), booking_id: z.number().int().optional(), coachnet_item: z.boolean().optional(), consigned_pay_amount: z.number().int().optional(), count: z.number().int().optional(), created: nullTime.optional(), daily: z.boolean().optional(), deferred: z.boolean().optional(), deferred_total: z.number().int().nullable().optional(), deleted_at: nullTime.optional(), delivery: z.boolean().optional(), description: z.string().optional(), discount_amount: z.number().int().optional(), generator: z.boolean().optional(), id: z.number().int().optional(), image_url: z.string().optional(), maximum_price: z.number().int().nullable().optional(), mileage: z.boolean().optional(), minimum_price: z.number().int().nullable().optional(), name: z.string().optional(), original_consigned_pay_pct: z.number().optional(), original_tax_rate_id: z.number().int().optional(), other_claim: z.boolean().optional(), outdoorsy_item: z.boolean().optional(), parent_item_id: z.number().int().optional(), parent_item_type: z.string().optional(), percent: z.number().optional(), percent_type: z.string().optional(), position: z.number().int().optional(), premium_amount: z.number().int().optional(), premium_total: z.number().int().optional(), price: z.number().int().optional(), rental_amount: z.boolean().optional(), required: z.boolean().optional(), tax_amount: z.number().int().optional(), tax_description: z.string().optional(), tax_name: z.string().optional(), tax_rate: z.number().optional(), tax_rates: z.array(bookingTaxRate).optional(), total: z.number().int().optional(), updated: nullTime.optional()}); export const bookingLocale = z.object({base_currency: z.string().optional(), distance_unit: z.string().optional()}); export const bookingDriverCheck = z.object({arguments: z.record(z.string(), z.unknown()).optional(), country: z.string().optional(), created: z.string().optional(), display_status: z.string().optional(), external_id: z.string().optional(), failure_reason: z.string().optional(), forced_approval_by: z.string().optional(), forced_approval_reason: z.string().optional(), forced_failure_by: z.number().int().optional(), forced_failure_reason: z.string().optional(), id: z.number().int().optional(), is_old_enough: z.boolean().optional(), last_created: z.string().optional(), license_state: z.string().optional(), method: z.string().optional(), ofac_sdn_score: z.number().optional(), rv_length: z.string().optional(), score: z.number().int().optional(), status: z.string().optional(), theft_score: z.number().int().optional(), validation_id: z.string().optional(), verification_upload_link: z.string().optional(), verified: z.boolean().optional()}); export const bookingDriver = z.object({age_verified: z.boolean().optional(), avatar_url: z.string().optional(), birthdate: z.string().optional(), booking_id: z.number().int().optional(), checkr_trust_verified: z.boolean().optional(), checks: z.array(bookingDriverCheck).optional(), driver_check_verified: z.boolean().optional(), driver_verification_status: z.string().optional(), email: z.string().optional(), evident_check_verified: z.boolean().optional(), first_name: z.string().optional(), has_driving_record_check: z.boolean().optional(), id: z.number().int().optional(), invite_status: z.string().optional(), last_name: z.string().optional(), legacy_driver: z.boolean().optional(), named_passenger: z.boolean().optional(), owned_by_id: z.number().int().optional(), persona_check_verified: z.boolean().optional(), require_evident: z.boolean().optional(), require_persona: z.boolean().optional(), roamly_risk_check_verified: z.boolean().optional(), role: z.string().optional(), show_persona_flow: z.boolean().optional(), tessera_check_verified: z.boolean().optional(), tint_check_verified: z.boolean().optional(), token: z.string().optional(), validation_status: z.string().optional(), verified: z.boolean().optional(), verified_checks_count: z.number().int().optional()}); export const campsiteSummary = z.object({beds: z.number().int().optional(), campground_id: z.number().int().optional(), campground_name: z.string().optional(), campground_sitemap_url: z.string().optional(), display_campsite_type: z.string().optional(), display_max_vehicle_length: z.string().optional(), display_site_type: z.string().optional(), is_odn: z.boolean().optional(), rental_id: z.number().int().optional(), site_type: z.string().optional(), sleeps: z.number().int().optional(), type: z.string().optional()}); export const staySummary = z.object({baths: z.number().int().optional(), bedrooms: z.number().int().optional(), beds: z.number().int().optional(), check_in_type: z.string().optional(), display_stay_type: z.string().optional(), location_description: z.string().optional(), max_parking_spaces: z.number().int().optional(), parking_onsite: z.boolean().optional(), rental_id: z.number().int().optional(), sleeps: z.number().int().optional(), type: z.string().optional()}); export const rentalSummary = z.object({campsite_summary: campsiteSummary.optional(), disallow_movement: z.boolean().optional(), display_type: z.string().optional(), formatted_length: z.string().optional(), id: z.number().int().optional(), interior_primary_image_url: z.string().optional(), internal_id: z.string().optional(), location: z.string().optional(), name: z.string().optional(), primary_image_url: z.string().optional(), rental_category: z.string().optional(), sleeps: z.number().int().optional(), slug: z.string().optional(), stay_summary: staySummary.optional(), style: z.string().optional(), type: z.string().optional()}); export const userPartial = z.object({avatar_url: z.string().optional(), business_name: z.string().optional(), email: z.string().optional(), first_name: z.string().optional(), id: z.number().int().optional(), last_name: z.string().optional(), phone: z.string().optional()}); export const waiverSummary = z.object({description: z.string().optional(), owner_completed: z.boolean().optional(), owner_terms: z.string().optional(), renter_completed: z.boolean().optional(), renter_confirmation_description: z.string().optional(), renter_confirmation_title: z.string().optional(), renter_terms: z.string().optional()}); export const minBooking = z.object({attention_items: z.array(attentionItem).optional(), conversation_id: z.number().int().optional(), created: z.string().optional(), details: dBInterfaceMap.optional(), display_status: z.string().optional(), display_status_style: z.string().optional(), from: z.string().optional(), id: z.number().int().optional(), instant_book: z.boolean().optional(), is_actionable: z.boolean().optional(), items: z.array(bookingItem).optional(), locale: bookingLocale.optional(), owner_approved: z.boolean().optional(), owner_payout: z.number().int().optional(), passengers: z.array(bookingDriver).optional(), rental: rentalSummary.optional(), renter: userPartial.optional(), renter_approved: z.boolean().optional(), stage: z.string().optional(), status: z.string().optional(), to: z.string().optional(), total: z.number().int().optional(), updated: z.string().optional(), waiver_summary: waiverSummary.optional()}); export const bookingSummary = z.object({from: z.string().optional(), id: z.number().int().optional(), to: z.string().optional()}); export const renterDestinationData = z.object({region: z.string().optional(), spot_types: z.array(z.string()).optional(), stops: z.array(z.string()).optional()}); export const dBIntSlice = z.array(z.number().int()); export const message = z.object({actor_id: z.number().int().optional(), archived: z.boolean().optional(), booking: minBooking.optional(), booking_summary: bookingSummary.optional(), clicked: z.string().optional(), conversation_id: z.number().int().optional(), destination_data: renterDestinationData.optional(), file_urls: z.array(z.string()).optional(), files: dBIntSlice.optional(), flagged: z.boolean().nullable().optional(), flagged_text: z.string().nullable().optional(), from_email: z.string().nullable().optional(), id: z.number().int().optional(), image: z.string().nullable().optional(), latest_status: z.string().nullable().optional(), opened: z.string().optional(), origin: z.string().nullable().optional(), proxy_interaction_id: z.string().nullable().optional(), read: z.boolean().optional(), receiver_id: z.number().int().optional(), ref_booking_id: z.number().int().optional(), ref_rental_id: z.number().int().optional(), rental_summary: z.unknown(), sender_id: z.number().int().optional(), sentiment: z.string().optional(), sentiment_confidence: z.number().optional(), spam: z.boolean().optional(), system: z.boolean().optional(), template: z.string().optional(), text: z.string().optional(), timestamp: z.string().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 a message by id * * GET /messages/{id} * * Also accepts auth: API-Key */ export const getApiMessagesId = async (args: GetApiMessagesIdArgs, options: GetApiMessagesIdOptions) => { 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(/\/+$/, '')}/messages/${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(message, await res.json()) };