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};
35
36// Derived values that depend on other config fields
37config.COMMITTER_EMAIL =
38 env.COMMITTER_EMAIL ??
39 `${config.OWNER_DISPLAY_NAME}@${new URL(config.BASE_URL).hostname}`;
40
41export default config;
42