/**
 * DigitalOcean Spaces FileSystem Implementation
 *
 * Provides async filesystem operations using DigitalOcean Spaces (S3-compatible) storage.
 * Uses AWS SDK v3 for S3-compatible operations with DigitalOcean endpoints.
 *
 * Features:
 * - Full S3-compatible API through DigitalOcean Spaces
 * - Async-only operations (no sync support for cloud storage)
 * - Intelligent caching for improved performance
 * - Directory simulation using object prefixes
 * - Concurrent operations support
 * - Comprehensive error handling
 *
 * @example
 * ```typescript
 * import { createDigitalOceanSpacesFileSystem } from '@synet/fs';
 *
 * const doFS = createDigitalOceanSpacesFileSystem({
 *   endpoint: 'https://nyc3.digitaloceanspaces.com',
 *   accessKeyId: 'your-access-key',
 *   secretAccessKey: 'your-secret-key',
 *   bucket: 'my-space',
 *   region: 'nyc3'
 * });
 *
 * await doFS.writeFile('config.json', JSON.stringify(config));
 * const data = await doFS.readFile('config.json');
 * ```
 */
import type { FileStats, IAsyncFileSystem } from "./filesystem.interface";
/**
 * Configuration options for DigitalOcean Spaces FileSystem
 */
export interface DigitalOceanSpacesOptions {
    /** DigitalOcean Spaces endpoint (e.g., https://nyc3.digitaloceanspaces.com) */
    endpoint: string;
    /** DO Spaces access key ID */
    accessKeyId: string;
    /** DO Spaces secret access key */
    secretAccessKey: string;
    /** DO Spaces bucket/space name */
    bucket: string;
    /** DO region (e.g., nyc3, sgp1, ams3) */
    region: string;
    /** Optional prefix for all operations (useful for namespacing) */
    prefix?: string;
}
/**
 * DigitalOcean Spaces FileSystem implementation using S3-compatible API
 *
 * Provides async filesystem operations against DigitalOcean Spaces storage,
 * which is fully S3-compatible with some DigitalOcean-specific optimizations.
 */
export declare class DigitalOceanSpacesFileSystem implements IAsyncFileSystem {
    private s3Client;
    private options;
    private cache;
    constructor(options: DigitalOceanSpacesOptions);
    /**
     * Get the DO Spaces object key with prefix applied
     */
    private getDOKey;
    /**
     * Remove prefix from DO Spaces object key to get local path
     */
    private getLocalPath;
    /**
     * Check if an error is a "not found" error
     */
    private isNotFoundError;
    /**
     * Convert DO Spaces response stream to string
     */
    private streamToString; /**
     * Read file content from DigitalOcean Spaces
     */
    readFile(path: string): Promise<string>;
    /**
     * Write file content to DigitalOcean Spaces
     */
    writeFile(path: string, content: string): Promise<void>;
    /**
     * Check if file exists in DigitalOcean Spaces
     */
    exists(path: string): Promise<boolean>;
    /**
     * Delete file from DigitalOcean Spaces
     */
    deleteFile(path: string): Promise<void>;
    /**
     * List directory contents (simulated using object prefixes)
     */
    readDir(path: string): Promise<string[]>;
    /**
     * Delete directory and all its contents from DigitalOcean Spaces
     */
    deleteDir(path: string): Promise<void>;
    /**
     * Get file statistics
     */
    stat(path: string): Promise<FileStats>;
    /**
     * Get content type based on file extension
     */
    private getContentType;
    /**
     * Ensure directory exists (no-op for DO Spaces as directories are virtual)
     */
    ensureDir(path: string): Promise<void>;
    /**
     * Change file permissions (no-op for DO Spaces as it doesn't support POSIX permissions)
     */
    chmod(path: string, mode: number): Promise<void>;
    /**
     * Get DigitalOcean Spaces bucket and configuration information
     */
    getSpaceInfo(): {
        bucket: string;
        prefix: string;
        region: string;
        endpoint: string;
    };
}
/**
 * Factory function to create a new DigitalOcean Spaces FileSystem instance
 */
export declare function createDigitalOceanSpacesFileSystem(options: DigitalOceanSpacesOptions): DigitalOceanSpacesFileSystem;
