export type JobStatus = 'start' | 'pause' | 'cancel' | 'resume' | 'done' | 'error' | 'progress'; export type JobTemplateName = 'job_transport_upload_form' | 'job_transport_download' | string; export interface JobOptions { timeout?: number; wifiOnly?: boolean; tags?: string[]; group?: string; validations?: Record; } export interface JobQueryParams { beginAt?: number; endAt?: number; status?: string; template: string; tags?: string[]; } export interface JobUploadFormTask { fileName: string; fileType: string; filePath: string; uploadThumbnail?: boolean; keyAlias?: Record; } export interface JobDownloadTask { url: string; fileName: string; fileType: string; fileSize: number; destPath: string; saveSystem?: boolean; } export interface TransportUploadFormInfo { headers?: Record; params?: Record; url: string; uploadMode?: 'stream' | 'fragment'; fragmentSize?: number; tasks: JobUploadFormTask[]; } export interface TransportDownloadInfo { headers?: Record; tasks: JobDownloadTask[]; } export interface JobHeaders { [key: string]: any; } export interface JobResponse { id: string; createdAt: number; updatedAt: number; status: string; job: { template: JobTemplateName; info: TransportUploadFormInfo | TransportDownloadInfo; options: JobOptions; }; report?: any; } export interface JobErrorSummary { importSummary: number; importError: number; exportSummary: number; exportError: number; } export type EventJobStart = JobResponse; export type EventJobPause = JobResponse; export type EventJobCancel = JobResponse; export type EventJobResume = JobResponse; export type EventJobRetry = JobResponse; export type EventJobDone = { report: { code: number; message: string; result: any; seqId: string; }; } & JobResponse; export type EventJobError = { report: { code: number; message: string; result: any; seqId: string; }; } & JobResponse; export type EventJobProgress = { report: { currentTask: number; currentSize: number; totalSize: number; seqId: string; }; } & JobResponse;