/**
* Multimedia Storage Manager Infrastructure
*
* Advanced multimedia storage system with multi-cloud support,
* intelligent caching, and content optimization.
*/
///
///
///
import { EventEmitter } from "events";
import { MultimediaStorageConfig, ServiceResponse, PerformanceMetrics } from "../interfaces.js";
export interface StorageProvider {
name: string;
type: "local" | "cloud" | "hybrid";
endpoint: string;
credentials: ProviderCredentials;
features: ProviderFeatures;
limits: ProviderLimits;
}
export interface ProviderCredentials {
accessKey?: string;
secretKey?: string;
token?: string;
region?: string;
project?: string;
}
export interface ProviderFeatures {
encryption: boolean;
versioning: boolean;
lifecycle: boolean;
caching: boolean;
streaming: boolean;
transcoding: boolean;
}
export interface ProviderLimits {
maxFileSize: number;
maxBandwidth: number;
maxRequests: number;
storageQuota: number;
}
export interface MultimediaFile {
id: string;
name: string;
type: "image" | "video" | "audio" | "document" | "other";
format: string;
size: number;
checksum: string;
metadata: FileMetadata;
storage: StorageLocation[];
status: "uploading" | "stored" | "processing" | "error";
}
export interface FileMetadata {
created: Date;
modified: Date;
accessed: Date;
contentType: string;
encoding?: string;
duration?: number;
dimensions?: Dimensions;
quality?: QualityInfo;
tags: string[];
description?: string;
}
export interface Dimensions {
width: number;
height: number;
depth?: number;
}
export interface QualityInfo {
bitrate?: number;
sampleRate?: number;
colorDepth?: number;
compression?: string;
}
export interface StorageLocation {
provider: string;
bucket: string;
key: string;
region: string;
url: string;
replicated: boolean;
}
export interface UploadRequest {
file: File | Buffer | ReadableStream;
name: string;
type: string;
metadata?: Partial;
options?: UploadOptions;
}
export interface UploadOptions {
providers?: string[];
encryption?: boolean;
compression?: boolean;
transcoding?: TranscodingOptions;
caching?: CachingOptions;
validation?: ValidationOptions;
}
export interface TranscodingOptions {
enabled: boolean;
formats: TranscodingFormat[];
quality: TranscodingQuality[];
optimization: TranscodingOptimization;
}
export interface TranscodingFormat {
format: string;
container: string;
codec: string;
preset: string;
}
export interface TranscodingQuality {
name: string;
bitrate: number;
resolution?: Dimensions;
framerate?: number;
}
export interface TranscodingOptimization {
adaptive: boolean;
multipass: boolean;
hardware: boolean;
efficiency: "speed" | "quality" | "size";
}
export interface CachingOptions {
enabled: boolean;
ttl: number;
regions: string[];
strategy: "push" | "pull" | "hybrid";
}
export interface ValidationOptions {
checksum: boolean;
virus: boolean;
content: boolean;
metadata: boolean;
}
export interface DownloadRequest {
fileId: string;
format?: string;
quality?: string;
region?: string;
options?: DownloadOptions;
}
export interface DownloadOptions {
range?: ByteRange;
streaming?: boolean;
cache?: boolean;
transformation?: TransformationOptions;
}
export interface ByteRange {
start: number;
end: number;
}
export interface TransformationOptions {
resize?: ResizeOptions;
crop?: CropOptions;
rotate?: number;
filter?: FilterOptions;
}
export interface ResizeOptions {
width: number;
height: number;
mode: "fit" | "fill" | "stretch" | "crop";
quality: number;
}
export interface CropOptions {
x: number;
y: number;
width: number;
height: number;
}
export interface FilterOptions {
brightness?: number;
contrast?: number;
saturation?: number;
blur?: number;
sharpen?: number;
}
export interface StorageStats {
totalFiles: number;
totalSize: number;
byType: TypeStats[];
byProvider: ProviderStats[];
byRegion: RegionStats[];
bandwidth: BandwidthStats;
}
export interface TypeStats {
type: string;
files: number;
size: number;
percentage: number;
}
export interface ProviderStats {
provider: string;
files: number;
size: number;
cost: number;
performance: ProviderPerformance;
}
export interface ProviderPerformance {
uploadSpeed: number;
downloadSpeed: number;
availability: number;
latency: number;
}
export interface RegionStats {
region: string;
files: number;
size: number;
providers: string[];
}
export interface BandwidthStats {
upload: BandwidthUsage;
download: BandwidthUsage;
total: BandwidthUsage;
}
export interface BandwidthUsage {
current: number;
peak: number;
average: number;
limit: number;
}
export declare class MultimediaStorageManager extends EventEmitter {
private logger;
private config;
private providers;
private files;
private uploadManager;
private downloadManager;
private replicationManager;
private lifecycleManager;
private performanceMonitor;
private securityManager;
constructor(config: MultimediaStorageConfig);
/**
* Initializes the storage manager
*/
initialize(): Promise;
/**
* Uploads a multimedia file
*/
uploadFile(request: UploadRequest): Promise>;
/**
* Downloads a multimedia file
*/
downloadFile(request: DownloadRequest): Promise>;
/**
* Gets file metadata
*/
getFile(fileId: string): Promise>;
/**
* Lists files with filtering and pagination
*/
listFiles(filters?: FileFilters, pagination?: Pagination): Promise>;
/**
* Deletes a file
*/
deleteFile(fileId: string): Promise>;
/**
* Gets storage statistics
*/
getStats(): Promise>;
/**
* Gets performance metrics
*/
getMetrics(): Promise>;
private initializeComponents;
private setupEventHandlers;
private initializeProviders;
private validateUploadRequest;
private createFileRecord;
private getOptimalLocation;
private deleteFromLocation;
private calculateStats;
private calculateTypeStats;
private calculateProviderStats;
private calculateRegionStats;
private applyFilters;
private applyPagination;
private getFileSize;
private getMaxFileSize;
private isAllowedFileType;
private determineFileType;
private extractFormat;
private calculateChecksum;
private getProviderType;
private getProviderEndpoint;
private getProviderCredentials;
private getProviderFeatures;
private getProviderLimits;
private calculateProviderCost;
private generateFileId;
private generateRequestId;
private createErrorResponse;
private handleUploadProgress;
private handleDownloadProgress;
private handleReplicationCompleted;
private handleLifecycleApplied;
}
interface FileFilters {
type?: string;
format?: string;
minSize?: number;
maxSize?: number;
tags?: string[];
createdAfter?: Date;
createdBefore?: Date;
}
interface Pagination {
page: number;
limit: number;
}
interface FileListResult {
files: MultimediaFile[];
total: number;
page: number;
limit: number;
hasMore: boolean;
}
export {};
//# sourceMappingURL=multimedia-storage.d.ts.map