import type { Transaction } from "../../transactions/index.js";
import type { ProgressObject, ProgressAddress, PassportObject, PermissionObject, MachineObject, RepositoryObject, CallEnv } from "../common.js";
import type { ManyAccountOrMark_Address } from "../local/index.js";
import type { ObjectMachine, MachineForward } from "../query/object.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
export type ProgressNext = {
    next_node_name: string;
    forward: string;
};
export interface CallProgress_Data {
    object: string;
    task?: string;
    repository?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    progress_namedOperator?: {
        op: "add" | "set" | "remove";
        name: string;
        operators: ManyAccountOrMark_Address;
    };
    operate?: {
        operation: ProgressNext;
        hold: boolean;
        adminUnhold?: boolean;
        message?: string;
    };
}
export declare class CallProgress extends CallBase {
    data: CallProgress_Data;
    object_address: string | undefined;
    machine: ObjectMachine | undefined;
    constructor(data: CallProgress_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    operate(env: CallEnv, tx: Transaction, passport?: PassportObject, submission?: GuardSubmissionToFill[]): Promise<void>;
}
export declare function progressFn(name: string): string;
export declare const MAX_CONTEXT_REPOSITORY_COUNT = 30;
export declare const MAX_NAMED_OPERATOR_COUNT = 60;
export declare const MAX_NAMED_OPERATOR_ADDRESS_COUNT = 80;
export interface Holder {
    forward: string;
    who?: string;
    retained_submission: any[];
    msg: string;
    accomplished: boolean;
    time: number | bigint | string;
}
export interface Session {
    next_node: string;
    forwards: Holder[];
    weights: number;
    threshold: number;
}
export interface History {
    node: string;
    next_node: string;
    session: Session[];
    time: number | bigint | string;
}
export interface NamedOperator {
    name: string;
    operators: string[];
}
export interface ProgressEvent {
    object: string;
    machine: string;
    task?: string;
    node: string;
}
export declare function newProgress(tx: Transaction, machine: MachineObject, permission: PermissionObject, task: string | null, passport?: PassportObject): ProgressObject;
export declare function create(tx: Transaction, progress: ProgressObject): ProgressAddress;
export declare function namedOperator_add(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, name: string, operators: string[], passport?: PassportObject): void;
export declare function namedOperator_remove(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, name: string, operators: string[], passport?: PassportObject): void;
export declare function namedOperator_set(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, name: string, operators: string[], passport?: PassportObject): void;
export declare function task_set(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, task: string, passport?: PassportObject): void;
export declare function context_repository_add(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, repository: RepositoryObject, passport?: PassportObject): void;
export declare function context_repository_remove(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, repositories: string[], passport?: PassportObject): void;
export declare function context_repository_clear(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function hold(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, next_node: string, forward: string, message: string, bHold: boolean, order?: string, passport?: PassportObject): void;
export declare function adminUnhold(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, next_node: string, forward: string, message: string, passport?: PassportObject): void;
export declare function accomplish(tx: Transaction, progress: ProgressObject, machine: MachineObject, permission: PermissionObject, next_node: string, forward: string, message: string, order?: string, passport?: PassportObject): void;
export interface MachineNodeForwardResult {
    forward?: MachineForward;
    error?: string;
}
export declare function getMachineNodeForward(env: CallEnv, machine: string, node: string, next_node: string, forward: string): Promise<MachineNodeForwardResult>;
