import { AccountAddress, FunctionId, TypeTag, Arg, IPage } from '../types';
export interface CallOption {
    maxGasAmount?: number;
}
export interface ISessionKey {
    authentication_key: string;
    scopes: Array<string>;
    create_time: number;
    last_active_time: number;
    max_inactive_interval: number;
}
export interface IAccount {
    /**
     * Get account address
     */
    getAddress(): string;
    /**
     * Run move function by current account
     *
     * @param funcId FunctionId the function like '0x3::empty::empty'
     * @param tyArgs Generic parameter list
     * @param args parameter list
     * @param opts Call option
     */
    runFunction(funcId: FunctionId, tyArgs?: TypeTag[], args?: Arg[], opts?: CallOption): Promise<string>;
    /**
     * Create session account with scope
     *
     * @param scope string the scope of created account
     * @param maxInactiveInterval  number The max inactive interval
     * @param opts CallOption
     */
    createSessionAccount(scope: Array<string>, maxInactiveInterval: number, opts?: CallOption): Promise<IAccount>;
    /**
     * Create session key
     *
     * @param authKey
     * @param scopes
     * @param maxInactiveInterval
     * @param opts
     */
    registerSessionKey(authKey: AccountAddress, scopes: Array<string>, maxInactiveInterval: number, opts?: CallOption): Promise<void>;
    /**
     * Remove session key
     *
     * @param authKey
     * @param opts
     */
    removeSessionKey(authKey: AccountAddress, opts?: CallOption): Promise<string>;
    /**
     * Query account's sessionKey
     *
     * @param cursor The page cursor
     * @param limit The page limit
     */
    querySessionKeys(cursor: string | null, limit: number): Promise<IPage<ISessionKey, string>>;
    /**
     * Check session key whether expired
     *
     * @param authKey the auth key
     */
    isSessionKeyExpired(authKey: AccountAddress): Promise<boolean>;
    /**
     * Get the gas coin balance
     */
    gasCoinBalance(): Promise<bigint>;
    /**
     * Query coin balance
     *
     * @param coinType string coin type
     */
    coinBalance(coinType: string): Promise<bigint>;
}
