import type { Transaction, TransactionObjectArgument } from "../../transactions/index.js";
import type { MachineObject, MachineAddress, TxString, PassportObject, PermissionObject, RepositoryObject, WithPermissionObject, CallEnv, NamedObject } from "../common.js";
import type { MachineForward, MachineNode, MachineNodePair } from "../query/object.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { ManyAccountOrMark_Address } from "../local/index.js";
import type { ReceivedObjectsOrRecently } from "../query/received.js";
import type { ENTRYPOINT } from "../../client/network.js";
export interface CallMachine_Data {
    object: WithPermissionObject;
    progress_new?: {
        task?: string | null;
        repository?: {
            op: "add" | "set";
            objects: string[];
        } | {
            op: "remove";
            objects: string[];
        } | {
            op: "clear";
        };
        progress_namedOperator?: {
            op: "add" | "set" | "remove";
            name: string;
            operators: ManyAccountOrMark_Address;
        };
        namedNew?: NamedObject;
    };
    description?: string;
    repository?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    node?: {
        op: "add" | "set";
        nodes: MachineNode[];
        bReplace?: boolean;
    } | {
        op: "remove";
        nodes: string[];
    } | {
        op: "clear";
    } | {
        op: "exchange";
        node_one: string;
        node_other: string;
    } | {
        op: "rename";
        node_name_old: string;
        node_name_new: string;
    } | {
        op: "remove prior node";
        pairs: {
            prior_node_name: string[];
            node_name: string;
        }[];
    } | {
        op: "add forward";
        data: {
            prior_node_name: string;
            node_name: string;
            forward: MachineForward[];
            threshold?: number | null;
        }[];
    } | {
        op: "remove forward";
        data: {
            prior_node_name: string;
            node_name: string;
            forward_name: string[];
        }[];
    };
    pause?: boolean;
    publish?: boolean;
    owner_receive?: ReceivedObjectsOrRecently;
    um?: string | null;
}
export declare class CallMachine extends CallBase {
    data: CallMachine_Data;
    object_address: string | undefined;
    permission_address: string | undefined;
    new_permission_description: string | undefined;
    constructor(data: CallMachine_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 const MAX_CONSENSUS_REPOSITORIES_COUNT = 200;
export declare const MAX_FORWARD_ORDER_COUNT = 20;
export declare const MAX_NODE_PAIR_COUNT = 40;
export declare const MAX_NODE_COUNT = 200;
export declare const THRESHOLD_DEFAULT = 0;
export type ForwardParam = TransactionObjectArgument;
export type NodePairParam = TransactionObjectArgument;
export type NodeParam = TransactionObjectArgument;
export declare function init_node_name(): string;
export declare function forward(tx: Transaction, param: MachineForward): Promise<ForwardParam>;
export declare function nodepair(tx: Transaction, prev_node: TxString, param: MachineNodePair): Promise<NodePairParam>;
export declare function node(tx: Transaction, param: MachineNode): Promise<NodeParam>;
export declare function create(tx: Transaction, machine: MachineObject): MachineAddress;
export declare function newMachine(tx: Transaction, permission: PermissionObject, description: TxString, passport?: PassportObject): MachineObject;
export declare function description_set(tx: Transaction, machine: MachineObject, permission: PermissionObject, description: TxString, passport?: PassportObject): void;
export declare function node_add(tx: Transaction, machine: MachineObject, permission: PermissionObject, node: NodeParam[], bCompleteReplace: boolean, passport?: PassportObject): void;
export declare function um_set(tx: Transaction, machine: MachineObject, permission: PermissionObject, um: string | null, passport?: PassportObject): void;
export declare function node_remove(tx: Transaction, machine: MachineObject, permission: PermissionObject, node: string[], passport?: PassportObject): void;
export declare function node_rename(tx: Transaction, machine: MachineObject, permission: PermissionObject, node_name: string, node_new_name: string, passport?: PassportObject): void;
export declare function node_exchange_name(tx: Transaction, machine: MachineObject, permission: PermissionObject, node_one: string, node_other: string, passport?: PassportObject): void;
export declare function node_clear(tx: Transaction, machine: MachineObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function publish(tx: Transaction, machine: MachineObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function pause(tx: Transaction, machine: MachineObject, permission: PermissionObject, bPaused: boolean, passport?: PassportObject): void;
export declare function consensus_repositories_add(tx: Transaction, machine: MachineObject, permission: PermissionObject, repository: RepositoryObject, passport?: PassportObject): void;
export declare function consensus_repositories_remove(tx: Transaction, machine: MachineObject, permission: PermissionObject, repositories: string[], passport?: PassportObject): void;
export declare function consensus_repositories_clear(tx: Transaction, machine: MachineObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function forwards_add(tx: Transaction, machine: MachineObject, permission: PermissionObject, node_name: string, next_node_name: string, forwards: ForwardParam[], threshold: number | null, passport?: PassportObject): Promise<void>;
export declare function forwards_remove(tx: Transaction, machine: MachineObject, permission: PermissionObject, node_name: string, next_node_name: string, forwards: string[], threshold: number | null, passport?: PassportObject): void;
export declare function prev_nodes_remove(tx: Transaction, machine: MachineObject, permission: PermissionObject, node_name: string, prev_node_names: string[], passport?: PassportObject): void;
export declare const machineNode2file: (machine: string, file_path: string, format?: "json" | "markdown", network?: ENTRYPOINT) => Promise<void>;
export declare function prev_nodes_remove_with_passport(tx: Transaction, machine: MachineObject, permission: PermissionObject, passport: PassportObject, node_name: string, prev_node_names: string[]): void;
