UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

99 lines (72 loc) 3.15 kB
/* eslint-disable sort-keys-fix/sort-keys-fix */ import { createEnv } from '@t3-oss/env-nextjs'; import { z } from 'zod'; import { isServerMode } from '@/const/version'; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace NodeJS { interface ProcessEnv { ACCESS_CODE?: string; } } } const isInVercel = process.env.VERCEL === '1'; const vercelUrl = `https://${process.env.VERCEL_URL}`; const APP_URL = process.env.APP_URL ? process.env.APP_URL : isInVercel ? vercelUrl : undefined; // only throw error in server mode and server side if (typeof window === 'undefined' && isServerMode && !APP_URL) { throw new Error('`APP_URL` is required in server mode'); } const ASSISTANT_INDEX_URL = 'https://registry.npmmirror.com/@lobehub/agents-index/v1/files/public'; const PLUGINS_INDEX_URL = 'https://chat-plugins.lobehub.com'; export const getAppConfig = () => { const ACCESS_CODES = process.env.ACCESS_CODE?.split(',').filter(Boolean) || []; return createEnv({ client: { NEXT_PUBLIC_BASE_PATH: z.string(), NEXT_PUBLIC_ENABLE_SENTRY: z.boolean(), }, server: { ACCESS_CODES: z.any(z.string()).optional(), AGENTS_INDEX_URL: z.string().url(), DEFAULT_AGENT_CONFIG: z.string(), SYSTEM_AGENT: z.string().optional(), PLUGINS_INDEX_URL: z.string().url(), PLUGIN_SETTINGS: z.string().optional(), APP_URL: z.string().optional(), VERCEL_EDGE_CONFIG: z.string().optional(), MIDDLEWARE_REWRITE_THROUGH_LOCAL: z.boolean().optional(), ENABLE_AUTH_PROTECTION: z.boolean().optional(), CDN_USE_GLOBAL: z.boolean().optional(), CUSTOM_FONT_FAMILY: z.string().optional(), CUSTOM_FONT_URL: z.string().optional(), SSRF_ALLOW_PRIVATE_IP_ADDRESS: z.boolean().optional(), SSRF_ALLOW_IP_ADDRESS_LIST: z.string().optional(), }, runtimeEnv: { NEXT_PUBLIC_BASE_PATH: process.env.NEXT_PUBLIC_BASE_PATH || '', // Sentry NEXT_PUBLIC_ENABLE_SENTRY: !!process.env.NEXT_PUBLIC_SENTRY_DSN, ACCESS_CODES: ACCESS_CODES as any, AGENTS_INDEX_URL: !!process.env.AGENTS_INDEX_URL ? process.env.AGENTS_INDEX_URL : ASSISTANT_INDEX_URL, DEFAULT_AGENT_CONFIG: process.env.DEFAULT_AGENT_CONFIG || '', SYSTEM_AGENT: process.env.SYSTEM_AGENT, PLUGINS_INDEX_URL: !!process.env.PLUGINS_INDEX_URL ? process.env.PLUGINS_INDEX_URL : PLUGINS_INDEX_URL, PLUGIN_SETTINGS: process.env.PLUGIN_SETTINGS, VERCEL_EDGE_CONFIG: process.env.VERCEL_EDGE_CONFIG, APP_URL, MIDDLEWARE_REWRITE_THROUGH_LOCAL: process.env.MIDDLEWARE_REWRITE_THROUGH_LOCAL === '1', ENABLE_AUTH_PROTECTION: process.env.ENABLE_AUTH_PROTECTION === '1', CUSTOM_FONT_FAMILY: process.env.CUSTOM_FONT_FAMILY, CUSTOM_FONT_URL: process.env.CUSTOM_FONT_URL, CDN_USE_GLOBAL: process.env.CDN_USE_GLOBAL === '1', SSRF_ALLOW_PRIVATE_IP_ADDRESS: process.env.SSRF_ALLOW_PRIVATE_IP_ADDRESS === '1', SSRF_ALLOW_IP_ADDRESS_LIST: process.env.SSRF_ALLOW_IP_ADDRESS_LIST, }, }); }; export const appEnv = getAppConfig();