import { ethers } from "ethers";
import { StorageProvider } from "./storage";
import { ProofPointIssueResult } from "./proofPointIssueResult";
import { ProofPoint } from "./proofPoint";
import { ProofPointEvent, ProofPointId, EthereumAddress } from "./proofPointEvent";
import { HttpClient } from "./httpClient";
import { ProofPointValidateResult } from "./proofPointValidateResult";
declare const ProofPointRegistryAbi: {
    abi: ({
        inputs: {
            internalType: string;
            name: string;
            type: string;
        }[];
        stateMutability: string;
        type: string;
        anonymous?: undefined;
        name?: undefined;
        outputs?: undefined;
    } | {
        anonymous: boolean;
        inputs: {
            indexed: boolean;
            internalType: string;
            name: string;
            type: string;
        }[];
        name: string;
        type: string;
        stateMutability?: undefined;
        outputs?: undefined;
    } | {
        inputs: {
            internalType: string;
            name: string;
            type: string;
        }[];
        name: string;
        outputs: {
            internalType: string;
            name: string;
            type: string;
        }[];
        stateMutability: string;
        type: string;
        anonymous?: undefined;
    })[];
    evm: {
        bytecode: {
            linkReferences: {};
            object: string;
            opcodes: string;
            sourceMap: string;
        };
        deployedBytecode: {
            linkReferences: {};
            object: string;
            opcodes: string;
            sourceMap: string;
        };
    };
    bytecode: string;
}[];
declare const PROOF_POINT_REGISTRY_VERSION = 2;
declare class ProofPointRegistry {
    private _rootAddress;
    private _address;
    private _registry;
    private _storage;
    private _httpClient;
    private _provider;
    /**
     * Creates an instance of Proof Point registry for interacting with a pre-existing deployment of the registry contracts.
     * @param rootAddress the Ethereum address of the deployed eternal storage contract.
     * @param address the Ethereum address of the current deployed logic contract.
     * @param provider an ethers.providers.JsonRpcProvider to use for interacting with the blockchain.
     * @param storage a {@link StorageProvider} to use for storing/retrieving off-chain data or null to use the default implementation.
     * @param httpClient a {@link HttpClient} to use for fetching DID documents in order to support did:web issuers or null to use the default implementation.
     */
    constructor(rootAddress: EthereumAddress, address: EthereumAddress, provider: ethers.providers.JsonRpcProvider, storage?: StorageProvider | null, httpClient?: HttpClient | null);
    /**
     * Issue a new Proof Point
     * @param type A URI string identifying the type of Proof Point to issue. This may be one of the values 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<ProofPointIssueResult>;
    /**
     * Commit a new Proof Point
     * @param type A URI string identifying the type of Proof Point to issue. This may be one of the values 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, issuerAddress: string, content: string, validFromDate?: Date | null, validUntilDate?: Date | null): Promise<ProofPointIssueResult>;
    /**
     * 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.
     */
    revokeById(proofPointId: ProofPointId): Promise<void>;
    /**
     * Revoke a Proof Point identified by its full data. You must control the account that originally issued the Proof Point. The account must be sufficiently funded to execute the revoke transaction.
     * @param proofPointObject The full Proof Point data as returned in the @param proofPointObject parameter of the {@link ProofPointIssueResult} when the Proof Point was issued.
     */
    revoke(proofPointObject: ProofPoint): Promise<void>;
    /**
     * Validate a Proof Point identified by its ID. This does not involve a blockchain transaction.
     * @param proofPointId The ID of the Proof Point to revoke.
     * @returns true if the Proof Point passes all validation checks, otherwise false.
     */
    validateById(proofPointId: ProofPointId): Promise<ProofPointValidateResult>;
    /**
     * Validate a Proof Point identified by its full data. This does not involve a blockchain transaction.
     * @param proofPointObject The full Proof Point data as returned in the @param proofPointObject parameter of the {@link ProofPointIssueResult} when the Proof Point was issued.
     * @returns a {@link ProofPointValidateResult} representing the validity of the Proof Point.
     */
    validate(proofPointObject: ProofPoint): Promise<ProofPointValidateResult>;
    /**
     * Fetch the Proof Point document identified by its ID.
     * @param proofPointId The ID of the Proof Point document to fetch.
     */
    getById(proofPointId: ProofPointId): Promise<ProofPoint>;
    /**
     * Get a list of the IDs of all Proof Points ever issued or committed
     * to this registry.
     */
    getAll(): Promise<Array<ProofPointId>>;
    /**
     * Gets a list of all events related to the given Proof Point, identified by its ID.
     * @param proofPointId the ID of the Proof Point.
     * @returns a list of {@link ProofPointEvent} describing the history of the Proof Point.
     */
    getHistoryById(proofPointId: ProofPointId): Promise<Array<ProofPointEvent>>;
    private proofPointIdToBytes;
    private logDataToProofPointId;
    private _topicToEventType;
    private _getHistory;
    private getEventsByFilter;
    private _issue;
    private buildJson;
    private isSameRegistry;
    /**
     * Did to url. Translate a did:web identifier to the URL at which the corresponding DID document can be found
     * according to spec at https://w3c-ccg.github.io/did-method-web/#crud-operation-definitions.
     * @param did a valid did:web ID string
     * @returns an https URL string representing the location of the corresponding DID document
     */
    private didToUrl;
    private _resolveIssuerToEthereumAddress;
    private static removeEmptyFields;
    private _canonicalizeAndStoreObject;
    private _getVersion;
}
export { ProofPointRegistry, PROOF_POINT_REGISTRY_VERSION, ProofPointRegistryAbi, };
