import {z} from 'zod' export type BookStages = 1 | 2 | 3 | 4 | 5 | 6 | 7; export type ProductTypes = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20; export type TravellerTypes = 1 | 2 | 3; export type TravellerTitles = 0 | 1 | 2 | 3 | 4 | 5 | 6; export type GenderTypes = 0 | 1 | 2; export type FOID = 1 | 2 | 3; export type PhoneTypes = 1 | 2 | 3 | 4; export type PhoneNumber = {type?: PhoneTypes | undefined, countryPrefix?: (string | null) | undefined, number?: (string | null) | undefined}; export type TravellerData = {type: TravellerTypes, title: TravellerTitles, firstname: string, middleNames?: (string | null) | undefined, surname: string, dateOfBirth?: string | undefined, age?: (number | null) | undefined, gender?: GenderTypes | undefined, nationality?: (string | null) | undefined, foidType?: FOID | undefined, foidNumber?: (string | null) | undefined, foidStartDate?: (string | null) | undefined, foidExpiryDate?: (string | null) | undefined, foidIssuingCountry?: (string | null) | undefined, emailAddress?: (string | null) | undefined, telephone?: PhoneNumber | undefined, extras?: (Array | null) | undefined, roomAllocIdx?: (number | null) | undefined}; export type ExtraSelectionItem = {eid: string, gid?: (string | null) | undefined, tid?: (number | null) | undefined, qty: number, participants?: (Array | null) | undefined}; export type FlightRouteSelectionItem = {rid: string, extras?: (Array | null) | undefined}; export type FlightSelectionItem = {rid: string, riDs?: (Array | null) | undefined, routes?: (Array | null) | undefined, extras?: (Array | null) | undefined, travellers?: (Array | null) | undefined}; export type AccommodationUnitSelection = {uid: string, rid: string, qty: number}; export type QuestionAnswer = {qid?: number | undefined, answer?: (string | null) | undefined}; export type AccommodationSelectionItem = {rid: string, sessionRef?: (string | null) | undefined, selectionDate?: (string | null) | undefined, flightArrival?: (string | null) | undefined, units?: (Array | null) | undefined, extras?: (Array | null) | undefined, questionAnswers?: (Array | null) | undefined, guests?: (Array | null) | undefined}; export type PackageSelectionItem = {rid: string, fltRID?: (string | null) | undefined, selectionDate?: (string | null) | undefined, units?: (Array | null) | undefined, extras?: (Array | null) | undefined, guests?: (Array | null) | undefined, promoCode?: (string | null) | undefined}; export type TourSelectionItem = {rid: string, did: string, travellers?: (Array | null) | undefined}; export type TicketOptionSelection = {oid: string, qty: number, dateOption?: (string | null) | undefined, subOptions?: (Array | null) | undefined, extras?: (Array | null) | undefined}; export type TicketSelectionItem = {rid: string, pickupPointID?: (number | null) | undefined, options?: (Array | null) | undefined, questionAnswers?: (Array | null) | undefined, travellers?: (Array | null) | undefined}; export type TransferSelectionItem = {rid: string, extras?: (Array | null) | undefined, questionAnswers?: (Array | null) | undefined, travellers?: (Array | null) | undefined}; export type CarRentalSelectionItem = {rid: string, pid?: (string | null) | undefined, extras?: (Array | null) | undefined, questionAnswers?: (Array | null) | undefined, driver?: TravellerData | undefined, additionalDriver?: TravellerData | undefined}; export type InsuranceSelectionItem = {rid: string, extras?: (Array | null) | undefined, questionAnswers?: (Array | null) | undefined, travellers?: (Array | null) | undefined}; export type AirportExtrasSelectionItem = {rid: string, pid?: (string | null) | undefined, questionAnswers?: (Array | null) | undefined, travellers?: (Array | null) | undefined}; export type MultiCityStepSelectionCriteria = {transfer?: TransferSelectionItem | undefined, carRental?: CarRentalSelectionItem | undefined}; export type MultiCitySelectionItem = {stepExtras?: ({[key: string]: MultiCityStepSelectionCriteria} | null) | undefined, travellers?: (Array | null) | undefined}; export type ContactInformation = {internalRef?: (string | null) | undefined, emailAddress?: (string | null) | undefined, acceptMarketing?: boolean | undefined, acceptTerms?: boolean | undefined, telephone?: PhoneNumber | undefined, title?: TravellerTitles | undefined, firstname?: (string | null) | undefined, surname?: (string | null) | undefined, company?: (string | null) | undefined, address1?: (string | null) | undefined, address2?: (string | null) | undefined, city?: (string | null) | undefined, state?: (string | null) | undefined, postalCode?: (string | null) | undefined, countryCode?: (string | null) | undefined}; export type SelectionCriteria = {previousStage?: BookStages | undefined, previousStepId?: (number | null) | undefined, previousSID?: (string | null) | undefined, returnUpsells?: (Array | null) | undefined, isUpsell?: boolean | undefined, orderRef?: (string | null) | undefined, flight?: FlightSelectionItem | undefined, accommodation?: AccommodationSelectionItem | undefined, package?: PackageSelectionItem | undefined, tour?: TourSelectionItem | undefined, ticket?: TicketSelectionItem | undefined, transfer?: TransferSelectionItem | undefined, carRental?: CarRentalSelectionItem | undefined, insurance?: InsuranceSelectionItem | undefined, airportExtras?: (Array | null) | undefined, extras?: (Array | null) | undefined, multiCity?: MultiCitySelectionItem | undefined, contactInfo?: ContactInformation | undefined, specialRequests?: (string | null) | undefined, depositOptionID?: (number | null) | undefined}; export type CreateApiReserveSearchIdSearchKeyArgs = {searchId: number, searchKey: string, interactSession?: string | undefined, accommodation?: string | undefined, body: SelectionCriteria}; export type CreateApiReserveSearchIdSearchKeyOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const memberTypes = z.union([z.literal(1), z.literal(2)]); export const travellerTitles = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6)]); export const phoneTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const accountPhoneNumber = z.object({id: z.number().int().optional(), type: phoneTypes.optional(), countryPrefix: z.string().nullable().optional(), number: z.string().nullable().optional(), isPrimary: z.boolean().optional()}); export const accountAddress = z.object({id: z.number().int().optional(), name: z.string().nullable().optional(), company: z.string().nullable().optional(), line1: z.string().nullable().optional(), line2: z.string().nullable().optional(), city: z.string().nullable().optional(), state: z.string().nullable().optional(), postalCode: z.string().nullable().optional(), countryCode: z.string().nullable().optional(), isPrimary: z.boolean().optional()}); export const giftVoucher = z.object({id: z.number().int().optional(), code: z.string().nullable().optional(), name: z.string().nullable().optional(), startDate: z.string().nullable().optional(), expiryDate: z.string().nullable().optional(), currency: z.string().nullable().optional(), balance: z.number().optional()}); export const accountCreditLimit = z.object({creditAmount: z.number().optional(), remainingAmount: z.number().optional(), currency: z.string().nullable().optional()}); export const memberAccount = z.object({id: z.number().int().optional(), adminKey: z.string().nullable().optional(), scope: memberTypes.optional(), passwordHash: z.string().nullable().optional(), passwordSalt: z.string().nullable().optional(), email: z.string().nullable().optional(), emailConfirmed: z.boolean().optional(), whatsAppNumber: z.string().nullable().optional(), whatsAppConfirmed: z.boolean().optional(), title: travellerTitles.optional(), firstname: z.string().nullable().optional(), surname: z.string().nullable().optional(), permissions: z.array(z.string()).nullable().optional(), acceptMarketing: z.boolean().nullable().optional(), currencyCode: z.string().nullable().optional(), language: z.string().nullable().optional(), boRef: z.string().nullable().optional(), crmid: z.string().nullable().optional(), bio: z.string().nullable().optional(), created: z.string().optional(), telephones: z.array(accountPhoneNumber).nullable().optional(), addresses: z.array(accountAddress).nullable().optional(), giftVouchers: z.array(giftVoucher).nullable().optional(), additionalData: z.record(z.string(), z.string().nullable()).nullable().optional(), numOrders: z.number().int().optional(), ordersTotalSpend: z.number().optional(), companyId: z.number().int().nullable().optional(), companyName: z.string().nullable().optional(), companyABTA: z.string().nullable().optional(), companyIATA: z.string().nullable().optional(), companyCommissionInfo: z.string().nullable().optional(), companyLogoUrl: z.string().nullable().optional(), membershipId: z.number().int().nullable().optional(), membershipPrice: z.number().nullable().optional(), membershipName: z.string().nullable().optional(), rewardMemberPrice: z.boolean().optional(), subscriptionID: z.string().nullable().optional(), companyCreditLimit: accountCreditLimit.optional(), isNewAccount: z.boolean().optional()}); export const environments = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const searchTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15)]); export const distanceUnits = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const tripTypes = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const cabinClasses = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const timePreferences = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const flightLeg = z.object({originCode: z.string().min(3).max(11), originName: z.string().nullable().optional(), destinationCode: z.string().min(3).max(11), destinationName: z.string().nullable().optional(), departDate: z.string().optional(), timePreference: timePreferences.optional()}); export const travellerTypes = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const travellerSubTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const travellerCriteria = z.object({type: travellerTypes, subType: travellerSubTypes.optional(), age: z.number().int().nullable().optional(), typeCode: z.string().nullable().optional(), discountCode: z.string().nullable().optional()}); export const flightSearchCriteria = z.object({preferredCabinClass: cabinClasses.optional(), directPreferred: z.boolean().optional(), freeBaggageOnly: z.boolean().optional(), flexibleDates: z.boolean().optional(), carrier: z.string().nullable().optional(), legs: z.array(flightLeg).nullable().optional(), passengers: z.array(travellerCriteria).nullable().optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const railSearchCriteria = z.object({originCode: z.string().min(3).max(5), originName: z.string().nullable().optional(), destinationCode: z.string().min(3).max(5), destinationName: z.string().nullable().optional(), departDateTime: z.string().optional(), returnDateTime: z.string().nullable().optional(), passengers: z.array(travellerCriteria).nullable().optional(), preferredCabinClass: cabinClasses.optional()}); export const geographyTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6)]); export const accommodationSearchLocation = z.object({latitude: z.number(), longitude: z.number(), radius: z.number().int().gte(1).lte(150), locationType: geographyTypes.optional(), locationName: z.string().nullable().optional(), locationCountry: z.string().nullable().optional()}); export const boardBasis = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19)]); export const propertyTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18)]); export const roomTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12)]); export const roomOccupancy = z.object({typePreference: roomTypes.optional(), guests: z.array(travellerCriteria).nullable().optional()}); export const accommodationSearchCriteria = z.object({locations: z.array(accommodationSearchLocation).nullable().optional(), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), radius: z.number().int().gte(1).lte(150).nullable().optional(), locationID: z.string().nullable().optional(), locationType: geographyTypes.optional(), locationName: z.string().nullable().optional(), locationCountry: z.string().nullable().optional(), ref: z.string().nullable().optional(), feature: z.string().nullable().optional(), checkinDate: z.string(), checkoutDate: z.string(), boardBasis: boardBasis.optional(), propertyType: propertyTypes.optional(), minStarRating: z.number().gte(0).lte(6).optional(), refundableOnly: z.boolean().optional(), propertyName: z.string().nullable().optional(), rooms: z.array(roomOccupancy).nullable().optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const tourSearchCriteria = z.object({latitude: z.number(), longitude: z.number(), radius: z.number().int().gte(1).lte(150), startDateMin: z.string(), startDateMax: z.string(), durationMin: z.number().int().gte(1).lte(30), durationMax: z.number().int().gte(1).lte(30)}); export const ticketTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19)]); export const ticketSearchCriteria = z.object({ticketType: ticketTypes.optional(), latitude: z.number(), longitude: z.number(), radius: z.number().int().gte(1).lte(150), locationName: z.string().nullable().optional(), startDate: z.string(), endDate: z.string(), ref: z.string().nullable().optional(), participants: z.array(travellerCriteria).nullable().optional(), isUpsell: z.boolean().optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const promoTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7)]); export const promoData = z.object({companyCode: z.string().nullable().optional(), type: promoTypes.optional(), reference: z.string().nullable().optional(), surname: z.string().nullable().optional()}); export const carRentalSearchCriteria = z.object({pickupLatitude: z.number(), pickupLongitude: z.number(), pickupOnAirportPreferred: z.boolean().optional(), pickupAirportTerminal: z.string().nullable().optional(), outboundFlightNo: z.string().nullable().optional(), pickupLocationName: z.string().nullable().optional(), dropoffLatitude: z.number(), dropoffLongitude: z.number(), dropoffOnAirportPreferred: z.boolean().optional(), dropoffAirportTerminal: z.string().nullable().optional(), returnFlightNo: z.string().nullable().optional(), dropoffLocationName: z.string().nullable().optional(), startDateTime: z.string(), endDateTime: z.string(), driverAge: z.number().int().gte(18).lte(99), sippCode: z.string().nullable().optional(), promos: z.array(promoData).nullable().optional(), isUpsell: z.boolean().optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const transferAdditionalCriteria = z.object({originAirport: z.string().nullable().optional(), destinationAirport: z.string().nullable().optional(), outTerminal: z.string().nullable().optional(), outCarrier: z.string().nullable().optional(), outFlightNo: z.string().nullable().optional(), outArrivalDateTime: z.string().nullable().optional(), retTerminal: z.string().nullable().optional(), retCarrier: z.string().nullable().optional(), retFlightNo: z.string().nullable().optional(), retDepartureDateTime: z.string().nullable().optional(), propertyName: z.string().nullable().optional(), propertyAddress: z.string().nullable().optional(), propertyCity: z.string().nullable().optional(), propertyCity2: z.string().nullable().optional(), propertyPostalCode: z.string().nullable().optional(), interRouteOriginAirport: z.string().nullable().optional(), interRouteDestAirport: z.string().nullable().optional()}); export const transferSearchCriteria = z.object({point1Latitude: z.number(), point1Longitude: z.number(), point1Name: z.string().min(3).max(150), point1CountryCode: z.string().min(2).max(2), point2Latitude: z.number(), point2Longitude: z.number(), point2Name: z.string().min(3).max(150), point2CountryCode: z.string().min(2).max(2), ref: z.string().nullable().optional(), outPickupDateTime: z.string(), returnPickupDateTime: z.string().nullable().optional(), isUpsell: z.boolean().optional(), isCoach: z.boolean().optional(), passengers: z.array(travellerCriteria).nullable().optional(), additionalCriteria: transferAdditionalCriteria.optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const airportExtraTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]); export const airportExtrasSearchCriteria = z.object({extraType: airportExtraTypes.optional(), extraTypes: z.array(airportExtraTypes).nullable().optional(), originCode: z.string().min(3).max(3), originName: z.string().nullable().optional(), originTerminal: z.string().nullable().optional(), destinationCode: z.string().min(3).max(3), destinationName: z.string().nullable().optional(), destinationTerminal: z.string().nullable().optional(), outboundFlightDateTime: z.string(), outboundFlightNo: z.string().nullable().optional(), returnFlightDepartDateTime: z.string().nullable().optional(), returnFlightArrivalDateTime: z.string().nullable().optional(), returnFlightNo: z.string().nullable().optional(), isUpsell: z.boolean().optional(), passengers: z.array(travellerCriteria).nullable().optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const packageHolidaySearchCriteria = z.object({originCode: z.string().min(3).max(3), originName: z.string().nullable().optional(), latitude: z.number(), longitude: z.number(), radius: z.number().int().gte(1).lte(150), locationType: geographyTypes.optional(), locationName: z.string().nullable().optional(), propertyName: z.string().nullable().optional(), ref: z.string().nullable().optional(), destinationCode: z.string().min(3).max(3), departDate: z.string(), flexibility: z.number().int().gte(0).lte(3).optional(), nights: z.number().int().gte(1).lte(31).nullable().optional(), boardBasis: boardBasis.optional(), minStarRating: z.number().gte(0).lte(6).optional(), cabinClass: cabinClasses.optional(), rooms: z.array(roomOccupancy).nullable().optional(), supplierIDs: z.array(z.number().int()).nullable().optional()}); export const visaSearchCriteria = z.object({residency: z.string().min(1), country: z.string().min(1)}); export const insuranceTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const insuranceCoverTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const insuranceInclusionTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10)]); export const suppliers = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19), z.literal(20), z.literal(21), z.literal(22), z.literal(23), z.literal(24), z.literal(25), z.literal(26), z.literal(27), z.literal(28), z.literal(29), z.literal(30), z.literal(31), z.literal(32), z.literal(33), z.literal(34), z.literal(35), z.literal(36), z.literal(37), z.literal(38), z.literal(39), z.literal(40), z.literal(41), z.literal(42), z.literal(43), z.literal(44), z.literal(45), z.literal(46), z.literal(47), z.literal(48), z.literal(49), z.literal(50), z.literal(51), z.literal(52), z.literal(53), z.literal(54), z.literal(55), z.literal(56), z.literal(57), z.literal(58), z.literal(59), z.literal(60), z.literal(61), z.literal(62), z.literal(63), z.literal(64), z.literal(65), z.literal(66), z.literal(67), z.literal(68), z.literal(69), z.literal(70), z.literal(71), z.literal(72), z.literal(73), z.literal(74), z.literal(75), z.literal(76), z.literal(77), z.literal(78), z.literal(79), z.literal(80), z.literal(81), z.literal(82), z.literal(83), z.literal(84), z.literal(85), z.literal(86), z.literal(87), z.literal(88), z.literal(89), z.literal(90), z.literal(91), z.literal(92), z.literal(93), z.literal(94), z.literal(95), z.literal(96), z.literal(97), z.literal(98), z.literal(99), z.literal(100), z.literal(101), z.literal(102), z.literal(103), z.literal(104), z.literal(105), z.literal(106), z.literal(107), z.literal(108), z.literal(109), z.literal(110), z.literal(111), z.literal(112), z.literal(113), z.literal(114), z.literal(115), z.literal(116), z.literal(117), z.literal(118), z.literal(119), z.literal(120), z.literal(121), z.literal(122), z.literal(123), z.literal(124), z.literal(125), z.literal(126), z.literal(127), z.literal(128), z.literal(129), z.literal(130), z.literal(131), z.literal(132), z.literal(133), z.literal(134), z.literal(135), z.literal(136), z.literal(137), z.literal(138), z.literal(139), z.literal(140), z.literal(141), z.literal(142), z.literal(143), z.literal(144), z.literal(145), z.literal(146), z.literal(147), z.literal(148), z.literal(149), z.literal(150), z.literal(151), z.literal(152), z.literal(153), z.literal(154), z.literal(155), z.literal(156), z.literal(157), z.literal(158), z.literal(159), z.literal(160), z.literal(161), z.literal(162), z.literal(163), z.literal(164), z.literal(165), z.literal(166), z.literal(167), z.literal(168), z.literal(169), z.literal(170), z.literal(171), z.literal(172), z.literal(173), z.literal(174), z.literal(175), z.literal(176), z.literal(177), z.literal(178), z.literal(179), z.literal(180), z.literal(181), z.literal(182), z.literal(183), z.literal(184), z.literal(185), z.literal(186), z.literal(187), z.literal(188), z.literal(189), z.literal(190), z.literal(191), z.literal(192), z.literal(193)]); export const extrasAdditionalCriteria = z.object({flightSupplier: suppliers.optional(), originAirport: z.string().nullable().optional(), originCountryCode: z.string().nullable().optional(), destinationAirport: z.string().nullable().optional(), operatingCarrier: z.string().nullable().optional(), marketingCarrier: z.string().nullable().optional(), cabinClass: cabinClasses.optional(), tourOperator: z.string().nullable().optional(), accommSupplier: suppliers.optional(), ticketSupplier: suppliers.optional(), propertyName: z.string().nullable().optional(), propertyType: propertyTypes.optional(), propertyRating: z.number().nullable().optional(), propertyChain: z.string().nullable().optional(), propertyBoard: boardBasis.optional(), propertyCheckout: z.string().nullable().optional(), carRentalSupplier: suppliers.optional(), transferSupplier: suppliers.optional(), searchLocation: z.string().nullable().optional(), countryCode: z.string().nullable().optional(), price: z.number().optional()}); export const insuranceSearchCriteria = z.object({residency: z.string().min(1), quoteType: insuranceTypes, coverType: insuranceCoverTypes, region: z.string().min(1), startDate: z.string(), endDate: z.string().nullable().optional(), travellers: z.array(travellerCriteria).nullable().optional(), inclusions: z.array(insuranceInclusionTypes).nullable().optional(), isUpsell: z.boolean().optional(), additionalCriteria: extrasAdditionalCriteria.optional()}); export const extrasSearchCriteria = z.object({latitude: z.number(), longitude: z.number(), radius: z.number().int().gte(1).lte(150), locationName: z.string().nullable().optional(), startDate: z.string(), endDate: z.string(), participants: z.array(travellerCriteria).nullable().optional(), isUpsell: z.boolean().optional(), additionalCriteria: extrasAdditionalCriteria.optional()}); export const cruiseTypes = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const cruiseOptions = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const cruiseSearchCriteria = z.object({cruiseType: cruiseTypes.optional(), departurePort: z.string().nullable().optional(), destination: z.string().nullable().optional(), operator: z.string().nullable().optional(), ship: z.string().nullable().optional(), startDate: z.string().nullable().optional(), endDate: z.string().nullable().optional(), durationMin: z.number().int().nullable().optional(), durationMax: z.number().int().nullable().optional(), priceMin: z.number().int().nullable().optional(), priceMax: z.number().int().nullable().optional(), options: z.array(cruiseOptions).nullable().optional(), travellers: z.array(travellerCriteria).nullable().optional()}); export const multiCityStep = z.object({latitude: z.number(), longitude: z.number(), radius: z.number().int().gte(1).lte(150), locationType: geographyTypes.optional(), locationName: z.string().nullable().optional(), locationCountry: z.string().nullable().optional(), locationCode: z.string().min(3).max(11), duration: z.number().int().gte(1).lte(30), boardBasis: boardBasis.optional(), minStarRating: z.number().gte(0).lte(6).optional()}); export const multiCitySearchCriteria = z.object({originCode: z.string().min(3).max(11), originName: z.string().nullable().optional(), departureDate: z.string(), preferredCabinClass: cabinClasses.optional(), boardBasis: boardBasis.optional(), directPreferred: z.boolean().optional(), freeBaggageOnly: z.boolean().optional(), carrier: z.string().nullable().optional(), steps: z.array(multiCityStep).nullable().optional(), rooms: z.array(roomOccupancy).nullable().optional()}); export const searchCriteria = z.object({environment: environments.optional(), searchType: searchTypes, language: z.string().min(2).max(2), locale: z.string().max(8).nullable().optional(), currency: z.string().min(3).max(3), distanceUnit: distanceUnits.optional(), nationality: z.string().min(2).max(2), customerIP: z.string().min(7).max(45), customerUserAgent: z.string().min(5).max(350), customerCountry: z.string().max(2).nullable().optional(), source: z.record(z.string(), z.string().nullable()).nullable().optional(), originListId: z.number().int().nullable().optional(), destinationListId: z.number().int().nullable().optional(), lockDestinations: z.boolean().nullable().optional(), tripType: tripTypes.optional(), flightSearchCriteria: flightSearchCriteria.optional(), railSearchCriteria: railSearchCriteria.optional(), accommodationSearchCriteria: accommodationSearchCriteria.optional(), tourSearchCriteria: tourSearchCriteria.optional(), ticketSearchCriteria: ticketSearchCriteria.optional(), carRentalSearchCriteria: carRentalSearchCriteria.optional(), transferSearchCriteria: transferSearchCriteria.optional(), airportExtrasSearchCriteria: airportExtrasSearchCriteria.optional(), packageHolidaySearchCriteria: packageHolidaySearchCriteria.optional(), visaSearchCriteria: visaSearchCriteria.optional(), insuranceSearchCriteria: insuranceSearchCriteria.optional(), extrasSearchCriteria: extrasSearchCriteria.optional(), cruiseSearchCriteria: cruiseSearchCriteria.optional(), multiCitySearchCriteria: multiCitySearchCriteria.optional()}); export const productTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19), z.literal(20)]); export const monthData = z.object({month: z.number().int().optional(), monthName: z.string().nullable().optional(), tempF: z.number().int().nullable().optional(), tempC: z.number().int().nullable().optional(), maxTempF: z.number().int().nullable().optional(), maxTempC: z.number().int().nullable().optional(), rainMM: z.number().nullable().optional(), rainInch: z.number().nullable().optional(), dryDays: z.number().int().nullable().optional(), rainDays: z.number().int().nullable().optional(), snowDays: z.number().int().nullable().optional(), uvIndex: z.number().int().nullable().optional(), sunHours: z.number().nullable().optional()}); export const weatherAverages = z.object({id: z.number().int().optional(), name: z.string().nullable().optional(), latitude: z.number().optional(), longitude: z.number().optional(), distance: z.number().nullable().optional(), units: distanceUnits.optional(), month: monthData.optional(), months: z.array(monthData).nullable().optional()}); export const walkScore = z.object({score: z.number().int().optional(), description: z.string().nullable().optional(), url: z.string().nullable().optional(), transitScore: z.number().int().nullable().optional(), transitDescription: z.string().nullable().optional(), transitSummary: z.string().nullable().optional(), bikeScore: z.number().int().nullable().optional(), bikeDescription: z.string().nullable().optional()}); export const pointOfInterest = z.object({id: z.string().nullable().optional(), name: z.string().nullable().optional(), location: z.string().nullable().optional(), summary: z.string().nullable().optional(), description: z.string().nullable().optional(), openingTimes: z.string().nullable().optional(), pricingInfo: z.string().nullable().optional(), gettingThere: z.string().nullable().optional(), websiteUrl: z.string().nullable().optional(), categories: z.array(z.string()).nullable().optional(), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), durationEstimate: z.number().int().nullable().optional(), markerUrl: z.string().nullable().optional(), thumbnailUrl: z.string().nullable().optional(), imageUrl: z.string().nullable().optional(), imageCaption: z.string().nullable().optional()}); export const location = z.object({id: z.number().int().optional(), type: geographyTypes.optional(), name: z.string().nullable().optional(), summary: z.string().nullable().optional(), iataCode: z.string().nullable().optional(), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), timezone: z.string().nullable().optional(), gmtOffset: z.number().int().optional(), geonameId: z.string().nullable().optional(), imageUrl: z.string().nullable().optional(), flagImgUrl: z.string().nullable().optional(), countryIso2Code: z.string().nullable().optional(), countryIso3Code: z.string().nullable().optional(), countryName: z.string().nullable().optional(), currencyCode: z.string().nullable().optional(), continentCode: z.string().nullable().optional(), weather: weatherAverages.optional(), walkscore: walkScore.optional(), pois: z.array(pointOfInterest).nullable().optional()}); export const advisoryTypes = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const travelAdvisory = z.object({type: advisoryTypes.optional(), destination: z.string().nullable().optional(), data: z.unknown(), updated: z.string().optional()}); export const itineraryStep = z.object({step: z.number().int().optional(), productType: productTypes.optional(), startDateTime: z.string().nullable().optional(), startDateUseTime: z.boolean().nullable().optional(), startLocation: location.optional(), endDateTime: z.string().nullable().optional(), endDateUseTime: z.boolean().nullable().optional(), endLocation: location.optional(), advisories: z.array(travelAdvisory).nullable().optional()}); export const itinerary = z.object({steps: z.array(itineraryStep).nullable().optional()}); export const resultTypes = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const supplierInfo = z.object({supplierType: suppliers.optional(), subSupplier: z.string().nullable().optional(), gds: z.string().nullable().optional(), name: z.string().nullable().optional(), currency: z.string().nullable().optional(), supplierPrice: z.number().optional(), commission: z.number().optional(), supplierResultRef: z.string().nullable().optional(), bookingData: z.record(z.string(), z.string().nullable()).nullable().optional()}); export const refundability = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const pricingTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8)]); export const priceItem = z.object({type: pricingTypes.optional(), supplierType: z.string().nullable().optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), unitPrice: z.number().nullable().optional(), qty: z.number().int().optional()}); export const depositBreakdown = z.object({num: z.number().int().optional(), amount: z.number().optional(), dueDate: z.string().optional(), supplierDueDate: z.string().nullable().optional()}); export const depositOption = z.object({id: z.number().int().optional(), ruleId: z.number().int().nullable().optional(), dedupeId: z.number().int().nullable().optional(), amount: z.number().optional(), installments: z.number().int().nullable().optional(), installmentsAmount: z.number().nullable().optional(), dueDate: z.string().nullable().optional(), supplierDueDate: z.string().nullable().optional(), balance: z.number().nullable().optional(), minDaysBefore: z.number().int().nullable().optional(), name: z.string().nullable().optional(), message: z.string().nullable().optional(), breakdown: z.array(depositBreakdown).nullable().optional()}); export const rewardInfo = z.object({id: z.number().int().optional(), title: z.string().nullable().optional(), description: z.string().nullable().optional(), terms: z.string().nullable().optional(), imageUrl: z.string().nullable().optional(), amount: z.number().optional()}); export const pricing = z.object({originalCurrency: z.string().nullable().optional(), originalPrice: z.number().nullable().optional(), exchangeRate: z.number().optional(), currency: z.string().nullable().optional(), nettPrice: z.number().nullable().optional(), trueNettPrice: z.number().nullable().optional(), price: z.number().optional(), inResortFees: z.number().nullable().optional(), memberPrice: z.number().nullable().optional(), priceBeforeMod: z.number().nullable().optional(), priceChanged: z.boolean().optional(), priceBeforeChange: z.number().nullable().optional(), priceMinSell: z.boolean().nullable().optional(), ruleIds: z.array(z.number().int()).nullable().optional(), memberRuleIds: z.array(z.number().int()).nullable().optional(), isRefundable: z.boolean().nullable().optional(), refundability: refundability.optional(), payNowPrice: z.number().nullable().optional(), payDeadline: z.string().nullable().optional(), isLeadIn: z.boolean().optional(), breakdown: z.array(priceItem).nullable().optional(), payAtLocation: z.array(priceItem).nullable().optional(), depositOptions: z.array(depositOption).nullable().optional(), reward: rewardInfo.optional()}); export const affiliateInfo = z.object({name: z.string().nullable().optional(), logoUrl: z.string().nullable().optional(), webUrl: z.string().nullable().optional()}); export const bookingInfo = z.object({success: z.boolean().optional(), supplierBookingRef: z.string().nullable().optional(), errorMessage: z.string().nullable().optional()}); export const flightFareTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13)]); export const informationTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13)]); export const information = z.object({type: informationTypes.optional(), title: z.string().nullable().optional(), text: z.string().nullable().optional()}); export const flightFeatures = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const inclusionTypes = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const flightFeature = z.object({feature: flightFeatures.optional(), inclusion: inclusionTypes.optional(), info: z.string().nullable().optional()}); export const directions = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]); export const distance = z.object({units: distanceUnits.optional(), value: z.number().optional()}); export const geoPoint = z.object({iataCode: z.string().nullable().optional(), terminal: z.string().nullable().optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), address1: z.string().nullable().optional(), address2: z.string().nullable().optional(), city: z.string().nullable().optional(), state: z.string().nullable().optional(), postalCode: z.string().nullable().optional(), country: z.string().nullable().optional(), gmtOffset: z.number().int().nullable().optional(), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), what3Words: z.string().nullable().optional(), distance: distance.optional(), imageUrl: z.string().nullable().optional()}); export const flightBaggage = z.object({allowance: z.string().nullable().optional(), handOnly: z.boolean().nullable().optional(), weight: z.string().nullable().optional(), pieces: z.string().nullable().optional()}); export const flightCarrier = z.object({code: z.string().nullable().optional(), name: z.string().nullable().optional(), alliance: z.string().nullable().optional(), groundProvider: z.boolean().nullable().optional(), img: z.string().nullable().optional()}); export const flightSegment = z.object({supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), origin: geoPoint.optional(), destination: geoPoint.optional(), depart: z.string().optional(), arrive: z.string().optional(), duration: z.number().int().nullable().optional(), cabinClass: cabinClasses.optional(), fareName: z.string().nullable().optional(), fareCode: z.string().nullable().optional(), fareBasis: z.string().nullable().optional(), seatClass: z.string().nullable().optional(), baggage: flightBaggage.optional(), operatingCarrier: flightCarrier.optional(), marketingCarrier: flightCarrier.optional(), flightNo: z.string().nullable().optional(), touchdowns: z.number().int().optional(), aircraft: z.string().nullable().optional()}); export const extraTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16)]); export const pickupPoint = z.object({iataCode: z.string().nullable().optional(), terminal: z.string().nullable().optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), address1: z.string().nullable().optional(), address2: z.string().nullable().optional(), city: z.string().nullable().optional(), state: z.string().nullable().optional(), postalCode: z.string().nullable().optional(), country: z.string().nullable().optional(), gmtOffset: z.number().int().nullable().optional(), latitude: z.number().nullable().optional(), longitude: z.number().nullable().optional(), what3Words: z.string().nullable().optional(), distance: distance.optional(), imageUrl: z.string().nullable().optional(), id: z.number().int().nullable().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), onAirport: z.boolean().nullable().optional(), contactDetails: z.string().nullable().optional(), hours: z.string().nullable().optional(), dateTime: z.string().nullable().optional()}); export const cabinLayout = z.object({cols: z.record(z.string(), z.number().int()).nullable().optional(), startRow: z.number().int().optional(), endRow: z.number().int().optional()}); export const mediaTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6)]); export const media = z.object({type: mediaTypes.optional(), url: z.string().nullable().optional(), thumbnailUrl: z.string().nullable().optional(), caption: z.string().nullable().optional(), width: z.number().int().nullable().optional(), height: z.number().int().nullable().optional()}); export const seatData = z.object({col: z.string().nullable().optional(), row: z.number().int().optional(), ftr: z.string().nullable().optional()}); export const genderTypes = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const fOID = z.union([z.literal(1), z.literal(2), z.literal(3)]); export const phoneNumber = z.object({type: phoneTypes.optional(), countryPrefix: z.string().max(5).nullable().optional(), number: z.string().max(25).nullable().optional()}); export const extraSelectionItem = z.object({eid: z.string().min(1).max(10), gid: z.string().max(10).nullable().optional(), tid: z.number().int().nullable().optional(), qty: z.number().int().gte(1).lte(30), participants: z.array(z.lazy(() => travellerData)).nullable().optional()}); export const travellerData: z.ZodType = z.object({type: travellerTypes, title: travellerTitles, firstname: z.string().min(2).max(25), middleNames: z.string().nullable().optional(), surname: z.string().min(2).max(25), dateOfBirth: z.string().optional(), age: z.number().int().nullable().optional(), gender: genderTypes.optional(), nationality: z.string().nullable().optional(), foidType: fOID.optional(), foidNumber: z.string().nullable().optional(), foidStartDate: z.string().nullable().optional(), foidExpiryDate: z.string().nullable().optional(), foidIssuingCountry: z.string().nullable().optional(), emailAddress: z.string().nullable().optional(), telephone: phoneNumber.optional(), extras: z.array(extraSelectionItem).nullable().optional(), roomAllocIdx: z.number().int().nullable().optional()}); export const optionalExtra = z.object({eid: z.string().nullable().optional(), supplier: supplierInfo.optional(), bookingData: z.record(z.string(), z.string().nullable()).nullable().optional(), type: extraTypes.optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), information: z.array(information).nullable().optional(), seat: seatData.optional(), isPayAtPickup: z.boolean().optional(), maxQty: z.number().int().optional(), qtySelected: z.number().int().nullable().optional(), pricing: pricing.optional(), location: pickupPoint.optional(), media: z.array(media).nullable().optional(), participants: z.array(travellerData).nullable().optional()}); export const optionalExtraGroup = z.object({gid: z.string().nullable().optional(), sid: z.string().nullable().optional(), stepIdx: z.number().int().nullable().optional(), stepSubIdx: z.number().int().nullable().optional(), stepTitle: z.string().nullable().optional(), bookingData: z.record(z.string(), z.string().nullable()).nullable().optional(), orderRef: z.string().nullable().optional(), type: extraTypes.optional(), travellerTypes: z.array(travellerTypes).nullable().optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), maxSelectable: z.number().int().optional(), orderItemID: z.number().int().nullable().optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), location: pickupPoint.optional(), cabin: cabinLayout.optional(), media: z.array(media).nullable().optional(), extras: z.array(optionalExtra).nullable().optional()}); export const flightRoute = z.object({rid: z.string().nullable().optional(), legID: z.number().int().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), direction: directions.optional(), duration: z.number().int().nullable().optional(), segments: z.array(flightSegment).nullable().optional(), extraGroups: z.array(optionalExtraGroup).nullable().optional()}); export const flightResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), stepIdx: z.number().int().nullable().optional(), stepTitle: z.string().nullable().optional(), seatsAvailable: z.number().int().nullable().optional(), requiresAddress: z.boolean().optional(), confirmationUrl: z.string().nullable().optional(), tandCs: z.record(z.string(), z.string().nullable()).nullable().optional(), fareType: flightFareTypes.optional(), openJaw: z.boolean().optional(), earliestCancellation: z.string().nullable().optional(), fareInformation: z.array(information).nullable().optional(), features: z.array(flightFeature).nullable().optional(), routes: z.array(flightRoute).nullable().optional(), foidMandatory: z.boolean().optional(), canEditFOID: z.boolean().optional(), formsOfIdentification: z.array(fOID).nullable().optional(), extraGroups: z.array(optionalExtraGroup).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const flightCalendarData = z.object({supplier: suppliers.optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), fareType: flightFareTypes.optional(), outDate: z.string().nullable().optional(), retDate: z.string().nullable().optional(), carrier: flightCarrier.optional(), price: pricing.optional()}); export const flightFareItem = z.object({inclusion: inclusionTypes.optional(), name: z.string().nullable().optional()}); export const flightBrandedFareData = z.object({carrier: z.string().nullable().optional(), programID: z.string().nullable().optional(), code: z.string().nullable().optional(), name: z.string().nullable().optional(), inclusions: z.array(flightFareItem).nullable().optional()}); export const flightExtendedData = z.object({calendar: z.array(flightCalendarData).nullable().optional(), brandedFares: z.array(flightBrandedFareData).nullable().optional()}); export const reviewInfo = z.object({platform: suppliers.optional(), ref: z.string().nullable().optional(), reviews: z.number().int().nullable().optional(), rating: z.number().optional(), imageUrl: z.string().nullable().optional(), url: z.string().nullable().optional()}); export const goodFor = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17)]); export const propertyAmenities = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19), z.literal(20), z.literal(21), z.literal(22), z.literal(23), z.literal(24), z.literal(25), z.literal(26), z.literal(27), z.literal(28), z.literal(29), z.literal(30), z.literal(31), z.literal(32), z.literal(33), z.literal(34), z.literal(35), z.literal(36), z.literal(37), z.literal(38), z.literal(39), z.literal(40), z.literal(41), z.literal(42), z.literal(43), z.literal(44), z.literal(45), z.literal(46), z.literal(47), z.literal(48), z.literal(49), z.literal(50), z.literal(51), z.literal(52), z.literal(53), z.literal(54), z.literal(55), z.literal(56), z.literal(57), z.literal(58), z.literal(59), z.literal(60), z.literal(61), z.literal(62), z.literal(63), z.literal(64), z.literal(65), z.literal(66), z.literal(67), z.literal(68), z.literal(69), z.literal(70), z.literal(71), z.literal(72), z.literal(73), z.literal(74), z.literal(75), z.literal(76), z.literal(77), z.literal(78), z.literal(79), z.literal(80), z.literal(81), z.literal(82)]); export const roomAmenities = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19), z.literal(20), z.literal(21), z.literal(22), z.literal(23), z.literal(24), z.literal(25), z.literal(26), z.literal(27), z.literal(28), z.literal(29), z.literal(30), z.literal(31), z.literal(32), z.literal(33), z.literal(34), z.literal(35), z.literal(36), z.literal(37), z.literal(38), z.literal(39), z.literal(40), z.literal(41), z.literal(42)]); export const accommodationRate = z.object({rid: z.string().nullable().optional(), bookingData: z.record(z.string(), z.string().nullable()).nullable().optional(), deeplinkUrl: z.string().nullable().optional(), name: z.string().nullable().optional(), descriptions: z.array(information).nullable().optional(), amenities: z.array(z.string()).nullable().optional(), board: boardBasis.optional(), isPackage: z.boolean().nullable().optional(), isOnRequest: z.boolean().nullable().optional(), supplierBoardType: z.string().nullable().optional(), available: z.number().int().optional(), selected: z.number().int().nullable().optional(), pricing: pricing.optional(), earliestCancellation: z.string().nullable().optional()}); export const accommodationUnit = z.object({uid: z.string().nullable().optional(), supplier: z.string().nullable().optional(), supplierRef: z.string().nullable().optional(), bookingData: z.record(z.string(), z.string().nullable()).nullable().optional(), name: z.string().nullable().optional(), groupRoomQty: z.number().int().nullable().optional(), roomAllocIdx: z.number().int().nullable().optional(), roomType: roomTypes.optional(), checkin: z.string().optional(), nights: z.number().int().optional(), beds: z.string().nullable().optional(), sleeps: z.string().nullable().optional(), sleepsAdults: z.number().int().optional(), sleepsChildren: z.number().int().optional(), sleepsInfants: z.number().int().optional(), descriptions: z.array(information).nullable().optional(), amenities: z.array(roomAmenities).nullable().optional(), available: z.number().int().optional(), media: z.array(media).nullable().optional(), rates: z.array(accommodationRate).nullable().optional()}); export const fieldTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7)]); export const question = z.object({qid: z.number().int().optional(), supplierRef: z.string().nullable().optional(), text: z.string().nullable().optional(), placeholder: z.string().nullable().optional(), pattern: z.string().nullable().optional(), fieldType: fieldTypes.optional(), options: z.record(z.string(), z.string().nullable()).nullable().optional(), isRequired: z.boolean().optional(), answer: z.string().nullable().optional()}); export const accommodationResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), stepIdx: z.number().int().nullable().optional(), stepTitle: z.string().nullable().optional(), uniqueRef: z.string().nullable().optional(), propertyType: propertyTypes.optional(), supplierPropertyType: z.string().nullable().optional(), name: z.string().nullable().optional(), chain: z.string().nullable().optional(), rating: z.number().optional(), location: geoPoint.optional(), review: reviewInfo.optional(), descriptions: z.array(information).nullable().optional(), goodFor: z.array(goodFor).nullable().optional(), amenities: z.array(propertyAmenities).nullable().optional(), features: z.array(z.string()).nullable().optional(), media: z.array(media).nullable().optional(), isRoomAlloc: z.boolean().optional(), isGroupedUnits: z.boolean().optional(), units: z.array(accommodationUnit).nullable().optional(), optionalExtras: z.array(optionalExtra).nullable().optional(), optionalExtraGroups: z.array(optionalExtraGroup).nullable().optional(), questions: z.array(question).nullable().optional(), guests: z.array(travellerData).nullable().optional(), specialRequests: z.string().nullable().optional()}); export const tourTypes = z.union([z.literal(1), z.literal(2)]); export const tourOperator = z.object({code: z.string().nullable().optional(), name: z.string().nullable().optional(), logoUrl: z.string().nullable().optional()}); export const tourTransportTypes = z.literal(1); export const tourTransportDeck = z.object({name: z.string().nullable().optional(), description: z.string().nullable().optional(), images: z.array(media).nullable().optional()}); export const tourAccommodationData = z.object({name: z.string().nullable().optional(), description: z.string().nullable().optional(), isAccessible: z.boolean().optional(), gradeCodes: z.string().nullable().optional(), facilities: z.array(z.string()).nullable().optional(), images: z.array(media).nullable().optional()}); export const tourTransport = z.object({transportType: tourTransportTypes.optional(), code: z.string().nullable().optional(), name: z.string().nullable().optional(), imageUrl: z.string().nullable().optional(), whatsIncluded: z.array(z.string()).nullable().optional(), images: z.array(media).nullable().optional(), information: z.array(information).nullable().optional(), deckPlans: z.array(tourTransportDeck).nullable().optional(), accommodation: z.array(tourAccommodationData).nullable().optional()}); export const tourPricing = z.object({originalCurrency: z.string().nullable().optional(), originalPrice: z.number().nullable().optional(), exchangeRate: z.number().optional(), currency: z.string().nullable().optional(), nettPrice: z.number().nullable().optional(), trueNettPrice: z.number().nullable().optional(), price: z.number().optional(), inResortFees: z.number().nullable().optional(), memberPrice: z.number().nullable().optional(), priceBeforeMod: z.number().nullable().optional(), priceChanged: z.boolean().optional(), priceBeforeChange: z.number().nullable().optional(), priceMinSell: z.boolean().nullable().optional(), ruleIds: z.array(z.number().int()).nullable().optional(), memberRuleIds: z.array(z.number().int()).nullable().optional(), isRefundable: z.boolean().nullable().optional(), refundability: refundability.optional(), payNowPrice: z.number().nullable().optional(), payDeadline: z.string().nullable().optional(), isLeadIn: z.boolean().optional(), breakdown: z.array(priceItem).nullable().optional(), payAtLocation: z.array(priceItem).nullable().optional(), depositOptions: z.array(depositOption).nullable().optional(), reward: rewardInfo.optional(), pid: z.string().nullable().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional()}); export const geography: z.ZodType = z.object({id: z.string().nullable().optional(), isValidated: z.boolean().nullable().optional(), type: geographyTypes.optional(), name: z.string().nullable().optional(), parentName: z.string().nullable().optional(), countryCode: z.string().nullable().optional(), countryName: z.string().nullable().optional(), iataCode: z.string().nullable().optional(), iataCity: z.string().nullable().optional(), iataGroupCodes: z.string().nullable().optional(), latitude: z.number().optional(), longitude: z.number().optional(), priority: z.number().int().optional(), priorityOriginal: z.number().int().optional(), gmtOffset: z.number().int().optional(), distanceOverride: z.number().nullable().optional(), rating: z.number().nullable().optional(), ref: z.string().nullable().optional(), imageUrl: z.string().nullable().optional(), summary: z.string().nullable().optional(), eventDate: z.string().nullable().optional(), eventEndDate: z.string().nullable().optional(), daysBefore: z.number().int().nullable().optional(), nights: z.number().int().nullable().optional(), settings: z.record(z.string(), z.string().nullable()).nullable().optional(), mappings: z.object({Unknown: z.string().optional(), HitchHiker: z.string().optional(), GoldMedalDNATA: z.string().optional(), HotelBeds: z.string().optional(), Ingresso: z.string().optional(), Hoppa: z.string().optional(), HolidayExtras: z.string().optional(), FlexibleAutos: z.string().optional(), AvisBudget: z.string().optional(), VisaHQ: z.string().optional(), EAN: z.string().optional(), Insightly: z.string().optional(), Tiqets: z.string().optional(), HolidayTaxis: z.string().optional(), GAdventures: z.string().optional(), GoogleAnalytics: z.string().optional(), Homestay: z.string().optional(), ApartmentsApart: z.string().optional(), Mailchimp: z.string().optional(), Interhome: z.string().optional(), DemoFlights: z.string().optional(), TravelifyComparison: z.string().optional(), SygicData: z.string().optional(), DemoCarRental: z.string().optional(), DemoTickets: z.string().optional(), Leezair: z.string().optional(), Traveltek: z.string().optional(), YpsilonFlights: z.string().optional(), Paxport: z.string().optional(), Stripe: z.string().optional(), Braintree: z.string().optional(), ArrivalGuides: z.string().optional(), WalkScore: z.string().optional(), Encharge: z.string().optional(), MailerLite: z.string().optional(), DemoTransfer: z.string().optional(), DemoAirportExtras: z.string().optional(), AttractionWorld: z.string().optional(), Square: z.string().optional(), Impala: z.string().optional(), PayPal: z.string().optional(), SolmarVillas: z.string().optional(), GFAHub: z.string().optional(), Hubspot: z.string().optional(), Zapier: z.string().optional(), RateHawk: z.string().optional(), Musement: z.string().optional(), Intuitive: z.string().optional(), ManualPayments: z.string().optional(), eMerchantPay: z.string().optional(), Worldpay: z.string().optional(), GoGlobal: z.string().optional(), TBO: z.string().optional(), Carnect: z.string().optional(), Yalago: z.string().optional(), TIG: z.string().optional(), RadicalStorage: z.string().optional(), Penguin: z.string().optional(), BlueInsurance: z.string().optional(), Opayo: z.string().optional(), Dolphin: z.string().optional(), Jet2: z.string().optional(), Felloh: z.string().optional(), Barclaycard: z.string().optional(), GoogleSheets: z.string().optional(), FlyNowPayLater: z.string().optional(), Travelify: z.string().optional(), Tarsc: z.string().optional(), EcommPay: z.string().optional(), TrustPayments: z.string().optional(), GetResponse: z.string().optional(), Cardstream: z.string().optional(), TripSolutions: z.string().optional(), Innstant: z.string().optional(), Bookabed: z.string().optional(), JumboTours: z.string().optional(), DOTW: z.string().optional(), SunHotels: z.string().optional(), PTSCloud: z.string().optional(), Teldar: z.string().optional(), TripAdvisor: z.string().optional(), RePUSHTI: z.string().optional(), Albena: z.string().optional(), JTA: z.string().optional(), APH: z.string().optional(), What3words: z.string().optional(), Moretrees: z.string().optional(), Ecologi: z.string().optional(), OTS: z.string().optional(), Duffel: z.string().optional(), Smyrooms: z.string().optional(), Shareasale: z.string().optional(), Sendy: z.string().optional(), Feefo: z.string().optional(), ConstantContact: z.string().optional(), Webhook: z.string().optional(), RoadGoat: z.string().optional(), Tripian: z.string().optional(), Olympic: z.string().optional(), Skistar: z.string().optional(), iTravex: z.string().optional(), Suntransfers: z.string().optional(), Afterpay: z.string().optional(), Dixa: z.string().optional(), CCAvenue: z.string().optional(), AIBMS: z.string().optional(), Seon: z.string().optional(), Clicky: z.string().optional(), Telr: z.string().optional(), Zoho: z.string().optional(), Etihad: z.string().optional(), Advantage: z.string().optional(), GetAddress: z.string().optional(), Brightsun: z.string().optional(), Hotelplanner: z.string().optional(), USAePay: z.string().optional(), ReePay: z.string().optional(), Mondee: z.string().optional(), VisitGroup: z.string().optional(), SKAPIT: z.string().optional(), Faremine: z.string().optional(), ITSGroup: z.string().optional(), MyFatoorah: z.string().optional(), EveryHoliday: z.string().optional(), ChatGPT: z.string().optional(), Rewardful: z.string().optional(), FlutterWave: z.string().optional(), Decta: z.string().optional(), Liftie: z.string().optional(), HighLevelCRM: z.string().optional(), DidaTravel: z.string().optional(), Altura: z.string().optional(), RMI: z.string().optional(), Tixstock: z.string().optional(), HNHolidays: z.string().optional(), CurrencyExchange: z.string().optional(), Evolvi: z.string().optional(), Darina: z.string().optional(), Klaviyo: z.string().optional(), AerTicket: z.string().optional(), ProtectGroup: z.string().optional(), GoogleLogin: z.string().optional(), VivaPayments: z.string().optional(), Widgety: z.string().optional(), Xs2Event: z.string().optional(), Whapi: z.string().optional(), CurrencyConverterAPI: z.string().optional(), Pax2Pay: z.string().optional(), TravelvogueAnex: z.string().optional(), SingleSignOn: z.string().optional(), TTSS: z.string().optional(), SerpApi: z.string().optional(), GlobalPay: z.string().optional(), PKFare: z.string().optional(), PierreVacances: z.string().optional(), MercuryHolidays: z.string().optional(), SunshineTech: z.string().optional(), TUI: z.string().optional(), NowPayments: z.string().optional(), Stuba: z.string().optional(), Skiset: z.string().optional(), Easemytrip: z.string().optional(), LiftsTo: z.string().optional(), Jonview: z.string().optional(), SinGSTravel: z.string().optional(), PayFast: z.string().optional(), IVectorConnect: z.string().optional(), ZestCarRental: z.string().optional(), BarclaysFuse: z.string().optional(), MajorTravel: z.string().optional(), Travelpack: z.string().optional(), MintPayments: z.string().optional(), TravelWorks: z.string().optional(), Atlas: z.string().optional(), Custom: z.string().optional(), IdealPostcodes: z.string().optional(), Paximum: z.string().optional(), Webhotelier: z.string().optional(), TTNG: z.string().optional(), SportsEvents365: z.string().optional(), Brevo: z.string().optional(), TGContracting: z.string().optional(), Amitour: z.string().optional(), TotalProcessing: z.string().optional(), InComm: z.string().optional(), Intercom: z.string().optional(), Eurosite: z.string().optional(), Revolut: z.string().optional(), Karpaten: z.string().optional(), Love2Shop: z.string().optional(), LunaCRM: z.string().optional(), UTalk: z.string().optional(), Viator: z.string().optional(), W2M: z.string().optional()}).nullable().optional(), supplier: suppliers.optional(), subLocations: z.array(z.lazy(() => geography)).nullable().optional(), translations: z.record(z.string(), z.string().nullable()).nullable().optional()}); export const tourItineraryTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const tourItinerary = z.object({id: z.string().nullable().optional(), isValidated: z.boolean().nullable().optional(), type: geographyTypes.optional(), name: z.string().nullable().optional(), parentName: z.string().nullable().optional(), countryCode: z.string().nullable().optional(), countryName: z.string().nullable().optional(), iataCode: z.string().nullable().optional(), iataCity: z.string().nullable().optional(), iataGroupCodes: z.string().nullable().optional(), latitude: z.number().optional(), longitude: z.number().optional(), priority: z.number().int().optional(), priorityOriginal: z.number().int().optional(), gmtOffset: z.number().int().optional(), distanceOverride: z.number().nullable().optional(), rating: z.number().nullable().optional(), ref: z.string().nullable().optional(), imageUrl: z.string().nullable().optional(), summary: z.string().nullable().optional(), eventDate: z.string().nullable().optional(), eventEndDate: z.string().nullable().optional(), daysBefore: z.number().int().nullable().optional(), nights: z.number().int().nullable().optional(), settings: z.record(z.string(), z.string().nullable()).nullable().optional(), mappings: z.object({Unknown: z.string().optional(), HitchHiker: z.string().optional(), GoldMedalDNATA: z.string().optional(), HotelBeds: z.string().optional(), Ingresso: z.string().optional(), Hoppa: z.string().optional(), HolidayExtras: z.string().optional(), FlexibleAutos: z.string().optional(), AvisBudget: z.string().optional(), VisaHQ: z.string().optional(), EAN: z.string().optional(), Insightly: z.string().optional(), Tiqets: z.string().optional(), HolidayTaxis: z.string().optional(), GAdventures: z.string().optional(), GoogleAnalytics: z.string().optional(), Homestay: z.string().optional(), ApartmentsApart: z.string().optional(), Mailchimp: z.string().optional(), Interhome: z.string().optional(), DemoFlights: z.string().optional(), TravelifyComparison: z.string().optional(), SygicData: z.string().optional(), DemoCarRental: z.string().optional(), DemoTickets: z.string().optional(), Leezair: z.string().optional(), Traveltek: z.string().optional(), YpsilonFlights: z.string().optional(), Paxport: z.string().optional(), Stripe: z.string().optional(), Braintree: z.string().optional(), ArrivalGuides: z.string().optional(), WalkScore: z.string().optional(), Encharge: z.string().optional(), MailerLite: z.string().optional(), DemoTransfer: z.string().optional(), DemoAirportExtras: z.string().optional(), AttractionWorld: z.string().optional(), Square: z.string().optional(), Impala: z.string().optional(), PayPal: z.string().optional(), SolmarVillas: z.string().optional(), GFAHub: z.string().optional(), Hubspot: z.string().optional(), Zapier: z.string().optional(), RateHawk: z.string().optional(), Musement: z.string().optional(), Intuitive: z.string().optional(), ManualPayments: z.string().optional(), eMerchantPay: z.string().optional(), Worldpay: z.string().optional(), GoGlobal: z.string().optional(), TBO: z.string().optional(), Carnect: z.string().optional(), Yalago: z.string().optional(), TIG: z.string().optional(), RadicalStorage: z.string().optional(), Penguin: z.string().optional(), BlueInsurance: z.string().optional(), Opayo: z.string().optional(), Dolphin: z.string().optional(), Jet2: z.string().optional(), Felloh: z.string().optional(), Barclaycard: z.string().optional(), GoogleSheets: z.string().optional(), FlyNowPayLater: z.string().optional(), Travelify: z.string().optional(), Tarsc: z.string().optional(), EcommPay: z.string().optional(), TrustPayments: z.string().optional(), GetResponse: z.string().optional(), Cardstream: z.string().optional(), TripSolutions: z.string().optional(), Innstant: z.string().optional(), Bookabed: z.string().optional(), JumboTours: z.string().optional(), DOTW: z.string().optional(), SunHotels: z.string().optional(), PTSCloud: z.string().optional(), Teldar: z.string().optional(), TripAdvisor: z.string().optional(), RePUSHTI: z.string().optional(), Albena: z.string().optional(), JTA: z.string().optional(), APH: z.string().optional(), What3words: z.string().optional(), Moretrees: z.string().optional(), Ecologi: z.string().optional(), OTS: z.string().optional(), Duffel: z.string().optional(), Smyrooms: z.string().optional(), Shareasale: z.string().optional(), Sendy: z.string().optional(), Feefo: z.string().optional(), ConstantContact: z.string().optional(), Webhook: z.string().optional(), RoadGoat: z.string().optional(), Tripian: z.string().optional(), Olympic: z.string().optional(), Skistar: z.string().optional(), iTravex: z.string().optional(), Suntransfers: z.string().optional(), Afterpay: z.string().optional(), Dixa: z.string().optional(), CCAvenue: z.string().optional(), AIBMS: z.string().optional(), Seon: z.string().optional(), Clicky: z.string().optional(), Telr: z.string().optional(), Zoho: z.string().optional(), Etihad: z.string().optional(), Advantage: z.string().optional(), GetAddress: z.string().optional(), Brightsun: z.string().optional(), Hotelplanner: z.string().optional(), USAePay: z.string().optional(), ReePay: z.string().optional(), Mondee: z.string().optional(), VisitGroup: z.string().optional(), SKAPIT: z.string().optional(), Faremine: z.string().optional(), ITSGroup: z.string().optional(), MyFatoorah: z.string().optional(), EveryHoliday: z.string().optional(), ChatGPT: z.string().optional(), Rewardful: z.string().optional(), FlutterWave: z.string().optional(), Decta: z.string().optional(), Liftie: z.string().optional(), HighLevelCRM: z.string().optional(), DidaTravel: z.string().optional(), Altura: z.string().optional(), RMI: z.string().optional(), Tixstock: z.string().optional(), HNHolidays: z.string().optional(), CurrencyExchange: z.string().optional(), Evolvi: z.string().optional(), Darina: z.string().optional(), Klaviyo: z.string().optional(), AerTicket: z.string().optional(), ProtectGroup: z.string().optional(), GoogleLogin: z.string().optional(), VivaPayments: z.string().optional(), Widgety: z.string().optional(), Xs2Event: z.string().optional(), Whapi: z.string().optional(), CurrencyConverterAPI: z.string().optional(), Pax2Pay: z.string().optional(), TravelvogueAnex: z.string().optional(), SingleSignOn: z.string().optional(), TTSS: z.string().optional(), SerpApi: z.string().optional(), GlobalPay: z.string().optional(), PKFare: z.string().optional(), PierreVacances: z.string().optional(), MercuryHolidays: z.string().optional(), SunshineTech: z.string().optional(), TUI: z.string().optional(), NowPayments: z.string().optional(), Stuba: z.string().optional(), Skiset: z.string().optional(), Easemytrip: z.string().optional(), LiftsTo: z.string().optional(), Jonview: z.string().optional(), SinGSTravel: z.string().optional(), PayFast: z.string().optional(), IVectorConnect: z.string().optional(), ZestCarRental: z.string().optional(), BarclaysFuse: z.string().optional(), MajorTravel: z.string().optional(), Travelpack: z.string().optional(), MintPayments: z.string().optional(), TravelWorks: z.string().optional(), Atlas: z.string().optional(), Custom: z.string().optional(), IdealPostcodes: z.string().optional(), Paximum: z.string().optional(), Webhotelier: z.string().optional(), TTNG: z.string().optional(), SportsEvents365: z.string().optional(), Brevo: z.string().optional(), TGContracting: z.string().optional(), Amitour: z.string().optional(), TotalProcessing: z.string().optional(), InComm: z.string().optional(), Intercom: z.string().optional(), Eurosite: z.string().optional(), Revolut: z.string().optional(), Karpaten: z.string().optional(), Love2Shop: z.string().optional(), LunaCRM: z.string().optional(), UTalk: z.string().optional(), Viator: z.string().optional(), W2M: z.string().optional()}).nullable().optional(), supplier: suppliers.optional(), subLocations: z.array(geography).nullable().optional(), translations: z.record(z.string(), z.string().nullable()).nullable().optional(), itineraryType: tourItineraryTypes.optional(), day: z.number().int().optional()}); export const tourDateOption = z.object({did: z.string().nullable().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), ref: z.string().nullable().optional(), startDate: z.string().optional(), endDate: z.string().optional(), transport: tourTransport.optional(), pricings: z.array(tourPricing).nullable().optional(), itinerary: z.array(tourItinerary).nullable().optional()}); export const tourResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), tourType: tourTypes.optional(), name: z.string().nullable().optional(), cruiseType: cruiseTypes.optional(), operator: tourOperator.optional(), descriptions: z.array(information).nullable().optional(), dateOptions: z.array(tourDateOption).nullable().optional()}); export const ticketFeatures = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7)]); export const ticketOptionTypes = z.union([z.literal(0), z.literal(1), z.literal(3), z.literal(4)]); export const seatMapData = z.object({sectionName: z.string().nullable().optional(), sectionID1: z.string().nullable().optional(), sectionID2: z.string().nullable().optional(), sectionID3: z.string().nullable().optional(), colour: z.string().nullable().optional()}); export const dateOption = z.object({supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), date: z.string().optional(), label: z.string().nullable().optional()}); export const ticketOption: z.ZodType = z.object({oid: z.string().nullable().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), type: ticketOptionTypes.optional(), name: z.string().nullable().optional(), description: z.string().nullable().optional(), mapData: z.record(z.string(), z.string().nullable()).nullable().optional(), seatMap: seatMapData.optional(), features: z.array(ticketFeatures).nullable().optional(), travellerType: travellerTypes.optional(), available: z.number().int().optional(), minQty: z.number().int().nullable().optional(), maxQty: z.number().int().nullable().optional(), multiplesOf: z.number().int().nullable().optional(), selected: z.number().int().nullable().optional(), pricing: pricing.optional(), delivery: pricing.optional(), dateOptions: z.array(dateOption).nullable().optional(), subOptions: z.array(z.lazy(() => ticketOption)).nullable().optional(), extraGroups: z.array(optionalExtraGroup).nullable().optional()}); export const ticketResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), ticketType: ticketTypes.optional(), name: z.string().nullable().optional(), eventStartDate: z.string().nullable().optional(), eventEndDate: z.string().nullable().optional(), reviewCount: z.number().int().optional(), reviewAvg: z.number().nullable().optional(), descriptions: z.array(information).nullable().optional(), minDuration: z.number().int().nullable().optional(), maxDuration: z.number().int().nullable().optional(), location: geoPoint.optional(), points: z.array(geoPoint).nullable().optional(), pickupPoints: z.array(pickupPoint).nullable().optional(), categories: z.array(z.string()).nullable().optional(), features: z.array(ticketFeatures).nullable().optional(), media: z.array(media).nullable().optional(), options: z.array(ticketOption).nullable().optional(), questions: z.array(question).nullable().optional(), requiresGuestDetails: z.boolean().optional(), requiresAllGuestInformation: z.boolean().optional(), formsOfIdentification: z.array(fOID).nullable().optional(), hasSeatMap: z.boolean().optional(), seatMapUrl: z.string().nullable().optional(), guests: z.array(travellerData).nullable().optional()}); export const transmissions = z.union([z.literal(0), z.literal(1), z.literal(2)]); export const fuelTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8)]); export const carRentalOperator = z.object({code: z.string().nullable().optional(), name: z.string().nullable().optional()}); export const vehicleFeatures = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const carRentalInclusions = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17)]); export const carRentalPackage = z.object({pid: z.string().nullable().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), name: z.string().nullable().optional(), inclusions: z.array(carRentalInclusions).nullable().optional(), descriptions: z.array(information).nullable().optional(), deposit: z.number().nullable().optional(), depositCurrency: z.string().nullable().optional(), pricing: pricing.optional()}); export const carRentalResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), sid: z.string().nullable().optional(), stepIdx: z.number().int().nullable().optional(), stepSubIdx: z.number().int().nullable().optional(), stepTitle: z.string().nullable().optional(), classCode: z.string().nullable().optional(), className: z.string().nullable().optional(), sipp: z.string().nullable().optional(), name: z.string().nullable().optional(), transmission: transmissions.optional(), fuelType: fuelTypes.optional(), doors: z.number().int().nullable().optional(), seats: z.number().int().nullable().optional(), luggageLarge: z.number().int().nullable().optional(), luggageSmall: z.number().int().nullable().optional(), mpg: z.string().nullable().optional(), rentalOperator: carRentalOperator.optional(), pickup: pickupPoint.optional(), dropoff: pickupPoint.optional(), oneWay: z.boolean().optional(), features: z.array(vehicleFeatures).nullable().optional(), information: z.array(information).nullable().optional(), media: z.array(media).nullable().optional(), packages: z.array(carRentalPackage).nullable().optional(), extras: z.array(optionalExtra).nullable().optional(), questions: z.array(question).nullable().optional(), driver: travellerData.optional(), additionalDriverEID: z.string().nullable().optional(), additionalDriver: travellerData.optional()}); export const transferTypes = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const transferResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), sid: z.string().nullable().optional(), stepIdx: z.number().int().nullable().optional(), stepSubIdx: z.number().int().nullable().optional(), stepTitle: z.string().nullable().optional(), isInterCity: z.boolean().optional(), type: transferTypes.optional(), vehicle: z.string().nullable().optional(), vehicleDescription: z.string().nullable().optional(), company: z.string().nullable().optional(), journeyDistance: z.string().nullable().optional(), journeyDuration: z.string().nullable().optional(), outPickup: pickupPoint.optional(), outDropoff: pickupPoint.optional(), returnPickup: pickupPoint.optional(), returnDropoff: pickupPoint.optional(), numberUnits: z.number().int().optional(), minOccupancy: z.number().int().nullable().optional(), maxOccupancy: z.number().int().nullable().optional(), smallBagAllowance: z.number().int().nullable().optional(), bigBagAllowance: z.number().int().nullable().optional(), promos: z.string().nullable().optional(), media: z.array(media).nullable().optional(), information: z.array(information).nullable().optional(), extras: z.array(optionalExtra).nullable().optional(), optionalExtraGroups: z.array(optionalExtraGroup).nullable().optional(), questions: z.array(question).nullable().optional(), requiresTravellerDetails: z.boolean().optional(), travellers: z.array(travellerData).nullable().optional()}); export const airportExtraFeatures = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15)]); export const airportExtraInclusions = z.literal(1); export const airportExtraPackage = z.object({pid: z.string().nullable().optional(), supplierData: z.record(z.string(), z.string().nullable()).nullable().optional(), name: z.string().nullable().optional(), inclusions: z.array(airportExtraInclusions).nullable().optional(), descriptions: z.array(information).nullable().optional(), pricing: pricing.optional()}); export const airportExtraResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), type: airportExtraTypes.optional(), name: z.string().nullable().optional(), subTitle: z.string().nullable().optional(), rating: z.number().nullable().optional(), startDateTime: z.string().nullable().optional(), endDateTime: z.string().nullable().optional(), descriptions: z.array(information).nullable().optional(), location: pickupPoint.optional(), media: z.array(media).nullable().optional(), features: z.array(airportExtraFeatures).nullable().optional(), packages: z.array(airportExtraPackage).nullable().optional(), extras: z.array(optionalExtra).nullable().optional(), questions: z.array(question).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const insuranceBreakdownTypes = z.union([z.literal(1), z.literal(2)]); export const insuranceBreakdown = z.object({type: insuranceBreakdownTypes.optional(), title: z.string().nullable().optional(), amount: z.number().nullable().optional(), currency: z.string().nullable().optional(), information: z.string().nullable().optional()}); export const insuranceResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), policyName: z.string().nullable().optional(), policyDocUrl: z.string().nullable().optional(), quoteType: insuranceTypes.optional(), coverType: insuranceCoverTypes.optional(), region: z.string().nullable().optional(), numberOfTrips: z.number().int().nullable().optional(), startDate: z.string().nullable().optional(), endDate: z.string().nullable().optional(), descriptions: z.array(information).nullable().optional(), breakdown: z.array(insuranceBreakdown).nullable().optional(), inclusions: z.array(insuranceInclusionTypes).nullable().optional(), extras: z.array(optionalExtra).nullable().optional(), questions: z.array(question).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const operatingCompany = z.object({code: z.string().nullable().optional(), name: z.string().nullable().optional(), message: z.string().nullable().optional()}); export const holidayInclusions = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]); export const flightOptionResult = z.object({rid: z.string().nullable().optional(), supplier: supplierInfo.optional(), pricing: pricing.optional(), routes: z.array(flightRoute).nullable().optional()}); export const packageHolidayResult = z.object({rid: z.string().nullable().optional(), resultType: resultTypes.optional(), supplier: supplierInfo.optional(), isAvailable: z.boolean().optional(), availabilityError: z.string().nullable().optional(), pricing: pricing.optional(), affiliate: affiliateInfo.optional(), deeplinkUrl: z.string().nullable().optional(), priority: z.number().int().optional(), priorityTag: z.string().nullable().optional(), uniqueID: z.string().nullable().optional(), orderItemID: z.number().int().nullable().optional(), booking: bookingInfo.optional(), customData: z.unknown(), uniqueRef: z.string().nullable().optional(), operator: operatingCompany.optional(), propertyType: propertyTypes.optional(), supplierPropertyType: z.string().nullable().optional(), name: z.string().nullable().optional(), chain: z.string().nullable().optional(), rating: z.number().optional(), review: reviewInfo.optional(), goodFor: z.array(goodFor).nullable().optional(), amenities: z.array(propertyAmenities).nullable().optional(), inclusions: z.array(holidayInclusions).nullable().optional(), cabinBaggage: z.string().nullable().optional(), handBaggage: z.string().nullable().optional(), isGroupedUnits: z.boolean().optional(), location: geoPoint.optional(), descriptions: z.array(information).nullable().optional(), media: z.array(media).nullable().optional(), units: z.array(accommodationUnit).nullable().optional(), routes: z.array(flightRoute).nullable().optional(), flightOptions: z.array(flightOptionResult).nullable().optional(), formsOfIdentification: z.array(fOID).nullable().optional(), travellers: z.array(travellerData).nullable().optional(), optionalExtras: z.array(optionalExtra).nullable().optional(), optionalExtraGroups: z.array(optionalExtraGroup).nullable().optional(), supportsPromoCode: z.boolean().optional(), customerMessage: z.string().nullable().optional(), specialRequests: z.string().nullable().optional()}); export const stringStringStringStringValueTuple = z.object({}); export const bookStages = z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7)]); export const flightRouteSelectionItem = z.object({rid: z.string().min(1).max(6), extras: z.array(extraSelectionItem).nullable().optional()}); export const flightSelectionItem = z.object({rid: z.string().min(3).max(60), riDs: z.array(z.string()).nullable().optional(), routes: z.array(flightRouteSelectionItem).nullable().optional(), extras: z.array(extraSelectionItem).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const accommodationUnitSelection = z.object({uid: z.string().min(1).max(6), rid: z.string().min(1).max(6), qty: z.number().int().gte(1).lte(9)}); export const questionAnswer = z.object({qid: z.number().int().optional(), answer: z.string().nullable().optional()}); export const accommodationSelectionItem = z.object({rid: z.string().min(3).max(60), sessionRef: z.string().nullable().optional(), selectionDate: z.string().nullable().optional(), flightArrival: z.string().nullable().optional(), units: z.array(accommodationUnitSelection).nullable().optional(), extras: z.array(extraSelectionItem).nullable().optional(), questionAnswers: z.array(questionAnswer).nullable().optional(), guests: z.array(travellerData).nullable().optional()}); export const packageSelectionItem = z.object({rid: z.string().min(3).max(11), fltRID: z.string().max(11).nullable().optional(), selectionDate: z.string().nullable().optional(), units: z.array(accommodationUnitSelection).nullable().optional(), extras: z.array(extraSelectionItem).nullable().optional(), guests: z.array(travellerData).nullable().optional(), promoCode: z.string().nullable().optional()}); export const tourSelectionItem = z.object({rid: z.string().min(3).max(11), did: z.string().min(1).max(5), travellers: z.array(travellerData).nullable().optional()}); export const ticketOptionSelection: z.ZodType = z.object({oid: z.string().min(1).max(6), qty: z.number().int().gte(1).lte(50), dateOption: z.string().nullable().optional(), subOptions: z.array(z.lazy(() => ticketOptionSelection)).nullable().optional(), extras: z.array(extraSelectionItem).nullable().optional()}); export const ticketSelectionItem = z.object({rid: z.string().min(3).max(11), pickupPointID: z.number().int().nullable().optional(), options: z.array(ticketOptionSelection).nullable().optional(), questionAnswers: z.array(questionAnswer).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const transferSelectionItem = z.object({rid: z.string().min(3).max(11), extras: z.array(extraSelectionItem).nullable().optional(), questionAnswers: z.array(questionAnswer).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const carRentalSelectionItem = z.object({rid: z.string().min(3).max(11), pid: z.string().nullable().optional(), extras: z.array(extraSelectionItem).nullable().optional(), questionAnswers: z.array(questionAnswer).nullable().optional(), driver: travellerData.optional(), additionalDriver: travellerData.optional()}); export const insuranceSelectionItem = z.object({rid: z.string().min(3).max(11), extras: z.array(extraSelectionItem).nullable().optional(), questionAnswers: z.array(questionAnswer).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const airportExtrasSelectionItem = z.object({rid: z.string().min(3).max(11), pid: z.string().max(11).nullable().optional(), questionAnswers: z.array(questionAnswer).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const multiCityStepSelectionCriteria = z.object({transfer: transferSelectionItem.optional(), carRental: carRentalSelectionItem.optional()}); export const multiCitySelectionItem = z.object({stepExtras: z.record(z.string(), multiCityStepSelectionCriteria).nullable().optional(), travellers: z.array(travellerData).nullable().optional()}); export const contactInformation = z.object({internalRef: z.string().nullable().optional(), emailAddress: z.string().nullable().optional(), acceptMarketing: z.boolean().optional(), acceptTerms: z.boolean().optional(), telephone: phoneNumber.optional(), title: travellerTitles.optional(), firstname: z.string().max(25).nullable().optional(), surname: z.string().max(25).nullable().optional(), company: z.string().max(50).nullable().optional(), address1: z.string().max(100).nullable().optional(), address2: z.string().max(100).nullable().optional(), city: z.string().max(50).nullable().optional(), state: z.string().max(50).nullable().optional(), postalCode: z.string().max(20).nullable().optional(), countryCode: z.string().max(2).nullable().optional()}); export const selectionCriteria = z.object({previousStage: bookStages.optional(), previousStepId: z.number().int().nullable().optional(), previousSID: z.string().nullable().optional(), returnUpsells: z.array(productTypes).nullable().optional(), isUpsell: z.boolean().optional(), orderRef: z.string().nullable().optional(), flight: flightSelectionItem.optional(), accommodation: accommodationSelectionItem.optional(), package: packageSelectionItem.optional(), tour: tourSelectionItem.optional(), ticket: ticketSelectionItem.optional(), transfer: transferSelectionItem.optional(), carRental: carRentalSelectionItem.optional(), insurance: insuranceSelectionItem.optional(), airportExtras: z.array(airportExtrasSelectionItem).nullable().optional(), extras: z.array(extraSelectionItem).nullable().optional(), multiCity: multiCitySelectionItem.optional(), contactInfo: contactInformation.optional(), specialRequests: z.string().nullable().optional(), depositOptionID: z.number().int().nullable().optional()}); export const multiStopPackageStep = z.object({idx: z.number().int().optional(), subIdx: z.number().int().optional(), stepTitle: z.string().nullable().optional(), stepProductTitles: z.object({Flights: z.string().optional(), Accommodation: z.string().optional(), Packages: z.string().optional(), TicketsAttractions: z.string().optional(), Transfers: z.string().optional(), AirportExtras: z.string().optional(), Insurance: z.string().optional(), CarRental: z.string().optional(), Visas: z.string().optional(), Tours: z.string().optional(), Tracking: z.string().optional(), Itinerary: z.string().optional(), PaymentService: z.string().optional(), CRM: z.string().optional(), Extras: z.string().optional(), DynamicPackage: z.string().optional(), Rail: z.string().optional(), Generic: z.string().optional(), Cruise: z.string().optional(), TicketPackage: z.string().optional()}).nullable().optional(), productType: productTypes.optional(), summary: z.string().nullable().optional(), searchSession: z.string().nullable().optional(), oneWaySearchSessions: z.record(z.string(), z.string().nullable()).nullable().optional(), threadsTotal: z.number().int().optional(), threadsComplete: z.number().int().optional(), hasOutgoingGroundTransport: z.boolean().optional(), flightLegId: z.number().int().nullable().optional(), groundTransportRoute: stringStringStringStringValueTuple.optional(), hasIncomingGroundTransport: z.boolean().optional(), criteria: searchCriteria.optional(), selectionCriteria: selectionCriteria.optional(), flightResults: z.array(flightResult).nullable().optional(), accommodationResults: z.array(accommodationResult).nullable().optional(), carRentalResults: z.array(carRentalResult).nullable().optional(), transferResults: z.array(transferResult).nullable().optional(), airportExtraResults: z.array(airportExtraResult).nullable().optional(), extraGroups: z.array(optionalExtraGroup).nullable().optional()}); export const promoMessage = z.object({imageUrl: z.string().nullable().optional(), title: z.string().nullable().optional(), text: z.string().nullable().optional()}); export const paymentTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12), z.literal(13), z.literal(14), z.literal(15), z.literal(16), z.literal(17), z.literal(18), z.literal(19), z.literal(20), z.literal(21), z.literal(22), z.literal(23), z.literal(24), z.literal(25)]); export const cardTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8), z.literal(9), z.literal(10), z.literal(11), z.literal(12)]); export const subProductTypes = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5), z.literal(6), z.literal(7), z.literal(8)]); export const orderVoucherDBO = z.object({id: z.number().int().nullable().optional(), code: z.string().nullable().optional(), name: z.string().nullable().optional(), value: z.number().optional(), isPercent: z.boolean().nullable().optional(), isGift: z.boolean().nullable().optional()}); export const paymentCurrencyOption = z.object({ref: z.string().nullable().optional(), code: z.string().nullable().optional(), name: z.string().nullable().optional(), logoUrl: z.string().nullable().optional(), amount: z.number().optional()}); export const paymentProvider = z.object({paymentTypes: z.array(paymentTypes).nullable().optional(), cardTypes: z.array(cardTypes).nullable().optional(), supplier: suppliers.optional(), serviceType: subProductTypes.optional(), supports3DSv2: z.boolean().optional(), isRedirect: z.boolean().optional(), supportsIframe: z.boolean().optional(), payFormUrl: z.string().nullable().optional(), jsUrl: z.string().nullable().optional(), jsIntegrity: z.string().nullable().optional(), cssUrl: z.string().nullable().optional(), key1: z.string().nullable().optional(), key2: z.string().nullable().optional(), intentKey: z.string().nullable().optional(), settings: z.record(z.string(), z.unknown()).nullable().optional(), settings2: z.record(z.string(), z.unknown()).nullable().optional(), amountToPay: z.number().optional(), amountOutstanding: z.number().optional(), voucherCode: z.string().nullable().optional(), voucherName: z.string().nullable().optional(), voucherValue: z.number().nullable().optional(), voucherIsGift: z.boolean().nullable().optional(), vouchers: z.array(orderVoucherDBO).nullable().optional(), policies: z.array(z.string()).nullable().optional(), currencyOptions: z.array(paymentCurrencyOption).nullable().optional()}); export const paymentProfile = z.object({providers: z.array(paymentProvider).nullable().optional()}); export const aPIResponse = z.object({success: z.boolean().optional(), version: z.number().int().nullable().optional(), errors: z.array(z.string()).nullable().optional(), info: z.string().nullable().optional(), interactSession: z.string().nullable().optional(), searchSession: z.string().nullable().optional(), humanReadableSearchRef: z.string().nullable().optional(), shareUrl: z.string().nullable().optional(), deeplinkUrl: z.string().nullable().optional(), orderRefDisplay: z.string().nullable().optional(), orderRef: z.string().nullable().optional(), orderCanAmend: z.boolean().nullable().optional(), hasPreConfirmUrl: z.boolean().nullable().optional(), dedupe: z.boolean().nullable().optional(), total: z.number().int().nullable().optional(), completed: z.number().int().nullable().optional(), data: z.unknown(), trackingCode: z.string().nullable().optional(), specialRequests: z.string().nullable().optional(), member: memberAccount.optional(), searchCriteria: searchCriteria.optional(), isSessionTimeout: z.boolean().optional(), sessionExpiry: z.string().nullable().optional(), itinerary: itinerary.optional(), flightResults: z.array(flightResult).nullable().optional(), flightExtendedData: flightExtendedData.optional(), accommodationResults: z.array(accommodationResult).nullable().optional(), tourResults: z.array(tourResult).nullable().optional(), ticketResults: z.array(ticketResult).nullable().optional(), carRentalResults: z.array(carRentalResult).nullable().optional(), transferResults: z.array(transferResult).nullable().optional(), airportExtraResults: z.array(airportExtraResult).nullable().optional(), insuranceResults: z.array(insuranceResult).nullable().optional(), packageHolidayResults: z.array(packageHolidayResult).nullable().optional(), extraResults: z.array(optionalExtraGroup).nullable().optional(), extraGroups: z.array(optionalExtraGroup).nullable().optional(), multiStopExtras: z.array(multiStopPackageStep).nullable().optional(), promoMessages: z.array(promoMessage).nullable().optional(), paymentProfile: paymentProfile.optional(), contactInformation: contactInformation.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 }; /** * Starts a reserve check using the criteria provided. * * POST /reserve/{searchId}/{searchKey} */ export const createApiReserveSearchIdSearchKey = async (args: CreateApiReserveSearchIdSearchKeyArgs, options?: CreateApiReserveSearchIdSearchKeyOptions) => { const {baseUrl = "https://api.travelify.io", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args.interactSession != null) query.append("interactSession", String(args.interactSession)) if (args.accommodation != null) query.append("accommodation", String(args.accommodation)) const url = `${baseUrl.replace(/\/+$/, '')}/reserve/${encodeURIComponent(String(args.searchId))}/${encodeURIComponent(String(args.searchKey))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", 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(aPIResponse, await res.json()) };