import { ApiInterfaces, RpcInterfaces } from 'eosjs';
import { SecurityExclusions, SignatureProviderRequest, SignatureProviderRequestEnvelope, SignatureProviderResponseEnvelope, Uint8BinaryAbi } from './interfaces';
export interface SignatureProviderInterfaceParams {
    declaredDomain: string;
    returnUrl: string;
    callbackUrl?: string;
    securityExclusions?: SecurityExclusions;
    options?: any;
}
export interface CreateRequestEnvelopeParams {
    request: SignatureProviderRequest;
}
export interface SignParams {
    chainId: string;
    requiredKeys: string[];
    serializedTransaction: Uint8Array;
    abis: Uint8BinaryAbi[];
}
export declare type HandleRequestReturnType = string[] | RpcInterfaces.PushTransactionArgs;
export declare abstract class SignatureProviderInterface implements ApiInterfaces.SignatureProvider {
    private declaredDomain;
    private returnUrl;
    private callbackUrl?;
    private securityExclusions?;
    private pendingRequest;
    constructor({ declaredDomain, returnUrl, callbackUrl, securityExclusions, }: SignatureProviderInterfaceParams);
    /**
     * SignatureProvider Methods
     */
    getAvailableKeys(): Promise<string[]>;
    sign(params: SignParams): Promise<RpcInterfaces.PushTransactionArgs>;
    /**
     * Request Handlers
     */
    protected abstract sendRequest(requestEnvelope: SignatureProviderRequestEnvelope): void;
    private handleRequest;
    /**
     * Response Handlers
     */
    protected handleResponse: (responseEnvelope: SignatureProviderResponseEnvelope) => void;
    private handleSelectiveDisclosureResponse;
    private handleTransactionSignatureResponse;
    /**
     * Caching
     */
    protected abstract getCachedKeys(): string[];
    protected abstract setCachedKeys(keys: string[]): void;
    abstract clearCachedKeys(): void;
    /**
     * Cancelling
     */
    private cancelPendingRequest;
    cancelRequest(): void;
    /**
     * Life Cycle
     */
    abstract cleanUp(): void;
    /**
     * Struct Creation
     */
    private createRequestEnvelope;
    private createSelectiveDisclosureRequest;
    private createTransactionSignatureRequest;
}
