import { ABISerializable, ABISerializableConstructor, ABISerializableObject } from "../serializer/Serializable.js";
import { BuiltinTypes } from "../serializer/Builtins.js";
import { ABI, ABIDef } from "./Abi.js";
import { Bytes, BytesType } from "./Bytes.js";
import { Name, NameType } from "./Name.js";
import { PermissionLevel, PermissionLevelType } from "./PermissionLevel.js";
import { Struct } from "./Struct.js";
interface ActionBase {
    /** The account (a.k.a. contract) to run action on. */
    account: NameType;
    /** The name of the action. */
    name: NameType;
    /** The permissions authorizing the action. */
    authorization: PermissionLevelType[];
}
export interface ActionFields extends ActionBase {
    /** The ABI-encoded action data. */
    data: BytesType;
}
/** Action type that may or may not have its data encoded */
export interface AnyAction extends ActionBase {
    data: BytesType | ABISerializableObject | Record<string, any> | any;
}
export type ActionTypedData<A> = Omit<AnyAction, "data"> & {
    data: A;
};
export type ActionType = Action | ActionFields;
export declare class Action extends Struct {
    /** The account (a.k.a. contract) to run action on. */
    account: Name;
    /** The name of the action. */
    name: Name;
    /** The permissions authorizing the action. */
    authorization: PermissionLevel[];
    /** The ABI-encoded action data. */
    data: Bytes;
    abi?: ABI;
    static from(anyAction: ActionType | AnyAction, abi?: ABIDef): Action;
    /** Return true if this Action is equal to given action. */
    equals(other: ActionType | AnyAction): boolean;
    /** Return action data decoded as given type or using ABI. */
    decodeData<T extends ABISerializableConstructor>(type: T): InstanceType<T>;
    decodeData<T extends keyof BuiltinTypes>(type: T): BuiltinTypes[T];
    decodeData(abi: ABIDef): ABISerializable;
    get decoded(): any;
}
export {};
//# sourceMappingURL=Action.d.ts.map