/** * Storage List Command * List all configured backup storage destinations */ import { getStorageCredentials, listBackupStorages } from '../../services/backup-storage'; import { celiloIntro } from '../prompts'; import type { CommandResult } from '../types'; export async function handleStorageList( _args: string[], _flags: Record = {}, ): Promise { try { celiloIntro('Backup Storage Destinations'); const storages = listBackupStorages(); if (storages.length === 0) { console.log('No backup storage destinations configured.\n'); console.log('Add storage:'); console.log(' celilo storage add local'); console.log(' celilo storage add s3'); return { success: true, message: 'No storage destinations found' }; } console.log(''); for (const storage of storages) { const statusIcon = storage.verified ? '✓' : '✗'; const statusText = storage.verified ? 'Verified' : 'Not Verified'; const defaultTag = storage.isDefault ? ' (default)' : ''; console.log(`${statusIcon} ${storage.storageId}${defaultTag} (${storage.name})`); console.log(` Provider: ${storage.providerName}`); // Show provider-specific details try { const creds = await getStorageCredentials(storage.id); if (storage.providerName === 'local' && 'path' in creds) { console.log(` Path: ${creds.path}/celilo-backups/`); } else if (storage.providerName === 's3' && 'bucket' in creds) { const s3 = creds as { bucket: string; endpoint: string }; console.log(` Bucket: ${s3.bucket}`); console.log(` Endpoint: ${s3.endpoint}`); } } catch { // Credentials may fail to decrypt — skip details } console.log(` Status: ${statusText}`); if (storage.verifiedAt) { console.log(` Verified: ${storage.verifiedAt.toISOString()}`); } if (storage.verificationError) { console.log(` Error: ${storage.verificationError}`); } console.log(` Created: ${storage.createdAt.toISOString()}`); console.log(''); } console.log( `Total: ${storages.length} storage destination${storages.length === 1 ? '' : 's'}\n`, ); return { success: true, message: `Found ${storages.length} storage destination(s)` }; } catch (error) { return { success: false, error: `Failed to list storage: ${error instanceof Error ? error.message : String(error)}`, }; } }