mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-05-01 18:28:38 +00:00
- Implemented githubTokensDb for managing GitHub tokens with CRUD operations. - Created otificationPreferencesDb to handle user notification preferences. - Added projectsDb for project path management and related operations. - Introduced pushSubscriptionsDb for managing browser push subscriptions. - Developed scanStateDb to track the last scanned timestamp. - Established sessionsDb for session management with CRUD functionalities. - Created userDb for user management, including authentication and onboarding. - Implemented apidKeysDb for storing and managing VAPID keys. feat(database): define schema for new database tables - Added SQL schema definitions for users, API keys, user credentials, notification preferences, VAPID keys, push subscriptions, projects, sessions, scan state, and app configuration. - Included necessary indexes for performance optimization. refactor(shared): enhance type definitions and utility functions - Updated shared types and interfaces for improved clarity and consistency. - Added new types for credential management and provider-specific operations. - Refined utility functions for better error handling and message normalization.
54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
/**
|
|
* App config repository.
|
|
*
|
|
* Key-value store for application-level configuration that persists
|
|
* across restarts (JWT secret, feature flags, etc.). Values are always
|
|
* stored as strings; callers handle parsing.
|
|
*/
|
|
|
|
import crypto from 'crypto';
|
|
|
|
import { getConnection } from '@/modules/database/connection.js';
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Queries
|
|
// ---------------------------------------------------------------------------
|
|
|
|
export const appConfigDb = {
|
|
/** Returns the stored value for a config key, or null if missing. */
|
|
get(key: string): string | null {
|
|
try {
|
|
const db = getConnection();
|
|
const row = db
|
|
.prepare('SELECT value FROM app_config WHERE key = ?')
|
|
.get(key) as { value: string } | undefined;
|
|
return row?.value ?? null;
|
|
} catch {
|
|
// Swallow errors so early-startup reads (e.g. JWT secret) do not crash.
|
|
return null;
|
|
}
|
|
},
|
|
|
|
/** Inserts or updates a config key (upsert). */
|
|
set(key: string, value: string): void {
|
|
const db = getConnection();
|
|
db.prepare(
|
|
'INSERT INTO app_config (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value'
|
|
).run(key, value);
|
|
},
|
|
|
|
/**
|
|
* Returns the JWT signing secret, generating and persisting one
|
|
* if it does not already exist. This ensures the secret survives
|
|
* server restarts while being created automatically on first boot.
|
|
*/
|
|
getOrCreateJwtSecret(): string {
|
|
let secret = appConfigDb.get('jwt_secret');
|
|
if (!secret) {
|
|
secret = crypto.randomBytes(64).toString('hex');
|
|
appConfigDb.set('jwt_secret', secret);
|
|
}
|
|
return secret;
|
|
},
|
|
};
|