Files
omnivore/packages/web/lib/appConfig.ts
2023-09-13 12:52:34 +08:00

85 lines
2.5 KiB
TypeScript

// Types
type AppEnvironment = 'prod' | 'dev' | 'demo' | 'local'
type BaseURLs = {
webBaseURL: string
serverBaseURL: string
}
type BaseURLRecords = Record<AppEnvironment, BaseURLs>
// Internal functions and properties
const baseURLRecords: BaseURLRecords = {
prod: {
webBaseURL: process.env.NEXT_PUBLIC_BASE_URL ?? '',
serverBaseURL: process.env.NEXT_PUBLIC_SERVER_BASE_URL ?? '',
},
dev: {
webBaseURL: process.env.NEXT_PUBLIC_DEV_BASE_URL ?? '',
serverBaseURL: process.env.NEXT_PUBLIC_DEV_SERVER_BASE_URL ?? '',
},
demo: {
webBaseURL: process.env.NEXT_PUBLIC_DEMO_BASE_URL ?? '',
serverBaseURL: process.env.NEXT_PUBLIC_DEMO_SERVER_BASE_URL ?? '',
},
local: {
webBaseURL: process.env.NEXT_PUBLIC_LOCAL_BASE_URL ?? '',
serverBaseURL: process.env.NEXT_PUBLIC_LOCAL_SERVER_BASE_URL ?? '',
},
}
function serverBaseURL(env: AppEnvironment): string {
const value = baseURLRecords[appEnv].serverBaseURL
if (value.length == 0) {
throw new Error(
`Couldn't find environment variable for server base url in ${env} environment`
)
}
return value
}
function webURL(env: AppEnvironment): string {
const value = baseURLRecords[appEnv].webBaseURL
if (value.length == 0) {
throw new Error(
`Couldn't find environment variable for web base url in ${env} environment`
)
}
return value
}
const appEnv = (process.env.NEXT_PUBLIC_APP_ENV || 'prod') as AppEnvironment
// Exports
export const sentryDSN =
process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SENTRY_DSN
export const pspdfKitKey = process.env.NEXT_PUBLIC_PSPDFKIT_LICENSE_KEY
export const ssoJwtSecret = process.env.SSO_JWT_SECRET
export const gauthRedirectURI =
appEnv == 'local'
? `${baseURLRecords[appEnv].serverBaseURL}/api/auth/gauth-redirect-localhost`
: `${baseURLRecords[appEnv].serverBaseURL}/api/auth/vercel/gauth-redirect`
export const appleAuthRedirectURI =
appEnv == 'local'
? `${baseURLRecords[appEnv].serverBaseURL}/api/auth/apple-redirect-localhost`
: `${baseURLRecords[appEnv].serverBaseURL}/api/auth/vercel/apple-redirect`
export const intercomAppID = process.env.NEXT_PUBLIC_INTERCOM_APP_ID
export const posthogApiKey = process.env.NEXT_PUBLIC_POSTHOG_API_KEY
export const googleID =
appEnv == 'prod'
? process.env.NEXT_PUBLIC_GOOGLE_ID
: process.env.NEXT_PUBLIC_DEV_GOOGLE_ID
export const gqlEndpoint = `${serverBaseURL(appEnv)}/api/graphql`
export const fetchEndpoint = `${serverBaseURL(appEnv)}/api`
export const webBaseURL = webURL(appEnv)