import { Observable } from 'rxjs';
import { StateService, ConnectionService } from './services';
import * as Types from './types';
import { Party } from './socket/walletnode/interfaces';
import { CreateContract } from './contract/interfaces';
import { RestService } from './api/rest-service';
import { SetlJWT } from './api/jwt';
export declare class SetlClient {
    protected stateService: StateService;
    protected connectionService: ConnectionService;
    protected restService: RestService;
    protected jwtService: SetlJWT;
    events: Observable<any>;
    private broadcast;
    private blockObs;
    get events$(): Observable<any>;
    get block$(): Observable<any>;
    get broadcast$(): Observable<any>;
    /**
     * Creates an instance of SetlApiSDK.
     */
    constructor(stateService: StateService, connectionService: ConnectionService, restService: RestService, jwtService: SetlJWT, ep: string, opts?: Types.Options);
    switchToSocket(): void;
    switchToRpc(): void;
    disconnect(): void;
    /**
     * ==== MEMBERNODE api/ ====
     */
    /**
     * Get the instance endpoint
     *
     * @returns {string}
     * @memberof SetlApiSDK
     */
    get endpoint(): string;
    /**
     * Get the instance options
     *
     * @returns {Types.Options}
     * @memberof SetlApiSDK
     */
    get options(): Types.Options;
    /**
     * Get the instance session token
     *
     * @returns {string}
     * @memberof SetlApiSDK
     */
    get sessionToken(): string;
    /**
     * Sets an Session Token
     *
     * @memberof SetlApiSDK
     */
    setSessionToken(token: any): string;
    /**
     * Request using our older style JWT endpoints, allows all requests/tx to be sent to either
     * membernode or walletnode
     *
     * @param apiKey - API Key
     * @param userId - User ID
     * @param payload - object to send
     * @param requestType - {request,tx} switches between request and tx, default is request
     * @param endpoint - {wallet,member} switches between walletnode for member, default is wallet
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    jwt(payload: any, requestType?: 'request' | 'tx', endpoint?: 'wallet' | 'member'): Promise<any>;
    /**
     * Request a new token for the given username and password.
     * Token is stored on the instance as sessionToken and used automatically against future requests
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    login(payload: Types.TokenRequest): Promise<any>;
    /**
     * Request the current authorised users details
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    me(): Promise<any>;
    /**
     * Request all wallets or an individual wallet by it's unique ID
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    wallets(payload?: Types.WalletsRequest): Promise<any>;
    /**
     * Request all messages for the currently authorised user
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    messages(fromWalletId: number, toWalletId: number): Promise<any>;
    /**
     * Request for a message to be decrypt.
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    decryptMessage(payload: Types.MessageDecryptRequest): Promise<any>;
    /**
     * Request for a message to be encrypt.
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    encryptMessage(payload: Types.MessageEncryptRequest): Promise<any>;
    /**
     * ==== REQUEST api/request ====
     */
    /**
     * Request the currently authorised users access privileges
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    access(payload: Types.AccessRequest): Promise<any>;
    /**
     * Request the currently authorised users address which they may use.
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    addresses(walletId: number): Promise<any>;
    /**
     * Request the currently authorised users available asset classes
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    allAssetClasses(): Promise<any>;
    /**
     * Request the currently authorised users available namespaces
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    allNamespaces(): Promise<any>;
    /**
     * Request details of a specific asset class
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    assetClasses(payload: Types.AssetClassesRequest): Promise<any>;
    /**
   * Request details of the last block in the chain
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    block(): Promise<any>;
    /**
     * Request details of a specific contract
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    contract(payload: Types.ContractRequest): Promise<any>;
    /**
     * Request which addresses hold assets
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    holders(payload: Types.HoldersRequest): Promise<any>;
    /**
     * Request a summary of who holds an asset or assets controlled by the user
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    holdings(payload: Types.HoldingsRequest): Promise<any>;
    /**
     * Request a detailed summary of who holds an asset or assets controlled by the user
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    holdingsDetail(payload: Types.HoldingsDetailRequest): Promise<any>;
    /**
     * Request a detailed summary of who holds an asset or assets controlled by the user
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    holdingsDetails(payload: Types.HoldingsDetailsRequest): Promise<any>;
    /**
     * Request details of a specific namespace
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    namespace(payload: Types.NamespaceRequest): Promise<any>;
    /**
     * Request to create a new address
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    newAddress(payload: Types.NewAddressRequest): Promise<any>;
    /**
     * Performs a simple ping request
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    ping(): Promise<any>;
    /**
     * Request details of the Power of Attorney powers issued to an address
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    poaAttorneyDetails(payload: Types.POAAttorneyDetailsRequest): Promise<any>;
    /**
     * Request details of the Power of Attorney powers issued by an address
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    poaOwnerDetails(payload: Types.POAOwnerDetailsRequest): Promise<any>;
    /**
     * Create a unique prefix for request IDs
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    requestPrefix(): Promise<any>;
    /**
     * Request details of the current chain state
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    state(): Promise<any>;
    /**
     * ==== TX api/tx ====
     */
    /**
/**
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    transferAsset(payload: Types.TransferAssetRequest): Promise<any>;
    /**
     * Encumber
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    encumber(payload: Types.EncumberRequest): Promise<any>;
    /**
     * Exercise encumbrance
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    exerciseEncumbrance(payload: Types.ExerciseEncumbranceRequest): Promise<any>;
    /**
     * Perform the Issueing of an asset
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    issueAsset(payload: Types.IssueAssetRequest): Promise<any>;
    /**
     * Perform an Issuer Transfer
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    issuerTransfer(payload: Types.IssuerTransferRequest): Promise<any>;
    /**
     * Null
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    null(payload: Types.NullRequest): Promise<any>;
    /**
     * Perform the Registration of an Asset
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    registerAsset(payload: Types.RegisterAssetRequest): Promise<any>;
    /**
     * Perform the Registration of a Namespace
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    registerNamespace(payload: Types.RegisterNamespaceRequest): Promise<any>;
    /**
     * Transfer from Many
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    transferFromMany(payload: Types.TransferFromManyRequest): Promise<any>;
    /**
     * Create a new Transaction
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    createTx(payload: any): Promise<any>;
    /**
     * Unencumber
     *
     * @returns {Promise<any>}
     * @memberof SetlApiSDK
     */
    unencumber(payload: Types.UnencumberRequest): Promise<any>;
    getTxs(): Promise<any>;
    createContract(payload: CreateContract): Promise<any>;
    getTx(walletId: number, txHash: string): Promise<any>;
    txReceipt(...payload: ({
        message: {
            data: {
                hash: string;
            };
        };
    } | {
        data: {
            hash: string;
        };
    } | {
        hash: string;
    })[]): Promise<unknown[]>;
    contractAuthorise(payload: {
        walletId: number;
        address: string;
        contractAddress: string;
        authorisationId: string;
        metadata?: string;
    }): Promise<any>;
    signParty(payload: {
        walletId: number;
        address: string;
        contractAddress: string;
        party: Party;
    }): Promise<any>;
}
