import { Contract, ethers } from "ethers";
import { ConnectionLibrary } from "../../networks/connections/connection-library";
import { ContractConnection } from "../../networks/connections/contract-connection";
import { NetworkName } from "../../networks/connections/network-connection.types";
import { IResolvedResource } from "../../resolvers/resolved-resource/resolved-resource.interface";
import { ProviderName } from "../../resolvers/types/resolver-name";
import { MappedName } from "../../tools/name-tools.types";
import { IResolverProvider } from "../resolver-provider.interface";
export declare abstract class BaseResolverProvider implements IResolverProvider {
    constructor(name: ProviderName | string, supportedTlds: string[], readContractConnections: ContractConnection[], writeContractConnections: ContractConnection[]);
    get supportedNetworks(): (NetworkName | string)[];
    private _writeContractConnections;
    get writeContractConnections(): ContractConnection[];
    set writeContractConnections(value: ContractConnection[]);
    private _readContractConnections;
    protected get readContractConnections(): ContractConnection[];
    protected set readContractConnections(value: ContractConnection[]);
    protected _connectionLibrary?: ConnectionLibrary | undefined;
    get connectionLibrary(): ConnectionLibrary | undefined;
    set connectionLibrary(value: ConnectionLibrary | undefined);
    protected _name: ProviderName | string;
    get name(): ProviderName | string;
    set name(value: ProviderName | string);
    protected _supportedTlds: string[];
    get supportedTlds(): string[];
    set supportedTlds(value: string[]);
    protected getReadContractConnection(networkName: NetworkName | string): ContractConnection | undefined;
    protected getWriteContractConnection(networkName: NetworkName | string): ContractConnection | undefined;
    protected getWriteContractWithSigner(networkName: NetworkName | string, signer: ethers.Signer): Contract | undefined;
    resolve(domainOrTld: string): Promise<IResolvedResource | undefined>;
    resolveFromTokenId(tokenId: string, network?: NetworkName | string | undefined): Promise<IResolvedResource | undefined>;
    reverseResolve(address: string, network?: NetworkName | string | undefined): Promise<string | undefined>;
    getTokenUri(tokenId: string, network?: NetworkName | string | undefined): Promise<string | undefined>;
    getMetadata(tokenId: string, network?: NetworkName | string | undefined): Promise<any | undefined>;
    getImageUrl(tokenId: string, network?: NetworkName | string | undefined): Promise<string | undefined>;
    exists(tokenId: string, network?: NetworkName | string | undefined): Promise<boolean>;
    getOwnerAddress(tokenId: string, network?: NetworkName | string | undefined): Promise<string | undefined>;
    isApprovedOrOwner(tokenId: string, addressToCheck: string, network?: NetworkName | string | undefined): Promise<boolean>;
    getRecord(tokenId: string, key: string, network?: NetworkName | string | undefined): Promise<string | undefined>;
    getManyRecords(tokenId: string, keys: string[], network?: NetworkName | string | undefined): Promise<string[] | undefined>;
    transfer(resource: IResolvedResource, addressTo: string, signer: ethers.Signer): Promise<boolean>;
    setApproved(resource: IResolvedResource, addessToApprove: string, signer: ethers.Signer): Promise<boolean>;
    setRecord(resource: IResolvedResource, key: string, value: string, signer: ethers.Signer): Promise<boolean>;
    setRecords(resource: IResolvedResource, keys: string[], values: string[], signer: ethers.Signer): Promise<boolean>;
    setReverse(resource: IResolvedResource, signer: ethers.Signer): Promise<boolean>;
    protected generateResolvedResource(mappedName: MappedName, tokenId: string, network?: NetworkName | string): Promise<IResolvedResource | undefined>;
    protected getTokenIdNetwork(tokenId: string): Promise<NetworkName | string | undefined>;
    protected getReadContractConnectionFromToken(tokenId: string, network?: NetworkName | string | undefined): Promise<ContractConnection | undefined>;
    abstract generateTokenId(mappedName: MappedName): Promise<string | undefined>;
    abstract getNetworkFromName(mappedName: MappedName): Promise<NetworkName | string | undefined>;
    abstract getRecords(tokenId: string, network?: NetworkName | string | undefined): Promise<{
        [key: string]: string;
    } | undefined>;
    abstract getNameFromTokenId(tokenId: string, network?: NetworkName | string | undefined): Promise<string | undefined>;
}
