feat: in-app support form with email + Gitea issue integration (v0.49.0)
Users can now report bugs, suggestions, or questions from a new /support page. Each submission sends a confirmation email and, when GITEA_URL/ GITEA_TOKEN/GITEA_REPO are configured in admin Settings, opens a labeled issue on that repo automatically (best-effort — failure doesn't block the ticket). Admins get a Support section to triage status and retry failed Gitea issue creation. New support_tickets table, gitea.ts client, site-settings entries for the three new secrets, and OpenAPI docs for the two user-facing endpoints. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -15,13 +15,17 @@ export type SiteSettingKey =
|
||||
| "DEFAULT_VISION_PROVIDER"
|
||||
| "DEFAULT_VISION_MODEL"
|
||||
| "DEFAULT_MEAL_PLAN_PROVIDER"
|
||||
| "DEFAULT_MEAL_PLAN_MODEL";
|
||||
| "DEFAULT_MEAL_PLAN_MODEL"
|
||||
| "GITEA_URL"
|
||||
| "GITEA_TOKEN"
|
||||
| "GITEA_REPO";
|
||||
|
||||
const SECRET_KEYS: SiteSettingKey[] = [
|
||||
"OPENAI_API_KEY",
|
||||
"ANTHROPIC_API_KEY",
|
||||
"OPENROUTER_API_KEY",
|
||||
"VAPID_PRIVATE_KEY",
|
||||
"GITEA_TOKEN",
|
||||
];
|
||||
|
||||
export function isSecretKey(key: SiteSettingKey): boolean {
|
||||
@@ -58,6 +62,9 @@ export async function getAllSiteSettings(): Promise<Record<string, { value: stri
|
||||
"DEFAULT_VISION_MODEL",
|
||||
"DEFAULT_MEAL_PLAN_PROVIDER",
|
||||
"DEFAULT_MEAL_PLAN_MODEL",
|
||||
"GITEA_URL",
|
||||
"GITEA_TOKEN",
|
||||
"GITEA_REPO",
|
||||
];
|
||||
|
||||
const result: Record<string, { value: string | null; isSecret: boolean; fromDb: boolean }> = {};
|
||||
|
||||
Reference in New Issue
Block a user