import { createEnv } from "@t3-oss/env-nextjs" import { z } from "zod" import { getSemver } from "@scandic-hotels/common/utils/getSemver" export const env = createEnv({ /** * Due to t3-env only checking typeof window === "undefined" * and Netlify running Deno, window is never "undefined" * https://github.com/t3-oss/t3-env/issues/154 */ isServer: typeof window === "undefined" || "Deno" in window, server: { ADOBE_SDK_SCRIPT_SRC: z.string().optional(), ENABLE_GTMSCRIPT: z .string() // only allow "true" or "false" .refine((s) => s === "true" || s === "false") // transform to boolean .transform((s) => s === "true") .default("false"), BUILD_ID: z.string().default("64rYXBu8o2eHp0Jf"), CMS_ACCESS_TOKEN: z.string(), CMS_API_KEY: z.string(), CMS_ENVIRONMENT: z.enum(["development", "production", "stage", "test"]), CMS_BRANCH: z.enum(["development", "production"]), CMS_MANAGEMENT_TOKEN: z.string().optional(), CURITY_CLIENT_ID_USER: z.string().default("scandichotels-web"), CURITY_CLIENT_ID_SERVICE: z.string().default("scandichotels-web-backend"), CURITY_CLIENT_SECRET_SERVICE: z.string(), CURITY_CLIENT_SECRET_USER: z.string(), CURITY_ISSUER_USER: z.string(), CURITY_ISSUER_SERVICE: z.string(), ENVTEST: z.string().optional(), // https://env.t3.gg/docs/recipes#booleans NEXTAUTH_DEBUG: z .string() .refine((s) => s === "true" || s === "false") .transform((s) => s === "true") .default("false"), NEXTAUTH_REDIRECT_PROXY_URL: z.string().optional(), NEXTAUTH_SECRET: z.string(), NEXTAUTH_URL: z.string().default(""), AUTH_URL: z.string().default(""), NODE_ENV: z.enum(["development", "test", "production"]), PUBLIC_URL: z.string().default(""), REVALIDATE_SECRET: z.string(), SITEMAP_SYNC_SECRET: z.string(), WEBVIEW_ENCRYPTION_KEY: z.string(), GOOGLE_STATIC_MAP_KEY: z.string(), GOOGLE_STATIC_MAP_SIGNATURE_SECRET: z.string(), GOOGLE_DYNAMIC_MAP_ID: z.string(), GOOGLE_STATIC_MAP_ID: z.string(), ENABLE_SURPRISES: z .string() // only allow "true" or "false" .refine((s) => s === "true" || s === "false") // transform to boolean .transform((s) => s === "true") .default("false"), SENTRY_ENVIRONMENT: z.string().default("development"), SENTRY_SERVER_SAMPLERATE: z.coerce.number().default(0.001), // TODO: remove defaults for SAS value when we know that netlify has 'room' for it SAS_AUTH_ENDPOINT: z.string().default(""), SAS_AUTH_CLIENTID: z.string().default(""), REDIS_API_HOST: z.string().optional(), REDIS_API_KEY: z.string().optional(), BRANCH: process.env.NODE_ENV !== "development" ? z.string() : z.string().optional().default("dev"), GIT_SHA: z.string().optional(), ENABLE_WARMUP_HOTEL: z .string() // only allow "true" or "false" .refine((s) => s === "true" || s === "false") // transform to boolean .transform((s) => s === "true") .default("true"), WARMUP_TOKEN: z.string().optional(), DTMC_ENTRA_ID_CLIENT: z.string(), DTMC_ENTRA_ID_ISSUER: z.string(), /** * Optional until we have the secret in all environments. * We currently have the secret in local and test environments. */ DTMC_ENTRA_ID_SECRET: z.string().optional(), CHATBOT_LIVE_LANGS: z .string() .optional() .transform((s) => s?.split(",") || []), NEW_STAYS_ON_MY_PAGES: z .string() // only allow "true" or "false" .refine((s) => s === "true" || s === "false") // transform to boolean .transform((s) => s === "true") .default("false"), SEO_INERT: z .string() .refine((s) => s === "1" || s === "0") .transform((s) => s === "1") .default("0"), ENABLE_PROFILE_CONSENT: z .string() .refine((s) => s === "true" || s === "false") .transform((s) => s === "true") .default("false"), RELEASE_TAG: z .string() .optional() .transform((s) => getSemver("scandic-web", s, process.env.BRANCH || "development") ), }, emptyStringAsUndefined: true, runtimeEnv: { ADOBE_SDK_SCRIPT_SRC: process.env.ADOBE_SDK_SCRIPT_SRC, ENABLE_GTMSCRIPT: process.env.ENABLE_GTMSCRIPT, BUILD_ID: process.env.BUILD_ID, CMS_ACCESS_TOKEN: process.env.CMS_ACCESS_TOKEN, CMS_API_KEY: process.env.CMS_API_KEY, CMS_ENVIRONMENT: process.env.CMS_ENVIRONMENT, CMS_BRANCH: process.env.CMS_BRANCH, CMS_MANAGEMENT_TOKEN: process.env.CMS_MANAGEMENT_TOKEN, CURITY_CLIENT_ID_USER: process.env.CURITY_CLIENT_ID_USER, CURITY_CLIENT_ID_SERVICE: process.env.CURITY_CLIENT_ID_SERVICE, CURITY_CLIENT_SECRET_SERVICE: process.env.CURITY_CLIENT_SECRET_SERVICE, CURITY_CLIENT_SECRET_USER: process.env.CURITY_CLIENT_SECRET_USER, CURITY_ISSUER_USER: process.env.CURITY_ISSUER_USER, CURITY_ISSUER_SERVICE: process.env.CURITY_ISSUER_SERVICE, ENVTEST: process.env.ENVTEST, NEXTAUTH_DEBUG: process.env.NEXTAUTH_DEBUG, NEXTAUTH_REDIRECT_PROXY_URL: process.env.NEXTAUTH_REDIRECT_PROXY_URL, NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, NEXTAUTH_URL: process.env.NEXTAUTH_URL, AUTH_URL: process.env.AUTH_URL, NODE_ENV: process.env.NODE_ENV, PUBLIC_URL: process.env.NEXT_PUBLIC_PUBLIC_URL, REVALIDATE_SECRET: process.env.REVALIDATE_SECRET, SITEMAP_SYNC_SECRET: process.env.SITEMAP_SYNC_SECRET, WEBVIEW_ENCRYPTION_KEY: process.env.WEBVIEW_ENCRYPTION_KEY, GOOGLE_STATIC_MAP_KEY: process.env.GOOGLE_STATIC_MAP_KEY, GOOGLE_STATIC_MAP_SIGNATURE_SECRET: process.env.GOOGLE_STATIC_MAP_SIGNATURE_SECRET, GOOGLE_STATIC_MAP_ID: process.env.GOOGLE_STATIC_MAP_ID, GOOGLE_DYNAMIC_MAP_ID: process.env.GOOGLE_DYNAMIC_MAP_ID, ENABLE_SURPRISES: process.env.ENABLE_SURPRISES, SENTRY_ENVIRONMENT: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT, SENTRY_SERVER_SAMPLERATE: process.env.SENTRY_SERVER_SAMPLERATE, SAS_AUTH_ENDPOINT: process.env.SAS_AUTH_ENDPOINT, SAS_AUTH_CLIENTID: process.env.SAS_AUTH_CLIENTID, REDIS_API_HOST: process.env.REDIS_API_HOST, REDIS_API_KEY: process.env.REDIS_API_KEY, BRANCH: process.env.BRANCH, GIT_SHA: process.env.GIT_SHA, ENABLE_WARMUP_HOTEL: process.env.ENABLE_WARMUP_HOTEL, WARMUP_TOKEN: process.env.WARMUP_TOKEN, DTMC_ENTRA_ID_CLIENT: process.env.DTMC_ENTRA_ID_CLIENT, DTMC_ENTRA_ID_ISSUER: process.env.DTMC_ENTRA_ID_ISSUER, DTMC_ENTRA_ID_SECRET: process.env.DTMC_ENTRA_ID_SECRET, CHATBOT_LIVE_LANGS: process.env.CHATBOT_LIVE_LANGS, NEW_STAYS_ON_MY_PAGES: process.env.NEW_STAYS_ON_MY_PAGES, SEO_INERT: process.env.SEO_INERT, ENABLE_PROFILE_CONSENT: process.env.ENABLE_PROFILE_CONSENT, RELEASE_TAG: process.env.NEXT_PUBLIC_RELEASE_TAG, }, })