import { Provider, TransactionRequest } from '@ethersproject/abstract-provider';
import { Deferrable } from '@ethersproject/properties';
import { IKey } from '@veramo/core';
import { ethers, Signer, TypedDataDomain, TypedDataField } from 'ethers';
import { IRequiredContext, TypedDataSigner } from './types';
export declare class EthersKMSSignerBuilder {
    private context?;
    private keyRef?;
    private provider?;
    withContext(context: IRequiredContext): this;
    withKid(kid: string): this;
    withKeyRef(keyRef: Pick<IKey, 'kid'> | string): this;
    withProvider(provider: ethers.providers.Provider): this;
    build(): EthersKMSSigner;
}
/**
 * This is a Ethers signer that delegates back to the KMS for the actual signatures.
 * This means we do not expose private keys and can use any Secp256k1 key stored in the KMS if we want
 *
 * Be aware that the provided KeyRef needs to belong to the respective KMS, as it will use a lookup for the key in the KMS to sign
 */
export declare class EthersKMSSigner extends Signer implements TypedDataSigner {
    private readonly context;
    private readonly keyRef;
    constructor({ provider, context, keyRef }: {
        provider?: ethers.providers.Provider;
        context: IRequiredContext;
        keyRef: Pick<IKey, 'kid'>;
    });
    getAddress(): Promise<string>;
    signTransaction(transaction: Deferrable<TransactionRequest>): Promise<string>;
    signRaw(message: string | Uint8Array): Promise<string>;
    signMessage(message: string | Uint8Array): Promise<string>;
    _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
    connect(provider?: Provider): EthersKMSSigner;
}
//# sourceMappingURL=ethers-kms-signer.d.ts.map