config.ts
Raw
1import path from "node:path";
2
3const env = process.env;
4
5const config = {
6 OWNER_DISPLAY_NAME: env.OWNER_DISPLAY_NAME ?? "Admin",
7 INLINE_MAX_BYTES: parseInt(env.INLINE_MAX_BYTES ?? "", 10) || 524288,
8 MAX_UPLOAD_BYTES:
9 parseInt(env.MAX_UPLOAD_BYTES ?? "", 10) || 10 * 1024 * 1024,
10 MAX_USER_UPLOAD_BYTES:
11 parseInt(env.MAX_USER_UPLOAD_BYTES ?? "", 10) || 2 * 1024 * 1024,
12 TRUSTED_PROXY: !!env.TRUSTED_PROXY,
13 RATE_LIMIT_DISABLED: !!env.RATE_LIMIT_DISABLED,
14 SSH_DISABLED: !!env.SSH_DISABLED,
15 PORT: parseInt(env.PORT ?? "", 10) || 3000,
16 SSH_PORT: parseInt(env.SSH_PORT ?? "", 10) || 2222,
17 REGISTRATION_TYPE: (env.REGISTRATION_TYPE ?? "enabled") as
18 | "enabled"
19 | "disabled"
20 | "queue",
21 REGISTER_QUESTION: env.REGISTER_QUESTION ?? "",
22 BASE_URL:
23 env.BASE_URL ??
24 `http://localhost:${parseInt(env.PORT ?? "", 10) || 3000}`,
25 DATA_DIR: path.resolve(env.DATA_DIR ?? "./data"),
26 HIGHLIGHT_WORKERS: parseInt(env.HIGHLIGHT_WORKERS ?? "", 10) || 4,
27 COMMITTER_NAME: env.COMMITTER_NAME ?? env.OWNER_DISPLAY_NAME ?? "Admin",
28 COMMITTER_EMAIL: "",
29 EXTRA_ALLOWED_SIGNERS_PATH: env.EXTRA_ALLOWED_SIGNERS_PATH ?? null,
30 MAX_TITLE_BYTES: parseInt(env.MAX_TITLE_BYTES ?? "", 10) || 500,
31 MAX_TEXT_BODY_BYTES: parseInt(env.MAX_TEXT_BODY_BYTES ?? "", 10) || 100_000,
32 MAX_USERNAME_BYTES: parseInt(env.MAX_USERNAME_BYTES ?? "", 10) || 64,
33 MAX_PASSWORD_BYTES: parseInt(env.MAX_PASSWORD_BYTES ?? "", 10) || 1024,
34 CI_DOCKER_SOCKET: env.CI_DOCKER_SOCKET ?? "",
35 CI_MAX_HISTORY: parseInt(env.CI_MAX_HISTORY ?? "", 10) || 50,
36 CI_MAX_CONCURRENT: parseInt(env.CI_MAX_CONCURRENT ?? "", 10) || 2,
37 CI_DEFAULT_TIMEOUT: parseInt(env.CI_DEFAULT_TIMEOUT ?? "", 10) || 3600,
38};
39
40// Derived values that depend on other config fields
41config.COMMITTER_EMAIL =
42 env.COMMITTER_EMAIL ??
43 `${config.OWNER_DISPLAY_NAME}@${new URL(config.BASE_URL).hostname}`;
44
45export default config;
46