import * as _asign_caiyun_core from '@asign/caiyun-core';
import { Caiyun, M } from '@asign/caiyun-core';
import * as _asign_types from '@asign/types';
import { LoggerType } from '@asign/types';
import { LoggerPushData } from '@asunajs/utils';
export { createLogger, sleep } from '@asunajs/utils';
import { Storage } from '@asign/unstorage';

type Config = M['config'];
type Option = {
    localStorage?: Storage;
    logger: LoggerType;
    jwtToken?: string;
};
type UserConfig = {
    config: Caiyun[];
    message?: Record<string, any>;
    path?: string;
};

declare function waitToNextHour(delay?: number): number;
declare function useExchange(config: Config, message?: Record<string, any>): Promise<{
    exchange: (ids: number[]) => Promise<void>;
    sendMessage: (msg?: string) => Promise<void>;
    waitToNextHour: typeof waitToNextHour;
    exchangeQuickly: (prizeId: number, prizeName?: string) => Promise<boolean>;
}>;
type MultipleConfig = {
    user: Config;
    ids: number[];
};
declare function useMultiExchange(config: MultipleConfig[], message: Record<string, any>, { isAsync, delay }: {
    isAsync?: boolean;
    delay?: number;
}): Promise<void[]>;

declare function runHc1t(config: Caiyun, pushData?: LoggerPushData[]): Promise<void>;

declare function init(userConfig: Caiyun, { logger, localStorage, jwtToken }: Option): Promise<{
    $?: undefined;
    logger?: undefined;
    jwtToken?: undefined;
} | {
    $: M;
    logger: _asign_types.LoggerType;
    jwtToken: string;
}>;
declare function loadConfig(inputPath?: string): Promise<{
    config: (Caiyun & {
        phone: string;
        token: string;
        platform?: string;
        userId?: string;
        expire?: number;
    })[];
    message: Record<string, any>;
    path: string;
}>;
declare function pushMessage({ pushData, message }: {
    pushData: LoggerPushData[];
    message: Record<string, any>;
}): Promise<void>;

declare function main(userConfig: Caiyun, option?: Option): Promise<{
    $: _asign_caiyun_core.M;
    isNoLogin: boolean;
    newAuth?: undefined;
} | {
    newAuth: string;
    $: _asign_caiyun_core.M;
    isNoLogin?: undefined;
}>;
declare function getConfig(inputPath?: string | UserConfig): Promise<UserConfig>;
declare function run(config?: UserConfig): Promise<void>;
declare function run(inputPath?: string): Promise<void>;
declare function pushExpiredAuth(expiredAuth: string[], message: Record<string, any>): Promise<void>;
declare function _run(config: Caiyun[], logger: LoggerType, path: string): Promise<{
    expiredAuth: string[];
}>;

export { _run, getConfig, init, loadConfig, main, pushExpiredAuth, pushMessage, run, runHc1t, useExchange, useMultiExchange };
