import type { ServiceWithEndpoint } from '../utils';
import { Base, BaseConstructorArgs } from './base';
/**
 * API methods to interact with Audius service providers.
 * Types of services include:
 *    - Content Node (host creator content)
 *    - Discovery Node (index and make content queryable)
 * Retrieving lists of available services, etc. are found here.
 */
export declare class ServiceProvider extends Base {
    cachedStorageNodes: Array<{
        owner: any;
        endpoint: string;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: string;
    }>;
    constructor(...services: BaseConstructorArgs);
    listCreatorNodes(): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }[]>;
    /**
     * Selects numNodes storage nodes from the list of registered storage nodes on chain, optionally ordering them (descending) by rendezvous score.
     * TODO: This might want to handle blocklist/allowlist, latency checks, health checks, etc... but for now it just uses all nodes.
     *       CN selection without health checks might be a separate part of SDK anyway.
     */
    autoSelectStorageV2Nodes(numNodes?: number, userWallet?: string, logger?: Console): Promise<string[]>;
    listDiscoveryProviders(): Promise<{
        owner: any;
        endpoint: any;
        spID: number;
        type: string;
        blockNumber: number;
        delegateOwnerWallet: any;
    }[]>;
    /**
     * Returns a list of discovery nodes of size `quorumSize` that belong to
     * unique service operators.
     * Throws if unable to find a large enough list.
     */
    getUniquelyOwnedDiscoveryNodes({ quorumSize, discoveryNodes, filter, useWhitelist }: {
        quorumSize: number;
        discoveryNodes?: ServiceWithEndpoint[];
        filter?: (node: ServiceWithEndpoint) => Promise<boolean>;
        useWhitelist?: boolean;
    }): Promise<string[]>;
}
