import { createCounter } from "@scandic-hotels/common/telemetry" import * as api from "../../../api" import { langToApiLang } from "../../../constants/apiLang" import { slimBookingSchema } from "../schema" import type { Lang } from "@scandic-hotels/common/constants/language" export async function guaranteeBooking( { confirmationNumber, language, success, error, cancel, card, }: { confirmationNumber: string language: Lang success: string | null error: string | null cancel: string | null card?: { alias: string; expiryDate: string; cardType: string } }, token: string ) { const guaranteeBookingCounter = createCounter("trpc.booking.guarantee") const metricsGuaranteeBooking = guaranteeBookingCounter.init({ confirmationNumber, language, }) metricsGuaranteeBooking.start() const headers = { Authorization: `Bearer ${token}`, } const apiResponse = await api.put( api.endpoints.v1.Booking.guarantee(confirmationNumber), { headers, body: { success, error, cancel, card }, }, { language: langToApiLang[language] } ) if (!apiResponse.ok) { await metricsGuaranteeBooking.httpError(apiResponse) return null } const apiJson = await apiResponse.json() const verifiedData = slimBookingSchema.safeParse(apiJson) if (!verifiedData.success) { metricsGuaranteeBooking.validationError(verifiedData.error) return null } metricsGuaranteeBooking.success() return verifiedData.data }