export interface AppConfig { apiKey?: string; appName?: string; keyId?: string; keyName?: string; } export interface AccountConfig { accessToken?: string; accessTokenExpiresAt?: number; accountId: string; accountName: string; apps?: { [appId: string]: AppConfig; }; authMethod?: "oauth"; controlHost?: string; currentAppId?: string; endpoint?: string; oauthHost?: string; oauthSessionKey?: string; tokenId?: string; userEmail: string; } export interface OAuthSession { accessToken: string; accessTokenExpiresAt: number; oauthScope?: string; refreshToken: string; } export interface AblyConfig { accounts: Record; current?: { account?: string; /** @deprecated Legacy field migrated to account.currentAppId on first load */ app?: string; }; helpContext?: { conversation: { messages: { content: string; role: "assistant" | "user"; }[]; }; }; oauthSessions?: Record; } export interface ConfigManager { getAccessToken(): string | undefined; getCurrentAccount(): AccountConfig | undefined; getCurrentAccountAlias(): string | undefined; listAccounts(): { account: AccountConfig; alias: string; }[]; storeAccount(accessToken: string, alias: string, accountInfo: { accountId: string; accountName: string; tokenId?: string; userEmail: string; }): void; switchAccount(alias: string): boolean; removeAccount(alias: string): boolean; storeOAuthTokens(alias: string, tokens: { accessToken: string; refreshToken: string; expiresAt: number; scope?: string; userEmail?: string; }, accountInfo?: { accountId?: string; accountName?: string; controlHost?: string; oauthHost?: string; }): void; getOAuthTokens(alias?: string): { accessToken: string; refreshToken: string; expiresAt: number; } | undefined; isAccessTokenExpired(): boolean; getAuthMethod(alias?: string): "oauth" | undefined; getAliasesForOAuthSession(alias: string): string[]; clearOAuthSession(alias?: string): void; getApiKey(appId?: string): string | undefined; getAppName(appId: string): string | undefined; getAppConfig(appId: string): AppConfig | undefined; getCurrentAppId(): string | undefined; getKeyId(appId?: string): string | undefined; getKeyName(appId?: string): string | undefined; setCurrentApp(appId: string): void; storeAppInfo(appId: string, appInfo: { appName: string; }, accountAlias?: string): void; storeAppKey(appId: string, apiKey: string, metadata?: { appName?: string; keyId?: string; keyName?: string; }, accountAlias?: string): void; removeApiKey(appId: string): boolean; getEndpoint(alias?: string): string | undefined; storeEndpoint(endpoint: string, alias?: string): void; getHelpContext(): { conversation: { messages: { content: string; role: "assistant" | "user"; }[]; }; } | undefined; storeHelpContext(question: string, answer: string): void; clearHelpContext(): void; getConfigPath(): string; saveConfig(): void; reloadConfig(): void; } declare global { var __TEST_MOCKS__: { configManager?: ConfigManager; [key: string]: unknown; } | undefined; } /** * Factory function to create a ConfigManager instance. * In test mode (when ABLY_CLI_TEST_MODE is set and mock is available), * returns the MockConfigManager from globals. * Otherwise returns a new TomlConfigManager. */ export declare function createConfigManager(): ConfigManager; export declare class TomlConfigManager implements ConfigManager { private config; private configDir; private configPath; constructor(); clearHelpContext(): void; getAccessToken(): string | undefined; getApiKey(appId?: string): string | undefined; getAppName(appId: string): string | undefined; getAppConfig(appId: string): AppConfig | undefined; getEndpoint(alias?: string): string | undefined; getConfigPath(): string; getCurrentAccount(): AccountConfig | undefined; getCurrentAccountAlias(): string | undefined; getCurrentAppId(): string | undefined; getHelpContext(): { conversation: { messages: { content: string; role: "assistant" | "user"; }[]; }; } | undefined; getKeyId(appId?: string): string | undefined; getKeyName(appId?: string): string | undefined; listAccounts(): { account: AccountConfig; alias: string; }[]; removeAccount(alias: string): boolean; getAliasesForOAuthSession(alias: string): string[]; removeApiKey(appId: string): boolean; saveConfig(): void; reloadConfig(): void; setCurrentApp(appId: string): void; storeAccount(accessToken: string, alias: string | undefined, accountInfo: { accountId: string; accountName: string; tokenId?: string; userEmail: string; }): void; storeEndpoint(endpoint: string, alias?: string): void; storeAppInfo(appId: string, appInfo: { appName: string; }, accountAlias?: string): void; storeAppKey(appId: string, apiKey: string, metadata?: { appName?: string; keyId?: string; keyName?: string; }, accountAlias?: string): void; storeHelpContext(question: string, answer: string): void; storeOAuthTokens(alias: string, tokens: { accessToken: string; refreshToken: string; expiresAt: number; scope?: string; userEmail?: string; }, accountInfo?: { accountId?: string; accountName?: string; controlHost?: string; oauthHost?: string; }): void; getOAuthTokens(alias?: string): { accessToken: string; refreshToken: string; expiresAt: number; } | undefined; isAccessTokenExpired(): boolean; getAuthMethod(alias?: string): "oauth" | undefined; switchAccount(alias: string): boolean; clearOAuthSession(alias?: string): void; private ensureConfigDirExists; private loadConfig; }