mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-04 02:58:23 +09:00
## Description [Big Project Example](https://postgrest.development.webstudio.is/builder/be939bf2-9095-4e17-b175-69de2bbf9597) Reduces time of big projects loading: ✓ { scenario:new_o }...........: avg=2.58s min=1.99s med=2.54s max=3.53s p(90)=2.95s p(95)=3.15s p(99)=3.44s count=31 ✓ { scenario:old_o }...........: avg=5.5s min=4.55s med=5.12s max=15.58s p(90)=5.44s p(95)=6.02s p(99)=12.87s count=31 2 times faster. (but highly depends on test times, project size etc sometimes it's 6x difference) Reduces patch time too. ## Steps for reproduction 1. click button 2. expect xyz ## Code Review - [ ] hi @kof, I need you to do - conceptual review (architecture, feature-correctness) - detailed review (read every line) - test it on preview ## Before requesting a review - [ ] made a self-review - [ ] added inline comments where things may be not obvious (the "why", not "what") ## Before merging - [ ] tested locally and on preview environment (preview dev login: 5de6) - [ ] updated [test cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md) document - [ ] added tests - [ ] if any new env variables are added, added them to `.env` file
118 lines
3.5 KiB
TypeScript
118 lines
3.5 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,
|
|
/**
|
|
* Base url ir base path for images with ending slash.
|
|
* Possible values are
|
|
* /asset/image/
|
|
* https://image-transform.wstd.io/cdn-cgi/image/
|
|
* https://webstudio.is/cdn-cgi/image/
|
|
*/
|
|
IMAGE_BASE_URL: process.env.IMAGE_BASE_URL ?? "/cgi/image/",
|
|
/**
|
|
* Base url or base path for any asset with ending slash.
|
|
* Possible values are
|
|
* /s/uploads/
|
|
* /cgi/asset/
|
|
* https://assets-dev.webstudio.is/
|
|
* https://assets.webstudio.is/
|
|
*/
|
|
ASSET_BASE_URL:
|
|
process.env.ASSET_BASE_URL ??
|
|
process.env.ASSET_CDN_URL ??
|
|
process.env.ASSET_PUBLIC_PATH ??
|
|
"/cgi/asset/",
|
|
|
|
// Local assets
|
|
FILE_UPLOAD_PATH: process.env.FILE_UPLOAD_PATH,
|
|
|
|
// 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()
|
|
) ?? [],
|
|
|
|
/**
|
|
* OpenAI secrets for AI features
|
|
*
|
|
* OPENAI_KEY is a personal API key that you should generate here https://platform.openai.com/account/api-keys
|
|
* OPENAI_ORG can be found at https://platform.openai.com/account/org-settings
|
|
*
|
|
* Both are mandatory as OpenAI will bill OPENAI_ORG
|
|
*/
|
|
OPENAI_KEY: process.env.OPENAI_KEY,
|
|
OPENAI_ORG: process.env.OPENAI_ORG,
|
|
|
|
PEXELS_API_KEY: process.env.PEXELS_API_KEY,
|
|
|
|
N8N_WEBHOOK_URL: process.env.N8N_WEBHOOK_URL,
|
|
N8N_WEBHOOK_TOKEN: process.env.N8N_WEBHOOK_TOKEN,
|
|
|
|
PUBLISHER_HOST: process.env.PUBLISHER_HOST || "wstd.work",
|
|
|
|
FEATURES: process.env.FEATURES ?? "",
|
|
|
|
// current user plan features (default)
|
|
USER_PLAN: process.env.USER_PLAN ?? "",
|
|
|
|
POSTGREST_URL: process.env.POSTGREST_URL ?? "http://localhost:3000",
|
|
POSTGREST_API_KEY: process.env.POSTGREST_API_KEY ?? "",
|
|
};
|
|
|
|
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;
|