fix: reduce the need for multiple SEAMLESS_LOGIN/SEAMLESS_LOGOUT * fix: reduce the need for multiple SEAMLESS_LOGIN/SEAMLESS_LOGOUT * fix: reduce the need for multiple SEAMLESS_LOGIN/SEAMLESS_LOGOUT * fix: defaulted values that are the same in each environment Approved-by: Christian Andolf Approved-by: Linus Flood
258 lines
10 KiB
TypeScript
258 lines
10 KiB
TypeScript
import { createEnv } from "@t3-oss/env-nextjs"
|
|
import { z } from "zod"
|
|
|
|
const TWENTYFOUR_HOURS = 24 * 60 * 60
|
|
|
|
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: {
|
|
APPLICATION_INSIGHTS_CONNECTION_STRING: z.string().optional(),
|
|
ADOBE_SCRIPT_SRC: z.string().optional(),
|
|
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"),
|
|
API_BASEURL: z.string(),
|
|
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_PREVIEW_TOKEN: z.string(),
|
|
CMS_PREVIEW_URL: z.string(),
|
|
CMS_URL: z.string(),
|
|
CMS_BRANCH: z.enum(["development", "production"]),
|
|
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(),
|
|
CYPRESS_BASE_URL: z.string().default("http://127.0.0.1:3000"),
|
|
DESIGN_SYSTEM_ACCESS_TOKEN: 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"]),
|
|
PRINT_QUERY: z
|
|
.string()
|
|
.refine((s) => s === "true" || s === "false")
|
|
.transform((s) => s === "true")
|
|
.default("false"),
|
|
PUBLIC_URL: z.string().default(""),
|
|
REVALIDATE_SECRET: z.string(),
|
|
SALESFORCE_PREFERENCE_BASE_URL: z.string(),
|
|
SEAMLESS_LOGIN_DA: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "dk")),
|
|
SEAMLESS_LOGIN_DE: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "de")),
|
|
SEAMLESS_LOGIN_EN: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "com")),
|
|
SEAMLESS_LOGIN_FI: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "fi")),
|
|
SEAMLESS_LOGIN_NO: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "no")),
|
|
SEAMLESS_LOGIN_SV: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "se")),
|
|
SEAMLESS_LOGOUT_DA: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "dk")),
|
|
SEAMLESS_LOGOUT_DE: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "de")),
|
|
SEAMLESS_LOGOUT_EN: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "com")),
|
|
SEAMLESS_LOGOUT_FI: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "fi")),
|
|
SEAMLESS_LOGOUT_NO: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "no")),
|
|
SEAMLESS_LOGOUT_SV: z
|
|
.string()
|
|
.transform((s) => replaceTopLevelDomain(s, "se")),
|
|
SHOW_SIGNUP_FLOW: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true")
|
|
.default("false"),
|
|
WEBVIEW_ENCRYPTION_KEY: z.string(),
|
|
BOOKING_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(),
|
|
HIDE_FOR_NEXT_RELEASE: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true"),
|
|
ENABLE_BOOKING_FLOW: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true")
|
|
.default("true"),
|
|
ENABLE_BOOKING_WIDGET: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true")
|
|
.default("false"),
|
|
ENABLE_BOOKING_WIDGET_HOTELRESERVATION_PATH: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true")
|
|
.default("true"),
|
|
SHOW_SITE_WIDE_ALERT: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true")
|
|
.default("false"),
|
|
USE_NEW_REWARDS_ENDPOINT: z
|
|
.string()
|
|
// only allow "true" or "false"
|
|
.refine((s) => s === "true" || s === "false")
|
|
// transform to boolean
|
|
.transform((s) => s === "true")
|
|
.default("false"),
|
|
USE_NEW_REWARD_MODEL: 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),
|
|
CACHE_TIME_HOTELDATA: z
|
|
.number()
|
|
.transform(() =>
|
|
process.env.CMS_ENVIRONMENT === "test" ? 5 * 60 : 30 * 60
|
|
)
|
|
.default(30 * 60),
|
|
CACHE_TIME_HOTELS: z
|
|
.number()
|
|
.transform(() =>
|
|
process.env.CMS_ENVIRONMENT === "test" ? 5 * 60 : TWENTYFOUR_HOURS
|
|
)
|
|
.default(TWENTYFOUR_HOURS),
|
|
},
|
|
emptyStringAsUndefined: true,
|
|
runtimeEnv: {
|
|
APPLICATION_INSIGHTS_CONNECTION_STRING:
|
|
process.env.APPLICATION_INSIGHTS_CONNECTION_STRING,
|
|
ADOBE_SCRIPT_SRC: process.env.ADOBE_SCRIPT_SRC,
|
|
ADOBE_SDK_SCRIPT_SRC: process.env.ADOBE_SDK_SCRIPT_SRC,
|
|
ENABLE_GTMSCRIPT: process.env.ENABLE_GTMSCRIPT,
|
|
API_BASEURL: process.env.API_BASEURL,
|
|
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_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,
|
|
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,
|
|
CYPRESS_BASE_URL: process.env.CYPRESS_TEST_URL,
|
|
DESIGN_SYSTEM_ACCESS_TOKEN: process.env.DESIGN_SYSTEM_ACCESS_TOKEN,
|
|
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,
|
|
PRINT_QUERY: process.env.PRINT_QUERY,
|
|
PUBLIC_URL: process.env.PUBLIC_URL,
|
|
REVALIDATE_SECRET: process.env.REVALIDATE_SECRET,
|
|
SALESFORCE_PREFERENCE_BASE_URL: process.env.SALESFORCE_PREFERENCE_BASE_URL,
|
|
SEAMLESS_LOGIN_DA:
|
|
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_DA,
|
|
SEAMLESS_LOGIN_DE:
|
|
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_DE,
|
|
SEAMLESS_LOGIN_EN:
|
|
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_EN,
|
|
SEAMLESS_LOGIN_FI:
|
|
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_FI,
|
|
SEAMLESS_LOGIN_NO:
|
|
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_NO,
|
|
SEAMLESS_LOGIN_SV:
|
|
process.env.SEAMLESS_LOGIN || process.env.SEAMLESS_LOGIN_SV,
|
|
SEAMLESS_LOGOUT_DA:
|
|
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_DA,
|
|
SEAMLESS_LOGOUT_DE:
|
|
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_DE,
|
|
SEAMLESS_LOGOUT_EN:
|
|
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_EN,
|
|
SEAMLESS_LOGOUT_FI:
|
|
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_FI,
|
|
SEAMLESS_LOGOUT_NO:
|
|
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_NO,
|
|
SEAMLESS_LOGOUT_SV:
|
|
process.env.SEAMLESS_LOGOUT || process.env.SEAMLESS_LOGOUT_SV,
|
|
SHOW_SIGNUP_FLOW: process.env.SHOW_SIGNUP_FLOW,
|
|
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_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,
|
|
HIDE_FOR_NEXT_RELEASE: process.env.NEXT_PUBLIC_HIDE_FOR_NEXT_RELEASE,
|
|
USE_NEW_REWARDS_ENDPOINT: process.env.USE_NEW_REWARDS_ENDPOINT,
|
|
USE_NEW_REWARD_MODEL: process.env.USE_NEW_REWARD_MODEL,
|
|
ENABLE_BOOKING_FLOW: process.env.ENABLE_BOOKING_FLOW,
|
|
ENABLE_BOOKING_WIDGET: process.env.ENABLE_BOOKING_WIDGET,
|
|
ENABLE_BOOKING_WIDGET_HOTELRESERVATION_PATH:
|
|
process.env.ENABLE_BOOKING_WIDGET_HOTELRESERVATION_PATH,
|
|
SHOW_SITE_WIDE_ALERT: process.env.SHOW_SITE_WIDE_ALERT,
|
|
SENTRY_ENVIRONMENT: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT,
|
|
SENTRY_SERVER_SAMPLERATE: process.env.SENTRY_SERVER_SAMPLERATE,
|
|
CACHE_TIME_HOTELDATA: process.env.CACHE_TIME_HOTELDATA,
|
|
CACHE_TIME_HOTELS: process.env.CACHE_TIME_HOTELS,
|
|
},
|
|
})
|
|
|
|
function replaceTopLevelDomain(url: string, domain: string) {
|
|
return url.replaceAll("{topleveldomain}", domain)
|
|
}
|