import {z} from 'zod' export type AirSelectedItineraryRequest = {searchId: string, itineraryId: string}; export type CreateApiV2AirSelectedItineraryArgs = {body: AirSelectedItineraryRequest}; export type CreateApiV2AirSelectedItineraryOptions = {baseUrl?: string | undefined, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const flightRef = z.object({flightRef: z.string()}); export const dateTimeLocal = z.object({iso8601: z.string()}); export const airportInfo = z.object({airportCode: z.string().optional(), airportName: z.string().optional(), cityName: z.string().optional(), countryName: z.string().optional(), countryCode: z.string().optional(), zoneName: z.string().optional(), stateCode: z.string().optional()}); export const gateInfo = z.object({gate: z.string().optional(), terminal: z.string().optional()}); export const flightNumber = z.object({num: z.string(), airlineCode: z.string()}); export const duration = z.object({iso8601: z.string().optional()}); export const equipment = z.object({code: z.string().optional(), type: z.string().optional(), name: z.string().optional()}); export const flightSeatType = z.enum(["ALLEGRIS", "SENSES"]); export const flightCommon = z.object({flightRef: z.string().optional(), departureDateTime: dateTimeLocal, arrivalDateTime: dateTimeLocal, origin: airportInfo, destination: airportInfo, departureGate: gateInfo.optional(), arrivalGate: gateInfo.optional(), marketing: flightNumber, operating: flightNumber, operationalDisclosure: z.string().optional(), hiddenStops: z.array(z.object({airport: airportInfo, arrivalDateTime: dateTimeLocal, departureDateTime: dateTimeLocal, duration: duration.optional()})).optional(), duration: duration.optional(), equipment: equipment.optional(), flightSeatType: flightSeatType.optional(), subjectToGovtApproval: z.boolean().optional()}); export const flightData = z.union([z.object({flightRef: flightRef.optional()}), z.object({flightData: flightCommon.optional()})]); export const cabin = z.enum(["UNKNOWN_CABIN", "ECONOMY", "PREMIUM_ECONOMY", "BUSINESS", "FIRST"]); export const weight = z.object({weight: z.number(), unit: z.enum(["KG", "LBS"])}); export const paymentMethod = z.enum(["PAYMENT_METHOD_UNKNOWN", "CREDIT_CARD", "BREX_POINTS", "CASH", "QANTAS_POINTS", "VENDOR_PROGRAM_PAYMENT", "DELAYED_INVOICING", "FLIGHT_CREDITS", "QANTAS_TRAVEL_FUND", "CUSTOM_VIRTUAL_PAYMENT", "FLIGHT_PASS", "MISCELLANEOUS_CREDIT_ORDER", "NO_PREPAYMENT", "DELAYED_PAYMENT"]); export const flightPassTax = z.object({code: z.string().optional(), amount: z.lazy(() => money.optional())}); export const flightPassPaymentAmounts = z.object({totalAmount: z.lazy(() => money.optional()), baseAmount: z.lazy(() => money.optional()), totalTaxes: z.lazy(() => money.optional()), taxBreakdown: z.array(flightPassTax).optional()}); export const flightPassPaymentMetadata = z.object({flightPassNumber: z.string().optional(), flightPassAmounts: flightPassPaymentAmounts.optional()}); export const flightPassPaymentMetadataWrapper = z.object({metadataType: z.string().optional(), flightPassMetadata: flightPassPaymentMetadata}); export const money: z.ZodType = z.object({amount: z.number(), currencyCode: z.string(), convertedAmount: z.number().optional(), convertedCurrency: z.string().optional(), otherCoinage: z.array(z.object({coinageCode: paymentMethod.optional(), amount: z.number().optional(), conversionRate: z.number().optional(), preferredCurrencyConversionRate: z.number().optional(), otherCoinageMetadata: flightPassPaymentMetadataWrapper.optional()})).optional()}); export const cO2EmissionDetail = z.object({emissionValue: z.number(), averageEmissionValue: z.number().optional(), flightDistanceKm: z.number().optional(), isApproximate: z.boolean().optional(), weight: weight.optional(), cost: money.optional()}); export const seatAmenity = z.object({displayText: z.string().optional(), seatType: z.string().optional(), width: z.string().optional(), legroom: z.string().optional(), pitch: z.number().optional()}); export const wifiAmenity = z.object({displayText: z.string().optional(), cost: z.string().optional()}); export const powerAmenity = z.object({displayText: z.string().optional(), powerType: z.string().optional(), cost: z.string().optional(), usbPort: z.string().optional(), powerOutlet: z.string().optional()}); export const entertainmentAmenity = z.object({displayText: z.string().optional(), entertainmentType: z.string().optional(), cost: z.string().optional()}); export const beverageAmenity = z.object({displayText: z.string().optional(), beverageType: z.string().optional(), alcoholCost: z.string().optional()}); export const aircraftAmenity = z.object({displayText: z.string().optional(), aircraftType: z.string().optional(), aircraftModel: z.string().optional()}); export const layoutAmenity = z.object({displayText: z.string().optional(), directAisleAccess: z.string().optional()}); export const freshFoodAmenity = z.object({displayText: z.string().optional(), freshFoodType: z.string().optional(), cost: z.string().optional()}); export const cleaningAmenity = z.object({displayText: z.string().optional(), cleaningDescription: z.string().optional(), cleaningAttrDescription: z.string().optional()}); export const maskAmenity = z.object({displayText: z.string().optional(), maskDescription: z.string().optional(), maskAttrDescription: z.string().optional()}); export const temperatureAmenity = z.object({displayText: z.string().optional(), temperatureDescription: z.string().optional(), temperatureAttrDescription: z.string().optional()}); export const passengerCapacityAmenity = z.object({displayText: z.string().optional(), passengerCapacityDescription: z.string().optional(), passengerCapacityAttrDescription: z.string().optional()}); export const blockedAdjacentSeatsAmenity = z.object({displayText: z.string().optional(), blockedAdjacentSeatsDescription: z.string().optional(), blockedAdjacentSeatsAttrDescription: z.string().optional()}); export const covidTestingAmenity = z.object({displayText: z.string().optional(), covidTestingDescription: z.string().optional(), covidTestingAttrDescription: z.string().optional()}); export const vaccineAmenity = z.object({displayText: z.string().optional(), vaccineDescription: z.string().optional(), vaccineAttrDescription: z.string().optional()}); export const airAmenity = z.union([z.object({seatAmenity: seatAmenity.optional()}), z.object({wifiAmenity: wifiAmenity.optional()}), z.object({powerAmenity: powerAmenity.optional()}), z.object({entertainmentAmenity: entertainmentAmenity.optional()}), z.object({beverageAmenity: beverageAmenity.optional()}), z.object({aircraftAmenity: aircraftAmenity.optional()}), z.object({layoutAmenity: layoutAmenity.optional()}), z.object({freshFoodAmenity: freshFoodAmenity.optional()}), z.object({cleaningAmenity: cleaningAmenity.optional()}), z.object({maskAmenity: maskAmenity.optional()}), z.object({temperatureAmenity: temperatureAmenity.optional()}), z.object({passengerCapacityAmenity: passengerCapacityAmenity.optional()}), z.object({blockedAdjacentSeatsAmenity: blockedAdjacentSeatsAmenity.optional()}), z.object({covidTestingAmenity: covidTestingAmenity.optional()}), z.object({vaccineAmenity: vaccineAmenity.optional()})]); export const flightAttributeCategory = z.enum(["AIRCRAFT", "SEAT", "MEALS", "BEVERAGES", "ENTERTAINMENT", "POWER", "WIFI", "SERVICE_INFLIGHT", "UPGRADE", "TRANSPORT_TO_AIRPORT", "CHECK_IN", "DEPARTURE_TERMINAL", "DEPARTMENT_LOUNGE", "GATE_BOARDING", "SERVICE_DEPARTURE", "STOPOVER", "CONNECTING_EASE", "CONNECTING_TERMINAL", "CONNECTING_LOUNGE", "SERVICE_CONNECTING", "BAGGAGE_COLLECTION", "ARRIVAL_TERMINAL", "ARRIVAL_LOUNGE", "ARRIVAL_TRANSPORT", "SERVICE_ARRIVAL", "SCHEDULE_ROUTE", "LOYALITY_PROGRAM", "BRAND", "PROMOTION"]); export const dimensions = z.object({height: z.number().int().optional(), width: z.number().int().optional()}); export const imageMetadata = z.object({variant: z.enum(["LIGHT", "DARK"]).optional()}); export const image = z.object({data: z.string().optional(), dimensions: dimensions.optional(), url: z.string().optional(), metadata: imageMetadata.optional()}); export const imageGroup = z.object({caption: z.string().optional(), images: z.array(image)}); export const flightAttribute = z.object({headline: z.string().optional(), description: z.string().optional(), categories: z.array(flightAttributeCategory).optional(), photos: z.array(imageGroup).optional(), video: z.array(imageGroup).optional(), tour: z.array(imageGroup).optional()}); export const flightDetail = z.object({id: z.string(), flightData: flightData.optional(), cabin: cabin, bookingCode: z.string().optional(), seatAvailability: z.number().int().optional(), corpAccountCode: z.string().optional(), carbonEmission: cO2EmissionDetail.optional(), amenities: z.array(airAmenity).optional(), flightAttributes: z.array(flightAttribute).optional(), fareBasisCode: z.string().optional(), flightId: z.string().optional()}); export const tax = z.object({amount: money, taxCode: z.string().optional(), percentage: z.number().optional(), description: z.string().optional()}); export const taxBreakdown = z.array(tax); export const fareAmount = z.object({base: money, tax: money, taxBreakdown: taxBreakdown.optional()}); export const sizeInfo = z.object({length: z.number().optional(), unit: z.enum(["CENTIMETER", "METER"]).optional()}); export const weightLimit = z.object({weight: z.number().optional(), unit: z.enum(["lb", "kg"]).optional()}); export const bagPolicyApplicability = z.enum(["EACH", "TOTAL"]); export const bagWeightLimit = z.object({weightLimit: z.array(weightLimit).optional(), applicability: bagPolicyApplicability.optional()}); export const bagFees = z.object({fee: money.optional(), applicability: bagPolicyApplicability.optional()}); export const baggageInfo = z.object({description: z.string().optional(), count: z.number().int().optional(), sizeLimitInfo: z.array(sizeInfo).optional(), weightLimitInfo: z.array(bagWeightLimit).optional(), fee: z.array(bagFees).optional(), sizeLimitDescription: z.string().optional()}); export const baggagePolicy = z.object({checkedIn: z.array(baggageInfo), carryOn: z.array(baggageInfo)}); export const assessmentType = z.enum(["NEUTRAL", "BENEFIT", "RESTRICTION", "FEE"]); export const cancellationPolicy = z.object({description: z.string().optional(), fee: money.optional(), assessmentType: assessmentType.optional(), isCat16: z.boolean().optional(), isConditional: z.boolean().optional()}); export const exchangePolicy = z.object({description: z.string().optional(), fee: money.optional(), assessmentType: assessmentType.optional(), isCat16: z.boolean().optional(), isConditional: z.boolean().optional()}); export const seatSelectionRule = z.object({description: z.string()}); export const boardingPolicy = z.object({description: z.string()}); export const checkInPolicy = z.object({description: z.string()}); export const loungePolicy = z.object({description: z.string()}); export const seatTypeInfo = z.object({seatType: z.string()}); export const mealsPolicy = z.object({description: z.string(), assessmentType: assessmentType.optional()}); export const summary = z.object({headline: z.string().optional(), summaryDescription: z.string().optional()}); export const value = z.object({seat: z.enum(["UNKNOWN", "STANDARD", "RECLINER", "ANGLE_FLAT", "FLAT", "SUITE"]).optional()}); export const airPolicy = z.object({summary: summary.optional(), assessmentType: assessmentType.optional(), fee: money.optional(), value: value.optional()}); export const sameDayChangePolicy = z.object({sameDayChangePolicy: airPolicy.optional()}); export const upgradeEligibilityPolicy = z.object({upgradeEligibilityPolicy: airPolicy.optional()}); export const overheadBagPolicy = z.object({overheadBagPolicy: airPolicy.optional()}); export const securityPolicy = z.object({securityPolicy: airPolicy.optional()}); export const pointsInfo = z.object({loyaltyProgram: z.enum(["UNKNOWN", "QANTAS"]).optional(), pointsType: z.enum(["UNKNOWN", "REWARDS_POINTS", "STATUS_CREDIT", "COMPANY_EARN"]).optional(), description: z.string().optional(), assessmentType: assessmentType.optional(), points: z.number().optional()}); export const fareRules = z.object({baggagePolicy: baggagePolicy.optional(), cancellationPolicy: cancellationPolicy.optional(), postDepartureCancellationPolicy: cancellationPolicy.optional(), exchangePolicy: exchangePolicy.optional(), postDepartureExchangePolicy: exchangePolicy.optional(), seatSelectionPolicy: seatSelectionRule.optional(), boardingPolicy: boardingPolicy.optional(), checkInPolicy: checkInPolicy.optional(), loungePolicy: loungePolicy.optional(), seatType: seatTypeInfo.optional(), mealsPolicy: mealsPolicy.optional(), sameDayChangePolicy: sameDayChangePolicy.optional(), upgradeEligibilityPolicy: upgradeEligibilityPolicy.optional(), overheadBagPolicy: overheadBagPolicy.optional(), securityPolicy: securityPolicy.optional(), rewards: z.array(pointsInfo).optional()}); export const travelerLegInfo = z.object({travelerId: z.string(), travelerLegFare: fareAmount.optional(), fareRules: fareRules.optional()}); export const nGSFareCategory = z.enum(["UNKNOWN_NGS_CATEGORY", "BASE", "STANDARD", "ENHANCED", "PREMIUM", "LUXURY", "ULTRA_LUXURY"]); export const cabinViewFareCategory = z.enum(["UNKNOWN_CABIN_CATEGORY", "BASIC", "ECONOMY", "PREMIUM_ECONOMY", "ECONOMY_PLUS", "BUSINESS", "FIRST"]); export const fareCategory = z.object({ngsCategory: nGSFareCategory.optional(), cabinViewCategory: cabinViewFareCategory.optional()}); export const rateType = z.enum(["RATE_TYPE_UNKNOWN", "PUBLISHED", "TMC_NEGOTIATED", "COMPANY_NEGOTIATED"]); export const vendorProgramType = z.enum(["UA_PASS_PLUS", "GENERIC_PROGRAM_TYPE"]); export const legPerformanceVerdict = z.enum(["USUALLY_ON_TIME", "SOMETIMES_DELAYED", "OFTEN_DELAYED"]); export const additionalFareAmount = z.object({type: z.enum(["TYPE_UNKNOWN", "FLIGHT_PASS_AMOUNT", "CHANGE_FEE", "CANCELLATION_FEE", "PENALTY", "AIRLINE_FEE", "SEAT", "BAGGAGE"]), fareAmount: fareAmount, isIncludedInFareAmount: z.boolean().optional()}); export const preferredType = z.enum(["NOT_PREFERRED", "COMPANY_PREFERRED", "SPOTTERS_CHOICE", "COMPANY_BLOCKED", "TMC_PREFERRED"]); export const preference = z.object({preferredType: preferredType, blockedReason: z.string().optional(), label: z.string().optional()}); export const thirdPartySource = z.enum(["UNKNOWN_SOURCE", "SABRE", "TRAVEL_FUSION", "AVIA", "NDC", "TRAINLINE", "ATPCO_NDC", "FARELOGIX_NDC", "OFFLINE", "CONNEXUS", "ROUTEHAPPY", "AMADEUS", "GIATA", "QBR", "BCD", "QANTAS_HOTELS", "SOUTHWEST", "EXPEDIA", "HOTEL_HUB", "MARRIOTT", "CLEARTRIP", "KYTE", "GROUNDSPAN", "SABRE_NDC", "BOOKING_COM", "CARTRAWLER", "PREMIER_INN", "TRAVELODGE", "ENTERPRISE", "HYATT", "HILTON", "EUROSTAR", "NATIONAL", "ALAMO", "AVIS", "BUDGET", "HERTZ", "DOLLAR", "THRIFTY", "FIREFLY", "AMADEUS_NDC", "SIXT"]); export const multiSupplierInfo = z.object({source: thirdPartySource.optional(), posDescriptor: z.string().optional()}); export const airLegInfo = z.object({id: z.string(), flights: z.array(flightDetail), travelerInfos: z.array(travelerLegInfo), totalLegFare: fareAmount, fareCategory: fareCategory, brandName: z.string().optional(), brandCode: z.string().optional(), validatingAirline: z.string().optional(), rateType: rateType.optional(), vendorProgramType: vendorProgramType.optional(), performanceVerdict: legPerformanceVerdict.optional(), additionalTotalLegFares: z.array(additionalFareAmount).optional(), additionalLegFaresPerPax: z.array(additionalFareAmount).optional(), preferences: z.array(preference).optional(), totalCheapestLegFare: fareAmount.optional(), cheapestLegFarePerPax: fareAmount.optional(), multiSupplierInfo: multiSupplierInfo.optional()}); export const passengerType = z.enum(["UNKNOWN_PASSENGER_TYPE", "ADULT", "CHILD", "INFANT", "INFANT_ON_LAP", "YOUTH", "SENIOR", "TEEN"]); export const passengerAge = z.object({numYears: z.number().int()}); export const merchantFeeInfo = z.object({amount: fareAmount}); export const fareInfo = z.object({totalFare: fareAmount, taxBreakdown: taxBreakdown.optional(), merchantFeeInfo: merchantFeeInfo.optional()}); export const fareMetadata = z.object({corpAccountCode: z.string().optional()}); export const travelerDetail = z.object({travelerId: z.string(), travelerType: passengerType, travelerAge: passengerAge.optional(), fareInfo: fareInfo, fareMetadata: fareMetadata.optional(), additionalFaresPerPax: z.array(additionalFareAmount).optional()}); export const ticketType = z.enum(["SINGLE", "MULTI"]); export const pnrPolicyId = z.object({id: z.string(), version: z.string(), policyName: z.string().optional(), approvalType: z.enum(["HARD_APPROVAL", "SOFT_APPROVAL", "PASSIVE_APPROVAL"]).optional(), policyType: z.enum(["GLOBAL", "DEFAULT", "GROUP"]).optional()}); export const policyPredicate = z.enum(["UNKNOWN_PREDICATE_STRING", "MAX_FARE_PER_TRAVELLER_VIOLATION", "FARE_MORE_THAN_MINIMUM", "FARE_MORE_THAN_MEDIAN", "FARE_LESS_THAN_MEDIAN", "FARE_MORE_THAN_LLF", "MAX_FARE_PER_TRAVELLER_VIOLATION_INCLUDING_TAX", "MAX_FARE_PER_TRAVELLER_VIOLATION_EXCLUDING_TAX", "HOTEL_PAYMENT_OPTIONS_VIOLATION", "RAIL_BOOKING_WINDOW_GAP_VIOLATION", "RAIL_TRAVEL_CLASS_VIOLATION", "RAIL_TICKET_REFUNDABLE_VIOLATION", "RAIL_MAX_BOOKING_PRICE_VIOLATION_INCLUDING_TAX", "RAIL_MAX_BOOKING_PRICE_VIOLATION_EXCLUDING_TAX", "AIR_MAX_PRICE_MORE_THAN_LLF_VIOLATION_INCLUDING_TAX", "AIR_MAX_PRICE_MORE_THAN_LLF_VIOLATION_EXCLUDING_TAX", "HOTEL_RESTRICTED_KEYWORDS_VIOLATION", "RESTRICTED_LOCATION_VIOLATION", "FLIGHT_ADVANCE_BOOKING_WINDOW_DOMESTIC_VIOLATION", "FLIGHT_ADVANCE_BOOKING_WINDOW_INTERNATIONAL_VIOLATION", "FLIGHT_ADVANCE_BOOKING_WINDOW_VIOLATION", "ITINERARY_WITHIN_EVENT_TRAVEL_WINDOW", "HOTEL_IN_ALLOWED_HOTEL_LIST", "PAYMENT_ACCESS_VIOLATION", "AIRPORT_IN_ALLOWED_AIRPORT_LIST", "ITINERARY_TYPE_IS_NOT_IN_ALLOWED_BOOKING_TYPES", "PAYMENT_AIR_ADDON_VIOLATION", "MAX_HOTEL_BOOKING_PRICE_INCLUDING_TAX", "MAX_HOTEL_BOOKING_PRICE_EXCLUDING_TAX", "AIR_NUM_TRAVELERS_ALLOWED", "PREFERRED_VENDOR_VIOLATION", "SEAT_ADDON_VIOLATION", "BAGGAGE_ADDON_VIOLATION", "EARLY_BIRD_ADDON_VIOLATION", "WIFI_ADDON_VIOLATION", "RESTRICTED_BOOKING_VIOLATION", "HIGHEST_ALLOWED_CABIN_VIOLATION", "LOWEST_FARE_PER_HOTEL_PROPERTY_VIOLATION", "AIR_RESTRICTED_FARES_VIOLATION", "AIR_ANCILLARY_VIOLATION"]); export const length = z.object({length: z.number(), unit: z.enum(["UNKNOWN_UNIT", "KM", "MILE", "CENTIMETER", "METER"])}); export const latlng = z.object({latitude: z.number(), longitude: z.number()}); export const postalAddress = z.object({addressLines: z.array(z.string()), administrativeArea: z.string().optional(), administrativeAreaName: z.string().optional(), description: z.string().optional(), isDefault: z.boolean().optional(), languageCode: z.string().optional(), locality: z.string().optional(), locationCode: z.string().optional(), organization: z.string().optional(), postalCode: z.string().optional(), continentCode: z.string().optional(), recipients: z.array(z.string()).optional(), regionCode: z.string(), regionName: z.string().optional(), revision: z.number().int().optional(), sortingCode: z.string().optional(), sublocality: z.string().optional(), timezone: z.string().optional(), coordinates: latlng.optional()}); export const organizationAgencyId = z.object({id: z.string()}); export const organizationId = z.object({id: z.string()}); export const userId = z.object({id: z.string()}); export const companyId = z.object({id: z.string()}); export const primaryServiceProviderTmc = z.object({tmcId: companyId}); export const supplierType = z.enum(["SABRE", "AMADEUS", "TRAVEL_FUSION", "FARELOGIX_NDC", "ATPCO_NDC", "TRAINLINE", "AVIA", "QBR", "BCD", "QANTAS_HOTELS", "SOUTHWEST", "EXPEDIA", "HOTEL_HUB", "NDC", "MARRIOTT", "CLEARTRIP", "KYTE", "GROUNDSPAN", "SABRE_NDC", "BOOKING_COM", "CARTRAWLER", "PREMIER_INN", "TRAVELODGE", "ENTERPRISE", "HYATT", "HILTON", "NATIONAL", "ALAMO", "HERTZ", "DOLLAR", "THRIFTY", "FIREFLY", "EUROSTAR", "AVIS", "BUDGET", "AMADEUS_NDC", "SIXT"]); export const travelType = z.enum(["AIR", "HOTEL", "CAR", "RAIL", "LIMO", "MISC", "ALL"]); export const secondaryServiceProviderTmc = z.object({tmcId: companyId, supplier: supplierType, travelType: travelType}); export const tmcInfo = z.object({id: companyId, primaryServiceProviderTmc: primaryServiceProviderTmc, secondaryServiceProviderTmcs: z.array(secondaryServiceProviderTmc).optional(), partnerTmcId: companyId.optional()}); export const companyRef = z.object({id: companyId, name: z.string().optional(), logo: image.optional()}); export const tmcBasicInfo = z.object({contractingTmc: companyRef, bookingTmc: companyRef}); export const userOrgId = z.object({organizationAgencyId: organizationAgencyId.optional(), organizationId: organizationId, userId: userId, tmcInfo: tmcInfo.optional(), tmcBasicInfo: tmcBasicInfo.optional()}); export const legalEntityId = z.object({id: z.string()}); export const officeId = z.object({id: z.string()}); export const int32Range = z.object({min: z.number().int().optional(), max: z.number().int().optional()}); export const doubleRange = z.object({min: z.number().optional(), max: z.number().optional()}); export const persona = z.enum(["UNKNOWN_PERSONA", "EMPLOYEE", "GUEST", "PERSONAL", "RELATIVE", "ADHOC"]); export const travelClassHierarchy = z.enum(["UNKNOWN", "STANDARD", "COACH", "STANDARD_PREMIUM", "BUSINESS", "BUSINESS_PREMIUM", "FIRST", "SLEEPER"]); export const restrictedKeywordsWithReason = z.object({keyword: z.string().optional(), reason: z.string().optional()}); export const keywordsWithReasonList = z.object({keywords: z.array(restrictedKeywordsWithReason).optional()}); export const workerType = z.enum(["EMPLOYEE", "CONTINGENT", "SEASONAL", "INTERN", "GUEST"]); export const airRestrictedKeyword = z.object({keyword: z.string(), airlineCode: z.string().optional()}); export const airRestrictedFaresParams = z.object({airRestrictedKeywords: z.array(airRestrictedKeyword).optional()}); export const policyConstValue = z.union([z.object({displaySuffix: z.string().optional(), i: z.number().int().optional()}), z.object({displaySuffix: z.string().optional(), l: z.number().int().optional()}), z.object({displaySuffix: z.string().optional(), s: z.string().optional()}), z.object({displaySuffix: z.string().optional(), d: z.number().optional()}), z.object({displaySuffix: z.string().optional(), b: z.boolean().optional()}), z.object({displaySuffix: z.string().optional(), iList: z.array(z.number().int()).optional()}), z.object({displaySuffix: z.string().optional(), dList: z.array(z.number()).optional()}), z.object({displaySuffix: z.string().optional(), sList: z.array(z.string()).optional()}), z.object({displaySuffix: z.string().optional(), money: money.optional()}), z.object({displaySuffix: z.string().optional(), length: length.optional()}), z.object({displaySuffix: z.string().optional(), postalAddress: postalAddress.optional()}), z.object({displaySuffix: z.string().optional(), userOrgId: userOrgId.optional()}), z.object({displaySuffix: z.string().optional(), legalEntityId: legalEntityId.optional()}), z.object({displaySuffix: z.string().optional(), officeId: officeId.optional()}), z.object({displaySuffix: z.string().optional(), userOrgIdList: z.array(userOrgId).optional()}), z.object({displaySuffix: z.string().optional(), legalEntityIdList: z.array(legalEntityId).optional()}), z.object({displaySuffix: z.string().optional(), officeIdList: z.array(officeId).optional()}), z.object({displaySuffix: z.string().optional(), rating: z.number().optional()}), z.object({displaySuffix: z.string().optional(), percentage: z.number().optional()}), z.object({displaySuffix: z.string().optional(), iRange: int32Range.optional()}), z.object({displaySuffix: z.string().optional(), dRange: doubleRange.optional()}), z.object({displaySuffix: z.string().optional(), persona: persona.optional()}), z.object({displaySuffix: z.string().optional(), personaList: z.array(persona).optional()}), z.object({displaySuffix: z.string().optional(), railTravelClass: travelClassHierarchy.optional()}), z.object({displaySuffix: z.string().optional(), keywordWithReasonList: keywordsWithReasonList.optional()}), z.object({displaySuffix: z.string().optional(), workerType: workerType.optional()}), z.object({displaySuffix: z.string().optional(), workerTypeList: z.array(workerType).optional()}), z.object({displaySuffix: z.string().optional(), airRestrictedFaresParams: airRestrictedFaresParams.optional()}), z.object({displaySuffix: z.string().optional(), postalAddressList: z.array(postalAddress).optional()})]); export const policyViolationInfo = z.object({predicateString: z.string().optional(), predicate: policyPredicate.optional(), expectedValue: policyConstValue.optional(), actualValue: policyConstValue.optional()}); export const policyFlagAction = z.object({message: z.string().optional()}); export const policyAlertOnSelectionAction = z.object({message: z.string().optional()}); export const approvalType = z.enum(["HARD_APPROVAL", "SOFT_APPROVAL", "PASSIVE_APPROVAL", "PRE_APPROVAL"]); export const policyTakeApprovalAction = z.object({numHierarchyLevels: z.number().int().optional(), positionTitles: z.array(z.string()).optional(), userOrgIds: z.array(userOrgId).optional(), allRequired: z.boolean().optional(), hardApprovalRequired: z.boolean().optional(), approvalType: approvalType.optional()}); export const policyPreventBookingAction = z.object({prevent: z.boolean().optional(), reason: z.string().optional()}); export const splitPayment = z.object({inPolicyAmount: money.optional(), isAmountReimbursable: z.boolean().optional(), personalFopChargeableAmount: money.optional()}); export const policyAction = z.union([z.object({flag: policyFlagAction.optional()}), z.object({hide: z.boolean().optional()}), z.object({alertOnSelection: policyAlertOnSelectionAction.optional()}), z.object({takeApproval: policyTakeApprovalAction.optional()}), z.object({preventBooking: policyPreventBookingAction.optional()}), z.object({splitPayment: splitPayment.optional()})]); export const policyRuleResultInfo = z.object({violationInfos: z.array(policyViolationInfo).optional(), subViolationInfos: z.array(policyViolationInfo).optional(), actions: z.array(policyAction).optional()}); export const pnrPolicyInfo = z.object({policies: z.array(pnrPolicyId).optional(), ruleResultInfos: z.array(policyRuleResultInfo).optional()}); export const pOSInfo = z.object({source: thirdPartySource, posDescriptor: z.string().optional()}); export const itemType = z.enum(["SERVICE_FEE", "TRAVEL_TICKET", "SEAT", "BAGGAGE", "EARLY_BIRD"]); export const fareComponent = z.enum(["BASE", "TAX"]); export const paymentItem = z.object({itemType: itemType.optional(), fareComponent: z.array(fareComponent).optional()}); export const minMaxAmount = z.object({minLimit: money.optional(), maxLimit: money.optional()}); export const splitAmount = z.object({amount: z.array(money).optional()}); export const paymentSplitDetails = z.union([z.object({minMaxAmount: minMaxAmount.optional()}), z.object({splitAmount: splitAmount.optional()})]); export const accessType = z.enum(["CENTRALISED", "PERSONAL", "APPLICATION", "TMC", "ITINERARY", "EVENT", "EVENT_TEMPLATE"]); export const paymentSplitCriterion = z.object({accessType: accessType.optional()}); export const unusableReason = z.enum(["SUPPLIER_RESTRICTION", "POLICY_RESTRICTION", "INCOMPLETE_PAYMENT_SOURCE", "INSUFFICIENT_BALANCE"]); export const unusablePaymentSource = z.object({id: z.string(), reason: unusableReason.optional()}); export const cardCompany = z.enum(["NONE", "VISA", "MASTERCARD", "AMEX", "DISCOVER", "AIR_TRAVEL_UATP", "CARTE_BLANCHE", "DINERS_CLUB", "JCB", "BREX", "UNION_PAY", "EURO_CARD", "ACCESS_CARD", "ELO_CARD"]); export const paymentSourceCondition = z.object({type: z.string(), cardCompanies: z.array(cardCompany).optional()}); export const paymentRule = z.object({paymentSplitDetails: paymentSplitDetails.optional(), paymentSourceIds: z.array(z.string()).optional(), allowAddCard: z.boolean().optional(), splitCriterion: paymentSplitCriterion.optional(), unusablePaymentSources: z.array(unusablePaymentSource).optional(), paymentSourceConditions: z.array(paymentSourceCondition).optional()}); export const allowedFopRule = z.object({paymentItems: z.array(paymentItem).optional(), amount: money.optional(), paymentRules: z.array(paymentRule).optional()}); export const fareAttributes = z.object({isVoidable: z.boolean().optional(), holdDeadline: dateTimeLocal.optional(), isNonVerifiedExchangeOffer: z.boolean().optional()}); export const changeFee = z.object({amount: money.optional()}); export const cloneInfo = z.object({isClosestMatch: z.boolean().optional()}); export const approverType = z.enum(["UNKNOWN_APPROVER", "APPROVER", "AUTHORIZER"]); export const approverDetails = z.object({approverName: z.string().optional(), approverEmail: z.string().optional(), approverUserOrgId: userOrgId.optional(), type: approverType.optional()}); export const checkoutApprovalInfo = z.object({approvalType: approvalType.optional(), approverDetails: z.array(approverDetails).optional()}); export const airItin = z.object({itineraryId: z.string(), legs: z.array(airLegInfo), travelers: z.array(travelerDetail), fareInfo: fareInfo, ticketType: ticketType, policyInfos: pnrPolicyInfo.optional(), posInfo: z.array(pOSInfo).optional(), publicFare: fareAmount.optional(), allowedFopRules: z.array(allowedFopRule).optional(), fareAttributes: fareAttributes.optional(), additionalTotalFares: z.array(additionalFareAmount).optional(), changeFee: changeFee.optional(), hasApplicableCredits: z.boolean().optional(), applicableCreditIndices: z.array(z.number().int()).optional(), showRawFareRules: z.boolean().optional(), cloneInfo: cloneInfo.optional(), airline: z.string().optional(), isUnselectable: z.boolean().optional(), inPolicyAmount: money.optional(), checkoutApprovalInfo: checkoutApprovalInfo.optional(), allowedFop: z.array(paymentMethod).optional()}); export const airSelectedItineraryResponse = z.object({itinerary: airItin}); 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 }; /** * Get selected itinerary * * POST /v2/air/selected-itinerary */ export const createApiV2AirSelectedItinerary = async (args: CreateApiV2AirSelectedItineraryArgs, options?: CreateApiV2AirSelectedItineraryOptions) => { const {baseUrl = "https://api-ext-sboxmeta.partners.spotnana.com", fetch: fetchFn = fetch, Bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (Bearer !== undefined) headers.set('authorization', `Bearer ${Bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/v2/air/selected-itinerary${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(airSelectedItineraryResponse, await res.json()) };