import { EthereumProofPointIssueResult } from "./ethereumProofPointIssueResult";
import { ethers } from "ethers";
import { StorageProvider } from "../storage";
import { EthereumAddressResolver } from "./ethereumAddressResolver";
import { EthereumProofPointRegistry } from "./ethereumProofPointRegistry";
import { IpfsStorageProviderSettings } from "../ipfs/ipfsStorageProviderSettings";
import { EthereumAddress } from "./ethereumAddress";
import { ProofPointId } from "../proofPointId";
/**
 * Ethereum Proof Point Issuer
 * Can issue, commit and revoke Proof Points in an @EthereumProofPointRegistry
 */
export declare class EthereumProofPointIssuer {
    private _rootAddress;
    private _registry;
    private _storage;
    private _ethereumAddressResolver;
    /**
     * Creates an instance of @EthereumProofPointIssuer
     * @param rootAddress The Ethereum address of the deployed eternal storage contract.
     * @param ethereumAddressResolver A resolver used to resolve issuer IDs to Ethereum addresses.
     * @param storage A storage provider used for storing and retrieving proof point documents.
     * @param registry The @EthereumProofPointRegistry used to issue, commit and revoke.
     */
    constructor(rootAddress: EthereumAddress, ethereumAddressResolver: EthereumAddressResolver, storage: StorageProvider, registry: EthereumProofPointRegistry);
    /**
     * Constructs an @EthereumProofPointIssuer set up for production use.
     * @param rootAddress the Ethereum address of the deployed eternal storage contract.
     * @param ipfsSettings Connection settings for the IPFS node to use for storage.
     * @param ethereumProvider An Ethereum provider to use for Ethereum interactions.
     * @param registryAddress Optional, if provided will be used as the registry address, meaning
     * the address will not be looked up in the storage contract, saving one Ethereum call.
     * @returns a ready to use @EthereumProofPointIssuer
     */
    static init(rootAddress: EthereumAddress, ipfsSettings: IpfsStorageProviderSettings, ethereumProvider: ethers.providers.JsonRpcProvider, registryAddress?: EthereumAddress): Promise<EthereumProofPointIssuer>;
    /**
     * Issue a new Proof Point
     * @param type A URI string identifying the type of Proof Point to issue. This may be any URL but there are some useful types defined defined in the Provenance ontology.
     * @param issuer A string identifying the Ethereum address from which to issue the Proof Point. This may be either an Ethereum address or a did:web URI. It must represent an account that you control and must be sufficiently funded to pay for the issuance transaction.
     * @param content A javascript object representing the type specific content of the payload. The shape of the data should conform to the specification of the @param type parameter.
     * @param [validFromDate] Optional date from which the issued Proof Point will be valid. If null then there is no earliest date at which the Proof Point is valid.
     * @param [validUntilDate] Optional date until which the issued Proof Point will be valid. If null then there is no latest date at which the Proof Point is valid.
     * @returns A @ProofPointIssueResult describing the result of the action.
     */
    issue(type: string, issuer: string, content: unknown, validFromDate?: Date | null, validUntilDate?: Date | null): Promise<EthereumProofPointIssueResult>;
    /**
     * Commit a new Proof Point
     * @param type A URI string identifying the type of Proof Point to issue. This may be any URL but there are some useful types defined defined in the Provenance ontology.
     * @param issuer A string identifying the Ethereum address from which to commit the Proof Point. This may be either an Ethereum address or a did:web URI. It must represent an account that you control and must be sufficiently funded to pay for the issuance transaction.
     * @param content A javascript object representing the type specific content of the payload. The shape of the data should conform to the specification of the @param type parameter.
     * @param [validFromDate] Optional date from which the issued Proof Point will be valid. If null then there is no earliest date at which the Proof Point is valid.
     * @param [validUntilDate] Optional date until which the issued Proof Point will be valid. If null then there is no latest date at which the Proof Point is valid.
     * @returns A @ProofPointIssueResult describing the result of the action.
     */
    commit(type: string, issuer: string, content: unknown, validFromDate?: Date | null, validUntilDate?: Date | null): Promise<EthereumProofPointIssueResult>;
    /**
     * Revoke a Proof Point identified by it's ID. You must control the account that originally issued the Proof Point. The account must be sufficiently funded to execute the revoke transaction.
     * @param proofPointId The ID of the Proof Point to revoke. This is the value returned in the @param proofPointId field of the {@link ProofPointIssueResult} when the Proof Point was issued.
     */
    revoke(proofPointId: ProofPointId): Promise<void>;
    private _buildProofPoint;
    private _issue;
    private _canonicalizeAndStoreObject;
    private static _removeEmptyFields;
}
