Merged in chore/cleanup-after-trpc-migration (pull request #2457)

Chore/cleanup after trpc migration

* Clean up TODOs

* Rename REDEMPTION constant to SEARCH_TYPE_REDEMPTION

* Update dependencies

Remove unused deps from scandic-web
Add missing deps to trpc package

* Update self-referencing imports

* Remove unused variables from scandic-web env

* Fix missing graphql-tag package

* Actually fix

* Remove unused env var


Approved-by: Christian Andolf
Approved-by: Linus Flood
This commit is contained in:
Anton Gunnarsson
2025-06-30 12:08:19 +00:00
parent 8127cfc73b
commit 4e1cb01b84
53 changed files with 131 additions and 233 deletions

View File

@@ -34,6 +34,7 @@
"eslint-plugin-formatjs": "^5.3.1", "eslint-plugin-formatjs": "^5.3.1",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.31.0",
"eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-simple-import-sort": "^12.1.1",
"graphql-tag": "^2.12.6",
"typescript": "5.8.3", "typescript": "5.8.3",
"typescript-plugin-css-modules": "^5.1.0" "typescript-plugin-css-modules": "^5.1.0"
}, },

View File

@@ -1,6 +1,6 @@
import { notFound } from "next/navigation" import { notFound } from "next/navigation"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { combineRegExps, rateTypeRegex } from "@/constants/booking" import { combineRegExps, rateTypeRegex } from "@/constants/booking"
@@ -24,7 +24,7 @@ export default async function SelectRatePage(
if (!booking) return notFound() if (!booking) return notFound()
const isMultiRoom = booking.rooms.length > 1 const isMultiRoom = booking.rooms.length > 1
const isRedemption = booking.searchType === REDEMPTION const isRedemption = booking.searchType === SEARCH_TYPE_REDEMPTION
const isArbOrVoucher = booking.bookingCode const isArbOrVoucher = booking.bookingCode
? singleRoomRateTypes.test(booking.bookingCode) ? singleRoomRateTypes.test(booking.bookingCode)
: false : false

View File

@@ -7,7 +7,7 @@ import { FormProvider, useForm } from "react-hook-form"
import { dt } from "@scandic-hotels/common/dt" import { dt } from "@scandic-hotels/common/dt"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { trpc } from "@/lib/trpc/client" import { trpc } from "@/lib/trpc/client"
import { StickyElementNameEnum } from "@/stores/sticky-position" import { StickyElementNameEnum } from "@/stores/sticky-position"
@@ -123,7 +123,7 @@ export default function BookingWidgetClient({
value: selectedBookingCode, value: selectedBookingCode,
remember: false, remember: false,
}, },
redemption: data.searchType === REDEMPTION, redemption: data.searchType === SEARCH_TYPE_REDEMPTION,
rooms: defaultRoomsData, rooms: defaultRoomsData,
city: data.city || undefined, city: data.city || undefined,
hotel: hotelId, hotel: hotelId,

View File

@@ -6,7 +6,7 @@ import { useMediaQuery } from "usehooks-ts"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import Modal from "@/components/Modal" import Modal from "@/components/Modal"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
@@ -65,11 +65,11 @@ export default function BookingCode() {
shouldDirty: true, shouldDirty: true,
}) })
if (getValues(REDEMPTION)) { if (getValues(SEARCH_TYPE_REDEMPTION)) {
// Remove the redemption as user types booking code and show notification for the same // Remove the redemption as user types booking code and show notification for the same
// Add delay to handle table mode rendering // Add delay to handle table mode rendering
setTimeout(function () { setTimeout(function () {
setValue(REDEMPTION, false, { setValue(SEARCH_TYPE_REDEMPTION, false, {
shouldValidate: true, shouldValidate: true,
shouldDirty: true, shouldDirty: true,
}) })
@@ -321,7 +321,7 @@ export function RemoveExtraRooms({ ...props }: ButtonProps) {
const rooms = getValues("rooms")[0] const rooms = getValues("rooms")[0]
setValue("rooms", [rooms], { shouldValidate: true, shouldDirty: true }) setValue("rooms", [rooms], { shouldValidate: true, shouldDirty: true })
trigger("bookingCode.value") trigger("bookingCode.value")
trigger(REDEMPTION) trigger(SEARCH_TYPE_REDEMPTION)
}, 300) }, 300)
} }

View File

@@ -7,7 +7,7 @@ import { useMediaQuery } from "usehooks-ts"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import Modal from "@/components/Modal" import Modal from "@/components/Modal"
import Button from "@/components/TempDesignSystem/Button" import Button from "@/components/TempDesignSystem/Button"
@@ -38,26 +38,26 @@ export default function RewardNight() {
defaultMessage: defaultMessage:
"To book a reward night, make sure you're logged in to your Scandic Friends account.", "To book a reward night, make sure you're logged in to your Scandic Friends account.",
}) })
const redemptionErr = errors[REDEMPTION] const redemptionErr = errors[SEARCH_TYPE_REDEMPTION]
const isDesktop = useMediaQuery("(min-width: 767px)") const isDesktop = useMediaQuery("(min-width: 767px)")
function validateRedemption(value: boolean) { function validateRedemption(value: boolean) {
// Validate redemption as per the rules defined in the schema // Validate redemption as per the rules defined in the schema
trigger(REDEMPTION) trigger(SEARCH_TYPE_REDEMPTION)
if (value && getValues("bookingCode.value")) { if (value && getValues("bookingCode.value")) {
setValue("bookingCode.flag", false) setValue("bookingCode.flag", false)
setValue("bookingCode.value", "", { shouldValidate: true }) setValue("bookingCode.value", "", { shouldValidate: true })
// Hide the notification popup after 5 seconds by re-triggering validation // Hide the notification popup after 5 seconds by re-triggering validation
// This is kept consistent with location search field error notification timeout // This is kept consistent with location search field error notification timeout
setTimeout(() => { setTimeout(() => {
trigger(REDEMPTION) trigger(SEARCH_TYPE_REDEMPTION)
}, 5000) }, 5000)
} }
} }
const resetOnMultiroomError = useCallback(() => { const resetOnMultiroomError = useCallback(() => {
if (isMultiRoomError(redemptionErr?.message) && isDesktop) { if (isMultiRoomError(redemptionErr?.message) && isDesktop) {
setValue(REDEMPTION, false, { shouldValidate: true }) setValue(SEARCH_TYPE_REDEMPTION, false, { shouldValidate: true })
} }
}, [redemptionErr?.message, setValue, isDesktop]) }, [redemptionErr?.message, setValue, isDesktop])
@@ -85,7 +85,7 @@ export default function RewardNight() {
<div ref={ref} onBlur={(e) => closeOnBlur(e.nativeEvent)}> <div ref={ref} onBlur={(e) => closeOnBlur(e.nativeEvent)}>
<Checkbox <Checkbox
hideError hideError
name={REDEMPTION} name={SEARCH_TYPE_REDEMPTION}
registerOptions={{ registerOptions={{
onChange: (e) => { onChange: (e) => {
validateRedemption(e.target.value) validateRedemption(e.target.value)

View File

@@ -7,7 +7,7 @@ import { useIntl } from "react-intl"
import { dt } from "@scandic-hotels/common/dt" import { dt } from "@scandic-hotels/common/dt"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { hotelreservation } from "@/constants/routes/hotelReservation" import { hotelreservation } from "@/constants/routes/hotelReservation"
@@ -111,7 +111,7 @@ export default function FormContent({
</div> </div>
<div className={`${styles.buttonContainer} ${styles.hideOnTablet}`}> <div className={`${styles.buttonContainer} ${styles.hideOnTablet}`}>
{isMultiRoomError(errors.bookingCode?.value?.message) || {isMultiRoomError(errors.bookingCode?.value?.message) ||
isMultiRoomError(errors[REDEMPTION]?.message) ? ( isMultiRoomError(errors[SEARCH_TYPE_REDEMPTION]?.message) ? (
<div className={styles.showOnMobile}> <div className={styles.showOnMobile}>
<RemoveExtraRooms size="medium" fullWidth /> <RemoveExtraRooms size="medium" fullWidth />
</div> </div>

View File

@@ -6,7 +6,7 @@ import { Form as FormRAC } from "react-aria-components"
import { useFormContext } from "react-hook-form" import { useFormContext } from "react-hook-form"
import { selectRate } from "@scandic-hotels/common/constants/routes/hotelReservation" import { selectRate } from "@scandic-hotels/common/constants/routes/hotelReservation"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { import {
selectHotel, selectHotel,
@@ -60,7 +60,7 @@ export default function Form({ type, onClose }: BookingWidgetFormProps) {
? { bookingCode: data.bookingCode.value } ? { bookingCode: data.bookingCode.value }
: {}), : {}),
// Followed current url structure to keep searchtype=redemption param incase of reward night // Followed current url structure to keep searchtype=redemption param incase of reward night
...(data.redemption ? { searchType: REDEMPTION } : {}), ...(data.redemption ? { searchType: SEARCH_TYPE_REDEMPTION } : {}),
}) })
onClose() onClose()

View File

@@ -1,6 +1,6 @@
import { z } from "zod" import { z } from "zod"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum" import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum"
export const bookingWidgetErrors = { export const bookingWidgetErrors = {
@@ -104,7 +104,7 @@ export const bookingWidgetSchema = z
ctx.addIssue({ ctx.addIssue({
code: z.ZodIssueCode.custom, code: z.ZodIssueCode.custom,
message: bookingWidgetErrors.MULTIROOM_REWARD_NIGHT_UNAVAILABLE, message: bookingWidgetErrors.MULTIROOM_REWARD_NIGHT_UNAVAILABLE,
path: [REDEMPTION], path: [SEARCH_TYPE_REDEMPTION],
}) })
ctx.addIssue({ ctx.addIssue({
code: z.ZodIssueCode.custom, code: z.ZodIssueCode.custom,
@@ -116,7 +116,7 @@ export const bookingWidgetSchema = z
ctx.addIssue({ ctx.addIssue({
code: z.ZodIssueCode.custom, code: z.ZodIssueCode.custom,
message: bookingWidgetErrors.CODE_VOUCHER_REWARD_NIGHT_UNAVAILABLE, message: bookingWidgetErrors.CODE_VOUCHER_REWARD_NIGHT_UNAVAILABLE,
path: [REDEMPTION], path: [SEARCH_TYPE_REDEMPTION],
}) })
ctx.addIssue({ ctx.addIssue({
code: z.ZodIssueCode.custom, code: z.ZodIssueCode.custom,

View File

@@ -6,7 +6,7 @@ import { useIntl } from "react-intl"
import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import Button from "../TempDesignSystem/Button" import Button from "../TempDesignSystem/Button"
import { Tooltip } from "../TempDesignSystem/Tooltip" import { Tooltip } from "../TempDesignSystem/Tooltip"
@@ -39,7 +39,7 @@ export default function GuestsRoomsPickerDialog({
defaultMessage: "Done", defaultMessage: "Done",
}) })
// Disable add room if booking code is either voucher or corporate cheque, or reward night is enabled // Disable add room if booking code is either voucher or corporate cheque, or reward night is enabled
const addRoomDisabledTextForSpecialRate = getValues(REDEMPTION) const addRoomDisabledTextForSpecialRate = getValues(SEARCH_TYPE_REDEMPTION)
? intl.formatMessage({ ? intl.formatMessage({
defaultMessage: defaultMessage:
"Multi-room booking is not available with reward night.", "Multi-room booking is not available with reward night.",
@@ -73,7 +73,7 @@ export default function GuestsRoomsPickerDialog({
if (updatedRooms.length === 1) { if (updatedRooms.length === 1) {
trigger("bookingCode.value") trigger("bookingCode.value")
trigger(REDEMPTION) trigger(SEARCH_TYPE_REDEMPTION)
} }
}, },
[roomsValue, trigger, setValue] [roomsValue, trigger, setValue]

View File

@@ -13,7 +13,7 @@ import { selectRate } from "@scandic-hotels/common/constants/routes/hotelReserva
import { Button } from "@scandic-hotels/design-system/Button" import { Button } from "@scandic-hotels/design-system/Button"
import { Typography } from "@scandic-hotels/design-system/Typography" import { Typography } from "@scandic-hotels/design-system/Typography"
import { bedTypeMap } from "@scandic-hotels/trpc/constants/bedTypeMap" import { bedTypeMap } from "@scandic-hotels/trpc/constants/bedTypeMap"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { BookingStatusEnum } from "@scandic-hotels/trpc/enums/bookingStatus" import { BookingStatusEnum } from "@scandic-hotels/trpc/enums/bookingStatus"
import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter" import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter"
@@ -517,7 +517,7 @@ export default function PaymentClient({
onSubmit={methods.handleSubmit(handleSubmit)} onSubmit={methods.handleSubmit(handleSubmit)}
id={formId} id={formId}
> >
{booking.searchType === REDEMPTION ? ( {booking.searchType === SEARCH_TYPE_REDEMPTION ? (
<ConfirmBookingRedemption /> <ConfirmBookingRedemption />
) : hasOnlyFlexRates && !bookingMustBeGuaranteed ? ( ) : hasOnlyFlexRates && !bookingMustBeGuaranteed ? (
<ConfirmBooking savedCreditCards={savedCreditCards} /> <ConfirmBooking savedCreditCards={savedCreditCards} />

View File

@@ -1,7 +1,7 @@
import { differenceInCalendarDays, format, isWeekend } from "date-fns" import { differenceInCalendarDays, format, isWeekend } from "date-fns"
import { CurrencyEnum } from "@scandic-hotels/common/constants/currency" import { CurrencyEnum } from "@scandic-hotels/common/constants/currency"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum" import { ChildBedMapEnum } from "@scandic-hotels/trpc/enums/childBedMapEnum"
import { PackageTypeEnum } from "@scandic-hotels/trpc/enums/packages" import { PackageTypeEnum } from "@scandic-hotels/trpc/enums/packages"
import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter" import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter"
@@ -192,9 +192,9 @@ export function getTracking(
}) })
), ),
].join(","), ].join(","),
rewardNight: booking.searchType === REDEMPTION ? "yes" : "no", rewardNight: booking.searchType === SEARCH_TYPE_REDEMPTION ? "yes" : "no",
rewardNightAvailability: rewardNightAvailability:
booking.searchType === REDEMPTION ? "true" : "false", booking.searchType === SEARCH_TYPE_REDEMPTION ? "true" : "false",
roomPrice: calcTotalRoomPrice(storedRooms, isMember), roomPrice: calcTotalRoomPrice(storedRooms, isMember),
roomTypeCode: rooms.map((room) => room.roomTypeCode).join("|"), roomTypeCode: rooms.map((room) => room.roomTypeCode).join("|"),
roomTypeName: rooms.map((room) => room.roomType).join("|"), roomTypeName: rooms.map((room) => room.roomType).join("|"),

View File

@@ -3,7 +3,7 @@
import { useSearchParams } from "next/navigation" import { useSearchParams } from "next/navigation"
import React from "react" import React from "react"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import TrackingSDK from "@/components/TrackingSDK" import TrackingSDK from "@/components/TrackingSDK"
import useLang from "@/hooks/useLang" import useLang from "@/hooks/useLang"
@@ -57,7 +57,7 @@ export default function Tracking({
city, city,
paramCity, paramCity,
bookingCode, bookingCode,
searchType === REDEMPTION, searchType === SEARCH_TYPE_REDEMPTION,
rooms rooms
) )

View File

@@ -7,7 +7,7 @@ import BedSingleIcon from "@scandic-hotels/design-system/Icons/BedSingleIcon"
import BedSofaExtraIcon from "@scandic-hotels/design-system/Icons/BedSofaExtraIcon" import BedSofaExtraIcon from "@scandic-hotels/design-system/Icons/BedSofaExtraIcon"
import BedTwinIcon from "@scandic-hotels/design-system/Icons/BedTwinIcon" import BedTwinIcon from "@scandic-hotels/design-system/Icons/BedTwinIcon"
import BedWallExtraIcon from "@scandic-hotels/design-system/Icons/BedWallExtraIcon" import BedWallExtraIcon from "@scandic-hotels/design-system/Icons/BedWallExtraIcon"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import type { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod" import type { PaymentMethodEnum } from "@scandic-hotels/common/constants/paymentMethod"
import type { IconProps } from "@scandic-hotels/design-system/Icons" import type { IconProps } from "@scandic-hotels/design-system/Icons"
@@ -19,7 +19,7 @@ import type { JSX } from "react"
export const FamilyAndFriendsCodes = ["D000029555", "D000029271", "D000029195"] export const FamilyAndFriendsCodes = ["D000029555", "D000029271", "D000029195"]
export const bookingSearchTypes = [REDEMPTION] as const export const bookingSearchTypes = [SEARCH_TYPE_REDEMPTION] as const
export const SEARCHTYPE = "searchtype" export const SEARCHTYPE = "searchtype"
export const MEMBERSHIP_FAILED_ERROR = "MembershipFailedError" export const MEMBERSHIP_FAILED_ERROR = "MembershipFailedError"

View File

@@ -1,8 +1,6 @@
import { createEnv } from "@t3-oss/env-nextjs" import { createEnv } from "@t3-oss/env-nextjs"
import { z } from "zod" import { z } from "zod"
const TWENTYFOUR_HOURS = 24 * 60 * 60
export const env = createEnv({ export const env = createEnv({
/** /**
* Due to t3-env only checking typeof window === "undefined" * Due to t3-env only checking typeof window === "undefined"
@@ -21,14 +19,10 @@ export const env = createEnv({
// transform to boolean // transform to boolean
.transform((s) => s === "true") .transform((s) => s === "true")
.default("false"), .default("false"),
API_BASEURL: z.string(),
BUILD_ID: z.string().default("64rYXBu8o2eHp0Jf"), BUILD_ID: z.string().default("64rYXBu8o2eHp0Jf"),
CMS_ACCESS_TOKEN: z.string(), CMS_ACCESS_TOKEN: z.string(),
CMS_API_KEY: z.string(), CMS_API_KEY: z.string(),
CMS_ENVIRONMENT: z.enum(["development", "production", "stage", "test"]), CMS_ENVIRONMENT: z.enum(["development", "production", "stage", "test"]),
CMS_PREVIEW_TOKEN: z.string(),
CMS_PREVIEW_URL: z.string(),
CMS_URL: z.string(),
CMS_BRANCH: z.enum(["development", "production"]), CMS_BRANCH: z.enum(["development", "production"]),
CURITY_CLIENT_ID_USER: z.string().default("scandichotels-web"), CURITY_CLIENT_ID_USER: z.string().default("scandichotels-web"),
CURITY_CLIENT_ID_SERVICE: z.string().default("scandichotels-web-backend"), CURITY_CLIENT_ID_SERVICE: z.string().default("scandichotels-web-backend"),
@@ -49,15 +43,9 @@ export const env = createEnv({
NEXTAUTH_URL: z.string().default(""), NEXTAUTH_URL: z.string().default(""),
AUTH_URL: z.string().default(""), AUTH_URL: z.string().default(""),
NODE_ENV: z.enum(["development", "test", "production"]), NODE_ENV: z.enum(["development", "test", "production"]),
PRINT_QUERY: z
.string()
.refine((s) => s === "true" || s === "false")
.transform((s) => s === "true")
.default("false"),
PUBLIC_URL: z.string().default(""), PUBLIC_URL: z.string().default(""),
REVALIDATE_SECRET: z.string(), REVALIDATE_SECRET: z.string(),
SITEMAP_SYNC_SECRET: z.string(), SITEMAP_SYNC_SECRET: z.string(),
SALESFORCE_PREFERENCE_BASE_URL: z.string(),
SEAMLESS_LOGIN_DA: z SEAMLESS_LOGIN_DA: z
.string() .string()
.transform((s) => replaceTopLevelDomain(s, "dk")), .transform((s) => replaceTopLevelDomain(s, "dk")),
@@ -102,7 +90,6 @@ export const env = createEnv({
.transform((s) => s === "true") .transform((s) => s === "true")
.default("false"), .default("false"),
WEBVIEW_ENCRYPTION_KEY: z.string(), WEBVIEW_ENCRYPTION_KEY: z.string(),
BOOKING_ENCRYPTION_KEY: z.string(),
GOOGLE_STATIC_MAP_KEY: z.string(), GOOGLE_STATIC_MAP_KEY: z.string(),
GOOGLE_STATIC_MAP_SIGNATURE_SECRET: z.string(), GOOGLE_STATIC_MAP_SIGNATURE_SECRET: z.string(),
GOOGLE_DYNAMIC_MAP_ID: z.string(), GOOGLE_DYNAMIC_MAP_ID: z.string(),
@@ -139,9 +126,7 @@ export const env = createEnv({
SENTRY_SERVER_SAMPLERATE: z.coerce.number().default(0.001), SENTRY_SERVER_SAMPLERATE: z.coerce.number().default(0.001),
// TODO: remove defaults for SAS value when we know that netlify has 'room' for it // TODO: remove defaults for SAS value when we know that netlify has 'room' for it
SAS_API_ENDPOINT: z.string().default(""),
SAS_AUTH_ENDPOINT: z.string().default(""), SAS_AUTH_ENDPOINT: z.string().default(""),
SAS_OCP_APIM: z.string().default(""),
SAS_AUTH_CLIENTID: z.string().default(""), SAS_AUTH_CLIENTID: z.string().default(""),
SAS_POINT_TRANSFER_ENABLED: z SAS_POINT_TRANSFER_ENABLED: z
.string() .string()
@@ -150,16 +135,6 @@ export const env = createEnv({
// transform to boolean // transform to boolean
.transform((s) => s === "true") .transform((s) => s === "true")
.default("false"), .default("false"),
CACHE_TIME_HOTELS: z.coerce
.number()
.default(TWENTYFOUR_HOURS)
.transform((val) =>
process.env.CMS_ENVIRONMENT === "test" ? 5 * 60 : val
),
CACHE_TIME_CITY_SEARCH: z.coerce
.number()
.default(10 * 60)
.transform((val) => (process.env.CMS_ENVIRONMENT === "test" ? 60 : val)),
REDIS_API_HOST: z.string().optional(), REDIS_API_HOST: z.string().optional(),
REDIS_API_KEY: z.string().optional(), REDIS_API_KEY: z.string().optional(),
BRANCH: BRANCH:
@@ -195,14 +170,10 @@ export const env = createEnv({
ADOBE_SCRIPT_SRC: process.env.ADOBE_SCRIPT_SRC, ADOBE_SCRIPT_SRC: process.env.ADOBE_SCRIPT_SRC,
ADOBE_SDK_SCRIPT_SRC: process.env.ADOBE_SDK_SCRIPT_SRC, ADOBE_SDK_SCRIPT_SRC: process.env.ADOBE_SDK_SCRIPT_SRC,
ENABLE_GTMSCRIPT: process.env.ENABLE_GTMSCRIPT, ENABLE_GTMSCRIPT: process.env.ENABLE_GTMSCRIPT,
API_BASEURL: process.env.API_BASEURL,
BUILD_ID: process.env.BUILD_ID, BUILD_ID: process.env.BUILD_ID,
CMS_ACCESS_TOKEN: process.env.CMS_ACCESS_TOKEN, CMS_ACCESS_TOKEN: process.env.CMS_ACCESS_TOKEN,
CMS_API_KEY: process.env.CMS_API_KEY, CMS_API_KEY: process.env.CMS_API_KEY,
CMS_ENVIRONMENT: process.env.CMS_ENVIRONMENT, CMS_ENVIRONMENT: process.env.CMS_ENVIRONMENT,
CMS_PREVIEW_TOKEN: process.env.CMS_PREVIEW_TOKEN,
CMS_PREVIEW_URL: process.env.CMS_PREVIEW_URL,
CMS_URL: process.env.CMS_URL,
CMS_BRANCH: process.env.CMS_BRANCH, CMS_BRANCH: process.env.CMS_BRANCH,
CURITY_CLIENT_ID_USER: process.env.CURITY_CLIENT_ID_USER, CURITY_CLIENT_ID_USER: process.env.CURITY_CLIENT_ID_USER,
CURITY_CLIENT_ID_SERVICE: process.env.CURITY_CLIENT_ID_SERVICE, CURITY_CLIENT_ID_SERVICE: process.env.CURITY_CLIENT_ID_SERVICE,
@@ -218,11 +189,9 @@ export const env = createEnv({
NEXTAUTH_URL: process.env.NEXTAUTH_URL, NEXTAUTH_URL: process.env.NEXTAUTH_URL,
AUTH_URL: process.env.AUTH_URL, AUTH_URL: process.env.AUTH_URL,
NODE_ENV: process.env.NODE_ENV, NODE_ENV: process.env.NODE_ENV,
PRINT_QUERY: process.env.PRINT_QUERY,
PUBLIC_URL: process.env.NEXT_PUBLIC_PUBLIC_URL, PUBLIC_URL: process.env.NEXT_PUBLIC_PUBLIC_URL,
REVALIDATE_SECRET: process.env.REVALIDATE_SECRET, REVALIDATE_SECRET: process.env.REVALIDATE_SECRET,
SITEMAP_SYNC_SECRET: process.env.SITEMAP_SYNC_SECRET, SITEMAP_SYNC_SECRET: process.env.SITEMAP_SYNC_SECRET,
SALESFORCE_PREFERENCE_BASE_URL: process.env.SALESFORCE_PREFERENCE_BASE_URL,
SEAMLESS_LOGIN_DA: SEAMLESS_LOGIN_DA:
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_DA, process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_DA,
SEAMLESS_LOGIN_DE: SEAMLESS_LOGIN_DE:
@@ -249,7 +218,6 @@ export const env = createEnv({
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_SV, process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_SV,
SHOW_SIGNUP_FLOW: process.env.SHOW_SIGNUP_FLOW, SHOW_SIGNUP_FLOW: process.env.SHOW_SIGNUP_FLOW,
WEBVIEW_ENCRYPTION_KEY: process.env.WEBVIEW_ENCRYPTION_KEY, WEBVIEW_ENCRYPTION_KEY: process.env.WEBVIEW_ENCRYPTION_KEY,
BOOKING_ENCRYPTION_KEY: process.env.BOOKING_ENCRYPTION_KEY,
GOOGLE_STATIC_MAP_KEY: process.env.GOOGLE_STATIC_MAP_KEY, GOOGLE_STATIC_MAP_KEY: process.env.GOOGLE_STATIC_MAP_KEY,
GOOGLE_STATIC_MAP_SIGNATURE_SECRET: GOOGLE_STATIC_MAP_SIGNATURE_SECRET:
process.env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET, process.env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET,
@@ -262,15 +230,10 @@ export const env = createEnv({
SENTRY_ENVIRONMENT: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT, SENTRY_ENVIRONMENT: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT,
SENTRY_SERVER_SAMPLERATE: process.env.SENTRY_SERVER_SAMPLERATE, SENTRY_SERVER_SAMPLERATE: process.env.SENTRY_SERVER_SAMPLERATE,
SAS_API_ENDPOINT: process.env.SAS_API_ENDPOINT,
SAS_AUTH_ENDPOINT: process.env.SAS_AUTH_ENDPOINT, SAS_AUTH_ENDPOINT: process.env.SAS_AUTH_ENDPOINT,
SAS_OCP_APIM: process.env.SAS_OCP_APIM,
SAS_AUTH_CLIENTID: process.env.SAS_AUTH_CLIENTID, SAS_AUTH_CLIENTID: process.env.SAS_AUTH_CLIENTID,
SAS_POINT_TRANSFER_ENABLED: process.env.SAS_POINT_TRANSFER_ENABLED, SAS_POINT_TRANSFER_ENABLED: process.env.SAS_POINT_TRANSFER_ENABLED,
CACHE_TIME_HOTELS: process.env.CACHE_TIME_HOTELS,
CACHE_TIME_CITY_SEARCH: process.env.CACHE_TIME_CITY_SEARCH,
REDIS_API_HOST: process.env.REDIS_API_HOST, REDIS_API_HOST: process.env.REDIS_API_HOST,
REDIS_API_KEY: process.env.REDIS_API_KEY, REDIS_API_KEY: process.env.REDIS_API_KEY,
BRANCH: process.env.BRANCH, BRANCH: process.env.BRANCH,

View File

@@ -1,7 +1,7 @@
import { type NextMiddleware, NextResponse } from "next/server" import { type NextMiddleware, NextResponse } from "next/server"
import { findLang } from "@scandic-hotels/common/utils/languages" import { findLang } from "@scandic-hotels/common/utils/languages"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { isValidSession } from "@scandic-hotels/trpc/utils/session" import { isValidSession } from "@scandic-hotels/trpc/utils/session"
import { SEARCHTYPE } from "@/constants/booking" import { SEARCHTYPE } from "@/constants/booking"
@@ -17,7 +17,7 @@ import type { MiddlewareMatcher } from "@/types/middleware"
export const middleware: NextMiddleware = async (request) => { export const middleware: NextMiddleware = async (request) => {
// Redirect user to login if reward nights search and not logged in // Redirect user to login if reward nights search and not logged in
const isRedemption = const isRedemption =
request.nextUrl.searchParams.get(SEARCHTYPE) === REDEMPTION request.nextUrl.searchParams.get(SEARCHTYPE) === SEARCH_TYPE_REDEMPTION
const session = await auth() // Check for user session const session = await auth() // Check for user session
if (isRedemption && !isValidSession(session)) { if (isRedemption && !isValidSession(session)) {
const lang = findLang(request.nextUrl.pathname)! const lang = findLang(request.nextUrl.pathname)!

View File

@@ -76,11 +76,7 @@
"embla-carousel": "^8.6.0", "embla-carousel": "^8.6.0",
"embla-carousel-react": "^8.6.0", "embla-carousel-react": "^8.6.0",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fetch-retry": "^6.0.0",
"flat": "^6.0.1", "flat": "^6.0.1",
"fuse.js": "^7.1.0",
"graphql": "^16.11.0",
"graphql-request": "^7.1.2",
"graphql-tag": "^2.12.6", "graphql-tag": "^2.12.6",
"html-react-parser": "^5.2.3", "html-react-parser": "^5.2.3",
"ics": "^3.8.1", "ics": "^3.8.1",
@@ -106,11 +102,9 @@
"react-intl": "^7.1.11", "react-intl": "^7.1.11",
"react-to-print": "^3.1.0", "react-to-print": "^3.1.0",
"server-only": "^0.0.1", "server-only": "^0.0.1",
"slugify": "^1.6.6",
"sonner": "^2.0.3", "sonner": "^2.0.3",
"supercluster": "^8.0.1", "supercluster": "^8.0.1",
"usehooks-ts": "3.1.1", "usehooks-ts": "3.1.1",
"uuid": "^11.1.0",
"zod": "^3.24.4", "zod": "^3.24.4",
"zustand": "^4.5.2" "zustand": "^4.5.2"
}, },

View File

@@ -2,7 +2,7 @@ import { produce } from "immer"
import { useContext } from "react" import { useContext } from "react"
import { create, useStore } from "zustand" import { create, useStore } from "zustand"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter" import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter"
import { AvailabilityEnum } from "@scandic-hotels/trpc/enums/selectHotel" import { AvailabilityEnum } from "@scandic-hotels/trpc/enums/selectHotel"
@@ -120,7 +120,7 @@ export function createRatesStore({
activeRoom = unselectedRoomIndex activeRoom = unselectedRoomIndex
} }
const isRedemptionBooking = booking.searchType === REDEMPTION const isRedemptionBooking = booking.searchType === SEARCH_TYPE_REDEMPTION
const defaultCurrency = findDefaultCurrency(roomsAvailability) const defaultCurrency = findDefaultCurrency(roomsAvailability)

View File

@@ -1,7 +1,7 @@
import { notFound } from "next/navigation" import { notFound } from "next/navigation"
import { safeTry } from "@scandic-hotels/common/utils/safeTry" import { safeTry } from "@scandic-hotels/common/utils/safeTry"
import { REDEMPTION } from "@scandic-hotels/trpc/constants/booking" import { SEARCH_TYPE_REDEMPTION } from "@scandic-hotels/trpc/constants/booking"
import { generateChildrenString } from "@scandic-hotels/trpc/routers/hotels/helpers" import { generateChildrenString } from "@scandic-hotels/trpc/routers/hotels/helpers"
import { import {
type HotelLocation, type HotelLocation,
@@ -101,6 +101,6 @@ export async function getHotelSearchDetails(
cityIdentifier, cityIdentifier,
hotel, hotel,
noOfRooms: rooms?.length ?? 0, noOfRooms: rooms?.length ?? 0,
redemption: params.searchType === REDEMPTION, redemption: params.searchType === SEARCH_TYPE_REDEMPTION,
} }
} }

View File

@@ -1,4 +1,3 @@
// TODO might just want to duplicate this file in each package that needs it
import type { JWT } from "next-auth/jwt" import type { JWT } from "next-auth/jwt"
import type { RefreshTokenError } from "./lib/types/authError" import type { RefreshTokenError } from "./lib/types/authError"

View File

@@ -1,17 +1,9 @@
import { createEnv } from "@t3-oss/env-nextjs" import { createEnv } from "@t3-oss/env-nextjs"
import { z } from "zod" import { z } from "zod"
import { isLangLive } from "../lib/DUPLICATED/isLangLive"
import type { Lang } from "@scandic-hotels/common/constants/language"
/*
* ⚠️ Remember to also add environment variables to the corresponding config in sites that uses this package. ⚠️
*/
const TWENTYFOUR_HOURS = 24 * 60 * 60 const TWENTYFOUR_HOURS = 24 * 60 * 60
const _env = createEnv({ export const env = createEnv({
/** /**
* Due to t3-env only checking typeof window === "undefined" * Due to t3-env only checking typeof window === "undefined"
* and Netlify running Deno, window is never "undefined" * and Netlify running Deno, window is never "undefined"
@@ -48,17 +40,6 @@ const _env = createEnv({
.refine((s) => s === "true" || s === "false") .refine((s) => s === "true" || s === "false")
.transform((s) => s === "true") .transform((s) => s === "true")
.default("false"), .default("false"),
/**
* Include the languages that should be hidden for the next release
* Should be in the format of "en,da,de,fi,no,sv" or empty
*/
NEW_SITE_LIVE_FOR_LANGS: z
.string()
.regex(/^([a-z]{2},)*([a-z]{2}){0,1}$/)
.transform((val) => {
return val.split(",")
})
.default(""),
SALESFORCE_PREFERENCE_BASE_URL: z.string(), SALESFORCE_PREFERENCE_BASE_URL: z.string(),
}, },
emptyStringAsUndefined: true, emptyStringAsUndefined: true,
@@ -80,12 +61,6 @@ const _env = createEnv({
SENTRY_ENVIRONMENT: process.env.SENTRY_ENVIRONMENT, SENTRY_ENVIRONMENT: process.env.SENTRY_ENVIRONMENT,
PUBLIC_URL: process.env.NEXT_PUBLIC_PUBLIC_URL, PUBLIC_URL: process.env.NEXT_PUBLIC_PUBLIC_URL,
PRINT_QUERY: process.env.PRINT_QUERY, PRINT_QUERY: process.env.PRINT_QUERY,
NEW_SITE_LIVE_FOR_LANGS: process.env.NEXT_PUBLIC_NEW_SITE_LIVE_FOR_LANGS,
SALESFORCE_PREFERENCE_BASE_URL: process.env.SALESFORCE_PREFERENCE_BASE_URL, SALESFORCE_PREFERENCE_BASE_URL: process.env.SALESFORCE_PREFERENCE_BASE_URL,
}, },
}) })
export const env = {
..._env,
isLangLive: (lang: Lang) => isLangLive(lang, _env.NEW_SITE_LIVE_FOR_LANGS),
} as const

View File

@@ -1,4 +1,3 @@
// TODO might just want to duplicate this file in each package that needs it
import type { DefaultJWT } from "next-auth/jwt" import type { DefaultJWT } from "next-auth/jwt"
import type { RefreshTokenError } from "./lib/types/authError" import type { RefreshTokenError } from "./lib/types/authError"

View File

@@ -1,18 +0,0 @@
import { describe, expect, it } from "vitest"
import { Lang } from "@scandic-hotels/common/constants/language"
import { isLangLive } from "./isLangLive"
describe("hideForNextRelease", () => {
it("should return true if en is part of live languages", () => {
expect(isLangLive(Lang.en, ["en", "sv"])).toBe(true)
expect(isLangLive(Lang.en, ["en"])).toBe(true)
})
it("should return false if en is not part of live languages", () => {
expect(isLangLive(Lang.en, [])).toBe(false)
expect(isLangLive(Lang.en, ["sv"])).toBe(false)
expect(isLangLive(Lang.en, ["sv,fi"])).toBe(false)
})
})

View File

@@ -1,5 +0,0 @@
import type { Lang } from "@scandic-hotels/common/constants/language"
export function isLangLive(lang: Lang, liveLangs: string[]): boolean {
return liveLangs.includes(lang)
}

View File

@@ -1,2 +1 @@
// TODO better name? export const SEARCH_TYPE_REDEMPTION = "redemption"
export const REDEMPTION = "redemption"

View File

@@ -2,9 +2,8 @@ import { describe, expect, it } from "vitest"
import { getSearchTokens } from "./getSearchTokens" import { getSearchTokens } from "./getSearchTokens"
import type { Location } from "@scandic-hotels/trpc/types/locations"
import type { DeepPartial } from "../../../types/deepPartial" import type { DeepPartial } from "../../../types/deepPartial"
import type { Location } from "../../../types/locations"
describe("getSearchTokens", () => { describe("getSearchTokens", () => {
it("should return lowercased tokens for a hotel location", () => { it("should return lowercased tokens for a hotel location", () => {

View File

@@ -1,13 +1,13 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentstackExtendedProcedureUID } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetAccountPage, GetAccountPage,
GetAccountPageRefs, GetAccountPageRefs,
} from "../../../graphql/Query/AccountPage/AccountPage.graphql" } from "../../../graphql/Query/AccountPage/AccountPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackExtendedProcedureUID } from "../../../procedures"
import { import {
generateRefsResponseTag, generateRefsResponseTag,
generateTag, generateTag,

View File

@@ -1,10 +1,9 @@
import { cache } from "react" import { cache } from "react"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentstackBaseProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { GetContactConfig } from "../../../graphql/Query/ContactConfig.graphql" import { GetContactConfig } from "../../../graphql/Query/ContactConfig.graphql"
import { import {
GetCurrentFooter, GetCurrentFooter,
@@ -22,6 +21,7 @@ import {
} from "../../../graphql/Query/SiteConfig.graphql" } from "../../../graphql/Query/SiteConfig.graphql"
// import { router } from "../../.." // import { router } from "../../.."
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackBaseProcedure } from "../../../procedures"
import { langInput } from "../../../utils" import { langInput } from "../../../utils"
import { import {
generateRefsResponseTag, generateRefsResponseTag,

View File

@@ -1,11 +1,10 @@
import { cache } from "react" import { cache } from "react"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentstackExtendedProcedureUID } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { PageContentTypeEnum } from "../../../enums/contentType" import { PageContentTypeEnum } from "../../../enums/contentType"
import { notFound } from "../../../errors"
import { import {
GetMyPagesBreadcrumbs, GetMyPagesBreadcrumbs,
GetMyPagesBreadcrumbsRefs, GetMyPagesBreadcrumbsRefs,
@@ -47,6 +46,7 @@ import {
GetLoyaltyPageBreadcrumbsRefs, GetLoyaltyPageBreadcrumbsRefs,
} from "../../../graphql/Query/Breadcrumbs/LoyaltyPage.graphql" } from "../../../graphql/Query/Breadcrumbs/LoyaltyPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackExtendedProcedureUID } from "../../../procedures"
import { generateRefsResponseTag } from "../../../utils/generateTag" import { generateRefsResponseTag } from "../../../utils/generateTag"
import { breadcrumbsRefsSchema, breadcrumbsSchema } from "./output" import { breadcrumbsRefsSchema, breadcrumbsSchema } from "./output"
import { getTags } from "./utils" import { getTags } from "./utils"

View File

@@ -1,14 +1,14 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { router } from "@scandic-hotels/trpc"
import { notFound } from "@scandic-hotels/trpc/errors"
import { request } from "@scandic-hotels/trpc/graphql/request"
import { contentStackUidWithServiceProcedure } from "@scandic-hotels/trpc/procedures"
import { generateRefsResponseTag } from "@scandic-hotels/trpc/utils/generateTag"
import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetCampaignOverviewPage, GetCampaignOverviewPage,
GetCampaignOverviewPageRefs, GetCampaignOverviewPageRefs,
} from "../../../graphql/Query/CampaignOverviewPage/CampaignOverviewPage.graphql" } from "../../../graphql/Query/CampaignOverviewPage/CampaignOverviewPage.graphql"
import { request } from "../../../graphql/request"
import { contentStackUidWithServiceProcedure } from "../../../procedures"
import { generateRefsResponseTag } from "../../../utils/generateTag"
import { import {
campaignOverviewPageRefsSchema, campaignOverviewPageRefsSchema,
campaignOverviewPageSchema, campaignOverviewPageSchema,

View File

@@ -1,13 +1,10 @@
import { import { generateTag, generateTagsFromSystem } from "../../../utils/generateTag"
generateTag,
generateTagsFromSystem,
} from "@scandic-hotels/trpc/utils/generateTag"
import { CampaignOverviewPageEnum } from "../../../types/campaignOverviewPageEnum" import { CampaignOverviewPageEnum } from "../../../types/campaignOverviewPageEnum"
import type { Lang } from "@scandic-hotels/common/constants/language" import type { Lang } from "@scandic-hotels/common/constants/language"
import type { System } from "@scandic-hotels/trpc/routers/contentstack/schemas/system"
import type { System } from "../../../routers/contentstack/schemas/system"
import type { CampaignOverviewPageRefs } from "../../../types/campaignOverviewPage" import type { CampaignOverviewPageRefs } from "../../../types/campaignOverviewPage"
export function generatePageTags( export function generatePageTags(

View File

@@ -1,13 +1,13 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentStackUidWithServiceProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetCampaignPage, GetCampaignPage,
GetCampaignPageRefs, GetCampaignPageRefs,
} from "../../../graphql/Query/CampaignPage/CampaignPage.graphql" } from "../../../graphql/Query/CampaignPage/CampaignPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentStackUidWithServiceProcedure } from "../../../procedures"
import { generateRefsResponseTag } from "../../../utils/generateTag" import { generateRefsResponseTag } from "../../../utils/generateTag"
import { campaignPageRefsSchema, campaignPageSchema } from "./output" import { campaignPageRefsSchema, campaignPageSchema } from "./output"
import { generatePageTags } from "./utils" import { generatePageTags } from "./utils"

View File

@@ -1,9 +1,9 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { contentstackExtendedProcedureUID } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { GetCollectionPage } from "../../../graphql/Query/CollectionPage/CollectionPage.graphql" import { GetCollectionPage } from "../../../graphql/Query/CollectionPage/CollectionPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackExtendedProcedureUID } from "../../../procedures"
import { collectionPageSchema } from "./output" import { collectionPageSchema } from "./output"
import { import {
fetchCollectionPageRefs, fetchCollectionPageRefs,

View File

@@ -1,6 +1,6 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { notFound } from "../../../errors"
import { GetCollectionPageRefs } from "../../../graphql/Query/CollectionPage/CollectionPage.graphql" import { GetCollectionPageRefs } from "../../../graphql/Query/CollectionPage/CollectionPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { import {

View File

@@ -1,5 +1,4 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { contentstackExtendedProcedureUID } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { batchRequest } from "../../../graphql/batchRequest" import { batchRequest } from "../../../graphql/batchRequest"
@@ -8,6 +7,7 @@ import {
GetContentPageBlocksBatch1, GetContentPageBlocksBatch1,
GetContentPageBlocksBatch2, GetContentPageBlocksBatch2,
} from "../../../graphql/Query/ContentPage/ContentPage.graphql" } from "../../../graphql/Query/ContentPage/ContentPage.graphql"
import { contentstackExtendedProcedureUID } from "../../../procedures"
import { contentPageSchema } from "./output" import { contentPageSchema } from "./output"
import { fetchContentPageRefs, generatePageTags } from "./utils" import { fetchContentPageRefs, generatePageTags } from "./utils"

View File

@@ -1,6 +1,6 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { notFound } from "../../../errors"
import { batchRequest } from "../../../graphql/batchRequest" import { batchRequest } from "../../../graphql/batchRequest"
import { import {
GetContentPageBlocksRefs, GetContentPageBlocksRefs,

View File

@@ -1,13 +1,13 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentStackUidWithServiceProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetDestinationCityPage, GetDestinationCityPage,
GetDestinationCityPageRefs, GetDestinationCityPageRefs,
} from "../../../graphql/Query/DestinationCityPage/DestinationCityPage.graphql" } from "../../../graphql/Query/DestinationCityPage/DestinationCityPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentStackUidWithServiceProcedure } from "../../../procedures"
import { generateRefsResponseTag } from "../../../utils/generateTag" import { generateRefsResponseTag } from "../../../utils/generateTag"
import { getCityByCityIdentifier } from "../../hotels/utils" import { getCityByCityIdentifier } from "../../hotels/utils"
import { import {

View File

@@ -1,16 +1,16 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import {
contentStackBaseWithServiceProcedure,
contentstackExtendedProcedureUID,
} from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetDestinationCountryPage, GetDestinationCountryPage,
GetDestinationCountryPageRefs, GetDestinationCountryPageRefs,
} from "../../../graphql/Query/DestinationCountryPage/DestinationCountryPage.graphql" } from "../../../graphql/Query/DestinationCountryPage/DestinationCountryPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import {
contentStackBaseWithServiceProcedure,
contentstackExtendedProcedureUID,
} from "../../../procedures"
import { ApiCountry } from "../../../types/country" import { ApiCountry } from "../../../types/country"
import { generateRefsResponseTag } from "../../../utils/generateTag" import { generateRefsResponseTag } from "../../../utils/generateTag"
import { getCityPagesInput } from "./input" import { getCityPagesInput } from "./input"

View File

@@ -1,18 +1,18 @@
import { Lang } from "@scandic-hotels/common/constants/language" import { Lang } from "@scandic-hotels/common/constants/language"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { safeTry } from "@scandic-hotels/common/utils/safeTry" import { safeTry } from "@scandic-hotels/common/utils/safeTry"
import { notFound } from "@scandic-hotels/trpc/errors"
import {
contentstackExtendedProcedureUID,
serviceProcedure,
} from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetDestinationOverviewPage, GetDestinationOverviewPage,
GetDestinationOverviewPageRefs, GetDestinationOverviewPageRefs,
} from "../../../graphql/Query/DestinationOverviewPage/DestinationOverviewPage.graphql" } from "../../../graphql/Query/DestinationOverviewPage/DestinationOverviewPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import {
contentstackExtendedProcedureUID,
serviceProcedure,
} from "../../../procedures"
import { ApiCountry, type Country } from "../../../types/country" import { ApiCountry, type Country } from "../../../types/country"
import { import {
generateRefsResponseTag, generateRefsResponseTag,

View File

@@ -1,10 +1,10 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentstackExtendedProcedureUID } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { GetHotelPage } from "../../../graphql/Query/HotelPage/HotelPage.graphql" import { GetHotelPage } from "../../../graphql/Query/HotelPage/HotelPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackExtendedProcedureUID } from "../../../procedures"
import { generateTag } from "../../../utils/generateTag" import { generateTag } from "../../../utils/generateTag"
import { hotelPageSchema } from "./output" import { hotelPageSchema } from "./output"

View File

@@ -1,6 +1,5 @@
import { publicProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { publicProcedure } from "../../../procedures"
import { getUidAndContentTypeByPath } from "../../../services/cms/getUidAndContentTypeByPath" import { getUidAndContentTypeByPath } from "../../../services/cms/getUidAndContentTypeByPath"
import { getNonContentstackUrls } from "../metadata/output" import { getNonContentstackUrls } from "../metadata/output"
import { getLanguageSwitcherInput } from "./input" import { getLanguageSwitcherInput } from "./input"

View File

@@ -1,9 +1,9 @@
import { Lang } from "@scandic-hotels/common/constants/language" import { Lang } from "@scandic-hotels/common/constants/language"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { removeTrailingSlash } from "@scandic-hotels/common/utils/url" import { removeTrailingSlash } from "@scandic-hotels/common/utils/url"
import { internalServerError } from "@scandic-hotels/trpc/errors"
import { PageContentTypeEnum } from "../../../enums/contentType" import { PageContentTypeEnum } from "../../../enums/contentType"
import { internalServerError } from "../../../errors"
import { batchRequest } from "../../../graphql/batchRequest" import { batchRequest } from "../../../graphql/batchRequest"
import { import {
GetDaDeEnUrlsAccountPage, GetDaDeEnUrlsAccountPage,

View File

@@ -1,13 +1,13 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentstackExtendedProcedureUID } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { import {
GetLoyaltyPage, GetLoyaltyPage,
GetLoyaltyPageRefs, GetLoyaltyPageRefs,
} from "../../../graphql/Query/LoyaltyPage/LoyaltyPage.graphql" } from "../../../graphql/Query/LoyaltyPage/LoyaltyPage.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackExtendedProcedureUID } from "../../../procedures"
import { import {
generateRefsResponseTag, generateRefsResponseTag,
generateTag, generateTag,

View File

@@ -1,11 +1,10 @@
import { cache } from "react" import { cache } from "react"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentStackUidWithServiceProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { PageContentTypeEnum } from "../../../enums/contentType" import { PageContentTypeEnum } from "../../../enums/contentType"
import { notFound } from "../../../errors"
import { GetAccountPageMetadata } from "../../../graphql/Query/AccountPage/Metadata.graphql" import { GetAccountPageMetadata } from "../../../graphql/Query/AccountPage/Metadata.graphql"
import { GetCampaignOverviewPageMetadata } from "../../../graphql/Query/CampaignOverviewPage/Metadata.graphql" import { GetCampaignOverviewPageMetadata } from "../../../graphql/Query/CampaignOverviewPage/Metadata.graphql"
import { GetCampaignPageMetadata } from "../../../graphql/Query/CampaignPage/Metadata.graphql" import { GetCampaignPageMetadata } from "../../../graphql/Query/CampaignPage/Metadata.graphql"
@@ -18,6 +17,7 @@ import { GetHotelPageMetadata } from "../../../graphql/Query/HotelPage/Metadata.
import { GetLoyaltyPageMetadata } from "../../../graphql/Query/LoyaltyPage/Metadata.graphql" import { GetLoyaltyPageMetadata } from "../../../graphql/Query/LoyaltyPage/Metadata.graphql"
import { GetStartPageMetadata } from "../../../graphql/Query/StartPage/Metadata.graphql" import { GetStartPageMetadata } from "../../../graphql/Query/StartPage/Metadata.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentStackUidWithServiceProcedure } from "../../../procedures"
import { generateTag } from "../../../utils/generateTag" import { generateTag } from "../../../utils/generateTag"
import { getHotel } from "../../hotels/utils" import { getHotel } from "../../hotels/utils"
import { getUrlsOfAllLanguages } from "../languageSwitcher/utils" import { getUrlsOfAllLanguages } from "../languageSwitcher/utils"

View File

@@ -1,7 +1,5 @@
import * as Sentry from "@sentry/nextjs" import * as Sentry from "@sentry/nextjs"
import { contentstackBaseProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { PageContentTypeEnum } from "../../../enums/contentType" import { PageContentTypeEnum } from "../../../enums/contentType"
import { import {
@@ -19,6 +17,7 @@ import {
GetStartPageSettings, GetStartPageSettings,
} from "../../../graphql/Query/PageSettings.graphql" } from "../../../graphql/Query/PageSettings.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackBaseProcedure } from "../../../procedures"
import { langInput } from "../../../utils" import { langInput } from "../../../utils"
import { generateTag } from "../../../utils/generateTag" import { generateTag } from "../../../utils/generateTag"
import { import {

View File

@@ -1,12 +1,12 @@
import { cache } from "react" import { cache } from "react"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { notFound } from "@scandic-hotels/trpc/errors"
import { contentstackBaseProcedure } from "@scandic-hotels/trpc/procedures"
import { router } from "../../.." import { router } from "../../.."
import { notFound } from "../../../errors"
import { GetAllSasTierComparison } from "../../../graphql/Query/SASTierComparison.graphql" import { GetAllSasTierComparison } from "../../../graphql/Query/SASTierComparison.graphql"
import { request } from "../../../graphql/request" import { request } from "../../../graphql/request"
import { contentstackBaseProcedure } from "../../../procedures"
import { validateSasTierComparisonSchema } from "./output" import { validateSasTierComparisonSchema } from "./output"
import type { Lang } from "@scandic-hotels/common/constants/language" import type { Lang } from "@scandic-hotels/common/constants/language"

View File

@@ -6,7 +6,7 @@ import { createCounter } from "@scandic-hotels/common/telemetry"
import { env } from "../../../env/server" import { env } from "../../../env/server"
import { router } from "../.." import { router } from "../.."
import * as api from "../../api" import * as api from "../../api"
import { REDEMPTION } from "../../constants/booking" import { SEARCH_TYPE_REDEMPTION } from "../../constants/booking"
import { BreakfastPackageEnum } from "../../enums/breakfast" import { BreakfastPackageEnum } from "../../enums/breakfast"
import { RateEnum } from "../../enums/rate" import { RateEnum } from "../../enums/rate"
import { RateTypeEnum } from "../../enums/rateType" import { RateTypeEnum } from "../../enums/rateType"
@@ -149,7 +149,7 @@ export const hotelQueryRouter = router({
enterDetails: safeProtectedServiceProcedure enterDetails: safeProtectedServiceProcedure
.input(enterDetailsRoomsAvailabilityInputSchema) .input(enterDetailsRoomsAvailabilityInputSchema)
.use(async ({ ctx, input, next }) => { .use(async ({ ctx, input, next }) => {
if (input.booking.searchType === REDEMPTION) { if (input.booking.searchType === SEARCH_TYPE_REDEMPTION) {
if (ctx.session?.token.access_token) { if (ctx.session?.token.access_token) {
const verifiedUser = await getVerifiedUser({ session: ctx.session }) const verifiedUser = await getVerifiedUser({ session: ctx.session })
if (!verifiedUser?.error) { if (!verifiedUser?.error) {
@@ -299,7 +299,7 @@ export const hotelQueryRouter = router({
myStay: safeProtectedServiceProcedure myStay: safeProtectedServiceProcedure
.input(myStayRoomAvailabilityInputSchema) .input(myStayRoomAvailabilityInputSchema)
.use(async ({ ctx, input, next }) => { .use(async ({ ctx, input, next }) => {
if (input.booking.searchType === REDEMPTION) { if (input.booking.searchType === SEARCH_TYPE_REDEMPTION) {
if (ctx.session?.token.access_token) { if (ctx.session?.token.access_token) {
const verifiedUser = await getVerifiedUser({ session: ctx.session }) const verifiedUser = await getVerifiedUser({ session: ctx.session })
if (!verifiedUser?.error) { if (!verifiedUser?.error) {
@@ -360,7 +360,7 @@ export const hotelQueryRouter = router({
room: safeProtectedServiceProcedure room: safeProtectedServiceProcedure
.input(selectRateRoomAvailabilityInputSchema) .input(selectRateRoomAvailabilityInputSchema)
.use(async ({ ctx, input, next }) => { .use(async ({ ctx, input, next }) => {
if (input.booking.searchType === REDEMPTION) { if (input.booking.searchType === SEARCH_TYPE_REDEMPTION) {
if (ctx.session?.token.access_token) { if (ctx.session?.token.access_token) {
const verifiedUser = await getVerifiedUser({ const verifiedUser = await getVerifiedUser({
session: ctx.session, session: ctx.session,
@@ -414,7 +414,7 @@ export const hotelQueryRouter = router({
rooms: safeProtectedServiceProcedure rooms: safeProtectedServiceProcedure
.input(selectRateRoomsAvailabilityInputSchema) .input(selectRateRoomsAvailabilityInputSchema)
.use(async ({ ctx, input, next }) => { .use(async ({ ctx, input, next }) => {
if (input.booking.searchType === REDEMPTION) { if (input.booking.searchType === SEARCH_TYPE_REDEMPTION) {
if (ctx.session?.token.access_token) { if (ctx.session?.token.access_token) {
const verifiedUser = await getVerifiedUser({ const verifiedUser = await getVerifiedUser({
session: ctx.session, session: ctx.session,

View File

@@ -1,6 +1,6 @@
import { z } from "zod" import { z } from "zod"
import { imageSchema } from "@scandic-hotels/trpc/routers/hotels/schemas/image" import { imageSchema } from "../../../routers/hotels/schemas/image"
export const meetingRoomsSchema = z.object({ export const meetingRoomsSchema = z.object({
data: z.array( data: z.array(

View File

@@ -6,25 +6,25 @@ import { selectRate } from "@scandic-hotels/common/constants/routes/hotelReserva
import { getCacheClient } from "@scandic-hotels/common/dataCache" import { getCacheClient } from "@scandic-hotels/common/dataCache"
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { chunk } from "@scandic-hotels/common/utils/chunk" import { chunk } from "@scandic-hotels/common/utils/chunk"
import { RoomPackageCodeEnum } from "@scandic-hotels/trpc/enums/roomFilter"
import { AvailabilityEnum } from "@scandic-hotels/trpc/enums/selectHotel" import { env } from "../../../env/server"
import { type RoomFeaturesInput } from "@scandic-hotels/trpc/routers/hotels/input" import * as api from "../../api"
import { SEARCH_TYPE_REDEMPTION } from "../../constants/booking"
import { cache } from "../../DUPLICATED/cache"
import { BookingErrorCodeEnum } from "../../enums/bookingErrorCode"
import { HotelTypeEnum } from "../../enums/hotelType"
import { RoomPackageCodeEnum } from "../../enums/roomFilter"
import { AvailabilityEnum } from "../../enums/selectHotel"
import { badRequestError } from "../../errors"
import { type RoomFeaturesInput } from "../../routers/hotels/input"
import { import {
hotelsAvailabilitySchema, hotelsAvailabilitySchema,
packagesSchema, packagesSchema,
roomFeaturesSchema, roomFeaturesSchema,
roomsAvailabilitySchema, roomsAvailabilitySchema,
} from "@scandic-hotels/trpc/routers/hotels/output" } from "../../routers/hotels/output"
import { sortRoomConfigs } from "@scandic-hotels/trpc/utils/sortRoomConfigs"
import { env } from "../../../env/server"
import * as api from "../../api"
import { REDEMPTION } from "../../constants/booking"
import { cache } from "../../DUPLICATED/cache"
import { BookingErrorCodeEnum } from "../../enums/bookingErrorCode"
import { HotelTypeEnum } from "../../enums/hotelType"
import { badRequestError } from "../../errors"
import { toApiLang } from "../../utils" import { toApiLang } from "../../utils"
import { sortRoomConfigs } from "../../utils/sortRoomConfigs"
import { getHotelPageUrls } from "../contentstack/hotelPage/utils" import { getHotelPageUrls } from "../contentstack/hotelPage/utils"
import { generateChildrenString } from "./helpers" import { generateChildrenString } from "./helpers"
import { import {
@@ -36,14 +36,6 @@ import {
locationsSchema, locationsSchema,
} from "./output" } from "./output"
import type { Room as RoomCategory } from "@scandic-hotels/trpc/types/hotel"
import type {
Product,
Products,
RateDefinition,
RedemptionsProduct,
RoomConfiguration,
} from "@scandic-hotels/trpc/types/roomAvailability"
import type { z } from "zod" import type { z } from "zod"
import type { Endpoint } from "../../api/endpoints" import type { Endpoint } from "../../api/endpoints"
@@ -55,12 +47,20 @@ import type {
RoomsAvailabilityOutputSchema, RoomsAvailabilityOutputSchema,
} from "../../types/availability" } from "../../types/availability"
import type { BedTypeSelection } from "../../types/bedTypeSelection" import type { BedTypeSelection } from "../../types/bedTypeSelection"
import type { Room as RoomCategory } from "../../types/hotel"
import type { DestinationPagesHotelData, HotelInput } from "../../types/hotel" import type { DestinationPagesHotelData, HotelInput } from "../../types/hotel"
import type { import type {
CitiesGroupedByCountry, CitiesGroupedByCountry,
CityLocation, CityLocation,
} from "../../types/locations" } from "../../types/locations"
import type { PackagesOutput } from "../../types/packages" import type { PackagesOutput } from "../../types/packages"
import type {
Product,
Products,
RateDefinition,
RedemptionsProduct,
RoomConfiguration,
} from "../../types/roomAvailability"
import type { Cities } from "./output" import type { Cities } from "./output"
export const locationsAffix = "locations" export const locationsAffix = "locations"
@@ -981,7 +981,7 @@ export async function getRoomsAvailability(
lang, lang,
} = input } = input
const redemption = searchType === REDEMPTION const redemption = searchType === SEARCH_TYPE_REDEMPTION
const getRoomsAvailabilityCounter = createCounter( const getRoomsAvailabilityCounter = createCounter(
"hotel", "hotel",

View File

@@ -6,8 +6,8 @@ import { safeTry } from "@scandic-hotels/common/utils/safeTry"
import { getEurobonusMembership } from "../../user/helpers" import { getEurobonusMembership } from "../../user/helpers"
import type { Lang } from "@scandic-hotels/common/constants/language" import type { Lang } from "@scandic-hotels/common/constants/language"
import type { UserLoyalty } from "@scandic-hotels/trpc/types/user"
import type { UserLoyalty } from "../../../types/user"
import type { MyPagesLink } from "./MyPagesLink" import type { MyPagesLink } from "./MyPagesLink"
export const getPrimaryLinks = cache( export const getPrimaryLinks = cache(

View File

@@ -1,5 +1,4 @@
import { mergeRouters } from "@scandic-hotels/trpc" import { mergeRouters } from "../.."
import { userMutationRouter } from "./mutation" import { userMutationRouter } from "./mutation"
import { userQueryRouter } from "./query" import { userQueryRouter } from "./query"

View File

@@ -1,20 +1,20 @@
import { createCounter } from "@scandic-hotels/common/telemetry" import { createCounter } from "@scandic-hotels/common/telemetry"
import { router } from "@scandic-hotels/trpc"
import * as api from "@scandic-hotels/trpc/api" import { router } from "../.."
import * as api from "../../api"
import { Transactions } from "../../enums/transactions"
import { import {
languageProtectedProcedure, languageProtectedProcedure,
protectedProcedure, protectedProcedure,
safeProtectedProcedure, safeProtectedProcedure,
} from "@scandic-hotels/trpc/procedures" } from "../../procedures"
import { import {
getFriendsMembership, getFriendsMembership,
getMembershipCards, getMembershipCards,
} from "@scandic-hotels/trpc/routers/user/helpers" } from "../../routers/user/helpers"
import { getVerifiedUser } from "@scandic-hotels/trpc/routers/user/utils" import { getVerifiedUser } from "../../routers/user/utils"
import { toApiLang } from "@scandic-hotels/trpc/utils" import { toApiLang } from "../../utils"
import { isValidSession } from "@scandic-hotels/trpc/utils/session" import { isValidSession } from "../../utils/session"
import { Transactions } from "../../enums/transactions"
import { import {
friendTransactionsInput, friendTransactionsInput,
getSavedPaymentCardsInput, getSavedPaymentCardsInput,
@@ -30,8 +30,7 @@ import {
updateStaysBookingUrl, updateStaysBookingUrl,
} from "./utils" } from "./utils"
import type { LoginType } from "@scandic-hotels/trpc/types/loginType" import type { LoginType } from "../../types/loginType"
import type { TrackingUserData } from "../types" import type { TrackingUserData } from "../types"
export const userQueryRouter = router({ export const userQueryRouter = router({

View File

@@ -36,9 +36,9 @@
"./utils/*": "./lib/utils/*.ts", "./utils/*": "./lib/utils/*.ts",
"./cms/*": "./lib/services/cms/*.ts", "./cms/*": "./lib/services/cms/*.ts",
"./previewContext": "./lib/previewContext.ts", "./previewContext": "./lib/previewContext.ts",
"./FIX-BELOW": "./unused",
"./jwt.d.ts": "./jwt.d.ts", "./jwt.d.ts": "./jwt.d.ts",
"./auth.d.ts": "./auth.d.ts", "./auth.d.ts": "./auth.d.ts",
"./TODO-REMOVE-BELOW": "./remove-when-current-web-is-gone",
"./graphql/Query/Current/CurrentBlockPage.graphql": "./lib/graphql/Query/Current/CurrentBlockPage.graphql", "./graphql/Query/Current/CurrentBlockPage.graphql": "./lib/graphql/Query/Current/CurrentBlockPage.graphql",
"./graphql/Query/Current/CurrentBlockPageTrackingData.graphql": "./lib/graphql/Query/Current/CurrentBlockPageTrackingData.graphql" "./graphql/Query/Current/CurrentBlockPageTrackingData.graphql": "./lib/graphql/Query/Current/CurrentBlockPageTrackingData.graphql"
}, },
@@ -53,11 +53,13 @@
"fuse.js": "^7.1.0", "fuse.js": "^7.1.0",
"graphql": "^16.11.0", "graphql": "^16.11.0",
"graphql-request": "^7.1.2", "graphql-request": "^7.1.2",
"graphql-tag": "^2.12.6",
"json-stable-stringify-without-jsonify": "^1.0.1", "json-stable-stringify-without-jsonify": "^1.0.1",
"next-auth": "5.0.0-beta.27", "next-auth": "5.0.0-beta.27",
"server-only": "^0.0.1", "server-only": "^0.0.1",
"slugify": "^1.6.6", "slugify": "^1.6.6",
"superjson": "^2.2.2", "superjson": "^2.2.2",
"uuid": "^11.1.0",
"zod": "^3.24.4" "zod": "^3.24.4"
}, },
"peerDependencies": { "peerDependencies": {

View File

@@ -7027,6 +7027,7 @@ __metadata:
eslint-plugin-formatjs: "npm:^5.3.1" eslint-plugin-formatjs: "npm:^5.3.1"
eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import: "npm:^2.31.0"
eslint-plugin-simple-import-sort: "npm:^12.1.1" eslint-plugin-simple-import-sort: "npm:^12.1.1"
graphql-tag: "npm:^2.12.6"
next: "npm:15.3.4" next: "npm:15.3.4"
react: "npm:^19.0.0" react: "npm:^19.0.0"
react-dom: "npm:^19.0.0" react-dom: "npm:^19.0.0"
@@ -7149,11 +7150,7 @@ __metadata:
eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import: "npm:^2.31.0"
eslint-plugin-simple-import-sort: "npm:^12.1.1" eslint-plugin-simple-import-sort: "npm:^12.1.1"
fast-deep-equal: "npm:^3.1.3" fast-deep-equal: "npm:^3.1.3"
fetch-retry: "npm:^6.0.0"
flat: "npm:^6.0.1" flat: "npm:^6.0.1"
fuse.js: "npm:^7.1.0"
graphql: "npm:^16.11.0"
graphql-request: "npm:^7.1.2"
graphql-tag: "npm:^2.12.6" graphql-tag: "npm:^2.12.6"
html-react-parser: "npm:^5.2.3" html-react-parser: "npm:^5.2.3"
ics: "npm:^3.8.1" ics: "npm:^3.8.1"
@@ -7186,7 +7183,6 @@ __metadata:
react-to-print: "npm:^3.1.0" react-to-print: "npm:^3.1.0"
schema-dts: "npm:^1.1.5" schema-dts: "npm:^1.1.5"
server-only: "npm:^0.0.1" server-only: "npm:^0.0.1"
slugify: "npm:^1.6.6"
sonner: "npm:^2.0.3" sonner: "npm:^2.0.3"
start-server-and-test: "npm:^2.0.11" start-server-and-test: "npm:^2.0.11"
supercluster: "npm:^8.0.1" supercluster: "npm:^8.0.1"
@@ -7195,7 +7191,6 @@ __metadata:
typescript: "npm:5.8.3" typescript: "npm:5.8.3"
typescript-plugin-css-modules: "npm:^5.1.0" typescript-plugin-css-modules: "npm:^5.1.0"
usehooks-ts: "npm:3.1.1" usehooks-ts: "npm:3.1.1"
uuid: "npm:^11.1.0"
vite-tsconfig-paths: "npm:^5.1.4" vite-tsconfig-paths: "npm:^5.1.4"
vitest: "npm:^3.2.4" vitest: "npm:^3.2.4"
zod: "npm:^3.24.4" zod: "npm:^3.24.4"
@@ -7229,12 +7224,14 @@ __metadata:
fuse.js: "npm:^7.1.0" fuse.js: "npm:^7.1.0"
graphql: "npm:^16.11.0" graphql: "npm:^16.11.0"
graphql-request: "npm:^7.1.2" graphql-request: "npm:^7.1.2"
graphql-tag: "npm:^2.12.6"
json-stable-stringify-without-jsonify: "npm:^1.0.1" json-stable-stringify-without-jsonify: "npm:^1.0.1"
next-auth: "npm:5.0.0-beta.27" next-auth: "npm:5.0.0-beta.27"
server-only: "npm:^0.0.1" server-only: "npm:^0.0.1"
slugify: "npm:^1.6.6" slugify: "npm:^1.6.6"
superjson: "npm:^2.2.2" superjson: "npm:^2.2.2"
typescript: "npm:5.8.3" typescript: "npm:5.8.3"
uuid: "npm:^11.1.0"
vitest: "npm:^3.2.3" vitest: "npm:^3.2.3"
zod: "npm:^3.24.4" zod: "npm:^3.24.4"
peerDependencies: peerDependencies: