import type { Hedgehog as HedgehogBase } from '@audius/hedgehog';
import type { provider } from 'web3-core';
import { Account } from './api/Account';
import { File } from './api/File';
import { Notifications } from './api/Notifications';
import { Playlists } from './api/Playlist';
import { Reactions } from './api/Reactions';
import { Rewards } from './api/Rewards';
import { ServiceProvider } from './api/ServiceProvider';
import { Track } from './api/Track';
import { Users } from './api/Users';
import { EntityManager } from './api/entityManager';
import { Comstock } from './services/comstock';
import { CreatorNode, CreatorNodeConfig } from './services/creatorNode';
import { AudiusContracts } from './services/dataContracts';
import { DiscoveryProvider, DiscoveryProviderConfig } from './services/discoveryProvider';
import { EthContracts } from './services/ethContracts';
import { EthWeb3Config, EthWeb3Manager } from './services/ethWeb3Manager';
import { HedgehogConfig } from './services/hedgehog';
import { IdentityService } from './services/identity';
import { Schemas } from './services/schemaValidator';
import { SolanaWeb3Manager, SolanaUtils, SolanaWeb3Config } from './services/solana';
import type { MonitoringCallbacks } from './services/types';
import { Web3Config, Web3Manager } from './services/web3Manager';
import { ProxyWormhole, ProxyWormholeConfig } from './services/wormhole/ProxyWormhole';
import { UserStateManager } from './userStateManager';
import type { Logger, Nullable } from './utils';
import { LocalStorage } from './utils/localStorage';
declare type LibsIdentityServiceConfig = {
    url: string;
    useHedgehogLocalStorage: boolean;
};
declare type LibsHedgehogConfig = Omit<HedgehogConfig, 'identityService' | 'localStorage'>;
declare type LibsSolanaWeb3Config = SolanaWeb3Config & {
    feePayerSecretKeys?: Uint8Array[];
};
declare type LibsDiscoveryProviderConfig = Omit<DiscoveryProviderConfig, 'userStateManager' | 'ethContracts' | 'web3Manager'>;
declare type LibsComstockConfig = {
    url: string;
};
declare type AudiusLibsConfig = {
    web3Config: Web3Config;
    ethWeb3Config: EthWeb3Config;
    solanaWeb3Config: SolanaWeb3Config;
    identityServiceConfig: LibsIdentityServiceConfig;
    discoveryProviderConfig: LibsDiscoveryProviderConfig;
    creatorNodeConfig: CreatorNodeConfig;
    comstockConfig: LibsComstockConfig;
    wormholeConfig: ProxyWormholeConfig;
    hedgehogConfig: LibsHedgehogConfig;
    isServer: boolean;
    logger: Logger;
    isDebug: boolean;
    preferHigherPatchForPrimary: boolean;
    preferHigherPatchForSecondaries: boolean;
    localStorage: LocalStorage;
};
export declare class AudiusLibs {
    /**
     * Configures an identity service wrapper
     */
    static configIdentityService(url: string, useHedgehogLocalStorage?: boolean): {
        url: string;
        useHedgehogLocalStorage: boolean;
    };
    /**
     * Configures an identity service wrapper
     */
    static configComstock(url: string): {
        url: string;
    };
    static configCreatorNode(fallbackUrl: string, passList?: Nullable<Set<string>>, blockList?: Nullable<Set<string>>, monitoringCallbacks?: Nullable<MonitoringCallbacks>): {
        fallbackUrl: string;
        passList: Nullable<Set<string>>;
        blockList: Nullable<Set<string>>;
        monitoringCallbacks: Nullable<MonitoringCallbacks>;
    };
    /**
     * Configures an external web3 to use with Audius Libs (e.g. MetaMask)
     */
    static configExternalWeb3(registryAddress: string, web3Provider: string, networkId: string, walletOverride?: Nullable<string>, entityManagerAddress?: Nullable<string>): Promise<{
        registryAddress: string;
        entityManagerAddress: Nullable<string>;
        useExternalWeb3: boolean;
        externalWeb3Config: {
            web3: import("web3").default;
            ownerWallet: string | undefined;
        };
    }>;
    /**
     * Configures an internal web3 to use (via Hedgehog)
     */
    static configInternalWeb3(registryAddress: string, providers: provider, privateKey?: string, entityManagerAddress?: string): {
        registryAddress: string;
        entityManagerAddress: string | undefined;
        useExternalWeb3: boolean;
        internalWeb3Config: {
            web3ProviderEndpoints: string[] | (import("web3-core").HttpProvider | import("web3-core").AbstractProvider | import("web3-core").IpcProvider | import("web3-core").WebsocketProvider | null)[] | (import("web3-core").HttpProvider & any[]) | (import("web3-core").AbstractProvider & any[]) | (import("web3-core").IpcProvider & any[]) | (import("web3-core").WebsocketProvider & any[]);
            privateKey: string | undefined;
        };
    };
    /**
     * Configures an eth web3
     */
    static configEthWeb3(tokenAddress: string, registryAddress: string, providers: provider, ownerWallet?: string, claimDistributionContractAddress?: string, wormholeContractAddress?: string): {
        tokenAddress: string;
        registryAddress: string;
        providers: string[] | (import("web3-core").HttpProvider | import("web3-core").AbstractProvider | import("web3-core").IpcProvider | import("web3-core").WebsocketProvider | null)[] | (import("web3-core").HttpProvider & any[]) | (import("web3-core").AbstractProvider & any[]) | (import("web3-core").IpcProvider & any[]) | (import("web3-core").WebsocketProvider & any[]);
        ownerWallet: string | undefined;
        claimDistributionContractAddress: string | undefined;
        wormholeContractAddress: string | undefined;
    };
    /**
     * Configures proxy-only wormhole
     */
    static configWormhole(): {};
    /**
     * Configures a solana web3
     */
    static configSolanaWeb3({ solanaClusterEndpoint, mintAddress, usdcMintAddress, solanaTokenAddress, feePayerAddress, claimableTokenProgramAddress, rewardsManagerProgramId, rewardsManagerProgramPDA, rewardsManagerTokenPDA, paymentRouterProgramId, useRelay, feePayerSecretKeys, confirmationTimeout }: LibsSolanaWeb3Config): SolanaWeb3Config;
    version: string;
    ethWeb3Config: EthWeb3Config;
    web3Config: Web3Config;
    solanaWeb3Config: SolanaWeb3Config;
    identityServiceConfig: LibsIdentityServiceConfig;
    creatorNodeConfig: CreatorNodeConfig;
    discoveryProviderConfig: LibsDiscoveryProviderConfig;
    comstockConfig: LibsComstockConfig;
    wormholeConfig: ProxyWormholeConfig;
    hedgehogConfig: LibsHedgehogConfig;
    isServer: boolean;
    isDebug: boolean;
    logger: Logger;
    userStateManager: Nullable<UserStateManager>;
    identityService: Nullable<IdentityService>;
    hedgehog: Nullable<HedgehogBase>;
    discoveryProvider: Nullable<DiscoveryProvider>;
    ethWeb3Manager: Nullable<EthWeb3Manager>;
    ethContracts: Nullable<EthContracts>;
    web3Manager: Nullable<Web3Manager>;
    solanaWeb3Manager: Nullable<SolanaWeb3Manager>;
    contracts: Nullable<AudiusContracts>;
    wormholeClient: Nullable<ProxyWormhole>;
    creatorNode: Nullable<CreatorNode>;
    schemas?: Schemas;
    comstock: Nullable<Comstock>;
    ServiceProvider: Nullable<ServiceProvider>;
    Account: Nullable<Account>;
    User: Nullable<Users>;
    Track: Nullable<Track>;
    Playlist: Nullable<Playlists>;
    File: Nullable<File>;
    Rewards: Nullable<Rewards>;
    Reactions: Nullable<Reactions>;
    Notifications: Nullable<Notifications>;
    EntityManager: Nullable<EntityManager>;
    preferHigherPatchForPrimary: boolean;
    preferHigherPatchForSecondaries: boolean;
    localStorage: LocalStorage;
    /**
     * Constructs an Audius Libs instance with configs.
     * Unless default-valued, all configs are optional.
     * @example
     *  const audius = AudiusLibs({
     *    discoveryProviderConfig: {},
     *    creatorNodeConfig: configCreatorNode('https://my-creator.node')
     *  })
     *  await audius.init()
     */
    constructor({ web3Config, ethWeb3Config, solanaWeb3Config, identityServiceConfig, discoveryProviderConfig, creatorNodeConfig, comstockConfig, wormholeConfig, hedgehogConfig, isServer, logger, isDebug, preferHigherPatchForPrimary, preferHigherPatchForSecondaries, localStorage }: AudiusLibsConfig);
    /** Init services based on presence of a relevant config. */
    init(): Promise<void>;
}
export { SolanaUtils };
export { Utils } from './utils';
export { SanityChecks } from './sanityChecks';
export { RewardsAttester } from './services/solana';
