import {z} from 'zod' export type Limitation = {Count: number, Cursor?: (string | null) | undefined}; export type CompanionshipExtent = {Reservations?: (boolean | null) | undefined, ReservationGroups?: (boolean | null) | undefined, Customers?: (boolean | null) | undefined}; export type TimeFilterInterval = {StartUtc?: (string | null) | undefined, EndUtc?: (string | null) | undefined}; export type CompanionshipFilterParameters = {ClientToken: string, AccessToken: string, Client: string, Limitation: Limitation, EnterpriseIds?: (Array | null) | undefined, CompanionshipIds?: (Array | null) | undefined, Extent: CompanionshipExtent, ReservationIds?: (Array | null) | undefined, CustomerIds?: (Array | null) | undefined, ReservationGroupIds?: (Array | null) | undefined, UpdatedUtc?: (TimeFilterInterval | null) | undefined}; export type CreateApiApiConnectorV1CompanionshipsGetAllArgs = {body: CompanionshipFilterParameters}; export type CreateApiApiConnectorV1CompanionshipsGetAllOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const companionship = z.object({Id: z.string().optional(), CustomerId: z.string().optional(), ReservationGroupId: z.string().optional(), ReservationId: z.string().nullable().optional()}); export const serviceOrderStateOld = z.enum(["Enquired", "Confirmed", "Started", "Processed", "Canceled", "Optional", "Requested"]); export const reservationOldOrigin = z.enum(["Distributor", "ChannelManager", "Import", "Connector", "Navigator", "CommanderInPerson", "CommanderChannel", "CommanderPhone", "CommanderEmail", "CommanderWebsite", "CommanderMessage", "CommanderCallCenter", "CommanderRoomingList"]); export const reservationPurpose = z.enum(["Leisure", "Business", "Student"]); export const cancellationReason = z.enum(["Other", "ConfirmationMissed", "BookedElsewhere", "ForceMajeure", "GuestComplaint", "NoShow", "PriceTooHigh", "ServiceNotAvailable", "InputError", "InvalidPayment", "TravelAgency", "RequestedByGuest", "Update", "BookingAbandoned", "RequestedByBooker"]); export const reservationPersonCount = z.object({AgeCategoryId: z.string(), Count: z.number().int()}); export const reservationOptions = z.object({OwnerCheckedIn: z.boolean(), AllCompanionsCheckedIn: z.boolean(), AnyCompanionCheckedIn: z.boolean()}); export const reservationOld = z.object({Id: z.string(), ServiceId: z.string(), GroupId: z.string(), Number: z.string().min(1), ChannelNumber: z.string().nullable().optional(), ChannelManagerNumber: z.string().nullable().optional(), ChannelManagerGroupNumber: z.string().nullable().optional(), ChannelManager: z.string().nullable().optional(), State: serviceOrderStateOld, Origin: reservationOldOrigin, OriginDetails: z.string().nullable().optional(), Purpose: reservationPurpose.nullable().optional(), CreatedUtc: z.string().min(1), UpdatedUtc: z.string().min(1), CancelledUtc: z.string().nullable().optional(), StartUtc: z.string().min(1), EndUtc: z.string().min(1), ReleasedUtc: z.string().nullable().optional(), RequestedCategoryId: z.string(), AssignedSpaceId: z.string().nullable().optional(), AssignedSpaceLocked: z.boolean().optional(), AssignedResourceId: z.string().nullable().optional(), AssignedResourceLocked: z.boolean(), BusinessSegmentId: z.string().nullable().optional(), CompanyId: z.string().nullable().optional(), TravelAgencyId: z.string().nullable().optional(), AvailabilityBlockId: z.string().nullable().optional(), RateId: z.string(), VoucherId: z.string().nullable().optional(), CreditCardId: z.string().nullable().optional(), CancellationReason: cancellationReason.nullable().optional(), AdultCount: z.number().int().optional(), ChildCount: z.number().int().optional(), PersonCounts: z.array(reservationPersonCount), OwnerId: z.string(), CustomerId: z.string(), BookerId: z.string().nullable().optional(), CompanionIds: z.array(z.string()), ChannelManagerId: z.string().nullable().optional(), Options: reservationOptions}); export const reservationGroupOld = z.object({Id: z.string().optional(), Name: z.string().nullable().optional()}); export const title = z.enum(["Mister", "Miss", "Misses"]); export const sexEnum = z.enum(["Male", "Female"]); export const identityDocumentTypeEnum = z.enum(["IdentityCard", "Passport", "Visa", "DriversLicense"]); export const identityDocument = z.object({Id: z.string().optional(), CustomerId: z.string().optional(), Type: identityDocumentTypeEnum.optional(), Number: z.string().nullable().optional(), Expiration: z.string().nullable().optional(), Issuance: z.string().nullable().optional(), IssuingCountryCode: z.string().nullable().optional(), IssuingCountrySubdivisionCode: z.string().nullable().optional(), IssuingCity: z.string().nullable().optional(), IdentityDocumentSupportNumber: z.string().nullable().optional()}); export const oldAddress = z.object({Id: z.string().optional(), Line1: z.string().nullable().optional(), Line2: z.string().nullable().optional(), City: z.string().nullable().optional(), PostalCode: z.string().nullable().optional(), CountryCode: z.string().nullable().optional(), CountrySubdivisionCode: z.string().nullable().optional(), Latitude: z.number().nullable().optional(), Longitude: z.number().nullable().optional()}); export const customerClassificationEnum = z.enum(["PaymasterAccount", "Blacklist", "Media", "LoyaltyProgram", "PreviousComplaint", "Returning", "Staff", "FriendOrFamily", "TopManagement", "Important", "VeryImportant", "Problematic", "Cashlist", "DisabledPerson", "Military", "Airline", "HealthCompliant", "InRoom", "WaitingForRoom", "Student", "Blocklist"]); export const customerOptionsEnum = z.enum(["None", "SendMarketingEmails", "Invoiceable", "BillAddressObjection", "SendMarketingPostalMail", "SendPartnerMarketingEmails", "SendPartnerMarketingPostalMail", "WithdrawCardConsent", "GuestPhotoConsent", "IdPhotosConsent"]); export const resourceFeatureClassification = z.enum(["SeaView", "RiverView", "OceanView", "TwinBeds", "DoubleBed", "RollawayBed", "UpperBed", "LowerBed", "Balcony", "AccessibleBathroom", "AccessibleRoom", "ElevatorAccess", "HighFloor", "Kitchenette", "AirConditioning", "PrivateJacuzzi", "PrivateSauna", "EnsuiteRoom", "PrivateBathroom", "SharedBathroom"]); export const customer = z.object({Id: z.string(), ChainId: z.string(), Number: z.string().min(1).max(19), Title: title.nullable().optional(), CustomTitleName: z.string().nullable().optional(), CustomTitleId: z.string().nullable().optional(), Sex: sexEnum.nullable().optional(), FirstName: z.string().nullable().optional(), LastName: z.string().min(1), SecondLastName: z.string().nullable().optional(), NationalityCode: z.string().nullable().optional(), PreferredLanguageCode: z.string().nullable().optional(), LanguageCode: z.string().nullable().optional(), BirthDate: z.string().nullable().optional(), BirthCountryCode: z.string().nullable().optional(), BirthCountrySubdivisionCode: z.string().nullable().optional(), BirthPlace: z.string().nullable().optional(), Occupation: z.string().nullable().optional(), Email: z.string().nullable().optional(), HasOtaEmail: z.boolean().optional(), Phone: z.string().nullable().optional(), TaxIdentificationNumber: z.string().nullable().optional(), LoyaltyCode: z.string().nullable().optional(), AccountingCode: z.string().nullable().optional(), BillingCode: z.string().nullable().optional(), Notes: z.string().nullable().optional(), CarRegistrationNumber: z.string().max(255).nullable().optional(), DietaryRequirements: z.string().max(255).nullable().optional(), CreatedUtc: z.string().min(1), UpdatedUtc: z.string().min(1), Passport: identityDocument.nullable().optional(), IdentityCard: identityDocument.nullable().optional(), Visa: identityDocument.nullable().optional(), DriversLicense: identityDocument.nullable().optional(), Address: oldAddress.nullable().optional(), AddressId: z.string().nullable().optional(), Classifications: z.array(customerClassificationEnum), Options: z.array(customerOptionsEnum), ItalianDestinationCode: z.string().nullable().optional(), ItalianFiscalCode: z.string().nullable().optional(), ItalianLotteryCode: z.string().nullable().optional(), CompanyId: z.string().nullable().optional(), MergeTargetId: z.string().nullable().optional(), ActivityState: z.string().nullable().optional(), IsActive: z.boolean(), PreferredSpaceFeatures: z.array(resourceFeatureClassification), CreatorProfileId: z.string(), UpdaterProfileId: z.string()}); export const companionshipResult = z.object({Companionships: z.array(companionship).nullable().optional(), Reservations: z.array(reservationOld).nullable().optional(), ReservationGroups: z.array(reservationGroupOld).nullable().optional(), Customers: z.array(customer).nullable().optional(), Cursor: z.string().nullable().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get all companionships * * POST /api/connector/v1/companionships/getAll */ export const createApiApiConnectorV1CompanionshipsGetAll = async (args: CreateApiApiConnectorV1CompanionshipsGetAllArgs, options?: CreateApiApiConnectorV1CompanionshipsGetAllOptions) => { const {baseUrl = "https://api.mews.com", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/api/connector/v1/companionships/getAll${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(companionshipResult, await res.json()) };