import { SmuleChanelData, PerformanceData, SmuleUserIdData, SmuleUserData, SmuleUserSongData } from './models/ashi-smule-interfaces';
import { SmuleFilter } from './models/ashi-smule-filter-interface';
export declare class ProxyData {
    host: string;
    port: number;
    country: string;
    constructor(host: string, port: number, country: string);
}
export interface IAshiSmulFetchData {
    getHtmlBody(url: string): Promise<any>;
    getJson(url: string): Promise<any>;
    addAvoidCurrentProxy(): void;
}
export declare class AshiSmulUniversalFetchData implements IAshiSmulFetchData {
    private ky;
    private getData;
    getHtmlBody(url: string): Promise<any>;
    getJson(url: string): Promise<any>;
    addAvoidCurrentProxy(): void;
}
export declare class AshiSmule {
    protected readonly smuleBaseUrl = "https://www.smule.com/";
    protected readonly chanelUrlBase = "s/profile/performance/USER_NAME/sing";
    protected readonly favUrlBase = "USER_NAME/favorites/json";
    protected readonly offsetParam = "?offset=";
    protected readonly sizeParam = "&size=";
    protected httpData: IAshiSmulFetchData;
    constructor(httpData: IAshiSmulFetchData | null);
    protected log(data: any): void;
    protected getOffsetSizeParamUrlPart(offset: number, size?: number): string;
    protected fixUserNameInUrl(url: string, user: string): string;
    protected getUrl(urlPart: string, user: string, startAt: number, size?: number): string;
    protected getData(urlPart: string, user: string, startAt: number, retryCount?: number): Promise<SmuleChanelData | null>;
    protected getAllData(urlPart: string, user: string, expandCollabs: boolean, chunkFetched?: (dataChunk: SmuleChanelData) => boolean): Promise<PerformanceData[]>;
    protected isSoloForOthers(perf: PerformanceData): boolean | "" | null | undefined;
    protected getCollabsFetchUrl(key: string, startAt: number): string;
    protected getCollabsForPerf(performanceData: PerformanceData | null, attempt?: number): Promise<PerformanceData[]>;
    protected fixUser(user?: SmuleUserIdData): Promise<void>;
    protected fixFilter(filter: SmuleFilter): Promise<void>;
    protected isOnlyOneMatch(filter?: SmuleFilter): boolean;
    protected canUseSong(song: PerformanceData, filter?: SmuleFilter): boolean;
    protected filterList(songs?: PerformanceData[], filter?: SmuleFilter): PerformanceData[];
    protected getDataFiltered(urlPart: string, user: string, filter: SmuleFilter, expandCollabs: boolean, chunkFetched?: () => boolean): Promise<PerformanceData[]>;
    protected getWebUrls(urlPart: string, user: string, startAt: number): Promise<{
        url_list: string[];
        next_offset?: number;
    }>;
    getUser(user: string, attempt?: number): Promise<SmuleUserData | null>;
    getUsers(users: string[]): Promise<Array<SmuleUserData | null>>;
    getUserId(user: string): Promise<number>;
    getUserIds(users: string[]): Promise<SmuleUserIdData[]>;
    getChanelData(user: string, startAt: number): Promise<SmuleChanelData | null>;
    getFavData(user: string, startAt: number): Promise<SmuleChanelData | null>;
    getAllChanelData(user: string, expandCollabs: boolean, chunkFetched?: (dataChunk: SmuleChanelData) => boolean): Promise<PerformanceData[]>;
    getAllFavData(user: string, expandCollabs: boolean, chunkFetched?: (dataChunk: SmuleChanelData) => boolean): Promise<PerformanceData[]>;
    getChanelWebUrls(user: string, startAt: number): Promise<{
        url_list: string[];
        next_offset?: number;
    }>;
    getFavWebUrls(user: string, startAt: number): Promise<{
        url_list: string[];
        next_offset?: number;
    }>;
    getChanelDataFiltered(user: string, filter: SmuleFilter, expandCollabs: boolean, chunkFetched?: () => boolean): Promise<PerformanceData[]>;
    getFavDataFiltered(user: string, filter: SmuleFilter, expandCollabs: boolean, chunkFetched?: () => boolean): Promise<PerformanceData[]>;
    private getPerformanceData;
    getSingerNames(performanceData: PerformanceData | null): string[];
    getCollaborations(url: string): Promise<PerformanceData[]>;
    expandCollaborations(perfomances: PerformanceData[]): Promise<PerformanceData[]>;
    private mergeLists;
    logSongInfo(perf: PerformanceData): void;
    private updateSongs;
    loadUserSongData(songData: SmuleUserSongData, user?: string): Promise<void>;
    updateMediaUrl(perf: PerformanceData): Promise<void>;
    private getDownloadUrl;
    private sanitizeFileName;
    getMediaFilePath(user: string, perf: PerformanceData): string;
    getAudioFilePath(user: string, perf: PerformanceData): string | undefined;
    getVideoFilePath(user: string, perf: PerformanceData): string | undefined;
    protected addPerfs(toPerfs: PerformanceData[], fromPerfs: PerformanceData[], checkIfExist: boolean): void;
    getAllPerformances(data: SmuleUserSongData): PerformanceData[];
    getLinksNeededPerfs(data: SmuleUserSongData, force?: boolean): PerformanceData[];
}
