/** * Task status enum */ export declare enum TaskStatus { Pending = "pending", Uploading = "uploading", ServerChecking = "server_checking", Paused = "paused", Completed = "completed", Failed = "failed", Cancelled = "cancelled" } /** * File status enum */ export declare enum FileStatus { Pending = "pending", Uploading = "uploading", ServerChecking = "checking", Completed = "completed", Failed = "failed", Skipped = "skipped", Cancelled = "cancelled" } /** * File filter function * @param file - The file to check * @param relativePath - The relative path of the file * @returns true to filter out (skip) the file, false to include it */ export declare type FileFilterFunction = (file: File, relativePath: string) => boolean; /** * Upload task options */ export interface UploadTaskOptions { baseDir: string; spaceId?: number; groupId?: number; maxConcurrency?: number; smallFileCompression?: SmallFileCompressionOptions; filterFile?: FileFilterFunction; saveTimestamp?: boolean; onProgress?: (progress: TaskProgress) => void; onFileStart?: (file: FileProgress) => void; onFileComplete?: (file: FileProgress) => void; onComplete?: (summary: TaskSummary) => void; onError?: (error: TaskError) => void; debugMode?: boolean; } /** * Task progress */ export interface TaskProgress { taskId: number; taskName: string; status: TaskStatus; totalFiles: number; pendingFiles: number; uploadingFiles: number; completedFiles: number; uploadedFiles: number; failedFiles: number; skippedFiles: number; totalSize: number; uploadedSize: number; transferringSize: number; percentage: number; speed: number; averageSpeed: number; elapsedTime: number; estimatedTime: number; startTime: number; endTime?: number; } /** * Task report info (for internal reporting) */ export interface TaskReportInfo { pathList: string[]; remotePath: string[]; firstFileName: string; totalFiles: number; } /** * File progress */ export interface FileProgress { requestId: number; fileName: string; relativePath: string; uploadPath: string; status: FileStatus; uploadedSize: number; totalSize: number; percentage: number; speed: number; isBundle?: boolean; isCompressed?: boolean; bundleRelativePath?: string; error?: { code: number; message: string; }; startTime?: number; endTime?: number; } /** * Task summary */ export interface TaskSummary { taskId: number; taskName: string; status: TaskStatus; totalFiles: number; successCount: number; failedCount: number; skippedCount: number; totalSize: number; uploadedSize: number; duration: number; averageSpeed: number; failedFiles: Array<{ path: string; error: string; errorCode: number; }>; startTime: number; endTime: number; } /** * Task error */ export interface TaskError { taskId: number; message: string; code: number; } /** * Scanned file */ export interface ScannedFile { file: File; relativePath: string; targetDir: string; isEmptyDirectory?: boolean; isBundle?: boolean; isCompressed?: boolean; bundleRelativePath?: string; bundleSourceCount?: number; bundleSourceSize?: number; bundleSourceFiles?: BundleSourceFileMeta[]; } export interface BundleSourceFileMeta { relativePath: string; targetDir: string; fileName: string; size: number; isCompressed?: boolean; bundleRelativePath?: string; } /** * Queued file */ export interface QueuedFile extends ScannedFile { requestId: number; status: FileStatus; uploadPath: string; uploadedSize: number; totalSize: number; error?: { code: number; message: string; }; startTime?: number; endTime?: number; } export interface SmallFileCompressionOptions { /** * Enable/disable small file bundle compression. */ enabled?: boolean; /** * Maximum file size (bytes) to be considered as a small file. * Default: 64 * 1024 (64KB) */ maxFileSize?: number; /** * Maximum number of files per bundle. * Default: 2000 */ maxFilesPerBundle?: number; /** * Maximum total raw bytes per bundle before flushing. * Default: 8 * 1024 * 1024 (8MB) */ maxBundleBytes?: number; /** * Maximum number of files allowed to enter compression mode. * Once exceeded, new small files will be uploaded normally. * Default: 50000 */ maxCompressedFiles?: number; /** * Minimum file count needed to build a bundle. * If pending files are fewer than this value, they are uploaded normally. * Default: 20 */ minFilesPerBundle?: number; /** * Zip compression level (0-9), smaller is faster. * Default: 1 */ compressionLevel?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; /** * Bundle file name prefix. * Default: .raysync-small-bundle */ bundleNamePrefix?: string; }