constants.ts
Raw
1import path from "node:path";
2import { DATA_DIR, OWNER_DISPLAY_NAME } from "./config.ts";
3
4// Auth / identity
5export const WEBAUTHN_RP_NAME = `${OWNER_DISPLAY_NAME}'s Hearthforge`;
6export const ADMIN_USERNAME = "admin";
7export const VALID_USERNAME_RE = /^[a-zA-Z0-9_-]+$/;
8export const VALID_REPO_NAME_RE = /^[a-zA-Z0-9._-]+$/;
9export const ALLOWED_REACTIONS = new Set([
10 "👍",
11 "👎",
12 "❤️",
13 "🎉",
14 "😕",
15 "👀",
16 "🚀",
17]);
18export const VALID_KEY_TYPES = new Set([
19 "ssh-rsa",
20 "ssh-ed25519",
21 "ecdsa-sha2-nistp256",
22 "ecdsa-sha2-nistp384",
23 "ecdsa-sha2-nistp521",
24 "sk-ssh-ed25519@openssh.com",
25 "sk-ecdsa-sha2-nistp256@openssh.com",
26]);
27export const CHALLENGE_TTL_MS = 5 * 60 * 1000;
28
29// Pagination
30export const REPOS_PER_PAGE = 20;
31export const COMMITS_PER_PAGE = 30;
32export const ISSUES_PER_PAGE = 20;
33export const PATCHES_PER_PAGE = 20;
34export const RELEASES_PER_PAGE = 20;
35
36// Cache sizes
37export const MAX_MD_CACHE = 50;
38export const MAX_FILE_CACHE = 500;
39export const MAX_DIFF_CACHE = 500;
40export const MAX_PATCH_CACHE = 100;
41
42// Paths
43export const DB_PATH = path.join(DATA_DIR, "hearthforge.db");
44export const REPOS_DIR = path.join(DATA_DIR, "repos");
45export const AVATARS_DIR = path.join(DATA_DIR, "avatars");
46export const RELEASES_DIR = path.join(DATA_DIR, "releases");
47export const SSH_HOST_KEY_PATH = path.join(DATA_DIR, "ssh_host_key");
48