import { TaskState, TaskType } from '../../common/enum/Task.ts';
import { Entity, type EntityData } from './Entity.ts';
import type { HookEvent } from './HookEvent.ts';
import { type DIST_NAMES } from './Package.ts';
export declare const HOST_NAME: string;
export declare const PID: number;
export interface TaskBaseData {
    taskWorker: string;
    shouldNotMerge?: boolean;
}
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 interface SyncPackageTaskOptions {
    authorId?: string;
    authorIp?: string;
    tips?: string;
    skipDependencies?: boolean;
    syncDownloadData?: boolean;
    forceSyncHistory?: boolean;
    force?: boolean;
    registryId?: string;
    specificVersions?: string[];
}
export interface UpdateProxyCacheTaskOptions {
    fullname: string;
    version?: string;
    fileType: DIST_NAMES;
}
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;
    force?: boolean;
    specificVersions?: string[];
}
export interface CreateUpdateProxyCacheTaskData extends TaskBaseData {
    fullname: string;
    version?: string;
    fileType: DIST_NAMES;
    filePath: string;
}
export type SyncBinaryTaskData = Record<string, unknown> & TaskBaseData;
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 type CreateUpdateProxyCacheTask = Task<CreateUpdateProxyCacheTaskData>;
export type SyncBinaryTask = Task<SyncBinaryTaskData>;
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?: Record<string, unknown>): Task;
    needMergeWhenWaiting(): boolean;
    static createUpdateProxyCache(targetName: string, options: UpdateProxyCacheTaskOptions): CreateUpdateProxyCacheTask;
    start(): TaskUpdateCondition;
}
export interface SyncInfo {
    lastSince: string;
    taskCount: number;
    lastPackage?: string;
}
