import { z } from 'zod';
import { AntiAbuseOracleService } from './services/AntiAbuseOracle/types';
import type { AntiAbuseOracleSelectorService } from './services/AntiAbuseOracleSelector/types';
import type { AuthService } from './services/Auth';
import type { DiscoveryNodeSelectorService } from './services/DiscoveryNodeSelector';
import type { EntityManagerService } from './services/EntityManager';
import type { LoggerService } from './services/Logger';
import type { RewardManagerClient, ClaimableTokensClient, SolanaRelayService, SolanaWalletAdapter } from './services/Solana';
import type { StorageService } from './services/Storage';
import type { StorageNodeSelectorService } from './services/StorageNodeSelector';
export declare type ServicesContainer = {
    /**
     * Service used to choose discovery node
     */
    discoveryNodeSelector: DiscoveryNodeSelectorService;
    /**
     * Service used to choose storage node
     */
    storageNodeSelector: StorageNodeSelectorService;
    /**
     * Service used to write and update entities on chain
     */
    entityManager: EntityManagerService;
    /**
     * Service used to store and retrieve content e.g. tracks and images
     */
    storage: StorageService;
    /**
     * Helpers to faciliate requests that require signatures or encryption
     */
    auth: AuthService;
    /**
     * Service used to log and set a desired log level
     */
    logger: LoggerService;
    /**
     * Service used to interact with the Solana relay
     */
    solanaRelay: SolanaRelayService;
    /**
     * Service used to interact with the Solana blockchain
     */
    solanaWalletAdapter: SolanaWalletAdapter;
    /**
     * Claimable Tokens Program client for Solana
     */
    claimableTokensClient: ClaimableTokensClient;
    /**
     * Reward Manager Program client for Solana
     */
    rewardManagerClient: RewardManagerClient;
    /**
     * Service used to choose a healthy Anti Abuse Oracle
     */
    antiAbuseOracleSelector: AntiAbuseOracleSelectorService;
    /**
     * Service used to interact with Anti Abuse Oracle
     */
    antiAbuseOracle: AntiAbuseOracleService;
};
export declare const SdkConfigSchema: z.ZodUnion<[z.ZodObject<{
    /**
     * Your app name
     */
    appName: z.ZodOptional<z.ZodString>;
    /**
     * Services injection
     */
    services: z.ZodOptional<z.ZodType<Partial<ServicesContainer>, z.ZodTypeDef, Partial<ServicesContainer>>>;
    /**
     * API key, required for writes
     */
    apiKey: z.ZodString;
    /**
     * API secret, required for writes
     */
    apiSecret: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    apiKey: string;
    appName?: string | undefined;
    services?: Partial<ServicesContainer> | undefined;
    apiSecret?: string | undefined;
}, {
    apiKey: string;
    appName?: string | undefined;
    services?: Partial<ServicesContainer> | undefined;
    apiSecret?: string | undefined;
}>, z.ZodObject<{
    /**
     * Your app name
     */
    appName: z.ZodString;
    /**
     * Services injection
     */
    services: z.ZodOptional<z.ZodType<Partial<ServicesContainer>, z.ZodTypeDef, Partial<ServicesContainer>>>;
    /**
     * API key, required for writes
     */
    apiKey: z.ZodOptional<z.ZodString>;
    /**
     * API secret, required for writes
     */
    apiSecret: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    appName: string;
    services?: Partial<ServicesContainer> | undefined;
    apiKey?: string | undefined;
    apiSecret?: string | undefined;
}, {
    appName: string;
    services?: Partial<ServicesContainer> | undefined;
    apiKey?: string | undefined;
    apiSecret?: string | undefined;
}>]>;
export declare type SdkConfig = z.infer<typeof SdkConfigSchema>;
