import { Stats } from 'fs'; import { FileLockManager } from '../security/fileLockManager.js'; import { ElementType } from '../portfolio/types.js'; export interface FileReadOptions { encoding?: BufferEncoding; source?: string; /** Override maximum file size for this operation (in bytes) */ maxSize?: number; } export interface FileWriteOptions { encoding?: BufferEncoding; source?: string; atomic?: boolean; /** Override maximum file size for this operation (in bytes) */ maxSize?: number; } export interface FileOperationOptions { source?: string; } export interface FileOperationsConfig { /** Enable verbose audit logging for read operations (default: false) */ verboseAudit?: boolean; /** Maximum file size in bytes (default: 10MB) */ maxFileSize?: number; } export interface IFileOperationsService { /** * Read a file securely with atomic locking * @param filePath - Absolute path to file * @param elementType - Element type for context (optional for generic files) * @param options - Read options */ readFile(filePath: string, options?: FileReadOptions): Promise; /** * Read an element file (wrapper around readFile with specific logging) * @param filePath - Absolute path to file * @param elementType - Element type * @param options - Read options */ readElementFile(filePath: string, elementType: ElementType, options?: FileReadOptions): Promise; /** * Write a file securely with atomic locking * @param filePath - Absolute path to file * @param content - Content to write * @param options - Write options */ writeFile(filePath: string, content: string, options?: FileWriteOptions): Promise; /** * Delete a file securely * @param filePath - Absolute path to file * @param elementType - Element type for context (optional) * @param options - Operation options */ deleteFile(filePath: string, elementType?: ElementType, options?: FileOperationOptions): Promise; /** * Create a directory if it doesn't exist * @param directoryPath - Absolute path to directory */ createDirectory(directoryPath: string): Promise; /** * List files in a directory * @param directoryPath - Absolute path to directory */ listDirectory(directoryPath: string): Promise; /** * List directory contents with type information * @param directoryPath - Absolute path to directory * @returns Array of entries with name and type info */ listDirectoryWithTypes(directoryPath: string): Promise>; /** * Rename/Move a file or directory * @param oldPath - Current absolute path * @param newPath - New absolute path */ renameFile(oldPath: string, newPath: string): Promise; /** * Check if a file or directory exists * @param filePath - Absolute path to check */ exists(filePath: string): Promise; /** * Get file statistics * @param filePath - Absolute path to the file * @returns File statistics */ stat(filePath: string): Promise; /** * Resolve a relative path to absolute path within a base directory * @param relativePath - Relative path to resolve * @param baseDirectory - Base directory for resolution */ resolvePath(relativePath: string, baseDirectory: string): string; /** * Validate a path doesn't contain traversal attempts * @param filePath - Path to validate * @param baseDirectory - Base directory to constrain to */ validatePath(filePath: string, baseDirectory: string): boolean; /** * Create a file atomically - fails if file already exists (prevents TOCTOU race conditions) * @param filePath - Absolute path to file * @param content - Content to write * @param options - Write options * @returns true if created, false if file already existed */ createFileExclusive(filePath: string, content: string, options?: FileWriteOptions): Promise; /** * Copy a file from source to destination * @param sourcePath - Absolute path to source file * @param destPath - Absolute path to destination * @param options - Operation options */ copyFile(sourcePath: string, destPath: string, options?: FileOperationOptions): Promise; /** * Change file permissions * @param filePath - Absolute path to file * @param mode - Permission mode (e.g., 0o644) * @param options - Operation options */ chmod(filePath: string, mode: number, options?: FileOperationOptions): Promise; /** * Append content to a file * @param filePath - Absolute path to file * @param content - Content to append * @param options - Write options */ appendFile(filePath: string, content: string, options?: FileWriteOptions): Promise; } export declare class FileOperationsService implements IFileOperationsService { private fileLockManager; private readonly defaultMaxFileSize; private config; constructor(fileLockManager: FileLockManager, config?: FileOperationsConfig); readFile(filePath: string, options?: FileReadOptions): Promise; readElementFile(filePath: string, elementType: ElementType, options?: FileReadOptions): Promise; writeFile(filePath: string, content: string, options?: FileWriteOptions): Promise; deleteFile(filePath: string, elementType?: ElementType, options?: FileOperationOptions): Promise; createDirectory(directoryPath: string): Promise; exists(filePath: string): Promise; /** * Get file statistics * @param filePath - Absolute path to the file * @returns File statistics */ stat(filePath: string): Promise; listDirectory(directoryPath: string): Promise; listDirectoryWithTypes(directoryPath: string): Promise>; renameFile(oldPath: string, newPath: string): Promise; resolvePath(relativePath: string, baseDirectory: string): string; validatePath(filePath: string, baseDirectory: string): boolean; createFileExclusive(filePath: string, content: string, options?: FileWriteOptions): Promise; copyFile(sourcePath: string, destPath: string, options?: FileOperationOptions): Promise; chmod(filePath: string, mode: number, options?: FileOperationOptions): Promise; appendFile(filePath: string, content: string, options?: FileWriteOptions): Promise; } //# sourceMappingURL=FileOperationsService.d.ts.map