mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-30 16:47:54 +09:00
108 lines
3.3 KiB
TypeScript
108 lines
3.3 KiB
TypeScript
// @todo zod parse env, make explicit types i.e
|
|
const env = {
|
|
// Authentication
|
|
DEV_LOGIN: process.env.DEV_LOGIN,
|
|
GH_CLIENT_ID: process.env.GH_CLIENT_ID,
|
|
GH_CLIENT_SECRET: process.env.GH_CLIENT_SECRET,
|
|
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
|
|
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
|
|
|
|
// Secret session key, context encode
|
|
AUTH_SECRET: process.env.AUTH_SECRET,
|
|
|
|
// DEPLOYMENT_ENVIRONMENT development | preview | production
|
|
DEPLOYMENT_ENVIRONMENT: process.env.DEPLOYMENT_ENVIRONMENT,
|
|
DEPLOYMENT_URL: process.env.DEPLOYMENT_URL,
|
|
|
|
// Trpc on SaaS
|
|
TRPC_SERVER_URL: process.env.TRPC_SERVER_URL,
|
|
TRPC_SERVER_API_TOKEN: process.env.TRPC_SERVER_API_TOKEN,
|
|
|
|
PORT: process.env.PORT,
|
|
|
|
// Assets
|
|
MAX_UPLOAD_SIZE: process.env.MAX_UPLOAD_SIZE,
|
|
MAX_ASSETS_PER_PROJECT: process.env.MAX_ASSETS_PER_PROJECT,
|
|
|
|
// Remote assets
|
|
S3_ENDPOINT: process.env.S3_ENDPOINT,
|
|
S3_REGION: process.env.S3_REGION,
|
|
S3_ACCESS_KEY_ID: process.env.S3_ACCESS_KEY_ID,
|
|
S3_SECRET_ACCESS_KEY: process.env.S3_SECRET_ACCESS_KEY,
|
|
S3_BUCKET: process.env.S3_BUCKET,
|
|
S3_ACL: process.env.S3_ACL,
|
|
/**
|
|
* Origin of service implementing /cdn-cgi/image/ cloudflare endpoint
|
|
* without ending slash
|
|
*/
|
|
RESIZE_ORIGIN: process.env.RESIZE_ORIGIN,
|
|
|
|
/**
|
|
* Entri API credentials
|
|
*/
|
|
ENTRI_APPLICATION_ID: process.env.ENTRI_APPLICATION_ID ?? "webstudio",
|
|
ENTRI_SECRET: process.env.ENTRI_SECRET,
|
|
|
|
/**
|
|
* Projects as templates in dashboard
|
|
*/
|
|
PROJECT_TEMPLATES:
|
|
process.env.PROJECT_TEMPLATES?.split(",").map((projectId) =>
|
|
projectId.trim()
|
|
) ?? [],
|
|
|
|
N8N_WEBHOOK_URL: process.env.N8N_WEBHOOK_URL,
|
|
N8N_WEBHOOK_TOKEN: process.env.N8N_WEBHOOK_TOKEN,
|
|
|
|
PUBLISHER_HOST: process.env.PUBLISHER_HOST || "wstd.work",
|
|
|
|
STAGING_USERNAME: process.env.STAGING_USERNAME ?? "admin",
|
|
STAGING_PASSWORD: process.env.STAGING_PASSWORD ?? "webstudio",
|
|
|
|
FEATURES: process.env.FEATURES ?? "",
|
|
|
|
// current user plan features (default)
|
|
USER_PLAN: process.env.USER_PLAN ?? "",
|
|
|
|
// Default maxWorkspaces for plans that don't specify it.
|
|
// Every user gets at least 1 workspace (the default). Plans with product.meta can grant more.
|
|
// Set to 20 in local/staging to test multi-workspace features during development.
|
|
MAX_WORKSPACES: Number.isFinite(Number(process.env.MAX_WORKSPACES))
|
|
? Math.max(1, Number(process.env.MAX_WORKSPACES))
|
|
: 1,
|
|
|
|
POSTGREST_URL: process.env.POSTGREST_URL ?? "http://localhost:3000",
|
|
POSTGREST_API_KEY: process.env.POSTGREST_API_KEY ?? "",
|
|
|
|
SECURE_COOKIE: true,
|
|
|
|
// Used for project oauth login flow
|
|
AUTH_WS_CLIENT_ID: process.env.AUTH_WS_CLIENT_ID ?? "12345",
|
|
AUTH_WS_CLIENT_SECRET: process.env.AUTH_WS_CLIENT_SECRET ?? "12345678",
|
|
};
|
|
|
|
// Reject default OAuth secrets in production.
|
|
if (
|
|
env.DEPLOYMENT_ENVIRONMENT === "production" &&
|
|
(env.AUTH_WS_CLIENT_ID === "12345" ||
|
|
env.AUTH_WS_CLIENT_SECRET === "12345678")
|
|
) {
|
|
throw new Error(
|
|
"AUTH_WS_CLIENT_ID and AUTH_WS_CLIENT_SECRET must be set in production"
|
|
);
|
|
}
|
|
|
|
export type ServerEnv = typeof env;
|
|
|
|
// https://vercel.com/docs/concepts/projects/environment-variables#system-environment-variables
|
|
if (process.env.VERCEL !== undefined) {
|
|
if (env.DEPLOYMENT_ENVIRONMENT === undefined) {
|
|
env.DEPLOYMENT_ENVIRONMENT = process.env.VERCEL_ENV;
|
|
}
|
|
if (env.DEPLOYMENT_URL === undefined) {
|
|
env.DEPLOYMENT_URL = process.env.VERCEL_URL;
|
|
}
|
|
}
|
|
|
|
export default env;
|