import "server-only" import { myStay } from "@scandic-hotels/common/constants/routes/myStay" import { env } from "../../../../env/server" import { encrypt } from "../../../utils/encryption" import { getVerifiedUser } from "./getVerifiedUser" import type { Lang } from "@scandic-hotels/common/constants/language" import type { Session } from "next-auth" import type { FriendTransaction, Stay } from "../output" export async function updateStaysBookingUrl( data: Stay[], session: Session, lang: Lang ): Promise export async function updateStaysBookingUrl( data: FriendTransaction[], session: Session, lang: Lang ): Promise export async function updateStaysBookingUrl( data: Stay[] | FriendTransaction[], session: Session, lang: Lang ) { const user = await getVerifiedUser({ session, }) if (user && !("error" in user)) { return data.map((d) => { const originalString = d.attributes.confirmationNumber.toString() + "," + user.data.lastName const encryptedBookingValue = encrypt(originalString) // Get base URL with fallback for ephemeral environments (like deploy previews). const baseUrl = env.PUBLIC_URL || "https://www.scandichotels.com" // Construct Booking URL. const bookingUrl = new URL(myStay[lang], baseUrl) // Add search parameters. if (encryptedBookingValue) { bookingUrl.searchParams.set("RefId", encryptedBookingValue) } else { bookingUrl.searchParams.set("lastName", user.data.lastName) bookingUrl.searchParams.set( "bookingId", d.attributes.confirmationNumber.toString() ) } return { ...d, attributes: { ...d.attributes, bookingUrl: bookingUrl.toString(), }, } }) } return data }