mirror of
https://github.com/simstudioai/sim.git
synced 2026-04-06 03:00:16 -04:00
fix(docker): use next-runtime instead of accessing next_public vars directly (#746)
This commit is contained in:
@@ -1,6 +1,17 @@
|
||||
import { createEnv } from '@t3-oss/env-nextjs'
|
||||
import { env as runtimeEnv } from 'next-runtime-env'
|
||||
import { z } from 'zod'
|
||||
|
||||
/**
|
||||
* Universal environment variable getter that works in both client and server contexts.
|
||||
* - Client-side: Uses next-runtime-env for runtime injection (supports Docker runtime vars)
|
||||
* - Server-side: Falls back to process.env when runtimeEnv returns undefined
|
||||
* - Provides seamless Docker runtime variable support for NEXT_PUBLIC_ vars
|
||||
*/
|
||||
const getEnv = (variable: string): string | undefined => {
|
||||
return runtimeEnv(variable) ?? process.env[variable]
|
||||
}
|
||||
|
||||
export const env = createEnv({
|
||||
skipValidation: true,
|
||||
|
||||
@@ -131,18 +142,20 @@ export const env = createEnv({
|
||||
},
|
||||
|
||||
experimental__runtimeEnv: {
|
||||
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
|
||||
NEXT_PUBLIC_VERCEL_URL: process.env.VERCEL_URL,
|
||||
NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN,
|
||||
NEXT_PUBLIC_GOOGLE_CLIENT_ID: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID,
|
||||
NEXT_PUBLIC_GOOGLE_API_KEY: process.env.NEXT_PUBLIC_GOOGLE_API_KEY,
|
||||
NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER: process.env.NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER,
|
||||
NEXT_PUBLIC_SOCKET_URL: process.env.NEXT_PUBLIC_SOCKET_URL,
|
||||
NODE_ENV: process.env.NODE_ENV,
|
||||
NEXT_TELEMETRY_DISABLED: process.env.NEXT_TELEMETRY_DISABLED,
|
||||
NEXT_PUBLIC_APP_URL: getEnv('NEXT_PUBLIC_APP_URL'),
|
||||
NEXT_PUBLIC_VERCEL_URL: process.env.VERCEL_URL, // Keep as-is (server-only)
|
||||
NEXT_PUBLIC_SENTRY_DSN: getEnv('NEXT_PUBLIC_SENTRY_DSN'),
|
||||
NEXT_PUBLIC_GOOGLE_CLIENT_ID: getEnv('NEXT_PUBLIC_GOOGLE_CLIENT_ID'),
|
||||
NEXT_PUBLIC_GOOGLE_API_KEY: getEnv('NEXT_PUBLIC_GOOGLE_API_KEY'),
|
||||
NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER: getEnv('NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER'),
|
||||
NEXT_PUBLIC_SOCKET_URL: getEnv('NEXT_PUBLIC_SOCKET_URL'),
|
||||
NODE_ENV: process.env.NODE_ENV, // Keep as-is (build-time)
|
||||
NEXT_TELEMETRY_DISABLED: process.env.NEXT_TELEMETRY_DISABLED, // Keep as-is (build-time)
|
||||
},
|
||||
})
|
||||
|
||||
// Needing this utility because t3-env is returning string for boolean values.
|
||||
export const isTruthy = (value: string | boolean | number | undefined) =>
|
||||
typeof value === 'string' ? value === 'true' || value === '1' : Boolean(value)
|
||||
|
||||
export { getEnv }
|
||||
|
||||
Reference in New Issue
Block a user