/** * Upload Queue - Manages persistent upload queue with retry logic */ import EventEmitter from 'eventemitter3'; import type { UploadTask } from '../models/Recording'; import { StorageManager } from '../storage/StorageManager'; /** * Events emitted by UploadQueue */ interface UploadQueueEvents { taskAdded: (task: UploadTask) => void; taskUpdated: (task: UploadTask) => void; taskCompleted: (taskId: string, recordingId: string) => void; taskFailed: (taskId: string, error: Error) => void; uploadProgress: (taskId: string, progress: number) => void; queueEmpty: () => void; } /** * Upload Queue configuration */ export interface UploadQueueConfig { /** Maximum concurrent uploads (default: 2) */ maxConcurrent?: number; /** Maximum retry attempts (default: 6) */ maxRetries?: number; /** Auto-start processing (default: true) */ autoStart?: boolean; } /** * Upload Queue class */ export declare class UploadQueue extends EventEmitter { private storage; private uploader; private maxConcurrent; private maxRetries; private activeUploads; private isPaused; private isProcessing; private abortControllers; constructor(storage: StorageManager, config?: UploadQueueConfig); /** * Add a new upload task to the queue */ enqueue(params: { recordingId: string; deviceId: string; localPath: string; uploadUrl: string; uploadToken?: string; completeUrl?: string; contentType?: string; /** P9.F2: device-computed SHA-256 (hex) forwarded to completeUrl. */ contentSha256?: string; /** P10: BLE-e2e relay upload — see UploadTask.relay. */ relay?: { url: string; bearerToken: string; }; }): Promise; /** * Cancel a specific upload task */ cancel(taskId: string): Promise; /** * Cancel all uploads */ cancelAll(): Promise; /** * Pause queue processing */ pause(): void; /** * Resume queue processing */ resume(): void; /** * Retry all failed uploads */ retryFailed(): Promise; /** * Get all pending tasks */ getPendingTasks(): UploadTask[]; /** * Get all tasks */ getAllTasks(): UploadTask[]; /** * Process the upload queue */ private processQueue; /** * Process a single upload task */ private processTask; /** * Clean up resources */ destroy(): void; } export {}; //# sourceMappingURL=UploadQueue.d.ts.map