import { ExternalTask } from '@5minds/processcube_engine_sdk';
import { InternalIdentity as Identity } from '../../Contracts/index';
import { ProxyConfiguration } from '../../Setups/EngineRouter';
import { ExternalTaskDatabaseAdapter, IamService } from '../../Tools/index';
import { CancellationToken } from '../CancellationToken';
type FetchAndLockOptions = {
    workerId: string;
    topics: string | Array<string>;
    maxTasks: number;
    lockDuration: number;
    longPollingTimeoutInMs?: number;
    payloadFilter?: RegExp;
};
export declare class ExternalTaskFetchAndLockService {
    private readonly externalTaskAdapter;
    private readonly iamService;
    private readonly logger;
    constructor(externalTaskDatabaseAdapter: ExternalTaskDatabaseAdapter, iamService: IamService);
    dispose(): Promise<void>;
    fetchAndLockExternalTasks<TPayload extends Record<string, any>>(identity: Identity, options: FetchAndLockOptions, cancellationToken?: CancellationToken): Promise<Array<ExternalTask<TPayload>>>;
    extendLock(identity: Identity, workerId: string, externalTaskId: string, additionalDuration: number): Promise<void>;
    updateExpirationTimeForExternalTaskIds(externalTaskIds: Array<string>, lockExpirationTime: Date): void;
    clearExpirationTimeForExternalTaskIds(externalTaskIds: Array<string>): void;
    private fetchOrWaitForExternalTasks;
    startExternalTaskExpirationTimers(): Promise<void>;
    private fetchAndLockExternalTasksSafely;
    private publishExternalTaskLockedNotifications;
    private lockForWorker;
    private unlockExternalTasks;
    private ensureExternalTaskCanBeAccessedByWorker;
    private startExternalTaskExpirationTimer;
    private clearExternalTaskExpirationTimer;
    private onExternalTaskLockExpired;
    private getLockExpirationDate;
    private ensureHasClaim;
}
export interface ExternalTaskFetchAndLockServiceProxy {
    fetchAndLockExternalTasks<TPayload extends Record<string, any>>(identity: Identity, options: FetchAndLockOptions, cancellationToken?: CancellationToken): Promise<Array<ExternalTask<TPayload>>>;
    extendLock(identity: Identity, workerId: string, externalTaskId: string, additionalDuration: number): Promise<void>;
    updateExpirationTimeForExternalTaskIds(externalTaskIds: Array<string>, lockExpirationTime: Date): Promise<void>;
    clearExpirationTimeForExternalTaskIds(externalTaskIds: Array<string>): Promise<void>;
}
export declare const ExternalTaskFetchAndLockServiceProxyConfiguration: ProxyConfiguration;
export {};
