import md5 from "spark-md5"; import { DEFAULT_MODELS } from "../constant"; declare global { namespace NodeJS { interface ProcessEnv { OPENAI_API_KEY?: string; CODE?: string; BASE_URL?: string; PROXY_URL?: string; OPENAI_ORG_ID?: string; VERCEL?: string; HIDE_USER_API_KEY?: string; // disable user's api key input DISABLE_GPT4?: string; // allow user to use gpt-4 or not BUILD_MODE?: "standalone" | "export"; BUILD_APP?: string; // is building desktop app ENABLE_BALANCE_QUERY?: string; // allow user to query balance or not DISABLE_FAST_LINK?: string; // disallow parse settings from url or not CUSTOM_MODELS?: string; // to control custom models } } } const ACCESS_CODES = (function getAccessCodes(): Set { const code = process.env.CODE; try { const codes = (code?.split(",") ?? []) .filter((v) => !!v) .map((v) => md5.hash(v.trim())); return new Set(codes); } catch (e) { return new Set(); } })(); export const getServerSideConfig = () => { if (typeof process === "undefined") { throw Error( "[Server Config] you are importing a nodejs-only module outside of nodejs", ); } let disableGPT4 = !!process.env.DISABLE_GPT4; let customModels = process.env.CUSTOM_MODELS ?? ""; if (disableGPT4) { if (customModels) customModels += ","; customModels += DEFAULT_MODELS.filter((m) => m.name.startsWith("gpt-4")) .map((m) => "-" + m.name) .join(","); } return { apiKey: process.env.OPENAI_API_KEY, code: process.env.CODE, codes: ACCESS_CODES, needCode: ACCESS_CODES.size > 0, baseUrl: process.env.BASE_URL, proxyUrl: process.env.PROXY_URL, openaiOrgId: process.env.OPENAI_ORG_ID, isVercel: !!process.env.VERCEL, hideUserApiKey: !!process.env.HIDE_USER_API_KEY, disableGPT4, hideBalanceQuery: !process.env.ENABLE_BALANCE_QUERY, disableFastLink: !!process.env.DISABLE_FAST_LINK, customModels, }; };