import {z} from 'zod' export type AmenityGroup = {id?: string | undefined, type?: string | undefined, attributes?: ({name?: ({cs?: string | undefined, 'da-DK'?: string | undefined, de?: string | undefined, 'de-AT'?: string | undefined, 'de-CH'?: string | undefined, 'en-US'?: string | undefined, 'en-GB'?: string | undefined, es?: string | undefined, fr?: string | undefined, 'fr-BE'?: string | undefined, 'fr-LU'?: string | undefined, it?: string | undefined, nb?: string | undefined, nl?: string | undefined, 'nl-BE'?: string | undefined, pl?: string | undefined, pt?: string | undefined, tr?: string | undefined, en?: string | undefined, da?: string | undefined}) | undefined, position?: number | undefined, applies_to_administration?: boolean | undefined}) | undefined, meta?: ({temp_id?: string | undefined}) | undefined}; export type AmenityOption = {id?: string | undefined, type?: string | undefined, attributes?: ({name?: ({cs?: string | undefined, 'da-DK'?: string | undefined, de?: string | undefined, 'de-AT'?: string | undefined, 'de-CH'?: string | undefined, 'en-US'?: string | undefined, 'en-GB'?: string | undefined, es?: string | undefined, fr?: string | undefined, 'fr-BE'?: string | undefined, 'fr-LU'?: string | undefined, it?: string | undefined, nb?: string | undefined, nl?: string | undefined, 'nl-BE'?: string | undefined, pl?: string | undefined, pt?: string | undefined, tr?: string | undefined, en?: string | undefined, da?: string | undefined}) | undefined}) | undefined, meta?: ({temp_id?: string | undefined}) | undefined}; export type PatchApiV3AmenitiesIdArgs = {id: string, 'fields[amenity]'?: string | undefined, include?: string | undefined, 'Accept-Language'?: string | undefined, body: {data?: ({id?: string | undefined, type?: string | undefined, attributes?: ({filterable?: boolean | undefined, highlightable?: boolean | undefined}) | undefined, relationships?: ({amenity_group?: ({data?: ({id?: string | undefined, type?: string | undefined, meta?: ({temp_id?: string | undefined, method?: string | undefined}) | undefined}) | undefined}) | undefined, amenity_options?: ({data?: (Array<{id?: string | undefined, type?: string | undefined, meta?: ({temp_id?: string | undefined, method?: string | undefined}) | undefined}>) | undefined}) | undefined}) | undefined, meta?: ({temp_id?: string | undefined}) | undefined}) | undefined, included?: (Array) | undefined}}; export type PatchApiV3AmenitiesIdOptions = {baseUrl?: string | undefined, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const amenity = z.object({id: z.string().optional(), type: z.string().optional(), attributes: z.object({name: z.object({cs: z.string().optional(), "da-DK": z.string().optional(), de: z.string().optional(), "de-AT": z.string().optional(), "de-CH": z.string().optional(), "en-US": z.string().optional(), "en-GB": z.string().optional(), es: z.string().optional(), fr: z.string().optional(), "fr-BE": z.string().optional(), "fr-LU": z.string().optional(), it: z.string().optional(), nb: z.string().optional(), nl: z.string().optional(), "nl-BE": z.string().optional(), pl: z.string().optional(), pt: z.string().optional(), tr: z.string().optional(), en: z.string().optional(), da: z.string().optional()}).optional(), description: z.object({cs: z.string().optional(), "da-DK": z.string().optional(), de: z.string().optional(), "de-AT": z.string().optional(), "de-CH": z.string().optional(), "en-US": z.string().optional(), "en-GB": z.string().optional(), es: z.string().optional(), fr: z.string().optional(), "fr-BE": z.string().optional(), "fr-LU": z.string().optional(), it: z.string().optional(), nb: z.string().optional(), nl: z.string().optional(), "nl-BE": z.string().optional(), pl: z.string().optional(), pt: z.string().optional(), tr: z.string().optional(), en: z.string().optional(), da: z.string().optional()}).optional(), icon_url: z.string().optional(), type: z.enum(["Amenity", "Amenities::NumericalAmenity", "Amenities::MultipleChoiceAmenity"]).optional(), position: z.number().int().optional(), semantic_amenity_type: z.enum(["accessible_toilet", "accessible_washbasin", "afternoon_sun", "air_hockey", "airco", "amazon_prime", "animation", "baby_bath", "baby_monitor", "balcony", "bathtub", "bbq", "beach_front", "beach_view", "bed_linen_provided", "bedroom_tv", "bicycle", "bicycle_rental", "bicycle_storage", "bidet", "billiard_table", "bluray_player", "boat", "bocce_ball", "bowling_alley", "box_bed", "boxspring", "breakfast_service", "bunk_bed", "cabinet_locks", "cable_tv", "cai_hookup", "canoe", "car_free", "carbon_monoxide_detector", "cd_player", "ceiling_fan", "central_heating", "central_location", "ceramic_cooktop", "child_friendly", "childproof_electrical_outlets", "close_to_beach", "coffee_brewing_system", "coffee_capsule_system", "coffee_pad_system", "combi_microwave", "combi_oven", "communal_pool", "computer_monitor", "conservatory", "cookware", "corner_site", "cot", "cradle", "crib", "cutlery", "dartboard", "deck", "decorative_fireplace", "desk", "desk_chair", "dining_table", "disco", "dishes", "dishwasher", "disinfected", "disney_plus", "double_bed", "double_washbasin", "downtown", "drinking_glasses", "dryer", "drying_rack", "dvd_player", "ebike_charging_point", "electric_cooktop", "electricity_hookup", "elevator", "enhanced_cleaning", "ev_charging_point", "evening_sun", "extractor_hood", "fenced_pool", "fenced_yard", "final_cleaning", "fire_extinguisher", "fire_pit", "fireplace", "first_aid_kit", "fitness_room", "flatscreen_tv", "floor", "football_pitch", "forest", "forest_front", "forest_view", "free_standing", "free_wifi", "freezer", "gaming_console", "garden", "garden_furniture", "gas_cooktop", "gas_heater", "golf_course_front", "golf_course_view", "golfcourt", "grill", "guest_gap_period_24_hours", "guest_gap_period_48_hours", "guest_gap_period_72_hours", "hair_dryer", "hammock", "hangers", "hbo", "heated_pool", "heater", "high_chair", "high_touch_surfaces_disinfected", "horseriding", "hot_tub", "indoor_playground", "indoor_pool", "induction_cooktop", "insect_screens", "internet", "iron", "ironing_board", "jacuzzi", "kettle", "kingsize_bed", "kitchen", "kitchen_island", "kitchen_utensils", "kitchenette", "lake_front", "lake_view", "linens_high_temp_wash", "lounge_set", "loungers", "marina", "microwave", "minibar", "minigolf", "morning_sun", "motion_detector", "mountain_view", "mountains", "netflix", "ocean_front", "ocean_view", "office", "other", "outdoor_kitchen", "outdoor_playground", "outdoor_pool", "outdoor_shower", "oven", "paid_wifi", "parasol", "parking_area", "party_games", "patio", "paved_surface", "pedal_gokarts", "pellet_stove", "pet_friendly", "petting_zoo", "playground_front", "playground_view", "playpen", "pool_front", "pool_table", "printer", "private_garage", "private_golf", "private_parking", "private_pool", "private_sanitary", "private_tennis", "quay", "queensize_bed", "quiet_location", "radio", "refrigerator", "resort", "restaurant", "river", "rowboat", "rural", "safe", "sanitary_front", "satellite_tv", "sauna", "self_service_check_in", "semi_double_bed", "sewer_hookup", "shadow", "shower", "shower_chair", "single_bed", "single_floor", "smart_tv", "smoke_detector", "smoke_free", "smoking_allowed", "sofa_bed", "sound_system", "stair_gate", "storage_room", "streaming_service", "sunshower", "swing", "table_football_table", "table_tennis_table", "tanning_bed", "telephone", "tenniscourt", "toaster", "toilet", "towels", "toys", "trampoline", "twin_beds", "underfloor_heating", "vacuum_cleaner", "veranda", "videoland", "village", "volleyball_court", "wardrobe", "washbasin", "washer", "water_front", "water_hookup", "water_view", "wellness", "wheelchair_accessible", "wifi", "wood_stove"]).optional(), filterable: z.boolean().optional(), highlightable: z.boolean().optional()}).optional(), relationships: z.object({amenity_group: z.object({data: z.object({id: z.string().optional(), type: z.string().optional(), meta: z.object({temp_id: z.string().optional(), method: z.string().optional()}).optional()}).optional()}).optional(), amenity_options: z.object({data: z.array(z.object({id: z.string().optional(), type: z.string().optional(), meta: z.object({temp_id: z.string().optional(), method: z.string().optional()}).optional()})).optional()}).optional()}).optional(), meta: z.object({temp_id: z.string().optional()}).optional()}); export const amenityGroup = z.object({id: z.string().optional(), type: z.string().optional(), attributes: z.object({name: z.object({cs: z.string().optional(), "da-DK": z.string().optional(), de: z.string().optional(), "de-AT": z.string().optional(), "de-CH": z.string().optional(), "en-US": z.string().optional(), "en-GB": z.string().optional(), es: z.string().optional(), fr: z.string().optional(), "fr-BE": z.string().optional(), "fr-LU": z.string().optional(), it: z.string().optional(), nb: z.string().optional(), nl: z.string().optional(), "nl-BE": z.string().optional(), pl: z.string().optional(), pt: z.string().optional(), tr: z.string().optional(), en: z.string().optional(), da: z.string().optional()}).optional(), position: z.number().int().optional(), applies_to_administration: z.boolean().optional()}).optional(), meta: z.object({temp_id: z.string().optional()}).optional()}); export const amenityOption = z.object({id: z.string().optional(), type: z.string().optional(), attributes: z.object({name: z.object({cs: z.string().optional(), "da-DK": z.string().optional(), de: z.string().optional(), "de-AT": z.string().optional(), "de-CH": z.string().optional(), "en-US": z.string().optional(), "en-GB": z.string().optional(), es: z.string().optional(), fr: z.string().optional(), "fr-BE": z.string().optional(), "fr-LU": z.string().optional(), it: z.string().optional(), nb: z.string().optional(), nl: z.string().optional(), "nl-BE": z.string().optional(), pl: z.string().optional(), pt: z.string().optional(), tr: z.string().optional(), en: z.string().optional(), da: z.string().optional()}).optional()}).optional(), meta: z.object({temp_id: z.string().optional()}).optional()}); export const patchApiV3AmenitiesIdResponse = z.object({data: amenity.optional(), included: z.array(z.union([amenityGroup, amenityOption])).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 }; /** * PATCH amenity * * PATCH /v3/amenities/{id} * * Also accepts auth: OAuth2 */ export const patchApiV3AmenitiesId = async (args: PatchApiV3AmenitiesIdArgs, options?: PatchApiV3AmenitiesIdOptions) => { const {baseUrl = "https://api.bookingexperts.com", fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/vnd.api+json") headers.set('accept', "application/vnd.api+json") if (args['fields[amenity]'] != null) query.append("fields[amenity]", String(args['fields[amenity]'])) if (args.include != null) query.append("include", String(args.include)) if (args['Accept-Language'] != null) headers.set("Accept-Language", String(args['Accept-Language'])) if (ApiKeyAuth !== undefined) headers.set("X-API-KEY", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/v3/amenities/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", 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(patchApiV3AmenitiesIdResponse, await res.json()) };