import type BN from 'bn.js';
import { ContractABI, Logger } from '../../utils';
import type { GetRegistryAddress } from '../contracts/ContractClient';
import { GovernedContractClient } from '../contracts/GovernedContractClient';
import type { EthWeb3Manager } from '../ethWeb3Manager';
import type { AudiusTokenClient } from './AudiusTokenClient';
import type { GovernanceClient } from './GovernanceClient';
import type { StakingProxyClient } from './StakingProxyClient';
declare type GetEvent = {
    serviceType: string;
    owner: string;
    queryStartBlock: number;
};
export declare class ServiceProviderFactoryClient extends GovernedContractClient {
    audiusTokenClient: AudiusTokenClient;
    stakingProxyClient: StakingProxyClient;
    isDebug: boolean;
    constructor(ethWeb3Manager: EthWeb3Manager, contractABI: ContractABI['abi'], contractRegistryKey: string, getRegistryAddress: GetRegistryAddress, audiusTokenClient: AudiusTokenClient, stakingProxyClient: StakingProxyClient, governanceClient: GovernanceClient, logger?: Logger, isDebug?: boolean);
    registerWithDelegate(serviceType: string, endpoint: string, amount: number | string | BN, delegateOwnerWallet: string, performHealthCheck?: boolean): Promise<{
        txReceipt: import("web3-core").TransactionReceipt;
        spID: number;
        serviceType: string;
        owner: any;
        endpoint: any;
        tokenApproveReceipt: {
            txReceipt: import("web3-core").TransactionReceipt;
        };
    }>;
    register(serviceType: string, endpoint: string, amount: BN, performHealthCheck?: boolean): Promise<{
        txReceipt: import("web3-core").TransactionReceipt;
        spID: number;
        serviceType: string;
        owner: any;
        endpoint: any;
        tokenApproveReceipt: {
            txReceipt: import("web3-core").TransactionReceipt;
        };
    }>;
    getRegisteredServiceProviderEvents({ serviceType, owner, queryStartBlock }: GetEvent): Promise<{
        blockNumber: number;
        spID: number;
        serviceType: string;
        owner: any;
        endpoint: any;
        stakeAmount: BN;
    }[]>;
    getDeregisteredServiceProviderEvents({ serviceType, owner, queryStartBlock }: GetEvent): Promise<{
        blockNumber: number;
        spID: number;
        serviceType: string;
        owner: any;
        endpoint: any;
        stakeAmount: BN;
    }[]>;
    getIncreasedStakeEvents({ owner, queryStartBlock }: {
        owner: string;
        queryStartBlock: number;
    }): Promise<{
        blockNumber: number;
        owner: any;
        increaseAmount: BN;
        newStakeAmount: BN;
    }[]>;
    getDecreasedStakeEvaluatedEvents({ owner, queryStartBlock }: {
        owner: string;
        queryStartBlock: number;
    }): Promise<{
        blockNumber: number;
        owner: any;
        decreaseAmount: BN;
        newStakeAmount: BN;
    }[]>;
    getDecreasedStakeRequestedEvents({ owner, queryStartBlock }: {
        owner: string;
        queryStartBlock: number;
    }): Promise<{
        blockNumber: number;
        owner: any;
        decreaseAmount: BN;
        lockupExpiryBlock: number;
    }[]>;
    getDecreasedStakeCancelledEvents({ owner, queryStartBlock }: {
        owner: string;
        queryStartBlock: number;
    }): Promise<{
        blockNumber: number;
        owner: any;
        decreaseAmount: BN;
        lockupExpiryBlock: number;
    }[]>;
    getDeregisteredService({ serviceType, spID, queryStartBlock }: {
        serviceType: string;
        spID: string;
        queryStartBlock: number;
    }): Promise<{
        endpoint: string;
        delegateOwnerWallet: string;
        owner?: string | undefined;
    }>;
    increaseStake(amount: BN): Promise<{
        txReceipt: import("web3-core").TransactionReceipt;
        tokenApproveReceipt: {
            txReceipt: import("web3-core").TransactionReceipt;
        };
    }>;
    /**
     * Makes a request to decrease stake
     * @param amount
     * @returns decrease stake lockup expiry block
     */
    requestDecreaseStake(amount: BN): Promise<number>;
    /**
     * Gets the pending decrease stake request for a given account
     * @param account wallet address to fetch for
     */
    getPendingDecreaseStakeRequest(account: string): Promise<{
        amount: BN;
        lockupExpiryBlock: number;
    }>;
    /**
     * Gets the pending decrease stake lockup duration
     */
    getDecreaseStakeLockupDuration(): Promise<number>;
    /**
     * Gets the deployer cut lockup duration
     */
    getDeployerCutLockupDuration(): Promise<number>;
    /**
     * Cancels the pending decrease stake request
     * @param account wallet address to cancel request for
     */
    cancelDecreaseStakeRequest(account: string): Promise<void>;
    /**
     * Fetches the pending decrease stake lockup expiry block for a user
     * @param account wallet address to fetch for
     */
    getLockupExpiry(account: string): Promise<number>;
    decreaseStake(): Promise<{
        txReceipt: import("web3-core").TransactionReceipt;
    }>;
    /**
     * Deregisters a service
     * @param serviceType
     * @param endpoint
     */
    deregister(serviceType: string, endpoint: string): Promise<{
        txReceipt: import("web3-core").TransactionReceipt;
        spID: number;
        serviceType: string;
        owner: any;
        endpoint: any;
    }>;
    getTotalServiceTypeProviders(serviceType: string): Promise<number>;
    getServiceProviderIdFromEndpoint(endpoint: string): Promise<number>;
    getServiceProviderInfo(serviceType: string, serviceId: number): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }>;
    getServiceEndpointInfo(serviceType: string, serviceId: number): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }>;
    getServiceProviderInfoFromEndpoint(endpoint: string): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }>;
    getServiceProviderIdsFromAddress(ownerAddress: string, serviceType: string): Promise<number[]>;
    getServiceProviderIdFromAddress(ownerAddress: string, serviceType: string): Promise<number>;
    getServiceEndpointInfoFromAddress(ownerAddress: string, serviceType: string): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }[]>;
    /**
     * Returns all service providers of requested `serviceType`
     * Returns array of objects with schema { blockNumber, delegateOwnerWallet, endpoint, owner, spID, type }
     */
    getServiceProviderList(serviceType: string): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }[]>;
    updateDecreaseStakeLockupDuration(duration: string): Promise<import("web3-core").TransactionReceipt>;
    getServiceProviderDetails(serviceProviderAddress: string): Promise<{
        deployerCut: number;
        deployerStake: BN;
        maxAccountStake: BN;
        minAccountStake: BN;
        numberOfEndpoints: number;
        validBounds: any;
    }>;
    updateDelegateOwnerWallet(serviceType: string, endpoint: string, updatedDelegateOwnerWallet: string): Promise<import("web3-core").TransactionReceipt>;
    updateEndpoint(serviceType: string, oldEndpoint: string, newEndpoint: string): Promise<import("web3-core").TransactionReceipt>;
    requestUpdateDeployerCut(ownerAddress: string, deployerCut: string): Promise<import("web3-core").TransactionReceipt>;
    getPendingUpdateDeployerCutRequest(ownerAddress: string): Promise<{
        lockupExpiryBlock: number;
        newDeployerCut: number;
    }>;
    cancelUpdateDeployerCut(ownerAddress: string): Promise<import("web3-core").TransactionReceipt>;
    updateDeployerCut(ownerAddress: string): Promise<import("web3-core").TransactionReceipt>;
    updateServiceProviderStake(ownerAddress: string, newAmount: string): Promise<import("web3-core").TransactionReceipt>;
}
export {};
