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