Files
webstudio/apps/builder/app/env/env.server.ts
T
Ivan Starkov 231c792ebf experimental: Enhance Performance by Using Postgrest to Fetch Data from Build Table (#3758)
## 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
2024-07-20 18:34:36 +03:00

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;