import { Entity, EntityData } from './Entity';
import { TaskType, TaskState } from '../../common/enum/Task';
import { HookEvent } from './HookEvent';
export declare const HOST_NAME: string;
export declare const PID: number;
export interface TaskBaseData {
    taskWorker: string;
}
export interface TaskData<T = TaskBaseData> extends EntityData {
    taskId: string;
    type: TaskType;
    state: TaskState;
    targetName: string;
    authorId: string;
    authorIp: string;
    data: T;
    logPath?: string;
    logStorePosition?: string;
    attempts?: number;
    error?: string;
    bizId?: string;
}
export type SyncPackageTaskOptions = {
    authorId?: string;
    authorIp?: string;
    tips?: string;
    skipDependencies?: boolean;
    syncDownloadData?: boolean;
    forceSyncHistory?: boolean;
    registryId?: string;
    specificVersions?: Array<string>;
};
export interface CreateHookTaskData extends TaskBaseData {
    hookEvent: HookEvent;
}
export interface TriggerHookTaskData extends TaskBaseData {
    hookEvent: HookEvent;
    hookId: string;
    responseStatus?: number;
}
export interface CreateSyncPackageTaskData extends TaskBaseData {
    tips?: string;
    skipDependencies?: boolean;
    syncDownloadData?: boolean;
    forceSyncHistory?: boolean;
    specificVersions?: Array<string>;
}
export interface ChangesStreamTaskData extends TaskBaseData {
    since: string;
    last_package?: string;
    last_package_created?: Date;
    task_count?: number;
    registryId?: string;
}
export interface TaskUpdateCondition {
    taskId: string;
    attempts: number;
}
export type CreateHookTask = Task<CreateHookTaskData>;
export type TriggerHookTask = Task<TriggerHookTaskData>;
export type CreateSyncPackageTask = Task<CreateSyncPackageTaskData>;
export type ChangesStreamTask = Task<ChangesStreamTaskData>;
export declare class Task<T extends TaskBaseData = TaskBaseData> extends Entity {
    taskId: string;
    type: TaskType;
    state: TaskState;
    targetName: string;
    taskWorker: string;
    authorId: string;
    authorIp: string;
    data: T;
    logPath: string;
    logStorePosition: string;
    attempts: number;
    error: string;
    bizId?: string;
    constructor(data: TaskData<T>);
    resetLogPath(): void;
    setExecuteWorker(): void;
    private static create;
    static createSyncPackage(fullname: string, options?: SyncPackageTaskOptions): CreateSyncPackageTask;
    static createChangesStream(targetName: string, registryId?: string, since?: string): ChangesStreamTask;
    updateSyncData({ lastSince, taskCount, lastPackage }: SyncInfo): void;
    static createCreateHookTask(hookEvent: HookEvent): CreateHookTask;
    static createTriggerHookTask(hookEvent: HookEvent, hookId: string): TriggerHookTask;
    static createSyncBinary(targetName: string, lastData: any): Task;
    static needMergeWhenWaiting(type: TaskType): boolean;
    start(): TaskUpdateCondition;
}
export type SyncInfo = {
    lastSince: string;
    taskCount: number;
    lastPackage?: string;
};
