/** * Unified Configuration — ~/.personal-suite/config.json * * Single config file for all modules. Each module has its own section. * Config is loaded lazily and cached. Writes are atomic (write to tmp, rename). */ export interface OAuthTokens { accessToken: string; refreshToken?: string; expiresAt?: number; clientId?: string; clientSecret?: string; } export interface ImapSmtpConfig { host: string; port: number; user: string; password: string; tls?: boolean; } export interface EmailConfig { provider: 'gmail' | 'outlook' | 'imap'; oauth?: OAuthTokens; imap?: ImapSmtpConfig; smtp?: ImapSmtpConfig; fromName?: string; fromAddress?: string; } export interface CalDAVConfig { url: string; username: string; password: string; defaultCalendarId?: string; } export interface CalendarConfig { provider: 'google' | 'caldav'; oauth?: OAuthTokens; caldav?: CalDAVConfig; defaultCalendarId?: string; } export interface TelegramConfig { botToken: string; defaultChatId?: string; } export interface DiscordConfig { botToken: string; defaultChannelId?: string; } export interface SlackConfig { botToken: string; signingSecret?: string; defaultChannelId?: string; } export interface WhatsAppConfig { sessionPath?: string; } export interface MessagingConfig { telegram?: TelegramConfig; discord?: DiscordConfig; slack?: SlackConfig; whatsapp?: WhatsAppConfig; } export interface SearchConfig { /** Self-hosted SearXNG instance URL (privacy-focused, free) */ searxngUrl?: string; /** Brave Search API key (2000 queries/month free tier) */ braveApiKey?: string; /** Exa API key — enables search_semantic + search_code_context (neural search) */ exaApiKey?: string; /** Tavily API key — enables search_research (LLM-optimized deep research) */ tavilyApiKey?: string; } export interface ImageConfig { /** OpenAI API key for DALL-E 3 */ openaiApiKey?: string; /** fal.ai API key for Flux models */ fluxApiKey?: string; /** Google AI API key for Gemini Imagen 3 */ geminiApiKey?: string; } export interface SuiteConfig { email?: EmailConfig; calendar?: CalendarConfig; messaging?: MessagingConfig; search?: SearchConfig; image?: ImageConfig; } export declare function getConfigDir(): string; export declare function getConfigPath(): string; export declare function loadConfig(): Promise; export declare function saveConfig(config: SuiteConfig): Promise; export declare function updateConfig(updater: (config: SuiteConfig) => SuiteConfig): Promise; /** * Clear the in-memory config cache. * Useful after external config changes. */ export declare function clearConfigCache(): void; export interface ModuleStatus { email: { configured: boolean; provider?: string; }; calendar: { configured: boolean; provider?: string; }; messaging: { configured: boolean; platforms: string[]; }; search: { configured: boolean; engines: string[]; }; image: { configured: boolean; providers: string[]; }; } export declare function getModuleStatus(): Promise; //# sourceMappingURL=config.d.ts.map