import type { Transaction } from "../../transactions/index.js";
import type { PermissionAddress, PermissionObject, PaymentObject, TxString, TxAddress, TxAddressVec, TxNumberVec, ReceivedObject, PassportObject, NormalObject, CallEnv } from "../common.js";
import type { TxNumber } from "../common.js";
import { CallBase } from "./base.js";
import type { CallResult } from "./base.js";
import { ObjectType } from "../query/object.js";
import type { ObjectPermission } from "../query/object.js";
import type { AccountOrMark_Address, ManyAccountOrMark_Address } from "../local/index.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { ReceivedObjectsOrRecently } from "../query/received.js";
export declare enum BuiltinPermissionIndex {
    REPOSITORY_NEW = 100,
    REPOSITORY_DESCRIPTION = 101,
    REPOSITORY_POLICY = 102,
    REPOSITORY_REWARD = 103,
    REPOSITORY_OWNER_RECEIVE = 104,
    REPOSITORY_UM = 105,
    REWARD_NEW = 150,
    REWARD_DESCRIPTION = 151,
    REWARD_GUARD = 152,
    REWARD_COIN_ADD = 153,
    REWARD_RECEIVE = 154,
    REWARD_GUARD_EXPIRATION_TIME_ADD = 155,
    REWARD_OWNER_RECEIVE = 156,
    REWARD_UM = 157,
    MACHINE_NEW = 200,
    MACHINE_DESCRIPTION = 201,
    MACHINE_CONSENSUS_REPOSITORIES = 203,
    MACHINE_PAUSE = 204,
    MACHINE_PUBLISH = 205,
    MACHINE_NODE = 206,
    MACHINE_OWNER_RECEIVE = 207,
    MACHINE_UM = 208,
    PROGRESS_NEW = 220,
    PROGRESS_NAMED_OPERATOR = 221,
    PROGRESS_TASK = 222,
    PROGRESS_CONTEXT_REPOSITORY = 223,
    PROGRESS_UNHOLD = 224,
    PROGRESS_OWNER_RECEIVE = 225,
    TREASURY_NEW = 250,
    TREASURY_DESCRIPTION = 251,
    TREASURY_DEPOSIT = 252,
    TREASURY_RECEIVE = 253,
    TREASURY_WITHDRAW = 254,
    TREASURY_EXTERNAL_DEPOSIT = 255,
    TREASURY_EXTERNAL_WITHDRAW = 256,
    TREASURY_EXTERNAL_DEPOSIT_GUARD = 257,
    TREASURY_EXTERNAL_WITHDRAW_GUARD = 258,
    TREASURY_OWNER_RECEIVE = 259,
    TREASURY_UM = 260,
    SERVICE_NEW = 300,
    SERVICE_DESCRIPTION = 301,
    SERVICE_LOCATION = 303,
    SERVICE_REPOSITORY = 304,
    SERVICE_SALES = 305,
    SERVICE_MACHINE = 306,
    SERVICE_BUY_GUARD = 307,
    SERVICE_ARBITRATION = 308,
    SERVICE_CUSTOMER_INFO_REQUIRED = 309,
    SERVICE_PAUSE = 310,
    SERVICE_PUBLISH = 311,
    SERVICE_DISCOUNT = 312,
    SERVICE_ORDER_ALLOCATOR = 313,
    SERVICE_COMPENSATION_FUND_WITHDRAW = 314,
    SERVICE_COMPENSATION_FUND_DEPOSIT = 315,
    SERVICE_COMPENSATION_FUND_RECEIVE = 316,
    SERVICE_COMPENSATION_LOCKED_TIME_ADD = 317,
    SERVICE_REWARD = 318,
    SERVICE_OWNER_RECEIVE = 319,
    SERVICE_UM = 320,
    ARBITRATION_NEW = 350,
    ARBITRATION_DESCRIPTION = 351,
    ARBITRATION_LOCATION = 353,
    ARBITRATION_VOTING_GUARD = 354,
    ARBITRATION_USAGE_GUARD = 355,
    ARBITRATION_PAUSE = 356,
    ARBITRATION_FEE = 357,
    ARBITRATION_VOTE = 358,
    ARBITRATION_ARBITRATION = 359,
    ARBITRATION_FEEDBACK = 360,
    ARBITRATION_CONFIRM = 361,
    ARBITRATION_VOTING_DEADLINE_CHANGE = 362,
    ARBITRATION_RESET = 363,
    ARBITRATION_ARB_WITHDRAW = 364,
    ARBITRATION_FEES_ALLOC = 365,
    ARBITRATION_FEES_TRANSFER = 366,
    ARBITRATION_OWNER_RECEIVE = 367,
    ARBITRATION_UM = 368,
    DEMAND_NEW = 400,
    DEMAND_DESCRIPTION = 401,
    DEMAND_LOCATION = 402,
    DEMAND_GUARD = 404,
    DEMAND_REWARD = 405,
    DEMAND_FEEDBACK = 406,
    DEMAND_OWNER_RECEIVE = 407,
    DEMAND_UM = 408,
    MESSNGER_NEW = 450,
    MESSNGER_DESCRIPTION = 451,
    MESSNGER_LOCATION = 452,
    MESSNGER_IM = 453,
    MESSNGER_OWNER_RECEIVE = 454
}
export type PermissionIndexType = BuiltinPermissionIndex | number;
export interface PermissionInfoType {
    index: PermissionIndexType;
    name: string;
    description: string;
    object_type: ObjectType;
}
export declare const PermissionInfo: PermissionInfoType[];
export interface Permission_Index_Entity {
    address: AccountOrMark_Address;
    guard?: string;
}
export interface Permission_Index {
    index: PermissionIndexType;
    entities: Permission_Index_Entity[];
}
export interface CallPermission_Data {
    object?: NormalObject;
    description?: string;
    remark?: {
        op: "set";
        index: PermissionIndexType;
        remark: string;
    } | {
        op: "remove";
        index: PermissionIndexType;
    } | {
        op: "clear";
    };
    table?: {
        op: "add perm by index" | "set perm by index" | "remove perm by index";
        index: PermissionIndexType;
        entity: ManyAccountOrMark_Address;
    } | {
        op: "add perm by entity" | "remove perm by entity" | "set perm by entity";
        entity: AccountOrMark_Address;
        index: PermissionIndexType[];
    };
    entity?: {
        op: "swap" | "replace" | "copy";
        entity1: AccountOrMark_Address;
        entity2: AccountOrMark_Address;
    } | {
        op: "del";
        entity: AccountOrMark_Address;
    };
    admin?: {
        op: "add" | "remove" | "set";
        addresses: ManyAccountOrMark_Address;
    };
    apply?: string[];
    builder?: AccountOrMark_Address;
    owner_receive?: ReceivedObjectsOrRecently;
    um?: string | null;
}
export declare class CallPermission extends CallBase {
    data: CallPermission_Data;
    object_address: string | undefined;
    object_data: ObjectPermission | undefined;
    constructor(data: CallPermission_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    protected operate(env: CallEnv, tx: Transaction, _passport?: PassportObject, _submission?: GuardSubmissionToFill[]): Promise<void>;
}
export declare function permissionFn(name: string): string;
export declare const MAX_ENTITY_COUNT = 1000;
export declare const MAX_PERM_FOR_ENTITY = 1000;
export declare const MAX_ADMIN_COUNT = 500;
export declare const USER_DEFINED_PERM_INDEX_START = 1000;
export declare function isBizPermIndex(permIndex: number): boolean;
export declare function newPermission(tx: Transaction, description: TxString): PermissionObject;
export declare function create(tx: Transaction, permission: PermissionObject): PermissionAddress;
export declare function descriptionSet(tx: Transaction, permission: PermissionObject, description: TxString): void;
export declare function remarkSet(tx: Transaction, permission: PermissionObject, index: TxNumber, remark: TxString): void;
export declare function remarkRemove(tx: Transaction, permission: PermissionObject, index: TxNumber): void;
export declare function remarkClear(tx: Transaction, permission: PermissionObject): void;
export declare function permAdd(tx: Transaction, permission: PermissionObject, permIndex: TxNumber, entities: TxAddressVec): void;
export declare function permRemove(tx: Transaction, permission: PermissionObject, permIndex: TxNumber, entities: TxAddressVec): void;
export declare function permSet(tx: Transaction, permission: PermissionObject, permIndex: TxNumber, userOrGuard: TxAddressVec): void;
export declare function entityAdd(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress, perm: TxNumberVec): void;
export declare function entityRemove(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress, perm: TxNumberVec): void;
export declare function entitySet(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress, perm: TxNumberVec): void;
export declare function entitySwap(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress, otherUserOrGuard: TxAddress): void;
export declare function entityReplace(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress, newUserOrGuard: TxAddress): void;
export declare function entityDel(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress): void;
export declare function entityCopy(tx: Transaction, permission: PermissionObject, userOrGuard: TxAddress, newUserOrGuard: TxAddress): void;
export declare function adminAdd(tx: Transaction, permission: PermissionObject, admin: TxAddressVec): void;
export declare function adminRemove(tx: Transaction, permission: PermissionObject, admin: TxAddressVec): void;
export declare function adminSet(tx: Transaction, permission: PermissionObject, admin: TxAddressVec): void;
export declare function transferPermission(tx: Transaction, permission: PermissionObject, owner: TxAddress): void;
export declare function um_set(tx: Transaction, permission: PermissionObject, um: string | null): void;
export declare function ownerReceiveObject(tx: Transaction, permission: PermissionObject, received: ReceivedObject, type: string): void;
export declare function ownerReceive(tx: Transaction, permission: PermissionObject, received: ReceivedObject, payment: PaymentObject, type: string): void;
export interface PermissionFilter {
    objectType?: ObjectType;
    name?: string;
    index?: PermissionIndexType;
    description?: string;
}
export declare function query_permissions(filter?: PermissionFilter): PermissionInfoType[];
