Skip to content

Manager API

const manager = new FirebaseUploadManager({
maxConcurrentUploads: 5, // 1-50, default: 5
chunkSize: 5 * 1024 * 1024, // 64KB-100MB, default: 5MB
retryAttempts: 3, // 0-10, default: 3
retryDelay: 1000, // 100-60000ms, default: 1000ms
autoStart: true, // default: false
enableSmartScheduling: true, // default: false
maxBandwidthMbps: 10, // 0.1-1000, default: 10
adaptiveBandwidth: true, // default: false
maxMemoryItems: 1000, // 10-100000, default: 1000
enablePersistence: false, // IndexedDB persistence, default: false
});
manager.setStorage(storage);

All state properties are reactive using Svelte 5 $state. Use them directly in your components.

PropertyTypeDescription
queueUploadItem[]Files queued for upload
activeMap<string, UploadItem>Currently uploading files
completedMap<string, UploadItem>Successfully uploaded files
failedMap<string, UploadItem>Failed uploads
pausedSet<string>Paused file IDs
isProcessingbooleanCurrently processing uploads
isPausedbooleanGlobal pause state
totalProgressnumberOverall progress 0-100
currentSpeednumberUpload speed in bytes/sec
estimatedTimeRemainingnumber | nullETA in seconds (null when not computing)
successCountnumberSuccessful upload count
failureCountnumberFailed upload count
isActivebooleanHas active uploads
isIdlebooleanNo processing, active, or queued files
// Basic — returns number of files added
await manager.addFiles(fileList, { path: 'photos/' });
// With validation — returns detailed results
const result = await manager.addFilesWithValidation(files, {
validate: true,
validationRules: {
maxSize: 10 * 1024 * 1024,
allowedTypes: ['image/*', '.pdf']
},
skipDuplicates: true,
checkResume: true
});
// result: { added, validated, duplicates, resumed, errors }
manager.getFile(fileId); // Single file by ID
manager.getAllFiles(); // All files
manager.getAllFiles('uploading'); // Filter by status
await manager.removeFile(fileId);
await manager.clearCompleted();
manager.clearFailed();
await manager.start(); // Start processing queue
await manager.pause(); // Pause all uploads
await manager.resume(); // Resume paused uploads
await manager.stop(); // Stop and clear everything
manager.retryFailed(); // Retry all failed uploads
await manager.destroy(); // Clean up all resources
// Single file
const result = await manager.validateFile(file, {
maxSize: 10 * 1024 * 1024,
allowedTypes: ['image/*', '.pdf']
});
// result: { valid: boolean, errors: string[], warnings: string[] }
// Multiple files
const results = await manager.validateFiles(files, rules);
// returns Map<File, ValidationResult>
// Duplicate detection
const dupes = await manager.detectDuplicates(files);
// returns Map<string, File[]> grouped by hash
// File metadata
const meta = await manager.getFileMetadata(file);
// { size, type, lastModified, hash, dimensions?, duration? }
const result = manager.updateConfig('maxConcurrentUploads', 10);
// { success: boolean, error?: string, warning?: string }
const config = manager.getConfig(); // Readonly snapshot
manager.getBandwidthStats();
// { current, average, peak, limit, utilization }
manager.getNetworkQuality();
// 'excellent' | 'good' | 'poor' | 'unknown'
manager.getRecommendedSettings();
// { maxConcurrent, chunkSize, timeout }
const health = await manager.performHealthCheck();
// { status, timestamp, duration, checks, details }
// checks: { connection, storage, permissions, network, memory, bandwidth }
const { canStart, healthResult } = await manager.startWithHealthCheck();
manager.getHealthStatus(); // Current status
manager.getLastHealthCheck(); // Last result
await manager.forceHealthCheck(); // Force re-check
manager.getQueueStats();
// { totalFiles, totalSize, sizeDistribution, estimatedCompletionTime, quickWinsAvailable }