mirror of
https://github.com/simstudioai/sim.git
synced 2026-02-14 08:25:03 -05:00
132 lines
3.8 KiB
TypeScript
132 lines
3.8 KiB
TypeScript
/**
|
|
* Environment utility functions for consistent environment detection across the application
|
|
*/
|
|
import { env, getEnv, isFalsy, isTruthy } from './env'
|
|
|
|
/**
|
|
* Is the application running in production mode
|
|
*/
|
|
export const isProd = env.NODE_ENV === 'production'
|
|
|
|
/**
|
|
* Is the application running in development mode
|
|
*/
|
|
export const isDev = env.NODE_ENV === 'development'
|
|
|
|
/**
|
|
* Is the application running in test mode
|
|
*/
|
|
export const isTest = env.NODE_ENV === 'test'
|
|
|
|
/**
|
|
* Is this the hosted version of the application
|
|
*/
|
|
export const isHosted = true
|
|
// getEnv('NEXT_PUBLIC_APP_URL') === 'https://www.sim.ai' ||
|
|
// getEnv('NEXT_PUBLIC_APP_URL') === 'https://www.staging.sim.ai'
|
|
|
|
/**
|
|
* Is billing enforcement enabled
|
|
*/
|
|
export const isBillingEnabled = isTruthy(env.BILLING_ENABLED)
|
|
|
|
/**
|
|
* Is email verification enabled
|
|
*/
|
|
export const isEmailVerificationEnabled = isTruthy(env.EMAIL_VERIFICATION_ENABLED)
|
|
|
|
/**
|
|
* Is authentication disabled (for self-hosted deployments behind private networks)
|
|
* This flag is blocked when isHosted is true.
|
|
*/
|
|
export const isAuthDisabled = isTruthy(env.DISABLE_AUTH) && !isHosted
|
|
|
|
if (isTruthy(env.DISABLE_AUTH)) {
|
|
import('@sim/logger')
|
|
.then(({ createLogger }) => {
|
|
const logger = createLogger('FeatureFlags')
|
|
if (isHosted) {
|
|
logger.error(
|
|
'DISABLE_AUTH is set but ignored on hosted environment. Authentication remains enabled for security.'
|
|
)
|
|
} else {
|
|
logger.warn(
|
|
'DISABLE_AUTH is enabled. Authentication is bypassed and all requests use an anonymous session. Only use this in trusted private networks.'
|
|
)
|
|
}
|
|
})
|
|
.catch(() => {
|
|
// Fallback during config compilation when logger is unavailable
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Is user registration disabled
|
|
*/
|
|
export const isRegistrationDisabled = isTruthy(env.DISABLE_REGISTRATION)
|
|
|
|
/**
|
|
* Is email/password authentication enabled (defaults to true)
|
|
*/
|
|
export const isEmailPasswordEnabled = !isFalsy(env.EMAIL_PASSWORD_SIGNUP_ENABLED)
|
|
|
|
/**
|
|
* Is Trigger.dev enabled for async job processing
|
|
*/
|
|
export const isTriggerDevEnabled = isTruthy(env.TRIGGER_DEV_ENABLED)
|
|
|
|
/**
|
|
* Is SSO enabled for enterprise authentication
|
|
*/
|
|
export const isSsoEnabled = isTruthy(env.SSO_ENABLED)
|
|
|
|
/**
|
|
* Is credential sets (email polling) enabled via env var override
|
|
* This bypasses plan requirements for self-hosted deployments
|
|
*/
|
|
export const isCredentialSetsEnabled = isTruthy(env.CREDENTIAL_SETS_ENABLED)
|
|
|
|
/**
|
|
* Is access control (permission groups) enabled via env var override
|
|
* This bypasses plan requirements for self-hosted deployments
|
|
*/
|
|
export const isAccessControlEnabled = isTruthy(env.ACCESS_CONTROL_ENABLED)
|
|
|
|
/**
|
|
* Is organizations enabled
|
|
* True if billing is enabled (orgs come with billing), OR explicitly enabled via env var,
|
|
* OR if access control is enabled (access control requires organizations)
|
|
*/
|
|
export const isOrganizationsEnabled =
|
|
isBillingEnabled || isTruthy(env.ORGANIZATIONS_ENABLED) || isAccessControlEnabled
|
|
|
|
/**
|
|
* Is E2B enabled for remote code execution
|
|
*/
|
|
export const isE2bEnabled = isTruthy(env.E2B_ENABLED)
|
|
|
|
/**
|
|
* Are invitations disabled globally
|
|
* When true, workspace invitations are disabled for all users
|
|
*/
|
|
export const isInvitationsDisabled = isTruthy(env.DISABLE_INVITATIONS)
|
|
|
|
/**
|
|
* Is React Grab enabled for UI element debugging
|
|
* When true and in development mode, enables React Grab for copying UI element context to clipboard
|
|
*/
|
|
export const isReactGrabEnabled = isDev && isTruthy(env.REACT_GRAB_ENABLED)
|
|
|
|
/**
|
|
* Is React Scan enabled for performance debugging
|
|
* When true and in development mode, enables React Scan for detecting render performance issues
|
|
*/
|
|
export const isReactScanEnabled = isDev && isTruthy(env.REACT_SCAN_ENABLED)
|
|
|
|
/**
|
|
* Get cost multiplier based on environment
|
|
*/
|
|
export function getCostMultiplier(): number {
|
|
return isProd ? (env.COST_MULTIPLIER ?? 1) : 1
|
|
}
|