env.ts
Rama main · réplica de lectura del repositorio original.
import {
normalizeBaseUrl,
resolveAppMode,
resolveAuthAllowedHosts,
resolveBaseUrl,
resolveFileStorageDriver,
resolveFileMaxUploadBytes,
resolveOptionalBigInt,
resolveOptionalHttpUrl,
resolvePostalCodeDataUrl,
resolveStrictBoolean,
} from "@/core/config/environment";
const BASE_URL = resolveBaseUrl(process.env);
const oauthProxyUrl = process.env.OAUTH_PROXY_URL?.trim();
const oauthProxySecret = process.env.OAUTH_PROXY_SECRET?.trim() ? process.env.OAUTH_PROXY_SECRET : undefined;
if (Boolean(oauthProxyUrl) !== Boolean(oauthProxySecret))
throw new Error("OAUTH_PROXY_URL and OAUTH_PROXY_SECRET must be configured together");
export const env = {
DATABASE_URL: process.env.DATABASE_URL as string,
BETTER_AUTH_SECRET: process.env.BETTER_AUTH_SECRET as string,
BASE_URL,
AUTH_ALLOWED_HOSTS: resolveAuthAllowedHosts(process.env, BASE_URL),
OAUTH_PROXY_URL: oauthProxyUrl ? normalizeBaseUrl(oauthProxyUrl, "OAUTH_PROXY_URL") : undefined,
OAUTH_PROXY_SECRET: oauthProxySecret,
NODE_ENV: (process.env.NODE_ENV as "development" | "test" | "production" | undefined) ?? "development",
VERCEL_ENV: process.env.VERCEL_ENV as "development" | "preview" | "production" | undefined,
NEXT_RUNTIME: process.env.NEXT_RUNTIME as "nodejs" | "edge" | undefined,
CI: process.env.CI,
APP_MODE: resolveAppMode(process.env),
AGENT_CHAT_DISABLED: Boolean(process.env.AGENT_CHAT_DISABLED),
AI_GATEWAY_API_KEY: process.env.AI_GATEWAY_API_KEY,
HOSTED_AI_OPERATOR_CONTROLS_ENABLED: resolveStrictBoolean(
"HOSTED_AI_OPERATOR_CONTROLS_ENABLED",
process.env.HOSTED_AI_OPERATOR_CONTROLS_ENABLED,
),
HOSTED_AI_PROVIDER_WORK_PAUSED: resolveStrictBoolean(
"HOSTED_AI_PROVIDER_WORK_PAUSED",
process.env.HOSTED_AI_PROVIDER_WORK_PAUSED,
),
HOSTED_AI_MONTHLY_SPEND_CAP_MICROCENTS: resolveOptionalBigInt(
"HOSTED_AI_MONTHLY_SPEND_CAP_MICROCENTS",
process.env.HOSTED_AI_MONTHLY_SPEND_CAP_MICROCENTS,
),
WEBHOOK_ALLOW_PRIVATE_DESTINATIONS: resolveStrictBoolean(
"WEBHOOK_ALLOW_PRIVATE_DESTINATIONS",
process.env.WEBHOOK_ALLOW_PRIVATE_DESTINATIONS,
),
WEBHOOK_BLOCK_PRIVATE_DESTINATIONS: resolveStrictBoolean(
"WEBHOOK_BLOCK_PRIVATE_DESTINATIONS",
process.env.WEBHOOK_BLOCK_PRIVATE_DESTINATIONS,
),
RESEND_API_KEY: process.env.RESEND_API_KEY,
RESEND_OPERATOR_EMAIL: process.env.RESEND_OPERATOR_EMAIL as string,
WORKFLOW_TARGET_WORLD: process.env.WORKFLOW_TARGET_WORLD,
CRON_SECRET: process.env.CRON_SECRET,
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
AZURE_AD_CLIENT_ID: process.env.AZURE_AD_CLIENT_ID,
AZURE_AD_CLIENT_SECRET: process.env.AZURE_AD_CLIENT_SECRET,
GOOGLE_ADS_CONVERSION_UPLOAD_ENABLED: resolveStrictBoolean(
"GOOGLE_ADS_CONVERSION_UPLOAD_ENABLED",
process.env.GOOGLE_ADS_CONVERSION_UPLOAD_ENABLED,
),
GOOGLE_ADS_CONVERSION_UPLOAD_INGEST: resolveStrictBoolean(
"GOOGLE_ADS_CONVERSION_UPLOAD_INGEST",
process.env.GOOGLE_ADS_CONVERSION_UPLOAD_INGEST,
),
GOOGLE_ADS_OPERATING_ACCOUNT_ID: process.env.GOOGLE_ADS_OPERATING_ACCOUNT_ID,
GOOGLE_ADS_LOGIN_ACCOUNT_ID: process.env.GOOGLE_ADS_LOGIN_ACCOUNT_ID,
GOOGLE_ADS_SIGNUP_CONVERSION_ACTION_ID: process.env.GOOGLE_ADS_SIGNUP_CONVERSION_ACTION_ID,
GOOGLE_ADS_PAID_CONVERSION_ACTION_ID: process.env.GOOGLE_ADS_PAID_CONVERSION_ACTION_ID,
GOOGLE_DATA_MANAGER_CLIENT_ID: process.env.GOOGLE_DATA_MANAGER_CLIENT_ID,
GOOGLE_DATA_MANAGER_CLIENT_SECRET: process.env.GOOGLE_DATA_MANAGER_CLIENT_SECRET,
GOOGLE_DATA_MANAGER_REFRESH_TOKEN: process.env.GOOGLE_DATA_MANAGER_REFRESH_TOKEN,
LEMONSQUEEZY_API_KEY: process.env.LEMONSQUEEZY_API_KEY,
LEMONSQUEEZY_WEBHOOK_SECRET: process.env.LEMONSQUEEZY_WEBHOOK_SECRET,
LEMONSQUEEZY_STORE_ID: process.env.LEMONSQUEEZY_STORE_ID,
LEMONSQUEEZY_VARIANT_ID_STARTER: process.env.LEMONSQUEEZY_VARIANT_ID_STARTER,
LEMONSQUEEZY_VARIANT_ID_PRO: process.env.LEMONSQUEEZY_VARIANT_ID_PRO,
LEMONSQUEEZY_VARIANT_ID_BUSINESS: process.env.LEMONSQUEEZY_VARIANT_ID_BUSINESS,
LEMONSQUEEZY_VARIANT_ID_MAX: process.env.LEMONSQUEEZY_VARIANT_ID_MAX,
UNIPILE_API_KEY: process.env.UNIPILE_API_KEY,
UNIPILE_WEBHOOK_SECRET: process.env.UNIPILE_WEBHOOK_SECRET,
UNIPILE_HOSTED_AUTH_DOMAIN: process.env.UNIPILE_HOSTED_AUTH_DOMAIN,
FILE_STORAGE_DRIVER: resolveFileStorageDriver(process.env.FILE_STORAGE_DRIVER),
FILE_MAX_UPLOAD_BYTES: resolveFileMaxUploadBytes(process.env.FILE_MAX_UPLOAD_BYTES),
S3_ENDPOINT: process.env.S3_ENDPOINT,
S3_REGION: process.env.S3_REGION,
S3_BUCKET: process.env.S3_BUCKET,
S3_ACCESS_KEY_ID: process.env.S3_ACCESS_KEY_ID,
S3_SECRET_ACCESS_KEY: process.env.S3_SECRET_ACCESS_KEY,
S3_FORCE_PATH_STYLE: resolveStrictBoolean("S3_FORCE_PATH_STYLE", process.env.S3_FORCE_PATH_STYLE),
ADDRESS_LOOKUP_URL: resolveOptionalHttpUrl("ADDRESS_LOOKUP_URL", process.env.ADDRESS_LOOKUP_URL),
POSTAL_CODE_DATA_URL: resolvePostalCodeDataUrl(process.env.POSTAL_CODE_DATA_URL),
};