import { IServerConfigOptions, IGypsumConfigurations } from './config';
import { Model } from './models/model';
import { Context } from './context';
import { MongoModel, FileModel } from './models';
import { App } from './app';
import { IAuthEnvConfig } from './auth/config';
import { IStorageEnvConfig } from './storage/config';
export { IGypsumConfigurations };
export interface IGypsumUseOptions {
    models?: any[];
}
export interface IGypsumConfigOptions {
    auth?: IAuthEnvConfig;
    storage?: IStorageEnvConfig;
    config?: IGypsumConfigurations;
}
export interface IGypsumBootstrapOptions {
    apps?: typeof App[];
    middlewares?: Function;
    hooks?: ((ctx: Context, ...args: any[]) => void)[];
    users?: typeof MongoModel;
    storage?: typeof Model;
}
export interface IGypsum {
    root: string;
    env: string;
    dev: boolean;
    get: (name: keyof IServerConfigOptions) => any;
    set: <T extends keyof IServerConfigOptions, U extends IServerConfigOptions[T]>(name: T, value: U) => IGypsum;
    getCurrentContext: () => Context;
    getModel: (modelName: string, appName: string) => Model | MongoModel | FileModel | undefined;
    config: (config: IGypsumConfigOptions) => IGypsum;
    bootstrap: (options: IGypsumBootstrapOptions) => void;
}
export declare const Gypsum: IGypsum;
