import type { WowTransactionBlockResponse } from "../../client/index.js";
import { Transaction } from "../../transactions/index.js";
import type { CallEnv, CoinObject, CoinParam, NamedObject, PassportObject, TxAddress } from "../common.js";
import type { ObjectBase, ObjectType } from "../query/object.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { SubmissionCall } from "./passport.js";
import type { PermissionIndexType } from "./permission.js";
export type ObjectsOp = {
    op: "set" | "add" | "remove";
    objects: string[];
} | {
    op: "clear";
};
export interface ResponseData extends ObjectBase {
    change: "created" | "mutated" | string;
}
export interface CallResponseError {
    type: "error";
    error: string;
}
export type CallResult = SubmissionCall | WowTransactionBlockResponse | CallResponseError | ResponseData[] | undefined;
export declare function isCallResultSubmission(result: CallResult): result is SubmissionCall;
export declare function ResponseData(response: CallResult | undefined): ResponseData[];
export declare class CallBase {
    private newResource;
    private traceMarkNew;
    content: ObjectBase | undefined;
    env_ready: boolean;
    protected operate(_env: CallEnv, _tx: Transaction, _passport?: PassportObject, _submission?: GuardSubmissionToFill[]): Promise<void>;
    protected prepare(env: CallEnv): Promise<void>;
    call(_env: CallEnv): Promise<CallResult>;
    private env_prepare;
    call_with_submission(env: CallEnv, info: SubmissionCall, freezePassport?: boolean): Promise<WowTransactionBlockResponse | undefined>;
    protected check_guard_and_call(env: CallEnv, guards_needed: string[]): Promise<CallResult>;
    protected check_permission_and_call(env: CallEnv, permission: string, permIndex: PermissionIndexType[], guards_needed: string[], checkOwner?: boolean, checkAdmin?: boolean): Promise<CallResult>;
    protected check_passport(env: CallEnv, param: SubmissionCall, freezePassport?: boolean): Promise<WowTransactionBlockResponse>;
    protected exec(env: CallEnv): Promise<WowTransactionBlockResponse>;
    protected new_with_mark(env: CallEnv, tx: Transaction, type: ObjectType, object: TxAddress, named_new?: NamedObject, innerTags?: string[]): Promise<void>;
    protected update_content(env: CallEnv, type: ObjectType, object?: string): Promise<void>;
    protected sign_and_commit(env: CallEnv, tx: Transaction): Promise<WowTransactionBlockResponse>;
}
export declare function getCoinParam(env: CallEnv, tx: Transaction, coin: CoinParam, coinType: string): Promise<CoinObject>;
