import 'isomorphic-fetch';
import Identifier from '../Identifier';
import IdentifierDocument from '../IdentifierDocument';
import UserAgentOptions from '../UserAgentOptions';
import IRegistrar from './IRegistrar';
import RegistrarCryptoOptions from './RegistrarCryptoOptions';
/**
 * Registrar implementation for the Sidetree (ION) network
 */
export default class SidetreeRegistrar implements IRegistrar {
    url: string;
    private timeoutInMilliseconds;
    private options;
    private cryptoFactory;
    /**
     * Crypto options for the Registrar
     */
    registrarCryptoOptions: RegistrarCryptoOptions;
    /**
     * Constructs a new instance of the Sidetree registrar
     * @param url to the registration endpoint at the registrar
     * @param options to configure the registrar.
     */
    constructor(url: string, options: UserAgentOptions);
    /**
     * Prepare the document for registration
     * @param document Document to format
     */
    prepareDocForRegistration(document: IdentifierDocument): IdentifierDocument;
    /**
     * Registers the identifier document on the ledger
     * returning the identifier generated by the registrar.
     * @param identifierDocument to register.
     * @param keyReference Reference to the identifier for the signing key.
     */
    register(identifierDocument: IdentifierDocument, keyReference: string): Promise<Identifier>;
    /**
     * Sign the registration payload
     * @param keyReference Reference to signature key
     * @param bodyString original payload to sign
     */
    sign(keyReference: string, bodyString: string): Promise<string>;
    /**
     * Uses the specified input to create a basic Sidetree
     * compliant identifier document and then hashes the document
     * in accordance with the Sidetree protocol specification
     * to generate and return the identifier.
     *
     * @param identifierDocument for which to generate the identifier.
     */
    generateIdentifier(identifierDocument: IdentifierDocument): Promise<Identifier>;
}
