import type { Logger } from "@objectif-lune/core"; import { EventEmitter } from "events"; import type { OLConnectRestApi } from "../../api/interfaces"; interface Progress { percentage: number; established: number; waitMS: number; } export declare enum ProgressEvents { START = "start", PROGRESS = "progress", CANCELED = "canceled", FINISH = "finish" } type Requester = (connection: OLConnectRestApi, logger: Logger, operationId: string, service: string) => Promise; export declare class ProgressingOperation extends EventEmitter implements Promise { protected readonly connection: OLConnectRestApi; protected readonly logger: Logger; protected readonly service: string; protected readonly operationIdPromise: Promise; protected readonly progressRequest: Requester; protected readonly cancelRequest: Requester; protected readonly resultRequest: Requester | null; [Symbol.toStringTag]: string; readonly START = ProgressEvents.START; readonly CANCELED = ProgressEvents.CANCELED; readonly PROGRESS = ProgressEvents.PROGRESS; readonly FINISH = ProgressEvents.FINISH; protected resultPromise: Promise; protected resolver: (value: ResultType | PromiseLike) => void; protected rejecter: (reason?: unknown) => void; protected operationId: string; protected handle?: NodeJS.Timeout; protected progress: Progress; protected startedMS: number; private active; constructor(connection: OLConnectRestApi, logger: Logger, service: string, operationIdPromise: Promise, progressRequest: Requester, cancelRequest: Requester, resultRequest: Requester | null); then(onfulfilled?: ((value: ResultType) => TResult1 | PromiseLike) | null | undefined, onrejected?: ((reason: Error) => TResult2 | PromiseLike) | null | undefined): Promise; catch(onrejected?: ((reason: Error) => TResult | PromiseLike) | null | undefined): Promise; finally(onfinally?: (() => void) | null | undefined): Promise; on(event: ProgressEvents.START, listener: (operationId: string) => void): this; on(event: ProgressEvents.PROGRESS, listener: (operationId: string, elapsedMiliseconds: number, progress: string) => void): this; on(event: ProgressEvents.CANCELED, listener: (operationId: string, elapsedMiliseconds: number, progress: string) => void): this; on(event: ProgressEvents.FINISH, listener: (operationId: string, elapsedMiliseconds: number) => void): this; cancel(): void; protected fail(err: unknown): void; protected success(value: ResultType): void; protected start(operationId: string): void; protected requestProgress(): void; protected requestResult(): void; } export {};