import BigNumber from 'bignumber.js';
import { Asset, AuthorizationRequest, Context, CreateGroupParams, CustomPermissionGroup, InviteExternalAgentParams, KnownPermissionGroup, Namespace, RemoveExternalAgentParams } from "../../../internal";
import { AgentWithGroup, PermissionGroups, PermissionGroupType, ProcedureMethod } from "../../../types";
/**
 * Handles all Asset Permissions related functionality
 */
export declare class Permissions extends Namespace<Asset> {
    /**
     * @hidden
     */
    constructor(parent: Asset, context: Context);
    /**
     * Create a Permission Group for this Asset. Identities can be assigned to Permission Groups as agents. Agents assigned to a Permission Group have said group's permissions over the Asset
     */
    createGroup: ProcedureMethod<CreateGroupParams, CustomPermissionGroup>;
    /**
     * Invite an Identity to be an agent with permissions over this Asset
     *
     * @note this will create an AuthorizationRequest that will need to be accepted by the target
     */
    inviteAgent: ProcedureMethod<InviteExternalAgentParams, AuthorizationRequest>;
    /**
     * Revoke an agent's permissions over this Asset
     */
    removeAgent: ProcedureMethod<RemoveExternalAgentParams, void>;
    /**
     * Retrieve a single Permission Group by its ID (or type). Passing an ID will fetch a Custom Permission Group,
     *   while passing a type will fetch a Known Permission Group
     *
     * @throws if there is no Permission Group with the passed ID
     */
    getGroup(args: {
        id: BigNumber;
    }): Promise<CustomPermissionGroup>;
    getGroup(args: {
        type: PermissionGroupType;
    }): Promise<KnownPermissionGroup>;
    /**
     * Retrieve all Permission Groups of this Asset
     */
    getGroups(): Promise<PermissionGroups>;
    /**
     * Retrieve a list of agents (Identities which have permissions over the Asset) and
     *   their respective Permission Groups
     */
    getAgents(): Promise<AgentWithGroup[]>;
}
//# sourceMappingURL=Permissions.d.ts.map