Ctrl K
ComunidadGuías…

env.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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),
};