import Koa from "koa";
import * as os from "os";
import "reflect-metadata";
import { Logger } from "log4js";
import { Server } from "http";
import { Class } from "../utils";
import { Router, WsServer } from "./router";
import { V11 } from "../service/V11";
import { V12 } from "../service/V12";
import { LogLevel } from "../types";
import { Adapter } from "../adapter";
import { ChildProcess } from "child_process";
export interface KoaOptions {
    env?: string;
    keys?: string[];
    proxy?: boolean;
    subdomainOffset?: number;
    proxyIpHeader?: string;
    maxIpsCount?: number;
}
type AdapterClass = Class<Adapter>;
export declare class App extends Koa {
    config: Required<App.Config>;
    httpServer: Server;
    isStarted: boolean;
    logger: Logger;
    static configDir: string;
    static get configPath(): string;
    static get dataDir(): string;
    static get logFile(): string;
    adapters: Map<string, Adapter>;
    ws: WsServer;
    router: Router;
    get info(): {
        system_platform: NodeJS.Platform;
        system_arch: NodeJS.Architecture;
        system_cpus: os.CpuInfo[];
        system_version: string;
        system_uptime: number;
        username: string;
        total_memory: number;
        free_memory: number;
        process_id: number;
        process_parent_id: number;
        process_cwd: string;
        process_use_memory: number;
        node_version: string;
        sdk_version: any;
        uptime: number;
    };
    constructor(config?: App.Config);
    init(): void;
    getLogger(patform: string): Logger;
    private getConfigMaps;
    private createOneBots;
    addAccount<P extends string>(platform: P, uin: string, config: Adapter.Configs[P]): void;
    updateAccount<P extends string>(platform: P, uin: string, config: Adapter.Configs[P]): void;
    removeAccount(platform: string, uin: string, force?: boolean): void;
    createOneBot<P extends string>(platform: P, uin: string, config: Adapter.Config): import("..").OneBot<any>;
    get oneBots(): import("..").OneBot<any>[];
    findOrCreateAdapter<P extends string>(platform: P, config?: Adapter.Config): void | Adapter<string, any>;
    start(): Promise<void>;
    reload(config: App.Config): Promise<void>;
    stop(): Promise<void>;
}
export declare function createOnebots(config?: App.Config | string, cp?: ChildProcess | null): App;
export declare function defineConfig(config: App.Config): App.Config;
export declare namespace App {
    const ADAPTERS: Map<string, AdapterClass>;
    interface Adapters<P extends string = string> extends Map<P, Adapter<P>> {
    }
    type Config = {
        port?: number;
        path?: string;
        timeout?: number;
        username?: string;
        password?: string;
        log_level?: LogLevel;
        general?: {
            V11?: V11.Config;
            V12?: V12.Config;
        };
    } & KoaOptions & Record<`${string}.${string}`, Adapter.Config>;
    const defaultConfig: Config;
    function registerAdapter(name: string): void;
    function registerAdapter<T extends string>(platform: T, adapter: AdapterClass): void;
    function loadAdapter<T extends string>(platform: string): Class<Adapter<T, any>>;
}
export {};
