UNPKG

@synet/fs-digitalocean

Version:

DigitalOcean Spaces filesystem abstraction following FileSystem pattern

129 lines (128 loc) 4.07 kB
/** * 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;