/** * Available configuration sources */ export const ConfigSource = { env: 'env', db: 'db', } as const; export type ConfigSource = typeof ConfigSource[keyof typeof ConfigSource]; /** * Metadata for a configuration value */ export interface ConfigDefinition { defaultValue: T; envVarName?: string; isSecret?: boolean; } /** * Helper function for defining configurations with type safety */ export const defineConfig = (config: ConfigDefinition): ConfigDefinition => config; /** * Interface for loading configuration values */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export interface IConfigLoader> { /** * Load configurations from environment variables */ loadFromEnv(): Promise>; /** * Load configurations from database */ loadFromDB(): Promise>; } // eslint-disable-next-line @typescript-eslint/no-explicit-any export type RawConfigData> = Record; }>; export type UpdateConfigOptions = { skipPubsub?: boolean }; /** * Interface for managing configuration values */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export interface IConfigManager> { /** * Load configurations * @param options.source - Specify which source to load from */ loadConfigs(options?: { source?: ConfigSource }): Promise; /** * Get a configuration value */ getConfig(key: T, source?: ConfigSource): V[T]; /** * Update a configuration value */ updateConfig(key: T, value: V[T], options?: UpdateConfigOptions): Promise; /** * Update multiple configuration values */ updateConfigs(updates: Partial<{ [T in K]: V[T] }>, options?: UpdateConfigOptions): Promise; /** * Remove multiple configuration values */ removeConfigs(keys: K[], options?: UpdateConfigOptions): Promise; /** * Get environment variables managed with ConfigDefinitions */ getManagedEnvVars(showSecretValues: boolean): Record; }