import type { Type } from 'ts-gems';
import { OpraSchema } from '../../schema/index.js';
import { DocumentInitContext } from '../common/document-init-context.js';
import { WSApi } from '../ws/ws-api.js';
import { WSController } from '../ws/ws-controller.js';
import { WSOperation } from '../ws/ws-operation.js';
export declare namespace WSApiFactory {
    interface InitArguments extends WSApi.InitArguments {
        controllers: Type[] | any[] | ((parent: any) => any) | OpraSchema.WSApi['controllers'];
    }
}
/**
 * @class WSApiFactory
 */
export declare class WSApiFactory {
    /**
     * Generates MQApi
     * @param context
     * @param init
     */
    static createApi(context: DocumentInitContext, init: WSApiFactory.InitArguments): Promise<WSApi>;
    protected static _createController(context: DocumentInitContext, parent: WSApi, thunk: Type | object | Function | OpraSchema.WSController, name?: string): Promise<WSController | undefined | void>;
    /**
     * Initializes WSOperation
     * @param context
     * @param operation
     * @param metadata
     * @protected
     */
    protected static _initWSOperation(context: DocumentInitContext, operation: WSOperation, metadata: WSOperation.Metadata | OpraSchema.WSOperation): Promise<void>;
}
