import { ContextType } from '../activitypub/context';
import { VideoResolution } from '../videos/file/video-resolution.enum';
import { SendEmailOptions } from './emailer.model';
export declare type JobState = 'active' | 'completed' | 'failed' | 'waiting' | 'delayed' | 'paused';
export declare type JobType = 'activitypub-http-unicast' | 'activitypub-http-broadcast' | 'activitypub-http-fetcher' | 'activitypub-cleaner' | 'activitypub-follow' | 'video-file-import' | 'video-transcoding' | 'email' | 'video-import' | 'videos-views-stats' | 'activitypub-refresher' | 'video-redundancy' | 'video-live-ending' | 'actor-keys' | 'move-to-object-storage';
export interface Job {
    id: number;
    state: JobState;
    type: JobType;
    data: any;
    priority: number;
    progress: number;
    error: any;
    createdAt: Date | string;
    finishedOn: Date | string;
    processedOn: Date | string;
}
export declare type ActivitypubHttpBroadcastPayload = {
    uris: string[];
    signatureActorId?: number;
    body: any;
    contextType?: ContextType;
};
export declare type ActivitypubFollowPayload = {
    followerActorId: number;
    name: string;
    host: string;
    isAutoFollow?: boolean;
    assertIsChannel?: boolean;
};
export declare type FetchType = 'activity' | 'video-likes' | 'video-dislikes' | 'video-shares' | 'video-comments' | 'account-playlists';
export declare type ActivitypubHttpFetcherPayload = {
    uri: string;
    type: FetchType;
    videoId?: number;
};
export declare type ActivitypubHttpUnicastPayload = {
    uri: string;
    signatureActorId?: number;
    body: object;
    contextType?: ContextType;
};
export declare type RefreshPayload = {
    type: 'video' | 'video-playlist' | 'actor';
    url: string;
};
export declare type EmailPayload = SendEmailOptions;
export declare type VideoFileImportPayload = {
    videoUUID: string;
    filePath: string;
};
export declare type VideoImportTorrentPayloadType = 'magnet-uri' | 'torrent-file';
export declare type VideoImportYoutubeDLPayloadType = 'youtube-dl';
export declare type VideoImportYoutubeDLPayload = {
    type: VideoImportYoutubeDLPayloadType;
    videoImportId: number;
    fileExt?: string;
};
export declare type VideoImportTorrentPayload = {
    type: VideoImportTorrentPayloadType;
    videoImportId: number;
};
export declare type VideoImportPayload = VideoImportYoutubeDLPayload | VideoImportTorrentPayload;
export declare type VideoRedundancyPayload = {
    videoId: number;
};
interface BaseTranscodingPayload {
    videoUUID: string;
    isNewVideo?: boolean;
}
export interface HLSTranscodingPayload extends BaseTranscodingPayload {
    type: 'new-resolution-to-hls';
    resolution: VideoResolution;
    copyCodecs: boolean;
    hasAudio: boolean;
    isPortraitMode?: boolean;
    autoDeleteWebTorrentIfNeeded: boolean;
    isMaxQuality: boolean;
}
export interface NewWebTorrentResolutionTranscodingPayload extends BaseTranscodingPayload {
    type: 'new-resolution-to-webtorrent';
    resolution: VideoResolution;
    hasAudio: boolean;
    createHLSIfNeeded: boolean;
    isPortraitMode?: boolean;
}
export interface MergeAudioTranscodingPayload extends BaseTranscodingPayload {
    type: 'merge-audio-to-webtorrent';
    resolution: VideoResolution;
    createHLSIfNeeded: true;
}
export interface OptimizeTranscodingPayload extends BaseTranscodingPayload {
    type: 'optimize-to-webtorrent';
}
export declare type VideoTranscodingPayload = HLSTranscodingPayload | NewWebTorrentResolutionTranscodingPayload | OptimizeTranscodingPayload | MergeAudioTranscodingPayload;
export interface VideoLiveEndingPayload {
    videoId: number;
}
export interface ActorKeysPayload {
    actorId: number;
}
export interface DeleteResumableUploadMetaFilePayload {
    filepath: string;
}
export interface MoveObjectStoragePayload {
    videoUUID: string;
    isNewVideo: boolean;
}
export {};
//# sourceMappingURL=job.model.d.ts.map