import { RpcClientInterface } from '@taquito/rpc';
import { Protocols } from './constants';
import { Forger } from '@taquito/local-forging';
import { Injector } from './injector/interface';
import { Signer } from './signer/interface';
import { OperationFactory } from './wallet/operation-factory';
import { RpcTzProvider } from './tz/rpc-tz-provider';
import { RPCEstimateProvider } from './estimate/rpc-estimate-provider';
import { RpcContractProvider } from './contract/rpc-contract-provider';
import { RPCBatchProvider } from './batch/rpc-batch-provider';
import { Wallet, WalletProvider } from './wallet';
import { ParserProvider } from './parser/interface';
import { Packer } from './packer/interface';
import { BehaviorSubject } from 'rxjs';
import { GlobalConstantsProvider } from './global-constants/interface-global-constants-provider';
import { TzReadProvider } from './read-provider/interface';
import { SubscribeProvider } from './subscribe/interface';
import { PrepareProvider } from './prepare/prepare-provider';
export interface TaquitoProvider<T, K extends Array<any>> {
    new (context: Context, ...rest: K): T;
}
export interface ConfigConfirmation {
    confirmationPollingTimeoutSecond: number;
    defaultConfirmationCount: number;
}
export declare const defaultConfigConfirmation: ConfigConfirmation;
/**
 * @description Encapsulate common service used throughout different part of the library
 */
export declare class Context {
    private _rpc;
    private _signer;
    private _proto?;
    readonly _config: BehaviorSubject<{
        confirmationPollingTimeoutSecond: number;
        defaultConfirmationCount: number;
    }>;
    private _rpcClient;
    private _forger;
    private _parser;
    private _injector;
    private _walletProvider;
    readonly operationFactory: OperationFactory;
    private _packer;
    private providerDecorator;
    private _globalConstantsProvider;
    private _readProvider;
    private _stream;
    readonly tz: RpcTzProvider;
    readonly estimate: RPCEstimateProvider;
    readonly contract: RpcContractProvider;
    readonly prepare: PrepareProvider;
    readonly batch: RPCBatchProvider;
    readonly wallet: Wallet;
    constructor(_rpc: RpcClientInterface | string, _signer?: Signer, _proto?: Protocols | undefined, _config?: BehaviorSubject<{
        confirmationPollingTimeoutSecond: number;
        defaultConfirmationCount: number;
    }>, forger?: Forger, injector?: Injector, packer?: Packer, wallet?: WalletProvider, parser?: ParserProvider, globalConstantsProvider?: GlobalConstantsProvider, readProvider?: TzReadProvider, stream?: SubscribeProvider);
    get config(): ConfigConfirmation;
    set config(value: ConfigConfirmation);
    setPartialConfig(value: Partial<ConfigConfirmation>): void;
    get rpc(): RpcClientInterface;
    set rpc(value: RpcClientInterface);
    get injector(): Injector;
    set injector(value: Injector);
    get forger(): Forger;
    set forger(value: Forger);
    get signer(): Signer;
    set signer(value: Signer);
    get walletProvider(): WalletProvider;
    set walletProvider(value: WalletProvider);
    set proto(value: Protocols | undefined);
    get proto(): Protocols | undefined;
    get parser(): ParserProvider;
    set parser(value: ParserProvider);
    get packer(): Packer;
    set packer(value: Packer);
    get globalConstantsProvider(): GlobalConstantsProvider;
    set globalConstantsProvider(value: GlobalConstantsProvider);
    get readProvider(): TzReadProvider;
    set readProvider(value: TzReadProvider);
    get stream(): SubscribeProvider;
    set stream(value: SubscribeProvider);
    isAnyProtocolActive(protocol?: string[]): Promise<boolean>;
    isAnySignerConfigured(): boolean;
    /**
     * @description Create a copy of the current context. Useful when you have long running operation and you do not want a context change to affect the operation
     */
    clone(): Context;
    /**
     * @description Allows extensions set on the TezosToolkit to inject logic into the context
     */
    registerProviderDecorator(fx: (context: Context) => Context): void;
    /**
     * @description Applies the decorators on a cloned instance of the context and returned this cloned instance.
     * The decorators are functions that inject logic into the context.
     * They are provided by the extensions set on the TezosToolkit by calling the registerProviderDecorator method.
     */
    withExtensions: () => Context;
}
