/** * MockStorageAdapter - In-memory mock adapter for testing * * Provides a simple in-memory storage implementation for testing purposes. * Supports simulated failures, latency, and all standard operations. * * Features: * - In-memory file storage (Map-based) * - Configurable failure simulation * - Configurable latency simulation * - Full implementation of all adapter methods * - Health check support * * @example * ```ts * const adapter = new MockStorageAdapter({ * name: 'mock-storage', * type: STORAGE_ADAPTER_TYPE.MOCK, * simulateFailures: true, * failureRate: 0.1, // 10% failure rate * latency: 100, // 100ms simulated latency * }); * ``` */ import { BaseStorageAdapter } from '../base/BaseStorageAdapter'; import type { MockAdapterConfig, UploadParams, UploadResult, DownloadParams, DownloadResult, DeleteParams, FileDeleteResult, PresignedUrlOptions, PresignedUrlResult, AdapterHealthCheck, FileMetadata, BucketConfiguration, BUCKET_PURPOSE, StorageBucketInfo, StorageListFilesResult, StorageSignedUploadUrlResult, StorageListBucketsResult, StoragePublicUrlParams } from '@plyaz/types/storage'; /** * MockStorageAdapter - In-memory mock adapter for testing */ export declare class MockStorageAdapter extends BaseStorageAdapter { private readonly simulateFailures; private readonly failureRate; private readonly simulatedLatency; private readonly validation?; private files; private downloadCount; private uploadCount; private deleteCount; constructor(config: MockAdapterConfig); /** * Upload a file to mock storage */ upload(params: UploadParams): Promise; /** * Download a file from mock storage */ download(params: DownloadParams): Promise; /** * Delete a file from mock storage * Supports soft delete with grace period */ delete(params: DeleteParams): Promise; /** * Generate a presigned URL for file access */ getSignedUrl(options: PresignedUrlOptions): Promise; /** * Check if adapter is available */ isAvailable(): boolean; /** * Perform health check */ healthCheck(): Promise; /** * Simulate latency if configured */ private simulateLatency; /** * Maybe simulate a failure based on configuration */ private maybeSimulateFailure; /** * Generate a unique file ID */ private generateFileId; /** * Get file extension from filename */ private getFileExtension; /** * Convert ReadableStream to Buffer */ protected streamToBuffer(stream: globalThis.NodeJS.ReadableStream): Promise; /** * Get statistics (useful for testing) */ getStatistics(): { filesStored: number; uploadCount: number; downloadCount: number; deleteCount: number; totalSize: number; }; /** * Get all stored file metadata (useful for testing) */ getAllFiles(): FileMetadata[]; /** * Clear all stored files (useful for testing) */ clear(): void; /** * Check if a file exists (useful for testing) */ hasFile(fileId: string): boolean; /** * Get file metadata (required for compliance checks) */ getFileMetadata(fileId: string, _bucket?: string): Promise; /** * Restore a soft-deleted file */ restoreFile(fileId: string): Promise; /** * Translate bucket purpose to mock bucket name * Mock adapter uses simple naming: mock-{purpose} */ translateBucketPurpose(purpose: BUCKET_PURPOSE, _config: BucketConfiguration): string; /** * Create bucket (no-op for mock adapter) * Mock adapter doesn't need actual bucket creation */ createBucket(bucketName: string, purpose: BUCKET_PURPOSE): Promise; /** * List all buckets (mock implementation) */ listBuckets(): Promise; /** * Get bucket info (mock implementation) */ getBucket(bucketName: string): Promise; /** * Update bucket (no-op for mock) */ updateBucket(_params: unknown): Promise; /** * List files in bucket (mock implementation) */ listFiles(_params: unknown): Promise; /** * Move file (mock implementation) */ moveFile(_params: unknown): Promise; /** * Copy file (mock implementation) */ copyFile(_params: unknown): Promise; /** * Replace file (mock implementation) */ replaceFile(_params: unknown): Promise; /** * Create signed upload URL (mock implementation) */ createSignedUploadUrl(_params: unknown): Promise; /** * Get public URL (mock implementation) */ getPublicUrl(params: StoragePublicUrlParams): Promise; /** * Get file size limit for bucket purpose * Used by StorageService for validation */ getFileSizeLimit(purpose: BUCKET_PURPOSE): number | undefined; /** * Get allowed MIME types for bucket purpose * Used by StorageService for validation */ getAllowedMimeTypes(purpose: BUCKET_PURPOSE): string[] | undefined; /** * Generate file key/path for mock storage */ protected generateFileKey(params: UploadParams): string; }